mirror of
https://github.com/Lastorder-DC/rhymix.git
synced 2026-05-11 21:12:15 +09:00
merge sandbox to trunk for 1.4.4.2
git-svn-id: http://xe-core.googlecode.com/svn/trunk@7944 201d5d3c-b55e-5fd7-737f-ddc643e51545
This commit is contained in:
parent
9139515e57
commit
f59deeb270
131 changed files with 11605 additions and 4218 deletions
|
|
@ -1,13 +1,13 @@
|
|||
RewriteEngine On
|
||||
|
||||
# reserve XE Layout Template Source File (*.html)
|
||||
RewriteRule ^layouts/(.+)/(.+)\.html$ ./index.php [L]
|
||||
RewriteRule ^(layouts|m.layouts)/(.+)/(.+)\.html$ ./index.php [L]
|
||||
|
||||
# static files
|
||||
RewriteCond %{SCRIPT_FILENAME} !-f
|
||||
RewriteRule ^(.+)/files/(member_extra_info|attach|cache|faceOff)/(.*) ./files/$2/$3 [L]
|
||||
RewriteCond %{SCRIPT_FILENAME} !-f
|
||||
RewriteRule ^([a-zA-Z0-9_]+)(/[a-zA-Z0-9_]+(/entry)?)?/(files|modules|common|widgets|widgetStyle|layouts|addons)/(.*) ./$4/$5 [L]
|
||||
RewriteRule ^(.+)/(files|modules|common|widgets|widgetStyle|layouts|m.layouts|addons)/(.*) ./$2/$3 [L]
|
||||
|
||||
# rss , blogAPI
|
||||
RewriteRule ^(rss|atom)$ ./index.php?module=rss&act=$1 [L]
|
||||
|
|
|
|||
|
|
@ -7,6 +7,6 @@
|
|||
* @brief 자동 링크 애드온
|
||||
**/
|
||||
if($called_position == 'after_module_proc' && Context::getResponseMethod()!="XMLRPC") {
|
||||
Context::addJsFile('./addons/autolink/autolink.js');
|
||||
Context::addJsFile('./addons/autolink/autolink.js', false ,'', null, 'body');
|
||||
}
|
||||
?>
|
||||
|
|
|
|||
|
|
@ -40,7 +40,7 @@
|
|||
if(Context::getRequestMethod()!='XMLRPC' && Context::getRequestMethod()!=='JSON')
|
||||
{
|
||||
Context::addHtmlHeader('<script type="text/javascript"> var captchaTargetAct = new Array("'.implode('","',$target_acts).'"); </script>');
|
||||
Context::addJsFile('./addons/captcha/captcha.js',false);
|
||||
Context::addJsFile('./addons/captcha/captcha.js',false, '', null, 'body');
|
||||
}
|
||||
|
||||
// 게시판/ 이슈트래커의 글쓰기/댓글쓰기 액션 호출시 세션 비교
|
||||
|
|
|
|||
|
|
@ -9,6 +9,6 @@
|
|||
|
||||
if($called_position == 'after_module_proc' && Context::getResponseMethod()=="HTML") {
|
||||
Context::loadJavascriptPlugin('ui');
|
||||
Context::addJsFile('./addons/resize_image/js/resize_image.min.js',false);
|
||||
Context::addJsFile('./addons/resize_image/js/resize_image.min.js',false, '',null, 'body');
|
||||
}
|
||||
?>
|
||||
|
|
@ -135,6 +135,9 @@
|
|||
|
||||
// set authentication information in Context and session
|
||||
if(Context::isInstalled()) {
|
||||
$oModuleModel = &getModel('module');
|
||||
$oModuleModel->loadModuleExtends();
|
||||
|
||||
$oMemberModel = &getModel('member');
|
||||
$oMemberController = &getController('member');
|
||||
|
||||
|
|
@ -215,8 +218,6 @@
|
|||
if(file_exists($db_config_file)) @include($db_config_file);
|
||||
|
||||
if(!$db_info->time_zone) $db_info->time_zone = date("O");
|
||||
if(!$db_info->use_optimizer || $db_info->use_optimizer != 'N') $db_info->use_optimizer = 'Y';
|
||||
else $db_info->use_optimizer = 'N';
|
||||
if(!$db_info->qmail_compatibility || $db_info->qmail_compatibility != 'Y') $db_info->qmail_compatibility = 'N';
|
||||
else $db_info->qmail_compatibility = 'Y';
|
||||
if(!$db_info->use_ssl) $db_info->use_ssl = 'none';
|
||||
|
|
@ -1157,15 +1158,16 @@
|
|||
/**
|
||||
* @brief js file을 추가
|
||||
**/
|
||||
function addJsFile($file, $optimized = true, $targetie = '',$index=null) {
|
||||
function addJsFile($file, $optimized = false, $targetie = '',$index=null, $type="head") {
|
||||
$oContext = &Context::getInstance();
|
||||
return $oContext->_addJsFile($file, $optimized, $targetie,$index);
|
||||
return $oContext->_addJsFile($file, $targetie,$index,$type);
|
||||
}
|
||||
|
||||
/**
|
||||
* @brief js file을 추가
|
||||
**/
|
||||
function _addJsFile($file, $optimized = true, $targetie = '',$index=null) {
|
||||
function _addJsFile($file, $targetie = '',$index=null,$type="head") {
|
||||
if($type != 'body') $type = 'head';
|
||||
if(strpos($file,'://')===false && $file{0}!='/' && $file{0}!='.') $file = './'.$file;
|
||||
$file = preg_replace('@/\./|(?<!:)\/\/@', '/', $file);
|
||||
while(strpos($file,'/../')) $file = preg_replace('/\/([^\/]+)\/\.\.\//s','/',$file,1);
|
||||
|
|
@ -1174,23 +1176,23 @@
|
|||
|
||||
if(is_null($index)) $index=count($this->js_files);
|
||||
for($i=$index;array_key_exists($i,$this->js_files);$i++);
|
||||
$this->js_files[$i] = array('file' => $file, 'optimized' => $optimized, 'targetie' => $targetie);
|
||||
$this->js_files[$i] = array('file' => $file, 'targetie' => $targetie, 'type'=> $type);
|
||||
}
|
||||
|
||||
/**
|
||||
* @brief js file을 제거
|
||||
**/
|
||||
function unloadJsFile($file, $optimized = true, $targetie = '') {
|
||||
function unloadJsFile($file, $optimized = false, $targetie = '') {
|
||||
$oContext = &Context::getInstance();
|
||||
return $oContext->_unloadJsFile($file, $optimized, $targetie);
|
||||
return $oContext->_unloadJsFile($file, $targetie);
|
||||
}
|
||||
|
||||
/**
|
||||
* @brief js file을 제거
|
||||
**/
|
||||
function _unloadJsFile($file, $optimized, $targetie) {
|
||||
function _unloadJsFile($file, $targetie) {
|
||||
foreach($this->js_files as $key => $val) {
|
||||
if(realpath($val['file'])==realpath($file) && $val['optimized'] == $optimized && $val['targetie'] == $targetie) {
|
||||
if(realpath($val['file'])==realpath($file) && $val['targetie'] == $targetie) {
|
||||
unset($this->js_files[$key]);
|
||||
return;
|
||||
}
|
||||
|
|
@ -1229,6 +1231,7 @@
|
|||
{
|
||||
if(in_array($files[$i]['file'], $filenames))
|
||||
unset($files[$i]);
|
||||
|
||||
$filenames[] = $files[$i]['file'];
|
||||
}
|
||||
|
||||
|
|
@ -1238,32 +1241,37 @@
|
|||
/**
|
||||
* @brief js file 목록을 return
|
||||
**/
|
||||
function getJsFile() {
|
||||
function getJsFile($type='head') {
|
||||
$oContext = &Context::getInstance();
|
||||
return $oContext->_getJsFile();
|
||||
return $oContext->_getJsFile($type);
|
||||
}
|
||||
|
||||
/**
|
||||
* @brief js file 목록을 return
|
||||
**/
|
||||
function _getJsFile() {
|
||||
require_once(_XE_PATH_."classes/optimizer/Optimizer.class.php");
|
||||
$oOptimizer = new Optimizer();
|
||||
return $oOptimizer->getOptimizedFiles($this->_getUniqueFileList($this->js_files), "js");
|
||||
function _getJsFile($type) {
|
||||
$_files = array();
|
||||
$files = $this->_getUniqueFileList($this->js_files);
|
||||
foreach($files as $k => $v)
|
||||
{
|
||||
if($v['type'] == $type) $_files[] = $v;
|
||||
}
|
||||
|
||||
return $_files;
|
||||
}
|
||||
|
||||
/**
|
||||
* @brief CSS file 추가
|
||||
**/
|
||||
function addCSSFile($file, $optimized = true, $media = 'all', $targetie = '',$index = null) {
|
||||
function addCSSFile($file, $optimized = false, $media = 'all', $targetie = '',$index = null) {
|
||||
$oContext = &Context::getInstance();
|
||||
return $oContext->_addCSSFile($file, $optimized, $media, $targetie,$index);
|
||||
return $oContext->_addCSSFile($file, $media, $targetie,$index);
|
||||
}
|
||||
|
||||
/**
|
||||
* @brief CSS file 추가
|
||||
**/
|
||||
function _addCSSFile($file, $optimized = true, $media = 'all', $targetie = '', $index = null) {
|
||||
function _addCSSFile($file, $media = 'all', $targetie = '', $index = null) {
|
||||
if(strpos($file,'://')===false && substr($file,0,1)!='/' && substr($file,0,1)!='.') $file = './'.$file;
|
||||
$file = str_replace(array('/./','//'),'/',$file);
|
||||
while(strpos($file,'/../')) $file = preg_replace('/\/([^\/]+)\/\.\.\//s','/',$file,1);
|
||||
|
|
@ -1274,23 +1282,23 @@
|
|||
for($i=$index;array_key_exists($i,$this->css_files);$i++);
|
||||
|
||||
//if(preg_match('/^http:\/\//i',$file)) $file = str_replace(realpath("."), ".", realpath($file));
|
||||
$this->css_files[$i] = array('file' => $file, 'optimized' => $optimized, 'media' => $media, 'targetie' => $targetie);
|
||||
$this->css_files[$i] = array('file' => $file, 'media' => $media, 'targetie' => $targetie);
|
||||
}
|
||||
|
||||
/**
|
||||
* @brief css file을 제거
|
||||
**/
|
||||
function unloadCSSFile($file, $optimized = true, $media = 'all', $targetie = '') {
|
||||
function unloadCSSFile($file, $optimized = false, $media = 'all', $targetie = '') {
|
||||
$oContext = &Context::getInstance();
|
||||
return $oContext->_unloadCSSFile($file, $optimized, $media, $targetie);
|
||||
return $oContext->_unloadCSSFile($file, $media, $targetie);
|
||||
}
|
||||
|
||||
/**
|
||||
* @brief css file을 제거
|
||||
**/
|
||||
function _unloadCSSFile($file, $optimized, $media, $targetie) {
|
||||
function _unloadCSSFile($file, $media, $targetie) {
|
||||
foreach($this->css_files as $key => $val) {
|
||||
if(realpath($val['file'])==realpath($file) && $val['optimized'] == $optimized && $val['media'] == $media && $val['targetie'] == $targetie) {
|
||||
if(realpath($val['file'])==realpath($file) && $val['media'] == $media && $val['targetie'] == $targetie) {
|
||||
unset($this->css_files[$key]);
|
||||
return;
|
||||
}
|
||||
|
|
@ -1321,9 +1329,8 @@
|
|||
* @brief CSS file 목록 return
|
||||
**/
|
||||
function _getCSSFile() {
|
||||
require_once(_XE_PATH_."classes/optimizer/Optimizer.class.php");
|
||||
$oOptimizer = new Optimizer();
|
||||
return $oOptimizer->getOptimizedFiles($this->_getUniqueFileList($this->css_files), "css");
|
||||
$files = $this->_getUniqueFileList($this->css_files);
|
||||
return $files;
|
||||
}
|
||||
|
||||
/**
|
||||
|
|
@ -1351,8 +1358,8 @@
|
|||
$filename = trim($list[$i]);
|
||||
if(!$filename) continue;
|
||||
if(substr($filename,0,2)=='./') $filename = substr($filename,2);
|
||||
if(preg_match('/\.js$/i',$filename)) $this->_addJsFile($plugin_path.$filename, true, '', null);
|
||||
elseif(preg_match('/\.css$/i',$filename)) $this->_addCSSFile($plugin_path.$filename, true, 'all','', null);
|
||||
if(preg_match('/\.js$/i',$filename)) $this->_addJsFile($plugin_path.$filename, '', null, 'body');
|
||||
elseif(preg_match('/\.css$/i',$filename)) $this->_addCSSFile($plugin_path.$filename, 'all','', null);
|
||||
}
|
||||
|
||||
if(is_dir($plugin_path.'lang')) $this->_loadLang($plugin_path.'lang');
|
||||
|
|
|
|||
|
|
@ -286,7 +286,7 @@
|
|||
else $cache_time = -1;
|
||||
|
||||
// if there is no cache file or is not new, find original xml query file and parse it
|
||||
if($cache_time < filemtime($xml_file) || $cache_time < filemtime(_XE_PATH_.'classes/db/DB.class.php')) {
|
||||
if($cache_time < filemtime($xml_file) || $cache_time < filemtime(_XE_PATH_.'classes/db/DB.class.php') || $cache_time < filemtime(_XE_PATH_.'classes/xml/XmlQueryParser.class.php')) {
|
||||
require_once(_XE_PATH_.'classes/xml/XmlQueryParser.class.php');
|
||||
$oParser = new XmlQueryParser();
|
||||
$oParser->parse($query_id, $xml_file, $cache_file);
|
||||
|
|
@ -404,34 +404,72 @@
|
|||
* @remarks if $type is not 'number', call addQuotes() and wrap with ' '
|
||||
**/
|
||||
function getConditionValue($name, $value, $operation, $type, $column_type) {
|
||||
if($type == 'number') {
|
||||
|
||||
if(!in_array($operation,array('in','notin','between')) && $type == 'number') {
|
||||
if(is_array($value)){
|
||||
$value = join(',',$value);
|
||||
}
|
||||
if(strpos($value, ',') === false && strpos($value, '(') === false) return (int)$value;
|
||||
return $value;
|
||||
}
|
||||
|
||||
if(strpos($name, '.') !== false && strpos($value, '.') !== false) {
|
||||
if(!is_array($value) && strpos($name, '.') !== false && strpos($value, '.') !== false) {
|
||||
list($table_name, $column_name) = explode('.', $value);
|
||||
if($column_type[$column_name]) return $value;
|
||||
}
|
||||
|
||||
$value = preg_replace('/(^\'|\'$){1}/', '', $value);
|
||||
|
||||
switch($operation) {
|
||||
case 'like_prefix' :
|
||||
if(!is_array($value)) $value = preg_replace('/(^\'|\'$){1}/', '', $value);
|
||||
$value = $value.'%';
|
||||
break;
|
||||
case 'like_tail' :
|
||||
if(!is_array($value)) $value = preg_replace('/(^\'|\'$){1}/', '', $value);
|
||||
$value = '%'.$value;
|
||||
break;
|
||||
case 'like' :
|
||||
if(!is_array($value)) $value = preg_replace('/(^\'|\'$){1}/', '', $value);
|
||||
$value = '%'.$value.'%';
|
||||
break;
|
||||
case 'notin' :
|
||||
return "'".$value."'";
|
||||
if(is_array($value))
|
||||
{
|
||||
$value = $this->addQuotesArray($value);
|
||||
if($type=='number') return join(',',$value);
|
||||
else return "'". join("','",$value)."'";
|
||||
}
|
||||
else
|
||||
{
|
||||
return $value;
|
||||
}
|
||||
break;
|
||||
case 'in' :
|
||||
return "'".$value."'";
|
||||
if(is_array($value))
|
||||
{
|
||||
$value = $this->addQuotesArray($value);
|
||||
if($type=='number') return join(',',$value);
|
||||
else return "'". join("','",$value)."'";
|
||||
}
|
||||
else
|
||||
{
|
||||
return $value;
|
||||
}
|
||||
break;
|
||||
case 'between' :
|
||||
if(!is_array($value)) $value = array($value);
|
||||
$value = $this->addQuotesArray($value);
|
||||
if($type!='number')
|
||||
{
|
||||
foreach($value as $k=>$v)
|
||||
{
|
||||
$value[$k] = "'".$v."'";
|
||||
}
|
||||
}
|
||||
|
||||
return $value;
|
||||
break;
|
||||
default:
|
||||
if(!is_array($value)) $value = preg_replace('/(^\'|\'$){1}/', '', $value);
|
||||
}
|
||||
|
||||
return "'".$this->addQuotes($value)."'";
|
||||
|
|
@ -461,6 +499,11 @@
|
|||
if(!isset($value)) return;
|
||||
if($value === '') return;
|
||||
if(!in_array(gettype($value), array('string', 'integer'))) return;
|
||||
break;
|
||||
case 'between' :
|
||||
if(!is_array($value)) return;
|
||||
if(count($value)!=2) return;
|
||||
|
||||
}
|
||||
|
||||
switch($operation) {
|
||||
|
|
@ -499,6 +542,9 @@
|
|||
case 'null' :
|
||||
return $name.' is null';
|
||||
break;
|
||||
case 'between' :
|
||||
return $name.' between ' . $value[0] . ' and ' . $value[1];
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
|
|
@ -624,5 +670,22 @@
|
|||
$query = sprintf("drop table %s%s", $this->prefix, $table_name);
|
||||
$this->_query($query);
|
||||
}
|
||||
|
||||
function addQuotesArray($arr)
|
||||
{
|
||||
if(is_array($arr))
|
||||
{
|
||||
foreach($arr as $k => $v)
|
||||
{
|
||||
$arr[$k] = $this->addQuotes($v);
|
||||
}
|
||||
}
|
||||
else
|
||||
{
|
||||
$arr = $this->addQuotes($arr);
|
||||
}
|
||||
|
||||
return $arr;
|
||||
}
|
||||
}
|
||||
?>
|
||||
|
|
|
|||
File diff suppressed because it is too large
Load diff
|
|
@ -403,7 +403,7 @@
|
|||
foreach($val['condition'] as $v) {
|
||||
if(!isset($v['value'])) continue;
|
||||
if($v['value'] === '') continue;
|
||||
if(!in_array(gettype($v['value']), array('string', 'integer', 'double'))) continue;
|
||||
if(!in_array(gettype($v['value']), array('string', 'integer', 'double', 'array'))) continue;
|
||||
|
||||
$name = $v['column'];
|
||||
$operation = $v['operation'];
|
||||
|
|
@ -437,9 +437,20 @@
|
|||
foreach($output->columns as $key => $val) {
|
||||
$name = $val['name'];
|
||||
$value = $val['value'];
|
||||
|
||||
if($output->column_type[$name]!='number') {
|
||||
$value = "'".$this->addQuotes($value)."'";
|
||||
if(!$value) $value = 'null';
|
||||
|
||||
if(!is_null($value)){
|
||||
$value = "'" . $this->addQuotes($value) ."'";
|
||||
}else{
|
||||
if($val['notnull']=='notnull') {
|
||||
$value = "''";
|
||||
} else {
|
||||
//$value = 'null';
|
||||
$value = "''";
|
||||
}
|
||||
}
|
||||
|
||||
} elseif(!$value || is_numeric($value)) $value = (int)$value;
|
||||
|
||||
$column_list[] = '`'.$name.'`';
|
||||
|
|
|
|||
|
|
@ -412,7 +412,7 @@
|
|||
foreach($val['condition'] as $v) {
|
||||
if(!isset($v['value'])) continue;
|
||||
if($v['value'] === '') continue;
|
||||
if(!in_array(gettype($v['value']), array('string', 'integer', 'double'))) continue;
|
||||
if(!in_array(gettype($v['value']), array('string', 'integer', 'double', 'array'))) continue;
|
||||
|
||||
$name = $v['column'];
|
||||
$operation = $v['operation'];
|
||||
|
|
@ -443,13 +443,24 @@
|
|||
$table_list[] = '`'.$this->prefix.$val.'`';
|
||||
}
|
||||
|
||||
// 컬럼 정리
|
||||
// 컬럼 정리
|
||||
foreach($output->columns as $key => $val) {
|
||||
$name = $val['name'];
|
||||
$value = $val['value'];
|
||||
|
||||
if($output->column_type[$name]!='number') {
|
||||
$value = "'".$this->addQuotes($value)."'";
|
||||
if(!$value) $value = 'null';
|
||||
|
||||
if(!is_null($value)){
|
||||
$value = "'" . $this->addQuotes($value) ."'";
|
||||
}else{
|
||||
if($val['notnull']=='notnull') {
|
||||
$value = "''";
|
||||
} else {
|
||||
//$value = 'null';
|
||||
$value = "''";
|
||||
}
|
||||
}
|
||||
|
||||
} elseif(!$value || is_numeric($value)) $value = (int)$value;
|
||||
|
||||
$column_list[] = '`'.$name.'`';
|
||||
|
|
|
|||
|
|
@ -144,10 +144,11 @@
|
|||
|
||||
// 쿼리 문 실행
|
||||
$result = mysqli_query($this->fd,$query);
|
||||
|
||||
// 오류 체크
|
||||
$error = mysqli_error($this->fd);
|
||||
if($error) $this->setError(mysqli_errno($this->fd), $error);
|
||||
if($error){
|
||||
$this->setError(mysqli_errno($this->fd), $error);
|
||||
}
|
||||
|
||||
// 쿼리 실행 종료를 알림
|
||||
$this->actFinish();
|
||||
|
|
@ -392,7 +393,7 @@
|
|||
foreach($val['condition'] as $v) {
|
||||
if(!isset($v['value'])) continue;
|
||||
if($v['value'] === '') continue;
|
||||
if(!in_array(gettype($v['value']), array('string', 'integer', 'double'))) continue;
|
||||
if(!in_array(gettype($v['value']), array('string', 'integer', 'double', 'array'))) continue;
|
||||
|
||||
$name = $v['column'];
|
||||
$operation = $v['operation'];
|
||||
|
|
@ -428,17 +429,27 @@
|
|||
$value = $val['value'];
|
||||
|
||||
if($output->column_type[$name]!='number') {
|
||||
$value = "'".$this->addQuotes($value)."'";
|
||||
if(!$value) $value = 'null';
|
||||
|
||||
if(!is_null($value)){
|
||||
$value = "'" . $this->addQuotes($value) ."'";
|
||||
}else{
|
||||
if($val['notnull']=='notnull') {
|
||||
$value = "''";
|
||||
} else {
|
||||
//$value = 'null';
|
||||
$value = "''";
|
||||
}
|
||||
}
|
||||
|
||||
} elseif(!$value || is_numeric($value)) $value = (int)$value;
|
||||
|
||||
$column_list[] = '`'.$name.'`';
|
||||
$value_list[] = $value;
|
||||
}
|
||||
|
||||
$query = sprintf("insert into %s (%s) values (%s)", implode(',',$table_list), implode(',',$column_list), implode(',', $value_list));
|
||||
|
||||
$query = sprintf("insert into %s (%s) values (%s);", implode(',',$table_list), implode(',',$column_list), implode(',', $value_list));
|
||||
return $this->_query($query);
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* @brief updateAct 처리
|
||||
|
|
|
|||
|
|
@ -528,7 +528,7 @@ class DBPostgresql extends DB
|
|||
continue;
|
||||
if ($v['value'] === '')
|
||||
continue;
|
||||
if (!in_array(gettype($v['value']), array('string', 'integer', 'double')))
|
||||
if(!in_array(gettype($v['value']), array('string', 'integer', 'double', 'array'))) continue;
|
||||
continue;
|
||||
|
||||
$name = $v['column'];
|
||||
|
|
|
|||
|
|
@ -414,7 +414,7 @@
|
|||
foreach($val['condition'] as $v) {
|
||||
if(!isset($v['value'])) continue;
|
||||
if($v['value'] === '') continue;
|
||||
if(!in_array(gettype($v['value']), array('string', 'integer', 'double'))) continue;
|
||||
if(!in_array(gettype($v['value']), array('string', 'integer', 'double', 'array'))) continue;
|
||||
|
||||
$name = $v['column'];
|
||||
$operation = $v['operation'];
|
||||
|
|
|
|||
|
|
@ -136,21 +136,20 @@ class HTMLDisplayHandler {
|
|||
{
|
||||
$oContext =& Context::getInstance();
|
||||
// add common JS/CSS files
|
||||
$oContext->_addJsFile("./common/js/jquery.js", true, '', -100000);
|
||||
//$oContext->_addJsFile("./common/js/jquery-1.4.2-full.js", true, '', -100000);
|
||||
$oContext->_addJsFile("./common/js/x.js", true, '', -100000);
|
||||
$oContext->_addJsFile("./common/js/common.js", true, '', -100000);
|
||||
$oContext->_addJsFile("./common/js/js_app.js", true, '', -100000);
|
||||
$oContext->_addJsFile("./common/js/xml_handler.js", true, '', -100000);
|
||||
$oContext->_addJsFile("./common/js/xml_js_filter.js", true, '', -100000);
|
||||
$oContext->_addCSSFile("./common/css/default.css", true, 'all', '', -100000);
|
||||
$oContext->_addCSSFile("./common/css/button.css", true, 'all', '', -100000);
|
||||
$oContext->_addJsFile("./common/js/jquery.js", '', -100000);
|
||||
$oContext->_addJsFile("./common/js/x.js", '', -100000);
|
||||
$oContext->_addJsFile("./common/js/common.js", '', -100000);
|
||||
$oContext->_addJsFile("./common/js/js_app.js", '', -100000);
|
||||
$oContext->_addJsFile("./common/js/xml_handler.js", '', -100000);
|
||||
$oContext->_addJsFile("./common/js/xml_js_filter.js", '', -100000);
|
||||
$oContext->_addCSSFile("./common/css/default.css", 'all', '', -100000);
|
||||
$oContext->_addCSSFile("./common/css/button.css", 'all', '', -100000);
|
||||
|
||||
// for admin page, add admin css
|
||||
if(Context::get('module')=='admin' || strpos(Context::get('act'),'Admin')>0){
|
||||
$oContext->_addCSSFile("./modules/admin/tpl/css/font.css", true, 'all', '',10000);
|
||||
$oContext->_addCSSFile("./modules/admin/tpl/css/pagination.css", true, 'all', '', 100001);
|
||||
$oContext->_addCSSFile("./modules/admin/tpl/css/admin.css", true, 'all', '', 100002);
|
||||
$oContext->_addCSSFile("./modules/admin/tpl/css/font.css", 'all', '',10000);
|
||||
$oContext->_addCSSFile("./modules/admin/tpl/css/pagination.css", 'all', '', 100001);
|
||||
$oContext->_addCSSFile("./modules/admin/tpl/css/admin.css", 'all', '', 100002);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
|
|||
|
|
@ -141,7 +141,7 @@
|
|||
$value = $this->_getTypeValue($this->type, $this->value);
|
||||
switch($this->type) {
|
||||
case 'homepage' :
|
||||
return ($value)?sprintf('<a href="%s" onclick="window.open(this.href); return false;">%s</a>', $value, $value):"";
|
||||
return ($value)?(sprintf('<a href="%s" onclick="window.open(this.href); return false;">%s</a>', $value, strlen($value)>60?substr($value,0,40).'...'.substr($value,-10):$value)):"";
|
||||
case 'email_address' :
|
||||
return ($value)?sprintf('<a href="mailto:%s">%s</a>', $value, $value):"";
|
||||
break;
|
||||
|
|
@ -177,11 +177,14 @@
|
|||
* @brief type에 따른 form을 리턴
|
||||
**/
|
||||
function getFormHTML() {
|
||||
static $id_num = 1000;
|
||||
|
||||
$type = $this->type;
|
||||
$name = $this->name;
|
||||
$value = $this->_getTypeValue($this->type, $this->value);
|
||||
$default = $this->_getTypeValue($this->type, $this->default);
|
||||
$column_name = 'extra_vars'.$this->idx;
|
||||
$tmp_id = $column_name.'-'.$id_num++;
|
||||
|
||||
$buff = '';
|
||||
switch($type) {
|
||||
|
|
@ -214,7 +217,11 @@
|
|||
foreach($default as $v) {
|
||||
if($value && in_array($v, $value)) $checked = ' checked="checked"';
|
||||
else $checked = '';
|
||||
$buff .='<li><input type="checkbox" name="'.$column_name.'" value="'.htmlspecialchars($v).'" '.$checked.' />'.$v.'</li>';
|
||||
|
||||
// Temporary ID for labeling
|
||||
$tmp_id = $column_name.'-'.$id_num++;
|
||||
|
||||
$buff .='<li><input type="checkbox" name="'.$column_name.'" id="'.$tmp_id.'" value="'.htmlspecialchars($v).'" '.$checked.' /><label for="'.$tmp_id.'">'.$v.'</label></li>';
|
||||
}
|
||||
$buff .= '</ul>';
|
||||
break;
|
||||
|
|
@ -236,7 +243,11 @@
|
|||
foreach($default as $v) {
|
||||
if($value && in_array($v,$value)) $checked = ' checked="checked"';
|
||||
else $checked = '';
|
||||
$buff .= '<li><input type="radio" name="'.$column_name.'" '.$checked.' value="'.$v.'" class="radio" />'.$v.'</li>';
|
||||
|
||||
// Temporary ID for labeling
|
||||
$tmp_id = $column_name.'-'.$id_num++;
|
||||
|
||||
$buff .= '<li><input type="radio" name="'.$column_name.'" id="'.$tmp_id.'" '.$checked.' value="'.$v.'" class="radio" /><label for="'.$tmp_id.'">'.$v.'</label></li>';
|
||||
}
|
||||
$buff .= '</ul>';
|
||||
break;
|
||||
|
|
|
|||
|
|
@ -70,9 +70,7 @@
|
|||
* @return true: OK, false: redirected
|
||||
**/
|
||||
function init() {
|
||||
$oModuleModel = &getModel('module');
|
||||
$oModuleModel->loadModuleExtends();
|
||||
|
||||
$oModuleModel = &getModel('module');
|
||||
$site_module_info = Context::get('site_module_info');
|
||||
|
||||
if(!$this->document_srl && $this->mid && $this->entry) {
|
||||
|
|
@ -283,6 +281,7 @@
|
|||
if($this->module == "admin" && $type == "view")
|
||||
{
|
||||
$oMemberModel = &getModel('member');
|
||||
|
||||
$logged_info = $oMemberModel->getLoggedInfo();
|
||||
if($logged_info->is_admin=='Y') {
|
||||
$orig_module->loadSideBar();
|
||||
|
|
@ -426,22 +425,19 @@
|
|||
* @remarks if there exists a module instance created before, returns it.
|
||||
**/
|
||||
function &getModuleInstance($module, $type = 'view', $kind = '') {
|
||||
|
||||
$parent_module = $module;
|
||||
if(__DEBUG__==3) $start_time = getMicroTime();
|
||||
|
||||
if($kind != 'admin') $kind = 'svc';
|
||||
|
||||
if(is_array($GLOBALS['__MODULE_EXTEND__'])) {
|
||||
$extend_module = $GLOBALS['__MODULE_EXTEND__'][$module.'.'.($kind=='svc'?'':'admin').'.'.$type];
|
||||
if($extend_module && file_exists(FileHandler::getRealPath(ModuleHandler::getModulePath($extend_module)))) {
|
||||
$module = $extend_module;
|
||||
}else{
|
||||
unset($extend_module);
|
||||
}
|
||||
$key = $module.'.'.($kind!='admin'?'':'admin').'.'.$type;
|
||||
if(is_array($GLOBALS['__MODULE_EXTEND__']) && array_key_exists($key, $GLOBALS['__MODULE_EXTEND__'])) {
|
||||
$module = $extend_module = $GLOBALS['__MODULE_EXTEND__'][$key];
|
||||
}else{
|
||||
unset($parent_module);
|
||||
}
|
||||
|
||||
$class_path = ModuleHandler::getModulePath($module);
|
||||
if(!is_dir(_XE_PATH_.$class_path)) return NULL;
|
||||
if(!is_dir(FileHandler::getRealPath($class_path))) return NULL;
|
||||
|
||||
// if there is no instance of the module in global variable, create a new one
|
||||
if(!$GLOBALS['_loaded_module'][$module][$type][$kind]) {
|
||||
|
|
@ -457,49 +453,51 @@
|
|||
case 'controller' :
|
||||
if($kind == 'admin') {
|
||||
$instance_name = sprintf("%sAdmin%s",$module,"Controller");
|
||||
$class_file = sprintf('%s%s%s.admin.%s.php', _XE_PATH_, $class_path, $module, $type);
|
||||
$class_file = sprintf('%s%s.admin.%s.php', $class_path, $module, $type);
|
||||
} else {
|
||||
$instance_name = sprintf("%s%s",$module,"Controller");
|
||||
$class_file = sprintf('%s%s%s.%s.php', _XE_PATH_, $class_path, $module, $type);
|
||||
$class_file = sprintf('%s%s.%s.php', $class_path, $module, $type);
|
||||
}
|
||||
break;
|
||||
case 'model' :
|
||||
if($kind == 'admin') {
|
||||
$instance_name = sprintf("%sAdmin%s",$module,"Model");
|
||||
$class_file = sprintf('%s%s%s.admin.%s.php', _XE_PATH_, $class_path, $module, $type);
|
||||
$class_file = sprintf('%s%s.admin.%s.php', $class_path, $module, $type);
|
||||
} else {
|
||||
$instance_name = sprintf("%s%s",$module,"Model");
|
||||
$class_file = sprintf('%s%s%s.%s.php', _XE_PATH_, $class_path, $module, $type);
|
||||
$class_file = sprintf('%s%s.%s.php', $class_path, $module, $type);
|
||||
}
|
||||
break;
|
||||
case 'api' :
|
||||
$instance_name = sprintf("%s%s",$module,"API");
|
||||
$class_file = sprintf('%s%s%s.api.php', _XE_PATH_, $class_path, $module);
|
||||
$class_file = sprintf('%s%s.api.php', $class_path, $module);
|
||||
break;
|
||||
case 'wap' :
|
||||
$instance_name = sprintf("%s%s",$module,"WAP");
|
||||
$class_file = sprintf('%s%s%s.wap.php', _XE_PATH_, $class_path, $module);
|
||||
$class_file = sprintf('%s%s.wap.php', $class_path, $module);
|
||||
break;
|
||||
case 'mobile' :
|
||||
$instance_name = sprintf("%s%s",$module,"Mobile");
|
||||
$class_file = sprintf("%s%s%s.mobile.php", _XE_PATH_, $class_path, $module);
|
||||
$class_file = sprintf("%s%s.mobile.php", $class_path, $module);
|
||||
break;
|
||||
case 'class' :
|
||||
$instance_name = $module;
|
||||
$class_file = sprintf('%s%s%s.class.php', _XE_PATH_, $class_path, $module);
|
||||
$class_file = sprintf('%s%s.class.php', $class_path, $module);
|
||||
break;
|
||||
default :
|
||||
$type = 'view';
|
||||
if($kind == 'admin') {
|
||||
$instance_name = sprintf("%sAdmin%s",$module,"View");
|
||||
$class_file = sprintf('%s%s%s.admin.view.php', _XE_PATH_, $class_path, $module, $type);
|
||||
$class_file = sprintf('%s%s.admin.view.php', $class_path, $module, $type);
|
||||
} else {
|
||||
$instance_name = sprintf("%s%s",$module,"View");
|
||||
$class_file = sprintf('%s%s%s.view.php', _XE_PATH_, $class_path, $module, $type);
|
||||
$class_file = sprintf('%s%s.view.php', $class_path, $module, $type);
|
||||
}
|
||||
break;
|
||||
}
|
||||
|
||||
$class_file = FileHandler::getRealPath($class_file);
|
||||
|
||||
// Get the name of the class file
|
||||
if(!file_exists($class_file)) return NULL;
|
||||
|
||||
|
|
|
|||
|
|
@ -244,6 +244,14 @@
|
|||
// stop_proc==true이면 그냥 패스
|
||||
if($this->stop_proc) return false;
|
||||
|
||||
// trigger call
|
||||
$triggerOutput = ModuleHandler::triggerCall('moduleObject.proc', 'before', $this);
|
||||
if(!$triggerOutput->toBool()) {
|
||||
$this->setError($triggerOutput->getError());
|
||||
$this->setMessage($triggerOutput->getMessage());
|
||||
return false;
|
||||
}
|
||||
|
||||
// addon 실행(called_position 를 before_module_proc로 하여 호출)
|
||||
$called_position = 'before_module_proc';
|
||||
$oAddonController = &getController('addon');
|
||||
|
|
@ -267,6 +275,13 @@
|
|||
return false;
|
||||
}
|
||||
|
||||
// trigger call
|
||||
$triggerOutput = ModuleHandler::triggerCall('moduleObject.proc', 'after', $this);
|
||||
if(!$triggerOutput->toBool()) {
|
||||
$this->setError($triggerOutput->getError());
|
||||
$this->setMessage($triggerOutput->getMessage());
|
||||
return false;
|
||||
}
|
||||
|
||||
// addon 실행(called_position 를 after_module_proc로 하여 호출)
|
||||
$called_position = 'after_module_proc';
|
||||
|
|
|
|||
|
|
@ -1,109 +0,0 @@
|
|||
<?php
|
||||
/**
|
||||
* @class Optimizer
|
||||
* @author NHN (developers@xpressengine.com)
|
||||
* @brief class designed to be used to merge mutiple JS/CSS files into one file to shorten time taken for transmission.
|
||||
*
|
||||
**/
|
||||
|
||||
class Optimizer {
|
||||
|
||||
var $cache_path = "./files/cache/optimized/";
|
||||
var $script_file = "./common/script.php?l=%s&t=.%s";
|
||||
|
||||
/**
|
||||
* @brief Constructor which check if a directory, 'optimized' exists in designated path. If not create a new one
|
||||
**/
|
||||
function Optimizer() {
|
||||
if(!is_dir($this->cache_path)) {
|
||||
FileHandler::makeDir($this->cache_path);
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* @brief file that removes 'optimized' in a given array
|
||||
* @param[in] $files an array to be modified
|
||||
**/
|
||||
function _getOptimizedRemoved($files) {
|
||||
foreach($files as $key => $val) unset($files[$key]['optimized']);
|
||||
return $files;
|
||||
}
|
||||
|
||||
/**
|
||||
* @brief method that optimizes a given file and returns a resultant file
|
||||
* @param[in] source_files an array of source files to be optimized
|
||||
* @param[in] type a type of source file, either js or css.
|
||||
* @return Returns a optimized file
|
||||
**/
|
||||
function getOptimizedFiles($source_files, $type = "js") {
|
||||
if(!is_array($source_files) || !count($source_files)) return;
|
||||
|
||||
// 관리자 설정시 설정이 되어 있지 않으면 패스
|
||||
// 캐시 디렉토리가 없으면 실행하지 않음
|
||||
$db_info = Context::getDBInfo();
|
||||
if($db_info->use_optimizer == 'N' || !is_dir($this->cache_path)) return $this->_getOptimizedRemoved($source_files);
|
||||
|
||||
if(!count($source_files)) return;
|
||||
|
||||
$files = array();
|
||||
$hash = "";
|
||||
foreach($source_files as $key => $file) {
|
||||
if($file['file'][0] == '/'){
|
||||
if(!file_exists($file['file'])){
|
||||
if(file_exists($_SERVER['DOCUMENT_ROOT'] . $file['file'])){
|
||||
if($file['optimized']) $source_files[$key]['file'] = $file['file'] = $_SERVER['DOCUMENT_ROOT'].$file['file'];
|
||||
}else{
|
||||
continue;
|
||||
}
|
||||
}
|
||||
} else if(!$file || !$file['file'] || !file_exists($file['file'])) continue;
|
||||
$file['file'] = $source_files[$key]['file'] = str_replace("\\","/",$file['file']);
|
||||
if(empty($file['optimized']) || preg_match('/^https?:\/\//i', $file['file']) ) $files[] = $file;
|
||||
else{
|
||||
$targets[] = $file;
|
||||
$hash .= $file['file'];
|
||||
}
|
||||
}
|
||||
if(!count($targets)) return $this->_getOptimizedRemoved($files);
|
||||
$list_file_hash = md5($hash);
|
||||
$oCacheHandler = &CacheHandler::getInstance('template');
|
||||
if($oCacheHandler->isSupport()){
|
||||
if(!$oCacheHandler->isValid($list_file_hash)){
|
||||
$buff = array();
|
||||
foreach($targets as $file) $buff[] = $file['file'];
|
||||
$oCacheHandler->put($list_file_hash, $buff);
|
||||
}
|
||||
}else{
|
||||
$list_file = FileHandler::getRealPath($this->cache_path . $list_file_hash . '.info.php');
|
||||
|
||||
if(!file_exists($list_file)){
|
||||
$str = '<?php $f=array();';
|
||||
foreach($targets as $file) $str .= '$f[]="'. $file['file'] . '";';
|
||||
$str .= ' return $f; ?>';
|
||||
|
||||
FileHandler::writeFile($list_file, $str);
|
||||
}
|
||||
}
|
||||
|
||||
array_unshift($files, array('file' => sprintf($this->script_file, $list_file_hash, $type) , 'media' => 'all'));
|
||||
$files = $this->_getOptimizedRemoved($files);
|
||||
if(!count($files)) return $files;
|
||||
|
||||
$url_info = parse_url(Context::getRequestUri());
|
||||
$abpath = $url_info['path'];
|
||||
foreach($files as $key => $val) {
|
||||
$file = $val['file'];
|
||||
|
||||
if($file{0} == '/' || strpos($file,'://')!==false) continue;
|
||||
if(substr($file,0,2)=='./') $file = substr($file,2);
|
||||
$file = $abpath.$file;
|
||||
while(strpos($file,'/../')!==false) {
|
||||
$file = preg_replace('/\/([^\/]+)\/\.\.\//','/',$file);
|
||||
}
|
||||
$files[$key]['file'] = $file;
|
||||
}
|
||||
|
||||
return $files;
|
||||
}
|
||||
}
|
||||
?>
|
||||
|
|
@ -179,7 +179,7 @@
|
|||
$buff = preg_replace('!(\n?)( *?)<\!--//(.*?)-->!is', '', $buff);
|
||||
|
||||
// import xml filter/ css/ js/ files <!--%import("filename"[,optimized=true|false][,media="media"][,targetie="lt IE 6|IE 7|gte IE 8|..."])--> (media is applied to only css)
|
||||
$buff = preg_replace_callback('!<\!--%import\(\"([^\"]*?)\"(,optimized\=(true|false))?(,media\=\"([^\"]*)\")?(,targetie=\"([^\"]*)\")?\)-->!is', array($this, '_compileImportCode'), $buff);
|
||||
$buff = preg_replace_callback('!<\!--%import\(\"([^\"]*?)\"(,optimized\=(true|false))?(,media\=\"([^\"]*)\")?(,targetie=\"([^\"]*)\")?(,index=\"([^\"]*)\")?(,type=\"([^\"]*)\")?\)-->!is', array($this, '_compileImportCode'), $buff);
|
||||
|
||||
// unload css/ js <!--%unload("filename"[,optimized=true|false][,media="media"][,targetie="lt IE 6|IE 7|gte IE 8|..."])--> (media is applied to only css)
|
||||
$buff = preg_replace_callback('!<\!--%unload\(\"([^\"]*?)\"(,optimized\=(true|false))?(,media\=\"([^\"]*)\")?(,targetie=\"([^\"]*)\")?\)-->!is', array($this, '_compileUnloadCode'), $buff);
|
||||
|
|
@ -318,7 +318,7 @@
|
|||
$tmp_buff = substr($next, 0, $close_pos+strlen('</'.$tag_name.'>'));
|
||||
$tag .= $tmp_buff;
|
||||
$next = substr($next, strlen($tmp_buff));
|
||||
if(false === strpos($tmp_buff, '<'.$tag_name)) break;
|
||||
if(substr_count($tag, '<'.$tag_name) == substr_count($tag,'</'.$tag_name)) break;
|
||||
}
|
||||
}
|
||||
|
||||
|
|
@ -351,7 +351,10 @@
|
|||
$next = substr($buff,$pos);
|
||||
|
||||
$pre_pos = strrpos($pre, '<');
|
||||
$next_pos = strpos($next, '<');
|
||||
|
||||
preg_match('/<(\/|[a-z])/i',$next,$m);
|
||||
if(!$m[0]) return $buff;
|
||||
$next_pos = strpos($next, $m[0]);
|
||||
|
||||
$tag = substr($pre, $pre_pos). substr($next, 0, $next_pos);
|
||||
$pre = substr($pre, 0, $pre_pos);
|
||||
|
|
@ -387,7 +390,8 @@
|
|||
$tmp_buff = substr($next, 0, $close_pos+strlen('</'.$tag_name.'>'));
|
||||
$tag .= $tmp_buff;
|
||||
$next = substr($next, strlen($tmp_buff));
|
||||
if(false === strpos($tmp_buff, '<'.$tag_name)) break;
|
||||
|
||||
if(substr_count($tag, '<'.$tag_name) == substr_count($tag,'</'.$tag_name)) break;
|
||||
}
|
||||
$buff = $pre.$tag_head.$tag.$tag_tail.$next;
|
||||
}
|
||||
|
|
@ -407,7 +411,7 @@
|
|||
}
|
||||
|
||||
$target = $m[1];
|
||||
if(substr($target,0,1)=='/')
|
||||
if(substr($target,0,1)=='/')
|
||||
{
|
||||
$target = substr($target,1);
|
||||
$pos = strrpos('/',$target);
|
||||
|
|
@ -452,9 +456,14 @@
|
|||
$base_path = $this->path;
|
||||
|
||||
$target = $attrs['target'];
|
||||
if(substr($target,0,2)=='./') $target = substr($target,2);
|
||||
if(!substr($target,0,1)!='/') $target = $web_path.$target;
|
||||
if(!preg_match('/^(http|https)/i',$target))
|
||||
{
|
||||
if(substr($target,0,2)=='./') $target = substr($target,2);
|
||||
if(!substr($target,0,1)!='/') $target = $web_path.$target;
|
||||
}
|
||||
|
||||
if(!$attrs['index']) $attrs['index'] = 'null';
|
||||
if($attrs['type']!='body') $attrs['type'] = 'head';
|
||||
|
||||
// if target ends with lang, load language pack
|
||||
if(substr($target, -4)=='lang') {
|
||||
|
|
@ -464,7 +473,8 @@
|
|||
|
||||
// otherwise try to load xml, css, js file
|
||||
} else {
|
||||
if(substr($target,0,1)!='/') $source_filename = $base_path.$target;
|
||||
if(preg_match('/^(http|https)/i',$target)) $source_filename = $target;
|
||||
else if(substr($target,0,1)!='/') $source_filename = $base_path.$target;
|
||||
else $source_filename = $target;
|
||||
|
||||
// get filename and path
|
||||
|
|
@ -490,7 +500,7 @@
|
|||
'?>%s',
|
||||
"\n",
|
||||
"\n",
|
||||
$base_path,
|
||||
$this->path,
|
||||
$filename,
|
||||
"\n",
|
||||
"\n",
|
||||
|
|
@ -499,15 +509,15 @@
|
|||
break;
|
||||
// css file
|
||||
case 'css' :
|
||||
if(!preg_match('/^(http|\/)/i',$source_filename)) $source_filename = $base_path.$filename;
|
||||
if(!preg_match('/^(http|https|\/)/i',$source_filename)) $source_filename = $this->path.$filename;
|
||||
if($type == 'unload') $output = '<?php Context::unloadCSSFile("'.$source_filename.'"); ?>';
|
||||
else $output = '<?php Context::addCSSFile("'.$source_filename.'"); ?>';
|
||||
else $output = '<?php Context::addCSSFile("'.$source_filename.'",false,"'.$attrs['media'].'","'.$attrs['targetie'].'",'.$attrs['index'].'); ?>';
|
||||
break;
|
||||
// js file
|
||||
case 'js' :
|
||||
if(!preg_match('/^(http|\/)/i',$source_filename)) $source_filename = $base_path.$filename;
|
||||
if(!preg_match('/^(http|https|\/)/i',$source_filename)) $source_filename = $this->path.$filename;
|
||||
if($type == 'unload') $output = '<?php Context::unloadJsFile("'.$source_filename.'"); ?>';
|
||||
else $output = '<?php Context::addJsFile("'.$source_filename.'"); ?>';
|
||||
else $output = '<?php Context::addJsFile("'.$source_filename.'",false,"'.$attrs['targetie'].'",'.$attrs['index'].',"'.$attrs['type'].'"); ?>';
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
|
@ -721,6 +731,11 @@
|
|||
if(!$targetie) $targetie = '';
|
||||
else $optimized = 'false';
|
||||
|
||||
if(isset($matches[9])) $index = intval($matches[9]);
|
||||
if(!$index) $index = 'null';
|
||||
if(isset($matches[11])) $type = strtolower(trim($matches[11]));
|
||||
if($type!='body') $type = 'head';
|
||||
|
||||
// if given_file ends with lang, load language pack
|
||||
if(substr($given_file, -4)=='lang') {
|
||||
if(substr($given_file,0,2)=='./') $given_file = substr($given_file, 2);
|
||||
|
|
@ -729,7 +744,8 @@
|
|||
|
||||
// otherwise try to load xml, css, js file
|
||||
} else {
|
||||
if(substr($given_file,0,1)!='/') $source_filename = sprintf("%s%s",$base_path, $given_file);
|
||||
if(preg_match('/^(http|https):/i',$given_file)) $source_filename = $given_file;
|
||||
elseif(substr($given_file,0,1)!='/') $source_filename = sprintf("%s%s",$base_path, $given_file);
|
||||
else $source_filename = $given_file;
|
||||
|
||||
// get filename and path
|
||||
|
|
@ -765,19 +781,19 @@
|
|||
// css file
|
||||
case 'css' :
|
||||
if(preg_match('/^(http|\/)/i',$source_filename)) {
|
||||
$output = sprintf('<?php Context::addCSSFile("%s", %s, "%s", "%s"); ?>', $source_filename, 'false', $media, $targetie);
|
||||
$output = sprintf('<?php Context::addCSSFile("%s", %s, "%s", "%s", %s); ?>', $source_filename, 'false', $media, $targetie, $index);
|
||||
} else {
|
||||
$meta_file = sprintf('%s%s', $base_path, $filename);
|
||||
$output = sprintf('<?php Context::addCSSFile("%s%s", %s, "%s", "%s"); ?>', $base_path, $filename, $optimized, $media, $targetie);
|
||||
$output = sprintf('<?php Context::addCSSFile("%s%s", %s, "%s", "%s", %s); ?>', $base_path, $filename, $optimized, $media, $targetie, $index);
|
||||
}
|
||||
break;
|
||||
// js file
|
||||
case 'js' :
|
||||
if(preg_match('/^(http|\/)/i',$source_filename)) {
|
||||
$output = sprintf('<?php Context::addJsFile("%s", %s, "%s"); ?>', $source_filename, 'false', $targetie);
|
||||
$output = sprintf('<?php Context::addJsFile("%s", %s, "%s", %s,"%s"); ?>', $source_filename, 'false', $targetie, $index, $type);
|
||||
} else {
|
||||
$meta_file = sprintf('%s%s', $base_path, $filename);
|
||||
$output = sprintf('<?php Context::addJsFile("%s%s", %s, "%s"); ?>', $base_path, $filename, $optimized, $targetie);
|
||||
$output = sprintf('<?php Context::addJsFile("%s%s", %s, "%s", %s, "%s"); ?>', $base_path, $filename, $optimized, $targetie, $index, $type);
|
||||
}
|
||||
break;
|
||||
}
|
||||
|
|
@ -833,19 +849,17 @@
|
|||
switch($ext) {
|
||||
// css file
|
||||
case 'css' :
|
||||
if(preg_match('/^(http|\/)/i',$source_filename)) {
|
||||
if(preg_match('/^(http|https|\/)/i',$source_filename)) {
|
||||
$output = sprintf('<?php Context::unloadCSSFile("%s", %s, "%s", "%s"); ?>', $source_filename, 'false', $media, $targetie);
|
||||
} else {
|
||||
$meta_file = sprintf('%s%s', $base_path, $filename);
|
||||
$output = sprintf('<?php Context::unloadCSSFile("%s%s", %s, "%s", "%s"); ?>', $base_path, $filename, $optimized, $media, $targetie);
|
||||
}
|
||||
break;
|
||||
// js file
|
||||
case 'js' :
|
||||
if(preg_match('/^(http|\/)/i',$source_filename)) {
|
||||
if(preg_match('/^(http|https|\/)/i',$source_filename)) {
|
||||
$output = sprintf('<?php Context::unloadJsFile("%s", %s, "%s"); ?>', $source_filename, 'false', $targetie);
|
||||
} else {
|
||||
$meta_file = sprintf('%s%s', $base_path, $filename);
|
||||
$output = sprintf('<?php Context::unloadJsFile("%s%s", %s, "%s"); ?>', $base_path, $filename, $optimized, $targetie);
|
||||
}
|
||||
break;
|
||||
|
|
|
|||
|
|
@ -65,7 +65,7 @@
|
|||
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);
|
||||
Context::addJsFile($this->js_file, false, '',null,'body');
|
||||
}
|
||||
|
||||
/**
|
||||
|
|
|
|||
|
|
@ -173,6 +173,17 @@
|
|||
$buff .= ' );'."\n";
|
||||
}
|
||||
|
||||
// args 변수 확인
|
||||
$arg_list = $this->getArguments();
|
||||
if($arg_list)
|
||||
{
|
||||
foreach($arg_list as $arg)
|
||||
{
|
||||
$pre_buff .= 'if(is_object($args->'.$arg.')){ $args->'.$arg.' = array_values(get_method_vars($args->'.$arg.')); }'. "\n";
|
||||
$pre_buff .= 'if(is_array($args->'.$arg.') && count($args->'.$arg.')==0){ unset($args->'.$arg.'); };'."\n";
|
||||
}
|
||||
}
|
||||
|
||||
// order 정리
|
||||
if($output->order) {
|
||||
$buff .= '$output->order = array(';
|
||||
|
|
@ -446,6 +457,8 @@
|
|||
if($v->notnull) $this->notnull_list[] = $v->var;
|
||||
if($v->default) $buff .= sprintf('array("column"=>"%s", "value"=>$args->%s?$args->%s:%s,"pipe"=>"%s","operation"=>"%s",),%s', $v->column, $v->var, $v->var, $v->default, $v->pipe, $v->operation, "\n");
|
||||
else $buff .= sprintf('array("column"=>"%s", "value"=>$args->%s,"pipe"=>"%s","operation"=>"%s",),%s', $v->column, $v->var, $v->pipe, $v->operation, "\n");
|
||||
|
||||
$this->addArguments($v->var);
|
||||
} else {
|
||||
$buff .= sprintf('array("column"=>"%s", "value"=>"%s","pipe"=>"%s","operation"=>"%s",),%s', $v->column, $v->var, $v->pipe, $v->operation, "\n");
|
||||
}
|
||||
|
|
@ -459,6 +472,15 @@
|
|||
return $buff;
|
||||
}
|
||||
|
||||
function addArguments($args_name)
|
||||
{
|
||||
$this->args[] = $args_name;
|
||||
}
|
||||
|
||||
function getArguments()
|
||||
{
|
||||
return $this->args;
|
||||
}
|
||||
|
||||
/**
|
||||
* @brief returns predefined default values correspoding to given parameters
|
||||
|
|
|
|||
1
common/js/plugins/uploader/plugin.load
Normal file
1
common/js/plugins/uploader/plugin.load
Normal file
|
|
@ -0,0 +1 @@
|
|||
uploader.js
|
||||
790
common/js/plugins/uploader/uploader.js
Normal file
790
common/js/plugins/uploader/uploader.js
Normal file
|
|
@ -0,0 +1,790 @@
|
|||
/**
|
||||
* Uploader
|
||||
*/
|
||||
(function($){
|
||||
|
||||
var runtime;
|
||||
|
||||
var Uploader = xe.createApp('Uploader', {
|
||||
settings : {},
|
||||
files : [],
|
||||
init : function(browseButton, opts) {
|
||||
if (!runtime) {
|
||||
$.each(runtimes, function(key,obj) {
|
||||
if (obj.check()) { runtime = key; return false; }
|
||||
});
|
||||
}
|
||||
|
||||
this.queue = [];
|
||||
this.settings = $.extend({
|
||||
filters : {},
|
||||
params : {}
|
||||
}, opts);
|
||||
this.settings.browse = $(browseButton);
|
||||
|
||||
if (!this.settings.browse.length) throw 'The parameter browseButton is not valid object or selector.';
|
||||
|
||||
var s = this.settings;
|
||||
|
||||
if (s.dropzone) s.dropzone = $(s.dropzone);
|
||||
if (s.upload) s.upload = $(s.upload);
|
||||
|
||||
runtimes[runtime].create(this, this.settings);
|
||||
},
|
||||
API_ON_START : function(sender, params) {
|
||||
if ($.isFunction(this.settings.onstart)) {
|
||||
this.settings.onstart.apply(this, params);
|
||||
}
|
||||
},
|
||||
API_ON_FINISH : function(sender, params) {
|
||||
if ($.isFunction(this.settings.onfinish)) {
|
||||
this.settings.onfinish.apply(this, params);
|
||||
}
|
||||
},
|
||||
API_ON_SELECT : function(sender, params) {
|
||||
if ($.isFunction(this.settings.onselect)) {
|
||||
this.settings.onselect.apply(this, params);
|
||||
}
|
||||
},
|
||||
API_ON_STARTONE : function(sender, params) {
|
||||
if ($.isFunction(this.settings.onstartone)) {
|
||||
this.settings.onstartone.apply(this, params);
|
||||
}
|
||||
},
|
||||
API_ON_FINISHONE : function(sender, params) {
|
||||
if ($.isFunction(this.settings.onfinishone)) {
|
||||
this.settings.onfinishone.apply(this, params);
|
||||
}
|
||||
},
|
||||
API_ON_PROGRESS : function(sender, params) {
|
||||
if ($.isFunction(this.settings.onprogress)) {
|
||||
this.settings.onprogress.apply(this, params);
|
||||
}
|
||||
},
|
||||
API_START : function(sender, params) {
|
||||
var files = $.grep(this.files, function(file){ return (file.status != 'DONE') });
|
||||
|
||||
runtimes[runtime].upload(this, this.settings, files);
|
||||
},
|
||||
API_STOP : function(sender, params) {
|
||||
runtimes[runtime].stop(this, this.settings);
|
||||
},
|
||||
API_SET_PARAM : function(sender, params) {
|
||||
this.settings.params[params[0]] = params[1];
|
||||
},
|
||||
API_DEL_PARAM : function(sender, params) {
|
||||
try {
|
||||
delete this.settings.params[params[0]];
|
||||
} catch(e){}
|
||||
}
|
||||
});
|
||||
|
||||
// Shortcut function in jQuery
|
||||
$.fn.uploader = function(opts) {
|
||||
var u = new Uploader(this.eq(0), opts);
|
||||
if (u) xe.registerApp(u);
|
||||
|
||||
return u;
|
||||
};
|
||||
|
||||
// Shortcut function in XE
|
||||
xe.createUploader = function(browseButton, opts) {
|
||||
var u = new Uploader(browseButton, opts);
|
||||
if (u) xe.registerApp(u);
|
||||
|
||||
return u;
|
||||
};
|
||||
|
||||
// {{{ runtimes
|
||||
var runtimes = {};
|
||||
|
||||
// Google Gears
|
||||
runtimes.gears = {
|
||||
_desktop : null,
|
||||
create : function(uploader, settings) {
|
||||
var self = this;
|
||||
var opt = {filter:[]};
|
||||
|
||||
if (!window.google || google.gears || !google.gears.factory) this.createFactory();
|
||||
if (!this._desktop && google.gears.factory) this._desktop = google.gears.factory.create('beta.desktop');
|
||||
if (!this._desktop) return false;
|
||||
|
||||
// browse button
|
||||
settings.browse.click(function(){
|
||||
self._desktop.openFiles(onselect, opt);
|
||||
return false;
|
||||
});
|
||||
|
||||
// file filters
|
||||
$.each(settings.filters, function(k,v){ opt.filter=$.merge(opt.filter,v.split(' ')) });
|
||||
opt.filter = $.map(opt.filter, function(ext){ return '.'+ext });
|
||||
|
||||
// select file callback
|
||||
function onselect(files) {
|
||||
var old_length = uploader.files.length;
|
||||
|
||||
$.each(files, function() {
|
||||
uploader.files.push(new File(this, this.blob.length))
|
||||
});
|
||||
|
||||
uploader.cast('ON_SELECT', [uploader.files, old_length]);
|
||||
}
|
||||
|
||||
// drag and drop
|
||||
if (settings.dropzone) {
|
||||
settings.dropzone
|
||||
.bind('dragover', function(){ return false; })
|
||||
.bind('drop', function(event) {
|
||||
var data = self._desktop.getDragData(event.originalEvent, 'application/x-gears-files');
|
||||
var files = $.grep(data.files, function(file) {
|
||||
var ext = file.name.match(/\.[a-z0-9]+$/)[0] || '';
|
||||
return ($.inArray(ext, opt.filter)!=-1);
|
||||
});
|
||||
|
||||
onselect(files);
|
||||
|
||||
return false;
|
||||
});
|
||||
}
|
||||
|
||||
// upload
|
||||
if (settings.upload) {
|
||||
settings.upload.click(function(){
|
||||
uploader.cast('START');
|
||||
return false;
|
||||
});
|
||||
}
|
||||
},
|
||||
createFactory : function() {
|
||||
var f, m;
|
||||
|
||||
if (!window.google) window.google = {};
|
||||
if (!google.gears) {
|
||||
google.gears = {};
|
||||
|
||||
if (typeof(GearsFactory)!='undefined'){f = new GearsFactory()} // Firefox
|
||||
else {
|
||||
try{ // IE
|
||||
f = new ActiveXObject('Gears.Factory');
|
||||
}catch(e){ // Safari
|
||||
if ((typeof(m=navigator.mimeTypes)!='undefined')&&(m['application/x-googlegears'])) {
|
||||
f = $('<object type="application/x-googlegears" style="display:none;width:0;height:0">').appendTo(document.documentElement);
|
||||
}
|
||||
}
|
||||
}
|
||||
if(f) google.gears.factory = f;
|
||||
}
|
||||
},
|
||||
check : function() {
|
||||
if ((window.google && google.gears && google.gears.factory) || (typeof(GearsFactory) != 'undefined')) return true;
|
||||
|
||||
try {
|
||||
this.factory = new ActiveXObject('Gears.factory');
|
||||
return true;
|
||||
} catch(e) {
|
||||
var m = navigator.mimeTypes;
|
||||
if (m && m['application/x-googlegears']) return true;
|
||||
}
|
||||
},
|
||||
upload : function(uploader, settings, files) {
|
||||
if (uploader.request || !files.length) return false;
|
||||
|
||||
uploader.cast('ON_START');
|
||||
|
||||
(function uploadNext() {
|
||||
var file = files.shift();
|
||||
var req = google.gears.factory.create('beta.httprequest');
|
||||
var blob = google.gears.factory.create('beta.blobbuilder');
|
||||
var bndr = '--------------xe-boundary'+random();
|
||||
var data, gap;
|
||||
|
||||
$.each(settings.params, function(key, val) {
|
||||
blob.append(
|
||||
'--'+bndr+'\r\n'+
|
||||
'Content-Disposition: form-data; name="'+key+'"\r\n\r\n'+
|
||||
val+'\r\n'
|
||||
);
|
||||
});
|
||||
|
||||
blob.append(
|
||||
'--'+bndr+'\r\n'+
|
||||
'Content-Disposition: form-data; name="Filedata"; filename="'+file.name+'"\r\n'+
|
||||
'Content-Type: application/octet-stream\r\n\r\n'
|
||||
);
|
||||
|
||||
blob.append(file.object.blob);
|
||||
blob.append('\r\n--'+bndr+'--\r\n');
|
||||
|
||||
data = blob.getAsBlob();
|
||||
gap = data.length - file.size;
|
||||
|
||||
uploader.cast('ON_STARTONE', [file]);
|
||||
|
||||
req.open('POST', settings.url);
|
||||
req.setRequestHeader('Content-Type', 'multipart/form-data; boundary='+bndr);
|
||||
req.onreadystatechange = function() {
|
||||
if (req.readyState == 1) {
|
||||
file.status = 'UPLOADING';
|
||||
return;
|
||||
}
|
||||
if (req.readyState != 4) return;
|
||||
|
||||
uploader.request = null;
|
||||
|
||||
if (req.status == 200) {
|
||||
file.status = 'DONE';
|
||||
} else {
|
||||
file.status = 'FAILED';
|
||||
}
|
||||
|
||||
if (files.length) {
|
||||
uploadNext();
|
||||
} else {
|
||||
setTimeout(function(){ uploader.cast('ON_FINISH') }, 0);
|
||||
}
|
||||
|
||||
uploader.cast('ON_FINISHONE', [file]);
|
||||
};
|
||||
req.upload.onprogress = function(event) {
|
||||
if (event.lengthComputable) {
|
||||
file.loaded = Math.max(event.loaded - gap, 0);
|
||||
uploader.cast('ON_PROGRESS', [file]);
|
||||
}
|
||||
};
|
||||
req.send(data);
|
||||
})();
|
||||
},
|
||||
stop : function(uploader, settings) {
|
||||
if (uploader.request) {
|
||||
uploader.request.abort();
|
||||
uploader.request = null;
|
||||
}
|
||||
|
||||
uploader.cast('ON_STOP');
|
||||
}
|
||||
};
|
||||
|
||||
// HTML5
|
||||
runtimes.html5 = {
|
||||
create : function(uploader, settings) {
|
||||
var self = this;
|
||||
var filter = [];
|
||||
|
||||
// filter by extension
|
||||
$.each(settings.filters, function(k,v){ filter=$.merge(filter,v.split(' ')) });
|
||||
|
||||
// when file is selected
|
||||
function onselect() {
|
||||
var files = $.grep(this.files, function(file) {
|
||||
var ext = (file.fileName.match(/\.([^\.]+)$/)[1] || '').toLowerCase();
|
||||
return (!filter.length || $.inArray(ext,filter) != -1);
|
||||
});
|
||||
|
||||
if (files.length) {
|
||||
var old_length = uploader.files.length;
|
||||
|
||||
$.each(files, function(idx, file){
|
||||
uploader.files.push(new File(file, file.size||file.fileSize));
|
||||
});
|
||||
uploader.cast('ON_SELECT', [uploader.files, old_length]);
|
||||
}
|
||||
|
||||
this.value = '';
|
||||
}
|
||||
|
||||
function make_button(event) {
|
||||
var op = this.offsetParent;
|
||||
var ow = this.offsetWidth;
|
||||
var oh = this.offsetHeight;
|
||||
var ot = this.offsetTop;
|
||||
var ol = this.offsetLeft;
|
||||
|
||||
if (!uploader.browseButton) {
|
||||
uploader.browseButton = $('<div style="position:absolute;overflow:hidden;"><input type="file" name="Filedata" multiple="multiple" style="position:absolute;top:0;right:0;font-size:100px;" /></div>').appendTo(op);
|
||||
uploader.browseButton.find('>input').css({cursor:'pointer',opacity:0}).change(onselect);
|
||||
}
|
||||
|
||||
uploader.browseButton.css({width:ow+'px', height:oh+'px', left:ol+'px', top:ot+'px', margin:0, padding:0});
|
||||
|
||||
if (event.type == 'focus') uploader.browseButton.find('>input').focus();
|
||||
}
|
||||
|
||||
// browse button
|
||||
settings.browse.bind({mouseover:make_button,focus:make_button});
|
||||
|
||||
// drag and drop (available only Firefox)
|
||||
if (settings.dropzone) {
|
||||
settings.dropzone
|
||||
.bind('dragover', function(){ return false; })
|
||||
.bind('drop', function(event){
|
||||
var data = event.originalEvent.dataTransfer;
|
||||
var obj = {files:data.files||[]};
|
||||
|
||||
onselect.apply(obj);
|
||||
|
||||
return false;
|
||||
});
|
||||
}
|
||||
|
||||
// upload
|
||||
if (settings.upload) {
|
||||
settings.upload.click(function(){
|
||||
uploader.cast('START');
|
||||
return false;
|
||||
});
|
||||
}
|
||||
},
|
||||
check : function() {
|
||||
if (window.XMLHttpRequest) {
|
||||
var xhr = new XMLHttpRequest();
|
||||
if (!!xhr.sendAsBinary || !!xhr.upload) return true;
|
||||
}
|
||||
|
||||
return false;
|
||||
},
|
||||
upload : function(uploader, settings, files) {
|
||||
if (uploader.request || !files.length) return false;
|
||||
|
||||
uploader.cast('ON_START');
|
||||
|
||||
(function uploadNext() {
|
||||
var file = files.shift();
|
||||
var req = uploader.request = new XMLHttpRequest();
|
||||
var bndr = '--------------xe-boundary'+random();
|
||||
var compatFF, data, bin, gap = 0;
|
||||
|
||||
// Firefox compatible mode
|
||||
compatFF = typeof(file.object.getAsBinary) == 'function';
|
||||
|
||||
if (compatFF) {
|
||||
data = '';
|
||||
$.each(settings.params, function(key, val) {
|
||||
data += '--'+bndr+'\r\n';
|
||||
data += 'Content-Disposition: form-data; name="'+key+'"\r\n\r\n';
|
||||
data += val+'\r\n';
|
||||
});
|
||||
|
||||
data += '--'+bndr+'\r\n';
|
||||
data += 'Content-Disposition: form-data; name="Filedata"; filename="'+file.name+'"\r\n';
|
||||
data += 'Content-Type: application/octet-stream\r\n\r\n';
|
||||
data += file.object.getAsBinary();
|
||||
data += '\r\n';
|
||||
data += '--'+bndr+'--\r\n';
|
||||
|
||||
bin = null;
|
||||
gap = data.length - file.object.fileSize;
|
||||
} else {
|
||||
data = new FormData();
|
||||
$.each(settings.params, function(key, val) {
|
||||
data.append(key, val);
|
||||
});
|
||||
data.append('Filedata', file.object);
|
||||
}
|
||||
|
||||
uploader.cast('ON_STARTONE', [file]);
|
||||
|
||||
function nextOrFinish() {
|
||||
if (files.length) {
|
||||
uploadNext();
|
||||
} else {
|
||||
setTimeout(function(){ uploader.cast('ON_FINISH') }, 0);
|
||||
}
|
||||
|
||||
uploader.cast('ON_FINISHONE', [file]);
|
||||
}
|
||||
|
||||
req.onreadystatechange = function() {
|
||||
if (req.readyState == 1) {
|
||||
file.status = 'UPLOADING';
|
||||
return;
|
||||
}
|
||||
if (req.readyState != 4) return;
|
||||
|
||||
uploader.request = null;
|
||||
|
||||
if (req.status == 200) {
|
||||
file.loaded = file.size;
|
||||
file.status = 'DONE';
|
||||
} else {
|
||||
file.status = 'FAILED';
|
||||
}
|
||||
nextOrFinish();
|
||||
};
|
||||
req.onerror = function(event) {
|
||||
file.status = 'FAILED';
|
||||
nextOrFinish();
|
||||
};
|
||||
|
||||
if (req.upload) {
|
||||
req.upload.onprogress =
|
||||
req.upload.onload =
|
||||
function(event){
|
||||
if (event.lengthComputable) {
|
||||
file.loaded = Math.max(event.loaded - gap, 0);
|
||||
uploader.cast('ON_PROGRESS', [file]);
|
||||
}
|
||||
};
|
||||
}
|
||||
|
||||
req.open('POST', settings.url);
|
||||
if (compatFF) {
|
||||
req.setRequestHeader('Content-Type', 'multipart/form-data; boundary='+bndr);
|
||||
req.sendAsBinary(data);
|
||||
} else {
|
||||
req.send(data);
|
||||
}
|
||||
})();
|
||||
},
|
||||
stop : function(uploader, settings) {
|
||||
if (uploader.request) {
|
||||
uploader.request.abort();
|
||||
uploader.request = null;
|
||||
}
|
||||
|
||||
uploader.cast('ON_STOP');
|
||||
}
|
||||
};
|
||||
|
||||
// Adobe Flash
|
||||
runtimes.flash = {
|
||||
version : 0,
|
||||
object : null,
|
||||
uploaders : [],
|
||||
create : function(uploader, settings) {
|
||||
var self = this;
|
||||
var rand = random();
|
||||
var name = 'xe_flashuploader_object'+rand;
|
||||
var swf = (window.request_uri||'/')+'common/js/plugins/uploader/uploader.swf';
|
||||
|
||||
if (!window.xe_flashuploaders) window.xe_flashuploaders = [];
|
||||
|
||||
function make_button(event) {
|
||||
var b = settings.browse.get(0);
|
||||
var op = b.offsetParent;
|
||||
var ow = b.offsetWidth;
|
||||
var oh = b.offsetHeight;
|
||||
var ot = b.offsetTop;
|
||||
var ol = b.offsetLeft;
|
||||
var $div, flash, css;
|
||||
|
||||
if (typeof uploader.flashindex == 'undefined') {
|
||||
uploader.flashindex = xe_flashuploaders.length;
|
||||
|
||||
xe_flashuploaders.push({
|
||||
uploader : uploader,
|
||||
settings : settings,
|
||||
onselect : function(files) {
|
||||
var old_length = uploader.files.length;
|
||||
|
||||
$.each(files, function() {
|
||||
uploader.files.push(new File(this, this.size))
|
||||
});
|
||||
|
||||
uploader.cast('ON_SELECT', [uploader.files, old_length]);
|
||||
},
|
||||
onprogress : function(fileInfo) {},
|
||||
oncomplete : function(fileInfo) {},
|
||||
onerror : function(fileInfo) {},
|
||||
oncancel : function(fileInfo) {}
|
||||
});
|
||||
}
|
||||
|
||||
div = $('#'+name+'-container');
|
||||
css = {position:'absolute',width:ow+'px',height:oh+'px',left:ol+'px',top:ot+'px',margin:0,padding:0,overflow:'hidden'};
|
||||
|
||||
if (!div.length) {
|
||||
div = $('<div />').attr('id', name+'-container').css(css).appendTo(op);
|
||||
div[0].innerHTML = ''
|
||||
+ '<object id="'+name+'" classid="clsid:D27CDB6E-AE6D-11CF-96B8-444553540000" width="100%" height="100%">'
|
||||
+ '<param name="movie" value="'+swf+'" />'
|
||||
+ '<param name="wmode" value="transparent" />'
|
||||
+ '<param name="allowScriptAccess" value="always" />'
|
||||
+ '<embed src="'+swf+'" width="100%" height="100%" name="'+name+'" type="application/x-shockwave-flash" pluginpage="http://www.macromedia.com/go/getflashplayer" wmode="transparent" allowscriptaccess="always" />'
|
||||
+ '</object>';
|
||||
|
||||
}
|
||||
|
||||
flash = window[name] || document[name];
|
||||
|
||||
if (!uploader.flash) {
|
||||
try {
|
||||
if (!flash) throw '';
|
||||
|
||||
var _settings = {};
|
||||
var pass_keys = ['filters','params','url'];
|
||||
|
||||
$.each(settings, function(key,val){
|
||||
if ($.inArray(key, pass_keys) < 0) return true;
|
||||
_settings[key] = val;
|
||||
});
|
||||
|
||||
flash.setConfig(uploader.flashindex, _settings);
|
||||
|
||||
uploader.flash = flash;
|
||||
uploader.flash_box = $(flash).parents('div:first');
|
||||
} catch(e) {
|
||||
return setTimeout(arguments.callee, 10);
|
||||
}
|
||||
}
|
||||
|
||||
if (uploader.flash) {
|
||||
uploader.flash_box.css(css);
|
||||
uploader.flash.setIndex(uploader.flashindex);
|
||||
}
|
||||
}
|
||||
|
||||
// browse button
|
||||
settings.browse.bind({mouseover:make_button,focus:make_button});
|
||||
|
||||
// upload
|
||||
if (settings.upload) {
|
||||
settings.upload.click(function(){
|
||||
uploader.cast('START');
|
||||
return false;
|
||||
});
|
||||
}
|
||||
|
||||
},
|
||||
check : function() {
|
||||
var p = navigator.plugins, v;
|
||||
|
||||
if (p && (v=p['Shockwave Flash'])) {
|
||||
v = v.description;
|
||||
} else {
|
||||
try {
|
||||
v = new ActiveXObject('ShockwaveFlash.ShockwaveFlash').GetVariable('$version');
|
||||
} catch(e) {
|
||||
v = "0.0";
|
||||
}
|
||||
}
|
||||
|
||||
v = v.match(/\d+/g);
|
||||
v = parseFloat(v[0]+'.'+v[1]);
|
||||
|
||||
if (!isNaN(v)) this.version = v;
|
||||
|
||||
return (this.version >= 9);
|
||||
},
|
||||
upload : function(uploader, settings, files) {
|
||||
if (typeof uploader.flashindex == 'undefined') return false;
|
||||
if (uploader.request || !files.length) return false;
|
||||
|
||||
var g_uploader = xe_flashuploaders[uploader.flashindex];
|
||||
|
||||
uploader.cast('ON_START');
|
||||
|
||||
(function uploadNext(){
|
||||
var file = files.shift();
|
||||
|
||||
function nextOrFinish() {
|
||||
if (files.length) {
|
||||
uploadNext();
|
||||
} else {
|
||||
setTimeout(function(){ uploader.cast('ON_FINISH') }, 0);
|
||||
}
|
||||
|
||||
uploader.cast('ON_FINISHONE', [file]);
|
||||
}
|
||||
|
||||
file.status = 'UPLOADING';
|
||||
|
||||
g_uploader.onprogress = function(fileInfo){
|
||||
file.loaded = fileInfo.loaded;
|
||||
uploader.cast('ON_PROGRESS', [file]);
|
||||
};
|
||||
|
||||
g_uploader.oncomplete = function(fileInfo) {
|
||||
file.loaded = fileInfo.loaded;
|
||||
file.status = 'DONE';
|
||||
|
||||
nextOrFinish();
|
||||
};
|
||||
|
||||
g_uploader.onerror = function() {
|
||||
file.status = 'FAILED';
|
||||
nextOrFinish();
|
||||
};
|
||||
|
||||
uploader.flash.startUpload(file.object.index);
|
||||
|
||||
uploader.cast('ON_STARTONE', [file]);
|
||||
})();
|
||||
},
|
||||
stop : function(uploader, settings) {
|
||||
if (typeof uploader.flashindex == 'undefined') return false;
|
||||
}
|
||||
};
|
||||
|
||||
// HTML4
|
||||
runtimes.html4 = {
|
||||
create : function(uploader, settings) {
|
||||
var self = this;
|
||||
var filter = [];
|
||||
|
||||
// filter by extension
|
||||
$.each(settings.filters, function(k,v){ filter=$.merge(filter,v.split(' ')) });
|
||||
|
||||
// when file is selected
|
||||
function onselect() {
|
||||
var ext = (this.value.match(/\.([^\.]+)$/)[1] || '').toLowerCase();
|
||||
|
||||
if ($.inArray(ext, filter) != -1) {
|
||||
uploader.files.push(new File(this, -1));
|
||||
uploader.cast('ON_SELECT', [uploader.files, uploader.files.length - 1]);
|
||||
}
|
||||
|
||||
uploader.browseButton = null;
|
||||
$(this).parent().remove();
|
||||
}
|
||||
|
||||
function make_button(event) {
|
||||
var op = this.offsetParent;
|
||||
var ow = this.offsetWidth;
|
||||
var oh = this.offsetHeight;
|
||||
var ot = this.offsetTop;
|
||||
var ol = this.offsetLeft;
|
||||
|
||||
if (!uploader.browseButton) {
|
||||
uploader.browseButton = $('<div style="position:absolute;overflow:hidden;"><input type="file" name="Filedata" style="position:absolute;top:0;right:0;font-size:100px;" /></div>')
|
||||
.appendTo(op)
|
||||
.change(onselect);
|
||||
uploader.browseButton.find('>input').css({cursor:'pointer',opacity:0});
|
||||
}
|
||||
|
||||
uploader.browseButton.css({width:ow+'px', height:oh+'px', left:ol+'px', top:ot+'px', margin:0, padding:0});
|
||||
|
||||
if (event.type == 'focus') uploader.browseButton.find('>input').focus();
|
||||
}
|
||||
|
||||
// browse button
|
||||
settings.browse.bind({mouseover:make_button,focus:make_button});
|
||||
|
||||
// upload
|
||||
if (settings.upload) {
|
||||
settings.upload.click(function(){
|
||||
uploader.cast('START');
|
||||
return false;
|
||||
});
|
||||
}
|
||||
},
|
||||
check : function() {
|
||||
return true;
|
||||
},
|
||||
upload : function(uploader, settings, files) {
|
||||
if (uploader.request || !files.length) return false;
|
||||
|
||||
var css = {position:'absolute',width:'1px',height:'1px',left:'-100px',top:'-100px',overflow:'hidden'};
|
||||
|
||||
// callback
|
||||
if (!window.callbacks) window.callbacks = {};
|
||||
|
||||
uploader.cast('ON_START');
|
||||
|
||||
(function uploadNext(){
|
||||
var file = files.shift();
|
||||
var id = 'tmp_upload_'+random();
|
||||
var iframe = $('<iframe src="about:blank" name="'+id+'"></iframe>').css(css).appendTo(document.documentElement);
|
||||
var form = $('<form method="post" enctype="multipart/form-data" target="'+id+'"></form>').css(css).appendTo(document.documentElement);
|
||||
|
||||
form.attr('action', settings.url);
|
||||
|
||||
uploader.request = {iframe:iframe, form:form};
|
||||
|
||||
// set parameters
|
||||
settings.params._callback = 'callbacks.'+id; // callback
|
||||
$.each(settings.params, function(k,v) {
|
||||
$('<input type="hidden" name="'+k+'" />').val(v).appendTo(form);
|
||||
});
|
||||
|
||||
// set status of a file
|
||||
file.status = 'UPLOADING';
|
||||
|
||||
callbacks[id] = function(fileInfo) {
|
||||
file.status = 'DONE';
|
||||
file.size = fileInfo.size;
|
||||
file.loaded = fileInfo.size;
|
||||
|
||||
form.find('>input[type=file]').remove();
|
||||
|
||||
uploader.cast('ON_FINISHONE', [file]);
|
||||
|
||||
if (files.length) {
|
||||
setTimeout(uploadNext, 0);
|
||||
} else {
|
||||
uploader.request = null;
|
||||
uploader.cast('ON_FINISH');
|
||||
}
|
||||
|
||||
setTimeout(function(){
|
||||
form.remove();
|
||||
iframe.remove();
|
||||
|
||||
delete callbacks[id];
|
||||
}, 0);
|
||||
};
|
||||
|
||||
form.append(file.object).submit();
|
||||
})();
|
||||
},
|
||||
stop : function(uploader, settings) {
|
||||
if (uploader.request) {
|
||||
uploader.request.iframe.attr('src', 'about:blank').remove();
|
||||
uploader.request.form.remove();
|
||||
uploader.request = null;
|
||||
}
|
||||
}
|
||||
};
|
||||
|
||||
// }}} runtimes
|
||||
|
||||
var mimetypes = {
|
||||
'application/java-archive' : 'jar',
|
||||
'application/java-vm' : 'class',
|
||||
'application/javascript' : 'js',
|
||||
'application/msword' : 'doc dot',
|
||||
'application/pdf' : 'pdf',
|
||||
'application/octet-stream' : 'bin lha lzh iso dmg dist pkg exe',
|
||||
'application/postscript' : 'ai eps ps',
|
||||
'application/rtf' : 'rtf',
|
||||
'application/smil' : 'smi smil',
|
||||
'application/vnd.ms-excel' : 'xls xlm xla xlc xlt xlw',
|
||||
'application/vnd.openxmlformats': 'docx pptx xlsx',
|
||||
'application/vnd.ms-powerpoint' : 'ppt pps pot',
|
||||
'application/zip' : 'zip',
|
||||
'application/x-shockwave-flash' : 'swf swfl',
|
||||
'audio/mpeg' : 'mpga mpega mp2 mp3',
|
||||
'audio/x-wav' : 'wav',
|
||||
'image/bmp' : 'bmp',
|
||||
'image/gif' : 'gif',
|
||||
'image/jpeg' : 'jpeg jpg jpe',
|
||||
'image/png' : 'png',
|
||||
'image/svg+xml' : 'svg svgz',
|
||||
'image/tiff' : 'tiff tif',
|
||||
'text/html' : 'htm html xhtml',
|
||||
'text/plain' : 'asc txt text diff log',
|
||||
'video/mpeg' : 'mpeg mpg mpe',
|
||||
'video/quicktime' : 'qt mov',
|
||||
'video/x-flv' : 'flv',
|
||||
'video/x-ms-asf' : 'asf',
|
||||
'video/x-ms-wmv' : 'wmv',
|
||||
'video/x-msvideo' : 'avi'
|
||||
};
|
||||
|
||||
function File(obj, filesize) {
|
||||
if (runtime == 'html4') {
|
||||
this.name = obj.value.match(/[^\\\/]+$/)[0];
|
||||
} else {
|
||||
this.name = obj.name || obj.fileName;
|
||||
}
|
||||
|
||||
this.size = filesize;
|
||||
this.loaded = 0;
|
||||
this.status = 'QUEUED'; // QUEUED, UPLOADING, FAILED, DONE
|
||||
this.object = obj;
|
||||
};
|
||||
|
||||
function random() {
|
||||
return Math.floor(Math.random()*80000+10000);
|
||||
}
|
||||
|
||||
})(jQuery);
|
||||
BIN
common/js/plugins/uploader/uploader.swf
Normal file
BIN
common/js/plugins/uploader/uploader.swf
Normal file
Binary file not shown.
|
|
@ -84,7 +84,7 @@
|
|||
$lang->author = 'Developer';
|
||||
$lang->password = 'Password';
|
||||
$lang->password1 = 'Password';
|
||||
$lang->password2 = 'Confirm Password';
|
||||
$lang->password2 = 'Retype Password';
|
||||
$lang->admin_id = 'Admin ID';
|
||||
$lang->writer = 'Author';
|
||||
$lang->user_name = 'User Name';
|
||||
|
|
|
|||
|
|
@ -259,7 +259,7 @@
|
|||
$lang->confirm_move = '移動しますか?';
|
||||
$lang->confirm_reset = '初期化しますか?';
|
||||
$lang->confirm_leave = '退会しますか?';
|
||||
$lang->confirm_update = 'Are you sure to update?';
|
||||
$lang->confirm_update = '更新しますか?';
|
||||
|
||||
$lang->column_type = 'タイプ';
|
||||
$lang->column_type_list['text'] = '入力フィールド(text)';
|
||||
|
|
@ -285,7 +285,7 @@
|
|||
$lang->ftp = 'FTP';
|
||||
$lang->ftp_host = 'FTP hostname';
|
||||
$lang->ftp_port = 'FTPポート番号(port)';
|
||||
$lang->about_ftp_password = 'FTP password will not be stored';
|
||||
$lang->about_ftp_password = 'FTP情報は保存されません。';
|
||||
$lang->cmd_check_ftp_connect = 'FTP接続をテストする';
|
||||
$lang->about_ftp_info = "
|
||||
FTP情報は次の場合、利用されます。<br />
|
||||
|
|
@ -302,9 +302,9 @@
|
|||
$lang->msg_ftp_chmod_fail = 'FTPを用いたディレクトリパーミッション(permission)変更に失敗しました。FTPサーバーの設定を再度ご確認下さい。';
|
||||
$lang->msg_ftp_connect_success = 'FTP接続に成功しました。';
|
||||
|
||||
$lang->ftp_path_title = 'FTP 경로 정보 입력';
|
||||
$lang->msg_ftp_installed_realpath = '설치된 XE의 절대경로';
|
||||
$lang->msg_ftp_installed_ftp_realpath = '설치된 XE의 FTP 절대경로 설정';
|
||||
$lang->ftp_path_title = 'FTP経路情報入力';
|
||||
$lang->msg_ftp_installed_realpath = '設置されたXEの絶対経路';
|
||||
$lang->msg_ftp_installed_ftp_realpath = '設置されたXEのFTP絶対経路設定';
|
||||
|
||||
|
||||
// xml filterで用いられているjavascript用のアラートメッセージ
|
||||
|
|
@ -320,5 +320,5 @@
|
|||
$lang->filter->invalid_alpha_number = '%sの形式が正しくありません。半角英数で入力して下さい。';
|
||||
$lang->filter->invalid_number = '%sの形式が正しくありません。半角数字で入力して下さい。';
|
||||
|
||||
$lang->security_warning_embed = "Due to security concern, administrators are not allowed to view embedded items.<BR /> To view them, please use another non-administrator ID.";
|
||||
$lang->security_warning_embed = "保安のため、管理者IDではEMBEDを見ることが出来ません。<br />他のIDでログインして下さい。";
|
||||
?>
|
||||
|
|
|
|||
|
|
@ -1,280 +0,0 @@
|
|||
<?php
|
||||
/**
|
||||
* @author NHN (developer@xpressengine.com)
|
||||
* @brief css 및 js Optimizer 처리 gateway
|
||||
*
|
||||
**/
|
||||
|
||||
if(!$_GET['t'] || !$_GET['l']) exit;
|
||||
|
||||
// set env
|
||||
$XE_PATH = substr(dirname(__FILE__),0,strlen('common')*-1);
|
||||
define('_XE_PATH_', $XE_PATH);
|
||||
define('__ZBXE__', true);
|
||||
define('__XE_LOADED_CLASS__', true);
|
||||
include _XE_PATH_ . 'config/config.inc.php';
|
||||
|
||||
$dbconfig_file =_XE_PATH_ . 'files/config/db.config.php';
|
||||
if(file_exists($dbconfig_file)){
|
||||
include $dbconfig_file;
|
||||
if($db_info && $db_info->use_template_cache){
|
||||
include _XE_PATH_ . 'classes/handler/Handler.class.php';
|
||||
include _XE_PATH_ . 'classes/cache/CacheHandler.class.php';
|
||||
$oCacheHandler = new CacheHandler('template', $db_info);
|
||||
$cache_support = $oCacheHandler->isSupport();
|
||||
}else{
|
||||
$cache_support = false;
|
||||
}
|
||||
}else{
|
||||
$cache_support = false;
|
||||
}
|
||||
|
||||
//$XE_WEB_PATH = substr($XE_PATH,strlen($_SERVER['DOCUMENT_ROOT']));
|
||||
$XE_WEB_PATH_arr = explode("/", $_SERVER['REQUEST_URI']);
|
||||
array_pop($XE_WEB_PATH_arr);
|
||||
array_pop($XE_WEB_PATH_arr);
|
||||
$XE_WEB_PATH = implode("/", $XE_WEB_PATH_arr);
|
||||
if(substr($XE_WEB_PATH,-1) != "/") $XE_WEB_PATH .= "/";
|
||||
$cache_path = $XE_PATH . 'files/cache/optimized/';
|
||||
$type = $_GET['t'];
|
||||
$list_file = $cache_path . $_GET['l'] .'.info.php';
|
||||
|
||||
|
||||
function getRealPath($file){
|
||||
if($file{0}=='.' && $file{1} =='/') $file = _XE_PATH_.substr($file, 2);
|
||||
return $file;
|
||||
}
|
||||
|
||||
function getMtime($file){
|
||||
$file = getRealPath($file);
|
||||
if(file_exists($file)) return filemtime($file);
|
||||
}
|
||||
|
||||
function getMaxMtime($list){
|
||||
$mtime = array();
|
||||
foreach($list as $file) $mtime[] = getMtime($file);
|
||||
return max($mtime);
|
||||
}
|
||||
|
||||
// check
|
||||
if($cache_support){
|
||||
$list = $oCacheHandler->get($_GET['l']);
|
||||
$mtime = getMaxMtime($list);
|
||||
}else{
|
||||
if(!file_exists($list_file)) exit;
|
||||
$list = include($list_file);
|
||||
$mtime = getMaxMtime(array_merge($list,array($list_file)));
|
||||
}
|
||||
if(!is_array($list)) exit;
|
||||
|
||||
// set content-type
|
||||
if($type == '.css'){
|
||||
$content_type = 'text/css';
|
||||
} else if($type == '.js') {
|
||||
$content_type = 'text/javascript';
|
||||
}
|
||||
|
||||
header("Content-Type: ".$content_type."; charset=UTF-8");
|
||||
|
||||
// return 304
|
||||
if (!empty($_SERVER['HTTP_IF_MODIFIED_SINCE'])) {
|
||||
$modifiedSince = strtotime($_SERVER['HTTP_IF_MODIFIED_SINCE']);
|
||||
if ($modifiedSince && ($modifiedSince == $mtime)) {
|
||||
header('HTTP/1.1 304 Not Modified');
|
||||
header("Connection: close");
|
||||
exit;
|
||||
}
|
||||
}
|
||||
function useContentEncoding(){
|
||||
if( (defined('__OB_GZHANDLER_ENABLE__') && __OB_GZHANDLER_ENABLE__ == 1)
|
||||
&& strpos($_SERVER['HTTP_ACCEPT_ENCODING'], 'gzip')!==false
|
||||
&& function_exists('ob_gzhandler')
|
||||
&& extension_loaded('zlib')) {
|
||||
return true;
|
||||
}
|
||||
return false;
|
||||
}
|
||||
|
||||
function getCacheKey($list){
|
||||
$key = 'optimized:' . join('',$list);
|
||||
return md5($key);
|
||||
}
|
||||
|
||||
function printFileList($list){
|
||||
global $mtime, $cache_support, $oCacheHandler;
|
||||
|
||||
$content_encoding = useContentEncoding();
|
||||
$output = null;
|
||||
|
||||
if($cache_support){
|
||||
$cache_key = getCacheKey($list);
|
||||
$output = $oCacheHandler->get($cache_key, $mtime);
|
||||
}
|
||||
|
||||
if(!$output || trim($output)==''){
|
||||
for($i=0,$c=count($list);$i<$c;$i++){
|
||||
$file = getRealPath($list[$i]);
|
||||
if(file_exists($file)){
|
||||
$output .= '/* file: ' . str_replace(_XE_PATH_,'./',$file) . " */\n";
|
||||
$output .= file_get_contents($file);
|
||||
$output .= "\n";
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
if($cache_support) $oCacheHandler->put($cache_key, $output);
|
||||
|
||||
if($content_encoding) $output = ob_gzhandler($output, 5);
|
||||
$size = strlen($output);
|
||||
|
||||
if($size > 0){
|
||||
header("Cache-Control: private");
|
||||
header("Pragma: cache");
|
||||
header("Connection: close");
|
||||
header("Last-Modified: " . substr(gmdate('r', $mtime), 0, -5). "GMT");
|
||||
header("ETag: \"". md5(join(' ', $list)) .'-'. dechex($mtime) .'-'.dechex($size)."\"");
|
||||
}
|
||||
|
||||
// Fix : 서버에서 gzip 압축을 제공하는 경우 콘텐츠의 길이가 실제와 일치하지 않아 문제가 발생하여
|
||||
// Content-Length 헤더를 생략함. Core #19159958 이슈 참고.
|
||||
// header("Content-Length: ". $size);
|
||||
|
||||
if($content_encoding) header("Content-Encoding: gzip");
|
||||
|
||||
echo($output);
|
||||
}
|
||||
|
||||
function write($file_name, $buff, $mode='w'){
|
||||
$file_name = getRealPath($file_name);
|
||||
if(@!$fp = fopen($file_name,$mode)) return false;
|
||||
fwrite($fp, $buff);
|
||||
fclose($fp);
|
||||
@chmod($file_name, 0644);
|
||||
}
|
||||
|
||||
function read($file_name) {
|
||||
$file_name = getRealPath($file_name);
|
||||
|
||||
if(!file_exists($file_name)) return;
|
||||
$filesize = filesize($file_name);
|
||||
if($filesize<1) return;
|
||||
|
||||
if(function_exists('file_get_contents')) return file_get_contents($file_name);
|
||||
|
||||
$fp = fopen($file_name, "r");
|
||||
$buff = '';
|
||||
if($fp) {
|
||||
while(!feof($fp) && strlen($buff)<=$filesize) {
|
||||
$str = fgets($fp, 1024);
|
||||
$buff .= $str;
|
||||
}
|
||||
fclose($fp);
|
||||
}
|
||||
return $buff;
|
||||
}
|
||||
|
||||
function makeCacheFileCSS($css_file, $cache_file, $return=false){
|
||||
$str = read($css_file);
|
||||
$str = replaceCssPath($css_file, trim(convertEncodingStr($str)));
|
||||
|
||||
if($return){
|
||||
return $str;
|
||||
}else{
|
||||
write($cache_file, $str."\n");
|
||||
unset($str);
|
||||
}
|
||||
}
|
||||
|
||||
function replaceCssPath($file, $str) {
|
||||
global $tmp_css_path;
|
||||
|
||||
// css 파일의 위치를 구함
|
||||
$tmp_css_path = preg_replace("/^\.\//is","",dirname($file))."/";
|
||||
// url() 로 되어 있는 css 파일의 경로를 변경
|
||||
$str = preg_replace_callback('/url\(([^\)]*)\)/is', '_replaceCssPath', $str);
|
||||
|
||||
// charset 지정 문구를 제거
|
||||
$str = preg_replace('!@charset([^;]*?);!is','',$str);
|
||||
|
||||
return $str;
|
||||
}
|
||||
|
||||
function _replaceCssPath($matches) {
|
||||
global $tmp_css_path, $XE_WEB_PATH;
|
||||
|
||||
$path = str_replace(array('"',"'"),'',$matches[1]);
|
||||
if(substr($path,0,1)=='/' || strpos($path,'://')!==false || strpos($path,'.htc')!==false) return 'url('.$path.')';
|
||||
if(substr($path,0,2)=='./') $path = substr($path,2);
|
||||
$target = $XE_WEB_PATH.$tmp_css_path.$path;
|
||||
while(strpos($target,'/../')!==false) {
|
||||
$target = preg_replace('/\/([^\/]+)\/\.\.\//','/',$target);
|
||||
}
|
||||
|
||||
return 'url('.$target.')';
|
||||
}
|
||||
|
||||
function convertEncodingStr($str) {
|
||||
if(!$str) return '';
|
||||
|
||||
$charset_list = array(
|
||||
'UTF-8', 'EUC-KR', 'CP949', 'ISO8859-1', 'EUC-JP', 'SHIFT_JIS', 'CP932',
|
||||
'EUC-CN', 'HZ', 'GBK', 'GB18030', 'EUC-TW', 'BIG5', 'CP950', 'BIG5-HKSCS',
|
||||
'ISO2022-CN', 'ISO2022-CN-EXT', 'ISO2022-JP', 'ISO2022-JP-2', 'ISO2022-JP-1',
|
||||
'ISO8859-6', 'ISO8859-8', 'JOHAB', 'ISO2022-KR', 'CP1255', 'CP1256', 'CP862',
|
||||
'ASCII', 'ISO8859-1', 'ISO8850-2', 'ISO8850-3', 'ISO8850-4', 'ISO8850-5',
|
||||
'ISO8850-7', 'ISO8850-9', 'ISO8850-10', 'ISO8850-13', 'ISO8850-14',
|
||||
'ISO8850-15', 'ISO8850-16', 'CP1250', 'CP1251', 'CP1252', 'CP1253', 'CP1254',
|
||||
'CP1257', 'CP850', 'CP866',
|
||||
);
|
||||
|
||||
for($i=0,$c=count($charset_list);$i<$c;$i++) {
|
||||
$charset = $charset_list[$i];
|
||||
if($str == iconv($charset, $charset.'//IGNORE',$str)){
|
||||
if($charset == 'UTF-8') return $str;
|
||||
return iconv($charset, 'UTF-8//IGNORE', $str);
|
||||
}
|
||||
}
|
||||
|
||||
return $str;
|
||||
}
|
||||
if($type == '.js'){
|
||||
printFileList($list);
|
||||
}else if($type == '.css'){
|
||||
$css = array();
|
||||
|
||||
if($cache_support){
|
||||
foreach($list as $file){
|
||||
$cache_file = $cache_path . md5($file). '.cache.php';
|
||||
$css[] = getRealPath($cache_file);
|
||||
}
|
||||
|
||||
$cache_key = getCacheKey($css);
|
||||
|
||||
$buff = $oCacheHandler->get($cache_key, $mtime);
|
||||
if(!$buff){
|
||||
$buff = '';
|
||||
foreach($list as $file){
|
||||
$buff .= makeCacheFileCSS($file, '', true);
|
||||
}
|
||||
|
||||
$oCacheHandler->put($cache_key, $buff);
|
||||
}
|
||||
|
||||
}else{
|
||||
foreach($list as $file){
|
||||
$cache_file = $cache_path . md5($file). '.cache.php';
|
||||
$cache_mtime = getMtime($cache_file);
|
||||
$css_mtime = getMtime($file);
|
||||
|
||||
// check modified
|
||||
if($css_mtime > $cache_mtime){
|
||||
makeCacheFileCSS($file, getRealPath($cache_file));
|
||||
}
|
||||
$css[] = getRealPath($cache_file);
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
printFileList($css);
|
||||
}
|
||||
?>
|
||||
|
|
@ -75,5 +75,15 @@
|
|||
|
||||
<div id="waitingforserverresponse"></div>
|
||||
|
||||
{@ $js_body_files = Context::getJsFile('body') }
|
||||
<!--@foreach($js_body_files as $key => $js_file)-->
|
||||
<!--@if($js_file['targetie'])-->
|
||||
<!--[if {$js_file['targetie']}]>
|
||||
<!--@end-->
|
||||
<script type="text/javascript" src="{$js_file['file']}"></script>
|
||||
<!--@if($js_file['targetie'])-->
|
||||
<![endif]-->
|
||||
<!--@end-->
|
||||
<!--@end-->
|
||||
</body>
|
||||
</html>
|
||||
|
|
@ -53,5 +53,16 @@
|
|||
{$content}
|
||||
|
||||
{Context::getHtmlFooter()}
|
||||
|
||||
{@ $js_body_files = Context::getJsFile('body') }
|
||||
<!--@foreach($js_body_files as $key => $js_file)-->
|
||||
<!--@if($js_file['targetie'])-->
|
||||
<!--[if {$js_file['targetie']}]>
|
||||
<!--@end-->
|
||||
<script type="text/javascript" src="{$js_file['file']}"></script>
|
||||
<!--@if($js_file['targetie'])-->
|
||||
<![endif]-->
|
||||
<!--@end-->
|
||||
<!--@end-->
|
||||
</body>
|
||||
</html>
|
||||
|
|
|
|||
|
|
@ -13,13 +13,18 @@
|
|||
* @brief XE의 전체 버전 표기
|
||||
* 이 파일의 수정이 없더라도 공식 릴리즈시에 수정되어 함께 배포되어야 함
|
||||
**/
|
||||
define('__ZBXE_VERSION__', '1.4.4.1');
|
||||
define('__ZBXE_VERSION__', '1.4.4.2');
|
||||
|
||||
/**
|
||||
* @brief zbXE가 설치된 장소의 base path를 구함
|
||||
**/
|
||||
define('_XE_PATH_', str_replace('config/config.inc.php', '', str_replace('\\', '/', __FILE__)));
|
||||
|
||||
/**
|
||||
* @brief 쿠키 이외의 값에서도 세션을 인식할 수 있도록 함(파일업로드 등에서의 문제 수정)
|
||||
**/
|
||||
ini_set('session.use_only_cookies', 0);
|
||||
|
||||
/**
|
||||
* @brief 기본 설정에 우선하는 사용자 설정 파일
|
||||
* config/config.user.inc.php 파일에 아래 내용을 저장하면 됨
|
||||
|
|
|
|||
|
|
@ -488,7 +488,7 @@
|
|||
* ./files/_debug_message.php 파일에 $buff 내용을 출력한다.
|
||||
* tail -f ./files/_debug_message.php 하여 계속 살펴 볼 수 있다
|
||||
**/
|
||||
function debugPrint($debug_output = null, $display_option = true) {
|
||||
function debugPrint($debug_output = null, $display_option = true, $file = '_debug_message.php') {
|
||||
if(!(__DEBUG__ & 1)) return;
|
||||
|
||||
static $firephp;
|
||||
|
|
@ -523,7 +523,7 @@
|
|||
if(__DEBUG_PROTECT__ === 1 && __DEBUG_PROTECT_IP__ != $_SERVER['REMOTE_ADDR']) {
|
||||
return;
|
||||
}
|
||||
$debug_file = _XE_PATH_.'files/_debug_message.php';
|
||||
$debug_file = _XE_PATH_.'files/'.$file;
|
||||
if(function_exists("memory_get_usage"))
|
||||
{
|
||||
$debug_output = sprintf("[%s %s:%d] - mem(%s)\n%s\n", date('Y-m-d H:i:s'), $file_name, $line_num, FileHandler::filesize(memory_get_usage()), print_r($debug_output, true));
|
||||
|
|
|
|||
|
|
@ -50,7 +50,7 @@
|
|||
<description xml:lang="ko">레이아웃의 상단에 표시될 로고이미지를 입력하세요. (세로길이가 28px인 투명 이미지가 가장 어울립니다)</description>
|
||||
<description xml:lang="jp">レイアウトの上段に表示されるロゴイメージを入力して下さい。 (縦幅が28pxである透明イメージをお勧めします。。)</description>
|
||||
<description xml:lang="zh-CN">请输入显示在布局顶部的LOGO图片(高度为28px的透明图片为适)。</description>
|
||||
<description xml:lang="zh-TW">請輸入要顯示在版面上端的 Logo 圖片。(適當高度為28px的透明圖片。)</description>
|
||||
<description xml:lang="zh-TW">請輸入要顯示在版面上端的 Logo 圖片。(適當高度為 28px 的透明圖片。)</description>
|
||||
<description xml:lang="en">Please input a logo image which will be displayed on the top of layout. (Transparent image with height of 28px is recommended.)</description>
|
||||
<description xml:lang="ge">Bitte geben Sie ein Logo das Bild wird auf dem oberen Layout. (Transparent Bild mit einer Höhe von 28px wird empfohlen).</description>
|
||||
<description xml:lang="ru">Введите логотип изображение, которое будет отображаться в верхней части формы. (Прозрачный изображение с высотой 28px рекомендуется.)</description>
|
||||
|
|
|
|||
|
|
@ -13,5 +13,5 @@
|
|||
$lang->addon_history = 'Addon History';
|
||||
|
||||
$lang->about_addon_mid = "Addons can select targets.<br />(All targets will be selected when nothing is selected)";
|
||||
$lang->about_addon = 'Addon is for controlling actions rather than displaying the HTML results.<br />Simply by toggling any addons you want on or off, you can use very useful functions to administer your website';
|
||||
$lang->about_addon = 'Addons control many actions performed in your site rather than display HTML results.<br />You can control useful functions simply by toggling ON/OFF switch';
|
||||
?>
|
||||
|
|
|
|||
|
|
@ -33,7 +33,6 @@
|
|||
Context::set('time_zone', $GLOBALS['_time_zone']);
|
||||
Context::set('use_rewrite', $db_info->use_rewrite=='Y'?'Y':'N');
|
||||
Context::set('use_sso', $db_info->use_sso=='Y'?'Y':'N');
|
||||
Context::set('use_optimizer', $db_info->use_optimizer!='N'?'Y':'N');
|
||||
Context::set('use_spaceremover', $db_info->use_spaceremover?$db_info->use_spaceremover:'Y');
|
||||
Context::set('qmail_compatibility', $db_info->qmail_compatibility=='Y'?'Y':'N');
|
||||
Context::set('use_db_session', $db_info->use_db_session=='N'?'N':'Y');
|
||||
|
|
|
|||
|
|
@ -78,15 +78,16 @@
|
|||
$lang->about_server_ports = '一般的に使われているHTTPの80、HTTPSの443以外の他のポートを使うために、ポートを指定して下さい。';
|
||||
$lang->use_db_session = 'DBで認証セッション管理';
|
||||
$lang->about_db_session = '認証の時に使われるPHPセッションをDBで使う機能です。<br />ウェブサーバーの負荷が低いサイトではこの機能をオフにすることでむしろサイトのレスポンスが向上されることもあります。<br />また、この機能をオンにすると、「現在ログイン中の会員」の機能が不可になります。';
|
||||
$lang->sftp = "Use SFTP";
|
||||
$lang->ftp_get_list = "Get List";
|
||||
$lang->ftp_remove_info = 'Remove FTP Info.';
|
||||
$lang->msg_ftp_invalid_path = 'Failed to read the specified FTP Path.';
|
||||
$lang->msg_self_restart_cache_engine = 'Please restart Memcached or cache daemon.';
|
||||
$lang->mobile_view = 'Use Mobile View';
|
||||
$lang->about_mobile_view = 'If accessing with a smartphone, display content with mobile layout.';
|
||||
$lang->autoinstall = 'イージーインストール';
|
||||
$lang->sftp = "SFTP使用";
|
||||
$lang->ftp_get_list = "ディレクトリ目録要請";
|
||||
$lang->ftp_remove_info = 'FTP情報削除';
|
||||
$lang->msg_ftp_invalid_path = '指定されたFTPパスへのアクセスに失敗しました。';
|
||||
$lang->msg_self_restart_cache_engine = 'メムキャッシュドまたはキャッシュデーモンを再起動して下さい。';
|
||||
$lang->mobile_view = 'モバイルスキン使用';
|
||||
$lang->about_mobile_view = 'スマート携帯などを通じてサイトに接続した場合、モバイル画面に最適化されたレイアウトを使用するように設定します。';
|
||||
|
||||
$lang->last_week = 'Last week';
|
||||
$lang->this_week = 'This week';
|
||||
$lang->autoinstall = 'イージーインストール';
|
||||
|
||||
$lang->last_week = '先週';
|
||||
$lang->this_week = '今週';
|
||||
?>
|
||||
|
|
|
|||
|
|
@ -56,10 +56,10 @@
|
|||
$lang->msg_default_act_is_null = '沒有指定預設管理員的動作,是無法新增到快速選單的。';
|
||||
|
||||
$lang->welcome_to_xe = 'XE管理頁面';
|
||||
$lang->about_lang_env = "可以設置顯示語言給首次訪問的使用者。修改語言環境後,請按[儲存]按鈕進行儲存。";
|
||||
$lang->about_lang_env = "請選擇預設語言。選擇完畢後,請按[儲存]按鈕。";
|
||||
|
||||
$lang->xe_license = 'XE遵循 GPL 協議';
|
||||
$lang->about_shortcut = '可以刪除新增到常用模組中的快捷選單。';
|
||||
$lang->about_shortcut = '可以刪除新增到常用模組中的快速選單。';
|
||||
|
||||
$lang->yesterday = "昨天";
|
||||
$lang->today = "今天";
|
||||
|
|
@ -75,7 +75,7 @@
|
|||
);
|
||||
$lang->about_use_ssl = "選擇手動時,在會員註冊或修改資料等動作時才會使用 SSL 功能。<br/>選擇開啟時,所有的服務都會使用 SSL 功能。";
|
||||
$lang->server_ports = "主機埠口";
|
||||
$lang->about_server_ports = "HTTP預設埠口是『80』、HTTPS是『443』,如果想使用其他的埠口的話,請自行設定。";
|
||||
$lang->about_server_ports = "HTTP、HTTPS預設埠口分別是『80』、『443』<br />如果想使用其他的埠口的話,請自行設定。";
|
||||
$lang->use_db_session = 'DB session認證';
|
||||
$lang->about_db_session = '使用 PHP session 進行 DB 認證。<br/>關閉此功能對於負荷較低的網站可提高效率。<br/>使用此功能會無法統計線上人數。';
|
||||
$lang->sftp = "使用 SFTP";
|
||||
|
|
|
|||
|
|
@ -35,6 +35,7 @@
|
|||
<th><div>{$lang->use_sso}</div></th>
|
||||
<td>
|
||||
<input type="checkbox" name="use_sso" value="Y" <!--@if($use_sso=='Y')-->checked="checked"<!--@end--> />
|
||||
<p>{$lang->about_sso}</p>
|
||||
</td>
|
||||
</tr>
|
||||
<tr>
|
||||
|
|
@ -51,14 +52,6 @@
|
|||
<input type="text" name="_target_module" id="_target_module" class="inputTypeText w300" value="{$start_module->mid} ({htmlspecialchars($start_module->browser_title)})" readonly="readonly" /><a href="{getUrl('','module','module','act','dispModuleSelectList','id','target_module','type','single')}" onclick="popopen(this.href,'ModuleSelect');return false;" class="button green"><span>{$lang->cmd_select}</span></a>
|
||||
</td>
|
||||
</tr>
|
||||
|
||||
<tr>
|
||||
<th><div>{$lang->use_optimizer}</div></th>
|
||||
<td>
|
||||
<input type="checkbox" name="use_optimizer" value="Y" <!--@if($use_optimizer!='N')-->checked="checked"<!--@end--> />
|
||||
<p>{$lang->about_optimizer}</p>
|
||||
</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<th><div>Language</div></th>
|
||||
<td>
|
||||
|
|
|
|||
|
|
@ -190,10 +190,6 @@
|
|||
<tr>
|
||||
<th><div>{$lang->use_sso}</div></th>
|
||||
<td><!--@if($use_sso=='Y')-->{$lang->use}<!--@else-->{$lang->notuse}<!--@end--></td>
|
||||
</tr>
|
||||
<tr>
|
||||
<th><div>{$lang->use_optimizer}</div></th>
|
||||
<td><!--@if($use_optimizer=='Y')-->{$lang->use}<!--@else-->{$lang->notuse}<!--@end--></td>
|
||||
</tr>
|
||||
<tr>
|
||||
<th><div>{$lang->mobile_view}</div></th>
|
||||
|
|
|
|||
|
|
@ -28,8 +28,8 @@
|
|||
$lang->description_download = "FTPの利用が出来ない場合は、直接ダウンロードし、サーバー上の該当パスにてインストールして下さい。 (一つ上階層にて解凍します。 ./modules/board の場合 ./modulesにて tarを解凍して下さい。)";
|
||||
$lang->path = "インストールパス";
|
||||
$lang->cmd_download = "ダウンロード";
|
||||
$lang->view_installed_packages = "Installed Packages";
|
||||
$lang->msg_ftp_password_input = "Please input FTP password.";
|
||||
$lang->dependant_list = "이 패키지에 의존하는 패키지 목록";
|
||||
$lang->description_uninstall = "패키지를 삭제합니다. 모듈의 경우 모든 데이터가 사라집니다.";
|
||||
$lang->view_installed_packages = "インストールされたパッケージ";
|
||||
$lang->msg_ftp_password_input = "FTPパスワードを入力して下さい。";
|
||||
$lang->dependant_list = "このパッケージに依存するパッケージのリスト";
|
||||
$lang->description_uninstall = "パッケージを削除します。モジュールの場合、すべてのデータを失います。";
|
||||
?>
|
||||
|
|
|
|||
|
|
@ -26,16 +26,11 @@
|
|||
* @brief 설치가 이상이 없는지 체크하는 method
|
||||
**/
|
||||
function checkUpdate() {
|
||||
$db_info = Context::getDbInfo ();
|
||||
// 카운터에 site_srl추가
|
||||
$oDB = &DB::getInstance();
|
||||
if(!$oDB->isColumnExists('counter_log', 'site_srl')) return true;
|
||||
if ($db_info->db_type == 'cubrid') {
|
||||
if(!$oDB->isIndexExists('counter_log', $oDB->prefix.'counter_log_idx_site_counter_log')) return true;
|
||||
}
|
||||
else {
|
||||
if(!$oDB->isIndexExists('counter_log','idx_site_counter_log')) return true;
|
||||
}
|
||||
if(!$oDB->isIndexExists('counter_log','idx_site_counter_log')) return true;
|
||||
|
||||
return false;
|
||||
}
|
||||
|
||||
|
|
@ -43,19 +38,10 @@
|
|||
* @brief 업데이트 실행
|
||||
**/
|
||||
function moduleUpdate() {
|
||||
$db_info = Context::getDBInfo ();
|
||||
// 카운터에 site_srl추가
|
||||
$oDB = &DB::getInstance();
|
||||
if(!$oDB->isColumnExists('counter_log', 'site_srl'))
|
||||
$oDB->addColumn('counter_log','site_srl','number',11,0,true);
|
||||
if ($db_info->db_type == 'cubrid') {
|
||||
if(!$oDB->isIndexExists('counter_log',$oDB->prefix.'counter_log_idx_site_counter_log'))
|
||||
$oDB->addIndex('counter_log',$oDB->prefix.'counter_log_idx_site_counter_log',array('site_srl','ipaddress'),false);
|
||||
}
|
||||
else {
|
||||
if(!$oDB->isIndexExists('counter_log','idx_site_counter_log'))
|
||||
$oDB->addIndex('counter_log','idx_site_counter_log',array('site_srl','ipaddress'),false);
|
||||
}
|
||||
if(!$oDB->isColumnExists('counter_log', 'site_srl')) $oDB->addColumn('counter_log','site_srl','number',11,0,true);
|
||||
if(!$oDB->isIndexExists('counter_log','idx_site_counter_log')) $oDB->addIndex('counter_log','idx_site_counter_log',array('site_srl','ipaddress'),false);
|
||||
|
||||
return new Object(0, 'success_updated');
|
||||
}
|
||||
|
|
|
|||
|
|
@ -3,6 +3,6 @@
|
|||
<table name="counter_site_status" />
|
||||
</tables>
|
||||
<conditions>
|
||||
<condition operation="equal" column="site_srl" var="site_srl" filter="number" pipe="and" />
|
||||
<condition operation="equal" column="site_srl" var="site_srl" filter="number" notnull="notnull" pipe="and" />
|
||||
</conditions>
|
||||
</query>
|
||||
|
|
|
|||
|
|
@ -3,6 +3,6 @@
|
|||
<table name="counter_log" />
|
||||
</tables>
|
||||
<conditions>
|
||||
<condition operation="equal" column="site_srl" var="site_srl" filter="number" pipe="and" />
|
||||
<condition operation="equal" column="site_srl" var="site_srl" filter="number" notnull="notnull" pipe="and" />
|
||||
</conditions>
|
||||
</query>
|
||||
|
|
|
|||
|
|
@ -428,10 +428,14 @@
|
|||
|
||||
function getExtraEidValue($eid) {
|
||||
$extra_vars = $this->getExtraVars();
|
||||
// eid 명칭으로 확장변수 처리
|
||||
foreach($extra_vars as $idx => $key) {
|
||||
$extra_eid[$key->eid] = $key;
|
||||
}
|
||||
|
||||
if($extra_vars)
|
||||
{
|
||||
// eid 명칭으로 확장변수 처리
|
||||
foreach($extra_vars as $idx => $key) {
|
||||
$extra_eid[$key->eid] = $key;
|
||||
}
|
||||
}
|
||||
return $extra_eid[$eid]->value;
|
||||
}
|
||||
|
||||
|
|
|
|||
|
|
@ -96,7 +96,7 @@
|
|||
if(!$document_srl) return new documentItem();
|
||||
|
||||
if(!isset($GLOBALS['XE_DOCUMENT_LIST'][$document_srl])) {
|
||||
$oDocument = new documentItem($document_srl, true);
|
||||
$oDocument = new documentItem($document_srl, $load_extra_vars);
|
||||
$GLOBALS['XE_DOCUMENT_LIST'][$document_srl] = $oDocument;
|
||||
if($load_extra_vars) $this->setToAllDocumentExtraVars();
|
||||
}
|
||||
|
|
|
|||
|
|
@ -95,6 +95,6 @@
|
|||
'trash_ipaddress' => '削除者のIPアドレス',
|
||||
);
|
||||
|
||||
$lang->success_trashed = "Successfully moved to trashcan";
|
||||
$lang->msg_not_selected_document = '선택된 문서가 없습니다.';
|
||||
$lang->success_trashed = "ごみ箱に移動させました。";
|
||||
$lang->msg_not_selected_document = '選択された書き込みがありません。';
|
||||
?>
|
||||
|
|
|
|||
|
|
@ -25,7 +25,7 @@
|
|||
<column name="user_id" var="user_id" default="" />
|
||||
<column name="user_name" var="user_name" default="" />
|
||||
<column name="email_address" var="email_address" filter="email" maxlength="250" />
|
||||
<column name="homepage" var="homepage" filter="homepage" maxlength="250" />
|
||||
<column name="homepage" var="homepage" filter="homepage" default="" maxlength="250" />
|
||||
<column name="tags" var="tags" />
|
||||
<column name="extra_vars" var="extra_vars" />
|
||||
<column name="regdate" var="regdate" default="curdate()" />
|
||||
|
|
|
|||
|
|
@ -1,39 +1,56 @@
|
|||
function insertEmoticon(obj) {
|
||||
if(typeof(opener)=='undefined') return;
|
||||
jQuery(function($){
|
||||
|
||||
var url = obj.src.replace(request_uri,'');
|
||||
var text = "<img src=\""+url+"\" alt=\"emoticon\">";
|
||||
var is_popup = window._isPoped;
|
||||
|
||||
opener.editorFocus(opener.editorPrevSrl);
|
||||
/**
|
||||
* @brief Get emoticon list by name
|
||||
* @params String emoticon name
|
||||
*/
|
||||
function getEmoticons(emoName) {
|
||||
var params = {component:'emoticon', emoticon:emoName, method:'getEmoticonList'};
|
||||
var resp_tags = 'error message emoticons'.split(' ');
|
||||
|
||||
var iframe_obj = opener.editorGetIFrame(opener.editorPrevSrl)
|
||||
|
||||
opener.editorReplaceHTML(iframe_obj, text);
|
||||
self.focus();
|
||||
}
|
||||
|
||||
/* 선택된 이모티콘 목록을 가져옴 */
|
||||
function getEmoticons(emoticon) {
|
||||
var params = new Array();
|
||||
params['component'] = "emoticon";
|
||||
params['emoticon'] = emoticon;
|
||||
params['method'] = "getEmoticonList";
|
||||
|
||||
var response_tags = new Array('error','message','emoticons');
|
||||
exec_xml('editor', 'procEditorCall', params, completeGetEmoticons, response_tags);
|
||||
exec_xml('editor', 'procEditorCall', params, completeGetEmoticons, resp_tags);
|
||||
}
|
||||
|
||||
/**
|
||||
* @brief Load callback
|
||||
*/
|
||||
function completeGetEmoticons(ret_obj) {
|
||||
var emoticons = ret_obj['emoticons'].split("\n");
|
||||
var html = [];
|
||||
|
||||
var zone = xGetElementById("popBody");
|
||||
var html = "";
|
||||
for(var i=0;i<emoticons.length;i++) {
|
||||
html += '<img src="./modules/editor/components/emoticon/tpl/images/'+emoticons[i]+'" onclick="insertEmoticon(this);return false;" class="emoticon" />';
|
||||
html[html.length] = '<img src="./modules/editor/components/emoticon/tpl/images/'+emoticons[i]+'" class="emoticon" />';
|
||||
}
|
||||
xInnerHtml(zone, html);
|
||||
setFixedPopupSize();
|
||||
setTimeout(setFixedPopupSize,1000);
|
||||
jQuery('#popBody').html(html.join('')).find('img.emoticon').click(insertEmoticon);
|
||||
|
||||
if (_isPoped) {
|
||||
setFixedPopupSize();
|
||||
setTimeout(setFixedPopupSize,1000);
|
||||
}
|
||||
}
|
||||
|
||||
jQuery(window).load(function() { getEmoticons('msn'); });
|
||||
/**
|
||||
* @brief Insert a selected emoticon into the document
|
||||
* @params Event jQuery event
|
||||
*/
|
||||
function insertEmoticon() {
|
||||
var url, html, iframe, win = is_popup?opener:window;
|
||||
|
||||
if(!win) return;
|
||||
|
||||
html = '<img src="'+this.src+'" class="emoticon" />';
|
||||
|
||||
win.editorFocus(win.editorPrevSrl);
|
||||
win.editorRelKeys[win.editorPrevSrl].pasteHTML(html);
|
||||
|
||||
if (is_popup) window.focus();
|
||||
|
||||
return false;
|
||||
}
|
||||
|
||||
// load default emoticon set
|
||||
getEmoticons('msn');
|
||||
|
||||
});
|
||||
|
|
|
|||
|
|
@ -47,21 +47,13 @@
|
|||
* @brief 설치가 이상이 없는지 체크하는 method
|
||||
**/
|
||||
function checkUpdate() {
|
||||
$db_info = Context::getDBInfo ();
|
||||
$oModuleModel = &getModel('module');
|
||||
|
||||
$oDB = &DB::getInstance();
|
||||
|
||||
// 2009. 06. 15 자동저장시 module_srl 을 저장
|
||||
if(!$oDB->isColumnExists("editor_autosave","module_srl")) return true;
|
||||
|
||||
// 2009. 06. 15 module_srl을 인덱스로
|
||||
if ($db_info->db_type == 'cubrid') {
|
||||
if(!$oDB->isIndexExists("editor_autosave",$oDB->prefix."editor_autosave_idx_module_srl")) return true;
|
||||
}
|
||||
else {
|
||||
if(!$oDB->isIndexExists("editor_autosave","idx_module_srl")) return true;
|
||||
}
|
||||
if(!$oDB->isIndexExists("editor_autosave","idx_module_srl")) return true;
|
||||
|
||||
|
||||
// 2007. 10. 17 글의 입력(신규 or 수정)이 일어날때마다 자동 저장된 문서를 삭제하는 trigger 추가
|
||||
|
|
@ -84,7 +76,6 @@
|
|||
* @brief 업데이트 실행
|
||||
**/
|
||||
function moduleUpdate() {
|
||||
$db_info = Context::getDBInfo ();
|
||||
$oModuleModel = &getModel('module');
|
||||
$oModuleController = &getController('module');
|
||||
|
||||
|
|
@ -95,14 +86,7 @@
|
|||
$oDB->addColumn("editor_autosave","module_srl","number",11);
|
||||
|
||||
// module_srl을 인덱스로
|
||||
if ($db_info->db_type == 'cubrid') {
|
||||
if(!$oDB->isIndexExists("editor_autosave",$oDB->prefix."editor_autosave_idx_module_srl"))
|
||||
$oDB->addIndex("editor_autosave",$oDB->prefix."editor_autosave_idx_module_srl", "module_srl");
|
||||
}
|
||||
else {
|
||||
if(!$oDB->isIndexExists("editor_autosave","idx_module_srl"))
|
||||
$oDB->addIndex("editor_autosave","idx_module_srl", "module_srl");
|
||||
}
|
||||
if(!$oDB->isIndexExists("editor_autosave","idx_module_srl")) $oDB->addIndex("editor_autosave","idx_module_srl", "module_srl");
|
||||
|
||||
// 2007. 10. 17 글의 입력(신규 or 수정)이 일어날때마다 자동 저장된 문서를 삭제하는 trigger 추가
|
||||
if(!$oModuleModel->getTrigger('document.insertDocument', 'editor', 'controller', 'triggerDeleteSavedDoc', 'after'))
|
||||
|
|
|
|||
|
|
@ -82,7 +82,11 @@
|
|||
$lang->edit->submit = 'Submit';
|
||||
|
||||
$lang->edit->fontcolor = 'Text Color';
|
||||
$lang->edit->fontcolor_apply = 'Apply Text Color';
|
||||
$lang->edit->fontcolor_more = 'More Text Color';
|
||||
$lang->edit->fontbgcolor = 'Background Color';
|
||||
$lang->edit->fontbgcolor_apply = 'Apply Background Color';
|
||||
$lang->edit->fontbgcolor_more = 'More Background Color';
|
||||
$lang->edit->bold = 'Bold';
|
||||
$lang->edit->italic = 'Italic';
|
||||
$lang->edit->underline = 'Underline';
|
||||
|
|
@ -132,8 +136,10 @@
|
|||
$lang->edit->multimedia = 'Movie';
|
||||
$lang->edit->emoticon = 'Emoticon';
|
||||
|
||||
$lang->edit->file = 'Files';
|
||||
$lang->edit->upload = 'Attachment';
|
||||
$lang->edit->upload_file = 'Attach';
|
||||
$lang->edit->upload_list = 'Attachment List';
|
||||
$lang->edit->link_file = 'Insert to Content';
|
||||
$lang->edit->delete_selected = 'Delete Selected';
|
||||
|
||||
|
|
@ -227,4 +233,46 @@
|
|||
|
||||
$lang->edit->image_align = 'Image Alignment';
|
||||
$lang->edit->attached_files = 'Attachments';
|
||||
|
||||
$lang->edit->fontcolor_input = 'Custom Text Color';
|
||||
$lang->edit->fontbgcolor_input = 'Custom Background Color';
|
||||
$lang->edit->pangram = 'The quick brown fox jumps over the lazy dog';
|
||||
|
||||
$lang->edit->table_caption_position = 'Table Caption & Position';
|
||||
$lang->edit->table_caption = 'Table Caption';
|
||||
$lang->edit->table_header = 'Table Header';
|
||||
$lang->edit->table_header_none = 'none';
|
||||
$lang->edit->table_header_left = 'left';
|
||||
$lang->edit->table_header_top = 'top';
|
||||
$lang->edit->table_header_both = 'both';
|
||||
$lang->edit->table_size = 'Table Size';
|
||||
$lang->edit->table_width = 'Table Width';
|
||||
|
||||
$lang->edit->upper_left = 'Upper Left';
|
||||
$lang->edit->upper_center = 'Upper Center';
|
||||
$lang->edit->upper_right = 'Upper Right';
|
||||
$lang->edit->bottom_left = 'Bottom Left';
|
||||
$lang->edit->bottom_center = 'Bottom Center';
|
||||
$lang->edit->bottom_right = 'Bottom Right';
|
||||
|
||||
$lang->edit->no_image = 'There is no images uploaded.';
|
||||
$lang->edit->no_multimedia = 'There is no videos uploaded.';
|
||||
$lang->edit->no_attachment = 'There is no files uploaded.';
|
||||
$lang->edit->insert_selected = 'Insert Selected';
|
||||
$lang->edit->delete_selected = 'Delete Selected';
|
||||
|
||||
$lang->edit->fieldset = 'Fieldset';
|
||||
$lang->edit->paragraph = 'Paragraph';
|
||||
|
||||
$lang->edit->autosave_format = '글을 쓰기 시작한지 <strong>%s</strong>이 지났습니다. 마지막 저장 시간은 <strong>%s</strong> 입니다.';
|
||||
$lang->edit->autosave_hour = '%d시간';
|
||||
$lang->edit->autosave_hours = '%d시간';
|
||||
$lang->edit->autosave_min = '%d분';
|
||||
$lang->edit->autosave_mins = '%d분';
|
||||
$lang->edit->autosave_hour_ago = '%d시간 전';
|
||||
$lang->edit->autosave_hours_ago = '%d시간 전';
|
||||
$lang->edit->autosave_min_ago = '%d분 전';
|
||||
$lang->edit->autosave_mins_ago = '%d분 전';
|
||||
|
||||
$lang->edit->upload_not_enough_quota = '허용된 용량이 부족하여 파일을 첨부할 수 없습니다.';
|
||||
?>
|
||||
|
|
@ -82,7 +82,11 @@
|
|||
$lang->edit->submit = 'Confirmar';
|
||||
|
||||
$lang->edit->fontcolor = 'Text Color';
|
||||
$lang->edit->fontcolor_apply = '글자 색 적용';
|
||||
$lang->edit->fontcolor_more = '글자 색 더보기';
|
||||
$lang->edit->fontbgcolor = 'Background Color';
|
||||
$lang->edit->fontbgcolor_apply = '글자 배경색 적용';
|
||||
$lang->edit->fontbgcolor_more = '글자 배경색 더보기';
|
||||
$lang->edit->bold = 'Bold';
|
||||
$lang->edit->italic = 'Italic';
|
||||
$lang->edit->underline = 'Underline';
|
||||
|
|
@ -128,8 +132,10 @@
|
|||
$lang->edit->multimedia = 'Movie';
|
||||
$lang->edit->emoticon = 'Emoticon';
|
||||
|
||||
$lang->edit->file = '파일';
|
||||
$lang->edit->upload = 'Adjuntar';
|
||||
$lang->edit->upload_file = 'Archivo adjunto';
|
||||
$lang->edit->upload_list = '첨부 목록';
|
||||
$lang->edit->link_file = 'Insertar en el contenido del documento';
|
||||
$lang->edit->delete_selected = 'Eliminar lo seleccionado';
|
||||
|
||||
|
|
@ -223,4 +229,46 @@
|
|||
|
||||
$lang->edit->image_align = '이미지 정렬';
|
||||
$lang->edit->attached_files = '첨부 파일';
|
||||
|
||||
$lang->edit->fontcolor_input = '폰트색 직접입력';
|
||||
$lang->edit->fontbgcolor_input = '배경색 직접입력';
|
||||
$lang->edit->pangram = '무궁화 꽃이 피었습니다';
|
||||
|
||||
$lang->edit->table_caption_position = '표 제목(caption) 및 배치';
|
||||
$lang->edit->table_caption = '표 제목(caption)';
|
||||
$lang->edit->table_header = '머리글 셀(th)';
|
||||
$lang->edit->table_header_none = '없음';
|
||||
$lang->edit->table_header_left = '왼쪽';
|
||||
$lang->edit->table_header_top = '위쪽';
|
||||
$lang->edit->table_header_both = '모두';
|
||||
$lang->edit->table_size = '표 크기';
|
||||
$lang->edit->table_width = '표 폭';
|
||||
|
||||
$lang->edit->upper_left = '상단좌측';
|
||||
$lang->edit->upper_center = '상단중앙';
|
||||
$lang->edit->upper_right = '상단우측';
|
||||
$lang->edit->bottom_left = '하단좌측';
|
||||
$lang->edit->bottom_center = '하단중앙';
|
||||
$lang->edit->bottom_right = '하단우측';
|
||||
|
||||
$lang->edit->no_image = '첨부된 이미지가 없습니다.';
|
||||
$lang->edit->no_multimedia = '첨부된 동영상이 없습니다.';
|
||||
$lang->edit->no_attachment = '첨부된 파일이 없습니다.';
|
||||
$lang->edit->insert_selected = '선택 넣기';
|
||||
$lang->edit->delete_selected = '선택 삭제';
|
||||
|
||||
$lang->edit->fieldset = '글상자';
|
||||
$lang->edit->paragraph = '문단';
|
||||
|
||||
$lang->edit->autosave_format = '글을 쓰기 시작한지 <strong>%s</strong>이 지났습니다. 마지막 저장 시간은 <strong>%s</strong> 입니다.';
|
||||
$lang->edit->autosave_hour = '%d시간';
|
||||
$lang->edit->autosave_hours = '%d시간';
|
||||
$lang->edit->autosave_min = '%d분';
|
||||
$lang->edit->autosave_mins = '%d분';
|
||||
$lang->edit->autosave_hour_ago = '%d시간 전';
|
||||
$lang->edit->autosave_hours_ago = '%d시간 전';
|
||||
$lang->edit->autosave_min_ago = '%d분 전';
|
||||
$lang->edit->autosave_mins_ago = '%d분 전';
|
||||
|
||||
$lang->edit->upload_not_enough_quota = '허용된 용량이 부족하여 파일을 첨부할 수 없습니다.';
|
||||
?>
|
||||
|
|
@ -82,7 +82,11 @@
|
|||
$lang->edit->submit = 'Soumettre';
|
||||
|
||||
$lang->edit->fontcolor = 'Text Color';
|
||||
$lang->edit->fontcolor_apply = '글자 색 적용';
|
||||
$lang->edit->fontcolor_more = '글자 색 더보기';
|
||||
$lang->edit->fontbgcolor = 'Background Color';
|
||||
$lang->edit->fontbgcolor_apply = '글자 배경색 적용';
|
||||
$lang->edit->fontbgcolor_more = '글자 배경색 더보기';
|
||||
$lang->edit->bold = 'Bold';
|
||||
$lang->edit->italic = 'Italic';
|
||||
$lang->edit->underline = 'Underline';
|
||||
|
|
@ -132,8 +136,10 @@
|
|||
$lang->edit->multimedia = 'Movie';
|
||||
$lang->edit->emoticon = 'Emoticon';
|
||||
|
||||
$lang->edit->file = '파일';
|
||||
$lang->edit->upload = 'Attacher';
|
||||
$lang->edit->upload_file = 'Attacher un(des) Fichier(s)';
|
||||
$lang->edit->upload_list = '첨부 목록';
|
||||
$lang->edit->link_file = 'Insérer dans le Texte';
|
||||
$lang->edit->delete_selected = 'Supprimer le Sélectionné';
|
||||
|
||||
|
|
@ -227,4 +233,46 @@
|
|||
|
||||
$lang->edit->image_align = '이미지 정렬';
|
||||
$lang->edit->attached_files = '첨부 파일';
|
||||
|
||||
$lang->edit->fontcolor_input = '폰트색 직접입력';
|
||||
$lang->edit->fontbgcolor_input = '배경색 직접입력';
|
||||
$lang->edit->pangram = '무궁화 꽃이 피었습니다';
|
||||
|
||||
$lang->edit->table_caption_position = '표 제목(caption) 및 배치';
|
||||
$lang->edit->table_caption = '표 제목(caption)';
|
||||
$lang->edit->table_header = '머리글 셀(th)';
|
||||
$lang->edit->table_header_none = '없음';
|
||||
$lang->edit->table_header_left = '왼쪽';
|
||||
$lang->edit->table_header_top = '위쪽';
|
||||
$lang->edit->table_header_both = '모두';
|
||||
$lang->edit->table_size = '표 크기';
|
||||
$lang->edit->table_width = '표 폭';
|
||||
|
||||
$lang->edit->upper_left = '상단좌측';
|
||||
$lang->edit->upper_center = '상단중앙';
|
||||
$lang->edit->upper_right = '상단우측';
|
||||
$lang->edit->bottom_left = '하단좌측';
|
||||
$lang->edit->bottom_center = '하단중앙';
|
||||
$lang->edit->bottom_right = '하단우측';
|
||||
|
||||
$lang->edit->no_image = '첨부된 이미지가 없습니다.';
|
||||
$lang->edit->no_multimedia = '첨부된 동영상이 없습니다.';
|
||||
$lang->edit->no_attachment = '첨부된 파일이 없습니다.';
|
||||
$lang->edit->insert_selected = '선택 넣기';
|
||||
$lang->edit->delete_selected = '선택 삭제';
|
||||
|
||||
$lang->edit->fieldset = '글상자';
|
||||
$lang->edit->paragraph = '문단';
|
||||
|
||||
$lang->edit->autosave_format = '글을 쓰기 시작한지 <strong>%s</strong>이 지났습니다. 마지막 저장 시간은 <strong>%s</strong> 입니다.';
|
||||
$lang->edit->autosave_hour = '%d시간';
|
||||
$lang->edit->autosave_hours = '%d시간';
|
||||
$lang->edit->autosave_min = '%d분';
|
||||
$lang->edit->autosave_mins = '%d분';
|
||||
$lang->edit->autosave_hour_ago = '%d시간 전';
|
||||
$lang->edit->autosave_hours_ago = '%d시간 전';
|
||||
$lang->edit->autosave_min_ago = '%d분 전';
|
||||
$lang->edit->autosave_mins_ago = '%d분 전';
|
||||
|
||||
$lang->edit->upload_not_enough_quota = '허용된 용량이 부족하여 파일을 첨부할 수 없습니다.';
|
||||
?>
|
||||
|
|
@ -85,7 +85,11 @@
|
|||
$lang->edit->submit = '送信';
|
||||
|
||||
$lang->edit->fontcolor = 'テキストの色';
|
||||
$lang->edit->fontcolor_apply = 'テキスト色適用';
|
||||
$lang->edit->fontcolor_more = '他のテキスト色';
|
||||
$lang->edit->fontbgcolor = 'テキストの背景色';
|
||||
$lang->edit->fontbgcolor_apply = 'テキスト背景色適用';
|
||||
$lang->edit->fontbgcolor_more = '他のテキスト背景色';
|
||||
$lang->edit->bold = '太字';
|
||||
$lang->edit->italic = '斜体';
|
||||
$lang->edit->underline = '下線';
|
||||
|
|
@ -121,7 +125,7 @@
|
|||
$lang->edit->help_align_left = 'テキストを左揃えで表示します。';
|
||||
$lang->edit->help_align_center = 'テキストを中央揃えで表示します。';
|
||||
$lang->edit->help_align_right = 'テキストを右揃えで表示します。';
|
||||
$lang->edit->help_align_justify = 'Align justity';
|
||||
$lang->edit->help_align_justify = 'テキストを両端揃えで表示します。';
|
||||
$lang->edit->help_add_indent = 'インデントを増やします。';
|
||||
$lang->edit->help_remove_indent = 'インデントを減らします。';
|
||||
$lang->edit->help_list_number = '番号付リスト';
|
||||
|
|
@ -135,8 +139,10 @@
|
|||
$lang->edit->multimedia = '動画';
|
||||
$lang->edit->emoticon = '絵文字';
|
||||
|
||||
$lang->edit->file = 'ファイル';
|
||||
$lang->edit->upload = '添付';
|
||||
$lang->edit->upload_file = 'ファイル添付';
|
||||
$lang->edit->upload_list = '添付リスト';
|
||||
$lang->edit->link_file = 'テキスト挿入';
|
||||
$lang->edit->delete_selected = '選択リスト削除';
|
||||
|
||||
|
|
@ -227,6 +233,48 @@
|
|||
|
||||
$lang->edit->confirm_submit_without_saving = 'まだ保存してない内容があります。\\nそのまま転送して宜しいでしょうか?';
|
||||
|
||||
$lang->edit->image_align = '이미지 정렬';
|
||||
$lang->edit->attached_files = '첨부 파일';
|
||||
$lang->edit->image_align = 'イメージの配置';
|
||||
$lang->edit->attached_files = '添付ファイル';
|
||||
|
||||
$lang->edit->fontcolor_input = 'テキスト色直接入力';
|
||||
$lang->edit->fontbgcolor_input = 'テキスト背景色直接入力';
|
||||
$lang->edit->pangram = '무궁화 꽃이 피었습니다';
|
||||
|
||||
$lang->edit->table_caption_position = 'キャプションの配置';
|
||||
$lang->edit->table_caption = '表のキャプション';
|
||||
$lang->edit->table_header = '머리글 셀(th)';
|
||||
$lang->edit->table_header_none = 'なし';
|
||||
$lang->edit->table_header_left = '左';
|
||||
$lang->edit->table_header_top = '上';
|
||||
$lang->edit->table_header_both = '両方';
|
||||
$lang->edit->table_size = '表の大きさ';
|
||||
$lang->edit->table_width = '表幅';
|
||||
|
||||
$lang->edit->upper_left = '上端左';
|
||||
$lang->edit->upper_center = '上端中央';
|
||||
$lang->edit->upper_right = '上端右';
|
||||
$lang->edit->bottom_left = '下端左';
|
||||
$lang->edit->bottom_center = '下端中央';
|
||||
$lang->edit->bottom_right = '下端右';
|
||||
|
||||
$lang->edit->no_image = '添付されたイメージがありません。';
|
||||
$lang->edit->no_multimedia = '添付された動画がありません。';
|
||||
$lang->edit->no_attachment = '添付されたファイルがありません。';
|
||||
$lang->edit->insert_selected = '選択挿入';
|
||||
$lang->edit->delete_selected = '選択削除';
|
||||
|
||||
$lang->edit->fieldset = 'テキストボックス';
|
||||
$lang->edit->paragraph = '段落';
|
||||
|
||||
$lang->edit->autosave_format = '글을 쓰기 시작한지 <strong>%s</strong>이 지났습니다. 마지막 저장 시간은 <strong>%s</strong> 입니다.';
|
||||
$lang->edit->autosave_hour = '%d시간';
|
||||
$lang->edit->autosave_hours = '%d시간';
|
||||
$lang->edit->autosave_min = '%d분';
|
||||
$lang->edit->autosave_mins = '%d분';
|
||||
$lang->edit->autosave_hour_ago = '%d시간 전';
|
||||
$lang->edit->autosave_hours_ago = '%d시간 전';
|
||||
$lang->edit->autosave_min_ago = '%d분 전';
|
||||
$lang->edit->autosave_mins_ago = '%d분 전';
|
||||
|
||||
$lang->edit->upload_not_enough_quota = '허용된 용량이 부족하여 파일을 첨부할 수 없습니다.';
|
||||
?>
|
||||
|
|
@ -85,7 +85,11 @@
|
|||
$lang->edit->submit = '확인';
|
||||
|
||||
$lang->edit->fontcolor = '글자 색';
|
||||
$lang->edit->fontcolor_apply = '글자 색 적용';
|
||||
$lang->edit->fontcolor_more = '글자 색 더보기';
|
||||
$lang->edit->fontbgcolor = '글자 배경색';
|
||||
$lang->edit->fontbgcolor_apply = '글자 배경색 적용';
|
||||
$lang->edit->fontbgcolor_more = '글자 배경색 더보기';
|
||||
$lang->edit->bold = '진하게';
|
||||
$lang->edit->italic = '기울임';
|
||||
$lang->edit->underline = '밑줄';
|
||||
|
|
@ -135,8 +139,10 @@
|
|||
$lang->edit->multimedia = '동영상';
|
||||
$lang->edit->emoticon = '이모티콘';
|
||||
|
||||
$lang->edit->file = '파일';
|
||||
$lang->edit->upload = '첨부';
|
||||
$lang->edit->upload_file = '파일 첨부';
|
||||
$lang->edit->upload_list = '첨부 목록';
|
||||
$lang->edit->link_file = '본문 삽입';
|
||||
$lang->edit->delete_selected = '선택 삭제';
|
||||
|
||||
|
|
@ -229,4 +235,46 @@
|
|||
|
||||
$lang->edit->image_align = '이미지 정렬';
|
||||
$lang->edit->attached_files = '첨부 파일';
|
||||
|
||||
$lang->edit->fontcolor_input = '글자 색 직접입력';
|
||||
$lang->edit->fontbgcolor_input = '글자 배경색 직접입력';
|
||||
$lang->edit->pangram = '무궁화 꽃이 피었습니다.';
|
||||
|
||||
$lang->edit->table_caption_position = '표 제목(caption) 및 배치';
|
||||
$lang->edit->table_caption = '표 제목(caption)';
|
||||
$lang->edit->table_header = '머릿글 칸(th)';
|
||||
$lang->edit->table_header_none = '없음';
|
||||
$lang->edit->table_header_left = '왼쪽';
|
||||
$lang->edit->table_header_top = '위쪽';
|
||||
$lang->edit->table_header_both = '모두';
|
||||
$lang->edit->table_size = '표 크기';
|
||||
$lang->edit->table_width = '표 너비';
|
||||
|
||||
$lang->edit->upper_left = '상단좌측';
|
||||
$lang->edit->upper_center = '상단중앙';
|
||||
$lang->edit->upper_right = '상단우측';
|
||||
$lang->edit->bottom_left = '하단좌측';
|
||||
$lang->edit->bottom_center = '하단중앙';
|
||||
$lang->edit->bottom_right = '하단우측';
|
||||
|
||||
$lang->edit->no_image = '첨부된 이미지가 없습니다.';
|
||||
$lang->edit->no_multimedia = '첨부된 동영상이 없습니다.';
|
||||
$lang->edit->no_attachment = '첨부된 파일이 없습니다.';
|
||||
$lang->edit->insert_selected = '선택 넣기';
|
||||
$lang->edit->delete_selected = '선택 삭제';
|
||||
|
||||
$lang->edit->fieldset = '글상자';
|
||||
$lang->edit->paragraph = '문단';
|
||||
|
||||
$lang->edit->autosave_format = '글을 쓰기 시작한지 <strong>%s</strong>이 지났습니다. 마지막 저장 시간은 <strong>%s</strong> 입니다.';
|
||||
$lang->edit->autosave_hour = '%d시간';
|
||||
$lang->edit->autosave_hours = '%d시간';
|
||||
$lang->edit->autosave_min = '%d분';
|
||||
$lang->edit->autosave_mins = '%d분';
|
||||
$lang->edit->autosave_hour_ago = '%d시간 전';
|
||||
$lang->edit->autosave_hours_ago = '%d시간 전';
|
||||
$lang->edit->autosave_min_ago = '%d분 전';
|
||||
$lang->edit->autosave_mins_ago = '%d분 전';
|
||||
|
||||
$lang->edit->upload_not_enough_quota = '허용된 용량이 부족하여 파일을 첨부할 수 없습니다.';
|
||||
?>
|
||||
|
|
@ -85,7 +85,11 @@
|
|||
$lang->edit->submit = 'Принять';
|
||||
|
||||
$lang->edit->fontcolor = 'Цвет текста';
|
||||
$lang->edit->fontcolor_apply = '글자 색 적용';
|
||||
$lang->edit->fontcolor_more = '글자 색 더보기';
|
||||
$lang->edit->fontbgcolor = 'Цвет Фона';
|
||||
$lang->edit->fontbgcolor_apply = '글자 배경색 적용';
|
||||
$lang->edit->fontbgcolor_more = '글자 배경색 더보기';
|
||||
$lang->edit->bold = 'Bold';
|
||||
$lang->edit->italic = 'Italic';
|
||||
$lang->edit->underline = 'Underline';
|
||||
|
|
@ -135,8 +139,10 @@
|
|||
$lang->edit->multimedia = 'Movie';
|
||||
$lang->edit->emoticon = 'Emoticon';
|
||||
|
||||
$lang->edit->file = '파일';
|
||||
$lang->edit->upload = 'Вложение';
|
||||
$lang->edit->upload_file = 'Прикрепить файл';
|
||||
$lang->edit->upload_list = '첨부 목록';
|
||||
$lang->edit->link_file = 'Вставить в содержание';
|
||||
$lang->edit->delete_selected = 'Удалить выбранное';
|
||||
|
||||
|
|
@ -229,4 +235,46 @@
|
|||
|
||||
$lang->edit->image_align = 'Выровнять изображения';
|
||||
$lang->edit->attached_files = 'Прикрепленный файл';
|
||||
|
||||
$lang->edit->fontcolor_input = '폰트색 직접입력';
|
||||
$lang->edit->fontbgcolor_input = '배경색 직접입력';
|
||||
$lang->edit->pangram = '무궁화 꽃이 피었습니다';
|
||||
|
||||
$lang->edit->table_caption_position = '표 제목(caption) 및 배치';
|
||||
$lang->edit->table_caption = '표 제목(caption)';
|
||||
$lang->edit->table_header = '머리글 셀(th)';
|
||||
$lang->edit->table_header_none = '없음';
|
||||
$lang->edit->table_header_left = '왼쪽';
|
||||
$lang->edit->table_header_top = '위쪽';
|
||||
$lang->edit->table_header_both = '모두';
|
||||
$lang->edit->table_size = '표 크기';
|
||||
$lang->edit->table_width = '표 폭';
|
||||
|
||||
$lang->edit->upper_left = '상단좌측';
|
||||
$lang->edit->upper_center = '상단중앙';
|
||||
$lang->edit->upper_right = '상단우측';
|
||||
$lang->edit->bottom_left = '하단좌측';
|
||||
$lang->edit->bottom_center = '하단중앙';
|
||||
$lang->edit->bottom_right = '하단우측';
|
||||
|
||||
$lang->edit->no_image = '첨부된 이미지가 없습니다.';
|
||||
$lang->edit->no_multimedia = '첨부된 동영상이 없습니다.';
|
||||
$lang->edit->no_attachment = '첨부된 파일이 없습니다.';
|
||||
$lang->edit->insert_selected = '선택 넣기';
|
||||
$lang->edit->delete_selected = '선택 삭제';
|
||||
|
||||
$lang->edit->fieldset = '글상자';
|
||||
$lang->edit->paragraph = '문단';
|
||||
|
||||
$lang->edit->autosave_format = '글을 쓰기 시작한지 <strong>%s</strong>이 지났습니다. 마지막 저장 시간은 <strong>%s</strong> 입니다.';
|
||||
$lang->edit->autosave_hour = '%d시간';
|
||||
$lang->edit->autosave_hours = '%d시간';
|
||||
$lang->edit->autosave_min = '%d분';
|
||||
$lang->edit->autosave_mins = '%d분';
|
||||
$lang->edit->autosave_hour_ago = '%d시간 전';
|
||||
$lang->edit->autosave_hours_ago = '%d시간 전';
|
||||
$lang->edit->autosave_min_ago = '%d분 전';
|
||||
$lang->edit->autosave_mins_ago = '%d분 전';
|
||||
|
||||
$lang->edit->upload_not_enough_quota = '허용된 용량이 부족하여 파일을 첨부할 수 없습니다.';
|
||||
?>
|
||||
|
|
@ -85,7 +85,11 @@
|
|||
$lang->edit->submit = 'Gửi bài';
|
||||
|
||||
$lang->edit->fontcolor = 'Màu chữ';
|
||||
$lang->edit->fontcolor_apply = '글자 색 적용';
|
||||
$lang->edit->fontcolor_more = '글자 색 더보기';
|
||||
$lang->edit->fontbgcolor = 'Màu nền';
|
||||
$lang->edit->fontbgcolor_apply = '글자 배경색 적용';
|
||||
$lang->edit->fontbgcolor_more = '글자 배경색 더보기';
|
||||
$lang->edit->bold = 'Chữ đậm';
|
||||
$lang->edit->italic = 'Chữ nghiêng';
|
||||
$lang->edit->underline = 'Chứ gạch chân';
|
||||
|
|
@ -135,8 +139,10 @@
|
|||
$lang->edit->multimedia = 'Chèn Media';
|
||||
$lang->edit->emoticon = 'Diễn tả cảm xúc';
|
||||
|
||||
$lang->edit->file = '파일';
|
||||
$lang->edit->upload = 'Đính kèm';
|
||||
$lang->edit->upload_file = 'Đính kèm';
|
||||
$lang->edit->upload_list = '첨부 목록';
|
||||
$lang->edit->link_file = 'Chèn vào bài viết';
|
||||
$lang->edit->delete_selected = 'Xóa lựa chọn';
|
||||
|
||||
|
|
@ -230,4 +236,46 @@
|
|||
|
||||
$lang->edit->image_align = 'Sắp xếp hình ảnh';
|
||||
$lang->edit->attached_files = 'File đính kèm';
|
||||
|
||||
$lang->edit->fontcolor_input = '폰트색 직접입력';
|
||||
$lang->edit->fontbgcolor_input = '배경색 직접입력';
|
||||
$lang->edit->pangram = '무궁화 꽃이 피었습니다';
|
||||
|
||||
$lang->edit->table_caption_position = '표 제목(caption) 및 배치';
|
||||
$lang->edit->table_caption = '표 제목(caption)';
|
||||
$lang->edit->table_header = '머리글 셀(th)';
|
||||
$lang->edit->table_header_none = '없음';
|
||||
$lang->edit->table_header_left = '왼쪽';
|
||||
$lang->edit->table_header_top = '위쪽';
|
||||
$lang->edit->table_header_both = '모두';
|
||||
$lang->edit->table_size = '표 크기';
|
||||
$lang->edit->table_width = '표 폭';
|
||||
|
||||
$lang->edit->upper_left = '상단좌측';
|
||||
$lang->edit->upper_center = '상단중앙';
|
||||
$lang->edit->upper_right = '상단우측';
|
||||
$lang->edit->bottom_left = '하단좌측';
|
||||
$lang->edit->bottom_center = '하단중앙';
|
||||
$lang->edit->bottom_right = '하단우측';
|
||||
|
||||
$lang->edit->no_image = '첨부된 이미지가 없습니다.';
|
||||
$lang->edit->no_multimedia = '첨부된 동영상이 없습니다.';
|
||||
$lang->edit->no_attachment = '첨부된 파일이 없습니다.';
|
||||
$lang->edit->insert_selected = '선택 넣기';
|
||||
$lang->edit->delete_selected = '선택 삭제';
|
||||
|
||||
$lang->edit->fieldset = '글상자';
|
||||
$lang->edit->paragraph = '문단';
|
||||
|
||||
$lang->edit->autosave_format = '글을 쓰기 시작한지 <strong>%s</strong>이 지났습니다. 마지막 저장 시간은 <strong>%s</strong> 입니다.';
|
||||
$lang->edit->autosave_hour = '%d시간';
|
||||
$lang->edit->autosave_hours = '%d시간';
|
||||
$lang->edit->autosave_min = '%d분';
|
||||
$lang->edit->autosave_mins = '%d분';
|
||||
$lang->edit->autosave_hour_ago = '%d시간 전';
|
||||
$lang->edit->autosave_hours_ago = '%d시간 전';
|
||||
$lang->edit->autosave_min_ago = '%d분 전';
|
||||
$lang->edit->autosave_mins_ago = '%d분 전';
|
||||
|
||||
$lang->edit->upload_not_enough_quota = '허용된 용량이 부족하여 파일을 첨부할 수 없습니다.';
|
||||
?>
|
||||
|
|
@ -85,7 +85,11 @@
|
|||
$lang->edit->submit = '确认';
|
||||
|
||||
$lang->edit->fontcolor = '文本颜色';
|
||||
$lang->edit->fontcolor_apply = '글자 색 적용';
|
||||
$lang->edit->fontcolor_more = '글자 색 더보기';
|
||||
$lang->edit->fontbgcolor = '背景颜色';
|
||||
$lang->edit->fontbgcolor_apply = '글자 배경색 적용';
|
||||
$lang->edit->fontbgcolor_more = '글자 배경색 더보기';
|
||||
$lang->edit->bold = '粗体';
|
||||
$lang->edit->italic = '斜体';
|
||||
$lang->edit->underline = '下划线';
|
||||
|
|
@ -135,8 +139,10 @@
|
|||
$lang->edit->multimedia = '视频';
|
||||
$lang->edit->emoticon = '表情图标';
|
||||
|
||||
$lang->edit->file = '파일';
|
||||
$lang->edit->upload = '上传';
|
||||
$lang->edit->upload_file = '上传附件';
|
||||
$lang->edit->upload_list = '첨부 목록';
|
||||
$lang->edit->link_file = '插入附件';
|
||||
$lang->edit->delete_selected = '删除所选';
|
||||
|
||||
|
|
@ -229,4 +235,46 @@
|
|||
|
||||
$lang->edit->image_align = '图片对齐';
|
||||
$lang->edit->attached_files = '附件';
|
||||
|
||||
$lang->edit->fontcolor_input = '폰트색 직접입력';
|
||||
$lang->edit->fontbgcolor_input = '배경색 직접입력';
|
||||
$lang->edit->pangram = '무궁화 꽃이 피었습니다';
|
||||
|
||||
$lang->edit->table_caption_position = '표 제목(caption) 및 배치';
|
||||
$lang->edit->table_caption = '표 제목(caption)';
|
||||
$lang->edit->table_header = '머리글 셀(th)';
|
||||
$lang->edit->table_header_none = '없음';
|
||||
$lang->edit->table_header_left = '왼쪽';
|
||||
$lang->edit->table_header_top = '위쪽';
|
||||
$lang->edit->table_header_both = '모두';
|
||||
$lang->edit->table_size = '표 크기';
|
||||
$lang->edit->table_width = '표 폭';
|
||||
|
||||
$lang->edit->upper_left = '상단좌측';
|
||||
$lang->edit->upper_center = '상단중앙';
|
||||
$lang->edit->upper_right = '상단우측';
|
||||
$lang->edit->bottom_left = '하단좌측';
|
||||
$lang->edit->bottom_center = '하단중앙';
|
||||
$lang->edit->bottom_right = '하단우측';
|
||||
|
||||
$lang->edit->no_image = '첨부된 이미지가 없습니다.';
|
||||
$lang->edit->no_multimedia = '첨부된 동영상이 없습니다.';
|
||||
$lang->edit->no_attachment = '첨부된 파일이 없습니다.';
|
||||
$lang->edit->insert_selected = '선택 넣기';
|
||||
$lang->edit->delete_selected = '선택 삭제';
|
||||
|
||||
$lang->edit->fieldset = '글상자';
|
||||
$lang->edit->paragraph = '문단';
|
||||
|
||||
$lang->edit->autosave_format = '글을 쓰기 시작한지 <strong>%s</strong>이 지났습니다. 마지막 저장 시간은 <strong>%s</strong> 입니다.';
|
||||
$lang->edit->autosave_hour = '%d시간';
|
||||
$lang->edit->autosave_hours = '%d시간';
|
||||
$lang->edit->autosave_min = '%d분';
|
||||
$lang->edit->autosave_mins = '%d분';
|
||||
$lang->edit->autosave_hour_ago = '%d시간 전';
|
||||
$lang->edit->autosave_hours_ago = '%d시간 전';
|
||||
$lang->edit->autosave_min_ago = '%d분 전';
|
||||
$lang->edit->autosave_mins_ago = '%d분 전';
|
||||
|
||||
$lang->edit->upload_not_enough_quota = '허용된 용량이 부족하여 파일을 첨부할 수 없습니다.';
|
||||
?>
|
||||
|
|
|
|||
|
|
@ -85,7 +85,11 @@
|
|||
$lang->edit->submit = '確認';
|
||||
|
||||
$lang->edit->fontcolor = '文字顏色';
|
||||
$lang->edit->fontcolor_apply = '套用文字顏色';
|
||||
$lang->edit->fontcolor_more = '更多文字顏色';
|
||||
$lang->edit->fontbgcolor = '背景顏色';
|
||||
$lang->edit->fontbgcolor_apply = '套用背景顏色';
|
||||
$lang->edit->fontbgcolor_more = '更多背景顏色';
|
||||
$lang->edit->bold = '粗體';
|
||||
$lang->edit->italic = '斜體';
|
||||
$lang->edit->underline = '底線';
|
||||
|
|
@ -135,8 +139,10 @@
|
|||
$lang->edit->multimedia = '影片';
|
||||
$lang->edit->emoticon = '表情符號';
|
||||
|
||||
$lang->edit->file = '檔案';
|
||||
$lang->edit->upload = '上傳';
|
||||
$lang->edit->upload_file = '上傳附檔';
|
||||
$lang->edit->upload_list = '檔案列表';
|
||||
$lang->edit->link_file = '插入檔案';
|
||||
$lang->edit->delete_selected = '刪除所選';
|
||||
|
||||
|
|
@ -224,10 +230,52 @@
|
|||
$lang->edit->paging_next_help = '往下一頁';
|
||||
|
||||
$lang->edit->toc = '目錄';
|
||||
$lang->edit->close_help = '關閉使用手冊';
|
||||
$lang->edit->close_help = '關閉';
|
||||
|
||||
$lang->edit->confirm_submit_without_saving = '有內容尚未儲存。\\n是否要繼續進行?';
|
||||
|
||||
$lang->edit->image_align = '圖片對齊';
|
||||
$lang->edit->attached_files = '附加檔案';
|
||||
|
||||
$lang->edit->fontcolor_input = '自訂文字顏色';
|
||||
$lang->edit->fontbgcolor_input = '自訂背景顏色';
|
||||
$lang->edit->pangram = '實際範例';
|
||||
|
||||
$lang->edit->table_caption_position = '標籤位置';
|
||||
$lang->edit->table_caption = '表格標籤(caption)';
|
||||
$lang->edit->table_header = '標頭';
|
||||
$lang->edit->table_header_none = '無';
|
||||
$lang->edit->table_header_left = '左側';
|
||||
$lang->edit->table_header_top = '頂端';
|
||||
$lang->edit->table_header_both = '兩者';
|
||||
$lang->edit->table_size = '大小';
|
||||
$lang->edit->table_width = '寬度';
|
||||
|
||||
$lang->edit->upper_left = '左上方';
|
||||
$lang->edit->upper_center = '正上方';
|
||||
$lang->edit->upper_right = '右上方';
|
||||
$lang->edit->bottom_left = '左下方';
|
||||
$lang->edit->bottom_center = '正下方';
|
||||
$lang->edit->bottom_right = '右下方';
|
||||
|
||||
$lang->edit->no_image = '目前沒有圖片';
|
||||
$lang->edit->no_multimedia = '目前沒有影片';
|
||||
$lang->edit->no_attachment = '目前沒有附檔';
|
||||
$lang->edit->insert_selected = '插入所選';
|
||||
$lang->edit->delete_selected = '刪除所選';
|
||||
|
||||
$lang->edit->fieldset = '區域';
|
||||
$lang->edit->paragraph = '段落';
|
||||
|
||||
$lang->edit->autosave_format = '글을 쓰기 시작한지 <strong>%s</strong>이 지났습니다. 마지막 저장 시간은 <strong>%s</strong> 입니다.';
|
||||
$lang->edit->autosave_hour = '%d시간';
|
||||
$lang->edit->autosave_hours = '%d시간';
|
||||
$lang->edit->autosave_min = '%d분';
|
||||
$lang->edit->autosave_mins = '%d분';
|
||||
$lang->edit->autosave_hour_ago = '%d시간 전';
|
||||
$lang->edit->autosave_hours_ago = '%d시간 전';
|
||||
$lang->edit->autosave_min_ago = '%d분 전';
|
||||
$lang->edit->autosave_mins_ago = '%d분 전';
|
||||
|
||||
$lang->edit->upload_not_enough_quota = '허용된 용량이 부족하여 파일을 첨부할 수 없습니다.';
|
||||
?>
|
||||
|
|
@ -6,7 +6,7 @@
|
|||
<column name="module_srl" var="module_srl" />
|
||||
<column name="member_srl" var="member_srl" />
|
||||
<column name="ipaddress" var="ipaddress" />
|
||||
<column name="document_srl" var="document_srl" />
|
||||
<column name="document_srl" var="document_srl" default="0" />
|
||||
<column name="title" var="title" />
|
||||
<column name="content" var="content" />
|
||||
<column name="regdate" var="regdate" default="curdate()" />
|
||||
|
|
|
|||
406
modules/editor/skins/xeed/editor.html
Normal file
406
modules/editor/skins/xeed/editor.html
Normal file
|
|
@ -0,0 +1,406 @@
|
|||
<!--// 스킨 css 로드 -->
|
||||
<!--%import("xd.css")-->
|
||||
|
||||
<!--// 기본 JS 로드 -->
|
||||
<!--%import("../../tpl/js/editor_common.js")-->
|
||||
|
||||
<!--// 기본 js/언어파일 로드 -->
|
||||
<!--%import("js/xeed.js")-->
|
||||
<!--%import("js/xe_interface.js")-->
|
||||
|
||||
<!--@if($enable_autosave)-->
|
||||
<!-- Auto-saving fields -->
|
||||
<input type="hidden" name="_saved_doc_title" value="{htmlspecialchars($saved_doc->title)}" />
|
||||
<input type="hidden" name="_saved_doc_content" value="{htmlspecialchars($saved_doc->content)}" />
|
||||
<input type="hidden" name="_saved_doc_message" value="{$lang->msg_load_saved_doc}" />
|
||||
<!--@end-->
|
||||
|
||||
<!-- {{{ Editor HTML -->
|
||||
<!-- XEED -->
|
||||
<textarea id="xeed-{$editor_sequence}" name="{$editor_content_key_name}" cols="80" rows="10"></textarea>
|
||||
<div class="xd">
|
||||
<!-- tool -->
|
||||
<div class="tool">
|
||||
<a href="#edit" class="skip">{$lang->edit->jumptoedit}</a>
|
||||
<div class="t1">
|
||||
<ul class="u1">
|
||||
<li class="ti al">
|
||||
<a href="#xdal" class="tb">
|
||||
<span class="all">{$lang->edit->upload_list}</span>
|
||||
<span class="img"><span>{$lang->edit->image}</span><strong>0</strong></span>
|
||||
<span class="media"><span>{$lang->edit->multimedia}</span><strong>0</strong></span>
|
||||
<span class="file"><span>{$lang->edit->file}</span><strong>0</strong></span>
|
||||
</a>
|
||||
</li>
|
||||
</ul>
|
||||
<!--@if($enable_component)-->
|
||||
<!-- editor components -->
|
||||
<ul class="u2">
|
||||
<!--@foreach($component_list as $component_name => $component)-->
|
||||
<li class="ti"><a href="{getUrl('module','editor','act','dispEditorPopup','editor_sequence', $editor_sequence, 'component', $component_name)}" target="_blank" class="tb" id="component_{$editor_sequence}_{$component_name}" title="{$component->title}">{$component->title}</a></li>
|
||||
<!--@end-->
|
||||
</ul>
|
||||
<!-- //editor components -->
|
||||
<!--@end-->
|
||||
</div>
|
||||
<div class="t2">
|
||||
<ul class="u1">
|
||||
<li class="ti ud disable"><button type="button" class="tb ud"><span>{$lang->edit->undo} Ctrl+Z</span></button></li>
|
||||
<li class="ti rd disable"><button type="button" class="tb rd da"><span>{$lang->edit->redo} Ctrl+Y</span></button></li>
|
||||
</ul>
|
||||
<ul class="u2">
|
||||
<li class="ti hx"><button type="button" class="tb">{$lang->edit->header}</button>
|
||||
<ul class="lr">
|
||||
<!--@foreach($lang->edit->header_list as $key=>$obj)-->
|
||||
<li class="{$key}"><button type="button" title="Ctrl+1">{$obj}</button></li>
|
||||
<!--@end-->
|
||||
<li class="h7"><button type="button" title="Ctrl+7">{$lang->edit->paragraph}</button></li>
|
||||
</ul>
|
||||
</li>
|
||||
<li class="ti ff"><button type="button" class="tb">{$lang->edit->fontname}</button>
|
||||
<ul class="lr">
|
||||
<!--@foreach($lang->edit->fontlist as $key=>$obj)-->
|
||||
<li><button type="button" style="font-family:{$key}">{$obj}</button></li>
|
||||
<!--@end-->
|
||||
</ul>
|
||||
</li>
|
||||
<li class="ti fs"><button type="button" class="tb">{$lang->edit->fontsize}</button>
|
||||
<ul class="lr">
|
||||
<li><button type="button">9px;10px;11px;12px;13px;14px;16px;18px;24px;32px</button></li>
|
||||
</ul>
|
||||
</li>
|
||||
<li class="ti lh"><button type="button" class="tb">{$lang->edit->lineheight}</button>
|
||||
<ul class="lr">
|
||||
<li><button type="button">100%;120%;140%;160%;180%;200%</button></li>
|
||||
</ul>
|
||||
</li>
|
||||
</ul>
|
||||
<ul class="u3">
|
||||
<li class="ti bd"><button type="button" class="tb bd" title="{$lang->edit->bold} (Ctrl+B)"><span>{$lang->edit->bold} Ctrl+B</span></button></li>
|
||||
<li class="ti ue"><button type="button" class="tb ue" title="{$lang->edit->underline} (Ctrl+U)"><span>{$lang->edit->underline} Ctrl+U</span></button></li>
|
||||
<li class="ti ic"><button type="button" class="tb ic" title="{$lang->edit->italic} (Ctrl+I)"><span>{$lang->edit->italic} Ctrl+I</span></button></li>
|
||||
<li class="ti se"><button type="button" class="tb se" title="{$lang->edit->strike} (Ctrl+D)"><span>{$lang->edit->strike} Ctrl+D</span></button></li>
|
||||
<li class="ti cr fc">
|
||||
<button type="button" class="tb cr fc" title="{$lang->edit->fontcolor_apply}" style="background-color:#74c600"><span>{$lang->edit->fontcolor_apply}</span></button><button type="button" class="tb more" title="{$lang->edit->fontcolor_more}"><span>{$lang->edit->fontcolor_more}</span></button>
|
||||
<div class="lr">
|
||||
<fieldset>
|
||||
<legend>{$lang->edit->fontcolor}</legend>
|
||||
<ul class="ct">
|
||||
<li><button type="button"><span>ff0000;ff6c00;ffaa00;ffef00;a6cf00;009e25;00b0a2;0075c8;3a32c3;7820b9;ef007c;000000;252525;464646;636363;7d7d7d;9a9a9a;ffe8e8;f7e2d2;f5eddc;f5f4e0;edf2c2;def7e5;d9eeec;c9e0f0;d6d4eb;e7dbed;f1e2ea;acacac;c2c2c2;cccccc;e1e1e1;ebebeb;ffffff;e97d81;e19b73;d1b274;cfcca2;cfcca2;61b977;53aea8;518fbb;6a65bb;9a54ce;e573ae;5a504b;767b86;00ffff;00ff00;a0f000;ffff00;951015;6e391a;785c25;5f5b25;4c511f;1c4827;0d514c;1b496a;2b285f;45245b;721947;352e2c;3c3f45;00aaff;0000ff;a800ff;ff00ff</span></button></li>
|
||||
</ul>
|
||||
</fieldset>
|
||||
</div>
|
||||
</li>
|
||||
<li class="ti cr bc">
|
||||
<button type="button" class="tb cr bc" title="{$lang->edit->fontbgcolor_apply}" style="background-color:#74c600"><span>{$lang->edit->fontbgcolor_apply}</span></button><button type="button" class="tb more" title="{$lang->edit->fontbgcolor_more}"><span>{$lang->edit->fontbgcolor_more}</span></button>
|
||||
<div class="lr">
|
||||
<fieldset>
|
||||
<legend>{$lang->edit->fontbgcolor}</legend>
|
||||
<ul class="cx">
|
||||
<li><button type="button">000000:fff;333333:fff;666666:fff;B82200:fff;FF3000:fff;FF6947:fff;457700:fff;61A500:fff;74C600:fff;006CA7:fff;0092E0:fff;33BAFF:fff;005147:fff;006F61:fff;51A59A:fff;A1005A:fff;E60081:fff;FF2DA4:fff;DDDDDD:000;EEEEEE:000;FFFFFF:000</button></li>
|
||||
</ul>
|
||||
<ul class="ct">
|
||||
<li><button type="button"><span>ff0000;ff6c00;ffaa00;ffef00;a6cf00;009e25;00b0a2;0075c8;3a32c3;7820b9;ef007c;000000;252525;464646;636363;7d7d7d;9a9a9a;ffe8e8;f7e2d2;f5eddc;f5f4e0;edf2c2;def7e5;d9eeec;c9e0f0;d6d4eb;e7dbed;f1e2ea;acacac;c2c2c2;cccccc;e1e1e1;ebebeb;ffffff;e97d81;e19b73;d1b274;cfcca2;cfcca2;61b977;53aea8;518fbb;6a65bb;9a54ce;e573ae;5a504b;767b86;00ffff;00ff00;a0f000;ffff00;951015;6e391a;785c25;5f5b25;4c511f;1c4827;0d514c;1b496a;2b285f;45245b;721947;352e2c;3c3f45;00aaff;0000ff;a800ff;ff00ff</span></button></li>
|
||||
</ul>
|
||||
</fieldset>
|
||||
</div>
|
||||
</li>
|
||||
<li class="ti sp"><button type="button" class="tb sp" title="{$lang->edit->sup}"><span>{$lang->edit->sup}</span></button></li>
|
||||
<li class="ti sb"><button type="button" class="tb sb" title="{$lang->edit->sub}"><span>{$lang->edit->sub}</span></button></li>
|
||||
</ul>
|
||||
<ul class="u4">
|
||||
<li class="ti al"><button type="button" class="tb al" title="{$lang->edit->align_left}"><span>{$lang->edit->align_left}</span></button></li>
|
||||
<li class="ti ac"><button type="button" class="tb ac" title="{$lang->edit->align_center}"><span>{$lang->edit->align_center}</span></button></li>
|
||||
<li class="ti ar"><button type="button" class="tb ar" title="{$lang->edit->align_right}"><span>{$lang->edit->align_right}</span></button></li>
|
||||
<li class="ti aj"><button type="button" class="tb aj" title="{$lang->edit->align_justify}"><span>{$lang->edit->align_justify}</span></button></li>
|
||||
<li class="ti ol"><button type="button" class="tb ol" title="{$lang->edit->list_number}"><span>{$lang->edit->list_number}</span></button></li>
|
||||
<li class="ti ul"><button type="button" class="tb ul" title="{$lang->edit->list_bullet}"><span>{$lang->edit->list_bullet}</span></button></li>
|
||||
<li class="ti od disable"><button type="button" class="tb od" title="{$lang->edit->remove_indent} Ctrl+(Left Arrow Key)"><span>{$lang->edit->remove_indent} Ctrl+(Left Arrow Key)</span></button></li>
|
||||
<li class="ti id"><button type="button" class="tb id" title="{$lang->edit->add_indent} Ctrl+(Right Arrow Key)"><span>{$lang->edit->add_indent} Ctrl+(Right Arrow Key)</span></button></li>
|
||||
<li class="ti qm"><button type="button" class="tb qm" title="{$lang->edit->blockquote}"><span>{$lang->edit->blockquote}</span></button></li>
|
||||
<li class="ti bx"><button type="button" class="tb bx" title="{$lang->edit->fieldset}"><span>{$lang->edit->fieldset}</span></button></li>
|
||||
</ul>
|
||||
<ul class="u5">
|
||||
<li class="ti er"><button type="button" class="tb er" title="{$lang->edit->remove_format}"><span>{$lang->edit->remove_format}</span></button></li>
|
||||
</ul>
|
||||
<ul class="u6">
|
||||
<li class="ti ur"><button type="button" class="tb ur" title="{$lang->edit->url}"><span>{$lang->edit->url}</span></button>
|
||||
<div class="lr">
|
||||
<fieldset>
|
||||
<input name="" type="text" class="itx" title="input URL" value="http://" />
|
||||
<span class="nw">
|
||||
<input name="" type="checkbox" value="" class="icx" id="nw" />
|
||||
<label for="nw">{$lang->edit->target_blank}</label>
|
||||
</span>
|
||||
<span class="btnArea">
|
||||
<button type="button" class="btn strong">{$lang->cmd_apply}</button>
|
||||
<button type="button" class="btn">{$lang->cmd_cancel}</button>
|
||||
</span>
|
||||
</fieldset>
|
||||
</div>
|
||||
</li>
|
||||
<li class="ti sc"><button type="button" class="tb sc" title="{$lang->edit->special_character}"><span>{$lang->edit->special_character}</span></button>
|
||||
<div class="lr">
|
||||
<ul>
|
||||
<li class="li li1 active"><button type="button" class="tab">{$lang->edit->symbol}</button>
|
||||
<ul>
|
||||
<li><button type="button">{}〔〕〈〉《》「」『』【】''""、。·‥…§※☆★○●◎◇◆□■△▲▽▼◁◀▷▶♤♠♡♥♧♣⊙◈▣◐◑▒▤▥▨▧▦▩±×÷≠≤≥∞∴°′″∠⊥⌒∂≡≒≪≫√∽∝∵∫∬∈∋⊆⊇⊂⊃∪∩∧∨¬⇒⇔∀∃´~ˇ˘˝˚˙¸˛¡¿ː∮∑∏♭♩♪♬㉿→←↑↓↔↕↗↙↖↘㈜№㏇™㏂㏘℡♨☏☎☜☞¶†‡®ªº♂♀</button></li>
|
||||
</ul>
|
||||
</li>
|
||||
<li class="li li2"><button type="button" class="tab">{$lang->edit->number_unit}</button>
|
||||
<ul>
|
||||
<li><button type="button">₩$¥£€℃Å℉¢¤‰㎕㎖㎗ℓ㎘㏄㎣㎤㎥㎦㎙㎚㎛㎜㎝㎞㎟㎠㎡㎢㏊㎍㎎㎏㏏㎈㎉㏈㎧㎨㎰㎱㎲㎳㎴㎵㎶㎷㎸㎹㎀㎁㎂㎃㎄㎺㎻㎼㎽㎾㎿㎐㎑㎒㎓㎔Ω㏀㏁㎊㎋㎌㏖㏅㎭㎮㎯㏛㎩㎪㎫㎬㏝㏐㏓㏃㏉㏜㏆</button></li>
|
||||
</ul>
|
||||
</li>
|
||||
<li class="li li3"><button type="button" class="tab">{$lang->edit->circle_bracket}</button>
|
||||
<ul>
|
||||
<li><button type="button">㉠㉡㉢㉣㉤㉥㉦㉧㉨㉩㉪㉫㉬㉭㉮㉯㉰㉱㉲㉳㉴㉵㉶㉷㉸㉹㉺㉻ⓐⓑⓒⓓⓔⓕⓖⓗⓘⓙⓚⓛⓜⓝⓞⓟⓠⓡⓢⓣⓤⓥⓦⓧⓨⓩ①②③④⑤⑥⑦⑧⑨⑩⑪⑫⑬⑭⑮㈀㈁㈂㈃㈄㈅㈆㈇㈈㈉㈊㈋㈌㈍㈎㈏㈐㈑㈒㈓㈔㈕㈖㈗㈘㈙㈚㈛⒜⒝⒞⒟⒠⒡⒢⒣⒤⒥⒦⒧⒨⒩⒪⒫⒬⒭⒮⒯⒰⒱⒲⒳⒴⒵⑴⑵⑶⑷⑸⑹⑺⑻⑼⑽⑾⑿⒀⒁⒂</button></li>
|
||||
</ul>
|
||||
</li>
|
||||
<li class="li li4"><button type="button" class="tab">{$lang->edit->korean}</button>
|
||||
<ul>
|
||||
<li><button type="button">ㄱㄲㄳㄴㄵㄶㄷㄸㄹㄺㄻㄼㄽㄾㄿㅀㅁㅂㅃㅄㅅㅆㅇㅈㅉㅊㅋㅌㅍㅎㅏㅐㅑㅒㅓㅔㅕㅖㅗㅘㅙㅚㅛㅜㅝㅞㅟㅠㅡㅢㅣㅥㅦㅧㅨㅩㅪㅫㅬㅭㅮㅯㅰㅱㅲㅳㅴㅵㅶㅷㅸㅹㅺㅻㅼㅽㅾㅿㆀㆁㆂㆃㆄㆅㆆㆇㆈㆉㆊㆋㆌㆍㆎ</button></li>
|
||||
</ul>
|
||||
</li>
|
||||
<li class="li li5"><button type="button" class="tab">{$lang->edit->greece}, {$lang->edit->Latin}</button>
|
||||
<ul>
|
||||
<li><button type="button">ΑΒΓΔΕΖΗΘΙΚΛΜΝΞΟΠΡΣΤΥΦΧΨΩαβγδεζηθικλμνξοπρστυφχψωÆÐĦIJĿŁØŒÞŦŊæđðħIijĸŀłłœßþŧŋʼnБГДЁЖЗИЙЛПЦЧШЩЪЫЬЭЮЯбвгдёжзийлпфцчшщъыьэюя</button></li>
|
||||
</ul>
|
||||
</li>
|
||||
<li class="li li6"><button type="button" class="tab">{$lang->edit->japan}</button>
|
||||
<ul>
|
||||
<li><button type="button">ぁあぃいぅうぇえぉおかがきぎくぐけげこごさざしじすずせぜそぞただちぢっつづてでとどなにぬねのはばぱひびぴふぶぷへべぺほぼぽまみむめもゃやゅゆょよらりるれろゎわゐゑをんァアィイゥウェエォオカガキギクグケゲコゴサザシジスズセゼソゾタダチヂッツヅテデトドナニヌネノハバパヒビピフブプヘベペホボポマミムメモャヤュユョヨラリルレロヮワヰヱヲンヴヵヶ</button></li>
|
||||
</ul>
|
||||
</li>
|
||||
</ul>
|
||||
<fieldset>
|
||||
<input name="" type="text" class="itx" title="input URL" />
|
||||
<span class="btnArea">
|
||||
<button type="button" class="btn strong" title="{$lang->cmd_apply}">{$lang->cmd_apply}</button>
|
||||
<button type="button" class="btn" title="{$lang->cmd_cancel}">{$lang->cmd_cancel}</button>
|
||||
</span>
|
||||
</fieldset>
|
||||
</div>
|
||||
</li>
|
||||
<li class="ti te"><button type="button" class="tb te" title="{$lang->edit->table}"><span>{$lang->edit->table}</span></button>
|
||||
<div class="lr">
|
||||
<fieldset class="pv">
|
||||
<legend>{$lang->cmd_preview}</legend>
|
||||
<div class="xdcs">
|
||||
<table border="1" cellpadding="1" cellspacing="0" class="ts" style="caption-side:top; width:100%;">
|
||||
<caption style="text-align:left">Caption</caption>
|
||||
<tr>
|
||||
<td>TD</td>
|
||||
<td>TD</td>
|
||||
<td>TD</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td>TD</td>
|
||||
<td>TD</td>
|
||||
<td>TD</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td>TD</td>
|
||||
<td>TD</td>
|
||||
<td>TD</td>
|
||||
</tr>
|
||||
</table>
|
||||
</div>
|
||||
</fieldset>
|
||||
<fieldset class="cn">
|
||||
<legend>{$lang->edit->table_caption_position}</legend>
|
||||
<div class="liow">
|
||||
<label for="cn">{$lang->edit->table_caption}</label>
|
||||
<input name="" type="text" id="cn" class="itx" />
|
||||
<ul>
|
||||
<li class="tl selected"><button type="button" title="{$lang->edit->upper_left}"><span>{$lang->edit->upper_left}</span></button></li>
|
||||
<li class="tc"><button type="button" title="{$lang->edit->upper_center}"><span>{$lang->edit->upper_center}</span></button></li>
|
||||
<li class="tr"><button type="button" title="{$lang->edit->upper_right}"><span>{$lang->edit->upper_right}</span></button></li>
|
||||
<li class="bl"><button type="button" title="{$lang->edit->bottom_left}"><span>{$lang->edit->bottom_left}</span></button></li>
|
||||
<li class="bc"><button type="button" title="{$lang->edit->bottom_center}"><span>{$lang->edit->bottom_center}</span></button></li>
|
||||
<li class="br"><button type="button" title="{$lang->edit->bottom_right}"><span>{$lang->edit->bottom_right}</span></button></li>
|
||||
</ul>
|
||||
</div>
|
||||
</fieldset>
|
||||
<fieldset class="th">
|
||||
<legend>{$lang->edit->table_header}</legend>
|
||||
<ul>
|
||||
<li class="no selected"><button type="button" title="{$lang->edit->table_header_none}"><span>{$lang->edit->table_header_none}</span></button></li>
|
||||
<li class="lt"><button type="button" title="{$lang->edit->table_header_left}"><span>{$lang->edit->table_header_left}</span></button></li>
|
||||
<li class="tp"><button type="button" title="{$lang->edit->table_header_top}"><span>{$lang->edit->table_header_top}</span></button></li>
|
||||
<li class="bh"><button type="button" title="{$lang->edit->table_header_both}"><span>{$lang->edit->table_header_both}</span></button></li>
|
||||
</ul>
|
||||
</fieldset>
|
||||
<fieldset class="wh">
|
||||
<legend>{$lang->edit->table_size}</legend>
|
||||
<table>
|
||||
<tr>
|
||||
<th scope="row"><label for="xdtCol">{$lang->edit->row}</label></th>
|
||||
<td><input name="" type="text" id="xdtCol" class="itx" value="3" /></td>
|
||||
</tr>
|
||||
<tr>
|
||||
<th scope="row"><label for="xdtRow">{$lang->edit->col}</label></th>
|
||||
<td><input name="" type="text" id="xdtRow" class="itx" value="3" /></td>
|
||||
</tr>
|
||||
<tr>
|
||||
<th><label for="xdtWidth">{$lang->edit->table_width}</label></th>
|
||||
<td><input name="" type="text" id="xdtWidth" class="itx" value="100" /> <button type="button" class="selected">%</button> <button type="button">px</button></td>
|
||||
</tr>
|
||||
</table>
|
||||
</fieldset>
|
||||
<div class="btnArea">
|
||||
<button type="button" class="btn strong" title="{$lang->cmd_apply}">{$lang->cmd_apply}</button>
|
||||
<button type="button" class="btn" title="{$lang->cmd_cancel}">{$lang->cmd_cancel}</button>
|
||||
</div>
|
||||
</div>
|
||||
</li>
|
||||
<!--
|
||||
<li class="ti cm disable"><button type="button" class="tb tn cm"><span>셀 합치기</span></button></li>
|
||||
<li class="ti cs disable"><button type="button" class="tb tn cs"><span>열 나누기</span></button></li>
|
||||
<li class="ti rs disable"><button type="button" class="tb tn rs"><span>행 나누기</span></button></li>
|
||||
<li class="ti tc disable"><button type="button" class="tb tn tc"><span>목차 넣기</span></button></li>
|
||||
<li class="ti fr"><button type="button" class="tb ty fr"><span>찾기/바꾸기</span></button>
|
||||
<div class="lr">
|
||||
<fieldset class="find">
|
||||
<legend>찾기</legend>
|
||||
<div class="liow">
|
||||
<label for="find">찾을단어</label>
|
||||
<input name="" type="text" class="itx" id="find" />
|
||||
<button type="button" class="btn">찾기</button>
|
||||
</div>
|
||||
</fieldset>
|
||||
<fieldset class="replace">
|
||||
<legend>찾아 바꾸기</legend>
|
||||
<div class="liow">
|
||||
<label for="findAnd">찾을단어</label>
|
||||
<input name="" type="text" class="itx" id="findAnd" />
|
||||
<button type="button" class="btn">찾기</button>
|
||||
</div>
|
||||
<div class="liow">
|
||||
<label for="replace">바꿀단어</label>
|
||||
<input name="" type="text" class="itx" id="replace" />
|
||||
<button type="button" class="btn strong">바꾸기</button>
|
||||
</div>
|
||||
<button type="button" class="btn strong frAll">모두 찾아 바꾸기</button>
|
||||
</fieldset>
|
||||
</div>
|
||||
</li>
|
||||
-->
|
||||
</ul>
|
||||
</div>
|
||||
</div>
|
||||
<!-- /tool -->
|
||||
|
||||
<!-- edit -->
|
||||
<div class="edit">
|
||||
<div class="xdcs" title="Enter는 줄바꿈, Shift+Enter는 문단바꿈입니다."></div>
|
||||
</div>
|
||||
<!-- /edit -->
|
||||
|
||||
<!-- Time -->
|
||||
<div class="time">
|
||||
<p>글을 쓰기 시작한지 <strong>1시간</strong>이 지났습니다. 마지막 저장 시간은 <strong>10분 전</strong> 입니다.</p>
|
||||
</div>
|
||||
<!-- /Time -->
|
||||
|
||||
<!-- mode -->
|
||||
<div class="mode">
|
||||
<button type="button" class="resize" title="{$lang->edit->edit_height_control}"><span>{$lang->edit->edit_height_control}</span></button>
|
||||
<div class="autoResize">
|
||||
<input name="" type="checkbox" value="" class="icx" id="autoResize" />
|
||||
<label for="autoResize">Auto Resize</label>
|
||||
</div>
|
||||
<ul>
|
||||
<li class="wysiwyg active"><button type="button" class="wysiwyg" title="{$lang->edit->rich_editor}">{$lang->edit->rich_editor}</button></li>
|
||||
<li class="html"><button type="button" class="html" title="{$lang->edit->html_editor}">{$lang->edit->html_editor}</button></li>
|
||||
</ul>
|
||||
</div>
|
||||
<!-- /mode -->
|
||||
</div>
|
||||
<!-- /XEED -->
|
||||
|
||||
<!-- XD Layer Window -->
|
||||
<div class="xdlw">
|
||||
<!-- Attach List -->
|
||||
<!--@if($allow_fileupload)-->
|
||||
<!--%load_js_plugin("uploader")-->
|
||||
<div class="xdal" id="xdal">
|
||||
<div class="iHead">
|
||||
<h2>{$lang->edit->upload_list} <em>[<strong>0</strong>]</em></h2>
|
||||
<div class="btnArea fr">
|
||||
<button type="button" class="btn cs" title="{$lang->cmd_close}">{$lang->cmd_close}</button>
|
||||
</div>
|
||||
</div>
|
||||
<div class="iBody">
|
||||
<div class="sn img none">
|
||||
<h3 class="label">{$lang->edit->image}</h3>
|
||||
<p class="nofile">{$lang->edit->no_image}</p>
|
||||
<ul>
|
||||
<li>
|
||||
<button type="button" class="ob"><img src="../../../../../../common/tpl/images/blank.gif" alt="" /></button>
|
||||
<button type="button" class="ctr ins" title="{$lang->edit->link_file}"><span>{$lang->edit->link_file}</span></button>
|
||||
<button type="button" class="ctr del" title="{$lang->cmd_delete}"><span>{$lang->cmd_delete}</span></button> <br />
|
||||
<input name="" type="checkbox" value="" class="icx" id="img1" /> <label for="img1">@exThumbH.jpg</label>
|
||||
</li>
|
||||
</ul>
|
||||
<p class="task">
|
||||
<button type="button" class="all">{$lang->cmd_select_all}</button>
|
||||
<button type="button" class="insert">{$lang->edit->insert_selected}</button>
|
||||
<button type="button" class="delete">{$lang->edit->delete_selected}</button>
|
||||
</p>
|
||||
</div>
|
||||
<div class="sn media none">
|
||||
<h3 class="label">{$lang->edit->multimedia}</h3>
|
||||
<p class="nofile">{$lang->edit->no_multimedia}</p>
|
||||
<ul></ul>
|
||||
<p class="task">
|
||||
<button type="button" class="all" title="{$lang->cmd_select_all}">{$lang->cmd_select_all}</button>
|
||||
<button type="button" class="insert" title="{$lang->edit->insert_selected}">{$lang->edit->insert_selected}</button>
|
||||
<button type="button" class="delete">{$lang->edit->delete_selected}</button>
|
||||
</p>
|
||||
</div>
|
||||
<div class="sn file none">
|
||||
<h3 class="label">{$lang->edit->file}</h3>
|
||||
<p class="nofile">{$lang->edit->no_attachment}</p>
|
||||
<ul></ul>
|
||||
<p class="task">
|
||||
<button type="button" class="all" title="{$lang->cmd_select_all}">{$lang->cmd_select_all}</button>
|
||||
<button type="button" class="insert" title="{$lang->edit->insert_selected}">{$lang->edit->insert_selected}</button>
|
||||
<button type="button" class="delete">{$lang->edit->delete_selected}</button>
|
||||
</p>
|
||||
</div>
|
||||
</div>
|
||||
<div class="iFoot">
|
||||
<p class="info">{$upload_status}</p>
|
||||
<div class="btnArea fr">
|
||||
<button type="button" class="btn at strong" title="{$lang->edit->upload_file}">{$lang->edit->upload_file}</button>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
<!--@end-->
|
||||
<!-- /Attach List -->
|
||||
</div>
|
||||
<!-- /XD Layer Window -->
|
||||
<!-- }}} Editor HTML -->
|
||||
|
||||
<!-- Activate Editor -->
|
||||
<script type="text/javascript">//<![CDATA[
|
||||
var editor_path = '{$editor_path}';
|
||||
var xeed_path = '{$editor_path}';
|
||||
var auto_saved_msg = '{$lang->msg_auto_saved}';
|
||||
var oEditor = editorStart_xe('{$editor_sequence}', '{$editor_primary_key_name}', '{$editor_content_key_name}', '{$editor_height}', '{$colorset}', '{$content_style}', '{$content_font}', '{$content_font_size}');
|
||||
|
||||
// upload settings
|
||||
try {
|
||||
oEditor.setOption('allowed_filesize', '{$file_config->allowed_filesize}');
|
||||
oEditor.setOption('allowed_filetypes', '{$file_config->allowed_filetypes}');
|
||||
} catch(e){}
|
||||
|
||||
window.lang = jQuery.extend(window.lang||{}, {
|
||||
<!--@foreach($lang->edit as $key=>$val)-->
|
||||
<!--@if(strpos($key,'autosave')===0)-->'{$key}':'{$val}',<!--@end-->
|
||||
<!--@end-->
|
||||
'upload_not_enough_quota':'{$lang->edit->upload_not_enough_quota}'
|
||||
});
|
||||
//]]></script>
|
||||
<!-- // Activate Editor -->
|
||||
97
modules/editor/skins/xeed/js/xe_interface.js
Normal file
97
modules/editor/skins/xeed/js/xe_interface.js
Normal file
|
|
@ -0,0 +1,97 @@
|
|||
(function($){
|
||||
|
||||
if (!window.xe) xe = {};
|
||||
if (!xe.Editors) xe.Editors = [];
|
||||
|
||||
function editorStart_xe(editor_seq, primary_key, content_key, editor_height, colorset, content_style, content_font, content_font_size) {
|
||||
var $textarea, $form, $input, saved_str, xeed, opt = {};
|
||||
|
||||
if(typeof(colorset)=='undefined') colorset = 'white';
|
||||
if(typeof(content_style)=='undefined') content_style = 'xeStyle';
|
||||
if(typeof(content_font)=='undefined') content_font= '';
|
||||
if(typeof(content_font_size)=='undefined') content_font_size= '';
|
||||
|
||||
$textarea = $('#xeed-'+editor_seq);
|
||||
$form = $($textarea[0].form).attr('editor_sequence', editor_seq);
|
||||
$input = $form.find('input[name='+content_key+']');
|
||||
|
||||
if($input[0]) $textarea.val($input.remove().val()).attr('name', content_key);
|
||||
$textarea.attr('name', content_key);
|
||||
|
||||
// Use auto save feature?
|
||||
opt.use_autosave = !!$form[0].elements['_saved_doc_title'];
|
||||
|
||||
// min height
|
||||
if (editor_height) opt.height = parseInt(editor_height) || 200;
|
||||
|
||||
// create an editor
|
||||
xe.Editors[editor_seq] = xeed = new xe.Xeed($textarea, opt);
|
||||
xe.registerApp(xeed);
|
||||
|
||||
// filters
|
||||
xeed.cast('REGISTER_FILTER', ['r2t', plz_standard]);
|
||||
xeed.cast('REGISTER_FILTER', ['r2t', remove_baseurl]);
|
||||
|
||||
// Set standard API
|
||||
editorRelKeys[editor_seq] = {
|
||||
primary : $form[0][primary_key],
|
||||
content : $form[0][content_key],
|
||||
editor : xeed,
|
||||
func : function(){ return xeed.cast('GET_CONTENT'); },
|
||||
pasteHTML : function(text){ xeed.cast('PASTE_HTML', [text]); }
|
||||
};
|
||||
|
||||
// Auto save
|
||||
if (opt.use_autosave) xeed.registerPlugin(new xe.Xeed.AutoSave());
|
||||
|
||||
return xeed;
|
||||
}
|
||||
|
||||
// standard filters
|
||||
function plz_standard(code) {
|
||||
var single_tags = 'area br col hr img input param'.split(' '), replaces = {b:'strong',i:'em'};
|
||||
|
||||
code = code.replace(/<(\/)?([A-Za-z0-9:]+)(.*?)(\s*\/?)>/g, function(m0,is_close,tag,attrs,closing){
|
||||
tag = tag.toLowerCase();
|
||||
if (replaces[tag]) tag = replaces[tag];
|
||||
|
||||
attrs = attrs.replace(/([\w:-]\s*)=(?:([^"' \t\r\n]+)|\s*("[^"]*")|\s*('[^']*'))/g, function(m0,name,m2,m3,m4){
|
||||
var val = m2||m3||m4;
|
||||
|
||||
if (m3||m4) val = val.substr(1,val.length-2);
|
||||
|
||||
return $.trim(name.toLowerCase())+'='+'"'+val+'"';
|
||||
});
|
||||
|
||||
if (attrs=$.trim(attrs)) attrs = ' '+attrs;
|
||||
|
||||
closing = $.trim(closing);
|
||||
if (!is_close && !closing && $.inArray(tag, single_tags) != -1) closing = ' /';
|
||||
|
||||
return '<'+(is_close||'')+tag+attrs+closing+'>';
|
||||
});
|
||||
|
||||
return code;
|
||||
}
|
||||
|
||||
// remove base url
|
||||
function remove_baseurl(code) {
|
||||
var reg = new RegExp(' (href|src)\s*=\s*(["\'])?'+request_uri.replace('\\', '\\\\'), 'ig');
|
||||
|
||||
return code.replace(reg, function(m0,m1,m2){ return ' '+m1+'='+m2; });
|
||||
}
|
||||
|
||||
window.editorStart_xe = editorStart_xe;
|
||||
|
||||
})(jQuery);
|
||||
|
||||
function editorGetAutoSavedDoc(form) {
|
||||
var param = new Array();
|
||||
param['mid'] = current_mid;
|
||||
param['editor_sequence'] = form.getAttribute('editor_sequence')
|
||||
setTimeout(function() {
|
||||
var response_tags = new Array("error","message","editor_sequence","title","content","document_srl");
|
||||
exec_xml('editor',"procEditorLoadSavedDocument", param, function(a,b,c) { editorRelKeys[param['editor_sequence']]['primary'].value = a['document_srl']; if(typeof(uploadSettingObj[param['editor_sequence']]) == 'object') editorUploadInit(uploadSettingObj[param['editor_sequence']], true); }, response_tags);
|
||||
}, 0);
|
||||
|
||||
}
|
||||
41
modules/editor/skins/xeed/js/xe_textarea.js
Normal file
41
modules/editor/skins/xeed/js/xe_textarea.js
Normal file
|
|
@ -0,0 +1,41 @@
|
|||
function editorStartTextarea(editor_sequence, content_key, primary_key) {
|
||||
var obj = xGetElementById('editor_'+editor_sequence);
|
||||
var use_html = xGetElementById('htm_'+editor_sequence).value;
|
||||
obj.form.setAttribute('editor_sequence', editor_sequence);
|
||||
|
||||
obj.style.width = '99%';
|
||||
|
||||
editorRelKeys[editor_sequence] = new Array();
|
||||
editorRelKeys[editor_sequence]["primary"] = obj.form[primary_key];
|
||||
editorRelKeys[editor_sequence]["content"] = obj.form[content_key];
|
||||
editorRelKeys[editor_sequence]["func"] = editorGetContentTextarea;
|
||||
|
||||
var content = obj.form[content_key].value;
|
||||
if(use_html) {
|
||||
content = content.replace(/<br([^>]*)>/ig,"\n");
|
||||
if(use_html!='br') {
|
||||
content = content.replace(/</g, "<");
|
||||
content = content.replace(/>/g, ">");
|
||||
content = content.replace(/"/g, '"');
|
||||
content = content.replace(/&/g, "&");
|
||||
}
|
||||
}
|
||||
obj.value = content;
|
||||
}
|
||||
|
||||
function editorGetContentTextarea(editor_sequence) {
|
||||
var obj = xGetElementById('editor_'+editor_sequence);
|
||||
var use_html = xGetElementById('htm_'+editor_sequence).value;
|
||||
var content = obj.value.trim();
|
||||
if(use_html) {
|
||||
if(use_html!='br') {
|
||||
content = content.replace(/&/g, "&");
|
||||
content = content.replace(/</g, "<");
|
||||
content = content.replace(/>/g, ">");
|
||||
content = content.replace(/\"/g, """);
|
||||
}
|
||||
content = content.replace(/(\r\n|\n)/g, "<br />");
|
||||
}
|
||||
return content;
|
||||
}
|
||||
|
||||
4980
modules/editor/skins/xeed/js/xeed.js
Normal file
4980
modules/editor/skins/xeed/js/xeed.js
Normal file
File diff suppressed because it is too large
Load diff
85
modules/editor/skins/xeed/js/xeed.stub.js
Normal file
85
modules/editor/skins/xeed/js/xeed.stub.js
Normal file
|
|
@ -0,0 +1,85 @@
|
|||
(function($){
|
||||
|
||||
var ver = '0.9.0';
|
||||
|
||||
$.fn.xeed = function(options) {
|
||||
var $this = this.eq(0), $head = $('head'), templates = {}, DEFAULT = 'default', isCSSLoaded, isScriptLoaded;
|
||||
var opts = $.extend({
|
||||
ui : DEFAULT
|
||||
}, options);
|
||||
|
||||
// Load Editor UI
|
||||
function loadUI(ui, fnError){
|
||||
if (templates[ui]) {
|
||||
// load CSS
|
||||
if (!isCSSLoaded) {
|
||||
$head
|
||||
.append('<link rel="stylesheet" type="text/css" href="'+xeed_path+'tpl/xd.css" />')
|
||||
.append('<link rel="stylesheet" type="text/css" href="'+xeed_path+'tpl/xdcs.css" />');
|
||||
|
||||
loadCSS = true;
|
||||
}
|
||||
|
||||
// insert HTML
|
||||
$this.before(templates[ui]).hide();
|
||||
|
||||
// load script
|
||||
setTimeout(loadScript, 0);
|
||||
|
||||
return;
|
||||
}
|
||||
|
||||
$.ajax({
|
||||
url : xeed_path + 'template.php?ui=' + ui,
|
||||
dataType : 'text',
|
||||
cache : false,
|
||||
success : function(data){
|
||||
var html = processTemplate(data);
|
||||
templates[ui] = html;
|
||||
loadUI(ui);
|
||||
}
|
||||
});
|
||||
};
|
||||
|
||||
// Load Xeed core script
|
||||
function loadScript(){
|
||||
function callback() {
|
||||
var xeed = new xe.Xeed($this, opts);
|
||||
|
||||
$this.data('xeed', xeed);
|
||||
xe.registerApp(xeed);
|
||||
|
||||
isScriptLoaded = true;
|
||||
}
|
||||
|
||||
if (!xe.Xeed) xe.Xeed = {};
|
||||
if (!xe.Xeed.callbacks) xe.Xeed.callbacks = [];
|
||||
|
||||
xe.Xeed.version = ver;
|
||||
|
||||
if (isScriptLoaded) callback();
|
||||
else xe.Xeed.callbacks.push(callback);
|
||||
|
||||
setTimeout(function(){
|
||||
var scr = document.createElement('script');
|
||||
scr.src = xeed_path+'xeed.js?ver='+ver+'&_cache='+Math.round(Math.random()*1000); // XXX : cache_code
|
||||
scr.type = 'text/javascript';
|
||||
|
||||
$head[0].appendChild(scr);
|
||||
}, 0);
|
||||
};
|
||||
|
||||
// TODO : Process a template
|
||||
function processTemplate(data) {
|
||||
return data;
|
||||
};
|
||||
|
||||
if (!this.data('xeed')) {
|
||||
this.data('xeed', 1);
|
||||
loadUI(opts.ui);
|
||||
}
|
||||
|
||||
return this;
|
||||
};
|
||||
|
||||
})(jQuery);
|
||||
22
modules/editor/skins/xeed/skin.xml
Normal file
22
modules/editor/skins/xeed/skin.xml
Normal file
|
|
@ -0,0 +1,22 @@
|
|||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
<skin version="0.2">
|
||||
<title xml:lang="ko">XEED Skin</title>
|
||||
<title xml:lang="en">XEED Skin</title>
|
||||
<title xml:lang="zh-TW">XEED 面板</title>
|
||||
<description xml:lang="ko">
|
||||
XpressEditor based on SmartEditor Basic by NHN
|
||||
</description>
|
||||
<description xml:lang="en">
|
||||
XpressEditor based on SmartEditor Basic by NHN
|
||||
</description>
|
||||
<description xml:lang="zh-TW">
|
||||
XpressEditor 是 NHN 基於 SmartEditor 開發而成。
|
||||
</description>
|
||||
<version>0.5.0</version>
|
||||
<date>2010-11-05</date>
|
||||
<author email_address="developers@xpressengine.com" link="http://www.xpressengine.com">
|
||||
<name xml:lang="ko">NHN</name>
|
||||
<name xml:lang="en">NHN</name>
|
||||
<name xml:lang="zh-TW">NHN</name>
|
||||
</author>
|
||||
</skin>
|
||||
409
modules/editor/skins/xeed/xd.css
Normal file
409
modules/editor/skins/xeed/xd.css
Normal file
|
|
@ -0,0 +1,409 @@
|
|||
@charset "utf-8";
|
||||
/* XEED - NHN (developers@xpressengine.com) */
|
||||
/* Reset */
|
||||
html,
|
||||
body{height:100%}
|
||||
.xd{display:none;position:relative;margin:1em 0;border:1px solid #e0dedf;z-index:1;*zoom:1;color:#000}
|
||||
.xd legend{visibility:visible}
|
||||
.xd fieldset{*zoom:1}
|
||||
.xd .tool ul,
|
||||
.xd .mode ul{margin:0;padding:0;list-style:none}
|
||||
.xd .tool button,
|
||||
.xd .mode button,
|
||||
.xdlw button{position:relative;border:0;margin:0;padding:0;background-color:transparent;overflow:visible;cursor:pointer}
|
||||
.xd .tool em{font-style:normal}
|
||||
.xd .tool img{border:0}
|
||||
.xd .tool .itx{border:1px solid #c7c7c7;background:transparent;padding:2px 4px;_margin:-1px 0;height:15px;font-size:12px;vertical-align:top}
|
||||
.xd .tool .itx.hover,
|
||||
.xd .tool .itx.focus{border-color:#999;box-shadow:0 0 2px #bbb;-moz-box-shadow:0 0 2px #bbb;-webkit-box-shadow:0 0 2px #bbb}
|
||||
.xd .tool .icx,
|
||||
.xd .mode .icx,
|
||||
.xdlw .icx{width:13px;height:13px;vertical-align:middle;margin:0 2px 0 0;padding:0}
|
||||
.xd .tool .btn,
|
||||
.xdlw .btn{border:1px solid #b5b5b5;font-size:12px;padding:0 4px;height:21px;_height:20px;vertical-align:top;cursor:pointer}
|
||||
.xd .tool fieldset{border:0;margin:0;padding:0}
|
||||
.xd .tool label,
|
||||
.xd .mode label,
|
||||
.xdlw label{cursor:pointer}
|
||||
.xd .tool .strong,
|
||||
.xdlw .strong{font-weight:bold}
|
||||
/* Background */
|
||||
.xd .tool,
|
||||
.xd .mode,
|
||||
.xd .resize,
|
||||
.xd .t1 .u1,
|
||||
.xd .t1 .u1 .tb .img,
|
||||
.xd .t1 .u1 .tb .media,
|
||||
.xd .t1 .u1 .tb .file,
|
||||
.xd .t1 .u2,
|
||||
.xd .t2 .tb,
|
||||
.xd .t2 .btn,
|
||||
.xd .t2 .u3 .lr li.active button,
|
||||
.xd .t2 .u3 .lr li.hover button,
|
||||
.xd .t2 .u6 .sc .lr .li ul,
|
||||
.xd .t2 .u6 .te .lr .cn li button,
|
||||
.xd .t2 .u6 .te .lr .th li button,
|
||||
.xdlw .iHead,
|
||||
.xdlw .iFoot,
|
||||
.xdlw .iHead h2,
|
||||
.xdlw .btn,
|
||||
.xdal .label,
|
||||
.xdal .media .ob,
|
||||
.xdal .file .ob,
|
||||
.xdal .sn .task .all,
|
||||
.xdal .sn .ctr{background-image:url(xd.gif);background-repeat:no-repeat}
|
||||
/* Font Family */
|
||||
.xd .tool .t1 .tb,
|
||||
.xd .tool .t2 .hx .lr button,
|
||||
.xd .tool .t2 .u6 .sc .lr .tab,
|
||||
.xd .edit,
|
||||
.xdal .sn .ctr,
|
||||
.xdal .sn .task button,
|
||||
.xdal .iFoot .info{font-family:돋움, Dotum, Tahoma, Geneva, sans-serif}
|
||||
.xd .tool .itx,
|
||||
.xd .tool .t2 .u3 .cr .lr .cx li button,
|
||||
.xd .tool .t2 .u6 .te .lr .cn li button,
|
||||
.xd .tool .t2 .u6 .te .lr .wh td button,
|
||||
.xd .mode ul button,
|
||||
.xd .mode .autoResize label,
|
||||
.xdlw .iHead h2 em,
|
||||
.xdlw label{font-family:Tahoma, Geneva, sans-serif}
|
||||
/* Hidden Text */
|
||||
.xd .t1 .tb .img span,
|
||||
.xd .t1 .tb .media span,
|
||||
.xd .t1 .tb .file span,
|
||||
.xd .t2 .tb span,
|
||||
.xd .t2 .u3 .cr .lr li button span,
|
||||
.xd .t2 .u6 .te .lr .cn button span,
|
||||
.xd .mode .resize span,
|
||||
.xdal .sn .ctr span{position:absolute;top:0;left:0;width:1px;height:1px;overflow:hidden;font-size:0;line-height:0;z-index:-1}
|
||||
/* Label Input OverWrap */
|
||||
.xd .tool legend{_color:#000 !important}
|
||||
.xd .tool .liow{position:relative;background:#fff;margin:0 0 8px 0}
|
||||
.xd .tool .liow label{position:absolute;top:4px;left:6px;white-space:nowrap}
|
||||
.xd .tool .liow .itx{position:relative;z-index:2;background:transparent}
|
||||
/* Time */
|
||||
.xd .time{font-size:12px;background:#fcfcfc;border-top:1px solid #ddd;display:none}
|
||||
.xd .time p{margin:0;padding:6px 10px;color:#666;text-align:center}
|
||||
/* Mode */
|
||||
.xd .mode{position:relative;z-index:1;background-position:0 -1140px;background-repeat:repeat-x;border-top:1px solid #b5b5b5;*zoom:1}
|
||||
.xd .mode .resize{width:100%;height:20px;cursor:n-resize;background-position:center -1105px;font-size:0;line-height:0}
|
||||
.xd .mode .autoResize{position:absolute;top:0;left:8px;font-size:11px;line-height:20px}
|
||||
.xd .mode .autoResize label{display:inline-block;height:20px}
|
||||
.xd .mode ul{position:absolute;top:-1px;right:10px;line-height:15px}
|
||||
.xd .mode li{position:relative;float:left;margin:0 -1px 0 0;border:1px solid #b5b5b5;background:#f4f4f4;vertical-align:top}
|
||||
.xd .mode li.active{border-top-color:#fcfcfc;background:#fcfcfc;z-index:2}
|
||||
.xd .mode ul button{padding:0 10px;font-size:11px}
|
||||
/* Tool - Common */
|
||||
.xd .tool{background-position:0 -1140px;background-repeat:repeat-x;background-color:#f4f4f4;position:relative;z-index:3}
|
||||
.xd .skip{position:absolute;display:block;top:0;left:0;width:1px;height:1px;overflow:hidden;color:#333;text-indent:1em;text-decoration:none;font-size:12px}
|
||||
.xd .skip:hover,
|
||||
.xd .skip:active,
|
||||
.xd .skip:focus{position:relative;width:100%;height:auto;padding:5px 0}
|
||||
/* Tool - 1 */
|
||||
.xd .t1{position:relative;z-index:2;padding:0 15px 0 0;border-bottom:1px solid #e0dedf;*zoom:1}
|
||||
.xd .t1:after{content:"";display:block;clear:both}
|
||||
.xd .t1 .u1,
|
||||
.xd .t1 .u2{margin:0 0 -1px 0;_margin-top:-1px;background-repeat:repeat-x;background-position:0 -1140px;float:left;_float:none;display:inline;*zoom:1}
|
||||
.xd .t1 .ti{float:left;display:inline;border:1px solid #e0dedf;margin:-1px 0 0 -1px;_margin-top:0;_margin-bottom:-1px;*zoom:1}
|
||||
.xd .t1 .ti.active{background-color:#e8e8e8;border:1px solid #e0dedf;border-top:0;border-bottom:0;margin:0 -1px}
|
||||
.xd .t1 .tb{display:inline-block;white-space:nowrap;padding:0 8px;height:26px;line-height:26px;font-size:11px;text-decoration:none;vertical-align:top;color:#000;letter-spacing:-1px}
|
||||
.xd .t1 .tb span{display:block;float:left;cursor:pointer}
|
||||
.xd .t1 .u1 .tb strong{color:#f60}
|
||||
.xd .t1 .u1 .al .tb span{padding:0 0 0 22px}
|
||||
.xd .t1 .u1 .al .tb .all{padding:0}
|
||||
.xd .t1 .u1 .al .img{background-position:5px -282px}
|
||||
.xd .t1 .u1 .al .media{background-position:6px -312px}
|
||||
.xd .t1 .u1 .al .file{background-position:6px -342px}
|
||||
/* Tool - 2 */
|
||||
.xd .t2{position:relative;z-index:2;border-top:1px solid #e0dedf;border-bottom:1px solid #b5b5b5;padding:5px 10px 0 5px;margin:-1px 0 0 0;*zoom:1}
|
||||
.xd .t2:after{content:"";display:block;clear:both}
|
||||
.xd .t2 .u1,
|
||||
.xd .t2 .u2,
|
||||
.xd .t2 .u3,
|
||||
.xd .t2 .u4,
|
||||
.xd .t2 .u5,
|
||||
.xd .t2 .u6{float:left;_float:none;display:inline;position:relative;margin:0 5px 0 0;padding:0 0 5px 0;*zoom:1}
|
||||
.xd .t2 .ti{float:left;border:1px solid #b5b5b5;margin:0 -1px 0 0;font-size:0;position:relative}
|
||||
.xd .t2 .ti.hover{border-color:#666;z-index:100;box-shadow:0 0 2px #bbb;-moz-box-shadow:0 0 2px #bbb;-webkit-box-shadow:0 0 2px #bbb}
|
||||
.xd .t2 .ti.active{border-color:#333;z-index:100}
|
||||
.xd .t2 .tb{width:20px;height:19px;line-height:19px;overflow:visible;_overflow-y:hidden;vertical-align:top;background-position:0 -60px;letter-spacing:-1px}
|
||||
.xd .t2 .tb.more{width:10px;background-position:-140px -40px !important;border-left:1px solid #ddd}
|
||||
.xd .t2 .u2 .tb{width:auto;height:19px;line-height:19px;font-size:12px;padding:0 12px 0 4px;background-position:right 0;text-shadow:1px 1px 0 #eee}
|
||||
.xd .t2 .u2 .active .tb{background-position:right -20px}
|
||||
.xd .t2 .disable{opacity:.3;filter:alpha(opacity=30);-ms-filter:"alpha(opacity=30)";border-color:#b5b5b5 !important;box-shadow:none !important;-moz-box-shadow:none !important;-webkit-box-shadow:none !important}
|
||||
.xd .t2 .disable .tb{cursor:default;-ms-filter:inherit}
|
||||
.xd .t2 .ud .tb{background-position:0 -40px}
|
||||
.xd .t2 .rd .tb{background-position:-20px -40px}
|
||||
.xd .t2 .bd .tb{background-position:-40px -40px}
|
||||
.xd .t2 .ue .tb{background-position:-60px -40px}
|
||||
.xd .t2 .ic .tb{background-position:-80px -40px}
|
||||
.xd .t2 .se .tb{background-position:-100px -40px}
|
||||
.xd .t2 .cr.fc .tb{background-position:-120px -40px}
|
||||
.xd .t2 .cr.bc .tb{background-position:-150px -40px}
|
||||
.xd .t2 .sp .tb{background-position:-180px -40px}
|
||||
.xd .t2 .sb .tb{background-position:-200px -40px}
|
||||
.xd .t2 .al .tb{background-position:-220px -40px}
|
||||
.xd .t2 .ac .tb{background-position:-240px -40px}
|
||||
.xd .t2 .ar .tb{background-position:-260px -40px}
|
||||
.xd .t2 .aj .tb{background-position:-280px -40px}
|
||||
.xd .t2 .ol .tb{background-position:-300px -40px}
|
||||
.xd .t2 .ul .tb{background-position:-320px -40px}
|
||||
.xd .t2 .od .tb{background-position:-340px -40px}
|
||||
.xd .t2 .id .tb{background-position:-360px -40px}
|
||||
.xd .t2 .qm .tb{background-position:-380px -40px}
|
||||
.xd .t2 .bx .tb{background-position:-400px -40px}
|
||||
.xd .t2 .er .tb{background-position:-420px -40px}
|
||||
.xd .t2 .ur .tb{background-position:-440px -40px}
|
||||
.xd .t2 .sc .tb{background-position:-460px -40px}
|
||||
.xd .t2 .te .tb{background-position:-480px -40px}
|
||||
.xd .t2 .cm .tb{background-position:-500px -40px}
|
||||
.xd .t2 .cs .tb{background-position:-520px -40px}
|
||||
.xd .t2 .rs .tb{background-position:-540px -40px}
|
||||
.xd .t2 .tc .tb{background-position:-560px -40px}
|
||||
.xd .t2 .fr .tb{background-position:-580px -40px}
|
||||
.xd .t2 .active .tb.ud{background-position:0 -60px}
|
||||
.xd .t2 .active .tb.rd{background-position:-20px -60px}
|
||||
.xd .t2 .active .tb.bd{background-position:-40px -60px}
|
||||
.xd .t2 .active .tb.ue{background-position:-60px -60px}
|
||||
.xd .t2 .active .tb.ic{background-position:-80px -60px}
|
||||
.xd .t2 .active .tb.se{background-position:-100px -60px}
|
||||
.xd .t2 .active .tb.more{background-position:-140px -60px !important}
|
||||
.xd .t2 .active .tb.sp{background-position:-180px -60px}
|
||||
.xd .t2 .active .tb.sb{background-position:-200px -60px}
|
||||
.xd .t2 .active .tb.al{background-position:-220px -60px}
|
||||
.xd .t2 .active .tb.ac{background-position:-240px -60px}
|
||||
.xd .t2 .active .tb.ar{background-position:-260px -60px}
|
||||
.xd .t2 .active .tb.aj{background-position:-280px -60px}
|
||||
.xd .t2 .active .tb.ol{background-position:-300px -60px}
|
||||
.xd .t2 .active .tb.ul{background-position:-320px -60px}
|
||||
.xd .t2 .active .tb.od{background-position:-340px -60px}
|
||||
.xd .t2 .active .tb.id{background-position:-360px -60px}
|
||||
.xd .t2 .active .tb.qm{background-position:-380px -60px}
|
||||
.xd .t2 .active .tb.bx{background-position:-400px -60px}
|
||||
.xd .t2 .active .tb.er{background-position:-420px -60px}
|
||||
.xd .t2 .active .tb.ur{background-position:-440px -60px}
|
||||
.xd .t2 .active .tb.sc{background-position:-460px -60px}
|
||||
.xd .t2 .active .tb.te{background-position:-480px -60px}
|
||||
.xd .t2 .active .tb.cm{background-position:-500px -60px}
|
||||
.xd .t2 .active .tb.cs{background-position:-520px -60px}
|
||||
.xd .t2 .active .tb.rs{background-position:-540px -60px}
|
||||
.xd .t2 .active .tb.tc{background-position:-560px -60px}
|
||||
.xd .t2 .active .tb.fr{background-position:-580px -60px}
|
||||
/* Layer */
|
||||
.xd .t2 .lr{display:none;position:absolute;left:-1px;top:19px;padding:10px;font-size:12px;border:1px solid #bbb;background-color:#fafafa;*zoom:1;box-shadow:0 0 2px #bbb;-moz-box-shadow:0 0 2px #bbb;-webkit-box-shadow:0 0 2px #bbb}
|
||||
.xd .t2 .lr:after{content:"";display:block;clear:both}
|
||||
.xd .t2 .lr.open{display:block}
|
||||
/* Layer - u2 (hx, ff, fs, lh) */
|
||||
.xd .t2 .u2 .lr{padding:2px}
|
||||
.xd .t2 .u2 .lr li{margin:0 !important;padding:0 !important;border:0 !important}
|
||||
.xd .t2 .u2 .lr li.hover{background:#ebebeb}
|
||||
.xd .t2 .u2 .lr button{display:block;white-space:nowrap;text-align:left;font-size:12px;padding:2px 10px}
|
||||
.xd .t2 .u2 .hx .lr button{font-weight:bold}
|
||||
.xd .t2 .u2 .lr .h1 button{font-size:24px}
|
||||
.xd .t2 .u2 .lr .h2 button{font-size:20px}
|
||||
.xd .t2 .u2 .lr .h3 button{font-size:18px}
|
||||
.xd .t2 .u2 .lr .h4 button{font-size:16px}
|
||||
.xd .t2 .u2 .lr .h5 button{font-size:14px}
|
||||
.xd .t2 .u2 .lr .h6 button{font-size:12px}
|
||||
/* Layer - u3 (cr) */
|
||||
.xd .t2 .u3 .cr .lr fieldset{position:relative;_float:left}
|
||||
.xd .t2 .u3 .cr .lr legend{font-size:12px;font-weight:bold;margin:0;padding:0;display:inline;line-height:normal;width:auto;height:auto;position:static}
|
||||
.xd .t2 .u3 .cr .lr .ct,
|
||||
.xd .t2 .u3 .cr .lr .cx{width:204px;position:relative;*zoom:1;overflow:hidden}
|
||||
.xd .t2 .u3 .cr .lr .ct:after,
|
||||
.xd .t2 .u3 .cr .lr .cx:after{content:"";display:block;clear:both}
|
||||
.xd .t2 .u3 .cr .lr .ct li,
|
||||
.xd .t2 .u3 .cr .lr .cx li{position:relative;float:left;margin:0 1px 1px 0;font-size:0;line-height:0}
|
||||
.xd .t2 .u3 .cr .lr .ct li button{display:block;position:relative;overflow:hidden;width:11px;height:11px;vertical-align:top}
|
||||
.xd .t2 .u3 .cr .lr .ct li.active button,
|
||||
.xd .t2 .u3 .cr .lr .ct li.hover button{background-position:-330px -260px}
|
||||
.xd .t2 .u3 .cr .lr .cx li button{display:block;position:relative;overflow:hidden;width:67px;height:18px;font-size:11px;line-height:18px;text-align:left;*padding:0 4px}
|
||||
/* Layer - u6 (ur) */
|
||||
.xd .t2 .u6 .ur .lr{width:260px;left:auto;right:-1px}
|
||||
.xd .t2 .u6 .ur .lr fieldset:after{content:"";display:block;clear:both}
|
||||
.xd .t2 .u6 .ur .lr .itx{display:block;width:250px;margin:0 0 4px 0;background:#fff}
|
||||
.xd .t2 .u6 .ur .lr .nw{float:left;line-height:21px;white-space:nowrap}
|
||||
.xd .t2 .u6 .ur .lr .btnArea{float:right;white-space:nowrap}
|
||||
.xd .t2 .u6 .ur .lr .btn{*margin:0 0 0 4px}
|
||||
/* Layer - u6 (sc) */
|
||||
.xd .t2 .u6 .sc .lr{width:402px;height:222px;left:auto;right:-1px}
|
||||
.xd .t2 .u6 .sc .lr .li{float:left;margin:0 -1px 0 0}
|
||||
.xd .t2 .u6 .sc .lr .tab{position:relative;font-size:11px;height:23px;_line-height:18px;padding:0 4px;border:1px solid #d0d0d0;background:#f5f5f5;z-index:10}
|
||||
.xd .t2 .u6 .sc .lr .active .tab{border-bottom-color:#fff;background:#fff}
|
||||
.xd .t2 .u6 .sc .lr .li ul{display:none;position:absolute;left:10px;top:32px;width:400px;height:171px;border:1px solid #d0d0d0;background-position:0 -80px;z-index:1;*zoom:1}
|
||||
.xd .t2 .u6 .sc .lr .li ul:after{content:"";display:block;clear:both}
|
||||
.xd .t2 .u6 .sc .lr .active ul{display:block}
|
||||
.xd .t2 .u6 .sc .lr .li li{position:relative;top:-1px;float:left;margin:0 -1px -1px 0}
|
||||
.xd .t2 .u6 .sc .lr .li li button{width:21px;height:20px;overflow:hidden}
|
||||
.xd .t2 .u6 .sc .lr .li li:hover button{border:1px solid #666}
|
||||
.xd .t2 .u6 .sc .lr fieldset{position:absolute;top:212px;left:10px}
|
||||
.xd .t2 .u6 .sc .lr .itx{width:296px;padding-right:100px;background:#fff;_margin:-1px 0}
|
||||
.xd .t2 .u6 .sc .lr .btnArea{position:absolute;top:0;right:0}
|
||||
.xd .t2 .u6 .sc .lr .btn{float:left;margin:0 0 0 -1px;display:inline}
|
||||
/* Layer - u6 (te) */
|
||||
.xd .t2 .u6 .te .lr{left:auto;right:-1px;width:280px}
|
||||
.xd .t2 .u6 .te .lr fieldset{position:relative;padding:0 0 10px 0}
|
||||
.xd .t2 .u6 .te .lr legend{font-size:12px;font-weight:bold;margin:0;padding:10px 0 0 0;display:inline;line-height:normal;width:auto;height:auto;position:static}
|
||||
.xd .t2 .u6 .te .lr .pv{border-bottom:1px solid #ddd}
|
||||
.xd .t2 .u6 .te .lr .pv legend{padding:0}
|
||||
.xd .t2 .u6 .te .lr .pv .xdcs{background:#fff;line-height:1.5;margin:0 -10px;padding:1px 10px;box-shadow:inset 0 0 3px #999;-moz-box-shadow:inset 0 0 3px #999;-webkit-box-shadow:inset 0 0 3px #999}
|
||||
.xd .t2 .u6 .te .lr .cn{border-bottom:1px solid #ddd}
|
||||
.xd .t2 .u6 .te .lr .cn .liow label{top:7px}
|
||||
.xd .t2 .u6 .te .lr .cn .itx{width:215px;padding:5px 60px 5px 4px}
|
||||
.xd .t2 .u6 .te .lr .cn ul{position:absolute;z-index:2;width:51px;top:2px;right:2px;*right:1px;font-size:0;*zoom:1}
|
||||
.xd .t2 .u6 .te .lr .cn ul:after{content:"";display:block;clear:both}
|
||||
.xd .t2 .u6 .te .lr .cn li{float:left;margin:0 0 1px 1px;display:inline}
|
||||
.xd .t2 .u6 .te .lr .cn li button{width:16px;height:11px;overflow:hidden;text-align:center;background-color:#eee}
|
||||
.xd .t2 .u6 .te .lr .cn li.selected button{background-color:#ccc}
|
||||
.xd .t2 .u6 .te .lr .cn li.tl button{background-position:-360px -255px}
|
||||
.xd .t2 .u6 .te .lr .cn li.tc button{background-position:-382px -255px}
|
||||
.xd .t2 .u6 .te .lr .cn li.tr button{background-position:-404px -255px}
|
||||
.xd .t2 .u6 .te .lr .cn li.bl button{background-position:-360px -264px}
|
||||
.xd .t2 .u6 .te .lr .cn li.bc button{background-position:-382px -264px}
|
||||
.xd .t2 .u6 .te .lr .cn li.br button{background-position:-404px -264px}
|
||||
.xd .t2 .u6 .te .lr .th{border-bottom:1px solid #ddd}
|
||||
.xd .t2 .u6 .te .lr .th ul{*zoom:1}
|
||||
.xd .t2 .u6 .te .lr .th ul:after{content:"";display:block;clear:both}
|
||||
.xd .t2 .u6 .te .lr .th li{float:left}
|
||||
.xd .t2 .u6 .te .lr .th li button{font-size:12px;width:70px;height:55px}
|
||||
.xd .t2 .u6 .te .lr .th li.selected{background-color:#ddd}
|
||||
.xd .t2 .u6 .te .lr .th li.no button{background-position:-283px -275px}
|
||||
.xd .t2 .u6 .te .lr .th li.lt button{background-position:-433px -275px}
|
||||
.xd .t2 .u6 .te .lr .th li.tp button{background-position:-283px -335px}
|
||||
.xd .t2 .u6 .te .lr .th li.bh button{background-position:-433px -335px}
|
||||
.xd .t2 .u6 .te .lr .th li span{display:inline-block;padding-top:26px}
|
||||
.xd .t2 .u6 .te .lr .wh{border-bottom:1px solid #ddd}
|
||||
.xd .t2 .u6 .te .lr .wh table{border:0;width:100%}
|
||||
.xd .t2 .u6 .te .lr .wh th{border:0;text-align:right;padding:0;white-space:nowrap;font-weight:normal}
|
||||
.xd .t2 .u6 .te .lr .wh td{border:0;padding:0 0 0 10px;border-spacing:0}
|
||||
.xd .t2 .u6 .te .lr .wh td button{font-size:12px;width:23px;height:21px;color:#666}
|
||||
.xd .t2 .u6 .te .lr .wh td button.selected{border:1px solid #ccc;background-color:#767676;color:#fff;font-weight:bold}
|
||||
.xd .t2 .u6 .te .lr .wh .itx{width:60px;*margin-right:4px;background-color:#fff}
|
||||
.xd .t2 .u6 .te .lr .btnArea{position:relative;text-align:right;white-space:nowrap;padding:10px 0 0 0}
|
||||
.xd .t2 .u6 .te .lr .btnArea .btn{*margin-left:4px}
|
||||
/* Layer - u6 (fr) */
|
||||
.xd .t2 .u6 .fr .lr{left:auto;right:-1px}
|
||||
.xd .t2 .u6 .fr .lr fieldset{position:relative}
|
||||
.xd .t2 .u6 .fr .lr legend{font-size:12px;font-weight:bold;margin:0;display:inline;line-height:normal;width:auto;height:auto;position:static}
|
||||
.xd .t2 .u6 .fr .lr .itx{width:120px;padding-right:70px}
|
||||
.xd .t2 .u6 .fr .lr .find{border-bottom:1px solid #ddd;padding:0 0 10px 0}
|
||||
.xd .t2 .u6 .fr .lr .find .btn{position:absolute;top:0;right:0;z-index:3}
|
||||
.xd .t2 .u6 .fr .lr .replace legend{padding:10px 0 0 0}
|
||||
.xd .t2 .u6 .fr .lr .replace .liow{margin:0 0 2px 0}
|
||||
.xd .t2 .u6 .fr .lr .replace .liow .btn{position:absolute;top:0;right:0;z-index:3}
|
||||
.xd .t2 .u6 .fr .lr .frAll{width:196px;margin:5px 0 0 0}
|
||||
/* Edit */
|
||||
.xd .edit{height:400px;overflow:auto;position:relative;z-index:2;*zoom:1;background:#fff;box-shadow:inset 0 0 3px #999;-moz-box-shadow:inset 0 0 3px #999;-webkit-box-shadow:inset 0 0 3px #999}
|
||||
.xd .edit .xdcs{position:relative;overflow:hidden !important;padding:20px 25px;cursor:text;outline:none}
|
||||
.xd .edit .xdsc{border:0;padding:20px 25px;overflow:auto;background:transparent;font:12px "Courier New", Courier, monospace}
|
||||
/* XD Layer Window */
|
||||
.xdlw{display:none;position:absolute;top:0;left:0;z-index:1000;color:#000;overflow:visible;width:100%;height:100%}
|
||||
.xdlw img{border:0}
|
||||
.xdlw .iHead{background-position:0 -1140px;background-repeat:repeat-x;border-bottom:1px solid #ccc;font-size:12px;padding:10px 0;*zoom:1;cursor:move;overflow:hidden}
|
||||
.xdlw .iHead:after{content:"";display:block;clear:both}
|
||||
.xdlw .iHead h2{float:left;_display:inline;margin:0 0 0 20px;padding:0 0 0 20px;background-position:0 -257px;font-size:12px;height:16px;line-height:16px}
|
||||
.xdlw .iHead h2 em{font-weight:normal;font-style:normal;color:#ccc}
|
||||
.xdlw .iHead h2 strong{color:#f60}
|
||||
.xdlw .iHead .btnArea{margin:0 20px;*zoom:1}
|
||||
.xdlw .iHead .btnArea.fr{float:right}
|
||||
.xdlw .iBody{position:relative;*zoom:1}
|
||||
.xdlw .iBody:after{content:"";display:block;clear:both}
|
||||
.xdlw .iFoot{padding:10px 0;border-top:1px solid #ccc;background-position:0 -1140px;background-repeat:repeat-x;cursor:move}
|
||||
.xdlw .iFoot:after{content:"";display:block;clear:both}
|
||||
.xdlw .iFoot .btnArea{margin:0 20px;*zoom:1}
|
||||
.xdlw .iFoot .btnArea:after{content:"";display:block;clear:both}
|
||||
.xdlw .iFoot .btnArea.fl{float:left}
|
||||
.xdlw .iFoot .btnArea.fr{float:right}
|
||||
/* XD Layer Window - AL(Attached List) */
|
||||
.xdal{display:none;width:780px;margin:100px auto 0 auto;background:#fff;border:3px solid #666;box-shadow:0 0 10px #999;-moz-box-shadow:0 0 10px #999;-webkit-box-shadow:0 0 10px #999}
|
||||
.xdal .iFoot .info{margin:0;float:left;font-size:11px;line-height:normal;padding:0 0 0 20px;color:#666}
|
||||
.xdal .label{line-height:30px;font-weight:bold;margin:0;padding:0 0 0 24px;font-size:12px}
|
||||
.xdal .img .label{background-position:0 -280px}
|
||||
.xdal .media .label{background-position:0 -310px}
|
||||
.xdal .file .label{background-position:0 -340px}
|
||||
.xdal .sn{position:relative;padding:10px 20px 15px 20px;width:219px;float:left;border-left:1px solid #ddd}
|
||||
.xdal .sn .nofile{display:none;padding:1em 0;margin:0;color:#767676;border-top:1px dotted #ccc}
|
||||
.xdal .sn ul{height:290px;margin:0;padding:0;*zoom:1;overflow:auto;overflow-x:hidden;border-top:1px dotted #ccc}
|
||||
.xdal .sn ul:after{content:"";display:block;clear:both}
|
||||
.xdal .sn li{position:relative;top:-1px;list-style:none;vertical-align:top;margin:0;padding:8px 0;border-top:1px dotted #ccc;color:#666}
|
||||
.xdal .sn .ob{position:relative;text-decoration:none;white-space:nowrap;font-size:0;width:60px;height:60px;overflow:hidden;margin:0 0 5px 0;border:1px solid #ddd;text-align:center;vertical-align:top;line-height:58px;background-color:#fff}
|
||||
.xdal .sn .ob img{vertical-align:middle}
|
||||
.xdal .sn .ctr{position:absolute;top:8px;width:30px;height:30px;font-size:11px;white-space:nowrap;color:#666}
|
||||
.xdal .sn .ins{right:35px;background-position:-510px -250px}
|
||||
.xdal .sn .del{right:5px;background-position:-540px -250px}
|
||||
.xdal .sn .task{margin:0 10px 0 0;padding:8px 0 0 0;border-top:1px dotted #ccc}
|
||||
.xdal .sn .task button{padding:0 3px;margin:0 0 2px 0;height:21px;font-size:11px;border:1px solid #b5b5b5}
|
||||
.xdal .sn .task .all{padding-left:15px;background-position:-583px -257px}
|
||||
.xdal .sn .progress{display:none;width:40px;background:#ddd}
|
||||
.xdal .sn .progress .bar{display:block;background:#23cb24;height:6px}
|
||||
.xdal .sn .uploading .progress{display:inline-block}
|
||||
.xdal .none .task{display:none}
|
||||
.xdal .none .nofile{display:block}
|
||||
.xdal .file .ob,
|
||||
.xdal .media .ob{text-indent:-900px}
|
||||
.xdal .file .uploading .ob{text-indent:0;background-image:none}
|
||||
.xdal .file .pdf{background-position:-20px -420px}
|
||||
.xdal .file .doc,
|
||||
.xdal .file .docx{background-position:-120px -420px}
|
||||
.xdal .file .hwp{background-position:-220px -420px}
|
||||
.xdal .file .ppt,
|
||||
.xdal .file .pptx{background-position:-320px -420px}
|
||||
.xdal .file .pps{background-position:-420px -420px}
|
||||
.xdal .file .txt{background-position:-520px -420px}
|
||||
.xdal .file .rtf{background-position:-20px -520px}
|
||||
.xdal .file .xls,
|
||||
.xdal .file .csv,
|
||||
.xdal .file .xlsx{background-position:-120px -520px}
|
||||
.xdal .file .png{background-position:-220px -520px}
|
||||
.xdal .file .jpg{background-position:-320px -520px}
|
||||
.xdal .file .gif{background-position:-420px -520px}
|
||||
.xdal .file .bmp{background-position:-520px -520px}
|
||||
.xdal .file .tif{background-position:-20px -620px}
|
||||
.xdal .file .raw{background-position:-120px -620px}
|
||||
.xdal .media .avi{background-position:-220px -620px}
|
||||
.xdal .media .wmv{background-position:-320px -620px}
|
||||
.xdal .media .mov{background-position:-420px -620px}
|
||||
.xdal .media .mpg{background-position:-520px -620px}
|
||||
.xdal .media .flv{background-position:-20px -720px}
|
||||
.xdal .media .divx{background-position:-120px -720px}
|
||||
.xdal .file .mp3{background-position:-220px -720px}
|
||||
.xdal .file .wma{background-position:-320px -720px}
|
||||
.xdal .file .wav{background-position:-420px -720px}
|
||||
.xdal .file .aac{background-position:-520px -720px}
|
||||
.xdal .file .flac{background-position:-20px -820px}
|
||||
.xdal .file .psd{background-position:-120px -820px}
|
||||
.xdal .file .ai{background-position:-220px -820px}
|
||||
.xdal .file .svg{background-position:-320px -820px}
|
||||
.xdal .file .xml{background-position:-420px -820px}
|
||||
.xdal .file .html{background-position:-520px -820px}
|
||||
.xdal .file .css{background-position:-20px -920px}
|
||||
.xdal .file .js{background-position:-120px -920px}
|
||||
.xdal .file .iso{background-position:-220px -920px}
|
||||
.xdal .file .zip,
|
||||
.xdal .file .tar,
|
||||
.xdal .file .gz,
|
||||
.xdal .file .alz,
|
||||
.xdal .file .rar{background-position:-320px -920px}
|
||||
.xdal .file .etc{background-position:-420px -920px}
|
||||
/* XDCS = Xpress eDitor Content Style */
|
||||
.xdcs{font-size:12px;line-height:1.5;overflow:hidden !important;*zoom:1}
|
||||
.xdcs .h1{font-size:24px;margin:1em 0}
|
||||
.xdcs .h2{font-size:20px;margin:1em 0}
|
||||
.xdcs .h3{font-size:18px;margin:1em 0}
|
||||
.xdcs .h4{font-size:16px;margin:1em 0}
|
||||
.xdcs .h5{font-size:14px;margin:1em 0}
|
||||
.xdcs .h6{font-size:12px;margin:1em 0}
|
||||
.xdcs .bq{border-left:3px solid #ccc;padding-left:1em;margin:1em 0}
|
||||
.xdcs .bx{border:1px dotted #999;margin:1em 0;padding:0 2em;background:#fafafa}
|
||||
.xdcs .ts,
|
||||
.xdcs .ts th,
|
||||
.xdcs .ts td{border:1px solid #bbb}
|
||||
.xdcs .ts caption{font-weight:bold}
|
||||
.xdcs .ts th,
|
||||
.xdcs .ts td{padding:2px 5px}
|
||||
.xdcs .ts{border-collapse:collapse;margin:1em 0}
|
||||
.xdcs .ts th{text-align:left;background-color:#fafafa}
|
||||
.xdcs .ts td{text-align:left}
|
||||
.xdcs .toc{margin:1em 0;border:1px solid #ddd;background:#fafafa}
|
||||
.xdcs .toc ul ul{padding-left:1em;margin:0}
|
||||
BIN
modules/editor/skins/xeed/xd.gif
Normal file
BIN
modules/editor/skins/xeed/xd.gif
Normal file
Binary file not shown.
|
After Width: | Height: | Size: 41 KiB |
|
|
@ -14,11 +14,11 @@
|
|||
|
||||
// editor_sequence값에 해당하는 textarea object를 return
|
||||
function editorGetTextArea(editor_sequence) {
|
||||
return xGetElementById( 'editor_textarea_' + editor_sequence );
|
||||
return jQuery('#editor_textarea_' + editor_sequence)[0];
|
||||
}
|
||||
|
||||
function editorGetPreviewArea(editor_sequence) {
|
||||
return xGetElementById( 'editor_preview_' + editor_sequence );
|
||||
return jQuery( '#editor_preview_' + editor_sequence )[0];
|
||||
}
|
||||
|
||||
// editor_sequence에 해당하는 form문 구함
|
||||
|
|
@ -42,25 +42,23 @@ function editorGetContent_xe(editor_sequence) {
|
|||
} else {
|
||||
var iframe_obj = editorGetIFrame(editor_sequence);
|
||||
if(!iframe_obj) return "";
|
||||
html = xInnerHtml(iframe_obj.contentWindow.document.body).replace(/^<br([^>]*)>$/i,'');
|
||||
html = jQuery(iframe_obj.contentWindow.document.body).html().replace(/^<br([^>]*)>$/i,'');
|
||||
}
|
||||
return html;
|
||||
}
|
||||
|
||||
// 에디터 내의 선택된 부분의 NODE를 return
|
||||
function editorGetSelectedNode(editor_sequence) {
|
||||
var iframe_obj = editorGetIFrame(editor_sequence);
|
||||
if(xIE4Up) {
|
||||
var range = iframe_obj.contentWindow.document.selection.createRange();
|
||||
var div = xCreateElement('div');
|
||||
xInnerHtml(div, range.htmlText);
|
||||
var node = div.firstChild;
|
||||
return node;
|
||||
var iframe_obj = editorGetIFrame(editor_sequence), w, range;
|
||||
|
||||
w = iframe_obj.contentWindow;
|
||||
|
||||
if(w.document.selection) {
|
||||
range = w.document.selection.createRange();
|
||||
return jQuery('<div />').html(range.htmlText)[0].firstChild;
|
||||
} else {
|
||||
var range = iframe_obj.contentWindow.getSelection().getRangeAt(0);
|
||||
var node = xCreateElement('div');
|
||||
node.appendChild(range.cloneContents());
|
||||
return node.firstChild;
|
||||
range = w.getSelection().getRangeAt(0);
|
||||
return jQuery('<div />').append(range.cloneContents())[0].firstChild;
|
||||
}
|
||||
}
|
||||
|
||||
|
|
@ -76,8 +74,7 @@ function editorStart(editor_sequence, primary_key, content_key, editor_height, f
|
|||
// iframe obj를 찾음
|
||||
var iframe_obj = editorGetIFrame(editor_sequence);
|
||||
if(!iframe_obj) return;
|
||||
xWidth(iframe_obj.parentNode, '100%');
|
||||
iframe_obj.style.width = '100%';
|
||||
jQuery(iframe_obj).css('width', '100%'),parent().css('width', '100%');
|
||||
|
||||
// 현 에디터를 감싸고 있는 form문을 찾음
|
||||
var fo_obj = editorGetForm(editor_sequence);
|
||||
|
|
@ -525,14 +522,7 @@ function closeEditorInfo(editor_sequence) {
|
|||
|
||||
|
||||
function showEditorHelp(e,editor_sequence){
|
||||
var oid = 'helpList_'+editor_sequence;
|
||||
|
||||
if(xGetElementById(oid).className =='helpList'){
|
||||
|
||||
xGetElementById(oid).className = 'helpList open';
|
||||
}else{
|
||||
xGetElementById(oid).className = 'helpList';
|
||||
}
|
||||
jQuery('#helpList_'+editor_sequence).toggleClass('open');
|
||||
}
|
||||
|
||||
function showEditorExtension(evt,editor_sequence){
|
||||
|
|
|
|||
|
|
@ -19,7 +19,11 @@ function editorGetContent(editor_sequence) {
|
|||
function editorFocus(editor_sequence) {
|
||||
try {
|
||||
var iframe_obj = editorGetIFrame(editor_sequence);
|
||||
iframe_obj.contentWindow.focus();
|
||||
if (jQuery.isFunction(iframe_obj.setFocus)) {
|
||||
iframe_obj.setFocus();
|
||||
} else {
|
||||
iframe_obj.contentWindow.focus();
|
||||
}
|
||||
} catch(e){}
|
||||
}
|
||||
|
||||
|
|
@ -27,20 +31,27 @@ function editorFocus(editor_sequence) {
|
|||
* 자동 저장 기능
|
||||
**/
|
||||
// 자동 저장 활성화 시키는 함수 (50초마다 자동저장)
|
||||
function editorEnableAutoSave(fo_obj, editor_sequence) {
|
||||
var title = fo_obj.title.value;
|
||||
function editorEnableAutoSave(fo_obj, editor_sequence, callback) {
|
||||
var title = fo_obj.title.value;
|
||||
var content = editorRelKeys[editor_sequence]['content'].value;
|
||||
|
||||
editorAutoSaveObj = {"fo_obj":fo_obj, "editor_sequence":editor_sequence, "title":title, "content":content, locked:false};
|
||||
setTimeout('_editorAutoSave()', 50000);
|
||||
|
||||
clearTimeout(editorEnableAutoSave.timer);
|
||||
editorEnableAutoSave.timer = setTimeout(function(){_editorAutoSave(false, callback)}, 50000);
|
||||
}
|
||||
editorEnableAutoSave.timer = null;
|
||||
|
||||
// ajax를 이용하여 editor.procEditorSaveDoc 호출하여 자동 저장시킴 exe는 강제 코드
|
||||
function _editorAutoSave(exe) {
|
||||
function _editorAutoSave(exe, callback) {
|
||||
var fo_obj = editorAutoSaveObj.fo_obj;
|
||||
var editor_sequence = editorAutoSaveObj.editor_sequence;
|
||||
|
||||
// 50초마다 동기화를 시킴 강제 실행은 제외
|
||||
if(!exe) setTimeout('_editorAutoSave()', 50000);
|
||||
if(!exe) {
|
||||
clearTimeout(editorEnableAutoSave.timer);
|
||||
editorEnableAutoSave.timer = setTimeout(function(){ _editorAutoSave(exe, callback) }, 50000);
|
||||
}
|
||||
|
||||
// 현재 자동저장중이면 중지
|
||||
if(editorAutoSaveObj.locked == true) return;
|
||||
|
|
@ -58,28 +69,37 @@ function _editorAutoSave(exe) {
|
|||
|
||||
// 내용이 이전에 저장하였던 것과 다르면 자동 저장을 함 또는 강제 저장 설정시 자동 저장
|
||||
if(title != editorAutoSaveObj.title || content != editorAutoSaveObj.content || exe) {
|
||||
var params = new Array();
|
||||
var params, oDate = new Date();
|
||||
|
||||
params["title"] = title;
|
||||
params["content"] = content;
|
||||
params["mid"] = current_mid;
|
||||
params["document_srl"] = editorRelKeys[editor_sequence]['primary'].value;
|
||||
params = {
|
||||
title : title,
|
||||
content : content,
|
||||
mid : current_mid,
|
||||
document_srl : editorRelKeys[editor_sequence]['primary'].value
|
||||
};
|
||||
|
||||
editorAutoSaveObj.title = title;
|
||||
editorAutoSaveObj.title = title;
|
||||
editorAutoSaveObj.content = content;
|
||||
|
||||
var obj = jQuery("#editor_autosaved_message_"+editor_sequence);
|
||||
var oDate = new Date();
|
||||
|
||||
// 메시지 만들어서 보여줌
|
||||
obj.text(oDate.getHours()+':'+oDate.getMinutes()+' '+auto_saved_msg).show(300);
|
||||
jQuery("#editor_autosaved_message_"+editor_sequence).text(oDate.getHours()+':'+oDate.getMinutes()+' '+auto_saved_msg).show(300);
|
||||
|
||||
// 현재 자동저장중임을 설정
|
||||
editorAutoSaveObj.locked = true;
|
||||
|
||||
// 서버 호출 (서버와 교신중이라는 메세지를 보이지 않도록 함)
|
||||
show_waiting_message = false;
|
||||
exec_xml("editor","procEditorSaveDoc", params, function() { editorAutoSaveObj.locked = false; } );
|
||||
exec_xml(
|
||||
"editor",
|
||||
"procEditorSaveDoc",
|
||||
params,
|
||||
function() {
|
||||
var arg = jQuery.extend({}, params, {auto_saved_msg:auto_saved_msg});
|
||||
|
||||
editorAutoSaveObj.locked = false;
|
||||
if(jQuery.isFunction(callback)) callback(arg);
|
||||
}
|
||||
);
|
||||
show_waiting_message = true;
|
||||
}
|
||||
}
|
||||
|
|
@ -98,7 +118,7 @@ function editorRemoveSavedDoc() {
|
|||
// editor_sequence값에 해당하는 iframe의 object를 return
|
||||
function editorGetIFrame(editor_sequence) {
|
||||
if(editorRelKeys != undefined && editorRelKeys[editor_sequence] != undefined && editorRelKeys[editor_sequence]['editor'] != undefined)
|
||||
return editorRelKeys[editor_sequence]['editor'].getFrame();
|
||||
return editorRelKeys[editor_sequence]['editor'].getFrame(editor_sequence);
|
||||
return document.getElementById( 'editor_iframe_'+ editor_sequence );
|
||||
}
|
||||
function editorGetTextarea(editor_sequence) {
|
||||
|
|
@ -136,9 +156,9 @@ function editorEventCheck(e) {
|
|||
var info = target_id.split('_');
|
||||
if(info[0]!="component") return;
|
||||
var editor_sequence = info[1];
|
||||
var component_name = target_id.replace(/^component_([0-9]+)_/,'');
|
||||
if(!editor_sequence || !component_name) return;
|
||||
var component_name = target_id.replace(/^component_[0-9]+_/,'');
|
||||
|
||||
if(!editor_sequence || !component_name) return;
|
||||
if(editorMode[editor_sequence]=='html') return;
|
||||
|
||||
switch(component_name) {
|
||||
|
|
@ -166,13 +186,13 @@ function editorEventCheck(e) {
|
|||
case 'RemoveFormat' :
|
||||
case 'Subscript' :
|
||||
case 'Superscript' :
|
||||
editorDo(component_name, '', editor_sequence);
|
||||
editorDo(component_name, '', editor_sequence);
|
||||
break;
|
||||
|
||||
// 추가 컴포넌트의 경우 서버에 요청을 시도
|
||||
default :
|
||||
openComponent(component_name, editor_sequence);
|
||||
break;
|
||||
openComponent(component_name, editor_sequence);
|
||||
return false;
|
||||
}
|
||||
|
||||
return;
|
||||
|
|
@ -273,21 +293,21 @@ function editorReplaceHTML(iframe_obj, html) {
|
|||
html = html.replace(hrefPathRegx, 'href="'+request_uri+'?$3"');
|
||||
|
||||
// 에디터가 활성화 되어 있는지 확인 후 비활성화시 활성화
|
||||
var editor_sequence = iframe_obj.contentWindow.document.body.getAttribute("editor_sequence");
|
||||
var editor_sequence = iframe_obj.editor_sequence || iframe_obj.contentWindow.document.body.getAttribute("editor_sequence");
|
||||
|
||||
// iframe 에디터에 포커스를 둠
|
||||
iframe_obj.contentWindow.focus();
|
||||
try { iframe_obj.contentWindow.focus(); }catch(e){};
|
||||
|
||||
if(xIE4Up) {
|
||||
if (jQuery.isFunction(iframe_obj.replaceHTML)) {
|
||||
iframe_obj.replaceHTML(html);
|
||||
} else if(xIE4Up) {
|
||||
var range = iframe_obj.contentWindow.document.selection.createRange();
|
||||
if(range.pasteHTML) {
|
||||
range.pasteHTML(html);
|
||||
} else if(editorPrevNode) {
|
||||
editorPrevNode.outerHTML = html;
|
||||
}
|
||||
|
||||
} else {
|
||||
|
||||
try {
|
||||
if(iframe_obj.contentWindow.getSelection().focusNode.tagName == "HTML") {
|
||||
var range = iframe_obj.contentDocument.createRange();
|
||||
|
|
@ -302,14 +322,15 @@ function editorReplaceHTML(iframe_obj, html) {
|
|||
} catch(e) {
|
||||
xInnerHtml(iframe_obj.contentWindow.document.body, html+xInnerHtml(iframe_obj.contentWindow.document.body));
|
||||
}
|
||||
|
||||
}
|
||||
}
|
||||
|
||||
// 에디터 내의 선택된 부분의 html 코드를 return
|
||||
function editorGetSelectedHtml(editor_sequence) {
|
||||
var iframe_obj = editorGetIFrame(editor_sequence);
|
||||
if(xIE4Up) {
|
||||
if (jQuery.isFunction(iframe_obj.getSelectedHTML)) {
|
||||
return iframe_obj.getSelectedHTML();
|
||||
} else if(xIE4Up) {
|
||||
var range = iframe_obj.contentWindow.document.selection.createRange();
|
||||
var html = range.htmlText;
|
||||
return html;
|
||||
|
|
|
|||
|
|
@ -21,6 +21,11 @@
|
|||
* sync이상없도록 함
|
||||
**/
|
||||
function procFileUpload() {
|
||||
$file_info = Context::get('Filedata');
|
||||
|
||||
// 정상적으로 업로드된 파일이 아니면 오류 출력
|
||||
if(!is_uploaded_file($file_info['tmp_name'])) exit();
|
||||
|
||||
// 기본적으로 필요한 변수 설정
|
||||
$oFileModel = &getModel('file');
|
||||
$editor_sequence = Context::get('editor_sequence');
|
||||
|
|
@ -36,10 +41,6 @@
|
|||
// 세션정보에도 정의되지 않았다면 새로 생성
|
||||
if(!$upload_target_srl) $_SESSION['upload_info'][$editor_sequence]->upload_target_srl = $upload_target_srl = getNextSequence();
|
||||
|
||||
$file_info = Context::get('Filedata');
|
||||
|
||||
// 정상적으로 업로드된 파일이 아니면 오류 출력
|
||||
if(!is_uploaded_file($file_info['tmp_name'])) exit();
|
||||
|
||||
return $this->insertFile($file_info, $module_srl, $upload_target_srl);
|
||||
}
|
||||
|
|
@ -403,10 +404,13 @@
|
|||
$file_info['name'] = str_replace(array('<','>'),array('%3C','%3E'),$file_info['name']);
|
||||
|
||||
$path = sprintf("./files/attach/images/%s/%s", $module_srl,getNumberingPath($upload_target_srl,3));
|
||||
$filename = $path.$file_info['name'];
|
||||
|
||||
// 파일 이름에서 특수문자를 _로 변환
|
||||
$_filename = preg_replace('/[#$&*?+%"\']/', '_', $file_info['name']);
|
||||
$filename = $path.$_filename;
|
||||
$idx = 1;
|
||||
while(file_exists($filename)) {
|
||||
$filename = $path.preg_replace('/\.([a-z0-9]+)$/i','_'.$idx.'.$1',$file_info['name']);
|
||||
$filename = $path.preg_replace('/\.([a-z0-9]+)$/i','_'.$idx.'.$1',$_filename);
|
||||
$idx++;
|
||||
}
|
||||
$direct_download = 'Y';
|
||||
|
|
|
|||
|
|
@ -51,8 +51,8 @@
|
|||
'regdate' => '登録日',
|
||||
'ipaddress' => 'IPアドレス',
|
||||
);
|
||||
$lang->msg_not_allowed_outlink = 'It is not allowed to download files not from this site.';
|
||||
$lang->msg_not_permitted_create = '파일 또는 디렉토리를 생성할 수 없습니다.';
|
||||
$lang->msg_file_upload_error = '파일 업로드 중 에러가 발생하였습니다.';
|
||||
$lang->msg_not_allowed_outlink = '外部リンクからのダウンロードは許可されていません。';
|
||||
$lang->msg_not_permitted_create = 'ファイルまたはディレクトリを生成できません。';
|
||||
$lang->msg_file_upload_error = 'ファイルアップロードに失敗しました。';
|
||||
|
||||
?>
|
||||
|
|
|
|||
|
|
@ -51,9 +51,6 @@
|
|||
$use_sso = Context::get('use_sso');
|
||||
if($use_sso !='Y') $use_sso = 'N';
|
||||
|
||||
$use_optimizer = Context::get('use_optimizer');
|
||||
if($use_optimizer!='Y') $use_optimizer = 'N';
|
||||
|
||||
$time_zone = Context::get('time_zone');
|
||||
|
||||
$qmail_compatibility = Context::get('qmail_compatibility');
|
||||
|
|
@ -79,7 +76,6 @@
|
|||
$db_info->use_db_session = $use_db_session;
|
||||
$db_info->use_rewrite = $use_rewrite;
|
||||
$db_info->use_sso = $use_sso;
|
||||
$db_info->use_optimizer = $use_optimizer;
|
||||
$db_info->use_ssl = $use_ssl;
|
||||
$db_info->use_mobile_view = $use_mobile_view;
|
||||
if($http_port) $db_info->http_port = (int) $http_port;
|
||||
|
|
|
|||
|
|
@ -503,18 +503,18 @@ EndOfLicense;
|
|||
$lang->cmd_ignore = 'Ignore';
|
||||
|
||||
$lang->db_desc = array(
|
||||
'mysql' => 'Using mysql*() function to use mysql DB.<br />Transaction is disabled because DB file is created by myisam.',
|
||||
'mysqli' => 'Using mysqli*() function to use mysql DB.',
|
||||
'mysql_innodb' => 'Using innodb to use mysql DB.<br />Transaction is enabled for innodb',
|
||||
'sqlite2' => 'Supporting sqlite2 which saves the data into the file.<br />When installing, DB file should be created at unreachable place from web.<br />(Never got tested on stabilization)',
|
||||
'sqlite3_pdo' => 'Suppots sqlite3 by PHP\'s PDO.<br />When installing, DB file should be created at unreachable place from web.',
|
||||
'cubrid' => 'Use CUBRID DB. <a href="http://www.xpressengine.com/?mid=manual&pageid=2880556" onclick="window.open(this.href);return false;" class="manual">manual</a>',
|
||||
'mssql' => 'Use MSSQL DB',
|
||||
'postgresql' => 'Use PostgreSql DB.',
|
||||
'firebird' => 'Use firebird DB.',
|
||||
'mysql' => 'Use MySQL as database with mysql*() functions in php.<br />Transactions will not be processed since DB file is created in myisam.',
|
||||
'mysqli' => 'Use MySQL as database with mysqli*() functions in php.<br />Transactions will not be processed since DB file is created in myisam',
|
||||
'mysql_innodb' => 'Use MySQL as database with innodb.<br />Transactions will be processed with innodb',
|
||||
'sqlite2' => 'Use sqlite2 as database which saves the data as files.<br />DB file <b>must not be</b> accessible from the web.<br />(Never been tested for stabilization)',
|
||||
'sqlite3_pdo' => 'Use sqlite3 as database with supports from PDO of php.<br />DB file <b>must not be</b> accessible from the web.',
|
||||
'cubrid' => 'Use CUBRID as database. See <a href="http://www.xpressengine.com/?mid=manual&pageid=2880556" onclick="window.open(this.href);return false;" class="manual">manual</a> for more info',
|
||||
'mssql' => 'Use MSSQL as database',
|
||||
'postgresql' => 'Use PostgreSql as database.',
|
||||
'firebird' => 'Use Firebird as database.<br />You can create database with (create database "/path/dbname.fdb" page_size=8192 default character set UTF-8;)',
|
||||
);
|
||||
|
||||
$lang->form_title = 'Please input DB & Admin information';
|
||||
$lang->form_title = 'Database & Administrator Information';
|
||||
$lang->db_title = 'Please input DB information';
|
||||
$lang->db_type = 'DB Type';
|
||||
$lang->select_db_type = 'Please select the DB you want to use.';
|
||||
|
|
@ -523,8 +523,8 @@ EndOfLicense;
|
|||
$lang->db_userid = 'DB ID';
|
||||
$lang->db_password = 'DB Password';
|
||||
$lang->db_database = 'DB Database';
|
||||
$lang->db_database_file = 'DB Database file';
|
||||
$lang->db_table_prefix = 'Table header';
|
||||
$lang->db_database_file = 'DB Database File';
|
||||
$lang->db_table_prefix = 'Table Header';
|
||||
|
||||
$lang->admin_title = 'Administrator Info';
|
||||
|
||||
|
|
@ -532,8 +532,9 @@ EndOfLicense;
|
|||
$lang->use_optimizer = 'Enable Optimizer';
|
||||
$lang->about_optimizer = 'If optimizer is enabled, users can quickly access to this site, since multiple CSS / JS files are put together and compressed before transmission. <br /> Nevertheless, this optimization might be problematic according to CSS or JS. If you disable it, it would work properly though it would work slower.';
|
||||
$lang->use_rewrite = 'Rewrite Mod';
|
||||
$lang->use_sso = 'SSO';
|
||||
$lang->use_sso = 'Single Sign On';
|
||||
$lang->about_rewrite = "If web server provides rewrite mod, long URL such as http://blah/?document_srl=123 can be shortened like http://blah/123";
|
||||
$lang->about_sso = 'SSO will enable users to sign in just once for both default and virtual site. You will need this only if you are using virtual sites.';
|
||||
$lang->time_zone = 'Time Zone';
|
||||
$lang->about_time_zone = "If the server time and the time on your location don't accord each other, you can set the time as same as your location by using time zone ";
|
||||
$lang->qmail_compatibility = 'Enable Qmail';
|
||||
|
|
|
|||
|
|
@ -533,6 +533,7 @@ EndOfLicense;
|
|||
$lang->use_rewrite = 'Usar rewrite mod';
|
||||
$lang->use_sso = 'SSO';
|
||||
$lang->about_rewrite = "Si el servidor de la web soporte rewrite mod, URL largas como http://bla/?documento_srl=123 puede abreviarse como http://bla/123";
|
||||
$lang->about_sso = '사용자가 한 번만 로그인하면 기본 사이트와 가상 사이트에 동시에 로그인이 되는 기능입니다. 가상 사이트를 사용할 때만 필요합니다.';
|
||||
$lang->time_zone = 'La Hora por Zona';
|
||||
$lang->about_time_zone = "Si la hora del servidor y la hora de su ubicación es diferente, Usted puede elegir la hora por zona para corregir";
|
||||
$lang->qmail_compatibility = 'Compatible con Qmail';
|
||||
|
|
|
|||
|
|
@ -537,6 +537,7 @@ EndOfLicense;
|
|||
$lang->use_rewrite = 'Utiliser mode de récrire(rewrite mod)';
|
||||
$lang->use_sso = 'SSO';
|
||||
$lang->about_rewrite = "Si le serveur de web est capable d'utiliser le mode de récrire, URL longue comme http://murmure/?document_srl=123 peut être abrégé comme http://murmure/123";
|
||||
$lang->about_sso = '사용자가 한 번만 로그인하면 기본 사이트와 가상 사이트에 동시에 로그인이 되는 기능입니다. 가상 사이트를 사용할 때만 필요합니다.';
|
||||
$lang->time_zone = 'Fuseau horaire';
|
||||
$lang->about_time_zone = "Si l'heure de serveur et celle de votre emplacement ne s'accordent pas, vous pouvez remettre l'heure comme le même heure de votre lieu en configurant le fuseau horaire ";
|
||||
$lang->qmail_compatibility = 'Compatible avec Qmail';
|
||||
|
|
|
|||
|
|
@ -534,6 +534,7 @@ EndOfLicense;
|
|||
$lang->use_rewrite = 'リライト・モジュールを使用';
|
||||
$lang->use_sso = 'SSO';
|
||||
$lang->about_rewrite = 'Webサーバで「リライト・モジュール(mod_rewrite)」をサポートしている場合は、「http://アドレス/?document_srl=123」のようなアドレスを動的だけど「http://アドレス/123」のように静的なページに見せることが出来ます。';
|
||||
$lang->about_sso = 'ユーザが一度のログインで基本サイトと仮想サイトに同時にログインされる機能です。仮想サイトの機能を使用してない場合、設定する必要がありません。';
|
||||
$lang->time_zone = 'タイムゾーン';
|
||||
$lang->about_time_zone = 'サーバの設定時間とサービスしているローカル時間との差がある場合、タイムゾーンを指定して表示時間を合わせることが出来ます。';
|
||||
$lang->qmail_compatibility = 'Qmail 互換';
|
||||
|
|
|
|||
|
|
@ -533,9 +533,10 @@ EndOfLicense;
|
|||
$lang->env_title = '환경 설정';
|
||||
$lang->use_optimizer = 'Optimizer 사용';
|
||||
$lang->about_optimizer = 'Optimizer를 사용하면 다수의 CSS/JS파일을 통합/압축 전송하여 매우 빠르게 사이트 접속이 가능하게 합니다.<br />다만 CSS나 JS에 따라서 문제가 생길 수 있습니다. 이때는 Optimizer 비활성화 하시면 정상적인 동작은 가능합니다.';
|
||||
$lang->use_rewrite = 'rewrite mod 사용';
|
||||
$lang->use_sso = 'SSO 사용';
|
||||
$lang->about_rewrite = '웹서버에서 rewrite mod를 지원하면 http://주소/?document_srl=123 같이 복잡한 주소를 http://주소/123과 같이 간단하게 줄일 수 있습니다.';
|
||||
$lang->use_rewrite = '짧은 주소 사용';
|
||||
$lang->use_sso = '통합인증 사용';
|
||||
$lang->about_rewrite = '이 기능을 사용하면 http://주소/?document_srl=123과 같이 복잡한 주소를 http://주소/123과 같이 간단하게 줄일 수 있습니다. 이 기능을 사용하려면 웹 서버에서 rewrite_mod를 지원해야 합니다. 웹 서버에서 rewrite_mod를 지원하는지 여부는 서버 관리자에게 문의하세요.';
|
||||
$lang->about_sso = '사용자가 한 번만 로그인하면 기본 사이트와 가상 사이트에 동시에 로그인이 되는 기능입니다. 가상 사이트를 사용할 때만 필요합니다.';
|
||||
$lang->time_zone = '표준 시간대';
|
||||
$lang->about_time_zone = '서버의 설정시간과 사용하려는 장소의 시간이 차이가 날 경우 표준 시간대를 지정하시면 표시되는 시간을 지정된 곳의 시간으로 사용하실 수 있습니다.';
|
||||
$lang->qmail_compatibility = 'Qmail 호환';
|
||||
|
|
|
|||
|
|
@ -533,9 +533,10 @@ EndOfLicense;
|
|||
$lang->env_title = 'Конфигурация';
|
||||
$lang->use_optimizer = 'Включить оптимизатор';
|
||||
$lang->about_optimizer = 'Если оптимизатор включен, пользователи могут быстро использовать этот сайт, поскольку несколько CSS / JS файлов собраны вместе и сжаты до передачи. <br /> Тем не менее, эта оптимизация может быть проблематичной согласно CSS или JS. Если Вы выключите ее, движок будет работать правильно, хотя и медленее.';
|
||||
$lang->use_rewrite = 'Использовать модуль перезаписи (rewrite mod)';
|
||||
$lang->use_rewrite = 'Использовать<br /> модуль перезаписи<br />(rewrite mod)';
|
||||
$lang->use_sso = 'SSO';
|
||||
$lang->about_rewrite = "Если сервер предлагает rewrite mod, длинные URL такие как http://blah/?document_srl=123 могут быть сокращены до http://blah/123";
|
||||
$lang->about_sso = '사용자가 한 번만 로그인하면 기본 사이트와 가상 사이트에 동시에 로그인이 되는 기능입니다. 가상 사이트를 사용할 때만 필요합니다.';
|
||||
$lang->time_zone = 'Часовой пояс';
|
||||
$lang->about_time_zone = "Если серверное время и Ваше локальное время не совпадают, Вы можете установить такое же время, как Ваше локальное, используя часовой пояс";
|
||||
$lang->qmail_compatibility = 'Qmail 호환';
|
||||
|
|
|
|||
|
|
@ -538,6 +538,7 @@ EndOfLicense;
|
|||
$lang->use_rewrite = 'Mod Rewrite';
|
||||
$lang->use_sso = 'SSO';
|
||||
$lang->about_rewrite = "Nếu Host của bạn hỗ trợ Mod Rewrite, khi địa chỉ có dạng <b>http://blah/?document_srl=123</b> sẽ được rút ngắn thành <b>http://blah/123</b>";
|
||||
$lang->about_sso = '사용자가 한 번만 로그인하면 기본 사이트와 가상 사이트에 동시에 로그인이 되는 기능입니다. 가상 사이트를 사용할 때만 필요합니다.';
|
||||
$lang->time_zone = 'Múi giờ';
|
||||
$lang->about_time_zone = "Nếu thời gian của khu vực bạn không tự động cập nhật. Bạn có thể chọn thời gian để hiển thị cho Website.";
|
||||
$lang->qmail_compatibility = 'Mở Qmail';
|
||||
|
|
|
|||
|
|
@ -225,6 +225,7 @@ EndOfLicense;
|
|||
$lang->use_rewrite = '使用rewrite模块';
|
||||
$lang->use_sso = 'SSO';
|
||||
$lang->about_rewrite = '如服务器支持rewrite模块且选择此项,可以简化复杂的网址。<br />例如,http://域名/?document_srl=123简化为http://域名/123。';
|
||||
$lang->about_sso = '사용자가 한 번만 로그인하면 기본 사이트와 가상 사이트에 동시에 로그인이 되는 기능입니다. 가상 사이트를 사용할 때만 필요합니다.';
|
||||
$lang->time_zone = '时区';
|
||||
$lang->about_time_zone = '服务器时间和您所处的时间有差异时,可以设置时区来满足你所需要的时间显示。';
|
||||
$lang->qmail_compatibility = 'Qmail互换';
|
||||
|
|
|
|||
|
|
@ -469,7 +469,7 @@ DAMAGES.
|
|||
|
||||
EndOfLicense;
|
||||
|
||||
$lang->install_condition_title = '確認安裝時必須要具備的條件';
|
||||
$lang->install_condition_title = '確認安裝時必備的條件';
|
||||
|
||||
$lang->install_checklist_title = array(
|
||||
'php_version' => 'PHP版本',
|
||||
|
|
@ -531,14 +531,15 @@ EndOfLicense;
|
|||
|
||||
$lang->env_title = '環境設置';
|
||||
$lang->use_optimizer = 'Optimizer';
|
||||
$lang->about_optimizer = '使用Optimizer可以對大部分的『CSS/JS』檔案進行整合/壓縮傳送使之加快網站訪問速度。<br />只是有時會發生小小的問題。這時候請暫時不要使用 Optimizer。';
|
||||
$lang->about_optimizer = '使用 Optimizer 可對大部分的『CSS/JS』檔案進行整合/壓縮加快網站訪問速度。<br />只是有時會發生小小的問題,這時候請暫時不要使用 Optimizer 功能。';
|
||||
$lang->use_rewrite = 'Rewrite';
|
||||
$lang->use_sso = 'SSO';
|
||||
$lang->about_rewrite = '如主機支援 rewrite 模組並選擇此項,可以簡化複雜的網址。<br />例如,『http://域名/?document_srl=123』可簡化成『http://域名/123』。';
|
||||
$lang->use_sso = '單一登入';
|
||||
$lang->about_rewrite = '如果支援 rewrite 功能,可縮短冗長的網址。<br />例>『http://域名/?document_srl=123』縮短成『http://域名/123』。';
|
||||
$lang->about_sso = '此功能可讓用戶只需登入一次即可訪問多個網站。<br />使用虛擬網站,這將會是很重要的功能。';
|
||||
$lang->time_zone = '時區';
|
||||
$lang->about_time_zone = '主機時間和您所處的時間有差異時,可以設置時區來滿足你所需要的時間顯示。';
|
||||
$lang->qmail_compatibility = 'Qmail互換';
|
||||
$lang->about_qmail_compatibility = '支援無法識別 CRLF 為換行符的 Qmail 等MTA,也能發送電子郵件。';
|
||||
$lang->about_qmail_compatibility = '支援無法識別 CRLF 為換行符的 Qmail 等 MTA,也能發送電子郵件。';
|
||||
|
||||
$lang->about_database_file = 'Sqlite是保存資料於檔案中。資料庫的檔案位置應該放在 web 不能訪問的地方。<br/><span style="color:red">資料檔案應放在具有 707 權限的位置。</span>';
|
||||
|
||||
|
|
|
|||
|
|
@ -16,10 +16,16 @@
|
|||
* @brief 게시글 검색
|
||||
**/
|
||||
function getDocuments($target, $module_srls_list, $search_target, $search_keyword, $page=1, $list_count = 20) {
|
||||
if(is_array($module_srls_list)) $module_srls = implode(',',$module_srls_list);
|
||||
else $module_srls = $module_srls_list;
|
||||
if($target == 'exclude') $args->exclude_module_srl = $module_srls;
|
||||
else $args->module_srl = $module_srls;
|
||||
if(is_array($module_srls_list)) $module_srls_list = implode(',',$module_srls_list);
|
||||
|
||||
if($target == 'exclude') {
|
||||
$module_srls_list .= ',0'; // exclude 'trash'
|
||||
if ($module_srls_list{0} == ',') $module_srls_list = substr($module_srls_list, 1);
|
||||
$args->exclude_module_srl = $module_srls_list;
|
||||
} else {
|
||||
$args->module_srl = $module_srls_list;
|
||||
$args->exclude_module_srl = '0'; // exclude 'trash'
|
||||
}
|
||||
|
||||
$args->page = $page;
|
||||
$args->list_count = $list_count;
|
||||
|
|
@ -32,6 +38,7 @@
|
|||
|
||||
// 대상 문서들을 가져옴
|
||||
$oDocumentModel = &getModel('document');
|
||||
|
||||
return $oDocumentModel->getDocumentList($args);
|
||||
}
|
||||
|
||||
|
|
|
|||
|
|
@ -18,6 +18,7 @@
|
|||
<input type="hidden" name="mid" value="{$mid}" />
|
||||
<input type="hidden" name="act" value="IS" />
|
||||
<input type="hidden" name="where" value="{$where}" />
|
||||
<input type="hidden" name="search_target" value="title_content" />
|
||||
<input name="is_keyword" type="text" class="inputText" value="{htmlspecialchars($is_keyword)}"/>
|
||||
<span class="button large strong black"><input type="submit" value="{$lang->cmd_search}" /></span>
|
||||
</form>
|
||||
|
|
|
|||
|
|
@ -1,7 +1,6 @@
|
|||
<!--#include("header.html")-->
|
||||
|
||||
{@ $output = $search_result['document'] }
|
||||
{@ $search_target = 'title'; }
|
||||
<!--#include("document.html")-->
|
||||
<!--@if(count($output->data))-->
|
||||
<div class="isMore"><a href="{getUrl('where','document','page',1)}">more</a></div>
|
||||
|
|
|
|||
|
|
@ -17,15 +17,16 @@
|
|||
$lang->menu_count = 'Menus';
|
||||
$lang->downloaded_list = 'Download List';
|
||||
$lang->layout_preview_content = 'The content gets displayed here';
|
||||
$lang->not_apply_menu = 'Apply Layouts';
|
||||
$lang->not_apply_menu = 'Apply Layouts En Bloc';
|
||||
$lang->layout_management = 'Layout Management';
|
||||
|
||||
$lang->cmd_move_to_installed_list = "View created list";
|
||||
$lang->cmd_move_to_installed_list = "View Created Layouts";
|
||||
|
||||
$lang->about_downloaded_layouts = "List of downloaded layouts";
|
||||
$lang->about_title = 'Please input the title that is easy to verify when connecting to module';
|
||||
$lang->about_not_apply_menu = 'All connected module\'s layout will be changed by checking this option.';
|
||||
$lang->about_not_apply_menu = 'Layouts of all modules connected via menu will be changed en bloc by checking this option.';
|
||||
|
||||
$lang->about_layout = "Layout module helps you to create the site's layout easily.<br />By using layout setting and menu connection, website's completed shape will be displayed with various modules.<br />* Those layouts which are unabled to delete or modify are the blog or other module's layout. ";
|
||||
$lang->about_layout = "Layout module helps you to create the site's layout easily.<br />By using layout setting and menu connection, website's completed shape will be displayed with various modules.<br />* Layouts which you cannot delete are the default layouts of blogs or other moduels, thus you have to delete them from their setting pages. ";
|
||||
$lang->about_layout_code =
|
||||
"It will be applied to the service when you save the layout code after editing it.
|
||||
Please first preview your code and then save it.
|
||||
|
|
@ -33,9 +34,9 @@
|
|||
|
||||
$lang->layout_export = 'Export';
|
||||
$lang->layout_btn_export = 'Download My Layout';
|
||||
$lang->about_layout_export = 'Export currently editted layout.';
|
||||
$lang->about_layout_export = 'Export currently edited layout.';
|
||||
$lang->layout_import = 'Import';
|
||||
$lang->about_layout_import = 'Original layout will be deleted when you import. Please export current layout before importing.';
|
||||
$lang->about_layout_import = 'Previously modified layout will be deleted when you import a new one. Please export current layout for a backup before importing.';
|
||||
|
||||
$lang->layout_manager = array(
|
||||
0 => 'Layout Manager',
|
||||
|
|
|
|||
|
|
@ -18,6 +18,7 @@
|
|||
$lang->downloaded_list = 'Lista de la descarga';
|
||||
$lang->layout_preview_content = 'Los contenidos son mostrados aquí';
|
||||
$lang->not_apply_menu = 'Aplicar Diseños';
|
||||
$lang->layout_management = '레이아웃 관리';
|
||||
|
||||
$lang->cmd_move_to_installed_list = "Ver la lista creada";
|
||||
|
||||
|
|
|
|||
|
|
@ -18,6 +18,7 @@
|
|||
$lang->downloaded_list = 'Liste disponibles';
|
||||
$lang->layout_preview_content = 'Le contenu sera exposé ici.';
|
||||
$lang->not_apply_menu = 'Appliquer le Mise en Page sur tous les menus';
|
||||
$lang->layout_management = '레이아웃 관리';
|
||||
|
||||
$lang->cmd_move_to_installed_list = "Mises en Page créés";
|
||||
|
||||
|
|
|
|||
|
|
@ -18,6 +18,7 @@
|
|||
$lang->downloaded_list = 'ダウンロードリスト';
|
||||
$lang->layout_preview_content = '内容が出力される部分です。';
|
||||
$lang->not_apply_menu = 'レイアウトの一括適用';
|
||||
$lang->layout_management = 'レイアウト管理';
|
||||
|
||||
$lang->cmd_move_to_installed_list = '作成されたリスト表示';
|
||||
|
||||
|
|
@ -110,8 +111,8 @@
|
|||
'attribute' => 'ウィジェットを除いた各領域はすべて背景の色・イメージ・文字のテキスト色(「a」タグを含む)の指定が可能です。',
|
||||
|
||||
);
|
||||
$lang->mobile_layout_list = "Mobile Layout List";
|
||||
$lang->mobile_downloaded_list = "Downloaded Mobile Layouts";
|
||||
$lang->apply_mobile_view = "Apply Mobile View";
|
||||
$lang->about_apply_mobile_view = "All connected module use mobile view to display when accessing with mobile device.";
|
||||
$lang->mobile_layout_list = "モバイルレイアウトリスト";
|
||||
$lang->mobile_downloaded_list = "ダウンロードしたモバイルレイアウト";
|
||||
$lang->apply_mobile_view = "モバイルスキン使用";
|
||||
$lang->about_apply_mobile_view = "活性化すると連結されている全てのモジュールでモバイルスキンが適用されます。";
|
||||
?>
|
||||
|
|
|
|||
|
|
@ -18,6 +18,7 @@
|
|||
$lang->downloaded_list = '다운로드 목록';
|
||||
$lang->layout_preview_content = '내용이 출력되는 부분입니다.';
|
||||
$lang->not_apply_menu = '레이아웃 일괄 적용';
|
||||
$lang->layout_management = '레이아웃 관리';
|
||||
|
||||
$lang->cmd_move_to_installed_list = '생성된 목록 보기';
|
||||
|
||||
|
|
|
|||
|
|
@ -18,6 +18,7 @@
|
|||
$lang->downloaded_list = 'Список закачек';
|
||||
$lang->layout_preview_content = 'Содержимое отображается здесь';
|
||||
$lang->not_apply_menu = 'Применить лейауты';
|
||||
$lang->layout_management = '레이아웃 관리';
|
||||
|
||||
$lang->cmd_move_to_installed_list = "Просмотреть созданный список";
|
||||
|
||||
|
|
|
|||
|
|
@ -20,6 +20,7 @@
|
|||
$lang->downloaded_list = 'Danh sách Download';
|
||||
$lang->layout_preview_content = 'Khu vực nội dung sẽ hiển thị.';
|
||||
$lang->not_apply_menu = 'Áp dụng giao diện';
|
||||
$lang->layout_management = '레이아웃 관리';
|
||||
|
||||
$lang->cmd_move_to_installed_list = "Danh sách đã tạo";
|
||||
|
||||
|
|
|
|||
|
|
@ -18,6 +18,7 @@
|
|||
$lang->downloaded_list = '下载目录';
|
||||
$lang->layout_preview_content = '显示内容的部分。';
|
||||
$lang->not_apply_menu = '布局共享';
|
||||
$lang->layout_management = '레이아웃 관리';
|
||||
|
||||
$lang->cmd_move_to_installed_list = "查看生成目录";
|
||||
|
||||
|
|
|
|||
|
|
@ -18,6 +18,7 @@
|
|||
$lang->downloaded_list = '版面選擇';
|
||||
$lang->layout_preview_content = '顯示內容的部分。';
|
||||
$lang->not_apply_menu = '套用版面';
|
||||
$lang->layout_management = '版面管理';
|
||||
|
||||
$lang->cmd_move_to_installed_list = "檢視建立列表";
|
||||
|
||||
|
|
|
|||
|
|
@ -1,6 +1,6 @@
|
|||
<!--%import("js/layout_admin.js")-->
|
||||
|
||||
<h3 class="xeAdmin">{$lang->layout} <span class="gray">{$lang->cmd_management}</span></h3>
|
||||
<h3 class="xeAdmin"><span class="gray">{$lang->layout_management}</span></h3>
|
||||
|
||||
<div class="infoText">{nl2br($lang->about_layout)}</div>
|
||||
|
||||
|
|
|
|||
|
|
@ -69,8 +69,8 @@
|
|||
$lang->webmaster_name = '管理員名稱';
|
||||
$lang->webmaster_email = '管理員電子郵件';
|
||||
|
||||
$lang->about_keep_signed = '關閉瀏覽器後也將維持登入狀態。\n\n使用自動登入功能,可解決每次訪問都要輸入帳號及密碼的麻煩。\n\n為防止個人資料洩露,在網咖,學校等公共場所,請務必要確認解除登入狀態。';
|
||||
$lang->about_keep_warning = '關閉瀏覽器後也將維持登入狀態。\n\n使用自動登入功能,可解決每次訪問都要輸入帳號及密碼的麻煩。 為防止個人資料洩露,在網咖,學校等公共場所,請務必要確認解除登入狀態。';
|
||||
$lang->about_keep_signed = '關閉瀏覽器後也將維持登入狀態。<br />使用此功能,可解決每次訪問都要輸入帳號及密碼的麻煩。<br />為防止個人資料洩露,在網咖,學校等公共場所,請務必要確認解除登入狀態。';
|
||||
$lang->about_keep_warning = '關閉瀏覽器後也將維持登入狀態。<br />使用此功能,可解決每次訪問都要輸入帳號及密碼的麻煩。<br />為防止個人資料洩露,在網咖,學校等公共場所,請務必要確認解除登入狀態。';
|
||||
$lang->about_webmaster_name = '請輸入認證所需的電子郵件地址或管理其他網站時要使用的網站管理員名稱。(預設 : webmaster)';
|
||||
$lang->about_webmaster_email = '請輸入網站管理員的電子郵件地址。';
|
||||
|
||||
|
|
|
|||
|
|
@ -51,22 +51,22 @@
|
|||
$args->s_email_address = $search_keyword;
|
||||
break;
|
||||
case 'regdate' :
|
||||
$args->s_regdate = ereg_replace("[^0-9]","",$search_keyword);
|
||||
$args->s_regdate = preg_replace("/[^0-9]/","",$search_keyword);
|
||||
break;
|
||||
case 'regdate_more' :
|
||||
$args->s_regdate_more = substr(ereg_replace("[^0-9]","",$search_keyword) . '00000000000000',0,14);
|
||||
$args->s_regdate_more = substr(preg_replace("/[^0-9]/","",$search_keyword) . '00000000000000',0,14);
|
||||
break;
|
||||
case 'regdate_less' :
|
||||
$args->s_regdate_less = substr(ereg_replace("[^0-9]","",$search_keyword) . '00000000000000',0,14);
|
||||
$args->s_regdate_less = substr(preg_replace("/[^0-9]/","",$search_keyword) . '00000000000000',0,14);
|
||||
break;
|
||||
case 'last_login' :
|
||||
$args->s_last_login = $search_keyword;
|
||||
break;
|
||||
case 'last_login_more' :
|
||||
$args->s_last_login_more = substr(ereg_replace("[^0-9]","",$search_keyword) . '00000000000000',0,14);
|
||||
$args->s_last_login_more = substr(preg_replace("/[^0-9]/","",$search_keyword) . '00000000000000',0,14);
|
||||
break;
|
||||
case 'last_login_less' :
|
||||
$args->s_last_login_less = substr(ereg_replace("[^0-9]","",$search_keyword) . '00000000000000',0,14);
|
||||
$args->s_last_login_less = substr(preg_replace("/[^0-9]/","",$search_keyword) . '00000000000000',0,14);
|
||||
break;
|
||||
case 'extra_vars' :
|
||||
$args->s_extra_vars = ereg_replace("[^0-9]","",$search_keyword);
|
||||
|
|
@ -75,8 +75,13 @@
|
|||
}
|
||||
|
||||
// selected_group_srl이 있으면 query id를 변경 (table join때문에)
|
||||
$sort_order = Context::get('sort_order');
|
||||
$sort_index = Context::get('sort_index');
|
||||
if($sort_index != 'last_login') $sort_index = "member_srl";
|
||||
if($sort_index != 'last_login') {
|
||||
$sort_index = "list_order";
|
||||
}else{
|
||||
$sort_order = 'desc';
|
||||
}
|
||||
if($args->selected_group_srl) {
|
||||
$query_id = 'member.getMemberListWithinGroup';
|
||||
$args->sort_index = "member.".$sort_index;
|
||||
|
|
@ -84,8 +89,7 @@
|
|||
$query_id = 'member.getMemberList';
|
||||
$args->sort_index = $sort_index;
|
||||
}
|
||||
$sort_order = Context::get('sort_order');
|
||||
if($sort_order != "asc") $sort_order = "desc";
|
||||
if($sort_order != "desc") $sort_order = "asc";
|
||||
$args->sort_order = $sort_order;
|
||||
Context::set('sort_order', $sort_order);
|
||||
|
||||
|
|
@ -93,7 +97,8 @@
|
|||
$args->page = Context::get('page');
|
||||
$args->list_count = 40;
|
||||
$args->page_count = 10;
|
||||
return executeQuery($query_id, $args);
|
||||
$output = executeQuery($query_id, $args);
|
||||
return $output;
|
||||
}
|
||||
|
||||
/**
|
||||
|
|
|
|||
|
|
@ -153,6 +153,9 @@
|
|||
if(!$oDB->isColumnExists("member", "find_account_question")) return true;
|
||||
if(!$oDB->isColumnExists("member", "find_account_answer")) return true;
|
||||
|
||||
if(!$oDB->isColumnExists("member", "list_order")) return true;
|
||||
if(!$oDB->isIndexExists("member","idx_list_order")) return true;
|
||||
|
||||
return false;
|
||||
}
|
||||
|
||||
|
|
@ -206,6 +209,18 @@
|
|||
$oDB->addColumn("member", "find_account_answer", "varchar", 250);
|
||||
}
|
||||
|
||||
if(!$oDB->isColumnExists("member", "list_order")) {
|
||||
$oDB->addColumn("member", "list_order", "number", 11);
|
||||
set_time_limit(0);
|
||||
$args->list_order = 'member_srl';
|
||||
executeQuery('member.updateMemberListOrderAll',$args);
|
||||
executeQuery('member.updateMemberListOrderAll');
|
||||
}
|
||||
|
||||
if(!$oDB->isIndexExists("member","idx_list_order")) {
|
||||
$oDB->addIndex("member","idx_list_order", array("list_order"));
|
||||
}
|
||||
|
||||
return new Object(0, 'success_updated');
|
||||
}
|
||||
|
||||
|
|
|
|||
|
|
@ -540,6 +540,7 @@
|
|||
// 필수 정보들을 미리 추출
|
||||
$args = Context::gets('user_id','user_name','nick_name','homepage','blog','birthday','email_address','password','allow_mailing','find_account_question','find_account_answer');
|
||||
$args->member_srl = getNextSequence();
|
||||
$args->list_order = -1 * $args->member_srl;
|
||||
|
||||
// 넘어온 모든 변수중에서 몇가지 불필요한 것들 삭제
|
||||
$all_args = Context::getRequestVars();
|
||||
|
|
@ -613,6 +614,7 @@
|
|||
unset($all_args->body);
|
||||
unset($all_args->accept_agreement);
|
||||
unset($all_args->signature);
|
||||
unset($all_args->_filter);
|
||||
|
||||
// 모든 request argument에서 필수 정보만 제외 한 후 추가 데이터로 입력
|
||||
$extra_vars = delObjectVars($all_args, $args);
|
||||
|
|
@ -1050,11 +1052,14 @@
|
|||
// 임시비밀번호로 변경 및 비밀번호 변경시간을 1로 설정
|
||||
$args->member_srl = $member_srl;
|
||||
list($usec, $sec) = explode(" ", microtime());
|
||||
$args->temp_password = substr(md5($user_id . $member_info->find_account_answer. $usec . $sec),0,20);
|
||||
$args->change_password_date = '1';
|
||||
$this->updateMemberPassword($args);
|
||||
$temp_password = substr(md5($user_id . $member_info->find_account_answer. $usec . $sec),0,15);
|
||||
|
||||
$_SESSION['xe_temp_password_'.$user_id] = $args->temp_password;
|
||||
$args->password = $temp_password;
|
||||
$args->change_password_date = '1';
|
||||
$output = $this->updateMemberPassword($args);
|
||||
if(!$output->toBool()) return $output;
|
||||
|
||||
$_SESSION['xe_temp_password_'.$user_id] = $temp_password;
|
||||
|
||||
$this->add('user_id',$user_id);
|
||||
}
|
||||
|
|
@ -1627,6 +1632,7 @@
|
|||
|
||||
// DB에 입력
|
||||
$args->member_srl = getNextSequence();
|
||||
$args->list_order = -1 * $args->member_srl;
|
||||
if($args->password && !$password_is_hashed) $args->password = md5($args->password);
|
||||
elseif(!$args->password) unset($args->password);
|
||||
|
||||
|
|
|
|||
|
|
@ -23,7 +23,7 @@
|
|||
</group>
|
||||
</conditions>
|
||||
<navigation>
|
||||
<index var="sort_index" default="member_srl" order="sort_order" />
|
||||
<index var="sort_index" default="list_order" order="sort_order" />
|
||||
<list_count var="list_count" default="20" />
|
||||
<page_count var="page_count" default="10" />
|
||||
<page var="page" default="1" />
|
||||
|
|
|
|||
|
|
@ -26,7 +26,7 @@
|
|||
</group>
|
||||
</conditions>
|
||||
<navigation>
|
||||
<index var="sort_index" default="member.member_srl" order="sort_order" />
|
||||
<index var="sort_index" default="member.list_order" order="sort_order" />
|
||||
<list_count var="list_count" default="20" />
|
||||
<page_count var="page_count" default="10" />
|
||||
<page var="page" default="1" />
|
||||
|
|
|
|||
|
|
@ -25,5 +25,6 @@
|
|||
<column name="is_admin" var="is_admin" default="N" />
|
||||
<column name="description" var="description" />
|
||||
<column name="extra_vars" var="extra_vars" />
|
||||
<column name="list_order" var="list_order" />
|
||||
</columns>
|
||||
</query>
|
||||
|
|
|
|||
8
modules/member/queries/updateMemberListOrderAll.xml
Normal file
8
modules/member/queries/updateMemberListOrderAll.xml
Normal file
|
|
@ -0,0 +1,8 @@
|
|||
<query id="updateMemberListOrderAll" action="update">
|
||||
<tables>
|
||||
<table name="member" />
|
||||
</tables>
|
||||
<columns>
|
||||
<column name="list_order" notnull="notnull" var="list_order" default="multiply(-1)" />
|
||||
</columns>
|
||||
</query>
|
||||
Some files were not shown because too many files have changed in this diff Show more
Loading…
Add table
Add a link
Reference in a new issue