merge from 1.5.2

git-svn-id: http://xe-core.googlecode.com/svn/trunk@10446 201d5d3c-b55e-5fd7-737f-ddc643e51545
This commit is contained in:
devjin 2012-03-20 08:03:02 +00:00
parent 6c23751ef8
commit c727926d9e
382 changed files with 6855 additions and 3603 deletions

View file

@ -2,9 +2,13 @@
<addon version="0.2">
<title xml:lang="ko">어드민 메뉴 접근 로깅</title>
<title xml:lang="en">admin menu access logging</title>
<title xml:lang="zh-TW">管理選單訪問日誌</title>
<description xml:lang="ko">
admin menu에 접근한 기록을 로깅하는 애드온입니다.
</description>
<description xml:lang="zh-TW">
管理選單訪問紀錄及登入日誌。
</description>
<version>0.1</version>
<date>2011-09-28</date>

View file

@ -92,7 +92,7 @@ describe('Autolink trigger', {
<p>This is text. http://www.abc.com/some_program?hello=world&encoded=%ED%C2%C1 Text Text.
Another URL : http://www.decccccf12312.co.uk/path/to/program?mymy=lovelove. XE!
<b>Bold text and http://mail.abc.com/path/to/one_cgi.cgi?hello=world#hash_text Bold text end</b>
<textarea>this text should be ignored http://mygony.com ignored?</textarea>
<textarea rows="8" cols="42">this text should be ignored http://mygony.com ignored?</textarea>
<div>
Hello~
<a href="http://mygony.com" target="_self">http://mygony.com</a>

View file

@ -34,7 +34,7 @@
Kommentare beginnen mit http naeyongjung Thema der gemeinsamen String automatisch Link zu hängen Sie mit der Maus über die einzelnen Links und saechang Stadt und auf dem Menü des Add-On Dekoration.
</description>
<description xml:lang="zh-TW">
是種可將主題和評論內容中的URL網址字串自動轉換成連結的附加元件。
是種可將文章及回覆內容中的 URL 網址字串自動轉換成連結的附加元件。
</description>
<version>0.1</version>
<date>2008-04-22</date>

View file

@ -234,13 +234,15 @@ if($called_position == 'before_module_proc') {
for($i=0;$i<$file_count;$i++) {
$file_info['tmp_name'] = sprintf('%s%s', $tmp_uploaded_path, $file_list[$i]);
$file_info['name'] = $file_list[$i];
$oFileController->insertFile($file_info, $this->module_srl, $document_srl, 0, true);
$fileOutput = $oFileController->insertFile($file_info, $this->module_srl, $document_srl, 0, true);
$uploaded_filename = $fileOutput->get('uploaded_filename');
$source_filename = $fileOutput->get('source_filename');
$obj->content = str_replace($uploaded_target_path . $source_filename, sprintf('/files/attach/images/%s/%s%s', $this->module_srl, getNumberingPath($document_srl,3), $uploaded_filename), $obj->content);
}
$obj->uploaded_count = $file_count;
}
}
$obj->content = str_replace($uploaded_target_path,sprintf('/files/attach/images/%s/%s%s', $this->module_srl, getNumberingPath($document_srl,3), $filename), $obj->content);
$oDocumentController = &getController('document');
$obj->commentStatus = 'ALLOW';
@ -329,14 +331,15 @@ if($called_position == 'before_module_proc') {
$moved_filename = sprintf('./files/attach/images/%s/%s/%s', $this->module_srl, $document_srl, $file_info['name']);
if(file_exists($moved_filename)) continue;
$oFileController->insertFile($file_info, $this->module_srl, $document_srl, 0, true);
$fileOutput = $oFileController->insertFile($file_info, $this->module_srl, $document_srl, 0, true);
$uploaded_filename = $fileOutput->get('uploaded_filename');
$source_filename = $fileOutput->get('source_filename');
$obj->content = str_replace($uploaded_target_path . $source_filename, sprintf('/files/attach/images/%s/%s%s', $this->module_srl, getNumberingPath($document_srl,3), $uploaded_filename), $obj->content);
}
$obj->uploaded_count += $file_count;
}
}
$obj->content = str_replace($uploaded_target_path,sprintf('/files/attach/images/%s/%s%s', $this->module_srl, getNumberingPath($document_srl,3), $filename), $obj->content);
$oDocumentController = &getController('document');
$output = $oDocumentController->updateDocument($oDocument,$obj);

View file

@ -63,8 +63,8 @@
API網址是 http://安裝位置/模組名稱/api。
將狀態設置成"啟用"時,才可使用 RSD 和 API
</description>
<version>0.1</version>
<date>2007-02-28</date>
<version>1.0</version>
<date>2012-02-22</date>
<author email_address="developers@xpressengine.com" link="http://xpressengine.com/">
<name xml:lang="ko">NHN</name>

View file

@ -43,7 +43,15 @@
if(Context::getRequestMethod()!='XMLRPC' && Context::getRequestMethod()!=='JSON')
{
if($type == 'inline') {
$this->compareCaptcha();
if(!$this->compareCaptcha())
{
Context::loadLang('./addons/captcha/lang');
$_SESSION['XE_VALIDATOR_ERROR'] = -1;
$_SESSION['XE_VALIDATOR_MESSAGE'] = Context::getLang('captcha_denied');;
$_SESSION['XE_VALIDATOR_MESSAGE_TYPE'] = 'error';
$_SESSION['XE_VALIDATOR_RETURN_URL'] = Context::get('error_return_url');
$ModuleHandler->_setInputValueToSession();
}
} else {
Context::addHtmlHeader('<script type="text/javascript"> var captchaTargetAct = new Array("'.implode('","',$target_acts).'"); </script>');
Context::loadFile(array('./addons/captcha/captcha.js', 'body', '', null), true);
@ -255,7 +263,10 @@
function before_module_init_captchaCompare()
{
if(!$this->compareCaptcha()) return false;
if(!$this->compareCaptcha())
{
return false;
}
header("Content-Type: text/xml; charset=UTF-8");
header("Expires: Mon, 26 Jul 1997 05:00:00 GMT");
@ -314,13 +325,19 @@ EOD;
if(method_exists($oAddonCaptcha, $called_position))
{
if(!call_user_func_array(array(&$oAddonCaptcha, $called_position), array(&$this))) return false;
if(!call_user_func_array(array(&$oAddonCaptcha, $called_position), array(&$this)))
{
return false;
}
}
$addon_act = Context::get('captcha_action');
if($addon_act && method_exists($oAddonCaptcha, $called_position.'_'.$addon_act))
{
if(!call_user_func_array(array(&$oAddonCaptcha, $called_position.'_'.$addon_act), array(&$this))) return false;
if(!call_user_func_array(array(&$oAddonCaptcha, $called_position.'_'.$addon_act), array(&$this)))
{
return false;
}
}
?>

View file

@ -7,6 +7,55 @@ var calledArgs = null;
var captchaXE = null;
function xeCaptcha() {
$('form').each(function(i)
{
var isSubmitHook = false;
if (!$(this).attr('onsubmit') || $(this).attr('onsubmit').indexOf('procFilter') < 0)
{
var act = $(this).find('input[name=act]').val()
for(var i = 0; i<captchaTargetAct.length; i++)
{
if(captchaTargetAct[i] == act)
{
isSubmitHook = true;
break;
}
}
}
if (isSubmitHook)
{
$(this).append('<input type="hidden" name="captchaType" value="inline" />');
if(!$(this).find('input[name=error_return_url]'))
$(this).append('<input type="hidden" name="error_return_url" value="'+current_url+'" />');
$(this).submit(function(event){
if ($(this).find('input[name=secret_text]').val())
{
return true;
}
event.preventDefault();
var self = this;
$('#captcha_layer form')
.submit(function(e){
e.preventDefault();
if(!$('#secret_text').val()){
$(this).find('input[type=text]').val('').focus();
return false;
}
$(self).append('<input type="hidden" name="secret_text" value="'+ $('#secret_text').val() +'" />');
$(self).submit();
});
var params = new Array();
params['captcha_action'] = 'setCaptchaSession';
params['mid'] = current_mid;
oldExecXml('', '', params, captchaXE.show,new Array('error','message','about_captcha','captcha_reload','captcha_play','cmd_input','cmd_cancel'));
});
}
});
var body = $(document.body);
var captchaIma;
@ -47,15 +96,6 @@ var calledArgs = null;
'</form>'+_object_ +
'</div>').appendTo(captchaXE);
$div.find('form')
.submit(function(){
if(!$('#secret_text').val()){
$div.find('input[type=text]').val('').focus();
return false;
}
captchaXE.compare(); return false;
});
$div.find('button.cancel')
.click(function(){ $('#captcha_layer').hide(); });
@ -83,6 +123,16 @@ var calledArgs = null;
$.each(captchaTargetAct || {}, function(key,val){ if (val == act){ doCheck = true; return false; } });
if (doCheck) { /* captcha 를 사용하는 경우 */
$('#captcha_layer form')
.submit(function(e){
e.preventDefault();
if(!$('#secret_text').val()){
$(this).find('input[type=text]').val('').focus();
return false;
}
captchaXE.compare(); return false;
});
calledArgs = {'module':module,'act':act,'params':params,'callback_func':callback_func,'response_tags':response_tags,'callback_func_arg':callback_func_arg,'fo_obj':fo_obj};
var params = new Array();
params['captcha_action'] = 'setCaptchaSession';

View file

@ -5,7 +5,7 @@
<value xml:lang="en"><![CDATA[You have %d new message(s). Do you want to check it now?]]></value>
<value xml:lang="jp"><![CDATA[%d件の新しいメッセージがあります。確認しますか]]></value>
<value xml:lang="zh-CN"><![CDATA[您有新消息。要确认吗?]]></value>
<value xml:lang="zh-TW"><![CDATA[您收到%d個新訊息。您想要檢視嗎?]]></value>
<value xml:lang="zh-TW"><![CDATA[您收到 %d 個新訊息。要檢視嗎?]]></value>
<value xml:lang="ru"><![CDATA[У Вас новые сообщения. Проверите сейчас?]]></value>
<value xml:lang="es"><![CDATA[Usted tiene un nuevo mensaje. Quiere comprobar ahora?]]></value>
<value xml:lang="vi"><![CDATA[Bạn có một tin nhắn mới. bạn có muốn kiểm tra ngay bây giờ không?]]></value>

View file

@ -1,29 +1,18 @@
(function($){
window.xeNotifyMessage = function(text, count){
var $bar;
$bar = $('div.notifyMessage');
$bar = $('div.message.info');
if(!$bar.length) {
$bar = $('<div class="notifyMessage" />')
$bar = $('<div class="message info" />')
.hide()
.css({
position : 'absolute',
background : '#ff0',
border : '1px solid #990',
textAlign : 'center'
})
.appendTo(document.body);
.prependTo(document.body);
}
text = text.replace('%d', count);
h = $bar.html('<a href="'+current_url.setQuery('act','dispCommunicationMessages')+'">'+text+'</a>').height();
$bar.css('top', -h-4).show().animate({top:0});
h = $bar.html('<p><a href="'+current_url.setQuery('act','dispCommunicationMessages')+'">'+text+'</a></p>').height();
$bar.show().animate({top:0});
// hide after 10 seconds
setTimeout(function(){
$bar.animate({top:-h-4}, function(){ $bar.hide() });
$bar.slideUp();
}, 10000);
};
})(jQuery);

2
admin/index.php Normal file
View file

@ -0,0 +1,2 @@
<?php
header('Location: ' . preg_replace('/admin\/|admin/', 'index.php?module=admin', $_SERVER['REQUEST_URI']));

View file

@ -88,8 +88,7 @@ class CacheMemcache extends CacheBase {
}
function truncate() {
// not supported on memcached
return false;
return $this->Memcache->flush();
}
}

View file

@ -98,6 +98,7 @@ class Context {
$this->db_info->lang_type = $site_module_info->default_language;
if(!$this->db_info->lang_type) $this->db_info->lang_type = 'en';
if(!$this->db_info->use_db_session) $this->db_info->use_db_session = 'N';
}
// Load Language File
@ -127,7 +128,7 @@ class Context {
$this->loadLang(_XE_PATH_.'modules/module/lang');
// set session handler
if(Context::isInstalled() && $this->db_info->use_db_session != 'N') {
if(Context::isInstalled() && $this->db_info->use_db_session == 'Y') {
$oSessionModel = &getModel('session');
$oSessionController = &getController('session');
session_set_save_handler(
@ -245,6 +246,7 @@ class Context {
if($db_info->qmail_compatibility != 'Y') $db_info->qmail_compatibility = 'N';
$GLOBALS['_qmail_compatibility'] = $db_info->qmail_compatibility;
if(!$db_info->use_db_session) $db_info->use_db_session = 'N';
if(!$db_info->use_ssl) $db_info->use_ssl = 'none';
$this->set('_use_ssl', $db_info->use_ssl);
@ -779,9 +781,13 @@ class Context {
static $url = null;
if(is_null($url)) {
$url = Context::getRequestUri();
if(count($_GET)) {
foreach($_GET as $key => $val) $vars[] = $key.'='.urlencode(Context::convertEncodingStr($val));
$url .= '?'.implode('&',$vars);
if(count($_GET))
{
foreach($_GET as $key => $val)
{
$vars[] = $key . '=' . ($val ? urlencode(Context::convertEncodingStr($val)) : '');
}
$url .= '?' . join('&', $vars);
}
}
return $url;
@ -1018,6 +1024,11 @@ class Context {
is_a($this,'Context')?$self=&$this:$self=&Context::getInstance();
$self->context->{$key} = $val;
if($set_to_get_vars === false) return;
if($val === NULL || $val === '')
{
unset($self->get_vars->{$key});
return;
}
if($set_to_get_vars || $self->get_vars->{$key}) $self->get_vars->{$key} = $val;
}
@ -1451,4 +1462,3 @@ class Context {
$map[$key] = $content;
}
}
?>

View file

@ -179,7 +179,8 @@
**/
function _fetch($result, $arrayIndexEndValue = NULL)
{
if (!$this->isConnected() || $this->isError() || !$result) return;
$output = array();
if (!$this->isConnected() || $this->isError() || !$result) return array();
// TODO Improve this piece of code
// This code trims values from char type columns
@ -654,8 +655,18 @@
$total_page = 1;
}
// check the page variables
if ($page > $total_page) $page = $total_page;
// check the page variables
if ($page > $total_page) {
// If requested page is bigger than total number of pages, return empty list
$buff = new Object ();
$buff->total_count = $total_count;
$buff->total_page = $total_page;
$buff->page = $page;
$buff->data = array();
$buff->page_navigation = new PageHandler($total_count, $total_page, $page, $page_count);
return $buff;
}
$start_count = ($page - 1) * $list_count;
$query = $this->getSelectPageSql($queryObject, true, $start_count, $list_count);

View file

@ -753,13 +753,24 @@
if ($total_count) $total_page = (int) (($total_count - 1) / $list_count) + 1;
else $total_page = 1;
if($page > $total_page) $page = $total_page;
// check the page variables
if ($page > $total_page) {
// If requested page is bigger than total number of pages, return empty list
$buff = new Object ();
$buff->total_count = $total_count;
$buff->total_page = $total_page;
$buff->page = $page;
$buff->data = array();
$buff->page_navigation = new PageHandler($total_count, $total_page, $page, $page_count);
return $buff;
}
$start_count = ($page-1)*$list_count;
$query = $this->getSelectSql($queryObject, true, $start_count);
if(strpos($query, "substr")) {
$query = str_replace ("substr", "substring", $query);
$query = $this->replaceSubstrFormat($query);
if(strpos($query, "substr")) {
$query = str_replace ("substr", "substring", $query);
$query = $this->replaceSubstrFormat($query);
}
$query .= (__DEBUG_QUERY__&1 && $queryObject->query_id)?sprintf (' '.$this->comment_syntax, $this->query_id):'';
$result = $this->_query ($query, null, $connection);

View file

@ -170,11 +170,11 @@
* @brief Fetch results
**/
function _fetch($result, $arrayIndexEndValue = NULL) {
if(!$this->isConnected() || $this->isError() || !$result) return;
$output = array();
if(!$this->isConnected() || $this->isError() || !$result) return $output;
$c = sqlsrv_num_fields($result);
$m = null;
$output = array();
while(sqlsrv_fetch($result)){
if(!$m) $m = sqlsrv_field_metadata($result);
@ -514,14 +514,24 @@
$total_page = (int) (($total_count - 1) / $list_count) + 1;
} else $total_page = 1;
// check the page variables
if ($page > $total_page) $page = $total_page;
$start_count = ($page - 1) * $list_count;
// check the page variables
if ($page > $total_page) {
// If requested page is bigger than total number of pages, return empty list
$query .= (__DEBUG_QUERY__&1 && $queryObject->query_id)?sprintf (' '.$this->comment_syntax, $this->query_id):'';
$result = $this->_query ($query, $connection);
if ($this->isError ())
return $this->queryError($queryObject);
$buff = new Object ();
$buff->total_count = $total_count;
$buff->total_page = $total_page;
$buff->page = $page;
$buff->data = array();
$buff->page_navigation = new PageHandler($total_count, $total_page, $page, $page_count);
return $buff;
}
$start_count = ($page - 1) * $list_count;
$query .= (__DEBUG_QUERY__&1 && $queryObject->query_id)?sprintf (' '.$this->comment_syntax, $this->query_id):'';
$result = $this->_query ($query, $connection);
if ($this->isError ())
return $this->queryError($queryObject);
$virtual_no = $total_count - ($page - 1) * $list_count;
$data = $this->_fetch($result, $virtual_no);

View file

@ -147,7 +147,8 @@
* @brief Fetch results
**/
function _fetch($result, $arrayIndexEndValue = NULL) {
if(!$this->isConnected() || $this->isError() || !$result) return;
$output = array();
if(!$this->isConnected() || $this->isError() || !$result) return $output;
while($tmp = $this->db_fetch_object($result)) {
if($arrayIndexEndValue) $output[$arrayIndexEndValue--] = $tmp;
else $output[] = $tmp;
@ -467,7 +468,16 @@
// Total count
$temp_where = $queryObject->getWhereString(true, false);
$count_query = sprintf('select count(*) as "count" %s %s', 'FROM ' . $queryObject->getFromString(), ($temp_where === '' ? '' : ' WHERE '. $temp_where));
if ($queryObject->getGroupByString() != '') {
// Check for distinct query and if found update count query structure
$temp_select = $queryObject->getSelectString();
if(strpos(strtolower($temp_select), "distinct") !== false) {
$count_query = sprintf('select %s %s %s', 'FROM ' . $queryObject->getFromString(), $temp_select, ($temp_where === '' ? '' : ' WHERE '. $temp_where));
$uses_distinct = true;
}
// If query uses grouping or distinct, count from original select
if ($queryObject->getGroupByString() != '' || $uses_distinct) {
$count_query = sprintf('select count(*) as "count" from (%s) xet', $count_query);
}
@ -490,7 +500,16 @@
$total_page = 1;
// check the page variables
if ($page > $total_page) $page = $total_page;
if ($page > $total_page) {
// If requested page is bigger than total number of pages, return empty list
$buff = new Object ();
$buff->total_count = $total_count;
$buff->total_page = $total_page;
$buff->page = $page;
$buff->data = array();
$buff->page_navigation = new PageHandler($total_count, $total_page, $page, $page_count);
return $buff;
}
$start_count = ($page - 1) * $list_count;
$query = $this->getSelectPageSql($queryObject, true, $start_count, $list_count);

View file

@ -1,718 +0,0 @@
<?php
/**
* @class DBSqlite2
* @author NHN (developers@xpressengine.com)
* @brief Class for using SQLite ver 2.x
* @version 0.1
*
* sqlite handling class (sqlite ver 2.x)
**/
class DBSqlite2 extends DB {
/**
* DB information
**/
var $database = NULL; ///< database
var $prefix = 'xe'; // / <prefix of a tablename (One or more XEs can be installed in a single DB)
var $comment_syntax = '/* %s */';
/**
* @brief sqlite column type used in
*
* Becasue a common column type in schema/query xml is used for colum_type,
* it should be replaced properly for each DBMS
**/
var $column_type = array(
'bignumber' => 'INTEGER',
'number' => 'INTEGER',
'varchar' => 'VARCHAR',
'char' => 'CHAR',
'text' => 'TEXT',
'bigtext' => 'TEXT',
'date' => 'VARCHAR(14)',
'float' => 'FLOAT',
);
/**
* @brief constructor
**/
function DBSqlite2() {
$this->_setDBInfo();
$this->_connect();
}
/**
* @brief create an instance of this class
*/
function create()
{
return new DBSqlite2;
}
/**
* @brief Return if it is installable
**/
function isSupported() {
if(!function_exists('sqlite_open')) return false;
return true;
}
/**
* @brief DB settings and connect/close
**/
function _setDBInfo() {
$db_info = Context::getDBInfo();
$this->database = $db_info->db_database;
$this->prefix = $db_info->db_table_prefix;
if(!substr($this->prefix,-1)!='_') $this->prefix .= '_';
}
/**
* @brief DB Connection
**/
function _connect() {
// Ignore if no DB information exists
if(!$this->database) return;
// Attempt to access the database file
$this->fd = sqlite_open($this->database, 0666, $error);
if(!file_exists($this->database) || $error) {
$this->setError(-1,$error);
$this->is_connected = false;
return;
}
// Check connections
$this->is_connected = true;
$this->password = md5($this->password);
}
/**
* @brief DB disconnection
**/
function close() {
if(!$this->isConnected()) return;
sqlite_close($this->fd);
}
/**
* @brief Begin transaction
**/
function begin() {
if(!$this->is_connected || $this->transaction_started) return;
if($this->_query("BEGIN;")) $this->transaction_started = true;
}
/**
* @brief Rollback
**/
function rollback() {
if(!$this->is_connected || !$this->transaction_started) return;
$this->_query("ROLLBACK;");
$this->transaction_started = false;
}
/**
* @brief Commits
**/
function commit($force = false) {
if(!$force && (!$this->isConnected() || !$this->transaction_started)) return;
if(!$this->is_connected || !$this->transaction_started) return;
$this->_query("COMMIT;");
$this->transaction_started = false;
}
/**
* @brief Add quotes on the string variables in a query
**/
function addQuotes($string) {
if(version_compare(PHP_VERSION, "5.9.0", "<") && get_magic_quotes_gpc()) $string = stripslashes(str_replace("\\","\\\\",$string));
if(!is_numeric($string)) $string = str_replace("'","''", $string);
return $string;
}
/**
* @brief : Run a query and fetch the result
*
* query: run a query and return the result \n
* fetch: NULL if no value is returned \n
* array object if rows are returned \n
* object if a row is returned \n
* return\n
**/
function _query($query) {
if(!$this->isConnected()) return;
// Notify to start a query execution
$this->actStart($query);
// Run the query statement
$result = @sqlite_query($query, $this->fd);
// Error Check
if(sqlite_last_error($this->fd)) $this->setError(sqlite_last_error($this->fd), sqlite_error_string(sqlite_last_error($this->fd)));
// Notify to complete a query execution
$this->actFinish();
return $result;
}
/**
* @brief Fetch results
**/
function _fetch($result) {
if($this->isError() || !$result) return;
while($tmp = sqlite_fetch_array($result, SQLITE_ASSOC)) {
unset($obj);
foreach($tmp as $key => $val) {
$pos = strpos($key, '.');
if($pos) $key = substr($key, $pos+1);
$obj->{$key} = $val;
}
$output[] = $obj;
}
if(count($output)==1) return $output[0];
return $output;
}
/**
* @brief Return the sequence value is incremented by 1
**/
function getNextSequence() {
$query = sprintf("insert into %ssequence (seq) values ('')", $this->prefix);
$this->_query($query);
$sequence = sqlite_last_insert_rowid($this->fd);
if($sequence % 10000 == 0) {
$query = sprintf("delete from %ssequence where seq < %d", $this->prefix, $sequence);
$this->_query($query);
}
return $sequence;
}
/**
* @brief Return if a table already exists
**/
function isTableExists($target_name) {
$query = sprintf('pragma table_info(%s%s)', $this->prefix, $this->addQuotes($target_name));
$result = $this->_query($query);
if(sqlite_num_rows($result)==0) return false;
return true;
}
/**
* @brief Add a column to a table
**/
function addColumn($table_name, $column_name, $type='number', $size='', $default = '', $notnull=false) {
$type = $this->column_type[$type];
if(strtoupper($type)=='INTEGER') $size = '';
$query = sprintf("alter table %s%s add %s ", $this->prefix, $table_name, $column_name);
if($size) $query .= sprintf(" %s(%s) ", $type, $size);
else $query .= sprintf(" %s ", $type);
if($default) $query .= sprintf(" default '%s' ", $default);
if($notnull) $query .= " not null ";
return $this->_query($query);
}
/**
* @brief Delete a column from a table
**/
function dropColumn($table_name, $column_name) {
$query = sprintf("alter table %s%s drop column %s ", $this->prefix, $table_name, $column_name);
$this->_query($query);
}
/**
* @brief Return column information of a table
**/
function isColumnExists($table_name, $column_name) {
$query = sprintf("pragma table_info(%s%s)", $this->prefix, $table_name);
$result = $this->_query($query);
$output = $this->_fetch($result);
if($output) {
$column_name = strtolower($column_name);
foreach($output as $key => $val) {
$name = strtolower($val->name);
if($column_name == $name) return true;
}
}
return false;
}
/**
* @brief Add an index to a table
* $target_columns = array(col1, col2)
* $is_unique? unique : none
**/
function addIndex($table_name, $index_name, $target_columns, $is_unique = false) {
if(!is_array($target_columns)) $target_columns = array($target_columns);
$key_name = sprintf('%s%s_%s', $this->prefix, $table_name, $index_name);
$query = sprintf("pragma table_info(%s%s)", $this->prefix, $table_name);
$query = sprintf('CREATE %s INDEX %s ON %s%s (%s)', $is_unique?'UNIQUE':'', $key_name, $this->prefix, $table_name, implode(',',$target_columns));
return $this->_query($query);
}
/**
* @brief Drop an index from a table
**/
function dropIndex($table_name, $index_name, $is_unique = false) {
$key_name = sprintf('%s%s_%s', $this->prefix, $table_name, $index_name);
$query = sprintf("DROP INDEX %s", $this->prefix, $table_name, $key_name);
$this->_query($query);
}
/**
* @brief Return index information of a table
**/
function isIndexExists($table_name, $index_name) {
$key_name = sprintf('%s%s_%s', $this->prefix, $table_name, $index_name);
$query = sprintf("pragma index_info(%s)", $key_name);
$result = $this->_query($query);
$output = $this->_fetch($result);
if(!$output) return false;
return true;
}
/**
* @brief Create a table by using xml file
**/
function createTableByXml($xml_doc) {
return $this->_createTable($xml_doc);
}
/**
* @brief Create a table by using xml file
**/
function createTableByXmlFile($file_name) {
if(!file_exists($file_name)) return;
// read xml file
$buff = FileHandler::readFile($file_name);
return $this->_createTable($buff);
}
/**
* @brief generate a query statement to create a table by using schema xml
*
* type : number, varchar, text, char, date, \n
* opt : notnull, default, size\n
* index : primary key, index, unique\n
**/
function _createTable($xml_doc) {
// xml parsing
$oXml = new XmlParser();
$xml_obj = $oXml->parse($xml_doc);
// Create a table schema
$table_name = $xml_obj->table->attrs->name;
if($this->isTableExists($table_name)) return;
$table_name = $this->prefix.$table_name;
if(!is_array($xml_obj->table->column)) $columns[] = $xml_obj->table->column;
else $columns = $xml_obj->table->column;
foreach($columns as $column) {
$name = $column->attrs->name;
$type = $column->attrs->type;
if(strtoupper($this->column_type[$type])=='INTEGER') $size = '';
else $size = $column->attrs->size;
$notnull = $column->attrs->notnull;
$primary_key = $column->attrs->primary_key;
$index = $column->attrs->index;
$unique = $column->attrs->unique;
$default = $column->attrs->default;
$auto_increment = $column->attrs->auto_increment;
if($auto_increment) {
$column_schema[] = sprintf('%s %s %s',
$name,
$this->column_type[$type],
$auto_increment?'AUTOINCREMENT':''
);
} else {
$column_schema[] = sprintf('%s %s%s %s %s %s %s',
$name,
$this->column_type[$type],
$size?'('.$size.')':'',
$notnull?'NOT NULL':'',
$primary_key?'PRIMARY KEY':'',
isset($default)?"DEFAULT '".$default."'":'',
$auto_increment?'AUTOINCREMENT':''
);
}
if($unique) $unique_list[$unique][] = $name;
else if($index) $index_list[$index][] = $name;
}
$schema = sprintf('CREATE TABLE %s (%s%s) ;', $this->addQuotes($table_name)," ", implode($column_schema,", "));
$this->_query($schema);
if(count($unique_list)) {
foreach($unique_list as $key => $val) {
$query = sprintf('CREATE UNIQUE INDEX %s_%s ON %s (%s)', $this->addQuotes($table_name), $key, $this->addQuotes($table_name), implode(',',$val));
$this->_query($query);
}
}
if(count($index_list)) {
foreach($index_list as $key => $val) {
$query = sprintf('CREATE INDEX %s_%s ON %s (%s)', $this->addQuotes($table_name), $key, $this->addQuotes($table_name), implode(',',$val));
$this->_query($query);
}
}
}
/**
* @brief Return conditional clause
**/
function getCondition($output) {
if(!$output->conditions) return;
$condition = $this->_getCondition($output->conditions,$output->column_type);
if($condition) $condition = ' where '.$condition;
return $condition;
}
function getLeftCondition($conditions,$column_type){
return $this->_getCondition($conditions,$column_type);
}
function _getCondition($conditions,$column_type) {
$condition = '';
foreach($conditions as $val) {
$sub_condition = '';
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;
$name = $v['column'];
$operation = $v['operation'];
$value = $v['value'];
$type = $this->getColumnType($column_type,$name);
$pipe = $v['pipe'];
$value = $this->getConditionValue($name, $value, $operation, $type, $column_type);
if(!$value) $value = $v['value'];
$str = $this->getConditionPart($name, $value, $operation);
if($sub_condition) $sub_condition .= ' '.$pipe.' ';
$sub_condition .= $str;
}
if($sub_condition) {
if($condition && $val['pipe']) $condition .= ' '.$val['pipe'].' ';
$condition .= '('.$sub_condition.')';
}
}
return $condition;
}
/**
* @brief Handle the insertAct
**/
function _executeInsertAct($output) {
// List tables
foreach($output->tables as $key => $val) {
$table_list[] = $this->prefix.$val;
}
// List columns
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';
}
// sql injection 문제로 xml 선언이 number인 경우이면서 넘어온 값이 숫자형이 아니면 숫자형으로 강제 형변환
// elseif(!$value || is_numeric($value)) $value = (int)$value;
else $this->_filterNumber(&$value);
$column_list[] = $name;
$value_list[] = $value;
}
$query = sprintf("insert into %s (%s) values (%s);", implode(',',$table_list), implode(',',$column_list), implode(',', $value_list));
return $this->_query($query);
}
/**
* @brief Handle updateAct
**/
function _executeUpdateAct($output) {
$table_count = count(array_values($output->tables));
// If one day the destination table
if($table_count == 1) {
// List tables
list($target_table) = array_values($output->tables);
$target_table = $this->prefix.$target_table;
// List columns
foreach($output->columns as $key => $val) {
if(!isset($val['value'])) continue;
$name = $val['name'];
$value = $val['value'];
if(strpos($name,'.')!==false&&strpos($value,'.')!==false) $column_list[] = $name.' = '.$value;
else {
if($output->column_type[$name]!='number') $value = "'".$this->addQuotes($value)."'";
// sql injection 문제로 xml 선언이 number인 경우이면서 넘어온 값이 숫자형이 아니면 숫자형으로 강제 형변환
else $this->_filterNumber(&$value);
$column_list[] = sprintf("%s = %s", $name, $value);
}
}
// List the conditional clause
$condition = $this->getCondition($output);
$query = sprintf("update %s set %s %s", $target_table, implode(',',$column_list), $condition);
// trick to handle if targt table to update is more than one (sqlite doesn't support update to multi-tables)
} elseif($table_count == 2) {
// List tables
foreach($output->tables as $key => $val) {
$table_list[$val] = $this->prefix.$key;
}
list($source_table, $target_table) = array_values($table_list);
// List the conditional clause
$condition = $this->getCondition($output);
foreach($table_list as $key => $val) {
$condition = eregi_replace($key.'\\.', $val.'.', $condition);
}
// List columns
foreach($output->columns as $key => $val) {
if(!isset($val['value'])) continue;
$name = $val['name'];
$value = $val['value'];
list($s_prefix, $s_column) = explode('.',$name);
list($t_prefix, $t_column) = explode('.',$value);
$s_table = $table_list[$s_prefix];
$t_table = $table_list[$t_prefix];
$column_list[] = sprintf(' %s = (select %s from %s %s) ', $s_column, $t_column, $t_table, $condition);
}
$query = sprintf('update %s set %s where exists(select * from %s %s)', $source_table, implode(',', $column_list), $target_table, $condition);
} else {
return;
}
return $this->_query($query);
}
/**
* @brief Handle deleteAct
**/
function _executeDeleteAct($output) {
// List tables
foreach($output->tables as $key => $val) {
$table_list[] = $this->prefix.$val;
}
// List the conditional clause
$condition = $this->getCondition($output);
$query = sprintf("delete from %s %s", implode(',',$table_list), $condition);
return $this->_query($query);
}
/**
* @brief Handle selectAct
*
* In order to get a list of pages easily when selecting \n
* it supports a method as navigation
**/
function _executeSelectAct($output) {
// List tables
$table_list = array();
foreach($output->tables as $key => $val) {
$table_list[] = $this->prefix.$val.' as '.$key;
}
$left_join = array();
// why???
$left_tables= (array)$output->left_tables;
foreach($left_tables as $key => $val) {
$condition = $this->_getCondition($output->left_conditions[$key],$output->column_type);
if($condition){
$left_join[] = $val . ' '.$this->prefix.$output->_tables[$key].' as '.$key . ' on ' . $condition . '';
}
}
if(!$output->columns) {
$columns = '*';
} else {
$column_list = array();
foreach($output->columns as $key => $val) {
$name = $val['name'];
$alias = $val['alias'];
if($val['click_count']) $click_count[] = $val['name'];
if(substr($name,-1) == '*') {
$column_list[] = $name;
} elseif(strpos($name,'.')===false && strpos($name,'(')===false) {
if($alias) $column_list[] = sprintf('%s as %s', $name, $alias);
else $column_list[] = sprintf('%s',$name);
} else {
if($alias) $column_list[] = sprintf('%s as %s', $name, $alias);
else $column_list[] = sprintf('%s',$name);
}
}
$columns = implode(',',$column_list);
}
$condition = $this->getCondition($output);
$output->column_list = $column_list;
if($output->list_count && $output->page) return $this->_getNavigationData($table_list, $columns, $left_join, $condition, $output);
// Add a condition to use an index when sorting in order by list_order, update_order
if($output->order) {
$conditions = $this->getConditionList($output);
if(!in_array('list_order', $conditions) && !in_array('update_order', $conditions)) {
foreach($output->order as $key => $val) {
$col = $val[0];
if(!in_array($col, array('list_order','update_order'))) continue;
if($condition) $condition .= sprintf(' and %s < 2100000000 ', $col);
else $condition = sprintf(' where %s < 2100000000 ', $col);
}
}
}
$query = sprintf("select %s from %s %s %s", $columns, implode(',',$table_list),implode(' ',$left_join), $condition);
if(count($output->groups)) $query .= sprintf(' group by %s', implode(',',$output->groups));
if($output->order) {
foreach($output->order as $key => $val) {
$index_list[] = sprintf('%s %s', $val[0], $val[1]);
}
if(count($index_list)) $query .= ' order by '.implode(',',$index_list);
}
// Apply when using list_count
if($output->list_count['value']) $query = sprintf('%s limit %d', $query, $output->list_count['value']);
$query .= (__DEBUG_QUERY__&1 && $output->query_id)?sprintf(' '.$this->comment_syntax,$this->query_id):'';
$result = $this->_query($query);
if($this->isError()) return;
if(count($click_count)>0 && count($output->conditions)>0){
$_query = '';
foreach($click_count as $k => $c) $_query .= sprintf(',%s=%s+1 ',$c,$c);
$_query = sprintf('update %s set %s %s',implode(',',$table_list), substr($_query,1), $condition);
$this->_query($_query);
}
$data = $this->_fetch($result);
$buff = new Object();
$buff->data = $data;
return $buff;
}
/**
* @brief Paging is handled if navigation information exists in the query xml
*
* It is quite convenient although its structure is not good at all .. -_-;
**/
function _getNavigationData($table_list, $columns, $left_join, $condition, $output) {
require_once(_XE_PATH_.'classes/page/PageHandler.class.php');
$column_list = $output->column_list;
/*
// Modified to find total number of SELECT queries having group by clause
// If it works correctly, uncomment the following codes
//
$count_condition = count($output->groups) ? sprintf('%s group by %s', $condition, implode(', ', $output->groups)) : $condition;
$total_count = $this->getCountCache($output->tables, $count_condition);
if($total_count === false) {
$count_query = sprintf("select count(*) as count from %s %s %s", implode(', ', $table_list), implode(' ', $left_join), $count_condition);
if (count($output->groups))
$count_query = sprintf('select count(*) as count from (%s) xet', $count_query);
$result = $this->_query($count_query);
$count_output = $this->_fetch($result);
$total_count = (int)$count_output->count;
$this->putCountCache($output->tables, $count_condition, $total_count);
}
*/
// Get a total count
$count_query = sprintf("select count(*) as count from %s %s %s", implode(',',$table_list),implode(' ',$left_join), $condition);
$count_query .= (__DEBUG_QUERY__&1 && $output->query_id)?sprintf(' '.$this->comment_syntax,$this->query_id . ' count(*)'):'';
$result = $this->_query($count_query);
$count_output = $this->_fetch($result);
$total_count = (int)$count_output->count;
$list_count = $output->list_count['value'];
if(!$list_count) $list_count = 20;
$page_count = $output->page_count['value'];
if(!$page_count) $page_count = 10;
$page = $output->page['value'];
if(!$page) $page = 1;
// Get a total page
if($total_count) $total_page = (int)( ($total_count-1) / $list_count) + 1;
else $total_page = 1;
// Check Page variables
if($page > $total_page) $page = $total_page;
$start_count = ($page-1)*$list_count;
// Add a condition to use an index when sorting in order by list_order, update_order
if($output->order) {
$conditions = $this->getConditionList($output);
if(!in_array('list_order', $conditions) && !in_array('update_order', $conditions)) {
foreach($output->order as $key => $val) {
$col = $val[0];
if(!in_array($col, array('list_order','update_order'))) continue;
if($condition) $condition .= sprintf(' and %s < 2100000000 ', $col);
else $condition = sprintf(' where %s < 2100000000 ', $col);
}
}
}
$query = sprintf("select %s from %s %s %s", $columns, implode(',',$table_list), implode(' ',$left_join), $condition);
if(count($output->groups)) $query .= sprintf(' group by %s', implode(',',$output->groups));
if($output->order) {
foreach($output->order as $key => $val) {
$index_list[] = sprintf('%s %s', $val[0], $val[1]);
}
if(count($index_list)) $query .= ' order by '.implode(',',$index_list);
}
$query = sprintf('%s limit %d, %d', $query, $start_count, $list_count);
$query .= (__DEBUG_QUERY__&1 && $output->query_id)?sprintf(' '.$this->comment_syntax,$this->query_id):'';
$result = $this->_query($query);
if($this->isError()) {
$buff = new Object();
$buff->total_count = 0;
$buff->total_page = 0;
$buff->page = 1;
$buff->data = array();
$buff->page_navigation = new PageHandler($total_count, $total_page, $page, $page_count);
return $buff;
}
if($result) {
$virtual_no = $total_count - ($page-1)*$list_count;
while($tmp = sqlite_fetch_array($result, SQLITE_ASSOC)) {
unset($obj);
foreach($tmp as $key => $val) {
$pos = strpos($key, '.');
if($pos) $key = substr($key, $pos+1);
$obj->{$key} = $val;
}
$data[$virtual_no--] = $obj;
}
}
$buff = new Object();
$buff->total_count = $total_count;
$buff->total_page = $total_page;
$buff->page = $page;
$buff->data = $data;
$buff->page_navigation = new PageHandler($total_count, $total_page, $page, $page_count);
return $buff;
}
}
return new DBSqlite2;
?>

View file

@ -517,7 +517,17 @@
$total_page = 1;
// check the page variables
if ($page > $total_page) $page = $total_page;
if ($page > $total_page) {
// If requested page is bigger than total number of pages, return empty list
$buff = new Object ();
$buff->total_count = $total_count;
$buff->total_page = $total_page;
$buff->page = $page;
$buff->data = array();
$buff->page_navigation = new PageHandler($total_count, $total_page, $page, $page_count);
return $buff;
}
$start_count = ($page - 1) * $list_count;
$this->_prepare($this->getSelectPageSql($queryObject, true, $start_count, $list_count));

View file

@ -18,10 +18,12 @@ class HTMLDisplayHandler {
if(Context::get('module')!='admin' && strpos(Context::get('act'),'Admin') === false){
if ($skin && is_string($skin)){
$theme_skin = explode('.', $skin);
if (count($theme_skin) == 2)
$template_path = sprintf('./themes/%s/modules/%s/', $theme_skin[0], $theme_skin[1]);
else
$template_path = $oModule->getTemplatePath();
$template_path = $oModule->getTemplatePath();
if (count($theme_skin) == 2) {
$theme_path = sprintf('./themes/%s',$theme_skin[0]);
if(substr($theme_path,0,strlen($theme_path)) != $theme_path)
$template_path = sprintf('%s/modules/%s/', $theme_path, $theme_skin[1]);
}
}else{
$template_path = $oModule->getTemplatePath();
}
@ -115,6 +117,8 @@ class HTMLDisplayHandler {
$keys = '('.implode('|', $keys).')';
$output = preg_replace_callback('@(<input)([^>]*?)\sname="'.$keys.'"([^>]*?)/?>@is', array(&$this, '_preserveValue'), $output);
$output = preg_replace_callback('@<select[^>]*\sname="'.$keys.'".+</select>@isU', array(&$this, '_preserveSelectValue'), $output);
$output = preg_replace_callback('@<textarea[^>]*\sname="'.$keys.'".+</textarea>@isU', array(&$this, '_preserveTextAreaValue'), $output);
}
if(__DEBUG__==3) $GLOBALS['__trans_content_elapsed__'] = getMicroTime()-$start;
@ -160,7 +164,7 @@ class HTMLDisplayHandler {
switch($type){
case 'text':
case 'hidden':
$str = preg_replace('@\svalue="[^"]*?"@', ' ', $str).' value="'.$INPUT_ERROR[$match[3]].'"';
$str = preg_replace('@\svalue="[^"]*?"@', ' ', $str).' value="'.htmlspecialchars($INPUT_ERROR[$match[3]]).'"';
break;
case 'password':
$str = preg_replace('@\svalue="[^"]*?"@', ' ', $str);
@ -177,6 +181,32 @@ class HTMLDisplayHandler {
return $str.' />';
}
function _preserveSelectValue($matches)
{
$INPUT_ERROR = Context::get('INPUT_ERROR');
preg_replace('@\sselected(="[^"]*?")?@', ' ', $matches[0]);
preg_match('@<select.*?>@is', $matches[0], $mm);
preg_match_all('@<option[^>]*\svalue="([^"]*)".+</option>@isU', $matches[0], $m);
$key = array_search($INPUT_ERROR[$matches[1]], $m[1]);
if($key === FALSE)
{
return $matches[0];
}
$m[0][$key] = preg_replace('@(\svalue=".*?")@is', '$1 selected="selected"', $m[0][$key]);
return $mm[0].implode('', $m[0]).'</select>';
}
function _preserveTextAreaValue($matches)
{
$INPUT_ERROR = Context::get('INPUT_ERROR');
preg_match('@<textarea.*?>@is', $matches[0], $mm);
return $mm[0].$INPUT_ERROR[$matches[1]].'</textarea>';
}
/**
* @brief add html style code extracted from html body to Context, which will be
* printed inside <header></header> later.

View file

@ -206,13 +206,13 @@
// textarea
case 'textarea' :
$buff .= '<textarea name="'.$column_name.'" class="textarea">'.$value.'</textarea>';
$buff .= '<textarea name="'.$column_name.'" rows="8" cols="42">'.$value.'</textarea>';
break;
// multiple choice
case 'checkbox' :
$buff .= '<ul>';
foreach($default as $v) {
if($value && in_array($v, $value)) $checked = ' checked="checked"';
if($value && in_array(trim($v), $value)) $checked = ' checked="checked"';
else $checked = '';
// Temporary ID for labeling
@ -254,7 +254,7 @@
$buff .=
'<input type="hidden" name="'.$column_name.'" value="'.$value.'" />'.
'<input type="text" id="date_'.$column_name.'" value="'.zdate($value,'Y-m-d').'" class="date" />'."\n".
'<input type="text" id="date_'.$column_name.'" value="'.zdate($value,'Y-m-d').'" class="date" /> <input type="button" value="' . Context::getLang('cmd_delete') . '" id="dateRemover_' . $column_name . '" />'."\n".
'<script type="text/javascript">'."\n".
'(function($){'."\n".
' $(function(){'."\n".
@ -263,6 +263,10 @@
' };'."\n".
' $.extend(option,$.datepicker.regional[\''.Context::getLangType().'\']);'."\n".
' $("#date_'.$column_name.'").datepicker(option);'."\n".
' $("#dateRemover_' . $column_name . '").click(function(){' . "\n" .
' $(this).siblings("input").val("");' . "\n" .
' return false;' . "\n" .
' })' . "\n" .
' });'."\n".
'})(jQuery);'."\n".
'</script>';
@ -294,7 +298,7 @@
break;
// General text
default :
$buff .=' <input type="text" name="'.$column_name.'" value="'.$value.'" class="text" />';
$buff .=' <input type="text" name="'.$column_name.'" value="'.($value ? $value : $default).'" class="text" />';
break;
}
if($this->desc) $buff .= '<p>'.$this->desc.'</p>';

View file

@ -148,7 +148,12 @@ class FileHandler {
*/
function moveFile($source, $target) {
$source = FileHandler::getRealPath($source);
return (file_exists($source) && FileHandler::removeFile($target) && FileHandler::rename($source, $target));
if(!file_exists($source))
{
return FALSE;
}
FileHandler::removeFile($target);
return FileHandler::rename($source, $target);
}
/**
@ -529,24 +534,24 @@ class FileHandler {
switch($type) {
case 'gif' :
if(!function_exists('imagecreatefromgif')) return false;
$source = imagecreatefromgif($source_file);
$source = @imagecreatefromgif($source_file);
break;
// jpg
case 'jpeg' :
case 'jpg' :
if(!function_exists('imagecreatefromjpeg')) return false;
$source = imagecreatefromjpeg($source_file);
$source = @imagecreatefromjpeg($source_file);
break;
// png
case 'png' :
if(!function_exists('imagecreatefrompng')) return false;
$source = imagecreatefrompng($source_file);
$source = @imagecreatefrompng($source_file);
break;
// bmp
case 'wbmp' :
case 'bmp' :
if(!function_exists('imagecreatefromwbmp')) return false;
$source = imagecreatefromwbmp($source_file);
$source = @imagecreatefromwbmp($source_file);
break;
default :
return;
@ -676,5 +681,5 @@ class FileHandler {
}
}
/* End of file FileObject.class.php */
/* Location: ./classes/file/FileObject.class.php */
/* End of file FileHandler.class.php */
/* Location: ./classes/file/FileHandler.class.php */

View file

@ -55,7 +55,17 @@ class Mobile {
function isMobileCheckByAgent()
{
return !!preg_match('/(iPod|iPhone|Android|BlackBerry|SymbianOS|SCH-M\d+|SPH-M\d+|Windows Phone|Dorothy Browser|Googlebot-Mobile)/',$_SERVER['HTTP_USER_AGENT']);
$mobildAgent = array('iPod','iPhone','iPad','Android','BlackBerry','SymbianOS','Bada','Kindle','Wii','SCH-','SPH-','CANU-','Windows Phone','Windows CE','POLARIS','Palm','webOS','Dorothy Browser','IEMobile','MobileSafari','Opera Mobi','Opera Mini','MobileExplorer','Minimo','AvantGo','NetFront','Googlebot-Mobile','Nokia','LGPlayer','SonyEricsson','HTC','hp-tablet','SKT','lgtelecom','Vodafone');
foreach($mobildAgent as $agent)
{
if(strpos($_SERVER['HTTP_USER_AGENT'], $agent) !== FALSE)
{
return TRUE;
}
}
return FALSE;
}
function setMobile($ismobile)

View file

@ -89,6 +89,8 @@
if($this->mid != $module_info->mid) {
$this->mid = $module_info->mid;
Context::set('mid', $module_info->mid, true);
header('location:' . getNotEncodedSiteUrl($site_info->domain, 'mid', $this->mid, 'document_srl', $this->document_srl));
return false;
}
}
// if requested module is different from one of the document, remove the module information retrieved based on the document number

View file

@ -251,7 +251,7 @@ class TemplateHandler {
$generatedHidden = '';
foreach($resultArray AS $key=>$value)
{
$generatedHidden .= '<input type="hidden" name="'.$value.'" value="<?php echo $__Context->'.$value.' ?>">';
$generatedHidden .= '<input type="hidden" name="'.$value.'" value="<?php echo $__Context->'.$value.' ?>" />';
}
$matches[2] = $generatedHidden.$matches[2];
}
@ -396,7 +396,7 @@ class TemplateHandler {
}
if(strpos($node, '|cond="') !== false) {
$node = preg_replace('@(\s[\w:]+="[^"]+?")\|cond="(.+?)"@s', '<?php if($2){ ?>$1<?php } ?>', $node);
$node = preg_replace('@(\s[\w:\-]+="[^"]+?")\|cond="(.+?)"@s', '<?php if($2){ ?>$1<?php } ?>', $node);
$node = $this->_replaceVar($node);
}

View file

@ -103,6 +103,7 @@
if($this->isStarFunction($column_name)){
return $column_name;
}
if(strpos(strtolower($column_name), 'distinct') !== false) return $column_name;
return $this->escapeColumn($column_name);
}
}

View file

@ -1,209 +1,209 @@
<?php
class Argument {
var $value;
var $name;
var $type;
class Argument {
var $isValid;
var $errorMessage;
var $value;
var $name;
var $type;
var $isValid;
var $errorMessage;
var $column_operation;
var $uses_default_value; // Check if arg value is user submnitted or default
var $_value; // Caches escaped and toString value so that the parsing won't happen multiple times;
var $column_operation;
function Argument($name, $value) {
$this->value = $value;
$this->name = $name;
$this->isValid = true;
}
var $_value; // Caches escaped and toString value so that the parsing won't happen multiple times;
function getType() {
if (isset($this->type))
return $this->type;
if (is_string($this->value))
return 'column_name';
return 'number';
}
function Argument($name, $value){
$this->value = $value;
$this->name = $name;
$this->isValid = true;
}
function setColumnType($value) {
$this->type = $value;
}
function getType(){
if(isset($this->type)) return $this->type;
if(is_string($this->value)) return 'column_name';
return 'number';
}
function setColumnOperation($operation) {
$this->column_operation = $operation;
}
function setColumnType($value){
$this->type = $value;
}
function getName() {
return $this->name;
}
function setColumnOperation($operation){
$this->column_operation = $operation;
}
function getName(){
return $this->name;
}
function getValue(){
if(!isset($this->_value)){
function getValue() {
if (!isset($this->_value)) {
$value = $this->getEscapedValue();
$this->_value = $this->toString($value);
}
return $this->_value;
}
return $this->_value;
}
function getColumnOperation(){
return $this->column_operation;
}
function getColumnOperation() {
return $this->column_operation;
}
function getEscapedValue(){
return $this->escapeValue($this->value);
}
function getEscapedValue() {
return $this->escapeValue($this->value);
}
function getUnescapedValue(){
return $this->value;
function getUnescapedValue() {
return $this->value;
}
function toString($value) {
if (is_array($value)) {
if (count($value) === 0)
return '';
if (count($value) === 1 && $value[0] === '')
return '';
return '(' . implode(',', $value) . ')';
}
return $value;
}
function toString($value){
if(is_array($value)){
if(count($value) === 0) return '';
if(count($value) === 1 && $value[0] === '') return '';
return '('.implode(',', $value).')';
}
return $value;
function escapeValue($value) {
$column_type = $this->getType();
if ($column_type == 'column_name') {
$dbParser = DB::getParser();
return $dbParser->parseExpression($value);
}
if (!isset($value))
return null;
function escapeValue($value){
$column_type = $this->getType();
if($column_type == 'column_name'){
$dbParser = DB::getParser();
return $dbParser->parseExpression($value);
if (in_array($column_type, array('date', 'varchar', 'char', 'text', 'bigtext'))) {
if (!is_array($value))
$value = $this->_escapeStringValue($value);
else {
$total = count($value);
for ($i = 0; $i < $total; $i++)
$value[$i] = $this->_escapeStringValue($value[$i]);
//$value[$i] = '\''.$value[$i].'\'';
}
if(!isset($value)) return null;
if(in_array($column_type, array('date', 'varchar', 'char','text', 'bigtext'))){
if(!is_array($value))
$value = $this->_escapeStringValue ($value);
else {
$total = count($value);
for($i = 0; $i < $total; $i++)
$value[$i] = $this->_escapeStringValue($value[$i]);
//$value[$i] = '\''.$value[$i].'\'';
}
}
if($column_type == 'number')
{
if(is_array($value))
{
foreach($value AS $key=>$val)
{
if(isset($val))
{
$value[$key] = (int)$val;
}
}
if($this->uses_default_value) return $value;
if ($column_type == 'number') {
if (is_array($value)) {
foreach ($value AS $key => $val) {
if (isset($val)) {
$value[$key] = (int) $val;
}
}
else
{
if(isset($val))
{
$value = (int)$value;
} else {
$value = (int) $value;
}
}
return $value;
}
function _escapeStringValue($value) {
$db = &DB::getInstance();
$value = $db->addQuotes($value);
return '\'' . $value . '\'';
}
function isValid() {
return $this->isValid;
}
function getErrorMessage() {
return $this->errorMessage;
}
function ensureDefaultValue($default_value) {
if (!isset($this->value) || $this->value == '')
{
$this->value = $default_value;
$this->uses_default_value = true;
}
}
function checkFilter($filter_type) {
if (isset($this->value) && $this->value != '') {
global $lang;
$val = $this->value;
$key = $this->name;
switch ($filter_type) {
case 'email' :
case 'email_address' :
if (!preg_match('/^[_0-9a-z-]+(\.[_0-9a-z-]+)*@[0-9a-z-]+(\.[0-9a-z-]+)*$/is', $val)) {
$this->isValid = false;
$this->errorMessage = new Object(-1, sprintf($lang->filter->invalid_email, $lang->{$key} ? $lang->{$key} : $key));
}
}
}
return $value;
}
function _escapeStringValue($value){
$db = &DB::getInstance();
$value = $db->addQuotes($value);
return '\''.$value.'\'';
}
function isValid(){
return $this->isValid;
}
function getErrorMessage(){
return $this->errorMessage;
}
function ensureDefaultValue($default_value){
if(!isset($this->value) || $this->value == '')
$this->value = $default_value;
}
function checkFilter($filter_type){
if(isset($this->value) && $this->value != ''){
global $lang;
$val = $this->value;
$key = $this->name;
switch($filter_type) {
case 'email' :
case 'email_address' :
if(!preg_match('/^[_0-9a-z-]+(\.[_0-9a-z-]+)*@[0-9a-z-]+(\.[0-9a-z-]+)*$/is', $val)) {
$this->isValid = false;
$this->errorMessage = new Object(-1, sprintf($lang->filter->invalid_email, $lang->{$key} ? $lang->{$key} : $key));
}
break;
case 'homepage' :
if(!preg_match('/^(http|https)+(:\/\/)+[0-9a-z_-]+\.[^ ]+$/is', $val)) {
$this->isValid = false;
$this->errorMessage = new Object(-1, sprintf($lang->filter->invalid_homepage, $lang->{$key} ? $lang->{$key} : $key));
}
break;
case 'userid' :
case 'user_id' :
if(!preg_match('/^[a-zA-Z]+([_0-9a-zA-Z]+)*$/is', $val)) {
$this->isValid = false;
$this->errorMessage = new Object(-1, sprintf($lang->filter->invalid_userid, $lang->{$key} ? $lang->{$key} : $key));
}
break;
case 'number' :
case 'numbers' :
if(is_array($val)) $val = join(',', $val);
if(!preg_match('/^(-?)[0-9]+(,\-?[0-9]+)*$/is', $val)){
$this->isValid = false;
$this->errorMessage = new Object(-1, sprintf($lang->filter->invalid_number, $lang->{$key} ? $lang->{$key} : $key));
}
break;
case 'alpha' :
if(!preg_match('/^[a-z]+$/is', $val)) {
$this->isValid = false;
$this->errorMessage = new Object(-1, sprintf($lang->filter->invalid_alpha, $lang->{$key} ? $lang->{$key} : $key));
}
break;
case 'alpha_number' :
if(!preg_match('/^[0-9a-z]+$/is', $val)) {
$this->isValid = false;
$this->errorMessage = new Object(-1, sprintf($lang->filter->invalid_alpha_number, $lang->{$key} ? $lang->{$key} : $key));
}
break;
}
}
}
function checkMaxLength($length){
if($this->value && (strlen($this->value) > $length)){
global $lang;
$this->isValid = false;
$key = $this->name;
$this->errorMessage = new Object(-1, sprintf($lang->filter->outofrange, $lang->{$key} ? $lang->{$key} : $key));
}
}
function checkMinLength($length){
if($this->value && (strlen($this->value) < $length)){
global $lang;
$this->isValid = false;
$key = $this->name;
$this->errorMessage = new Object(-1, sprintf($lang->filter->outofrange, $lang->{$key} ? $lang->{$key} : $key));
}
}
function checkNotNull(){
if(!isset($this->value)){
global $lang;
$this->isValid = false;
$key = $this->name;
$this->errorMessage = new Object(-1, sprintf($lang->filter->isnull, $lang->{$key} ? $lang->{$key} : $key));
break;
case 'homepage' :
if (!preg_match('/^(http|https)+(:\/\/)+[0-9a-z_-]+\.[^ ]+$/is', $val)) {
$this->isValid = false;
$this->errorMessage = new Object(-1, sprintf($lang->filter->invalid_homepage, $lang->{$key} ? $lang->{$key} : $key));
}
break;
case 'userid' :
case 'user_id' :
if (!preg_match('/^[a-zA-Z]+([_0-9a-zA-Z]+)*$/is', $val)) {
$this->isValid = false;
$this->errorMessage = new Object(-1, sprintf($lang->filter->invalid_userid, $lang->{$key} ? $lang->{$key} : $key));
}
break;
case 'number' :
case 'numbers' :
if (is_array($val))
$val = join(',', $val);
if (!preg_match('/^(-?)[0-9]+(,\-?[0-9]+)*$/is', $val)) {
$this->isValid = false;
$this->errorMessage = new Object(-1, sprintf($lang->filter->invalid_number, $lang->{$key} ? $lang->{$key} : $key));
}
break;
case 'alpha' :
if (!preg_match('/^[a-z]+$/is', $val)) {
$this->isValid = false;
$this->errorMessage = new Object(-1, sprintf($lang->filter->invalid_alpha, $lang->{$key} ? $lang->{$key} : $key));
}
break;
case 'alpha_number' :
if (!preg_match('/^[0-9a-z]+$/is', $val)) {
$this->isValid = false;
$this->errorMessage = new Object(-1, sprintf($lang->filter->invalid_alpha_number, $lang->{$key} ? $lang->{$key} : $key));
}
break;
}
}
}
function checkMaxLength($length) {
if ($this->value && (strlen($this->value) > $length)) {
global $lang;
$this->isValid = false;
$key = $this->name;
$this->errorMessage = new Object(-1, sprintf($lang->filter->outofrange, $lang->{$key} ? $lang->{$key} : $key));
}
}
function checkMinLength($length) {
if ($this->value && (strlen($this->value) < $length)) {
global $lang;
$this->isValid = false;
$key = $this->name;
$this->errorMessage = new Object(-1, sprintf($lang->filter->outofrange, $lang->{$key} ? $lang->{$key} : $key));
}
}
function checkNotNull() {
if (!isset($this->value)) {
global $lang;
$this->isValid = false;
$key = $this->name;
$this->errorMessage = new Object(-1, sprintf($lang->filter->isnull, $lang->{$key} ? $lang->{$key} : $key));
}
}
}
?>

View file

@ -1,104 +1,115 @@
<?php
class QueryArgument {
var $argument_name;
var $variable_name;
var $argument_validator;
var $column_name;
var $operation;
class QueryArgument {
var $ignore_value;
var $argument_name;
var $variable_name;
var $argument_validator;
var $column_name;
var $table_name;
var $operation;
var $ignore_value;
function QueryArgument($tag, $ignore_value = false){
static $number_of_arguments = 0;
function QueryArgument($tag, $ignore_value = false) {
static $number_of_arguments = 0;
$this->argument_name = $tag->attrs->var;
if(!$this->argument_name) $this->argument_name = str_replace('.', '_',$tag->attrs->name);
if(!$this->argument_name) $this->argument_name = str_replace('.', '_',$tag->attrs->column);
$this->argument_name = $tag->attrs->var;
if (!$this->argument_name)
$this->argument_name = str_replace('.', '_', $tag->attrs->name);
if (!$this->argument_name)
$this->argument_name = str_replace('.', '_', $tag->attrs->column);
$this->variable_name = $this->argument_name;
$this->variable_name = $this->argument_name;
$number_of_arguments++;
$this->argument_name .= $number_of_arguments;
$number_of_arguments++;
$this->argument_name .= $number_of_arguments;
$name = $tag->attrs->name;
if(!$name) $name = $tag->attrs->column;
if(strpos($name, '.') === false) $this->column_name = $name;
else {
list($prefix, $name) = explode('.', $name);
$this->column_name = $name;
}
if($tag->attrs->operation) $this->operation = $tag->attrs->operation;
$this->argument_validator = new QueryArgumentValidator($tag, $this);
$this->ignore_value = $ignore_value;
$name = $tag->attrs->name;
if (!$name)
$name = $tag->attrs->column;
if (strpos($name, '.') === false)
$this->column_name = $name;
else {
list($prefix, $name) = explode('.', $name);
$this->column_name = $name;
$this->table_name = $prefix;
}
function getArgumentName(){
return $this->argument_name;
}
function getColumnName(){
return $this->column_name;
}
function getValidatorString(){
return $this->argument_validator->toString();
}
function isConditionArgument(){
if($this->operation) return true;
return false;
}
function toString(){
if($this->isConditionArgument()){
// Instantiation
$arg = sprintf("\n$%s_argument = new ConditionArgument('%s', %s, '%s');\n"
, $this->argument_name
, $this->variable_name
, '$args->'.$this->variable_name
, $this->operation
);
// Call methods to validate argument and ensure default value
$arg .= $this->argument_validator->toString();
// Prepare condition string
$arg .= sprintf("$%s_argument->createConditionValue();\n"
, $this->argument_name
);
// Check that argument passed validation, else return
$arg .= sprintf("if(!$%s_argument->isValid()) return $%s_argument->getErrorMessage();\n"
, $this->argument_name
, $this->argument_name
);
}
else {
$arg = sprintf("\n$%s_argument = new Argument('%s', %s);\n"
, $this->argument_name
, $this->variable_name
, $this->ignore_value ? 'null' : '$args->'.$this->variable_name);
$arg .= $this->argument_validator->toString();
$arg .= sprintf("if(!$%s_argument->isValid()) return $%s_argument->getErrorMessage();\n"
, $this->argument_name
, $this->argument_name
);
}
// If the argument is null, skip it
if($this->argument_validator->isIgnorable()){
$arg = sprintf("if(isset(%s)) {", '$args->'.$this->variable_name)
. $arg
. sprintf("} else \n$%s_argument = null;", $this->argument_name);
}
return $arg;
}
if ($tag->attrs->operation)
$this->operation = $tag->attrs->operation;
$this->argument_validator = new QueryArgumentValidator($tag, $this);
$this->ignore_value = $ignore_value;
}
?>
function getArgumentName() {
return $this->argument_name;
}
function getColumnName() {
return $this->column_name;
}
function getTableName(){
return $this->table_name;
}
function getValidatorString() {
return $this->argument_validator->toString();
}
function isConditionArgument() {
if ($this->operation)
return true;
return false;
}
function toString() {
if ($this->isConditionArgument()) {
// Instantiation
$arg = sprintf("\n" . '${\'%s_argument\'} = new ConditionArgument(\'%s\', %s, \'%s\');' . "\n"
, $this->argument_name
, $this->variable_name
, '$args->' . $this->variable_name
, $this->operation
);
// Call methods to validate argument and ensure default value
$arg .= $this->argument_validator->toString();
// Prepare condition string
$arg .= sprintf('${\'%s_argument\'}->createConditionValue();' . "\n"
, $this->argument_name
);
// Check that argument passed validation, else return
$arg .= sprintf('if(!${\'%s_argument\'}->isValid()) return ${\'%s_argument\'}->getErrorMessage();' . "\n"
, $this->argument_name
, $this->argument_name
);
} else {
$arg = sprintf("\n" . '${\'%s_argument\'} = new Argument(\'%s\', %s);' . "\n"
, $this->argument_name
, $this->variable_name
, $this->ignore_value ? 'null' : '$args->' . $this->variable_name);
$arg .= $this->argument_validator->toString();
$arg .= sprintf('if(!${\'%s_argument\'}->isValid()) return ${\'%s_argument\'}->getErrorMessage();' . "\n"
, $this->argument_name
, $this->argument_name
);
}
// If the argument is null, skip it
if ($this->argument_validator->isIgnorable()) {
$arg = sprintf("if(isset(%s)) {", '$args->' . $this->variable_name)
. $arg
. sprintf("} else\n" . '${\'%s_argument\'} = null;', $this->argument_name);
}
return $arg;
}
}
?>

View file

@ -2,7 +2,7 @@
class SortQueryArgument extends QueryArgument{
function toString(){
$arg = sprintf("\n$%s_argument = new SortArgument('%s', %s);\n"
$arg = sprintf("\n" . '${\'%s_argument\'} = new SortArgument(\'%s\', %s);' . "\n"
, $this->argument_name
, $this->argument_name
, '$args->'.$this->variable_name);
@ -10,7 +10,7 @@
$arg .= $this->argument_validator->toString();
$arg .= sprintf("if(!$%s_argument->isValid()) return $%s_argument->getErrorMessage();\n"
$arg .= sprintf('if(!${\'%s_argument\'}->isValid()) return ${\'%s_argument\'}->getErrorMessage();' . "\n"
, $this->argument_name
, $this->argument_name
);

View file

@ -30,19 +30,19 @@
function toString(){
$validator = '';
if($this->filter){
$validator .= sprintf("$%s_argument->checkFilter('%s');\n"
$validator .= sprintf('${\'%s_argument\'}->checkFilter(\'%s\');' . "\n"
, $this->argument_name
, $this->filter
);
}
if($this->min_length){
$validator .= sprintf("$%s_argument->checkMinLength(%s);\n"
$validator .= sprintf('${\'%s_argument\'}->checkMinLength(%s);' . "\n"
, $this->argument_name
, $this->min_length
);
}
if($this->max_length){
$validator .= sprintf("$%s_argument->checkMaxLength(%s);\n"
$validator .= sprintf('${\'%s_argument\'}->checkMaxLength(%s);'. "\n"
, $this->argument_name
, $this->max_length
);
@ -52,17 +52,17 @@
if($this->default_value->isSequence())
$validator .= '$db = &DB::getInstance(); $sequence = $db->getNextSequence(); ';
if($this->default_value->isOperation())
$validator .= sprintf("$%s_argument->setColumnOperation('%s');\n"
$validator .= sprintf('${\'%s_argument\'}->setColumnOperation(\'%s\');' . "\n"
, $this->argument_name
, $this->default_value->getOperation()
);
$validator .= sprintf("$%s_argument->ensureDefaultValue(%s);\n"
$validator .= sprintf('${\'%s_argument\'}->ensureDefaultValue(%s);' . "\n"
, $this->argument_name
, $this->default_value->toString()
);
}
if($this->notnull){
$validator .= sprintf("$%s_argument->checkNotNull();\n"
$validator .= sprintf('${\'%s_argument\'}->checkNotNull();' . "\n"
, $this->argument_name
);
}
@ -70,4 +70,4 @@
}
}
?>
?>

View file

@ -18,7 +18,7 @@
}
function getExpressionString(){
return sprintf('new InsertExpression(\'%s\', $%s_argument)'
return sprintf('new InsertExpression(\'%s\', ${\'%s_argument\'})'
, $this->name
, $this->argument->argument_name);
}
@ -28,4 +28,4 @@
}
}
?>
?>

View file

@ -44,7 +44,7 @@
function getExpressionString(){
if($this->argument)
return sprintf('new UpdateExpression(\'%s\', $%s_argument)'
return sprintf('new UpdateExpression(\'%s\', ${\'%s_argument\'})'
, $this->name
, $this->argument->argument_name);
else {
@ -59,4 +59,4 @@
}
}
?>
?>

View file

@ -28,7 +28,7 @@
}
function toString(){
return sprintf("new OrderByColumn(\$%s_argument, %s)", $this->argument->getArgumentName(), $this->sort_order);
return sprintf('new OrderByColumn(${\'%s_argument\'}, %s)', $this->argument->getArgumentName(), $this->sort_order);
}
function getArguments(){
@ -40,4 +40,4 @@
}
}
?>
?>

View file

@ -19,12 +19,12 @@
}
function toString(){
if ($this->page)return sprintf("new Limit(\$%s_argument, \$%s_argument, \$%s_argument)", $this->list_count->getArgumentName(), $this->page->getArgumentName(), $this->page_count->getArgumentName());
else return sprintf("new Limit(\$%s_argument)", $this->list_count->getArgumentName());
if ($this->page)return sprintf('new Limit(${\'%s_argument\'}, ${\'%s_argument\'}, ${\'%s_argument\'})', $this->list_count->getArgumentName(), $this->page->getArgumentName(), $this->page_count->getArgumentName());
else return sprintf('new Limit(${\'%s_argument\'})', $this->list_count->getArgumentName());
}
function getArguments(){
return $this->arguments;
}
}
?>
?>

View file

@ -1,12 +1,12 @@
<?php
class QueryTag {
var $action;
var $query_id;
var $priority;
var $column_type;
var $query;
//xml tags
var $columns;
var $tables;
@ -17,22 +17,22 @@ class QueryTag {
var $preBuff;
var $buff;
var $isSubQuery;
var $join_type;
var $join_type;
var $alias;
function QueryTag($query, $isSubQuery = false){
function QueryTag($query, $isSubQuery = false) {
$this->action = $query->attrs->action;
$this->query_id = $query->attrs->id;
$this->priority = $query->attrs->priority;
$this->query = $query;
$this->isSubQuery = $isSubQuery;
if($this->isSubQuery) $this->action = 'select';
if($query->attrs->alias){
$dbParser = DB::getParser();
$this->alias = $dbParser->escape($query->attrs->alias);
}
$this->join_type = $query->attrs->join_type;
if ($this->isSubQuery)
$this->action = 'select';
if ($query->attrs->alias) {
$dbParser = DB::getParser();
$this->alias = $dbParser->escape($query->attrs->alias);
}
$this->join_type = $query->attrs->join_type;
$this->getColumns();
$tables = $this->getTables();
@ -44,155 +44,175 @@ class QueryTag {
$this->getBuff();
}
function show(){
function show() {
return true;
}
function getQueryId(){
function getQueryId() {
return $this->query->attrs->query_id ? $this->query->attrs->query_id : $this->query->attrs->id;
}
function getPriority(){
function getPriority() {
return $this->query->attrs->priority;
}
function getAction(){
function getAction() {
return $this->query->attrs->action;
}
function setTableColumnTypes($tables){
function setTableColumnTypes($tables) {
$query_id = $this->getQueryId();
if(!isset($this->column_type[$query_id])){
if (!isset($this->column_type[$query_id])) {
$table_tags = $tables->getTables();
$column_type = array();
foreach($table_tags as $table_tag){
if(is_a($table_tag, 'TableTag')){
$tag_column_type = QueryParser::getTableInfo($query_id, $table_tag->getTableName());
$column_type = array_merge($column_type, $tag_column_type);
}
foreach ($table_tags as $table_tag) {
if (is_a($table_tag, 'TableTag')) {
$table_name = $table_tag->getTableName();
$table_alias = $table_tag->getTableAlias();
$tag_column_type = QueryParser::getTableInfo($query_id, $table_name);
$column_type[$table_alias] = $tag_column_type;
}
}
$this->column_type[$query_id] = $column_type;
}
}
function getColumns(){
if($this->action == 'select'){
return $this->columns = new SelectColumnsTag($this->query->columns);
}else if($this->action == 'insert'){
return $this->columns = new InsertColumnsTag($this->query->columns->column);
}else if($this->action == 'update') {
return $this->columns = new UpdateColumnsTag($this->query->columns->column);
}else if($this->action == 'delete') {
return $this->columns = null;
function getColumns() {
if ($this->action == 'select') {
return $this->columns = new SelectColumnsTag($this->query->columns);
} else if ($this->action == 'insert') {
return $this->columns = new InsertColumnsTag($this->query->columns->column);
} else if ($this->action == 'update') {
return $this->columns = new UpdateColumnsTag($this->query->columns->column);
} else if ($this->action == 'delete') {
return $this->columns = null;
}
}
function getPrebuff(){
function getPrebuff() {
// TODO Check if this work with arguments in join clause
$arguments = $this->getArguments();
$prebuff = '';
foreach($arguments as $argument){
if(isset($argument)){
$arg_name = $argument->getArgumentName();
if($arg_name){
$prebuff .= $argument->toString();
$column_type = $this->column_type[$this->getQueryId()][$argument->getColumnName()];
if(isset($column_type))
$prebuff .= sprintf("if($%s_argument !== null) $%s_argument->setColumnType('%s');\n"
, $arg_name
, $arg_name
, $column_type );
}
}
foreach ($arguments as $argument) {
if (isset($argument)) {
$arg_name = $argument->getArgumentName();
if ($arg_name) {
unset($column_type);
$prebuff .= $argument->toString();
$table_alias = $argument->getTableName();
if(isset($table_alias))
{
$column_type = $this->column_type[$this->getQueryId()][$table_alias][$argument->getColumnName()];
}
else
{
$current_tables = $this->column_type[$this->getQueryId()];
$column_name = $argument->getColumnName();
foreach($current_tables as $current_table)
{
if($current_table[$column_name])
$column_type = $current_table[$column_name];
}
}
if (isset($column_type))
$prebuff .= sprintf('if(${\'%s_argument\'} !== null) ${\'%s_argument\'}->setColumnType(\'%s\');' . "\n"
, $arg_name
, $arg_name
, $column_type);
}
}
}
$prebuff .= "\n";
return $this->preBuff = $prebuff;
}
function getBuff(){
function getBuff() {
$buff = '';
if($this->isSubQuery){
if ($this->isSubQuery) {
$buff = 'new Subquery(';
$buff .= "'" . $this->alias . '\', ';
$buff .= ($this->columns ? $this->columns->toString() : 'null' ). ', '.PHP_EOL;
$buff .= $this->tables->toString() .','.PHP_EOL;
$buff .= $this->conditions->toString() .',' .PHP_EOL;
$buff .= $this->groups->toString() . ',' .PHP_EOL;
$buff .= $this->navigation->getOrderByString() .','.PHP_EOL;
$limit = $this->navigation->getLimitString() ;
$buff .= $limit ? $limit : 'null' . PHP_EOL;
$buff .= $this->join_type ? "'" . $this->join_type . "'" : '';
$buff .= ($this->columns ? $this->columns->toString() : 'null' ) . ', ' . PHP_EOL;
$buff .= $this->tables->toString() . ',' . PHP_EOL;
$buff .= $this->conditions->toString() . ',' . PHP_EOL;
$buff .= $this->groups->toString() . ',' . PHP_EOL;
$buff .= $this->navigation->getOrderByString() . ',' . PHP_EOL;
$limit = $this->navigation->getLimitString();
$buff .= $limit ? $limit : 'null' . PHP_EOL;
$buff .= $this->join_type ? "'" . $this->join_type . "'" : '';
$buff .= ')';
$this->buff = $buff;
return $this->buff;
}
$buff .= '$query = new Query();'.PHP_EOL;
$buff .= '$query = new Query();' . PHP_EOL;
$buff .= sprintf('$query->setQueryId("%s");%s', $this->query_id, "\n");
$buff .= sprintf('$query->setAction("%s");%s', $this->action, "\n");
$buff .= sprintf('$query->setPriority("%s");%s', $this->priority, "\n");
$buff .= $this->preBuff;
if($this->columns)
$buff .= '$query->setColumns(' . $this->columns->toString() . ');'.PHP_EOL;
if ($this->columns)
$buff .= '$query->setColumns(' . $this->columns->toString() . ');' . PHP_EOL;
$buff .= '$query->setTables(' . $this->tables->toString() .');'.PHP_EOL;
$buff .= '$query->setConditions('.$this->conditions->toString() .');'.PHP_EOL;
$buff .= '$query->setGroups(' . $this->groups->toString() . ');'.PHP_EOL;
$buff .= '$query->setOrder(' . $this->navigation->getOrderByString() .');'.PHP_EOL;
$buff .= '$query->setLimit(' . $this->navigation->getLimitString() .');'.PHP_EOL;
$buff .= '$query->setTables(' . $this->tables->toString() . ');' . PHP_EOL;
$buff .= '$query->setConditions(' . $this->conditions->toString() . ');' . PHP_EOL;
$buff .= '$query->setGroups(' . $this->groups->toString() . ');' . PHP_EOL;
$buff .= '$query->setOrder(' . $this->navigation->getOrderByString() . ');' . PHP_EOL;
$buff .= '$query->setLimit(' . $this->navigation->getLimitString() . ');' . PHP_EOL;
$this->buff = $buff;
return $this->buff;
}
function getTables(){
if($this->query->index_hint->attrs->for == 'ALL' || Context::getDBType() == strtolower($this->query->index_hint->attrs->for))
return $this->tables = new TablesTag($this->query->tables, $this->query->index_hint);
else
return $this->tables = new TablesTag($this->query->tables);
function getTables() {
if ($this->query->index_hint->attrs->for == 'ALL' || Context::getDBType() == strtolower($this->query->index_hint->attrs->for))
return $this->tables = new TablesTag($this->query->tables, $this->query->index_hint);
else
return $this->tables = new TablesTag($this->query->tables);
}
function getConditions(){
function getConditions() {
return $this->conditions = new ConditionsTag($this->query->conditions);
}
function getGroups(){
function getGroups() {
return $this->groups = new GroupsTag($this->query->groups->group);
}
function getNavigation(){
function getNavigation() {
return $this->navigation = new NavigationTag($this->query->navigation);
}
function toString(){
function toString() {
return $this->buff;
}
function getTableString(){
function getTableString() {
return $this->buff;
}
function getConditionString(){
function getConditionString() {
return $this->buff;
}
function getExpressionString(){
function getExpressionString() {
return $this->buff;
}
function getArguments(){
function getArguments() {
$arguments = array();
if($this->columns)
if ($this->columns)
$arguments = array_merge($arguments, $this->columns->getArguments());
$arguments = array_merge($arguments, $this->tables->getArguments());
$arguments = array_merge($arguments, $this->tables->getArguments());
$arguments = array_merge($arguments, $this->conditions->getArguments());
$arguments = array_merge($arguments, $this->navigation->getArguments());
return $arguments;
}
}
?>

View file

@ -1,6 +1,7 @@
@charset "utf-8";
/* Element Reset */
body,table,input,textarea,select,button{font-family:Tahoma,Geneva,sans-serif;font-size:12px}
body{word-break:break-all;word-wrap:break-word}
img{border:0}
/* Button */
.btn{position:relative;display:inline-block;vertical-align:middle}
@ -8,8 +9,9 @@ img{border:0}
.btn *[type=submit][disabled=disabled],
.btn *[type=button][disabled=disabled]{opacity:.5;*filter:alpha(opacity=50)}
.btn a,
.btn input[type=button],
.btn button[type=button]{border-color:#ccc;color:#333 !important;background:#eee -webkit-gradient(linear,0% 0%,0% 100%,from(#fff),to(#ddd));background:#eee -moz-linear-gradient(top,#fff,#ddd);background-color:#eee;text-shadow:1px 1px 0 #fff;filter:progid:DXImageTransform.Microsoft.gradient(startColorStr=#ffffff, endColorStr=#dddddd)}
.btn input,
.btn input[type=submit],
.btn button[type=submit]{border-color:#666;background:#333 -webkit-gradient(linear,0% 0%,0% 100%,from(#777),to(#777),color-stop(0.5,#333),color-stop(0.5,#000)) !important;background:#333 -moz-linear-gradient(top,#777,#000) !important;background-color:#333 !important;color:#ffc !important;filter:progid:DXImageTransform.Microsoft.gradient(startColorStr=#777777, endColorStr=#333333)}
.btn a{height:22px}
.btn.medium *{padding:0 12px;font-size:16px;height:30px;line-height:28px}

File diff suppressed because one or more lines are too long

View file

@ -0,0 +1,121 @@
Change Log
______________
1.1.6
Corrected bug preventing selections inside input values in some browsers - the onselectstart function no longer captures on input boxes.
Added support for up/down arrow adjustments of the currently focused input box making the picker more keyboard friendly.
Added ticks around the backgroundImage assignments to correct for paths with whitespace.
1.1.5
Corrected Color object constructor to allow setting of the "alpha" value as per the documentation which previously didn't work.
Added support for translucency for quickList colors with checkered background - Only available if "alphaSupport" is enabled.
Restricted default color to "alpha" of 255 if "alphaSupport" is disabled - It will now assign an explicit alpha of 255 when disabled.
Added new setting variable "alphaPrecision" which indicates the number of decimal points to allow in the alpha percentage display - Now defaults to 0.
1.1.4
Changed "alpha" range from 0-100 to 0-255 to correct truncating and rounding errors caused by attempting to get an integer percentage that matches a hex value.
"alpha" percentage display will now show up to 1 decimal point for more accurate representation of "alpha" value.
Color object now accepts "alpha" values in a range of 0-255 and also returns the same when getting the "alpha" value. You will need to run ((alpha * 100) / 255) to retrieve a percentage value.
Reworked the table layout and labels to remove the need for the label to reference the radio input box. This reduces injected code and removes the need to generate unique ids on the radio buttons.
Transparent/invisible caret on NULL color is now corrected - uses the same caret color as a white color.
Setting a binded input value of "" or no value attribute will now create a NULL color on initialization instead of the settings default color.
Added a dynamic, invisible "iframe" behind a dialog picker in all browsers that fail jQuery.support.boxModel (currently IE <= 7 Quirks Mode). This prevents "select" box from showing through the picker.
1.1.3
Now adding popup color pickers to document.body instead of inline with the popup control. This corrects issues with the picker not showing beyond a relative container scope.
No longer need to hide popup icon in Internet Explorer for picker elements lower in the DOM than the currently active one since the picker itself is attached to document.body (it is always higher in the DOM now).
Popup pickers are now bring-to-front selectable. Clicking on the picker will bring it above all other pickers on the page instead of having to drag one out from underneath another.
Corrected jPicker.List/setTimeout bug which allowed an instance to bind to the List in an order other than the order the initialization function was called.
Added a updateInputColor option (default true) to allow for a binded input field that does not automatically update its background/text color.
1.1.2
Reworked the find methods and contexts for element searches. Now using ":first" instead of ".eq(0)" to take advantage of early out searches. Much faster initialization of the picker, on the order of 6 times.
Now using setTimeout for calling visual updates. Dramatically improved marker dragging in all browsers. Reduces blocking as re-rendering is internal to the browser and independent of the other javascript still in progress.
Marker updates can now cancel a previous valueChanged event when a new mouseMove event comes in. IE8 marker dragging is still slower, much over 5 times faster than it was.
Reworked entire quickPick list creation. It now adds up source code and does a single "html" method instead of multiple "append" methods. This is a large part of the speed increase on initialization.
The vast majority of all running scripts on both initialization and dragging is now occupied altering the style rules and finding elements (init only) instead of jPicker code.
All methods previously called with global context now use the "call" method for using the context of the class running the method. "this" in a callback is now the DOM node (jQuery style) and jPicker instead of "window".
Added "effects" section of window settings to allow different show/hide effects and durations.
Removed change log and read me from the full source code to separate files (ChangeLog.txt and ReadMe.txt) and an HTML demonstration/documentation page (Example.txt).
1.1.1
Correct IE exception caused by attempting to set "#transparent" to CSS background-color.
1.1.0
Reworked nearly the entire plugin including the internal and external event model, bindings, DOM searches, classes, and overall presentation.
The Color object now supports a changed event that you can bind to (or just bind to the picker events still included).
Event order has been reversed, instead of a change event on the map/bar/text fields updating the display, they now update the Color object which then fires the events that update the display.
alphaSupport re-implemented by request - default behavior is off.
Hex code now only 6 characters again.
Color object can now have its value changed from code, using the "val" method, and it will fire all events necessary to update the display.
Removed all "get_*" methods from the color object, instead opting for a single "val" method for getting and setting, more in line with familiar jQuery methods.
Better rendering for all IE versions in Quirks mode.
1.0.13
Updated transparency algorithm for red/green/blue color modes. The algorithm from John Dyers' color picker was close but incorrect. Bar colors are now pixel perfect with the new algorithm.
Changed from using "background-position" on the color maps to an element of full height using the "top" attribute for image-map location using "overflow: hidden" to hide overdraw.
IE7/8 ignores opacity on elements taller than 4096px. Image maps therefore no longer include a blank first map so the Bar is just under 4096. Blank is now accomplished by setting the "top" setting to below the map display.
New colorBar picker image that does not draw outside of the element since the elements now hide overdraw.
Added IE5.5/6 support for the picker. This is why it now uses maps of full height and the "top" attribute for map locations.
Moved the images in the maps to 4 pixels apart from each other. IE7/8 change the first pixel of the bottom-border of 2px to partially transparent showing a portion of a different color map without this.
1.0.12
Added minified CSS file.
Added IE7/8 Quirks Mode support.
Added configurable string constants for all text and tooltips. You can now change the default values for different languages.
Privatized the RGBA values in the Color object for better NULL handling. YOU MUST USE THE NEW GET FUNCTIONS TO ACCESS THE COLOR PROPERTIES.
Better NULL color handling and an additional "No Color Selected" quick pick color.
More consistent behavior across multiple versions of browsers.
Added alpha response to the binded color picker icon.
Removed "alphaSupport" variable. It is now always supported.
1.0.11b
Corrected NULL behavior in IE. jQuery was getting an exception when attempting to assign a backgroundColor style of '#'. Now assigns 'transparent' if color is NULL.
Can now create new Color object WITH OR WITHOUT the '#' prefix.
1.0.11
Added ability for NULL colors (delete the hex value). Color will be returned as color.hex == ''. Can set the default color to an empty hex string as well.
cancelCallback now returns the original color for use in programming responses.
1.0.10
Corrected table layout and tweaked display for more consisent presentation. Nice catch from Jonathan Pasquier.
1.0.9
Added optional title variable for each jPicker window.
1.0.8
Moved all images into a few sprites - now using backgroundPosition to change color maps and bars instead of changing the image - this should be faster to download and run.
1.0.7
RENAMED CSS FILE TO INCLUDE VERSION NUMBER!!! YOU MUST USE THIS VERSIONED CSS FILE!!! There will be no need to do your own CSS version number increments from now on.
Added opacity feedback to color preview boxes.
Removed reliance on "id" value of containing object. Subobjects are now found by class and container instead of id's. This drastically reduces injected code.
Removed (jQuery).jPicker.getListElementById(id) function since "id" is no longer incorporated or required.
1.0.6
Corrected picker bugs introduced with 1.0.5.
Removed alpha slider bar until activated - default behavior for alpha is now OFF.
Corrected Color constructor bug not allowing values of 0 for initial value (it was evaluating false and missing the init code - Thanks Pavol).
Removed title tags (tooltips) from color maps and bars - They get in the way in some browsers (e.g. IE - dragging marker does NOT prevent or hide the tooltip).
THERE WERE CSS FILE CHANGES WITH THIS UPDATE!!! IF YOU USE NEVER-EXPIRE HEADERS, YOU WILL NEED TO INCREMENT YOUR CSS FILE VERSION NUMBER!!!
1.0.5
Added opacity support to picker and color/callback methods. New property "a" (alpha - range from 0-100) in all color objects now - defaults to 100% opaque. (Thank you Pavol)
Added title attributes to input elements - gives short tooltip directions on what button or field does.
Commit callback used to fire on control initialization (twice actually) - This has been corrected, it does not fire on initialization.
THERE WERE CSS FILE CHANGES WITH THIS UPDATE!!! IF YOU USE NEVER-EXPIRE HEADERS, YOU WILL NEED TO INCREMENT YOUR CSS FILE VERSION NUMBER!!!
1.0.4
Added ability for smaller picker icon with expandable window on any DOM element (not just input).
"draggable" property renamed to "expandable" and its scope increased to create small picker icon or large static picker.
1.0.3
Added cancelCallback function for registering an external function when user clicks cancel button. (Thank you Jeff and Pavol)
1.0.2
Random bug fixes - speed concerns.
1.0.1
Corrected closure based memeory leak - there may be others?
1.0.0
First Release.

View file

@ -0,0 +1,47 @@
jPicker 1.1.6
jQuery Plugin for Photoshop style color picker
Copyright (c) 2010 Christopher T. Tillman
Digital Magic Productions, Inc. (http://www.digitalmagicpro.com/)
MIT style license, FREE to use, alter, copy, sell, and especially ENHANCE
Painstakingly ported from John Dyers' excellent work on his own color picker based on the Prototype framework.
John Dyers' website: (http://johndyer.name)
Color Picker page: (http://johndyer.name/post/2007/09/PhotoShop-like-JavaScript-Color-Picker.aspx)
jPicker is a fast, lightweight jQuery plugin for including an advanced color picker in your web projects.
It has been painstakenly ported from John Dyers' awesome work on his picker using the Prototype framework.
jPicker supports all current browsers and has been extensively tested in Chrome, Firefox, IE5.5+, Safari,
and Opera.
If you are updating a current version, you MUST always use the CSS and image files from the download as
there may have been changes.
If you are moving from a V1.0.* version, you MUST read the docs below to implement some changes to the
Color object returned by the callback functions.
Known Issues
______________
Attaching multiple jPicker objects on a single page will slow performance.
jPicker creates a new instance of the picker for every element. Performance will suffer when binding dozens of instances.
Coming Soon
______________
Will consider supporting jQuery ThemeRoller CSS API for theming the UI if demand exists.
Planned For Future Release
______________
Move the jPicker object to a single instance that all selection instances point to.
- This will result in much faster operation and initialization for pages with multiple pickers.
Add activateCallback option for calling a callback function when the jPicker is activated or its binding is switched to a different picker element.
Add multiple window modes for picker operation, include modal, popup, windowed, and exclusive.

View file

@ -1,103 +0,0 @@
<public:component>
<public:attach event="onpropertychange" onevent="iePNGFix(0)" />
<script type="text/javascript">
// IE5.5+ PNG Alpha Fix v1.0
// (c) 2004-2008 Angus Turnbull http://www.twinhelix.com
// This is licensed under the GNU LGPL, version 2.1 or later.
// For details, see: http://creativecommons.org/licenses/LGPL/2.1/
// This must be a path to a blank image, relative to the HTML document(s).
// In production use I suggest '/images/blank.gif' or similar. That's all!
if (typeof blankImg == 'undefined') var blankImg = 'blank.gif';
function filt(s, b)
{
var f = 'DXImageTransform.Microsoft.AlphaImageLoader';
var sM = (currentStyle.backgroundRepeat == 'no-repeat') ? 'crop' : 'scale';
s = (s || '').replace(/\(/g, '%28').replace(/\)/g, '%29');
if (s && !(/IMG|INPUT/.test(nodeName) && !b) &&
currentStyle.width == 'auto' && currentStyle.height == 'auto')
{
style.width = offsetWidth + 'px';
style.height = clientHeight + 'px';
if (currentStyle.display == 'inline') style.display = 'inline-block';
}
if (filters[f])
{
filters[f].enabled = s ? true : false;
if (s) with (filters[f]) { src = s }
}
else if (s) style.filter = 'progid:'+f+'(src="'+s+'",sizingMethod="' + sM + '")';
}
function iePNGFix(init)
{
if (!/MSIE (5\.5|6)/.test(navigator.userAgent) || typeof filters == 'unknown') return;
var evt = init ? { propertyName: 'src,background' } : event;
var isSrc = /src/.test(evt.propertyName);
var isBg = /background/.test(evt.propertyName);
var isClass = !init &&
((this.className != this._png_class) && (this.className || this._png_class));
if (!(isSrc || isBg || isClass)) return;
this._png_class = this.className;
var blank = blankImg.match(/([^\/]+)$/)[1];
// Required for Whatever:hover support - erase any set BG if className changes.
if (isClass && ((style.backgroundImage.indexOf('url(') == -1) ||
(style.backgroundImage.indexOf(blank) > -1)))
{
setTimeout(function() { this.style.backgroundImage = '' }, 0);
return;
}
if (isSrc && this.src && /IMG|INPUT/.test(nodeName))
{
if ((/\.png/i).test(src))
{
filt(src, 1);
src = blankImg;
}
else if (src.indexOf(blank) == -1) filt();
}
var bgSrc = currentStyle.backgroundImage || style.backgroundImage;
if ((bgSrc + this.src).indexOf(blank) == -1)
{
var bgPNG = bgSrc.match(/^url[("']+(.*\.png[^\)"']*)[\)"']+[^\)]*$/i);
if (bgPNG)
{
style.backgroundImage = 'url("' + blankImg + '")';
filt(bgPNG[1], 0);
// Unclickable elements inside PNG backgrounds.
var tags = ['a', 'input', 'select', 'textarea', 'iframe', 'object'],
t = tags.length, tFix = [];
while (t--)
{
var elms = all.tags(tags[t]), e = elms.length;
while (e--) tFix.push(elms[e]);
}
var t = tFix.length;
if (t && (/relative|absolute/i).test(currentStyle.position))
alert('IEPNGFix: Children of positioned element are unclickable:\n\n<' +
nodeName + (id && ' id=' + id) + '>');
while (t--)
if (!(/relative|absolute/i).test(tFix[t].currentStyle.position))
tFix[t].style.position = 'relative';
}
else filt();
}
}
iePNGFix(1);
</script>
</public:component>

View file

@ -0,0 +1,232 @@
.jPicker .Icon {
display: inline-block;
height: 24px; /* change this value if using a different sized color picker icon */
position: relative; /* make this element an absolute positioning container */
text-align: left; /* make the zero width children position to the left of container */
width: 25px; /* change this value if using a different sized color picker icon */
}
.jPicker .Icon span.Color, .jPicker .Icon span.Alpha {
background-position: 2px 2px;
display: block;
height: 100%;
left: 0px;
position: absolute;
top: 0px;
width: 100%;
}
.jPicker .Icon span.Image {
background-repeat: no-repeat;
cursor: pointer;
display: block;
height: 100%;
left: 0px;
position: absolute;
top: 0px;
width: 100%;
}
.jPicker.Container {
color: #000;
z-index: 999;
}
table.jPicker {
background-color: #efefef;
border: 1px outset #666;
font-family: Arial, Helvetica, Sans-Serif;
font-size: 12px !important;
margin: 0px;
padding: 5px;
width: 545px;
z-index: 20;
}
.jPicker .Move {
background-color: #dddddd;
border-color: #fff #666 #666 #fff;
border-style: solid;
border-width: 1px;
cursor: move;
height: 12px;
padding: 0px;
}
.jPicker .Title {
font-size: 11px !important;
font-weight: bold;
margin: -2px 0px 0px 0px;
padding: 10px 0px 0px 0px;
text-align: center;
width: 100%;
}
.jPicker div.Map {
border-bottom: 2px solid #fff;
border-left: 2px solid #9a9a9a;
border-right: 2px solid #fff;
border-top: 2px solid #9a9a9a;
cursor: crosshair;
height: 260px; /* IE 6 incorrectly draws border inside the width and height instead of outside - We will fix this to 256px later */
margin: 0px 10px 10px 10px;
overflow: hidden; /* hide the overdraw of the Color Map icon when at edge of viewing box */
padding: 0px;
position: relative; /* make this element an absolute positioning container */
width: 260px; /* IE 6 incorrectly draws border inside the width and height instead of outside - We will fix this to 256px later */
}
.jPicker div[class="Map"] {
height: 256px; /* correct to 256px for browsers that support the "[class="xxx"]" selector (IE7+,Firefox,Safari,Chrome,Opera,etc.) */
width: 256px; /* correct to 256px for browsers that support the "[class="xxx"]" selector (IE7+,Firefox,Safari,Chrome,Opera,etc.) */
}
.jPicker div.Bar {
border-bottom: 2px solid #fff;
border-left: 2px solid #9a9a9a;
border-right: 2px solid #fff;
border-top: 2px solid #9a9a9a;
cursor: n-resize;
height: 260px; /* IE 6 incorrectly draws border inside the width and height instead of outside - We will fix this to 256px later */
margin: 12px 10px 0px 5px;
overflow: hidden;
padding: 0px;
position: relative;
width: 24px; /* IE 6 incorrectly draws border inside the width and height instead of outside - We will fix this to 20px later */
}
.jPicker div[class="Bar"] {
height: 256px; /* correct to 256px for browsers that support the "[class="xxx"]" selector (IE7+,Firefox,Safari,Chrome,Opera,etc.) */
width: 20px; /* correct to 20px for browsers that support the "[class="xxx"]" selector (IE7+,Firefox,Safari,Chrome,Opera,etc.) */
}
.jPicker .Map .Map1, .jPicker .Map .Map2, .jPicker .Map .Map3, .jPicker .Bar .Map1, .jPicker .Bar .Map2, .jPicker .Bar .Map3, .jPicker .Bar .Map4, .jPicker .Bar .Map5, .jPicker .Bar .Map6 {
background-color: transparent;
background-image: none;
display: block;
left: 0px;
position: absolute;
top: 0px;
}
.jPicker .Map .Map1, .jPicker .Map .Map2, .jPicker .Map .Map3 {
height: 2596px;
width: 256px; /* must specify pixel width. IE7/8 Quirks mode ignores opacity for an absolutely positioned item in a relative container with "overflow: visible". The marker in the colorBar
would not be drawn if its overflow is set to hidden. */
}
.jPicker .Bar .Map1, .jPicker .Bar .Map2, .jPicker .Bar .Map3, .jPicker .Bar .Map4 {
height: 3896px;
width: 20px; /* must specify pixel width. IE7/8 Quirks mode ignores opacity for an absolutely positioned item in a relative container with "overflow: visible". The marker in the colorBar
would not be drawn if its overflow is set to hidden. */
}
.jPicker .Bar .Map5, .jPicker .Bar .Map6 {
height: 256px;
width: 20px; /* must specify pixel width. IE7/8 Quirks mode ignores opacity for an absolutely positioned item in a relative container with "overflow: visible". The marker in the colorBar
would not be drawn if its overflow is set to hidden. */
}
.jPicker .Map .Map1, .jPicker .Map .Map2, .jPicker .Bar .Map6 {
background-repeat: no-repeat;
}
.jPicker .Map .Map3, .jPicker .Bar .Map5 {
background-repeat: repeat;
}
.jPicker .Bar .Map1, .jPicker .Bar .Map2, .jPicker .Bar .Map3, .jPicker .Bar .Map4 {
background-repeat: repeat-x;
}
.jPicker .Map .Arrow {
display: block;
position: absolute;
}
.jPicker .Bar .Arrow {
display: block;
left: 0px; /* (arrow width / 2) - (element width / 2) - position arrows' center in elements' center */
position: absolute;
}
.jPicker .Preview {
font-size: 9px;
padding: 5px 0px 0px 0px;
text-align: center;
}
.jPicker .Preview div {
border: 2px inset #eee;
height: 62px;
margin: 0px auto;
padding: 0px;
width: 62px;
}
.jPicker .Preview div span {
border: 1px solid #000;
display: block;
height: 30px;
margin: 0px auto;
padding: 0px;
width: 60px;
}
.jPicker .Preview .Active {
border-bottom-width: 0px;
}
.jPicker .Preview .Current {
border-top-width: 0px;
cursor: pointer;
}
.jPicker input {
font-size: 13px;
}
.jPicker .Button {
text-align: center;
padding: 0px 4px;
width: 115px;
}
.jPicker .Button input {
padding: 2px 0px;
width: 100px;
}
.jPicker .Button .Ok {
margin: 12px 0px 5px 0px;
}
.jPicker td {
margin: 0px;
padding: 0px;
}
.jPicker td.Radio {
margin: 0px;
padding: 0px;
width: 31px;
}
.jPicker td.Radio input {
margin: 0px 5px 0px 0px;
padding: 0px;
}
.jPicker td.Text {
font-size: 12px !important;
height: 22px;
margin: 0px;
padding: 0px;
text-align: left;
width: 70px;
}
.jPicker tr.Hex td.Text {
width: 100px;
}
.jPicker td.Text input {
background-color: #fff;
border: 1px inset #aaa;
height: 19px;
margin: 0px 0px 0px 5px;
text-align: left;
width: 30px;
}
.jPicker td[class="Text"] input {
height: 15px;
}
.jPicker tr.Hex td.Text input.Hex {
width: 50px;
}
.jPicker tr.Hex td.Text input.AHex {
width: 20px;
}
.jPicker .Grid {
text-align: center;
width: 114px;
}
.jPicker .Grid span.QuickColor {
border: 1px inset #aaa;
cursor: pointer;
display: inline-block;
height: 15px;
line-height: 15px;
margin: 0px;
padding: 0px;
width: 19px;
}
.jPicker .Grid span[class="QuickColor"] {
width: 17px;
}

View file

@ -0,0 +1 @@
.jPicker .Icon{display:inline-block;height:24px;position:relative;text-align:left;width:25px}.jPicker .Icon span.Color,.jPicker .Icon span.Alpha{background-position:2px 2px;display:block;height:100%;left:0px;position:absolute;top:0px;width:100%}.jPicker .Icon span.Image{background-repeat:no-repeat;cursor:pointer;display:block;height:100%;left:0px;position:absolute;top:0px;width:100%}.jPicker.Container{color:#000;z-index:999}table.jPicker{background-color:#efefef;border:1px outset #666;font-family:Arial, Helvetica, Sans-Serif;font-size:12px !important;margin:0px;padding:5px;width:545px;z-index:20}.jPicker .Move{background-color:#dddddd;border-color:#fff #666 #666 #fff;border-style:solid;border-width:1px;cursor:move;height:12px;padding:0px}.jPicker .Title{font-size:11px !important;font-weight:bold;margin:-2px 0px 0px 0px;padding:10px 0px 0px 0px;text-align:center;width:100%}.jPicker div.Map{border-bottom:2px solid #fff;border-left:2px solid #9a9a9a;border-right:2px solid #fff;border-top:2px solid #9a9a9a;cursor:crosshair;height:260px;margin:0px 10px 10px 10px;overflow:hidden;padding:0px;position:relative;width:260px}.jPicker div[class="Map"]{height:256px;width:256px}.jPicker div.Bar{border-bottom:2px solid #fff;border-left:2px solid #9a9a9a;border-right:2px solid #fff;border-top:2px solid #9a9a9a;cursor:n-resize;height:260px;margin:12px 10px 0px 5px;overflow:hidden;padding:0px;position:relative;width:24px}.jPicker div[class="Bar"]{height:256px;width:20px}.jPicker .Map .Map1,.jPicker .Map .Map2,.jPicker .Map .Map3,.jPicker .Bar .Map1,.jPicker .Bar .Map2,.jPicker .Bar .Map3,.jPicker .Bar .Map4,.jPicker .Bar .Map5,.jPicker .Bar .Map6{background-color:transparent;background-image:none;display:block;left:0px;position:absolute;top:0px}.jPicker .Map .Map1,.jPicker .Map .Map2,.jPicker .Map .Map3{height:2596px;width:256px}.jPicker .Bar .Map1,.jPicker .Bar .Map2,.jPicker .Bar .Map3,.jPicker .Bar .Map4{height:3896px;width:20px}.jPicker .Bar .Map5,.jPicker .Bar .Map6{height:256px;width:20px}.jPicker .Map .Map1,.jPicker .Map .Map2,.jPicker .Bar .Map6{background-repeat:no-repeat}.jPicker .Map .Map3,.jPicker .Bar .Map5{background-repeat:repeat}.jPicker .Bar .Map1,.jPicker .Bar .Map2,.jPicker .Bar .Map3,.jPicker .Bar .Map4{background-repeat:repeat-x}.jPicker .Map .Arrow{display:block;position:absolute}.jPicker .Bar .Arrow{display:block;left:0px;position:absolute}.jPicker .Preview{font-size:9px;padding:5px 0px 0px 0px;text-align:center}.jPicker .Preview div{border:2px inset #eee;height:62px;margin:0px auto;padding:0px;width:62px}.jPicker .Preview div span{border:1px solid #000;display:block;height:30px;margin:0px auto;padding:0px;width:60px}.jPicker .Preview .Active{border-bottom-width:0px}.jPicker .Preview .Current{border-top-width:0px;cursor:pointer}.jPicker input{font-size:13px}.jPicker .Button{text-align:center;padding:0px 4px;width:115px}.jPicker .Button input{padding:2px 0px;width:100px}.jPicker .Button .Ok{margin:12px 0px 5px 0px}.jPicker td{margin:0px;padding:0px}.jPicker td.Radio{margin:0px;padding:0px;width:31px}.jPicker td.Radio input{margin:0px 5px 0px 0px;padding:0px}.jPicker td.Text{font-size:12px !important;height:22px;margin:0px;padding:0px;text-align:left;width:70px}.jPicker tr.Hex td.Text{width:100px}.jPicker td.Text input{background-color:#fff;border:1px inset #aaa;height:19px;margin:0px 0px 0px 5px;text-align:left;width:30px}.jPicker td[class="Text"] input{height:15px}.jPicker tr.Hex td.Text input.Hex{width:50px}.jPicker tr.Hex td.Text input.AHex{width:20px}.jPicker .Grid{text-align:center;width:114px}.jPicker .Grid span.QuickColor{border:1px inset #aaa;cursor:pointer;display:inline-block;height:15px;line-height:15px;margin:0px;padding:0px;width:19px}.jPicker .Grid span[class="QuickColor"]{width:17px}

View file

@ -1 +0,0 @@
.xe_colorpicker{position:absolute;width:194px;height:183px;overflow:hidden;z-index:100}.xe_colorpicker .colorpicker{position:relative;width:192px;height:160px;background-color:white;border:1px solid silver}.xe_colorpicker .colortable{position:absolute;left :4px;top :4px;border:1px solid #909090}.xe_colorpicker .colortable .background{position:relative;width:150px;height:150px;background:url(../images/colorpicker_overlay.png) no-repeat;overflow:hidden}.xe_colorpicker .colortable .indicator{position:absolute;width:11px;height:11px;background:url(../images/colorpicker_select.gif) no-repeat}.xe_colorpicker .huebar{position:absolute;right :4px;top:4px;border:1px solid #909090}.xe_colorpicker .huebar .background{width:20px;height:150px;background:url(../images/colorpicker_huebg.png) repeat-x}.xe_colorpicker .huebar .indicator{position:absolute;width:35px;height:9px;left:-3px;background:transparent url(../images/colorpicker_indic.gif) no-repeat}.xe_colorpicker .buttons{position:absolute;width:194px;background-color:black}.xe_colorpicker .buttons button{width:33%;color:white;height:22px;border:0;background-color:transparent;padding:0;margin:0}

Binary file not shown.

After

Width:  |  Height:  |  Size: 2.1 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 382 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 76 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 552 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 134 B

Binary file not shown.

Before

Width:  |  Height:  |  Size: 230 B

Binary file not shown.

Before

Width:  |  Height:  |  Size: 86 B

Binary file not shown.

Before

Width:  |  Height:  |  Size: 10 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 78 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 139 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 93 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 146 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 135 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 76 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 93 B

File diff suppressed because it is too large Load diff

View file

@ -0,0 +1,71 @@
(function(j){Math.precision=function(a,d){void 0===d&&(d=0);return Math.round(a*Math.pow(10,d))/Math.pow(10,d)};var W=function(a,d){var c,h,b=this,f=a.find("img:first"),m=0,p=100,n=100,l=0,s=100,q=100,t=0,e=0,C,A=[],u=function(c){for(var a=0;a<A.length;a++)A[a].call(b,b,c)},g=function(e){var d=a.offset();c=d.left|0;h=d.top|0;clearTimeout(C);C=setTimeout(function(){H.call(b,e)},0);j(document).bind("mousemove",k).bind("mouseup",B);e.preventDefault()},k=function(c){clearTimeout(C);C=setTimeout(function(){H.call(b,
c)},0);c.stopPropagation();c.preventDefault();return!1},B=function(c){j(document).unbind("mouseup",B).unbind("mousemove",k);c.stopPropagation();c.preventDefault();return!1},H=function(e){var d=e.pageX-c,e=e.pageY-h,f=a.w,g=a.h;0>d?d=0:d>f&&(d=f);0>e?e=0:e>g&&(e=g);F.call(b,"xy",{x:d/f*n+m,y:e/g*q+l})},F=function(c,a,d){if(void 0===a){if(void 0===c||null==c)c="xy";switch(c.toLowerCase()){case "x":return t;case "y":return e;default:return{x:t,y:e}}}if(!(null!=d&&d==b)){var h=!1,f,g;null==c&&(c="xy");
switch(c.toLowerCase()){case "x":f=a&&(a.x&&a.x|0||a|0)||0;break;case "y":g=a&&(a.y&&a.y|0||a|0)||0;break;default:f=a&&a.x&&a.x|0||0,g=a&&a.y&&a.y|0||0}null!=f&&(f<m?f=m:f>p&&(f=p),t!=f&&(t=f,h=!0));null!=g&&(g<l?g=l:g>s&&(g=s),e!=g&&(e=g,h=!0));h&&u.call(b,d||b)}},I=function(c){j.isFunction(c)&&A.push(c)};j.extend(!0,b,{val:F,range:function(c,a){if(a===void 0){if(c===void 0||c==null)c="all";switch(c.toLowerCase()){case "minx":return m;case "maxx":return p;case "rangex":return{minX:m,maxX:p,rangeX:n};
case "miny":return l;case "maxy":return s;case "rangey":return{minY:l,maxY:s,rangeY:q};default:return{minX:m,maxX:p,rangeX:n,minY:l,maxY:s,rangeY:q}}}var d,e,h,f;c==null&&(c="all");switch(c.toLowerCase()){case "minx":d=a&&(a.minX&&a.minX|0||a|0)||0;break;case "maxx":e=a&&(a.maxX&&a.maxX|0||a|0)||0;break;case "rangex":d=a&&a.minX&&a.minX|0||0;e=a&&a.maxX&&a.maxX|0||0;break;case "miny":h=a&&(a.minY&&a.minY|0||a|0)||0;break;case "maxy":f=a&&(a.maxY&&a.maxY|0||a|0)||0;break;case "rangey":h=a&&a.minY&&
a.minY|0||0;f=a&&a.maxY&&a.maxY|0||0;break;default:d=a&&a.minX&&a.minX|0||0;e=a&&a.maxX&&a.maxX|0||0;h=a&&a.minY&&a.minY|0||0;f=a&&a.maxY&&a.maxY|0||0}if(d!=null&&m!=d){m=d;n=p-m}if(e!=null&&p!=e){p=e;n=p-m}if(h!=null&&l!=h){l=h;q=s-l}if(f!=null&&s!=f){s=f;q=s-l}},bind:I,unbind:function(c){if(j.isFunction(c))for(var a;(a=j.inArray(c,A))!=-1;)A.splice(a,1)},destroy:function(){j(document).unbind("mouseup",B).unbind("mousemove",k);a.unbind("mousedown",g);A=f=a=null}});f.src=d.arrow&&d.arrow.image;f.w=
d.arrow&&d.arrow.width||f.width();f.h=d.arrow&&d.arrow.height||f.height();a.w=d.map&&d.map.width||a.width();a.h=d.map&&d.map.height||a.height();a.bind("mousedown",g);I.call(b,function(){var c=0,d=0,h=a.w,g=a.h,b=f.w,k=f.h;setTimeout(function(){0<n&&(c=t==p?h:t/n*h|0);0<q&&(d=e==s?g:e/q*g|0);c=b>=h?(h>>1)-(b>>1):c-(b>>1);d=k>=g?(g>>1)-(k>>1):d-(k>>1);f.css({left:c+"px",top:d+"px"})},0)})},la=function(a,d,c,h){var b=this,a=a.find("td.Text input"),f=a.eq(3),m=a.eq(4),p=a.eq(5),n=7<a.length?a.eq(6):null,
l=a.eq(0),s=a.eq(1),q=a.eq(2),t=a.eq(7<a.length?7:6),e=7<a.length?a.eq(8):null,C=function(a){if(!(""==a.target.value&&a.target!=t.get(0)&&(null!=c&&a.target!=c.get(0)||null==c))){if(!g(a))return a;switch(a.target){case f.get(0):switch(a.keyCode){case 38:return f.val(k.call(b,(f.val()<<0)+1,0,255)),d.val("r",f.val(),a.target),!1;case 40:return f.val(k.call(b,(f.val()<<0)-1,0,255)),d.val("r",f.val(),a.target),!1}break;case m.get(0):switch(a.keyCode){case 38:return m.val(k.call(b,(m.val()<<0)+1,0,255)),
d.val("g",m.val(),a.target),!1;case 40:return m.val(k.call(b,(m.val()<<0)-1,0,255)),d.val("g",m.val(),a.target),!1}break;case p.get(0):switch(a.keyCode){case 38:return p.val(k.call(b,(p.val()<<0)+1,0,255)),d.val("b",p.val(),a.target),!1;case 40:return p.val(k.call(b,(p.val()<<0)-1,0,255)),d.val("b",p.val(),a.target),!1}break;case n&&n.get(0):switch(a.keyCode){case 38:return n.val(k.call(b,parseFloat(n.val())+1,0,100)),d.val("a",Math.precision(255*n.val()/100,h),a.target),!1;case 40:return n.val(k.call(b,
parseFloat(n.val())-1,0,100)),d.val("a",Math.precision(255*n.val()/100,h),a.target),!1}break;case l.get(0):switch(a.keyCode){case 38:return l.val(k.call(b,(l.val()<<0)+1,0,360)),d.val("h",l.val(),a.target),!1;case 40:return l.val(k.call(b,(l.val()<<0)-1,0,360)),d.val("h",l.val(),a.target),!1}break;case s.get(0):switch(a.keyCode){case 38:return s.val(k.call(b,(s.val()<<0)+1,0,100)),d.val("s",s.val(),a.target),!1;case 40:return s.val(k.call(b,(s.val()<<0)-1,0,100)),d.val("s",s.val(),a.target),!1}break;
case q.get(0):switch(a.keyCode){case 38:return q.val(k.call(b,(q.val()<<0)+1,0,100)),d.val("v",q.val(),a.target),!1;case 40:return q.val(k.call(b,(q.val()<<0)-1,0,100)),d.val("v",q.val(),a.target),!1}}}},A=function(a){if(!(""==a.target.value&&a.target!=t.get(0)&&(null!=c&&a.target!=c.get(0)||null==c))){if(!g(a))return a;switch(a.target){case f.get(0):f.val(k.call(b,f.val(),0,255));d.val("r",f.val(),a.target);break;case m.get(0):m.val(k.call(b,m.val(),0,255));d.val("g",m.val(),a.target);break;case p.get(0):p.val(k.call(b,
p.val(),0,255));d.val("b",p.val(),a.target);break;case n&&n.get(0):n.val(k.call(b,n.val(),0,100));d.val("a",Math.precision(255*n.val()/100,h),a.target);break;case l.get(0):l.val(k.call(b,l.val(),0,360));d.val("h",l.val(),a.target);break;case s.get(0):s.val(k.call(b,s.val(),0,100));d.val("s",s.val(),a.target);break;case q.get(0):q.val(k.call(b,q.val(),0,100));d.val("v",q.val(),a.target);break;case t.get(0):t.val(t.val().replace(/[^a-fA-F0-9]/g,"").toLowerCase().substring(0,6));c&&c.val(t.val());d.val("hex",
""!=t.val()?t.val():null,a.target);break;case c&&c.get(0):G.isHex(c.val())?(t.val(c.val()),d.val("hex",""!=c.val()?c.val():null,a.target)):d.val("hex",null,a.target);break;case e&&e.get(0):e.val(e.val().replace(/[^a-fA-F0-9]/g,"").toLowerCase().substring(0,2)),d.val("a",null!=e.val()?parseInt(e.val(),16):null,a.target)}}},u=function(a){if(null!=d.val())switch(a.target){case f.get(0):f.val(d.val("r"));break;case m.get(0):m.val(d.val("g"));break;case p.get(0):p.val(d.val("b"));break;case n&&n.get(0):n.val(Math.precision(100*
d.val("a")/255,h));break;case l.get(0):l.val(d.val("h"));break;case s.get(0):s.val(d.val("s"));break;case q.get(0):q.val(d.val("v"));break;case t.get(0):case c&&c.get(0):t.val(d.val("hex"));c&&c.val("#"+d.val("hex"));break;case e&&e.get(0):e.val(d.val("ahex").substring(6))}},g=function(a){switch(a.keyCode){case 9:case 16:case 29:case 37:case 39:return!1;case "c".charCodeAt():case "v".charCodeAt():if(a.ctrlKey)return!1}return!0},k=function(a,c,d){return""==a||isNaN(a)?c:a>d?d:a<c?c:a},B=function(a,
d){var b=a.val("all");d!=f.get(0)&&f.val(null!=b?b.r:"");d!=m.get(0)&&m.val(null!=b?b.g:"");d!=p.get(0)&&p.val(null!=b?b.b:"");n&&d!=n.get(0)&&n.val(null!=b?Math.precision(100*b.a/255,h):"");d!=l.get(0)&&l.val(null!=b?b.h:"");d!=s.get(0)&&s.val(null!=b?b.s:"");d!=q.get(0)&&q.val(null!=b?b.v:"");if(d!=t.get(0)&&(c&&d!=c.get(0)||!c))t.val(null!=b?b.hex:"");c&&d!=c.get(0)&&d!=t.get(0)&&c.val(null!=b?"#"+b.hex:"transparent");e&&d!=e.get(0)&&e.val(null!=b?b.ahex.substring(6):"")};j.extend(!0,b,{destroy:function(){f.add(m).add(p).add(n).add(l).add(s).add(q).add(t).add(c).add(e).unbind("keyup",
A).unbind("blur",u);f.add(m).add(p).add(n).add(l).add(s).add(q).unbind("keydown",C);d.unbind(B);e=t=q=s=l=n=p=m=f=null}});f.add(m).add(p).add(n).add(l).add(s).add(q).add(t).add(c).add(e).bind("keyup",A).bind("blur",u);f.add(m).add(p).add(n).add(l).add(s).add(q).bind("keydown",C);d.bind(B)};j.jPicker={List:[],Color:function(a){var d=this,c,b,x,f,m,p,n,l=[],s=function(a){for(var c=0;c<l.length;c++)l[c].call(d,d,a)},q=function(a,e,j){if(void 0===e){if(void 0===a||null==a||""==a)a="all";if(null==c)return null;
switch(a.toLowerCase()){case "ahex":return G.rgbaToHex({r:c,g:b,b:x,a:f});case "hex":return q("ahex").substring(0,6);case "all":return{r:c,g:b,b:x,a:f,h:m,s:p,v:n,hex:q.call(d,"hex"),ahex:q.call(d,"ahex")};default:for(var e={},l=0;l<a.length;l++)switch(a.charAt(l)){case "r":1==a.length?e=c:e.r=c;break;case "g":1==a.length?e=b:e.g=b;break;case "b":1==a.length?e=x:e.b=x;break;case "a":1==a.length?e=f:e.a=f;break;case "h":1==a.length?e=m:e.h=m;break;case "s":1==a.length?e=p:e.s=p;break;case "v":1==a.length?
e=n:e.v=n}return e=={}?q.call(d,"all"):e}}if(!(null!=j&&j==d)){var u=!1;null==a&&(a="");if(null==e)null!=c&&(c=null,u=!0),null!=b&&(b=null,u=!0),null!=x&&(x=null,u=!0),null!=f&&(f=null,u=!0),null!=m&&(m=null,u=!0),null!=p&&(p=null,u=!0),null!=n&&(n=null,u=!0),u&&s.call(d,j||d);else switch(a.toLowerCase()){case "ahex":case "hex":e=G.hexToRgba(e&&(e.ahex||e.hex)||e||"00000000");q.call(d,"rgba",{r:e.r,g:e.g,b:e.b,a:"ahex"==a?e.a:null!=f?f:255},j);break;default:if(e&&(null!=e.ahex||null!=e.hex)){q.call(d,
"ahex",e.ahex||e.hex||"00000000",j);break}var g,k=!1,B=!1;void 0!==e.r&&-1==!a.indexOf("r")&&(a+="r");void 0!==e.g&&-1==!a.indexOf("g")&&(a+="g");void 0!==e.b&&-1==!a.indexOf("b")&&(a+="b");void 0!==e.a&&-1==!a.indexOf("a")&&(a+="a");void 0!==e.h&&-1==!a.indexOf("h")&&(a+="h");void 0!==e.s&&-1==!a.indexOf("s")&&(a+="s");void 0!==e.v&&-1==!a.indexOf("v")&&(a+="v");for(l=0;l<a.length;l++)switch(a.charAt(l)){case "r":if(B)continue;k=!0;g=e&&e.r&&e.r|0||e&&e|0||0;0>g?g=0:255<g&&(g=255);c!=g&&(c=g,u=!0);
break;case "g":if(B)continue;k=!0;g=e&&e.g&&e.g|0||e&&e|0||0;0>g?g=0:255<g&&(g=255);b!=g&&(b=g,u=!0);break;case "b":if(B)continue;k=!0;g=e&&e.b&&e.b|0||e&&e|0||0;0>g?g=0:255<g&&(g=255);x!=g&&(x=g,u=!0);break;case "a":g=e&&null!=e.a?e.a|0:null!=e?e|0:255;0>g?g=0:255<g&&(g=255);f!=g&&(f=g,u=!0);break;case "h":if(k)continue;B=!0;g=e&&e.h&&e.h|0||e&&e|0||0;0>g?g=0:360<g&&(g=360);m!=g&&(m=g,u=!0);break;case "s":if(k)continue;B=!0;g=e&&null!=e.s?e.s|0:null!=e?e|0:100;0>g?g=0:100<g&&(g=100);p!=g&&(p=g,u=
!0);break;case "v":if(k)continue;B=!0;g=e&&null!=e.v?e.v|0:null!=e?e|0:100;0>g?g=0:100<g&&(g=100);n!=g&&(n=g,u=!0)}u&&(k?(c=c||0,b=b||0,x=x||0,e=G.rgbToHsv({r:c,g:b,b:x}),m=e.h,p=e.s,n=e.v):B&&(m=m||0,p=null!=p?p:100,n=null!=n?n:100,e=G.hsvToRgb({h:m,s:p,v:n}),c=e.r,b=e.g,x=e.b),f=null!=f?f:255,s.call(d,j||d))}}};j.extend(!0,d,{val:q,bind:function(a){j.isFunction(a)&&l.push(a)},unbind:function(a){if(j.isFunction(a))for(var c;(c=j.inArray(a,l))!=-1;)l.splice(c,1)},destroy:function(){l=null}});a&&(null!=
a.ahex?q("ahex",a):null!=a.hex?q((null!=a.a?"a":"")+"hex",null!=a.a?{ahex:a.hex+G.intToHex(a.a)}:a):null!=a.r&&null!=a.g&&null!=a.b?q("rgb"+(null!=a.a?"a":""),a):null!=a.h&&null!=a.s&&null!=a.v&&q("hsv"+(null!=a.a?"a":""),a))},ColorMethods:{hexToRgba:function(a){a=this.validateHex(a);if(""==a)return{r:null,g:null,b:null,a:null};var d="00",c="00",b="00",j="255";6==a.length&&(a+="ff");6<a.length?(d=a.substring(0,2),c=a.substring(2,4),b=a.substring(4,6),j=a.substring(6,a.length)):(4<a.length&&(d=a.substring(4,
a.length),a=a.substring(0,4)),2<a.length&&(c=a.substring(2,a.length),a=a.substring(0,2)),0<a.length&&(b=a.substring(0,a.length)));return{r:this.hexToInt(d),g:this.hexToInt(c),b:this.hexToInt(b),a:this.hexToInt(j)}},isHex:function(a){return/^#[a-fA-F0-9]{6}$/g.test(a)},validateHex:function(a){a=a.toLowerCase().replace(/[^a-f0-9]/g,"");8<a.length&&(a=a.substring(0,8));return a},rgbaToHex:function(a){return this.intToHex(a.r)+this.intToHex(a.g)+this.intToHex(a.b)+this.intToHex(a.a)},intToHex:function(a){a=
(a|0).toString(16);1==a.length&&(a="0"+a);return a.toLowerCase()},hexToInt:function(a){return parseInt(a,16)},rgbToHsv:function(a){var d=a.r/255,c=a.g/255,a=a.b/255,b={h:0,s:0,v:0},j=0,f=0;d>=c&&d>=a?(f=d,j=c>a?a:c):c>=a&&c>=d?(f=c,j=d>a?a:d):(f=a,j=c>d?d:c);b.v=f;b.s=f?(f-j)/f:0;b.s?(j=f-j,b.h=d==f?(c-a)/j:c==f?2+(a-d)/j:4+(d-c)/j,b.h=parseInt(60*b.h),0>b.h&&(b.h+=360)):b.h=0;b.s=100*b.s|0;b.v=100*b.v|0;return b},hsvToRgb:function(a){var b={r:0,g:0,b:0,a:100},c=a.h,h=a.s,a=a.v;if(0==h)b.r=0==a?b.g=
b.b=0:b.g=b.b=255*a/100|0;else{360==c&&(c=0);var c=c/60,h=h/100,a=a/100,j=c|0,f=c-j,c=a*(1-h),m=a*(1-h*f),h=a*(1-h*(1-f));switch(j){case 0:b.r=a;b.g=h;b.b=c;break;case 1:b.r=m;b.g=a;b.b=c;break;case 2:b.r=c;b.g=a;b.b=h;break;case 3:b.r=c;b.g=m;b.b=a;break;case 4:b.r=h;b.g=c;b.b=a;break;case 5:b.r=a,b.g=c,b.b=m}b.r=255*b.r|0;b.g=255*b.g|0;b.b=255*b.b|0}return b}}};var b=j.jPicker.Color,O=j.jPicker.List,G=j.jPicker.ColorMethods;j.fn.jPicker=function(a){var d=arguments;return this.each(function(){var c=
this,h=j.extend(!0,{},j.fn.jPicker.defaults,a);"input"==j(c).get(0).nodeName.toLowerCase()&&(j.extend(!0,h,{window:{bindToInput:!0,expandable:!0,input:j(c)}}),""==j(c).val()||"transparent"==j(c).val()?(h.color.active=new b({hex:null}),h.color.current=new b({hex:null})):G.validateHex(j(c).val())&&(h.color.active=new b({hex:j(c).val(),a:h.color.active.val("a")}),h.color.current=new b({hex:j(c).val(),a:h.color.active.val("a")})));h.window.expandable?j(c).after('<span class="jPicker"><span class="Icon"><span class="Color">&nbsp;</span><span class="Alpha">&nbsp;</span><span class="Image" title="Click To Open Color Picker">&nbsp;</span><span class="Container">&nbsp;</span></span></span>'):
h.window.liveUpdate=!1;var x=7>parseFloat(navigator.appVersion.split("MSIE")[1])&&document.body.filters,f=null,m=null,p=null,n=null,l=null,s=null,q=null,t=null,e=null,C=null,A=null,u=null,g=null,k=null,B=null,H=null,F=null,I=null,V=null,L=null,J=null,M=null,N=null,K=null,X=null,P=null,Y=null,Z=null,aa=function(a){var b=w.active,d=b.val("hex"),f,j;h.color.mode=a;switch(a){case "h":setTimeout(function(){y.call(c,m,"transparent");o.call(c,n,0);r.call(c,n,100);o.call(c,l,260);r.call(c,l,100);y.call(c,
p,"transparent");o.call(c,q,0);r.call(c,q,100);o.call(c,t,260);r.call(c,t,100);o.call(c,e,260);r.call(c,e,100);o.call(c,C,260);r.call(c,C,100);o.call(c,u,260);r.call(c,u,100)},0);g.range("all",{minX:0,maxX:100,minY:0,maxY:100});k.range("rangeY",{minY:0,maxY:360});if(b.val("ahex")==null)break;g.val("xy",{x:b.val("s"),y:100-b.val("v")},g);k.val("y",360-b.val("h"),k);break;case "s":setTimeout(function(){y.call(c,m,"transparent");o.call(c,n,-260);o.call(c,l,-520);o.call(c,q,-260);o.call(c,t,-520);o.call(c,
u,260);r.call(c,u,100)},0);g.range("all",{minX:0,maxX:360,minY:0,maxY:100});k.range("rangeY",{minY:0,maxY:100});if(b.val("ahex")==null)break;g.val("xy",{x:b.val("h"),y:100-b.val("v")},g);k.val("y",100-b.val("s"),k);break;case "v":setTimeout(function(){y.call(c,m,"000000");o.call(c,n,-780);o.call(c,l,260);y.call(c,p,d);o.call(c,q,-520);o.call(c,t,260);r.call(c,t,100);o.call(c,u,260);r.call(c,u,100)},0);g.range("all",{minX:0,maxX:360,minY:0,maxY:100});k.range("rangeY",{minY:0,maxY:100});if(b.val("ahex")==
null)break;g.val("xy",{x:b.val("h"),y:100-b.val("s")},g);k.val("y",100-b.val("v"),k);break;case "r":f=-1040;j=-780;g.range("all",{minX:0,maxX:255,minY:0,maxY:255});k.range("rangeY",{minY:0,maxY:255});if(b.val("ahex")==null)break;g.val("xy",{x:b.val("b"),y:255-b.val("g")},g);k.val("y",255-b.val("r"),k);break;case "g":f=-1560;j=-1820;g.range("all",{minX:0,maxX:255,minY:0,maxY:255});k.range("rangeY",{minY:0,maxY:255});if(b.val("ahex")==null)break;g.val("xy",{x:b.val("b"),y:255-b.val("r")},g);k.val("y",
255-b.val("g"),k);break;case "b":f=-2080;j=-2860;g.range("all",{minX:0,maxX:255,minY:0,maxY:255});k.range("rangeY",{minY:0,maxY:255});if(b.val("ahex")==null)break;g.val("xy",{x:b.val("r"),y:255-b.val("g")},g);k.val("y",255-b.val("b"),k);break;case "a":setTimeout(function(){y.call(c,m,"transparent");o.call(c,n,-260);o.call(c,l,-520);o.call(c,q,260);o.call(c,t,260);r.call(c,t,100);o.call(c,u,0);r.call(c,u,100)},0);g.range("all",{minX:0,maxX:360,minY:0,maxY:100});k.range("rangeY",{minY:0,maxY:255});
if(b.val("ahex")==null)break;g.val("xy",{x:b.val("h"),y:100-b.val("v")},g);k.val("y",255-b.val("a"),k);break;default:throw"Invalid Mode";}switch(a){case "s":case "v":case "a":setTimeout(function(){r.call(c,n,100);r.call(c,q,100);o.call(c,e,260);r.call(c,e,100);o.call(c,C,260);r.call(c,C,100)},0);break;case "r":case "g":case "b":setTimeout(function(){y.call(c,m,"transparent");y.call(c,p,"transparent");r.call(c,q,100);r.call(c,n,100);o.call(c,n,f);o.call(c,l,f-260);o.call(c,q,j-780);o.call(c,t,j-520);
o.call(c,e,j);o.call(c,C,j-260);o.call(c,u,260);r.call(c,u,100)},0)}b.val("ahex")!=null&&$.call(c,b)},$=function(a,b){(b==null||b!=k&&b!=g)&&ma.call(c,a,b);setTimeout(function(){na.call(c,a);oa.call(c,a);pa.call(c,a)},0)},qa=function(a,c){var b=w.active;if(!(c!=g&&b.val()==null)){var e=a.val("all");switch(h.color.mode){case "h":b.val("sv",{s:e.x,v:100-e.y},c);break;case "s":case "a":b.val("hv",{h:e.x,v:100-e.y},c);break;case "v":b.val("hs",{h:e.x,s:100-e.y},c);break;case "r":b.val("gb",{g:255-e.y,
b:e.x},c);break;case "g":b.val("rb",{r:255-e.y,b:e.x},c);break;case "b":b.val("rg",{r:e.x,g:255-e.y},c)}}},ra=function(a,c){var b=w.active;if(!(c!=k&&b.val()==null))switch(h.color.mode){case "h":b.val("h",{h:360-a.val("y")},c);break;case "s":b.val("s",{s:100-a.val("y")},c);break;case "v":b.val("v",{v:100-a.val("y")},c);break;case "r":b.val("r",{r:255-a.val("y")},c);break;case "g":b.val("g",{g:255-a.val("y")},c);break;case "b":b.val("b",{b:255-a.val("y")},c);break;case "a":b.val("a",255-a.val("y"),
c)}},ma=function(a,c){if(c!=g)switch(h.color.mode){case "h":var b=a.val("sv");g.val("xy",{x:b!=null?b.s:100,y:100-(b!=null?b.v:100)},c);break;case "s":case "a":b=a.val("hv");g.val("xy",{x:b&&b.h||0,y:100-(b!=null?b.v:100)},c);break;case "v":b=a.val("hs");g.val("xy",{x:b&&b.h||0,y:100-(b!=null?b.s:100)},c);break;case "r":b=a.val("bg");g.val("xy",{x:b&&b.b||0,y:255-(b&&b.g||0)},c);break;case "g":b=a.val("br");g.val("xy",{x:b&&b.b||0,y:255-(b&&b.r||0)},c);break;case "b":b=a.val("rg");g.val("xy",{x:b&&
b.r||0,y:255-(b&&b.g||0)},c)}if(c!=k)switch(h.color.mode){case "h":k.val("y",360-(a.val("h")||0),c);break;case "s":b=a.val("s");k.val("y",100-(b!=null?b:100),c);break;case "v":b=a.val("v");k.val("y",100-(b!=null?b:100),c);break;case "r":k.val("y",255-(a.val("r")||0),c);break;case "g":k.val("y",255-(a.val("g")||0),c);break;case "b":k.val("y",255-(a.val("b")||0),c);break;case "a":b=a.val("a");k.val("y",255-(b!=null?b:255),c)}},na=function(a){try{var b=a.val("all");L.css({backgroundColor:b&&"#"+b.hex||
"transparent"});r.call(c,L,b&&Math.precision(b.a*100/255,4)||0)}catch(e){}},oa=function(a){switch(h.color.mode){case "h":y.call(c,m,(new b({h:a.val("h")||0,s:100,v:100})).val("hex"));break;case "s":case "a":var e=a.val("s");r.call(c,l,100-(e!=null?e:100));break;case "v":e=a.val("v");r.call(c,n,e!=null?e:100);break;case "r":r.call(c,l,Math.precision((a.val("r")||0)/255*100,4));break;case "g":r.call(c,l,Math.precision((a.val("g")||0)/255*100,4));break;case "b":r.call(c,l,Math.precision((a.val("b")||
0)/255*100))}a=a.val("a");r.call(c,s,Math.precision((255-(a||0))*100/255,4))},pa=function(a){switch(h.color.mode){case "h":var d=a.val("a");r.call(c,A,Math.precision((255-(d||0))*100/255,4));break;case "s":var d=a.val("hva"),f=new b({h:d&&d.h||0,s:100,v:d!=null?d.v:100});y.call(c,p,f.val("hex"));r.call(c,t,100-(d!=null?d.v:100));r.call(c,A,Math.precision((255-(d&&d.a||0))*100/255,4));break;case "v":d=a.val("hsa");f=new b({h:d&&d.h||0,s:d!=null?d.s:100,v:100});y.call(c,p,f.val("hex"));r.call(c,A,Math.precision((255-
(d&&d.a||0))*100/255,4));break;case "r":case "g":case "b":f=d=0;a=a.val("rgba");if(h.color.mode=="r"){d=a&&a.b||0;f=a&&a.g||0}else if(h.color.mode=="g"){d=a&&a.b||0;f=a&&a.r||0}else if(h.color.mode=="b"){d=a&&a.r||0;f=a&&a.g||0}var g=f>d?d:f;r.call(c,t,d>f?Math.precision((d-f)/(255-f)*100,4):0);r.call(c,e,f>d?Math.precision((f-d)/(255-d)*100,4):0);r.call(c,C,Math.precision(g/255*100,4));r.call(c,A,Math.precision((255-(a&&a.a||0))*100/255,4));break;case "a":d=a.val("a");y.call(c,p,a.val("hex")||"000000");
r.call(c,A,d!=null?0:100);r.call(c,u,d!=null?100:0)}},y=function(a,b){a.css({backgroundColor:b&&b.length==6&&"#"+b||"transparent"})},E=function(a,b){if(x&&(b.indexOf("AlphaBar.png")!=-1||b.indexOf("Bars.png")!=-1||b.indexOf("Maps.png")!=-1)){a.attr("pngSrc",b);a.css({backgroundImage:"none",filter:"progid:DXImageTransform.Microsoft.AlphaImageLoader(src='"+b+"', sizingMethod='scale')"})}else a.css({backgroundImage:"url('"+b+"')"})},o=function(a,b){a.css({top:b+"px"})},r=function(a,b){a.css({visibility:b>
0?"visible":"hidden"});if(b>0&&b<100)if(x){var c=a.attr("pngSrc");c!=null&&(c.indexOf("AlphaBar.png")!=-1||c.indexOf("Bars.png")!=-1||c.indexOf("Maps.png")!=-1)?a.css({filter:"progid:DXImageTransform.Microsoft.AlphaImageLoader(src='"+c+"', sizingMethod='scale') progid:DXImageTransform.Microsoft.Alpha(opacity="+b+")"}):a.css({opacity:Math.precision(b/100,4)})}else a.css({opacity:Math.precision(b/100,4)});else if(b==0||b==100)if(x){c=a.attr("pngSrc");c!=null&&(c.indexOf("AlphaBar.png")!=-1||c.indexOf("Bars.png")!=
-1||c.indexOf("Maps.png")!=-1)?a.css({filter:"progid:DXImageTransform.Microsoft.AlphaImageLoader(src='"+c+"', sizingMethod='scale')"}):a.css({opacity:""})}else a.css({opacity:""})},ba=function(){w.active.val("ahex",w.current.val("ahex"))},sa=function(){w.current.val("ahex",w.active.val("ahex"))},ca=function(a){j(this).parents("tbody:first").find('input:radio[value!="'+a.target.value+'"]').removeAttr("checked");aa.call(c,a.target.value)},da=function(){ba.call(c)},ea=function(){ba.call(c);h.window.expandable&&
T.call(c);j.isFunction(Q)&&Q.call(c,w.active,N)},fa=function(){sa.call(c);h.window.expandable&&T.call(c);j.isFunction(R)&&R.call(c,w.active,M)},ga=function(){U.call(c)},ta=function(a){var b=a.val("hex");J.css({backgroundColor:b&&"#"+b||"transparent"});r.call(c,J,Math.precision((a.val("a")||0)*100/255,4))},ua=function(a){var b=a.val("hex"),a=a.val("va");X.css({backgroundColor:b&&"#"+b||"transparent"});r.call(c,P,Math.precision((255-(a&&a.a||0))*100/255,4));h.window.bindToInput&&h.window.updateInputColor&&
h.window.input.css({backgroundColor:b&&"#"+b||"transparent",color:a==null||a.v>75?"#000000":"#ffffff"})},ja=function(a){H=parseInt(f.css("left"));F=parseInt(f.css("top"));I=a.pageX;V=a.pageY;j(document).bind("mousemove",ha).bind("mouseup",ia);a.preventDefault()},ha=function(a){f.css({left:H-(I-a.pageX)+"px",top:F-(V-a.pageY)+"px"});h.window.expandable&&!j.support.boxModel&&f.prev().css({left:f.css("left"),top:f.css("top")});a.stopPropagation();a.preventDefault();return false},ia=function(a){j(document).unbind("mousemove",
ha).unbind("mouseup",ia);a.stopPropagation();a.preventDefault();return false},ka=function(a){a.preventDefault();a.stopPropagation();w.active.val("ahex",j(this).attr("title")||null,a.target);return false},R=j.isFunction(d[1])&&d[1]||null,S=j.isFunction(d[2])&&d[2]||null,Q=j.isFunction(d[3])&&d[3]||null,U=function(){w.current.val("ahex",w.active.val("ahex"));var a=function(){if(h.window.expandable&&!j.support.boxModel){var a=f.find("table:first");f.before("<iframe/>");f.prev().css({width:a.width(),
height:f.height(),opacity:0,position:"absolute",left:f.css("left"),top:f.css("top")})}};if(h.window.expandable){j(document.body).children("div.jPicker.Container").css({zIndex:10});f.css({zIndex:20})}switch(h.window.effects.type){case "fade":f.fadeIn(h.window.effects.speed.show,a);break;case "slide":f.slideDown(h.window.effects.speed.show,a);break;default:f.show(h.window.effects.speed.show,a)}},T=function(){var a=function(){h.window.expandable&&f.css({zIndex:10});h.window.expandable&&!j.support.boxModel&&
f.prev().remove()};switch(h.window.effects.type){case "fade":f.fadeOut(h.window.effects.speed.hide,a);break;case "slide":f.slideUp(h.window.effects.speed.hide,a);break;default:f.hide(h.window.effects.speed.hide,a)}},va=function(){var a=h.window,d=a.expandable?j(c).next().find(".Container:first"):null;f=a.expandable?j("<div/>"):j(c);f.addClass("jPicker Container");a.expandable&&f.hide();f.get(0).onselectstart=function(a){if(a.target.nodeName.toLowerCase()!=="input")return false};var o=w.active.val("all");
if(a.alphaPrecision<0)a.alphaPrecision=0;else if(a.alphaPrecision>2)a.alphaPrecision=2;var x='<table class="jPicker" cellpadding="0" cellspacing="0"><tbody>'+(a.expandable?'<tr><td class="Move" colspan="5">&nbsp;</td></tr>':"")+'<tr><td rowspan="9"><h2 class="Title">'+(a.title||z.text.title)+'</h2><div class="Map"><span class="Map1">&nbsp;</span><span class="Map2">&nbsp;</span><span class="Map3">&nbsp;</span><img src="'+v.clientPath+v.colorMap.arrow.file+'" class="Arrow"/></div></td><td rowspan="9"><div class="Bar"><span class="Map1">&nbsp;</span><span class="Map2">&nbsp;</span><span class="Map3">&nbsp;</span><span class="Map4">&nbsp;</span><span class="Map5">&nbsp;</span><span class="Map6">&nbsp;</span><img src="'+
v.clientPath+v.colorBar.arrow.file+'" class="Arrow"/></div></td><td colspan="2" class="Preview">'+z.text.newColor+'<div><span class="Active" title="'+z.tooltips.colors.newColor+'">&nbsp;</span><span class="Current" title="'+z.tooltips.colors.currentColor+'">&nbsp;</span></div>'+z.text.currentColor+'</td><td rowspan="9" class="Button"><input type="button" class="Ok" value="'+z.text.ok+'" title="'+z.tooltips.buttons.ok+'"/><input type="button" class="Cancel" value="'+z.text.cancel+'" title="'+z.tooltips.buttons.cancel+
'"/><hr/><div class="Grid">&nbsp;</div></td></tr><tr class="Hue"><td class="Radio"><label title="'+z.tooltips.hue.radio+'"><input type="radio" value="h"'+(h.color.mode=="h"?' checked="checked"':"")+'/>H:</label></td><td class="Text"><input type="text" maxlength="3" value="'+(o!=null?o.h:"")+'" title="'+z.tooltips.hue.textbox+'"/>&nbsp;&deg;</td></tr><tr class="Saturation"><td class="Radio"><label title="'+z.tooltips.saturation.radio+'"><input type="radio" value="s"'+(h.color.mode=="s"?' checked="checked"':
"")+'/>S:</label></td><td class="Text"><input type="text" maxlength="3" value="'+(o!=null?o.s:"")+'" title="'+z.tooltips.saturation.textbox+'"/>&nbsp;%</td></tr><tr class="Value"><td class="Radio"><label title="'+z.tooltips.value.radio+'"><input type="radio" value="v"'+(h.color.mode=="v"?' checked="checked"':"")+'/>V:</label><br/><br/></td><td class="Text"><input type="text" maxlength="3" value="'+(o!=null?o.v:"")+'" title="'+z.tooltips.value.textbox+'"/>&nbsp;%<br/><br/></td></tr><tr class="Red"><td class="Radio"><label title="'+
z.tooltips.red.radio+'"><input type="radio" value="r"'+(h.color.mode=="r"?' checked="checked"':"")+'/>R:</label></td><td class="Text"><input type="text" maxlength="3" value="'+(o!=null?o.r:"")+'" title="'+z.tooltips.red.textbox+'"/></td></tr><tr class="Green"><td class="Radio"><label title="'+z.tooltips.green.radio+'"><input type="radio" value="g"'+(h.color.mode=="g"?' checked="checked"':"")+'/>G:</label></td><td class="Text"><input type="text" maxlength="3" value="'+(o!=null?o.g:"")+'" title="'+
z.tooltips.green.textbox+'"/></td></tr><tr class="Blue"><td class="Radio"><label title="'+z.tooltips.blue.radio+'"><input type="radio" value="b"'+(h.color.mode=="b"?' checked="checked"':"")+'/>B:</label></td><td class="Text"><input type="text" maxlength="3" value="'+(o!=null?o.b:"")+'" title="'+z.tooltips.blue.textbox+'"/></td></tr><tr class="Alpha"><td class="Radio">'+(a.alphaSupport?'<label title="'+z.tooltips.alpha.radio+'"><input type="radio" value="a"'+(h.color.mode=="a"?' checked="checked"':
"")+"/>A:</label>":"&nbsp;")+'</td><td class="Text">'+(a.alphaSupport?'<input type="text" maxlength="'+(3+a.alphaPrecision)+'" value="'+(o!=null?Math.precision(o.a*100/255,a.alphaPrecision):"")+'" title="'+z.tooltips.alpha.textbox+'"/>&nbsp;%':"&nbsp;")+'</td></tr><tr class="Hex"><td colspan="2" class="Text"><label title="'+z.tooltips.hex.textbox+'">#:<input type="text" maxlength="6" class="Hex" value="'+(o!=null?o.hex:"")+'"/></label>'+(a.alphaSupport?'<input type="text" maxlength="2" class="AHex" value="'+
(o!=null?o.ahex.substring(6):"")+'" title="'+z.tooltips.hex.alpha+'"/></td>':"&nbsp;")+"</tr></tbody></table>";if(a.expandable){f.html(x);j(document.body).children("div.jPicker.Container").length==0?j(document.body).prepend(f):j(document.body).children("div.jPicker.Container:last").after(f);f.mousedown(function(){j(document.body).children("div.jPicker.Container").css({zIndex:999});f.css({zIndex:999})});f.css({left:a.position.x=="left"?d.offset().left-530-(a.position.y=="center"?25:0)+"px":a.position.x==
"center"?d.offset().left-260+"px":a.position.x=="right"?d.offset().left-10+(a.position.y=="center"?25:0)+"px":a.position.x=="screenCenter"?(j(document).width()>>1)-260+"px":d.offset().left+parseInt(a.position.x)+"px",position:"absolute",top:a.position.y=="top"?d.offset().top-312+"px":a.position.y=="center"?d.offset().top-156+"px":a.position.y=="bottom"?d.offset().top+25+"px":d.offset().top+parseInt(a.position.y)+"px"})}else{f=j(c);f.html(x)}x=f.find("tbody:first");m=x.find("div.Map:first");p=x.find("div.Bar:first");
var y=m.find("span"),D=p.find("span");n=y.filter(".Map1:first");l=y.filter(".Map2:first");s=y.filter(".Map3:first");q=D.filter(".Map1:first");t=D.filter(".Map2:first");e=D.filter(".Map3:first");C=D.filter(".Map4:first");A=D.filter(".Map5:first");u=D.filter(".Map6:first");g=new W(m,{map:{width:v.colorMap.width,height:v.colorMap.height},arrow:{image:v.clientPath+v.colorMap.arrow.file,width:v.colorMap.arrow.width,height:v.colorMap.arrow.height}});g.bind(qa);k=new W(p,{map:{width:v.colorBar.width,height:v.colorBar.height},
arrow:{image:v.clientPath+v.colorBar.arrow.file,width:v.colorBar.arrow.width,height:v.colorBar.arrow.height}});k.bind(ra);B=new la(x,w.active,a.expandable&&a.bindToInput?a.input:null,a.alphaPrecision);var y=o!=null?o.hex:null,G=x.find(".Preview"),D=x.find(".Button");L=G.find(".Active:first").css({backgroundColor:y&&"#"+y||"transparent"});J=G.find(".Current:first").css({backgroundColor:y&&"#"+y||"transparent"}).bind("click",da);r.call(c,J,Math.precision(w.current.val("a")*100)/255,4);M=D.find(".Ok:first").bind("click",
fa);N=D.find(".Cancel:first").bind("click",ea);K=D.find(".Grid:first");setTimeout(function(){E.call(c,n,v.clientPath+"Maps.png");E.call(c,l,v.clientPath+"Maps.png");E.call(c,s,v.clientPath+"map-opacity.png");E.call(c,q,v.clientPath+"Bars.png");E.call(c,t,v.clientPath+"Bars.png");E.call(c,e,v.clientPath+"Bars.png");E.call(c,C,v.clientPath+"Bars.png");E.call(c,A,v.clientPath+"bar-opacity.png");E.call(c,u,v.clientPath+"AlphaBar.png");E.call(c,G.find("div:first"),v.clientPath+"preview-opacity.png")},
0);x.find("td.Radio input").bind("click",ca);if(w.quickList&&w.quickList.length>0){D="";for(i=0;i<w.quickList.length;i++){(typeof w.quickList[i]).toString().toLowerCase()=="string"&&(w.quickList[i]=new b({hex:w.quickList[i]}));var H=w.quickList[i].val("a"),F=w.quickList[i].val("ahex");!a.alphaSupport&&F&&(F=F.substring(0,6)+"ff");var I=w.quickList[i].val("hex"),D=D+('<span class="QuickColor"'+(F&&' title="#'+F+'"'||"")+' style="background-color:'+(I&&"#"+I||"")+";"+(I?"":"background-image:url("+v.clientPath+
"NoColor.png)")+(a.alphaSupport&&H&&H<255?";opacity:"+Math.precision(H/255,4)+";filter:Alpha(opacity="+Math.precision(H/2.55,4)+")":"")+'">&nbsp;</span>')}E.call(c,K,v.clientPath+"bar-opacity.png");K.html(D);K.find(".QuickColor").click(ka)}aa.call(c,h.color.mode);w.active.bind($);j.isFunction(S)&&w.active.bind(S);w.current.bind(ta);if(a.expandable){c.icon=d.parents(".Icon:first");X=c.icon.find(".Color:first").css({backgroundColor:y&&"#"+y||"transparent"});P=c.icon.find(".Alpha:first");E.call(c,P,
v.clientPath+"bar-opacity.png");r.call(c,P,Math.precision((255-(o!=null?o.a:0))*100/255,4));Y=c.icon.find(".Image:first").css({backgroundImage:"url('"+v.clientPath+v.picker.file+"')"}).bind("click",ga);a.bindToInput&&a.updateInputColor&&a.input.css({backgroundColor:y&&"#"+y||"transparent",color:o==null||o.v>75?"#000000":"#ffffff"});Z=x.find(".Move:first").bind("mousedown",ja);w.active.bind(ua)}else U.call(c)},v=h.images,z=h.localization,w={active:"string"==(typeof h.color.active).toString().toLowerCase()?
new b({ahex:!h.window.alphaSupport&&h.color.active?h.color.active.substring(0,6)+"ff":h.color.active}):new b({ahex:!h.window.alphaSupport&&h.color.active.val("ahex")?h.color.active.val("ahex").substring(0,6)+"ff":h.color.active.val("ahex")}),current:"string"==(typeof h.color.active).toString().toLowerCase()?new b({ahex:!h.window.alphaSupport&&h.color.active?h.color.active.substring(0,6)+"ff":h.color.active}):new b({ahex:!h.window.alphaSupport&&h.color.active.val("ahex")?h.color.active.val("ahex").substring(0,
6)+"ff":h.color.active.val("ahex")}),quickList:h.color.quickList};j.extend(!0,c,{commitCallback:R,liveCallback:S,cancelCallback:Q,color:w,show:U,hide:T,destroy:function(){f.find("td.Radio input").unbind("click",ca);J.unbind("click",da);N.unbind("click",ea);M.unbind("click",fa);if(h.window.expandable){Y.unbind("click",ga);Z.unbind("mousedown",ja);c.icon=null}f.find(".QuickColor").unbind("click",ka);u=A=C=e=t=q=s=l=n=p=m=null;g.destroy();g=null;k.destroy();k=null;B.destroy();S=Q=R=K=N=M=J=L=B=null;
f.html("");for(i=0;i<O.length;i++)O[i]==c&&O.splice(i,1)}});O.push(c);setTimeout(function(){va.call(c)},0)})};j.fn.jPicker.defaults={window:{title:null,effects:{type:"show",speed:{show:0,hide:0}},position:{x:"screenCenter",y:"top"},expandable:!1,liveUpdate:!0,alphaSupport:!1,alphaPrecision:0,updateInputColor:!0},color:{mode:"h",active:new b({ahex:"#ffcc00ff"}),quickList:[new b({h:360,s:33,v:100}),new b({h:360,s:66,v:100}),new b({h:360,s:100,v:100}),new b({h:360,s:100,v:75}),new b({h:360,s:100,v:50}),
new b({h:180,s:0,v:100}),new b({h:30,s:33,v:100}),new b({h:30,s:66,v:100}),new b({h:30,s:100,v:100}),new b({h:30,s:100,v:75}),new b({h:30,s:100,v:50}),new b({h:180,s:0,v:90}),new b({h:60,s:33,v:100}),new b({h:60,s:66,v:100}),new b({h:60,s:100,v:100}),new b({h:60,s:100,v:75}),new b({h:60,s:100,v:50}),new b({h:180,s:0,v:80}),new b({h:90,s:33,v:100}),new b({h:90,s:66,v:100}),new b({h:90,s:100,v:100}),new b({h:90,s:100,v:75}),new b({h:90,s:100,v:50}),new b({h:180,s:0,v:70}),new b({h:120,s:33,v:100}),
new b({h:120,s:66,v:100}),new b({h:120,s:100,v:100}),new b({h:120,s:100,v:75}),new b({h:120,s:100,v:50}),new b({h:180,s:0,v:60}),new b({h:150,s:33,v:100}),new b({h:150,s:66,v:100}),new b({h:150,s:100,v:100}),new b({h:150,s:100,v:75}),new b({h:150,s:100,v:50}),new b({h:180,s:0,v:50}),new b({h:180,s:33,v:100}),new b({h:180,s:66,v:100}),new b({h:180,s:100,v:100}),new b({h:180,s:100,v:75}),new b({h:180,s:100,v:50}),new b({h:180,s:0,v:40}),new b({h:210,s:33,v:100}),new b({h:210,s:66,v:100}),new b({h:210,
s:100,v:100}),new b({h:210,s:100,v:75}),new b({h:210,s:100,v:50}),new b({h:180,s:0,v:30}),new b({h:240,s:33,v:100}),new b({h:240,s:66,v:100}),new b({h:240,s:100,v:100}),new b({h:240,s:100,v:75}),new b({h:240,s:100,v:50}),new b({h:180,s:0,v:20}),new b({h:270,s:33,v:100}),new b({h:270,s:66,v:100}),new b({h:270,s:100,v:100}),new b({h:270,s:100,v:75}),new b({h:270,s:100,v:50}),new b({h:180,s:0,v:10}),new b({h:300,s:33,v:100}),new b({h:300,s:66,v:100}),new b({h:300,s:100,v:100}),new b({h:300,s:100,v:75}),
new b({h:300,s:100,v:50}),new b({h:180,s:0,v:0}),new b({h:330,s:33,v:100}),new b({h:330,s:66,v:100}),new b({h:330,s:100,v:100}),new b({h:330,s:100,v:75}),new b({h:330,s:100,v:50}),new b]},images:{clientPath:"./common/js/plugins/ui.colorpicker/images/",colorMap:{width:256,height:256,arrow:{file:"mappoint.gif",width:15,height:15}},colorBar:{width:20,height:256,arrow:{file:"rangearrows.gif",width:20,height:7}},picker:{file:"picker.gif",width:25,height:24}},localization:{text:{title:"Drag Markers To Pick A Color",
newColor:"new",currentColor:"current",ok:"OK",cancel:"Cancel"},tooltips:{colors:{newColor:"New Color - Press &ldquo;OK&rdquo; To Commit",currentColor:"Click To Revert To Original Color"},buttons:{ok:"Commit To This Color Selection",cancel:"Cancel And Revert To Original Color"},hue:{radio:"Set To &ldquo;Hue&rdquo; Color Mode",textbox:"Enter A &ldquo;Hue&rdquo; Value (0-360&deg;)"},saturation:{radio:"Set To &ldquo;Saturation&rdquo; Color Mode",textbox:"Enter A &ldquo;Saturation&rdquo; Value (0-100%)"},
value:{radio:"Set To &ldquo;Value&rdquo; Color Mode",textbox:"Enter A &ldquo;Value&rdquo; Value (0-100%)"},red:{radio:"Set To &ldquo;Red&rdquo; Color Mode",textbox:"Enter A &ldquo;Red&rdquo; Value (0-255)"},green:{radio:"Set To &ldquo;Green&rdquo; Color Mode",textbox:"Enter A &ldquo;Green&rdquo; Value (0-255)"},blue:{radio:"Set To &ldquo;Blue&rdquo; Color Mode",textbox:"Enter A &ldquo;Blue&rdquo; Value (0-255)"},alpha:{radio:"Set To &ldquo;Alpha&rdquo; Color Mode",textbox:"Enter A &ldquo;Alpha&rdquo; Value (0-100)"},
hex:{textbox:"Enter A &ldquo;Hex&rdquo; Color Value (#000000-#ffffff)",alpha:"Enter A &ldquo;Alpha&rdquo; Value (#00-#ff)"}}}}})(jQuery,"1.1.6");

View file

@ -0,0 +1,5 @@
[option]
use_closure_compiler=true
[skip]
xe_colorpicker.js

View file

@ -1,2 +1,3 @@
css/xe_colorpicker.css
css/jPicker-1.1.6.min.css
jpicker-1.1.6.min.js
xe_colorpicker.js

View file

@ -3,363 +3,9 @@
* @author NHN (developers@xpressengine.com)
**/
jQuery(function($){
var ready = false;
var tmp = $('<span>').hide();
// var panel = null;
$.fn.xe_colorpicker = function(settings){
var selection = this;
if (!ready) {
ColorPicker.init(settings);
ready = true;
}
this.each(function(){
var col = color($(this).val());
$(this).val( col ).css('background-color', col );
setTextColor( $(this) );
}).focus(function(event){
var t = this;
$(this).select();
// show color picker
ColorPicker.show(this);
}).keypress(function(event){
if (!ColorPicker.is(':visible')) return;
if (/^#?[0-9a-f]{6}$/i.test( event.target.value )) {
ColorPicker.color( event.target.value );
}
});
$(document).mousedown(function(event){
var target = event.target;
if (selection.index(target) > -1) return;
if ($(target).parents().add(target).index(ColorPicker.element) > -1) return;
if ($(target).parents().add(target).index(ColorPicker.buttons) > -1) return;
ColorPicker.hide();
});
return this;
};
var ColorPicker = {
element : null,
picker : null,
colpane: null,
buttons : null,
_target : null,
_backup : null,
_hsv : null,
_mode : 'none',
init : function() {
var cp = this;
this.element = $('<div class="xe_colorpicker"><div class="colorpicker"><div class="colortable"><div class="background"><div class="indicator"></div></div></div><div class="huebar"><div class="background"><div class="indicator"></div></div></div></div><div class="buttons"><button type="button" class="ok">OK</button><button type="button" class="cancel">Cancel</button><button type="button" class="none">None</button></div></div>');
this.picker = this.element.find('> div.colorpicker');
this.colpane = this.picker.find('div.colortable > div.background');
this.colpoint = this.colpane.find('> .indicator');
this.buttons = this.element.find('> div.buttons');
this.huepane = this.element.find('div.huebar > .background');
this.huepoint = this.huepane.find('> .indicator');
this._mousedown = method(this.onmousedown, this);
this._mousemove = method(this.onmousemove, this);
this._mouseup = method(this.onmouseup, this);
this.picker.find('.background').mousedown(this._mousedown);
this.buttons.find('button.ok').click(method(this.ok,this));
this.buttons.find('button.cancel').click(method(this.cancel,this));
this.buttons.find('button.none').click(method(this.none,this));
// only for IE6
if ($.browser.msie && parseInt($.browser.version) < 7) {
this.element.append( $('<iframe>').css({position:'absolute','z-index':-1,left:0,top:0,width:9999,height:9999}) );
}
},
show : function(input) {
var pos = (input=$(input)).offset(), pos_panel;
//var par = input.get(0).offsetParent;
var par = $("body").get(0);
var btn = this.buttons.hide();
var col = color(input.val());
this._target = input;
this._backup = col;
this.color(col);
this._target.val(col);
pos_panel = this.element.hide().css({'z-index':99999,left:0,top:0}).appendTo( par ).show(300,function(){btn.slideDown(150)}).offset();
this.element.css({left:pos.left-pos_panel.left,top:pos.top-pos_panel.top+input.get(0).offsetHeight});
},
hide : function() {
var e = this.element;
this._target = null;
this.buttons.slideUp(100, function(){e.hide(200)});
},
visible : function() {
return this.element.is(':visible');
},
color : function(sColor) {
if (typeof sColor == 'string') {
var col = color(sColor);
var hsv = _hsv(rgb2hsv(hex2rgb(col)));
this.hsv(hsv.h, hsv.s, hsv.v);
} else if (this._target) {
return color(this._target.val());
}
},
hsv : function(h, s, v) {
var col = rgb2hex(hsv2rgb(h, s, v));
this._hsv = _hsv(h, s, v);
// background color and text color
this._target.val(col).css('background-color', col);
setTextColor(this._target);
// hue bar indicator
if (this._hue_h) this.huepoint.css('top', limit(0, Math.round((360-this._hsv.h)/360*this._hue_h), this._hue_h-1) - 3 );
// color - background
this.colpane.css('background-color', rgb2hex(hsv2rgb(h, 100, 100)) );
// color - indicator
if (this._col_h && this._col_w) {
this.colpoint.css({
top : limit(0, Math.round((100-this._hsv.v)/100*this._col_h), this._col_h-1) - 5,
left : limit(0, Math.round(this._hsv.s/100*this._col_w), this._col_w-1 ) - 5
});
}
},
onmousedown : function(event) {
var cur = $(event.target);
var par = cur.parent();
var pos = cur.offset();
var hue, sat, val; // hue, saturation, value
this._height = cur.height();
this._width = cur.width();
this._top = pos.top;
this._left = pos.left;
this._col_w = this.colpane.width();
this._col_h = this.colpane.width();
this._hue_h = this.huepane.height();
if (par.is('.colortable')) {
this._mode = 'color';
hue = this._hsv.h;
sat = ( limit(0, (event.pageX - this._left), this._width ) / this._width * 100);
val = ( limit(0, (this._height - event.pageY + this._top), this._height ) / this._height * 100);
} else if (par.is('.huebar')) {
this._mode = 'hue';
hue = limit(0, (this._height - event.pageY + this._top), this._height) / this._height * 360;
sat = this._hsv.s;
val = this._hsv.v;
}
this.hsv( hue, sat, val );
$(document).bind('mousemove', this._mousemove).bind('mouseup', this._mouseup);
},
onmousemove : function(event) {
var hue, sat, val; // hue, saturation, value
switch(this._mode) {
case 'color':
hue = this._hsv.h;
sat = ( limit(0, (event.pageX - this._left), this._width ) / this._width * 100);
val = ( limit(0, (this._height - event.pageY + this._top), this._height ) / this._height * 100);
break;
case 'hue':
hue = limit(0, (this._height - event.pageY + this._top), this._height) / this._height * 360;
sat = this._hsv.s;
val = this._hsv.v;
break;
}
this.hsv( hue, sat, val );
},
onmouseup : function(event) {
this._mode = 'none';
$(document).unbind('mousemove', this._mousemove).unbind('mouseup', this._mouseup);
},
ok : function() {
this.hide();
},
cancel : function() {
this.color(this._backup);
this.hide();
},
none : function() {
this._target.attr('value','transparent').css('background','').css('color','#000000');
this.hide();
}
};
function setTextColor(input) {
var hex = input.css('color', '').val(), hsv, rgb;
if (hex == 'transparent' || hex == '') return;
rgb = hex2rgb(hex);
hsv = rgb2hsv(255-rgb.r, 255-rgb.g, 255-rgb.b); // 보색을 구한 뒤
hex = rgb2hex(hsv2rgb(0, 0, hsv.v>50?100:0)); // 보색에 해당하는 흑백으로 결정
input.css('color', hex);
}
function method(func, thisObj) {
return function() { return func.apply(thisObj, arguments) }
}
function color(str) {
var col = $.trim(str);
var regHex1 = /^#[0-9a-f]{6}$/i;
var regHex2 = /^#?([0-9a-f])([0-9a-f])([0-9a-f])$/i; // short hex
if (regHex1.test(col)) return col.toUpperCase();
if (regHex2.test(col)) return col.replace(regHex2, '#$1$1$2$2$3$3').toUpperCase();
try {
col = tmp.appendTo($('<body>')).css('background-color', col).css('background-color');
} catch(e) {
col = 'transparent';
} finally {
tmp.css('background-color','').remove();
}
if (/^rgb\(([0-9, ]+)\)$/i.test(col)) col = rgb2hex(RegExp.$1.split(/,\s*/));
if (!/#[0-9a-f]{6}/i.test(col)) col = 'transparent';
return col;
}
function _rgb(rgb, _g, _b) {
var r, g, b;
if (typeof arguments[2] == "number") {
r = rgb;
g = _g;
b = _b;
} else if (typeof rgb == "object") {
if (rgb.constructor == Array) {
r = rgb[0] || 0; g = rgb[1] || 0; b = rgb[2] || 0;
} else {
r = rgb.r || 0; g = rgb.g || 0; b = rgb.b || 0;
}
}
rgb = [];
rgb.r = rgb[0] = r = parseInt(r, 10);
rgb.g = rgb[1] = g = parseInt(g, 10);
rgb.b = rgb[2] = b = parseInt(b, 10);
return rgb;
}
function _hsv(hsv, _s, _v) {
var h, s, v;
if (typeof arguments[2] == "number") {
h = hsv; s = _s; v = _v;
} else if (typeof hsv == "object") {
if (hsv.constructor == Array) {
h = hsv[0] || 0; s = hsv[1] || 0; v = hsv[2] || 0;
} else {
h = hsv.h || 0; s = hsv.s || 0; v = hsv.v || 0;
}
}
hsv = [];
hsv.h = hsv[0] = h = parseInt(h, 10);
hsv.s = hsv[1] = s = parseInt(s, 10);
hsv.v = hsv[2] = v = parseInt(v, 10);
return hsv;
}
function rgb2hex(rgb, _g, _b) {
var rgb = _rgb(rgb, _g, _b);
for(var i=0; i < rgb.length; i++) {
(rgb[i] = Number(rgb[i]).toString(16)).length<2?rgb[i]='0'+rgb[i]:0;
}
return '#'+rgb.join('').toUpperCase();
}
function hex2rgb(hex) {
var r=0, g=0, b=0;
if (/^#?([0-9a-f]{1,2})([0-9a-f]{1,2})([0-9a-f]{1,2})$/i.test(hex)) {
r = parseInt(RegExp.$1, 16);
g = parseInt(RegExp.$2, 16);
b = parseInt(RegExp.$3, 16);
}
return _rgb(r, g, b);
}
function hsv2rgb(hsv, _s, _v) {
var r=0, g=0, b=0;
var h=0, s=0, v=0;
var i, f, p, q, t;
hsv = _hsv(hsv, _s, _v);
h = (hsv[0] % 360) / 60; s = hsv[1] / 100; v = hsv[2] / 100;
i = Math.floor(h);
f = h-i;
p = v*(1-s);
q = v*(1-s*f);
t = v*(1-s*(1-f));
switch (i) {
case 0: r=v; g=t; b=p; break;
case 1: r=q; g=v; b=p; break;
case 2: r=p; g=v; b=t; break;
case 3: r=p; g=q; b=v; break;
case 4: r=t; g=p; b=v; break;
case 5: r=v; g=p; b=q; break;
case 6: break;
}
return _rgb(Math.floor(r*255), Math.floor(g*255), Math.floor(b*255));
}
function rgb2hsv(rgb, _g, _b) {
var rgb = _rgb(rgb, _g, _b);
var r = rgb[0], g = rgb[1], b = rgb[2];
var h = 0, s = 0, v = Math.max(r,g,b), min = Math.min(r,g,b), delta = v - min;
if (s = v?delta/v:0) {
if (r == v) h = 60 * (g - b) / delta;
else if (g == v) h = 120 + 60 * (b - r) / delta;
else if (b == v) h = 240 + 60 * (r - g) / delta;
if (h < 0) h += 360;
}
return _hsv(Math.floor(h), Math.floor(s*100), Math.floor(v/255*100));
}
function limit(min, val, max){
return Math.min(Math.max(min, val), max);
return this.jPicker(settings);
}
$('input.color-indicator').xe_colorpicker();

60
common/js/x.min.js vendored
View file

@ -3,36 +3,36 @@
* Distributed by GNU LGPL. For copyrights, license, documentation and more visit Cross-Browser.com
* Copyright 2001-2005 Michael Foster (Cross-Browser.com)
**/
function xDeprecate(a){typeof console=="object"&&typeof console.log=="function"&&console.log("DEPRECATED : "+a+"() is deprecated function.")}var xOp7Up,xOp6Dn,xIE4Up,xIE4,xIE5,xIE6,xNN4,xUA=navigator.userAgent.toLowerCase();
if(window.opera){var i=xUA.indexOf("opera");if(i!=-1){var v=parseInt(xUA.charAt(i+6));xOp7Up=v>=7;xOp6Dn=v<7}}else navigator.vendor!="KDE"&&document.all&&xUA.indexOf("msie")!=-1?(xIE4Up=parseFloat(navigator.appVersion)>=4,xIE4=xUA.indexOf("msie 4")!=-1,xIE5=xUA.indexOf("msie 5")!=-1,xIE6=xUA.indexOf("msie 6")!=-1):document.layers&&(xNN4=true);var xMac=xUA.indexOf("mac")!=-1,xFF=xUA.indexOf("firefox")!=-1;
function xAddEventListener(a,b,d,e){xDeprecate("xAddEventListener");if(a=xGetElementById(a)){b=b.toLowerCase();if(!xIE4Up&&!xOp7Up&&a==window){if(b=="resize"){window.xPCW=xClientWidth();window.xPCH=xClientHeight();window.xREL=d;xResizeEvent();return}if(b=="scroll"){window.xPSL=xScrollLeft();window.xPST=xScrollTop();window.xSEL=d;xScrollEvent();return}}var f="e.on"+b+"=eL";a.addEventListener?a.addEventListener(b,d,e):a.attachEvent?a.attachEvent("on"+b,d):eval(f)}}
function xDeprecate(a){"object"==typeof console&&"function"==typeof console.log&&console.log("DEPRECATED : "+a+"() is deprecated function.")}var xOp7Up,xOp6Dn,xIE4Up,xIE4,xIE5,xIE6,xNN4,xUA=navigator.userAgent.toLowerCase();
if(window.opera){var i=xUA.indexOf("opera");if(-1!=i){var v=parseInt(xUA.charAt(i+6));xOp7Up=7<=v;xOp6Dn=7>v}}else"KDE"!=navigator.vendor&&document.all&&-1!=xUA.indexOf("msie")?(xIE4Up=4<=parseFloat(navigator.appVersion),xIE4=-1!=xUA.indexOf("msie 4"),xIE5=-1!=xUA.indexOf("msie 5"),xIE6=-1!=xUA.indexOf("msie 6")):document.layers&&(xNN4=!0);var xMac=-1!=xUA.indexOf("mac"),xFF=-1!=xUA.indexOf("firefox");
function xAddEventListener(a,b,d,e){xDeprecate("xAddEventListener");if(a=xGetElementById(a)){b=b.toLowerCase();if(!xIE4Up&&!xOp7Up&&a==window){if("resize"==b){window.xPCW=xClientWidth();window.xPCH=xClientHeight();window.xREL=d;xResizeEvent();return}if("scroll"==b){window.xPSL=xScrollLeft();window.xPST=xScrollTop();window.xSEL=d;xScrollEvent();return}}var f="e.on"+b+"=eL";a.addEventListener?a.addEventListener(b,d,e):a.attachEvent?a.attachEvent("on"+b,d):eval(f)}}
function xResizeEvent(){xDeprecate("xResizeEvent");window.xREL&&setTimeout("xResizeEvent()",250);var a=xClientWidth(),b=xClientHeight();if(window.xPCW!=a||window.xPCH!=b)window.xPCW=a,window.xPCH=b,window.xREL&&window.xREL()}function xScrollEvent(){xDeprecate("xScrollEvent");window.xSEL&&setTimeout("xScrollEvent()",250);var a=xScrollLeft(),b=xScrollTop();if(window.xPSL!=a||window.xPST!=b)window.xPSL=a,window.xPST=b,window.xSEL&&window.xSEL()}
function xAppendChild(a,b){xDeprecate("xAppendChild");return a.appendChild?a.appendChild(b):null}
function xClientHeight(){xDeprecate("xClientHeight");var a=0;if(xOp6Dn)a=window.innerHeight;else if(document.compatMode=="CSS1Compat"&&!window.opera&&document.documentElement&&document.documentElement.clientHeight)a=document.documentElement.clientHeight;else if(document.body&&document.body.clientHeight)a=document.body.clientHeight;else if(xDef(window.innerWidth,window.innerHeight,document.width))a=window.innerHeight,document.width>window.innerWidth&&(a-=16);return a}
function xClientWidth(){xDeprecate("xClientWidth");var a=0;if(xOp6Dn)a=window.innerWidth;else if(document.compatMode=="CSS1Compat"&&!window.opera&&document.documentElement&&document.documentElement.clientWidth)a=document.documentElement.clientWidth;else if(document.body&&document.body.clientWidth)a=document.body.clientWidth;else if(xDef(window.innerWidth,window.innerHeight,document.height))a=window.innerWidth,document.height>window.innerHeight&&(a-=16);return a}
function xCreateElement(a){xDeprecate("xCreateElement");return document.createElement?document.createElement(a):null}function xDef(){xDeprecate("xDef");for(var a=0;a<arguments.length;++a)if(typeof arguments[a]=="undefined")return false;return true}function xDeleteCookie(a,b){xDeprecate("xDeleteCookie");if(xGetCookie(a))document.cookie=a+"=; path="+(!b?"/":b)+"; expires="+(new Date(0)).toGMTString()}
function xDisplay(a,b){xDeprecate("xDisplay");if(!(a=xGetElementById(a)))return null;if(a.style&&xDef(a.style.display)){if(xStr(b))a.style.display=b;return a.style.display}return null}
function xEvent(a){xDeprecate("xEvent");if(a=a||window.event){if(a.type)this.type=a.type;if(a.target)this.target=a.target;else if(a.srcElement)this.target=a.srcElement;if(a.relatedTarget)this.relatedTarget=a.relatedTarget;else if(a.type=="mouseover"&&a.fromElement)this.relatedTarget=a.fromElement;else if(a.type=="mouseout")this.relatedTarget=a.toElement;if(xOp6Dn)this.pageX=a.clientX,this.pageY=a.clientY;else if(xDef(a.pageX,a.pageY))this.pageX=a.pageX,this.pageY=a.pageY;else if(xDef(a.clientX,a.clientY))this.pageX=
a.clientX+xScrollLeft(),this.pageY=a.clientY+xScrollTop();xDef(a.offsetX,a.offsetY)?(this.offsetX=a.offsetX,this.offsetY=a.offsetY):xDef(a.layerX,a.layerY)?(this.offsetX=a.layerX,this.offsetY=a.layerY):(this.offsetX=this.pageX-xPageX(this.target),this.offsetY=this.pageY-xPageY(this.target));if(a.keyCode)this.keyCode=a.keyCode;else if(xDef(a.which)&&a.type.indexOf("key")!=-1)this.keyCode=a.which;this.shiftKey=a.shiftKey;this.ctrlKey=a.ctrlKey;this.altKey=a.altKey}}
function xFirstChild(a,b){xDeprecate("xFirstChild");var d=a?a.firstChild:null;if(b)for(;d&&d.nodeName!=b;)d=d.nextSibling;else for(;d&&d.nodeType!=1;)d=d.nextSibling;return d}function xGetBodyWidth(){xDeprecate("xGetBodyWidth");var a=xClientWidth(),b=window.document.body.scrollWidth;return a>b?a:b}function xGetBodyHeight(){xDeprecate("xGetBodyHeight");var a=xClientHeight(),b=window.document.body.scrollHeight;return a>b?a:b}
function xClientHeight(){xDeprecate("xClientHeight");var a=0;xOp6Dn?a=window.innerHeight:"CSS1Compat"==document.compatMode&&!window.opera&&document.documentElement&&document.documentElement.clientHeight?a=document.documentElement.clientHeight:document.body&&document.body.clientHeight?a=document.body.clientHeight:xDef(window.innerWidth,window.innerHeight,document.width)&&(a=window.innerHeight,document.width>window.innerWidth&&(a-=16));return a}
function xClientWidth(){xDeprecate("xClientWidth");var a=0;xOp6Dn?a=window.innerWidth:"CSS1Compat"==document.compatMode&&!window.opera&&document.documentElement&&document.documentElement.clientWidth?a=document.documentElement.clientWidth:document.body&&document.body.clientWidth?a=document.body.clientWidth:xDef(window.innerWidth,window.innerHeight,document.height)&&(a=window.innerWidth,document.height>window.innerHeight&&(a-=16));return a}
function xCreateElement(a){xDeprecate("xCreateElement");return document.createElement?document.createElement(a):null}function xDef(){xDeprecate("xDef");for(var a=0;a<arguments.length;++a)if("undefined"==typeof arguments[a])return!1;return!0}function xDeleteCookie(a,b){xDeprecate("xDeleteCookie");xGetCookie(a)&&(document.cookie=a+"=; path="+(!b?"/":b)+"; expires="+(new Date(0)).toGMTString())}
function xDisplay(a,b){xDeprecate("xDisplay");return!(a=xGetElementById(a))?null:a.style&&xDef(a.style.display)?(xStr(b)&&(a.style.display=b),a.style.display):null}
function xEvent(a){xDeprecate("xEvent");if(a=a||window.event)a.type&&(this.type=a.type),a.target?this.target=a.target:a.srcElement&&(this.target=a.srcElement),a.relatedTarget?this.relatedTarget=a.relatedTarget:"mouseover"==a.type&&a.fromElement?this.relatedTarget=a.fromElement:"mouseout"==a.type&&(this.relatedTarget=a.toElement),xOp6Dn?(this.pageX=a.clientX,this.pageY=a.clientY):xDef(a.pageX,a.pageY)?(this.pageX=a.pageX,this.pageY=a.pageY):xDef(a.clientX,a.clientY)&&(this.pageX=a.clientX+xScrollLeft(),
this.pageY=a.clientY+xScrollTop()),xDef(a.offsetX,a.offsetY)?(this.offsetX=a.offsetX,this.offsetY=a.offsetY):xDef(a.layerX,a.layerY)?(this.offsetX=a.layerX,this.offsetY=a.layerY):(this.offsetX=this.pageX-xPageX(this.target),this.offsetY=this.pageY-xPageY(this.target)),a.keyCode?this.keyCode=a.keyCode:xDef(a.which)&&-1!=a.type.indexOf("key")&&(this.keyCode=a.which),this.shiftKey=a.shiftKey,this.ctrlKey=a.ctrlKey,this.altKey=a.altKey}
function xFirstChild(a,b){xDeprecate("xFirstChild");var d=a?a.firstChild:null;if(b)for(;d&&d.nodeName!=b;)d=d.nextSibling;else for(;d&&1!=d.nodeType;)d=d.nextSibling;return d}function xGetBodyWidth(){xDeprecate("xGetBodyWidth");var a=xClientWidth(),b=window.document.body.scrollWidth;return a>b?a:b}function xGetBodyHeight(){xDeprecate("xGetBodyHeight");var a=xClientHeight(),b=window.document.body.scrollHeight;return a>b?a:b}
function xGetComputedStyle(a,b,d){xDeprecate("xGetComputedStyle");var e="undefined",f=document.defaultView;if(f&&f.getComputedStyle)(a=f.getComputedStyle(a,""))&&(e=a.getPropertyValue(b));else if(a.currentStyle){e=b.split("-");b=e[0];for(f=1;f<e.length;++f)c=e[f].charAt(0),b+=e[f].replace(c,c.toUpperCase());e=a.currentStyle[b]}else return null;return d?parseInt(e)||0:e}
function xGetCookie(a){xDeprecate("xGetCookie");var b=null,d=a+"=";if(document.cookie.length>0&&(a=document.cookie.indexOf(d),a!=-1)){a+=d.length;b=document.cookie.indexOf(";",a);if(b==-1)b=document.cookie.length;b=unescape(document.cookie.substring(a,b))}return b}function xGetElementById(a){xDeprecate("xGetElementById");return typeof a!="string"?a:a=document.getElementById?document.getElementById(a):document.all?document.all[a]:null}
function xGetElementsByAttribute(a,b,d,e){xDeprecate("xGetElementsByAttribute");var f,h=[],d=RegExp(d,"i");f=xGetElementsByTagName(a);for(var g=0;g<f.length;++g)(a=f[g].getAttribute(b))||(a=f[g][b]),typeof a=="string"&&a.search(d)!=-1&&(h[h.length]=f[g],e&&e(f[g]));return h}
function xGetElementsByClassName(a,b,d,e){xDeprecate("xGetElementsByClassName");for(var f=[],a=RegExp("\\b"+a+"\\b","i"),b=xGetElementsByTagName(d,b),d=0;d<b.length;++d)b[d].className&&b[d].className.search(a)!=-1&&(f[f.length]=b[d],e&&e(b[d]));return f}function xGetElementsByTagName(a,b){xDeprecate("xGetElementsByTagName");var d=null,a=a||"*",b=b||document;xIE4||xIE5?d=a=="*"?b.all:b.all.tags(a):b.getElementsByTagName&&(d=b.getElementsByTagName(a));return d||[]}
function xGetURLArguments(){xDeprecate("xGetURLArguments");var a=location.href.indexOf("?"),b=[];if(a!=-1)for(var a=location.href.substring(a+1,location.href.length).split("&"),d=0;d<a.length;d++)nameVal=a[d].split("="),b[d]=nameVal[1],b[nameVal[0]]=nameVal[1];return b}
function xHeight(a,b){xDeprecate("xHeight");if(!(a=xGetElementById(a)))return 0;var b=xNum(b)?b<0?0:Math.round(b):-1,d=xDef(a.style);if(a==document||a.tagName.toLowerCase()=="html"||a.tagName.toLowerCase()=="body")b=xClientHeight();else if(d&&xDef(a.offsetHeight)&&xStr(a.style.height)){if(b>=0){var e=d=0,f=0,h=0;if(document.compatMode=="CSS1Compat"){var g=xGetComputedStyle,d=g(a,"padding-top",1);if(d!==null)e=g(a,"padding-bottom",1),f=g(a,"border-top-width",1),h=g(a,"border-bottom-width",1);else if(xDef(a.offsetHeight,
a.style.height))a.style.height=b+"px",d=a.offsetHeight-b}b-=d+e+f+h;if(isNaN(b)||b<0)return null;else a.style.height=b+"px"}b=a.offsetHeight}else if(d&&xDef(a.style.pixelHeight)){if(b>=0)a.style.pixelHeight=b;b=a.style.pixelHeight}return b}function xHex(a,b,d){xDeprecate("xHex");var e="",a=Math.ceil(a);d&&(e=d);a=a.toString(16);for(d=0;d<b-a.length;++d)e+="0";return e+a}function xHide(a){xDeprecate("xHide");return xVisibility(a,0)}
function xInnerHtml(a,b){xDeprecate("xInnerHtml");if(!(a=xGetElementById(a))||!xStr(a.innerHTML))return null;var d=a.innerHTML;if(xStr(b))a.innerHTML=b;return d}function xLeft(a,b){xDeprecate("xLeft");if(!(a=xGetElementById(a)))return 0;var d=xDef(a.style);if(d&&xStr(a.style.left))xNum(b)?a.style.left=b+"px":(b=parseInt(a.style.left),isNaN(b)&&(b=0));else if(d&&xDef(a.style.pixelLeft))xNum(b)?a.style.pixelLeft=b:b=a.style.pixelLeft;return b}
function xMoveTo(a,b,d){xDeprecate("xMoveTo");xLeft(a,b);xTop(a,d)}function xName(a){xDeprecate("xName");return a?a.id&&a.id!=""?a.id:a.name&&a.name!=""?a.name:a.nodeName&&a.nodeName!=""?a.nodeName:a.tagName&&a.tagName!=""?a.tagName:a:a}function xNextSib(a,b){xDeprecate("xNextSib");var d=a?a.nextSibling:null;if(b)for(;d&&d.nodeName!=b;)d=d.nextSibling;else for(;d&&d.nodeType!=1;)d=d.nextSibling;return d}
function xNum(){xDeprecate("xNum");for(var a=0;a<arguments.length;++a)if(isNaN(arguments[a])||typeof arguments[a]!="number")return false;return true}function xOffsetLeft(a){xDeprecate("xOffsetLeft");return!(a=xGetElementById(a))?0:xDef(a.offsetLeft)?a.offsetLeft:0}function xOffsetTop(a){xDeprecate("xOffsetTop");return!(a=xGetElementById(a))?0:xDef(a.offsetTop)?a.offsetTop:0}
function xPad(a,b,d,e){xDeprecate("xPad");typeof a!="string"&&(a+="");if(e)for(e=a.length;e<b;++e)a=d+a;else for(e=a.length;e<b;++e)a+=d;return a}function xPageX(a){xDeprecate("xPageX");if(!(a=xGetElementById(a)))return 0;for(var b=0;a;)xDef(a.offsetLeft)&&(b+=a.offsetLeft),a=xDef(a.offsetParent)?a.offsetParent:null;return b}
function xPageY(a){xDeprecate("xPageY");if(!(a=xGetElementById(a)))return 0;for(var b=0;a;)xDef(a.offsetTop)&&(b+=a.offsetTop),a=xDef(a.offsetParent)?a.offsetParent:null;return b}function xParent(a,b){xDeprecate("xParent");if(!(a=xGetElementById(a)))return null;var d=null;if(!b&&xDef(a.offsetParent))d=a.offsetParent;else if(xDef(a.parentNode))d=a.parentNode;else if(xDef(a.parentElement))d=a.parentElement;return d}
function xPreventDefault(a){xDeprecate("xPreventDefault");if(a&&a.preventDefault)a.preventDefault();else if(window.event)window.event.returnValue=false}function xPrevSib(a,b){xDeprecate("xPrevSib");var d=a?a.previousSibling:null;if(b)for(;d&&d.nodeName!=b;)d=d.previousSibling;else for(;d&&d.nodeType!=1;)d=d.previousSibling;return d}
function xRemoveEventListener(a,b,d,e){xDeprecate("xRemoveEventListener");if(a=xGetElementById(a)){b=b.toLowerCase();if(!xIE4Up&&!xOp7Up&&a==window){if(b=="resize"){window.xREL=null;return}if(b=="scroll"){window.xSEL=null;return}}var f="e.on"+b+"=null";a.removeEventListener?a.removeEventListener(b,d,e):a.detachEvent?a.detachEvent("on"+b,d):eval(f)}}function xResizeTo(a,b,d){xDeprecate("xResizeTo");xWidth(a,b);xHeight(a,d)}
function xScrollLeft(a,b){xDeprecate("xScrollLeft");var d=0;if(!xDef(a)||b||a==document||a.tagName.toLowerCase()=="html"||a.tagName.toLowerCase()=="body"){var e=window;b&&a&&(e=a);if(e.document.documentElement&&e.document.documentElement.scrollLeft)d=e.document.documentElement.scrollLeft;else if(e.document.body&&xDef(e.document.body.scrollLeft))d=e.document.body.scrollLeft}else if((a=xGetElementById(a))&&xNum(a.scrollLeft))d=a.scrollLeft;return d}
function xScrollTop(a,b){xDeprecate("xScrollTop");var d=0;if(!xDef(a)||b||a==document||a.tagName.toLowerCase()=="html"||a.tagName.toLowerCase()=="body"){var e=window;b&&a&&(e=a);if(e.document.documentElement&&e.document.documentElement.scrollTop)d=e.document.documentElement.scrollTop;else if(e.document.body&&xDef(e.document.body.scrollTop))d=e.document.body.scrollTop}else if((a=xGetElementById(a))&&xNum(a.scrollTop))d=a.scrollTop;return d}
function xSetCookie(a,b,d,e){xDeprecate("xSetCookie");document.cookie=a+"="+escape(b)+(!d?"":"; expires="+d.toGMTString())+"; path="+(!e?"/":e)}function xShow(a){xDeprecate("xShow");return xVisibility(a,1)}function xStr(a){xDeprecate("xStr");for(var b=0;b<arguments.length;++b)if(typeof arguments[b]!="string")return false;return true}
function xTop(a,b){xDeprecate("xTop");if(!(a=xGetElementById(a)))return 0;var d=xDef(a.style);if(d&&xStr(a.style.top))xNum(b)?a.style.top=b+"px":(b=parseInt(a.style.top),isNaN(b)&&(b=0));else if(d&&xDef(a.style.pixelTop))xNum(b)?a.style.pixelTop=b:b=a.style.pixelTop;return b}function xVisibility(a,b){xDeprecate("xVisibility");if(!(a=xGetElementById(a)))return null;if(a.style&&xDef(a.style.visibility)){if(xDef(b))a.style.visibility=b?"visible":"hidden";return a.style.visibility}return null}
function xWidth(a,b){xDeprecate("xWidth");if(!(a=xGetElementById(a)))return 0;var b=xNum(b)?b<0?0:Math.round(b):-1,d=xDef(a.style);if(a==document||a.tagName.toLowerCase()=="html"||a.tagName.toLowerCase()=="body")b=xClientWidth();else if(d&&xDef(a.offsetWidth)&&xStr(a.style.width)){if(b>=0){var e=d=0,f=0,h=0;if(document.compatMode=="CSS1Compat"){var g=xGetComputedStyle,d=g(a,"padding-left",1);if(d!==null)e=g(a,"padding-right",1),f=g(a,"border-left-width",1),h=g(a,"border-right-width",1);else if(xDef(a.offsetWidth,
a.style.width))a.style.width=b+"px",d=a.offsetWidth-b}b-=d+e+f+h;if(isNaN(b)||b<0)return null;else a.style.width=b+"px"}b=a.offsetWidth}else if(d&&xDef(a.style.pixelWidth)){if(b>=0)a.style.pixelWidth=b;b=a.style.pixelWidth}return b}function xZIndex(a,b){xDeprecate("xZIndex");if(!(a=xGetElementById(a)))return 0;if(a.style&&xDef(a.style.zIndex)){if(xNum(b))a.style.zIndex=b;b=parseInt(a.style.zIndex)}return b}
function xStopPropagation(a){xDeprecate("xStopPropagation");if(a&&a.stopPropagation)a.stopPropagation();else if(window.event)window.event.cancelBubble=true};
function xGetCookie(a){xDeprecate("xGetCookie");var b=null,d=a+"=";0<document.cookie.length&&(a=document.cookie.indexOf(d),-1!=a&&(a+=d.length,b=document.cookie.indexOf(";",a),-1==b&&(b=document.cookie.length),b=unescape(document.cookie.substring(a,b))));return b}function xGetElementById(a){xDeprecate("xGetElementById");return"string"!=typeof a?a:a=document.getElementById?document.getElementById(a):document.all?document.all[a]:null}
function xGetElementsByAttribute(a,b,d,e){xDeprecate("xGetElementsByAttribute");var f,h=[],d=RegExp(d,"i");f=xGetElementsByTagName(a);for(var g=0;g<f.length;++g)(a=f[g].getAttribute(b))||(a=f[g][b]),"string"==typeof a&&-1!=a.search(d)&&(h[h.length]=f[g],e&&e(f[g]));return h}
function xGetElementsByClassName(a,b,d,e){xDeprecate("xGetElementsByClassName");for(var f=[],a=RegExp("\\b"+a+"\\b","i"),b=xGetElementsByTagName(d,b),d=0;d<b.length;++d)b[d].className&&-1!=b[d].className.search(a)&&(f[f.length]=b[d],e&&e(b[d]));return f}function xGetElementsByTagName(a,b){xDeprecate("xGetElementsByTagName");var d=null,a=a||"*",b=b||document;xIE4||xIE5?d="*"==a?b.all:b.all.tags(a):b.getElementsByTagName&&(d=b.getElementsByTagName(a));return d||[]}
function xGetURLArguments(){xDeprecate("xGetURLArguments");var a=location.href.indexOf("?"),b=[];if(-1!=a)for(var a=location.href.substring(a+1,location.href.length).split("&"),d=0;d<a.length;d++)nameVal=a[d].split("="),b[d]=nameVal[1],b[nameVal[0]]=nameVal[1];return b}
function xHeight(a,b){xDeprecate("xHeight");if(!(a=xGetElementById(a)))return 0;var b=xNum(b)?0>b?0:Math.round(b):-1,d=xDef(a.style);if(a==document||"html"==a.tagName.toLowerCase()||"body"==a.tagName.toLowerCase())b=xClientHeight();else if(d&&xDef(a.offsetHeight)&&xStr(a.style.height)){if(0<=b){var e=d=0,f=0,h=0;if("CSS1Compat"==document.compatMode){var g=xGetComputedStyle,d=g(a,"padding-top",1);null!==d?(e=g(a,"padding-bottom",1),f=g(a,"border-top-width",1),h=g(a,"border-bottom-width",1)):xDef(a.offsetHeight,
a.style.height)&&(a.style.height=b+"px",d=a.offsetHeight-b)}b-=d+e+f+h;if(isNaN(b)||0>b)return null;a.style.height=b+"px"}b=a.offsetHeight}else d&&xDef(a.style.pixelHeight)&&(0<=b&&(a.style.pixelHeight=b),b=a.style.pixelHeight);return b}function xHex(a,b,d){xDeprecate("xHex");var e="",a=Math.ceil(a);d&&(e=d);a=a.toString(16);for(d=0;d<b-a.length;++d)e+="0";return e+a}function xHide(a){xDeprecate("xHide");return xVisibility(a,0)}
function xInnerHtml(a,b){xDeprecate("xInnerHtml");if(!(a=xGetElementById(a))||!xStr(a.innerHTML))return null;var d=a.innerHTML;xStr(b)&&(a.innerHTML=b);return d}function xLeft(a,b){xDeprecate("xLeft");if(!(a=xGetElementById(a)))return 0;var d=xDef(a.style);d&&xStr(a.style.left)?xNum(b)?a.style.left=b+"px":(b=parseInt(a.style.left),isNaN(b)&&(b=0)):d&&xDef(a.style.pixelLeft)&&(xNum(b)?a.style.pixelLeft=b:b=a.style.pixelLeft);return b}
function xMoveTo(a,b,d){xDeprecate("xMoveTo");xLeft(a,b);xTop(a,d)}function xName(a){xDeprecate("xName");return a?a.id&&""!=a.id?a.id:a.name&&""!=a.name?a.name:a.nodeName&&""!=a.nodeName?a.nodeName:a.tagName&&""!=a.tagName?a.tagName:a:a}function xNextSib(a,b){xDeprecate("xNextSib");var d=a?a.nextSibling:null;if(b)for(;d&&d.nodeName!=b;)d=d.nextSibling;else for(;d&&1!=d.nodeType;)d=d.nextSibling;return d}
function xNum(){xDeprecate("xNum");for(var a=0;a<arguments.length;++a)if(isNaN(arguments[a])||"number"!=typeof arguments[a])return!1;return!0}function xOffsetLeft(a){xDeprecate("xOffsetLeft");return!(a=xGetElementById(a))?0:xDef(a.offsetLeft)?a.offsetLeft:0}function xOffsetTop(a){xDeprecate("xOffsetTop");return!(a=xGetElementById(a))?0:xDef(a.offsetTop)?a.offsetTop:0}
function xPad(a,b,d,e){xDeprecate("xPad");"string"!=typeof a&&(a+="");if(e)for(e=a.length;e<b;++e)a=d+a;else for(e=a.length;e<b;++e)a+=d;return a}function xPageX(a){xDeprecate("xPageX");if(!(a=xGetElementById(a)))return 0;for(var b=0;a;)xDef(a.offsetLeft)&&(b+=a.offsetLeft),a=xDef(a.offsetParent)?a.offsetParent:null;return b}
function xPageY(a){xDeprecate("xPageY");if(!(a=xGetElementById(a)))return 0;for(var b=0;a;)xDef(a.offsetTop)&&(b+=a.offsetTop),a=xDef(a.offsetParent)?a.offsetParent:null;return b}function xParent(a,b){xDeprecate("xParent");if(!(a=xGetElementById(a)))return null;var d=null;!b&&xDef(a.offsetParent)?d=a.offsetParent:xDef(a.parentNode)?d=a.parentNode:xDef(a.parentElement)&&(d=a.parentElement);return d}
function xPreventDefault(a){xDeprecate("xPreventDefault");a&&a.preventDefault?a.preventDefault():window.event&&(window.event.returnValue=!1)}function xPrevSib(a,b){xDeprecate("xPrevSib");var d=a?a.previousSibling:null;if(b)for(;d&&d.nodeName!=b;)d=d.previousSibling;else for(;d&&1!=d.nodeType;)d=d.previousSibling;return d}
function xRemoveEventListener(a,b,d,e){xDeprecate("xRemoveEventListener");if(a=xGetElementById(a)){b=b.toLowerCase();if(!xIE4Up&&!xOp7Up&&a==window){if("resize"==b){window.xREL=null;return}if("scroll"==b){window.xSEL=null;return}}var f="e.on"+b+"=null";a.removeEventListener?a.removeEventListener(b,d,e):a.detachEvent?a.detachEvent("on"+b,d):eval(f)}}function xResizeTo(a,b,d){xDeprecate("xResizeTo");xWidth(a,b);xHeight(a,d)}
function xScrollLeft(a,b){xDeprecate("xScrollLeft");var d=0;if(!xDef(a)||b||a==document||"html"==a.tagName.toLowerCase()||"body"==a.tagName.toLowerCase()){var e=window;b&&a&&(e=a);e.document.documentElement&&e.document.documentElement.scrollLeft?d=e.document.documentElement.scrollLeft:e.document.body&&xDef(e.document.body.scrollLeft)&&(d=e.document.body.scrollLeft)}else if((a=xGetElementById(a))&&xNum(a.scrollLeft))d=a.scrollLeft;return d}
function xScrollTop(a,b){xDeprecate("xScrollTop");var d=0;if(!xDef(a)||b||a==document||"html"==a.tagName.toLowerCase()||"body"==a.tagName.toLowerCase()){var e=window;b&&a&&(e=a);e.document.documentElement&&e.document.documentElement.scrollTop?d=e.document.documentElement.scrollTop:e.document.body&&xDef(e.document.body.scrollTop)&&(d=e.document.body.scrollTop)}else if((a=xGetElementById(a))&&xNum(a.scrollTop))d=a.scrollTop;return d}
function xSetCookie(a,b,d,e){xDeprecate("xSetCookie");document.cookie=a+"="+escape(b)+(!d?"":"; expires="+d.toGMTString())+"; path="+(!e?"/":e)}function xShow(a){xDeprecate("xShow");return xVisibility(a,1)}function xStr(a){xDeprecate("xStr");for(var b=0;b<arguments.length;++b)if("string"!=typeof arguments[b])return!1;return!0}
function xTop(a,b){xDeprecate("xTop");if(!(a=xGetElementById(a)))return 0;var d=xDef(a.style);d&&xStr(a.style.top)?xNum(b)?a.style.top=b+"px":(b=parseInt(a.style.top),isNaN(b)&&(b=0)):d&&xDef(a.style.pixelTop)&&(xNum(b)?a.style.pixelTop=b:b=a.style.pixelTop);return b}function xVisibility(a,b){xDeprecate("xVisibility");return!(a=xGetElementById(a))?null:a.style&&xDef(a.style.visibility)?(xDef(b)&&(a.style.visibility=b?"visible":"hidden"),a.style.visibility):null}
function xWidth(a,b){xDeprecate("xWidth");if(!(a=xGetElementById(a)))return 0;var b=xNum(b)?0>b?0:Math.round(b):-1,d=xDef(a.style);if(a==document||"html"==a.tagName.toLowerCase()||"body"==a.tagName.toLowerCase())b=xClientWidth();else if(d&&xDef(a.offsetWidth)&&xStr(a.style.width)){if(0<=b){var e=d=0,f=0,h=0;if("CSS1Compat"==document.compatMode){var g=xGetComputedStyle,d=g(a,"padding-left",1);null!==d?(e=g(a,"padding-right",1),f=g(a,"border-left-width",1),h=g(a,"border-right-width",1)):xDef(a.offsetWidth,
a.style.width)&&(a.style.width=b+"px",d=a.offsetWidth-b)}b-=d+e+f+h;if(isNaN(b)||0>b)return null;a.style.width=b+"px"}b=a.offsetWidth}else d&&xDef(a.style.pixelWidth)&&(0<=b&&(a.style.pixelWidth=b),b=a.style.pixelWidth);return b}function xZIndex(a,b){xDeprecate("xZIndex");if(!(a=xGetElementById(a)))return 0;a.style&&xDef(a.style.zIndex)&&(xNum(b)&&(a.style.zIndex=b),b=parseInt(a.style.zIndex));return b}
function xStopPropagation(a){xDeprecate("xStopPropagation");a&&a.stopPropagation?a.stopPropagation():window.event&&(window.event.cancelBubble=!0)};

View file

@ -1764,11 +1764,15 @@ var Validator = xe.createApp('Validator', {
this.onsubmit = null;
}
})
.submit(function(){
.submit(function(e){
var legacyFn = this['xe:onsubmit'];
var hasLegacyFn = $.isFunction(legacyFn);
var bResult = hasLegacyFn?legacyFn.apply(this):self.run(this);
if(!bResult)
{
e.stopImmediatePropagation();
}
return bResult;
});
},
@ -1826,9 +1830,14 @@ var Validator = xe.createApp('Validator', {
f = filter[name];
el = elems[name];
if(!el)
{
el = elems[name + '[]'];
}
val = el?$.trim(get_value($(el))):'';
mod = (f.modifier||'')+',';
if(!el || el.disabled) continue;
if(f['if']) {

76
common/js/xe.min.js vendored
View file

@ -3,16 +3,16 @@
* @author NHN (developers@xpressengine.com)
* @brief XE Common JavaScript
**/
(function(a){function b(){return function(){var g=this;if(a.isArray(this._plugins))this._plugins=[];this._messages?this._messages={}:this._binded_fn={};a.each(this,function(c,b){if(!a.isFunction(b))return!0;if(!/^API_([A-Z0-9_]+)$/.test(c))return!0;var d=RegExp.$1,e=function(a,b){return g[c](a,b)};g._messages?g._messages[d]=[e]:g._binded_fn[d]=e});a.isFunction(this.init)&&this.init.apply(this,arguments)}}var d,c,e=[];d={_plugins:[],_messages:{},getPlugin:function(g){g=g.toLowerCase();return a.isArray(this._plugins[g])?
(function(a){function b(){return function(){var g=this;a.isArray(this._plugins)&&(this._plugins=[]);this._messages?this._messages={}:this._binded_fn={};a.each(this,function(c,b){if(!a.isFunction(b)||!/^API_([A-Z0-9_]+)$/.test(c))return true;var d=RegExp.$1,e=function(a,b){return g[c](a,b)};g._messages?g._messages[d]=[e]:g._binded_fn[d]=e});a.isFunction(this.init)&&this.init.apply(this,arguments)}}var d,c,e=[];d={_plugins:[],_messages:{},getPlugin:function(g){g=g.toLowerCase();return a.isArray(this._plugins[g])?
this._plugins[g]:[]},registerPlugin:function(g){var c=this,b=g.getName().toLowerCase();if(0<=a.inArray(g,this._plugins))return!1;this._plugins.push(g);a.isArray(this._plugins[b])||(this._plugins[b]=[]);this._plugins[b].push(g);a.each(g._binded_fn,function(a,g){c.registerHandler(a,g)});g.oApp=this;a.isFunction(g.activate)&&g.activate();return!0},registerHandler:function(g,c){var b=this._messages,g=g.toUpperCase();a.isArray(b[g])||(b[g]=[]);b[g].push(c)},cast:function(a,b){return this._cast(this,a,
b||[])},broadcast:function(a,b,c){this.parent&&this.parent._broadcast&&this.parent._broadcast(a,b,c)},_cast:function(g,b,c){var d,e=this._messages,b=b.toUpperCase();if(!e["BEFORE_"+b]&&!this["API_BEFORE_"+b]||this._cast(g,"BEFORE_"+b,c)){var h=[];if(a.isArray(e[b]))for(d=0;d<e[b].length;d++)h.push(e[b][d](g,c));2>h.length&&(h=h[0]);(e["AFTER_"+b]||this["API_AFTER_"+b])&&this._cast(g,"AFTER_"+b,c);return/^(?:AFTER|BEFORE)_/.test(b)?a.isArray(h)?0>a.inArray(!1,h):"undefined"==typeof h?!0:!!h:h}}};c=
{oApp:null,cast:function(a,b){if(this.oApp&&this.oApp._cast)return this.oApp._cast(this,a,b||[])},broadcast:function(a,b){this.oApp&&this.oApp.broadcast&&this.oApp.broadcast(this,mag,b||[])}};window.xe=a.extend(d,{getName:function(){return"Core"},createApp:function(g,c){var e=b();a.extend(e.prototype,d,c);e.prototype.getName=function(){return g};return e},createPlugin:function(g,d){var e=b();a.extend(e.prototype,c,d);e.prototype.getName=function(){return g};return e},getApps:function(){return a.makeArray(e)},
b||[])},broadcast:function(a,b,c){this.parent&&this.parent._broadcast&&this.parent._broadcast(a,b,c)},_cast:function(g,b,c){var d,e=this._messages,b=b.toUpperCase();if(!e["BEFORE_"+b]&&!this["API_BEFORE_"+b]||this._cast(g,"BEFORE_"+b,c)){var h=[];if(a.isArray(e[b]))for(d=0;d<e[b].length;d++)h.push(e[b][d](g,c));2>h.length&&(h=h[0]);(e["AFTER_"+b]||this["API_AFTER_"+b])&&this._cast(g,"AFTER_"+b,c);return!/^(?:AFTER|BEFORE)_/.test(b)?h:a.isArray(h)?0>a.inArray(!1,h):"undefined"==typeof h?!0:!!h}}};
c={oApp:null,cast:function(a,b){if(this.oApp&&this.oApp._cast)return this.oApp._cast(this,a,b||[])},broadcast:function(a,b){this.oApp&&this.oApp.broadcast&&this.oApp.broadcast(this,mag,b||[])}};window.xe=a.extend(d,{getName:function(){return"Core"},createApp:function(g,c){var e=b();a.extend(e.prototype,d,c);e.prototype.getName=function(){return g};return e},createPlugin:function(g,d){var e=b();a.extend(e.prototype,c,d);e.prototype.getName=function(){return g};return e},getApps:function(){return a.makeArray(e)},
getApp:function(a){a=(a||"").toLowerCase();return"undefined"!=typeof e[a]?e[a]:null},registerApp:function(b){var c=b.getName().toLowerCase();e.push(b);a.isArray(e[c])||(e[c]=[]);e[c].push(b);b.parent=this;a.isFunction(b.activate)&&b.activate()},unregisterApp:function(b){var c=b.getName().toLowerCase(),d=a.inArray(b,e);0<=d&&(e=e.splice(d,1));a.isArray(e[c])&&(d=a.inArray(b,e[c]),0<=d&&(e[c]=e[c].splice(d,1)));a.isFunction(b.deactivate)&&b.deactivate()},broadcast:function(a,b){this._broadcast(this,
a,b)},_broadcast:function(a,b,c){for(var d=0;d<e.length;d++)e[d]._cast(a,b,c);this._cast(a,b,c)}});window.xe.lang={};a(function(){xe.broadcast("ONREADY")});a(window).load(function(){xe.broadcast("ONLOAD")})})(jQuery);jQuery&&jQuery.noConflict();
(function(a){var b=navigator.userAgent.toLowerCase();a.os={Linux:/linux/.test(b),Unix:/x11/.test(b),Mac:/mac/.test(b),Windows:/win/.test(b)};a.os.name=a.os.Windows?"Windows":a.os.Linux?"Linux":a.os.Unix?"Unix":a.os.Mac?"Mac":"";window.XE={loaded_popup_menus:[],addedDocument:[],checkboxToggleAll:function(b){is_def(b)||(b="cart");var c={wrap:null,checked:"toggle",doClick:!1};switch(arguments.length){case 1:"string"==typeof arguments[0]?b=arguments[0]:(a.extend(c,arguments[0]||{}),b="cart");break;case 2:b=
arguments[0],a.extend(c,arguments[1]||{})}if(!0==c.doClick)c.checked=null;if("string"==typeof c.wrap)c.wrap="#"+c.wrap;var e=c.wrap?a(c.wrap).find("input[name="+b+"]:checkbox"):a("input[name="+b+"]:checkbox");"toggle"==c.checked?e.each(function(){a(this).attr("checked",a(this).attr("checked")?!1:!0)}):!0==c.doClick?e.click():e.attr("checked",c.checked)},displayPopupMenu:function(b,c,e){var c=e.menu_id,g=b.menus,b="";if(this.loaded_popup_menus[c])b=this.loaded_popup_menus[c];else{if(g){g=g.item;if("undefined"==
typeof g.length||1>g.length)g=Array(g);if(g.length)for(var j=0;j<g.length;j++){var k=g[j].url,l=g[j].str,m=g[j].icon,h=g[j].target,w="",o="";m&&(w=" style=\"background-image:url('"+m+"')\" ");switch(h){case "popup":o=" onclick=\"popopen(this.href,'"+h+"'); return false;\"";break;case "javascript":o=' onclick="'+k+'; return false; "';k="#";break;default:o=' onclick="window.open(this.href); return false;"'}b+="<li "+w+'><a href="'+k+'"'+o+">"+l+"</a></li> "}}this.loaded_popup_menus[c]=b}if(b)c=a("#popup_menu_area").html("<ul>"+
b+"</ul>"),b=e.page_y,e=e.page_x,c.outerHeight()+b>a(window).height()+a(window).scrollTop()&&(b=a(window).height()-c.outerHeight()+a(window).scrollTop()),c.outerWidth()+e>a(window).width()+a(window).scrollLeft()&&(e=a(window).width()-c.outerWidth()+a(window).scrollLeft()),c.css({top:b,left:e}).show()}}})(jQuery);
arguments[0],a.extend(c,arguments[1]||{})}!0==c.doClick&&(c.checked=null);"string"==typeof c.wrap&&(c.wrap="#"+c.wrap);var e=c.wrap?a(c.wrap).find("input[name="+b+"]:checkbox"):a("input[name="+b+"]:checkbox");"toggle"==c.checked?e.each(function(){a(this).attr("checked",a(this).attr("checked")?false:true)}):!0==c.doClick?e.click():e.attr("checked",c.checked)},displayPopupMenu:function(b,c,e){var c=e.menu_id,g=b.menus,b="";if(this.loaded_popup_menus[c])b=this.loaded_popup_menus[c];else{if(g){g=g.item;
if("undefined"==typeof g.length||1>g.length)g=Array(g);if(g.length)for(var j=0;j<g.length;j++){var k=g[j].url,m=g[j].str,l=g[j].icon,h=g[j].target,r="",s="";l&&(r=" style=\"background-image:url('"+l+"')\" ");switch(h){case "popup":s=" onclick=\"popopen(this.href,'"+h+"'); return false;\"";break;case "javascript":s=' onclick="'+k+'; return false; "';k="#";break;default:s=' onclick="window.open(this.href); return false;"'}b+="<li "+r+'><a href="'+k+'"'+s+">"+m+"</a></li> "}}this.loaded_popup_menus[c]=
b}b&&(c=a("#popup_menu_area").html("<ul>"+b+"</ul>"),b=e.page_y,e=e.page_x,c.outerHeight()+b>a(window).height()+a(window).scrollTop()&&(b=a(window).height()-c.outerHeight()+a(window).scrollTop()),c.outerWidth()+e>a(window).width()+a(window).scrollLeft()&&(e=a(window).width()-c.outerWidth()+a(window).scrollLeft()),c.css({top:b,left:e}).show())}}})(jQuery);
jQuery(function(a){a.browser.msie&&a("select").each(function(a,b){for(var g=!1,d=[],k=0;k<b.options.length;k++)b.options[k].disabled?(b.options[k].style.color="#CCCCCC",g=!0):d[a]=-1<d[a]?d[a]:k;if(g&&(b.oldonchange=b.onchange,b.onchange=function(){this.options[this.selectedIndex].disabled?this.selectedIndex=d[a]:this.oldonchange&&this.oldonchange()},0<=b.selectedIndex&&b.options[b.selectedIndex].disabled))b.onchange()});var b=a(".xe_content .fold_button");if(b.size()){var d=a("div.fold_container",
b);a("button.more",b).click(function(){a(this).hide().next("button").show().parent().next(d).show()});a("button.less",b).click(function(){a(this).hide().prev("button").show().parent().next(d).hide()})}});String.prototype.getQuery=function(a){var b=this.indexOf("?");if(-1==b)return null;var d={};this.substr(b+1,this.length).replace(/([^=]+)=([^&]*)(&|$)/g,function(a,b,g){d[b]=g});a=d[a];"undefined"==typeof a&&(a="");return a};
String.prototype.setQuery=function(a,b){var d=this.indexOf("?"),c=this.replace(/#$/,"");if(-1!=d){var e=c.substr(d+1,this.length),g={},j=[],c=this.substr(0,d);e.replace(/([^=]+)=([^&]*)(&|$)/g,function(a,b,c){g[b]=c});g[a]=b;jQuery.each(g,function(a,b){jQuery.trim(b)&&j.push(a+"="+decodeURI(b))});e=j.join("&");c+=e?"?"+e:""}else b.toString().trim()&&(c=c+"?"+a+"="+b);d=/https:\/\/([^:\/]+)(:\d+|)/i;if(e=d.exec(c))e="http://"+e[1],"undefined"!=typeof http_port&&80!=http_port&&(e+=":"+http_port),c=
@ -21,7 +21,7 @@ String.prototype.trim=function(){return this.replace(/(^\s*)|(\s*$)/g,"")};funct
function winopen(a,b,d){"undefined"!=typeof xeVid&&-1<a.indexOf(request_uri)&&!a.getQuery("vid")&&(a=a.setQuery("vid",xeVid));try{"_blank"!=b&&winopen_list[b]&&(winopen_list[b].close(),winopen_list[b]=null)}catch(c){}"undefined"==typeof b&&(b="_blank");"undefined"==typeof d&&(d="");a=window.open(a,b,d);a.focus();"_blank"!=b&&(winopen_list[b]=a)}
function popopen(a,b){"undefined"==typeof b&&(b="_blank");"undefined"!=typeof xeVid&&-1<a.indexOf(request_uri)&&!a.getQuery("vid")&&(a=a.setQuery("vid",xeVid));winopen(a,b,"width=650,height=500,scrollbars=yes,resizable=yes,toolbars=no")}function sendMailTo(a){location.href="mailto:"+a}function move_url(a,b){if(!a)return!1;"undefined"==typeof b&&(b="N");b="N"==b?!1:!0;/^\./.test(a)&&(a=request_uri+a);b?winopen(a):location.href=a;return!1}
function displayMultimedia(a,b,d,c){(a=_displayMultimedia(a,b,d,c))&&document.writeln(a)}
function _displayMultimedia(a,b,d,c){0==a.indexOf("files")&&(a=request_uri+a);var c=jQuery.extend({wmode:"transparent",allowScriptAccess:"sameDomain",quality:"high",flashvars:"",autostart:!1},c||{}),e=c.autostart&&"false"!=c.autostart?"true":"false";delete c.autostart;var g="",g=g="";if(/\.(gif|jpg|jpeg|bmp|png)$/i.test(a))g='<img src="'+a+'" width="'+b+'" height="'+d+'" />';else if(/\.flv$/i.test(a)||/\.mov$/i.test(a)||/\.moov$/i.test(a)||/\.m4v$/i.test(a))g='<embed src="'+request_uri+'common/img/flvplayer.swf" allowfullscreen="true" autostart="'+
function _displayMultimedia(a,b,d,c){0==a.indexOf("files")&&(a=request_uri+a);var c=jQuery.extend({wmode:"transparent",allowScriptAccess:"sameDomain",quality:"high",flashvars:"",autostart:!1},c||{}),e=c.autostart&&"false"!=c.autostart?"true":"false";delete c.autostart;var g="";if(/\.(gif|jpg|jpeg|bmp|png)$/i.test(a))g='<img src="'+a+'" width="'+b+'" height="'+d+'" />';else if(/\.flv$/i.test(a)||/\.mov$/i.test(a)||/\.moov$/i.test(a)||/\.m4v$/i.test(a))g='<embed src="'+request_uri+'common/img/flvplayer.swf" allowfullscreen="true" autostart="'+
e+'" width="'+b+'" height="'+d+'" flashvars="&file='+a+"&width="+b+"&height="+d+"&autostart="+e+'" wmode="'+c.wmode+'" />';else if(/\.swf/i.test(a)){var g='<object classid="clsid:D27CDB6E-AE6D-11cf-96B8-444553540000" codebase="'+("undefined"!=typeof enforce_ssl&&enforce_ssl?"https://download.macromedia.com/pub/shockwave/cabs/flash/swflash.cab#version=9,0,28,0":"http://download.macromedia.com/pub/shockwave/cabs/flash/swflash.cab#version=9,0,28,0")+'" width="'+b+'" height="'+d+'" flashvars="'+c.flashvars+
'">',g=g+('<param name="movie" value="'+a+'" />'),j;for(j in c)"undefined"!=c[j]&&""!=c[j]&&(g+='<param name="'+j+'" value="'+c[j]+'" />');g+='<embed src="'+a+'" autostart="'+e+'" width="'+b+'" height="'+d+'" flashvars="'+c.flashvars+'" wmode="'+c.wmode+'"></embed></object>'}else{if(jQuery.browser.mozilla||jQuery.browser.opera)e=c.autostart&&"false"!=c.autostart?"1":"0";g='<embed src="'+a+'" autostart="'+e+'" width="'+b+'" height="'+d+'"';"transparent"==c.wmode&&(g+=' windowlessvideo="1"');g+="></embed>"}return g}
function zbxe_folder_open(a){jQuery("#folder_open_"+a).hide();jQuery("#folder_close_"+a).show();jQuery("#folder_"+a).show()}function zbxe_folder_close(a){jQuery("#folder_open_"+a).show();jQuery("#folder_close_"+a).hide();jQuery("#folder_"+a).hide()}
@ -29,46 +29,46 @@ function setFixedPopupSize(){var a=jQuery,b=a(window),a=a("body>.popup"),d,c,e,g
function doCallModuleAction(a,b,d){exec_xml(a,b,{target_srl:d,cur_mid:current_mid,mid:current_mid},completeCallModuleAction)}function completeCallModuleAction(a){"success"!=a.message&&alert(a.message);location.reload()}function completeMessage(a){alert(a.message);location.reload()}function doChangeLangType(a){"string"==typeof a?setLangType(a):setLangType(a.options[a.selectedIndex].value);location.href=location.href.setQuery("l","")}
function setLangType(a){var b=new Date;b.setTime(b.getTime()+6048E8);setCookie("lang_type",a,b,"/")}
function doDocumentPreview(a){for(;"FORM"!=a.nodeName;)a=a.parentNode;if("FORM"==a.nodeName){a=a.getAttribute("editor_sequence");a=editorGetContent(a);window.open("","previewDocument","toolbars=no,width=700px;height=800px,scrollbars=yes,resizable=yes");var b=jQuery("#previewDocument");b.length?b=b[0]:(jQuery('<form id="previewDocument" target="previewDocument" method="post" action="'+request_uri+'"><input type="hidden" name="module" value="document" /><input type="hidden" name="act" value="dispDocumentPreview" /><input type="hidden" name="content" /></form>').appendTo(document.body),b=
jQuery("#previewDocument")[0]);if(b)b.content.value=a,b.submit()}}
function doDocumentSave(a){var b=a.form.getAttribute("editor_sequence"),d=editorRelKeys[b].content.value;if("undefined"!=typeof b&&b&&"undefined"!=typeof editorRelKeys&&"function"==typeof editorGetContent){var c=editorGetContent(b);editorRelKeys[b].content.value=c}var e={},c=jQuery(a.form).serializeArray();jQuery.each(c,function(a,b){var c=jQuery.trim(b.value);if(!c)return!0;if(/\[\]$/.test(b.name))b.name=b.name.replace(/\[\]$/,"");e[b.name]=e[b.name]?e[b.name]+("|@|"+c):b.value});exec_xml("document",
jQuery("#previewDocument")[0]);b&&(b.content.value=a,b.submit())}}
function doDocumentSave(a){var b=a.form.getAttribute("editor_sequence"),d=editorRelKeys[b].content.value;if("undefined"!=typeof b&&b&&"undefined"!=typeof editorRelKeys&&"function"==typeof editorGetContent){var c=editorGetContent(b);editorRelKeys[b].content.value=c}var e={},c=jQuery(a.form).serializeArray();jQuery.each(c,function(a,b){var c=jQuery.trim(b.value);if(!c)return!0;/\[\]$/.test(b.name)&&(b.name=b.name.replace(/\[\]$/,""));e[b.name]=e[b.name]?e[b.name]+("|@|"+c):b.value});exec_xml("document",
"procDocumentTempSave",e,completeDocumentSave,["error","message","document_srl"],e,a.form);editorRelKeys[b].content.value=d;return!1}function completeDocumentSave(a){jQuery("input[name=document_srl]").eq(0).val(a.document_srl);alert(a.message)}var objForSavedDoc=null;function doDocumentLoad(a){objForSavedDoc=a.form;popopen(request_uri.setQuery("module","document").setQuery("act","dispTempSavedList"))}
function doDocumentSelect(a){if(opener&&opener.objForSavedDoc)opener.location.href=opener.current_url.setQuery("document_srl",a).setQuery("act","dispBoardWrite");window.close()}function viewSkinInfo(a,b){popopen("./?module=module&act=dispModuleSkinInfo&selected_module="+a+"&skin="+b,"SkinInfo")}var addedDocument=[];function doAddDocumentCart(a){addedDocument[addedDocument.length]=a.value;setTimeout(function(){callAddDocumentCart(addedDocument.length)},100)}
function callAddDocumentCart(a){if(!(1>addedDocument.length||a!=addedDocument.length))a=[],a.srls=addedDocument.join(","),exec_xml("document","procDocumentAddCart",a,null),addedDocument=[]}
function doDocumentSelect(a){opener&&opener.objForSavedDoc&&(opener.location.href=opener.current_url.setQuery("document_srl",a).setQuery("act","dispBoardWrite"));window.close()}function viewSkinInfo(a,b){popopen("./?module=module&act=dispModuleSkinInfo&selected_module="+a+"&skin="+b,"SkinInfo")}var addedDocument=[];function doAddDocumentCart(a){addedDocument[addedDocument.length]=a.value;setTimeout(function(){callAddDocumentCart(addedDocument.length)},100)}
function callAddDocumentCart(a){1>addedDocument.length||a!=addedDocument.length||(a=[],a.srls=addedDocument.join(","),exec_xml("document","procDocumentAddCart",a,null),addedDocument=[])}
function transRGB2Hex(a){if(!a)return a;if(-1<a.indexOf("#"))return a.replace(/^#/,"");if(0>a.toLowerCase().indexOf("rgb"))return a;a=a.replace(/^rgb\(/i,"").replace(/\)$/,"");value_list=a.split(",");for(var a="",b=0;b<value_list.length;b++){var d=parseInt(value_list[b],10).toString(16);1==d.length&&(d="0"+d);a+=d}return a}function toggleSecuritySignIn(){var a=location.href;location.href=/https:\/\//i.test(a)?a.replace(/^https/i,"http"):a.replace(/^http/i,"https")}
function reloadDocument(){location.reload()}
var Base64={_keyStr:"ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/=",encode:function(a){for(var b="",d,c,e,g,j,k,l=0,a=Base64._utf8_encode(a);l<a.length;)d=a.charCodeAt(l++),c=a.charCodeAt(l++),e=a.charCodeAt(l++),g=d>>2,d=(d&3)<<4|c>>4,j=(c&15)<<2|e>>6,k=e&63,isNaN(c)?j=k=64:isNaN(e)&&(k=64),b=b+this._keyStr.charAt(g)+this._keyStr.charAt(d)+this._keyStr.charAt(j)+this._keyStr.charAt(k);return b},decode:function(a){for(var b="",d,c,e,g,j,k=0,a=a.replace(/[^A-Za-z0-9\+\/\=]/g,"");k<
var Base64={_keyStr:"ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/=",encode:function(a){for(var b="",d,c,e,g,j,k,m=0,a=Base64._utf8_encode(a);m<a.length;)d=a.charCodeAt(m++),c=a.charCodeAt(m++),e=a.charCodeAt(m++),g=d>>2,d=(d&3)<<4|c>>4,j=(c&15)<<2|e>>6,k=e&63,isNaN(c)?j=k=64:isNaN(e)&&(k=64),b=b+this._keyStr.charAt(g)+this._keyStr.charAt(d)+this._keyStr.charAt(j)+this._keyStr.charAt(k);return b},decode:function(a){for(var b="",d,c,e,g,j,k=0,a=a.replace(/[^A-Za-z0-9\+\/\=]/g,"");k<
a.length;)d=this._keyStr.indexOf(a.charAt(k++)),c=this._keyStr.indexOf(a.charAt(k++)),g=this._keyStr.indexOf(a.charAt(k++)),j=this._keyStr.indexOf(a.charAt(k++)),d=d<<2|c>>4,c=(c&15)<<4|g>>2,e=(g&3)<<6|j,b+=String.fromCharCode(d),64!=g&&(b+=String.fromCharCode(c)),64!=j&&(b+=String.fromCharCode(e));return b=Base64._utf8_decode(b)},_utf8_encode:function(a){for(var a=a.replace(/\r\n/g,"\n"),b="",d=0;d<a.length;d++){var c=a.charCodeAt(d);128>c?b+=String.fromCharCode(c):(127<c&&2048>c?b+=String.fromCharCode(c>>
6|192):(b+=String.fromCharCode(c>>12|224),b+=String.fromCharCode(c>>6&63|128)),b+=String.fromCharCode(c&63|128))}return b},_utf8_decode:function(a){for(var b="",d=0,c=c1=c2=0;d<a.length;)c=a.charCodeAt(d),128>c?(b+=String.fromCharCode(c),d++):191<c&&224>c?(c2=a.charCodeAt(d+1),b+=String.fromCharCode((c&31)<<6|c2&63),d+=2):(c2=a.charCodeAt(d+1),c3=a.charCodeAt(d+2),b+=String.fromCharCode((c&15)<<12|(c2&63)<<6|c3&63),d+=3);return b}};
if("undefined"==typeof resizeImageContents)var resizeImageContents=function(){};if("undefined"==typeof activateOptionDisabled)var activateOptionDisabled=function(){};objectExtend=jQuery.extend;function toggleDisplay(a){jQuery("#"+a).toggle()}function checkboxSelectAll(a,b,d){var c={};if("undefined"!=typeof a)c.wrap=a;if("undefined"!=typeof d)c.checked=d;XE.checkboxToggleAll(b,c)}function clickCheckBoxAll(a,b){var d={doClick:!0};if("undefined"!=typeof a)d.wrap=a;XE.checkboxToggleAll(b,d)}
if("undefined"==typeof resizeImageContents)var resizeImageContents=function(){};if("undefined"==typeof activateOptionDisabled)var activateOptionDisabled=function(){};objectExtend=jQuery.extend;function toggleDisplay(a){jQuery("#"+a).toggle()}function checkboxSelectAll(a,b,d){var c={};"undefined"!=typeof a&&(c.wrap=a);"undefined"!=typeof d&&(c.checked=d);XE.checkboxToggleAll(b,c)}function clickCheckBoxAll(a,b){var d={doClick:!0};"undefined"!=typeof a&&(d.wrap=a);XE.checkboxToggleAll(b,d)}
function svc_folder_open(a){jQuery("#_folder_open_"+a).hide();jQuery("#_folder_close_"+a).show();jQuery("#_folder_"+a).show()}function svc_folder_close(a){jQuery("#_folder_open_"+a).show();jQuery("#_folder_close_"+a).hide();jQuery("#_folder_"+a).hide()}function open_calendar(a,b,d){"undefined"==typeof b&&(b="");var c="./common/tpl/calendar.php?";a&&(c+="fo_id="+a);b&&(c+="&day_str="+b);d&&(c+="&callback_func="+d);popopen(c,"Calendar")}var loaded_popup_menus=XE.loaded_popup_menus;
function createPopupMenu(){}function chkPopupMenu(){}function displayPopupMenu(a,b,d){XE.displayPopupMenu(a,b,d)}function GetObjLeft(a){return jQuery(a).offset().left}function GetObjTop(a){return jQuery(a).offset().top}function replaceOuterHTML(a,b){jQuery(a).replaceWith(b)}function getOuterHTML(a){return jQuery(a).html().trim()}function setCookie(a,b,d,c){a=a+"="+escape(b)+(!d?"":"; expires="+d.toGMTString())+"; path="+(!c?"/":c);document.cookie=a}
function getCookie(a){if(a=document.cookie.match(RegExp(a+"=(.*?)(?:;|$)")))return unescape(a[1])}function is_def(a){return"undefined"!=typeof a}function ucfirst(a){return a.charAt(0).toUpperCase()+a.slice(1)}function get_by_id(a){return document.getElementById(a)}
jQuery(function(a){a(".lang_code").each(function(){var b=a(this),d=b.attr("id");"undefined"==typeof d&&(d=b.attr("name"));"undefined"!=typeof d&&b.after("<a href='"+request_uri.setQuery("module","module").setQuery("act","dispModuleAdminLangcode").setQuery("target",d)+"' class='buttonSet buttonSetting' onclick='popopen(this.href);return false;'><span>find_langcode</span></a>")});a(document).click(function(b){var d=a("#popup_menu_area");d.length||(d=a('<div id="popup_menu_area" style="display:none;z-index:9999" />').appendTo(document.body));
d.hide();d=a(b.target).filter("a,div,span");d.length||(d=a(b.target).closest("a,div,span"));if(d.length){var d=d.attr("class"),c;d&&(c=d.match(/(?:^| )((document|comment|member)_([1-9]\d*))(?: |$)/));if(c){d="get"+ucfirst(c[2])+"Menu";c={mid:current_mid,cur_mid:current_mid,menu_id:c[1],target_srl:c[3],cur_act:current_url.getQuery("act"),page_x:b.pageX,page_y:b.pageY};var e="error message menus".split(" ");b.preventDefault();b.stopPropagation();if(is_def(window.xeVid))c.vid=xeVid;if(is_def(XE.loaded_popup_menus[c.menu_id]))return XE.displayPopupMenu(c,
d.hide();d=a(b.target).filter("a,div,span");d.length||(d=a(b.target).closest("a,div,span"));if(d.length){var d=d.attr("class"),c;d&&(c=d.match(/(?:^| )((document|comment|member)_([1-9]\d*))(?: |$)/));if(c){d="get"+ucfirst(c[2])+"Menu";c={mid:current_mid,cur_mid:current_mid,menu_id:c[1],target_srl:c[3],cur_act:current_url.getQuery("act"),page_x:b.pageX,page_y:b.pageY};var e=["error","message","menus"];b.preventDefault();b.stopPropagation();is_def(window.xeVid)&&(c.vid=xeVid);if(is_def(XE.loaded_popup_menus[c.menu_id]))return XE.displayPopupMenu(c,
e,c);show_waiting_message=!1;exec_xml("member",d,c,XE.displayPopupMenu,e,c);show_waiting_message=!0}}});a("a._xe_popup").click(function(){var b=a(this),d=b.attr("name"),b=b.attr("href");d||(d="_xe_popup_"+Math.floor(1E3*Math.random()));(d=window.open(b,d,"left=10,top=10,width=10,height=10,resizable=no,scrollbars=no,toolbars=no"))&&d.focus();return!1});a.datepicker&&a.datepicker.setDefaults({dateFormat:"yy-mm-dd"})});var show_waiting_message=!0;
function xml2json(a,b,d){var c={toObj:function(a){var b={};if(1==a.nodeType){if(d&&a.attributes.length)for(var e=0;e<a.attributes.length;e++)b["@"+a.attributes[e].nodeName]=(a.attributes[e].nodeValue||"").toString();if(a.firstChild){for(var l=e=0,m=!1,h=a.firstChild;h;h=h.nextSibling)1==h.nodeType?m=!0:3==h.nodeType&&h.nodeValue.match(/[^ \f\n\r\t\v]/)?e++:4==h.nodeType&&l++;if(m)if(2>e&&2>l){c.removeWhite(a);for(h=a.firstChild;h;h=h.nextSibling)3==h.nodeType?b=c.escape(h.nodeValue):4==h.nodeType?
b=c.escape(h.nodeValue):b[h.nodeName]?b[h.nodeName]instanceof Array?b[h.nodeName][b[h.nodeName].length]=c.toObj(h):b[h.nodeName]=[b[h.nodeName],c.toObj(h)]:b[h.nodeName]=c.toObj(h)}else a.attributes.length?b["#text"]=c.escape(c.innerXml(a)):b=c.escape(c.innerXml(a));else if(e)a.attributes.length?b["#text"]=c.escape(c.innerXml(a)):b=c.escape(c.innerXml(a));else if(l)if(1<l)b=c.escape(c.innerXml(a));else for(h=a.firstChild;h;h=h.nextSibling)b=c.escape(h.nodeValue)}!a.attributes.length&&!a.firstChild&&
(b=null)}else 9==a.nodeType?b=c.toObj(a.documentElement):alert("unhandled node type: "+a.nodeType);return b},toJson:function(a,b,d){var e=b?'"'+b+'"':"";if(a instanceof Array){for(var m=0,h=a.length;m<h;m++)a[m]=c.toJson(a[m],"",d+"\t");e+=(b?":[":"[")+(1<a.length?"\n"+d+"\t"+a.join(",\n"+d+"\t")+"\n"+d:a.join(""))+"]"}else if(null==a)e+=(b&&":")+"null";else if("object"==typeof a){m=[];for(h in a)m[m.length]=c.toJson(a[h],h,d+"\t");e+=(b?":{":"{")+(1<m.length?"\n"+d+"\t"+m.join(",\n"+d+"\t")+"\n"+
d:m.join(""))+"}"}else e="string"==typeof a?e+((b&&":")+'"'+a.toString()+'"'):e+((b&&":")+a.toString());return e},innerXml:function(a){var b="";if("innerHTML"in a)b=a.innerHTML;else for(var c=function(a){var b="";if(1==a.nodeType){for(var b=b+("<"+a.nodeName),d=0;d<a.attributes.length;d++)b+=" "+a.attributes[d].nodeName+'="'+(a.attributes[d].nodeValue||"").toString()+'"';if(a.firstChild){b+=">";for(d=a.firstChild;d;d=d.nextSibling)b+=c(d);b+="</"+a.nodeName+">"}else b+="/>"}else 3==a.nodeType?b+=
a.nodeValue:4==a.nodeType&&(b+="<![CDATA["+a.nodeValue+"]]\>");return b},a=a.firstChild;a;a=a.nextSibling)b+=c(a);return b},escape:function(a){return a.replace(/[\\]/g,"\\\\").replace(/[\"]/g,'\\"').replace(/[\n]/g,"\\n").replace(/[\r]/g,"\\r")},removeWhite:function(a){a.normalize();for(var b=a.firstChild;b;)if(3==b.nodeType)if(b.nodeValue.match(/[^ \f\n\r\t\v]/))b=b.nextSibling;else{var d=b.nextSibling;a.removeChild(b);b=d}else 1==b.nodeType&&c.removeWhite(b),b=b.nextSibling;return a}};if(9==a.nodeType)a=
a.documentElement;var e=c.toObj(c.removeWhite(a));"object"==typeof JSON&&jQuery.isFunction(JSON.stringify);a=c.toJson(e,a.nodeName,"");return"{"+(b?a.replace(/\t/g,b):a.replace(/\t|\n/g,""))+"}"}
function xml2json(a,b,d){var c={toObj:function(a){var b={};if(1==a.nodeType){if(d&&a.attributes.length)for(var e=0;e<a.attributes.length;e++)b["@"+a.attributes[e].nodeName]=(a.attributes[e].nodeValue||"").toString();if(a.firstChild){for(var m=e=0,l=!1,h=a.firstChild;h;h=h.nextSibling)1==h.nodeType?l=!0:3==h.nodeType&&h.nodeValue.match(/[^ \f\n\r\t\v]/)?e++:4==h.nodeType&&m++;if(l)if(2>e&&2>m){c.removeWhite(a);for(h=a.firstChild;h;h=h.nextSibling)3==h.nodeType?b=c.escape(h.nodeValue):4==h.nodeType?
b=c.escape(h.nodeValue):b[h.nodeName]?b[h.nodeName]instanceof Array?b[h.nodeName][b[h.nodeName].length]=c.toObj(h):b[h.nodeName]=[b[h.nodeName],c.toObj(h)]:b[h.nodeName]=c.toObj(h)}else a.attributes.length?b["#text"]=c.escape(c.innerXml(a)):b=c.escape(c.innerXml(a));else if(e)a.attributes.length?b["#text"]=c.escape(c.innerXml(a)):b=c.escape(c.innerXml(a));else if(m)if(1<m)b=c.escape(c.innerXml(a));else for(h=a.firstChild;h;h=h.nextSibling)b=c.escape(h.nodeValue)}!a.attributes.length&&!a.firstChild&&
(b=null)}else 9==a.nodeType?b=c.toObj(a.documentElement):alert("unhandled node type: "+a.nodeType);return b},toJson:function(a,b,d){var e=b?'"'+b+'"':"";if(a instanceof Array){for(var l=0,h=a.length;l<h;l++)a[l]=c.toJson(a[l],"",d+"\t");e+=(b?":[":"[")+(1<a.length?"\n"+d+"\t"+a.join(",\n"+d+"\t")+"\n"+d:a.join(""))+"]"}else if(null==a)e+=(b&&":")+"null";else if("object"==typeof a){l=[];for(h in a)l[l.length]=c.toJson(a[h],h,d+"\t");e+=(b?":{":"{")+(1<l.length?"\n"+d+"\t"+l.join(",\n"+d+"\t")+"\n"+
d:l.join(""))+"}"}else e="string"==typeof a?e+((b&&":")+'"'+a.toString()+'"'):e+((b&&":")+a.toString());return e},innerXml:function(a){var b="";if("innerHTML"in a)b=a.innerHTML;else for(var c=function(a){var b="";if(1==a.nodeType){for(var b=b+("<"+a.nodeName),d=0;d<a.attributes.length;d++)b+=" "+a.attributes[d].nodeName+'="'+(a.attributes[d].nodeValue||"").toString()+'"';if(a.firstChild){b+=">";for(d=a.firstChild;d;d=d.nextSibling)b+=c(d);b+="</"+a.nodeName+">"}else b+="/>"}else 3==a.nodeType?b+=
a.nodeValue:4==a.nodeType&&(b+="<![CDATA["+a.nodeValue+"]]\>");return b},a=a.firstChild;a;a=a.nextSibling)b+=c(a);return b},escape:function(a){return a.replace(/[\\]/g,"\\\\").replace(/[\"]/g,'\\"').replace(/[\n]/g,"\\n").replace(/[\r]/g,"\\r")},removeWhite:function(a){a.normalize();for(var b=a.firstChild;b;)if(3==b.nodeType)if(b.nodeValue.match(/[^ \f\n\r\t\v]/))b=b.nextSibling;else{var d=b.nextSibling;a.removeChild(b);b=d}else 1==b.nodeType&&c.removeWhite(b),b=b.nextSibling;return a}};9==a.nodeType&&
(a=a.documentElement);var e=c.toObj(c.removeWhite(a));"object"==typeof JSON&&jQuery.isFunction(JSON.stringify);a=c.toJson(e,a.nodeName,"");return"{"+(b?a.replace(/\t/g,b):a.replace(/\t|\n/g,""))+"}"}
(function(a){function b(b,c){a("#xeTmpIframe").length||a('<iframe name="%id%" id="%id%" style="position:absolute;left:-1px;top:1px;width:1px;height:1px"></iframe>'.replace(/%id%/g,"xeTmpIframe")).appendTo(document.body);a("#xeVirtualForm").remove();var d=a('<form id="%id%"></form>'.replace(/%id%/g,"xeVirtualForm")).attr({id:"xeVirtualForm",method:"post",action:b,target:"xeTmpIframe"});c.xeVirtualRequestMethod="xml";c.xeRequestURI=location.href.replace(/#(.*)$/i,"");c.xeVirtualRequestUrl=request_uri;
a.each(c,function(b,c){a('<input type="hidden">').attr("name",b).attr("value",c).appendTo(d)});d.appendTo(document.body).submit()}function d(a){var b={},c;for(c in a)a.hasOwnProperty(c)&&(b[c]=a[c]);return b}function c(){return""}a.exec_xml=window.exec_xml=function(c,g,j,k,l,m,h){function w(b){var b=a(b).find("response")[0],d,w="",o=[],j={};d="";s.css("display","none").trigger("cancel_confirm");if(!b)return alert(u.responseText),null;d=xml2json(b,!1,!1);d="object"==typeof JSON&&a.isFunction(JSON.parse)?
JSON.parse(d):eval("("+d+")");d=d.response;if("undefined"==typeof d){o.error=-1;o.message="Unexpected error occured.";try{if("undefined"!=typeof(w=b.childNodes[0].firstChild.data))o.message+="\r\n"+w}catch(n){}return o}a.each(l,function(a,b){j[b]=!0});j.redirect_url=!0;j.act=!0;a.each(d,function(a,b){j[a]&&(o[a]=b)});if(0!=o.error){if(a.isFunction(a.exec_xml.onerror))return a.exec_xml.onerror(c,g,o,k,l,m,h);alert((o.message||"An unknown error occured while loading ["+c+"."+g+"]").replace(/\\n/g,"\n"));
return null}if(o.redirect_url)return location.href=o.redirect_url.replace(/&amp;/g,"&"),null;a.isFunction(k)&&k(o,l,m,h)}var o=request_uri+"index.php";j||(j={});a.isArray(j)&&(j=d(j));j.module=c;j.act=g;"undefined"!=typeof xeVid&&(j.vid=xeVid);"undefined"==typeof l||1>l.length?l=["error","message"]:l.push("error","message");if(a.isArray(ssl_actions)&&j.act&&0<=a.inArray(j.act,ssl_actions)){var o=window.https_port||443,n=a("<a>").attr("href",default_url||request_uri)[0],v="https://"+n.hostname.replace(/:\d+$/,
"");443!=o&&(v+=":"+o);"/"!=n.pathname[0]&&(v+="/");v+=n.pathname;o=v.replace(/\/$/,"")+"/index.php"}n=a("<a>").attr("href",location.href)[0];v=a("<a>").attr("href",o)[0];if(n.protocol!=v.protocol||n.port!=v.port)return b(o,j);var x=[],p=0;x[p++]='<?xml version="1.0" encoding="utf-8" ?>';x[p++]="<methodCall>";x[p++]="<params>";a.each(j,function(a,b){x[p++]="<"+a+"><![CDATA["+b+"]]\></"+a+">"});x[p++]="</params>";x[p++]="</methodCall>";var u=null;u&&0!=u.readyState&&u.abort();try{a.ajax({url:o,type:"POST",
dataType:"xml",data:x.join("\n"),contentType:"text/plain",beforeSend:function(a){u=a},success:w,error:function(a,b){s.css("display","none");var c="";if("parsererror"==b){if(""==a.responseText)return;c="The result is not valid XML :\n-------------------------------------\n"+a.responseText.replace(/<[^>]+>/g,"")}else c=b;try{console.log(c)}catch(d){}}})}catch(A){alert(A);return}var s=a(".wfsr");show_waiting_message&&s.length&&s.html(waiting_message).show()};a.exec_json=function(b,c,d){"undefined"==
typeof c&&(c={});b=b.split(".");2==b.length&&(show_waiting_message&&a(".wfsr").html(waiting_message).show(),a.extend(c,{module:b[0],act:b[1]}),"undefined"!=typeof xeVid&&a.extend(c,{vid:xeVid}),a.ajax({type:"POST",dataType:"json",url:request_uri,contentType:"application/json",data:a.param(c),success:function(b){a(".wfsr").hide().trigger("cancel_confirm");0<b.error&&alert(b.message);a.isFunction(d)&&d(b)}}))};a.fn.exec_html=function(b,c,d,k,l){"undefined"==typeof c&&(c={});a.inArray(d,["html","append",
"prepend"])||(d="html");var m=a(this),b=b.split(".");2==b.length&&(show_waiting_message&&a(".wfsr").html(waiting_message).show(),a.extend(c,{module:b[0],act:b[1]}),a.ajax({type:"POST",dataType:"html",url:request_uri,data:a.param(c),success:function(b){a(".wfsr").hide().trigger("cancel_confirm");m[d](b);a.isFunction(k)&&k(l)}}))};a(function(a){a(".wfsr").ajaxStart(function(){a(window).bind("beforeunload",c)}).bind("ajaxStop cancel_confirm",function(){a(window).unbind("beforeunload",c)})})})(jQuery);
(function(a){function b(a){var b=[];if(a.is(":radio"))return a.filter(":checked").val();return a.is(":checkbox")?(a.filter(":checked").each(function(){b.push(this.value)}),b.join("|@|")):a.val()}function d(a){a+="";if(!a.length)return 0;var a=encodeURI(a),b=a.split("%").length-1;return a.length-2*b}var c=[],e=[],g={},j=[],k={},l=new (xe.createApp("Validator",{init:function(){var a=/^[\w-]+(\.[\w-]+)*@[\w-]+(\.[\w-]+)+$/;this.cast("ADD_RULE",["email",a]);this.cast("ADD_RULE",["email_address",a]);a=
/^[a-z]+[\w-]*[a-z0-9_]+$/i;this.cast("ADD_RULE",["userid",a]);this.cast("ADD_RULE",["user_id",a]);a=/^(https?|ftp|mms):\/\/[0-9a-z-]+(\.[_0-9a-z-]+)+(:\d+)?/;this.cast("ADD_RULE",["url",a]);this.cast("ADD_RULE",["homepage",a]);this.cast("ADD_RULE",["korean",RegExp("^[\uac00-\ud7a3]*$")]);this.cast("ADD_RULE",["korean_number",RegExp("^[\uac00-\ud7a30-9]*$")]);this.cast("ADD_RULE",["alpha",/^[a-z]*$/i]);this.cast("ADD_RULE",["alpha_number",/^[a-z][a-z0-9_]*$/i]);this.cast("ADD_RULE",["number",/^[0-9]*$/])},
run:function(a){var b="";if(a._filter)b=a._filter.value;a=this.cast("VALIDATE",[a,b]);"undefined"==typeof a&&(a=!1);return a},API_ONREADY:function(){var b=this;a("form").each(function(){if(this.onsubmit)this["xe:onsubmit"]=this.onsubmit,this.onsubmit=null}).submit(function(){var c=this["xe:onsubmit"];return a.isFunction(c)?c.apply(this):b.run(this)})},API_VALIDATE:function(c,e){function o(a){return a.replace(/([\.\+\-\[\]\{\}\(\)\\])/g,"\\$1")}var n=!0,l=e[0],m=l.elements,p,u,A,s,r,q,B,t,y,z;if(m.ruleset)p=
l.elements.ruleset.value;else if(m._filter)p=l.elements._filter.value;if(!p)return!0;a.isFunction(j[p])&&(A=j[p]);p=a.extend({},g[p.toLowerCase()]||{},k);s=[];for(q=0,t=l.elements.length;q<t;q++)n=m[q],(r=n.name)&&m[r]&&(!m[r].length||m[r][0]===n)&&s.push(r);s=s.join("\n");u={};for(r in p)if(p.hasOwnProperty(r)&&(n=[],"^"==r.substr(0,1))){(n=s.match(RegExp("^"+o(r.substr(1))+".*$","gm")))||(n=[]);for(q=0,t=n.length;q<t;q++)u[n[q]]=p[r];p[r]=null;delete p[r]}p=a.extend(p,u);for(r in p)if(p.hasOwnProperty(r)&&
(f=p[r],s=(n=m[r])?a.trim(b(a(n))):"",u=(f.modifier||"")+",",n&&!n.disabled)){if(f["if"]){a.isArray(f["if"])||(f["if"]=[f["if"]]);for(q=0;q<f["if"].length;q++)if(t=f["if"][q],n=new Function("el","return !!("+t.test.replace(/\$(\w+)/g,'el["$1"].value')+")"),n(m))f[t.attr]=t.value}if(s){n=parseInt(f.minlength)||0;t=parseInt(f.maxlength)||0;z=/b$/.test(f.minlength||"");y=/b$/.test(f.maxlength||"");q=s.length;if(z||y)B=d(s);if(n&&n>(z?B:q)||t&&t<(y?B:q))return this.cast("ALERT",[l,r,"outofrange",n,t])&&
!1;if(f.equalto&&(t=(q=m[f.equalto])?a.trim(b(a(q))):"",q&&t!==s))return this.cast("ALERT",[l,r,"equalto"])&&!1;y=(f.rule||"").split(",");for(q=0,t=y.length;q<t;q++)if(z=y[q])if(n=this.cast("APPLY_RULE",[z,s]),-1<u.indexOf("not,")&&(n=!n),!n)return this.cast("ALERT",[l,r,"invalid_"+z])&&!1}else if(f["default"]&&(s=f["default"]),f.required)return this.cast("ALERT",[l,r,"isnull"])&&!1}return a.isFunction(A)?A(l):!0},API_ADD_RULE:function(a,b){var c=b[0].toLowerCase();e[c]=b[1]},API_DEL_RULE:function(a,
b){var c=b[0].toLowerCase();delete e[c]},API_GET_RULE:function(a,b){var c=b[0].toLowerCase();return e[c]?e[c]:null},API_ADD_FILTER:function(a,b){var c=b[0].toLowerCase();g[c]=b[1]},API_DEL_FILTER:function(a,b){var c=b[0].toLowerCase();delete g[c]},API_GET_FILTER:function(a,b){var c=b[0].toLowerCase();return g[c]?g[c]:null},API_ADD_EXTRA_FIELD:function(a,b){var c=b[0].toLowerCase();k[c]=b[1]},API_GET_EXTRA_FIELD:function(a,b){var c=b[0].toLowerCase();return k[c]},API_DEL_EXTRA_FIELD:function(a,b){var c=
b[0].toLowerCase();delete k[c]},API_APPLY_RULE:function(b,c){var d=c[0],g=c[1];return"undefined"==typeof e[d]?!0:a.isFunction(e[d])?e[d](g):e[d]instanceof RegExp?e[d].test(g):a.isArray(e[d])?-1<a.inArray(g,e[d]):!0},API_ALERT:function(b,c){var d=c[0],e=c[1],g=c[2],j=c[3],l=c[4],m=this.cast("GET_MESSAGE",[e]),k=this.cast("GET_MESSAGE",[g]);k!=g&&(k=0>k.indexOf("%s")?m+k:k.replace("%s",m));if(j||l)k+="("+(j||"")+"~"+(l||"")+")";this.cast("SHOW_ALERT",[k]);a(d.elements[e]).focus()},API_SHOW_ALERT:function(a,
b){alert(b[0])},API_ADD_MESSAGE:function(a,b){c[b[0]]=b[1]},API_GET_MESSAGE:function(a,b){var d=b[0];return c[d]||d},API_ADD_CALLBACK:function(a,b){j[b[0]]=b[1]},API_REMOVE_CALLBACK:function(a,b){delete j[b[0]]}}));xe.registerApp(l);var m=xe.createPlugin("editor_stub",{API_BEFORE_VALIDATE:function(a,b){var c=b[0].getAttribute("editor_sequence");if(c&&"object"==typeof c)c=c.value;if(c)try{editorRelKeys[c].content.value=editorRelKeys[c].func(c)||""}catch(d){}}});l.registerPlugin(new m)})(jQuery);
a.each(c,function(b,c){a('<input type="hidden">').attr("name",b).attr("value",c).appendTo(d)});d.appendTo(document.body).submit()}function d(a){var b={},c;for(c in a)a.hasOwnProperty(c)&&(b[c]=a[c]);return b}function c(){return""}a.exec_xml=window.exec_xml=function(c,g,j,k,m,l,h){function r(b){var b=a(b).find("response")[0],d,s="",r=[],j={};d="";t.css("display","none").trigger("cancel_confirm");if(!b)return alert(v.responseText),null;d=xml2json(b,!1,!1);d="object"==typeof JSON&&a.isFunction(JSON.parse)?
JSON.parse(d):eval("("+d+")");d=d.response;if("undefined"==typeof d){r.error=-1;r.message="Unexpected error occured.";try{if("undefined"!=typeof(s=b.childNodes[0].firstChild.data))r.message+="\r\n"+s}catch(n){}return r}a.each(m,function(a,b){j[b]=!0});j.redirect_url=!0;j.act=!0;a.each(d,function(a,b){j[a]&&(r[a]=b)});if(0!=r.error){if(a.isFunction(a.exec_xml.onerror))return a.exec_xml.onerror(c,g,r,k,m,l,h);alert((r.message||"An unknown error occured while loading ["+c+"."+g+"]").replace(/\\n/g,"\n"));
return null}if(r.redirect_url)return location.href=r.redirect_url.replace(/&amp;/g,"&"),null;a.isFunction(k)&&k(r,m,l,h)}var s=request_uri+"index.php";j||(j={});a.isArray(j)&&(j=d(j));j.module=c;j.act=g;"undefined"!=typeof xeVid&&(j.vid=xeVid);"undefined"==typeof m||1>m.length?m=["error","message"]:m.push("error","message");if(a.isArray(ssl_actions)&&j.act&&0<=a.inArray(j.act,ssl_actions)){var s=window.https_port||443,n=a("<a>").attr("href",default_url||request_uri)[0],w="https://"+n.hostname.replace(/:\d+$/,
"");443!=s&&(w+=":"+s);"/"!=n.pathname[0]&&(w+="/");w+=n.pathname;s=w.replace(/\/$/,"")+"/index.php"}n=a("<a>").attr("href",location.href)[0];w=a("<a>").attr("href",s)[0];if(n.protocol!=w.protocol||n.port!=w.port)return b(s,j);var x=[],o=0;x[o++]='<?xml version="1.0" encoding="utf-8" ?>';x[o++]="<methodCall>";x[o++]="<params>";a.each(j,function(a,b){x[o++]="<"+a+"><![CDATA["+b+"]]\></"+a+">"});x[o++]="</params>";x[o++]="</methodCall>";var v=null;v&&0!=v.readyState&&v.abort();try{a.ajax({url:s,type:"POST",
dataType:"xml",data:x.join("\n"),contentType:"text/plain",beforeSend:function(a){v=a},success:r,error:function(a,b){t.css("display","none");var c="";if("parsererror"==b){if(""==a.responseText)return;c="The result is not valid XML :\n-------------------------------------\n"+a.responseText.replace(/<[^>]+>/g,"")}else c=b;try{console.log(c)}catch(d){}}})}catch(A){alert(A);return}var t=a(".wfsr");show_waiting_message&&t.length&&t.html(waiting_message).show()};a.exec_json=function(b,c,d){"undefined"==
typeof c&&(c={});b=b.split(".");2==b.length&&(show_waiting_message&&a(".wfsr").html(waiting_message).show(),a.extend(c,{module:b[0],act:b[1]}),"undefined"!=typeof xeVid&&a.extend(c,{vid:xeVid}),a.ajax({type:"POST",dataType:"json",url:request_uri,contentType:"application/json",data:a.param(c),success:function(b){a(".wfsr").hide().trigger("cancel_confirm");0<b.error&&alert(b.message);a.isFunction(d)&&d(b)}}))};a.fn.exec_html=function(b,c,d,k,m){"undefined"==typeof c&&(c={});a.inArray(d,["html","append",
"prepend"])||(d="html");var l=a(this),b=b.split(".");2==b.length&&(show_waiting_message&&a(".wfsr").html(waiting_message).show(),a.extend(c,{module:b[0],act:b[1]}),a.ajax({type:"POST",dataType:"html",url:request_uri,data:a.param(c),success:function(b){a(".wfsr").hide().trigger("cancel_confirm");l[d](b);a.isFunction(k)&&k(m)}}))};a(function(a){a(".wfsr").ajaxStart(function(){a(window).bind("beforeunload",c)}).bind("ajaxStop cancel_confirm",function(){a(window).unbind("beforeunload",c)})})})(jQuery);
(function(a){function b(a){var b=[];return a.is(":radio")?a.filter(":checked").val():a.is(":checkbox")?(a.filter(":checked").each(function(){b.push(this.value)}),b.join("|@|")):a.val()}function d(a){a+="";if(!a.length)return 0;var a=encodeURI(a),b=a.split("%").length-1;return a.length-2*b}var c=[],e=[],g={},j=[],k={},m=new (xe.createApp("Validator",{init:function(){var a=/^[\w-]+(\.[\w-]+)*@[\w-]+(\.[\w-]+)+$/;this.cast("ADD_RULE",["email",a]);this.cast("ADD_RULE",["email_address",a]);a=/^[a-z]+[\w-]*[a-z0-9_]+$/i;
this.cast("ADD_RULE",["userid",a]);this.cast("ADD_RULE",["user_id",a]);a=/^(https?|ftp|mms):\/\/[0-9a-z-]+(\.[_0-9a-z-]+)+(:\d+)?/;this.cast("ADD_RULE",["url",a]);this.cast("ADD_RULE",["homepage",a]);this.cast("ADD_RULE",["korean",RegExp("^[\uac00-\ud7a3]*$")]);this.cast("ADD_RULE",["korean_number",RegExp("^[\uac00-\ud7a30-9]*$")]);this.cast("ADD_RULE",["alpha",/^[a-z]*$/i]);this.cast("ADD_RULE",["alpha_number",/^[a-z][a-z0-9_]*$/i]);this.cast("ADD_RULE",["number",/^[0-9]*$/])},run:function(a){var b=
"";a._filter&&(b=a._filter.value);a=this.cast("VALIDATE",[a,b]);"undefined"==typeof a&&(a=!1);return a},API_ONREADY:function(){var b=this;a("form").each(function(){this.onsubmit&&(this["xe:onsubmit"]=this.onsubmit,this.onsubmit=null)}).submit(function(c){var d=this["xe:onsubmit"];(d=a.isFunction(d)?d.apply(this):b.run(this))||c.stopImmediatePropagation();return d})},API_VALIDATE:function(c,e){function s(a){return a.replace(/([\.\+\-\[\]\{\}\(\)\\])/g,"\\$1")}var n=!0,m=e[0],l=m.elements,o,v,A,t,q,
p,B,u,y,z;l.ruleset?o=m.elements.ruleset.value:l._filter&&(o=m.elements._filter.value);if(!o)return!0;a.isFunction(j[o])&&(A=j[o]);o=a.extend({},g[o.toLowerCase()]||{},k);t=[];p=0;for(u=m.elements.length;p<u;p++)n=l[p],(q=n.name)&&l[q]&&(!l[q].length||l[q][0]===n)&&t.push(q);t=t.join("\n");v={};for(q in o)if(o.hasOwnProperty(q)&&(n=[],"^"==q.substr(0,1))){(n=t.match(RegExp("^"+s(q.substr(1))+".*$","gm")))||(n=[]);p=0;for(u=n.length;p<u;p++)v[n[p]]=o[q];o[q]=null;delete o[q]}o=a.extend(o,v);for(q in o)if(o.hasOwnProperty(q)&&
(f=o[q],(n=l[q])||(n=l[q+"[]"]),t=n?a.trim(b(a(n))):"",v=(f.modifier||"")+",",n&&!n.disabled)){if(f["if"]){a.isArray(f["if"])||(f["if"]=[f["if"]]);for(p=0;p<f["if"].length;p++)u=f["if"][p],n=new Function("el","return !!("+u.test.replace(/\$(\w+)/g,'el["$1"].value')+")"),n(l)&&(f[u.attr]=u.value)}if(t){n=parseInt(f.minlength)||0;u=parseInt(f.maxlength)||0;z=/b$/.test(f.minlength||"");y=/b$/.test(f.maxlength||"");p=t.length;if(z||y)B=d(t);if(n&&n>(z?B:p)||u&&u<(y?B:p))return this.cast("ALERT",[m,q,
"outofrange",n,u])&&!1;if(f.equalto&&(u=(p=l[f.equalto])?a.trim(b(a(p))):"",p&&u!==t))return this.cast("ALERT",[m,q,"equalto"])&&!1;y=(f.rule||"").split(",");p=0;for(u=y.length;p<u;p++)if(z=y[p])if(n=this.cast("APPLY_RULE",[z,t]),-1<v.indexOf("not,")&&(n=!n),!n)return this.cast("ALERT",[m,q,"invalid_"+z])&&!1}else if(f["default"]&&(t=f["default"]),f.required)return this.cast("ALERT",[m,q,"isnull"])&&!1}return a.isFunction(A)?A(m):!0},API_ADD_RULE:function(a,b){var c=b[0].toLowerCase();e[c]=b[1]},
API_DEL_RULE:function(a,b){var c=b[0].toLowerCase();delete e[c]},API_GET_RULE:function(a,b){var c=b[0].toLowerCase();return e[c]?e[c]:null},API_ADD_FILTER:function(a,b){var c=b[0].toLowerCase();g[c]=b[1]},API_DEL_FILTER:function(a,b){var c=b[0].toLowerCase();delete g[c]},API_GET_FILTER:function(a,b){var c=b[0].toLowerCase();return g[c]?g[c]:null},API_ADD_EXTRA_FIELD:function(a,b){var c=b[0].toLowerCase();k[c]=b[1]},API_GET_EXTRA_FIELD:function(a,b){var c=b[0].toLowerCase();return k[c]},API_DEL_EXTRA_FIELD:function(a,
b){var c=b[0].toLowerCase();delete k[c]},API_APPLY_RULE:function(b,c){var d=c[0],g=c[1];return"undefined"==typeof e[d]?!0:a.isFunction(e[d])?e[d](g):e[d]instanceof RegExp?e[d].test(g):a.isArray(e[d])?-1<a.inArray(g,e[d]):!0},API_ALERT:function(b,c){var d=c[0],e=c[1],g=c[2],j=c[3],l=c[4],m=this.cast("GET_MESSAGE",[e]),k=this.cast("GET_MESSAGE",[g]);k!=g&&(k=0>k.indexOf("%s")?m+k:k.replace("%s",m));if(j||l)k+="("+(j||"")+"~"+(l||"")+")";this.cast("SHOW_ALERT",[k]);a(d.elements[e]).focus()},API_SHOW_ALERT:function(a,
b){alert(b[0])},API_ADD_MESSAGE:function(a,b){c[b[0]]=b[1]},API_GET_MESSAGE:function(a,b){var d=b[0];return c[d]||d},API_ADD_CALLBACK:function(a,b){j[b[0]]=b[1]},API_REMOVE_CALLBACK:function(a,b){delete j[b[0]]}}));xe.registerApp(m);var l=xe.createPlugin("editor_stub",{API_BEFORE_VALIDATE:function(a,b){var c=b[0].getAttribute("editor_sequence");c&&"object"==typeof c&&(c=c.value);if(c)try{editorRelKeys[c].content.value=editorRelKeys[c].func(c)||""}catch(d){}}});m.registerPlugin(new l)})(jQuery);
function filterAlertMessage(a){var b=a.message,d=a.act,a=a.redirect_url,c=location.href;"undefined"!=typeof b&&b&&"success"!=b&&alert(b);"undefined"!=typeof d&&d?c=current_url.setQuery("act",d):"undefined"!=typeof a&&a&&(c=a);c==location.href&&(c=c.replace(/#(.*)$/,""));location.href=c}function procFilter(a,b){b(a);return!1}
function legacy_filter(a,b,d,c,e,g,j,k){var l=xe.getApp("Validator")[0],m=jQuery,h=[];if(!l)return!1;b.elements._filter||m(b).prepend('<input type="hidden" name="_filter" />');b.elements._filter.value=a;h[0]=a;h[1]=function(a){var h={},a=m(a).serializeArray();m.each(a,function(a,b){var c=m.trim(b.value),d=b.name;if(!c||!d)return!0;k[d]&&(d=k[d]);/\[\]$/.test(d)&&(d=d.replace(/\[\]$/,""));h[d]=h[d]?h[d]+("|@|"+c):b.value});if(j&&!confirm(j))return!1;exec_xml(d,c,h,e,g,h,b)};l.cast("ADD_CALLBACK",h);
l.cast("VALIDATE",[b,a]);return!1};
function legacy_filter(a,b,d,c,e,g,j,k){var m=xe.getApp("Validator")[0],l=jQuery,h=[];if(!m)return!1;b.elements._filter||l(b).prepend('<input type="hidden" name="_filter" />');b.elements._filter.value=a;h[0]=a;h[1]=function(a){var h={},a=l(a).serializeArray();l.each(a,function(a,b){var c=l.trim(b.value),d=b.name;if(!c||!d)return!0;k[d]&&(d=k[d]);/\[\]$/.test(d)&&(d=d.replace(/\[\]$/,""));h[d]=h[d]?h[d]+("|@|"+c):b.value});if(j&&!confirm(j))return!1;exec_xml(d,c,h,e,g,h,b)};m.cast("ADD_CALLBACK",h);
m.cast("VALIDATE",[b,a]);return!1};

View file

@ -76,11 +76,15 @@ var Validator = xe.createApp('Validator', {
this.onsubmit = null;
}
})
.submit(function(){
.submit(function(e){
var legacyFn = this['xe:onsubmit'];
var hasLegacyFn = $.isFunction(legacyFn);
var bResult = hasLegacyFn?legacyFn.apply(this):self.run(this);
if(!bResult)
{
e.stopImmediatePropagation();
}
return bResult;
});
},
@ -138,9 +142,14 @@ var Validator = xe.createApp('Validator', {
f = filter[name];
el = elems[name];
if(!el)
{
el = elems[name + '[]'];
}
val = el?$.trim(get_value($(el))):'';
mod = (f.modifier||'')+',';
if(!el || el.disabled) continue;
if(f['if']) {

View file

@ -88,7 +88,7 @@
<value xml:lang="ko"><![CDATA[전체]]></value>
<value xml:lang="en"><![CDATA[All]]></value>
<value xml:lang="jp"><![CDATA[すべて]]></value>
<value xml:lang="zh-TW"><![CDATA[All全部]]></value>
<value xml:lang="zh-TW"><![CDATA[全部]]></value>
</item>
<item name="cmd_view_all">
<value xml:lang="ko"><![CDATA[전체 보기]]></value>
@ -193,7 +193,7 @@
<value xml:lang="en"><![CDATA[Add Comment]]></value>
<value xml:lang="jp"><![CDATA[コメント登録]]></value>
<value xml:lang="zh-CN"><![CDATA[提交评论]]></value>
<value xml:lang="zh-TW"><![CDATA[送出評論]]></value>
<value xml:lang="zh-TW"><![CDATA[回覆]]></value>
<value xml:lang="fr"><![CDATA[Ajouter un Commentaire]]></value>
<value xml:lang="de"><![CDATA[Kommentar hinzufügen]]></value>
<value xml:lang="ru"><![CDATA[Добавить запись]]></value>
@ -577,7 +577,7 @@
<value xml:lang="en"><![CDATA[Close All]]></value>
<value xml:lang="jp"><![CDATA[すべて閉じる]]></value>
<value xml:lang="zh-CN"><![CDATA[全部折叠]]></value>
<value xml:lang="zh-TW"><![CDATA[全部收合]]></value>
<value xml:lang="zh-TW"><![CDATA[全部關閉]]></value>
<value xml:lang="fr"><![CDATA[Fermer Tout]]></value>
<value xml:lang="de"><![CDATA[Alle schließen]]></value>
<value xml:lang="ru"><![CDATA[Закрыть все]]></value>
@ -1116,6 +1116,11 @@
<value xml:lang="vi"><![CDATA[Nhập lại mật khẩu]]></value>
<value xml:lang="mn"><![CDATA[Нууц дугаар шалгах]]></value>
</item>
<item name="password3">
<value xml:lang="ko"><![CDATA[비밀번호 확인]]></value>
<value xml:lang="en"><![CDATA[Retype Password]]></value>
<value xml:lang="jp"><![CDATA[パスワード確認]]></value>
</item>
<item name="admin_id">
<value xml:lang="ko"><![CDATA[관리자ID]]></value>
<value xml:lang="en"><![CDATA[Admin ID]]></value>
@ -1337,7 +1342,7 @@
<value xml:lang="en"><![CDATA[Comment]]></value>
<value xml:lang="jp"><![CDATA[コメント]]></value>
<value xml:lang="zh-CN"><![CDATA[评论]]></value>
<value xml:lang="zh-TW"><![CDATA[評論]]></value>
<value xml:lang="zh-TW"><![CDATA[回覆]]></value>
<value xml:lang="fr"><![CDATA[Commentaire]]></value>
<value xml:lang="de"><![CDATA[Kommentar]]></value>
<value xml:lang="ru"><![CDATA[Комментарии]]></value>
@ -1472,7 +1477,7 @@
<value xml:lang="en"><![CDATA[Total]]></value>
<value xml:lang="jp"><![CDATA[すべて]]></value>
<value xml:lang="zh-CN"><![CDATA[全部]]></value>
<value xml:lang="zh-TW"><![CDATA[全部]]></value>
<value xml:lang="zh-TW"><![CDATA[總共]]></value>
<value xml:lang="de"><![CDATA[Gesamt]]></value>
<value xml:lang="ru"><![CDATA[Всего]]></value>
<value xml:lang="tr"><![CDATA[Toplam]]></value>
@ -1498,7 +1503,7 @@
<value xml:lang="en"><![CDATA[IP Address]]></value>
<value xml:lang="jp"><![CDATA[IPアドレス]]></value>
<value xml:lang="zh-CN"><![CDATA[IP地址]]></value>
<value xml:lang="zh-TW"><![CDATA[IP位址]]></value>
<value xml:lang="zh-TW"><![CDATA[IP 位址]]></value>
<value xml:lang="fr"><![CDATA[Addresse IP]]></value>
<value xml:lang="de"><![CDATA[IP-Adresse]]></value>
<value xml:lang="ru"><![CDATA[IP адрес]]></value>
@ -1912,6 +1917,7 @@
<item name="blamed_count">
<value xml:lang="ko"><![CDATA[비추천 수]]></value>
<value xml:lang="en"><![CDATA[Blames]]></value>
<value xml:lang="zh-TW"><![CDATA[Blames]]></value>
</item>
<item name="comment_count">
<value xml:lang="ko"><![CDATA[댓글 수]]></value>
@ -2797,10 +2803,15 @@ Xin vui lòng kiểm tra lại thông tin Database.]]></value>
<item name="msg_empty_search_target">
<value xml:lang="ko"><![CDATA[검색대상이 없습니다.]]></value>
<value xml:lang="en"><![CDATA[Cannot find the Search target.]]></value>
<value xml:lang="zh-TW"><![CDATA[搜尋不到目標]]></value>
</item>
<item name="msg_empty_search_keyword">
<value xml:lang="ko"><![CDATA[검색어가 없습니다.]]></value>
<value xml:lang="en"><![CDATA[Cannot find the Keyword.]]></value>
<value xml:lang="en"><![CDATA[搜尋不到關鍵字]]></value>
</item>
<item name="comment_to_be_approved">
<value xml:lang="en"><![CDATA[Your comment must be approved by admin before being published.]]></value>
</item>
<item name="success_registed">
<value xml:lang="ko"><![CDATA[등록했습니다.]]></value>
@ -3672,7 +3683,7 @@ Xin vui lòng kiểm tra lại thông tin Database.]]></value>
<item name="use_and_display">
<value xml:lang="ko"><![CDATA[사용+노출]]></value>
<value xml:lang="en"><![CDATA[Use+Display]]></value>
<value xml:lang="zh-TW"><![CDATA[Use+Display]]></value>
<value xml:lang="zh-TW"><![CDATA[使用+顯示]]></value>
</item>
<item name="mobile_view">
<value xml:lang="ko"><![CDATA[모바일 뷰 사용]]></value>
@ -3698,4 +3709,14 @@ Xin vui lòng kiểm tra lại thông tin Database.]]></value>
<value xml:lang="tr"><![CDATA[Hareketli görünümü, mobil cihazlarla giriş yapılırken, mobil cihazlara uygun en iyi yerleşim düzenini göstermek içindir.]]></value>
<value xml:lang="vi"><![CDATA[Nếu truy cập bằng thiết bị di động, nội dung sẽ được bố trí theo từng loại thiết bị.]]></value>
</item>
<item name="simple_view">
<value xml:lang="ko"><![CDATA[간단보기]]></value>
<value xml:lang="en"><![CDATA[Simple View]]></value>
<value xml:lang="jp"><![CDATA[シンプルビュー]]></value>
</item>
<item name="detail_view">
<value xml:lang="ko"><![CDATA[상세보기]]></value>
<value xml:lang="en"><![CDATA[Detail View]]></value>
<value xml:lang="jp"><![CDATA[詳細ビュー]]></value>
</item>
</lang>

View file

@ -10,13 +10,10 @@
<html lang="{$lang_type}" xml:lang="{$lang_type}" xmlns="http://www.w3.org/1999/xhtml">
<!--@end-->
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />
<meta name="Generator" content="XpressEngine" />
{@ $meta_tags = Context::getMetaTag() }
<block loop="$meta_tags=>$key,$meta_tag">
<meta http-equiv="{$meta_tag['name']}" content="{$meta_tag['content']}" cond="$meta_tag['is_http_equiv']" />
<meta name="{$meta_tag['name']}" content="{$meta_tag['content']}" cond="!$meta_tag['is_http_equiv']" />
</block>
{@$css_files=Context::getCssFile()}
{@$js_files=Context::getJsFile()}
<!-- META -->
<meta charset="UTF-8" cond="$db_info->use_html5=='Y'"/><meta http-equiv="Content-Type" content="text/html; charset=UTF-8" cond="$db_info->use_html5!='Y'" />
<!--@if($module_info->module)-->
<meta name="module" content="{$module_info->module}" />
@ -88,21 +85,33 @@
</head>
<body{Context::getBodyClass()}>
{Context::getBodyHeader()}
<script type="text/javascript"|cond="$db_info->use_html5!='Y'">
//<![CDATA[
var current_url = "{$current_url}";
var request_uri = "{$request_uri}";
<block cond="$vid">var xeVid = "{$vid}";</block>
var current_mid = "{$mid}";
var waiting_message = "{$lang->msg_call_server}";
var ssl_actions = new Array(<block cond="count($ssl_actions)">"{implode('","',$ssl_actions)}"</block>);
var default_url = "{Context::getDefaultUrl()}";
<block cond="Context::get('_http_port')">var http_port = {Context::get("_http_port")};</block>
<block cond="Context::get('_https_port')">var https_port = {Context::get("_https_port")};</block>
<block cond="Context::get('_use_ssl') && Context::get('_use_ssl') == 'always'">var enforce_ssl = true;</block>
//]]>
</script>
{$content}
{Context::getBodyHeader()}
{Context::getHtmlFooter()}
<div class="wfsr"></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-->
{$content}
{Context::getHtmlFooter()}
<!-- ETC -->
<div class="wfsr"></div>
{@$ssl_actions=Context::getSSLActions()}
{@ $js_body_files = Context::getJsFile('body') }
<block loop="$js_body_files => $key, $js_file">
<block cond="$js_file['targetie']"><!--[if {$js_file['targetie']}]></block><script type="text/javascript"|cond="$db_info->use_html5!='Y'" src="{$js_file['file']}"></script><block cond="$js_file['targetie']"><![endif]--></block>
</block>
</body>
</html>

View file

@ -13,7 +13,7 @@
* @brief display XE's full version
* Even The file should be revised when releasing altough no change is made
**/
define('__XE_VERSION__', '1.5.1.13');
define('__XE_VERSION__', '1.5.2');
define('__ZBXE_VERSION__', __XE_VERSION__); // deprecated : __ZBXE_VERSION__ will be removed. Use __XE_VERSION__ instead.
/**

View file

@ -148,6 +148,12 @@
<description xml:lang="vi">Hãy chọn Logo hiển thị phía trên cùng của giao diện. (Đề nghị: Hình ảnh có nền trong suốt và kích thước 23px.)</description>
<description xml:lang="tr">Lütfen yerleşim düzeninin üst kısmında görüntülenecek bir resim girişi yapınız. (23px uzunluğunda net bir resim seçmeniz önerilir)</description>
</var>
<var name="logo_image_alt" type="text">
<title xml:lang="ko">로고이미지 대체문자</title>
<title xml:lang="en">Logo image alt text</title>
<description xml:lang="ko">레이아웃의 상단에 표시될 로고이미지 대체문자를 입력하세요.</description>
<description xml:lang="en">Please input a logo image alternative text which will be displayed on the top of the layout.</description>
</var>
<var name="index_url" type="text">
<title xml:lang="ko">홈 페이지 URL</title>
<title xml:lang="jp">ホームページURL</title>

View file

@ -9,7 +9,7 @@ body{background:url({$layout_info->background_image}) repeat-x left top;}
<div class="xe">
<div class="header">
<h1>
<a href="{$layout_info->index_url}" cond="$layout_info->logo_image"><img src="{$layout_info->logo_image}" alt="logo" border="0" class="iePngFix" /></a>
<a href="{$layout_info->index_url}" cond="$layout_info->logo_image"><img src="{$layout_info->logo_image}" alt="logo" border="0" /></a>
<a href="{$layout_info->index_url}" cond="!$layout_info->logo_image">{$layout_info->logo_image_alt}</a>
</h1>
<div class="language">

View file

@ -20,7 +20,7 @@
<!--@if($is_logged)-->
<li class="fl"><a href="{getUrl('act','dispMemberLogout')}">{$lang->cmd_logout}</a></li>
<!--@elseif($act!='dispMemberLoginForm')-->
<li class="fl"><a href="{getUrl('act','dispMemberLoginForm')}">{$lang->cmd_login}</a></li>
<li class="fl"><a href="{getUrl('act','dispMemberLoginForm')}">{$lang->cmd_login}...</a></li>
<!--@end-->
<li class="fr"><a href="{getUrl('m',0)}">PC</a></li>
<li class="fr"><a href="{getUrl('act','dispModuleChangeLang','oldact',$act)}">LANG</a></li>

View file

@ -10,7 +10,7 @@
<!--@if($is_logged)-->
<li class="fl"><a href="{getUrl('act','dispMemberLogout')}">{$lang->cmd_logout}</a></li>
<!--@elseif($act!='dispMemberLoginForm')-->
<li class="fl"><a href="{getUrl('act','dispMemberLoginForm')}">{$lang->cmd_login}</a></li>
<li class="fl"><a href="{getUrl('act','dispMemberLoginForm')}">{$lang->cmd_login}...</a></li>
<!--@end-->
<li class="fr"><a href="{getUrl('m',0)}">PC</a></li>
<li class="fr"><a href="{getUrl('act','dispModuleChangeLang','oldact',$act)}">LANG</a></li>

View file

@ -178,17 +178,15 @@
if($obj->type == 'mid_list' && !is_array($obj->value)) { $obj->value = array($obj->value); }
// 'Select'type obtained from the option list.
if(is_array($val->options)) {
$option_count = count($val->options);
if($val->options && !is_array($val->options))
{
$val->options = array($val->options);
}
for($i = 0; $i < $option_count; $i++) {
$obj->options[$i]->title = $val->options[$i]->title->body;
$obj->options[$i]->value = $val->options[$i]->attrs->value;
}
} else {
$obj->options[0]->title = $val->options[0]->title->body;
$obj->options[0]->value = $val->options[0]->attrs->value;
}
for($i = 0, $c = count($val->options); $i < $c; $i++) {
$obj->options[$i]->title = $val->options[$i]->title->body;
$obj->options[$i]->value = $val->options[$i]->attrs->value;
}
$addon_info->extra_vars[] = $obj;
}
@ -273,14 +271,15 @@
if(strpos($obj->value, '|@|') != false) { $obj->value = explode('|@|', $obj->value); }
if($obj->type == 'mid_list' && !is_array($obj->value)) { $obj->value = array($obj->value); }
// 'Select'type obtained from the option list.
if(is_array($val->options)) {
$option_count = count($val->options);
if($val->options && !is_array($val->options))
{
$val->options = array($val->options);
}
for($i = 0; $i < $option_count; $i++) {
$obj->options[$i]->title = $val->options[$i]->title->body;
$obj->options[$i]->value = $val->options[$i]->value->body;
}
}
for($i = 0, $c = count($val->options); $i < $c; $i++) {
$obj->options[$i]->title = $val->options[$i]->title->body;
$obj->options[$i]->value = $val->options[$i]->value->body;
}
$addon_info->extra_vars[] = $obj;
}

View file

@ -137,10 +137,10 @@
$extra_vars = base64_encode($val->extra_vars);
}
$buff .= sprintf(' $_ml = unserialize(base64_decode("%s")); if(file_exists("%saddons/%s/%s.addon.php") && (!is_array($_ml) || in_array($_m, $_ml))) { unset($addon_info); $addon_info = unserialize(base64_decode("%s")); $addon_path = "%saddons/%s/"; @include("%saddons/%s/%s.addon.php"); }', $mid_list, _XE_PATH_, $addon, $addon, $extra_vars, _XE_PATH_, $addon, _XE_PATH_, $addon, $addon);
$buff .= sprintf(' $_ml = unserialize(base64_decode("%s")); $addon_path = "%saddons/%s/"; $addon_file = "%s.addon.php"; if(file_exists($addon_path.$addon_file) && (!is_array($_ml) || in_array($_m, $_ml))) { unset($addon_info); $addon_info = unserialize(base64_decode("%s")); @include($addon_path.$addon_file); }', $mid_list, './', $addon, $addon, $extra_vars);
}
$buff = sprintf('<?php if(!defined("__ZBXE__")) exit(); $_m = Context::get(\'mid\'); %s ?>', $buff);
$buff = sprintf('<?php if(!defined("__XE__")) exit(); $_m = Context::get(\'mid\'); %s ?>', $buff);
$addon_path = _XE_PATH_.'files/cache/addons/';
if(!is_dir($addon_path)) FileHandler::makeDir($addon_path);

View file

@ -61,7 +61,7 @@
<value xml:lang="en"><![CDATA[Select a target where the added is used.<br />(If you select none, the addon will be used on all targets.)]]></value>
<value xml:lang="jp"><![CDATA[アドオンを使用する対象を指定します。<br />(選択しない場合、すべてのモジュールが利用可能対象となります]]></value>
<value xml:lang="zh-CN"><![CDATA[可以指定使用插件的对象。<br />(全部解除表示可用在所有对象。)]]></value>
<value xml:lang="zh-TW"><![CDATA[可以指定使用附加元件的目標。<br />(全部不選取表示可用所有目標。)]]></value>
<value xml:lang="zh-TW"><![CDATA[可以指定使用附加元件的目標。<br />(全部不選取表示可用所有目標。)]]></value>
<value xml:lang="fr"><![CDATA[On peut choisir des objets dans lesquels la Compagnon soit utilisé.<br />(Tout sera choisi quand rien n'est choisi.)]]></value>
<value xml:lang="ru"><![CDATA[애드온이 사용될 대상을 지정할 수 있습니다.<br />(모두 해제시 모든 대상에서 사용 가능합니다)]]></value>
<value xml:lang="es"><![CDATA[Add-ons se puede utilizar para especificar el destino. <br /> (Todo gratis, están disponibles en todos los destinos)]]></value>
@ -73,7 +73,7 @@
<value xml:lang="en"><![CDATA[Addons control many actions performed in your site rather than display HTML results.<br />You can control useful functions simply by switching ON/OFF of addons.]]></value>
<value xml:lang="jp"><![CDATA[アドオンは、HTMLの出力をコントロールするというより、動作を制御する役割をします。アドオンを「使用/未使用」に設定するだけで、サイトの運営に有用な機能を利用できます。]]></value>
<value xml:lang="zh-CN"><![CDATA[插件就是对动作(Action)的有效控制来给核心程序提供扩展功能的一种组件。<br />只需启用/禁用操作,即可为网站提供强大的扩展功能。]]></value>
<value xml:lang="zh-TW"><![CDATA[附加元件可對 Action進行控制並可擴展核心程式功能,而不是顯示輸出 HTML結果。<br />『啟用/禁用』附加元件,以增強網站的功能。]]></value>
<value xml:lang="zh-TW"><![CDATA[附加元件可對 Action 進行控制並可擴展核心程式功能,而不是顯示 HTML 結果。<br />『啟用/禁用』附加元件,以增強網站的功能。]]></value>
<value xml:lang="fr"><![CDATA[La Compagnon, c'est pour contrôler les actions plutôt d'imprimer des résultats de HTML.<br/>Par la Touche à Bascule des compagnons que vous voulez faire marcher ou arrêter, vous pouvez appliquer les fonctions très utiles à administrer votre site Web.]]></value>
<value xml:lang="ru"><![CDATA[Аддон служит больше для контролирования действий, чем для отображения HTML-результатов.<br />Простым включением/выключением любых аддонов, Вы можете использовать очень полезные функции для администрирования Вашего веб-сайта]]></value>
<value xml:lang="es"><![CDATA[Addon is para controlar las acciones y no para mostrar el resultado en HTML.<br /> Sólo con activar o desactivar el addon que desee, podrá obtener funciones útiles para la administración de tu sitio web.]]></value>
@ -84,25 +84,30 @@
<value xml:lang="ko"><![CDATA[설치된 애드온]]></value>
<value xml:lang="en"><![CDATA[Installed Add-ons]]></value>
<value xml:lang="jp"><![CDATA[インストールされているアドオン]]></value>
<value xml:lang="zh-TW"><![CDATA[已安裝附加元件]]></value>
</item>
<item name="about_installed_addon">
<value xml:lang="ko"><![CDATA[PC, Mobile에 체크하면 애드온을 켤 수 있습니다.]]></value>
<value xml:lang="en"><![CDATA[Check PC and Mobile to switch on the addon.]]></value>
<value xml:lang="jp"><![CDATA[PC、Mobileを選択するとアドオンを使用できます。]]></value>
<value xml:lang="zh-TW"><![CDATA[可選擇切換 PC 和 Mobile 的附加元件。]]></value>
</item>
<item name="fixed">
<value xml:lang="ko"><![CDATA[고정]]></value>
<value xml:lang="en"><![CDATA[Fixed]]></value>
<value xml:lang="jp"><![CDATA[固定]]></value>
<value xml:lang="zh-TW"><![CDATA[固定]]></value>
</item>
<item name="about_fixed">
<value xml:lang="ko"><![CDATA[체크하면 사이트 관리자가 이 설정을 변경할 수 없음.]]></value>
<value xml:lang="en"><![CDATA[Check this, and the site administrator cannot change this setting.]]></value>
<value xml:lang="jp"><![CDATA[選択すると、サイトマネージャーがこの設定を変更することができません。]]></value>
<value xml:lang="zh-TW"><![CDATA[選擇此項後,網站管理員將無法變更設定。]]></value>
</item>
<item name="msg_not_exist_option">
<value xml:lang="ko"><![CDATA[이 애드온은 설정이 존재하지 않습니다.]]></value>
<value xml:lang="en"><![CDATA[Configuration for this addon does not exist.]]></value>
<value xml:lang="en"><![CDATA[Configuration for this addon does not exist.]]></value>
<value xml:lang="jp"><![CDATA[このアドオンは、設定がありません。]]></value>
<value xml:lang="zh-TW"><![CDATA[此附加元件的設定不存在。]]></value>
</item>
</lang>

View file

@ -8,19 +8,22 @@
<div cond="$XE_VALIDATOR_MESSAGE" class="message {$XE_VALIDATOR_MESSAGE_TYPE}">
<p>{$XE_VALIDATOR_MESSAGE}</p>
</div>
<div class="table even easyList">
<div class="table even easyList dsTg">
<table width="100%" border="1" cellspacing="0">
<caption>All({$addon_count})</caption>
<caption>
All({$addon_count})
<span class="side"><button type="button" class="text"><span class="hide">{$lang->simple_view}</span><span class="show">{$lang->detail_view}</span></button></span>
</caption>
<thead>
<tr>
<th scope="col" class="title">{$lang->addon_name}</th>
<th scope="col">{$lang->version}</th>
<th scope="col">{$lang->author}</th>
<th scope="col">{$lang->installed_path}</th>
<th scope="col">{$lang->cmd_setup}</th>
<th scope="col">PC</th>
<th scope="col">Mobile</th>
<th scope="col">{$lang->cmd_delete}</th>
<th scope="col" class="nowr">{$lang->version}</th>
<th scope="col" class="nowr">{$lang->author}</th>
<th scope="col" class="nowr">{$lang->installed_path}</th>
<th scope="col" class="nowr">{$lang->cmd_setup}</th>
<th scope="col" class="nowr">PC</th>
<th scope="col" class="nowr">Mobile</th>
<th scope="col" class="nowr">{$lang->cmd_delete}</th>
</tr>
</thead>
<tbody>
@ -32,18 +35,18 @@
{$lang->msg_avail_easy_update} <a href="{$addon->update_url}&amp;return_url={urlencode(getRequestUriByServerEnviroment())}">{$lang->msg_do_you_like_update}</a>
</p>
</td>
<td>{$addon->version}</td>
<td>
<td class="nowr">{$addon->version}</td>
<td class="nowr">
<block loop="$addon->author => $author">
<a cond="$author->homepage" href="{$author->homepage}" target="_blank">{$author->name}</a>
<block cond="!$author->homepage">{$author->name}</block>
</block>
</td>
<td>{$addon->path}</td>
<td><a href="{getUrl('act', 'dispAddonAdminSetup', 'selected_addon', $addon->addon_name)}">{$lang->cmd_setup}</a></td>
<td><input type="checkbox" name="pc_on[]" title="PC" value="{htmlspecialchars($addon->addon_name)}" checked="checked"|cond="$addon->activated" /></td>
<td><input type="checkbox" name="mobile_on[]" title="Mobile" value="{htmlspecialchars($addon->addon_name)}" checked="checked"|cond="$addon->mactivated" /></td>
<td><a cond="$addon->remove_url" href="{$addon->remove_url}&amp;return_url={urlencode(getRequestUriByServerEnviroment())}">{$lang->cmd_delete}</a></td>
<td class="nowr">{$addon->path}</td>
<td class="nowr"><a href="{getUrl('act', 'dispAddonAdminSetup', 'selected_addon', $addon->addon_name)}">{$lang->cmd_setup}</a></td>
<td class="nowr"><input type="checkbox" name="pc_on[]" title="PC" value="{htmlspecialchars($addon->addon_name)}" checked="checked"|cond="$addon->activated" /></td>
<td class="nowr"><input type="checkbox" name="mobile_on[]" title="Mobile" value="{htmlspecialchars($addon->addon_name)}" checked="checked"|cond="$addon->mactivated" /></td>
<td class="nowr"><a cond="$addon->remove_url" href="{$addon->remove_url}&amp;return_url={urlencode(getRequestUriByServerEnviroment())}">{$lang->cmd_delete}</a></td>
</tr>
</tbody>
</table>

View file

@ -32,7 +32,7 @@
<p class="q"><label for="{$var->name}">{$var->title}</label></p>
<p class="a">
<input cond="$var->type == 'text'" type="text" name="{$var->name}" id="{$var->name}" value="{htmlspecialchars($var->value)}" class="lang_code">
<textarea cond="$var->type == 'textarea'" name="{$var->name}" id="{$var->name}" class="lang_code">{htmlspecialchars($var->value)}</textarea>
<textarea cond="$var->type == 'textarea'" name="{$var->name}" id="{$var->name}" class="lang_code" rows="8" cols="42">{htmlspecialchars($var->value)}</textarea>
<select cond="$var->type == 'select'" name="{$var->name}" id="{$var->name}">
<option loop="$var->options => $option" value="{$option->value}" selected="selected"|cond="$var->value == $option->value">{$option->title}</option>
</select>

View file

@ -40,6 +40,7 @@
function getAdminFTPList()
{
Context::loadLang('./modules/autoinstall/lang');
set_time_limit(5);
require_once(_XE_PATH_.'libs/ftp.class.php');
$ftp_info = Context::getRequestVars();
@ -90,6 +91,10 @@
if(strpos($v,'d') === 0 || strpos($v, '<DIR>')) $list[] = substr(strrchr($v,' '),1) . '/';
}
}
else
{
return new Object(-1,'msg_ftp_no_directory');
}
$this->add('list', $list);
}

View file

@ -144,6 +144,43 @@
$output = $oAdminAdminModel->getFavoriteList(0, true);
Context::set('favorite_list', $output->get('favoriteList'));
// Retrieve recent news and set them into context,
// move from index method, because use in admin footer
$newest_news_url = sprintf("http://news.xpressengine.com/%s/news.php?version=%s&package=%s", _XE_LOCATION_, __ZBXE_VERSION__, _XE_PACKAGE_);
$cache_file = sprintf("%sfiles/cache/newest_news.%s.cache.php", _XE_PATH_, _XE_LOCATION_);
if(!file_exists($cache_file) || filemtime($cache_file)+ 60*60 < time()) {
// Considering if data cannot be retrieved due to network problem, modify filemtime to prevent trying to reload again when refreshing administration page
// Ensure to access the administration page even though news cannot be displayed
FileHandler::writeFile($cache_file,'');
FileHandler::getRemoteFile($newest_news_url, $cache_file, null, 1, 'GET', 'text/html', array('REQUESTURL'=>getFullUrl('')));
}
if(file_exists($cache_file)) {
$oXml = new XmlParser();
$buff = $oXml->parse(FileHandler::readFile($cache_file));
$item = $buff->zbxe_news->item;
if($item) {
if(!is_array($item)) $item = array($item);
foreach($item as $key => $val) {
$obj = null;
$obj->title = $val->body;
$obj->date = $val->attrs->date;
$obj->url = $val->attrs->url;
$news[] = $obj;
}
Context::set('news', $news);
if(isset($news) && is_array($news))
{
Context::set('latestVersion', array_shift($news));
}
}
Context::set('released_version', $buff->zbxe_news->attrs->released_version);
Context::set('download_link', $buff->zbxe_news->attrs->download_link);
}
Context::set('subMenuTitle', $subMenuTitle);
Context::set('gnbUrlList', $menu->list);
Context::set('parentSrl', $parentSrl);
@ -151,62 +188,6 @@
Context::setBrowserTitle($browserTitle);
}
function loadSideBar()
{
$oModuleModel = &getModel('module');
$installed_module_list = $oModuleModel->getModulesXmlInfo();
$installed_modules = $package_modules = array();
$package_idx = 0;
foreach($installed_module_list as $key => $val) {
if($val->category == 'migration') $val->category = 'system';
if($val->category == 'interlock') $val->category = 'accessory';
if($val->category == 'statistics') $val->category = 'accessory';
if($val->module == 'admin' || !$val->admin_index_act) continue;
// get action information
$action_spec = $oModuleModel->getModuleActionXml($val->module);
$actions = array();
if($action_spec->default_index_act) $actions[] = $action_spec->default_index_act;
if($action_spec->admin_index_act) $actions[] = $action_spec->admin_index_act;
if($action_spec->action) foreach($action_spec->action as $k => $v) $actions[] = $k;
$obj = null;
$obj->category = $val->category;
$obj->title = $val->title;
$obj->description = $val->description;
$obj->index_act = $val->admin_index_act;
if(in_array(Context::get('act'), $actions)) $obj->selected = true;
// Packages
if($val->category == 'package') {
if($package_idx == 0) $obj->position = "first";
else $obj->position = "mid";
$package_modules[] = $obj;
$package_idx ++;
if($obj->selected) Context::set('package_selected',true);
// Modules
} else {
$installed_modules[] = $obj;
}
if($obj->selected) {
Context::set('selected_module_category', $val->category);
Context::set('selected_module_info', $val);
}
}
if(count($package_modules)) $package_modules[count($package_modules)-1]->position = 'end';
Context::set('package_modules', $package_modules);
Context::set('installed_modules', $installed_modules);
Context::setBrowserTitle("XE Admin Page");
// add javascript tooltip plugin - gony
Context::loadJavascriptPlugin('qtip');
Context::loadJavascriptPlugin('watchinput');
$security = new Security();
$security->encodeHTML('selected_module_info.', 'selected_module_info.author..', 'package_modules..', 'installed_modules..');
}
/**
* @brief Display Super Admin Dashboard
* @return none
@ -277,51 +258,29 @@
Context::set('latestTrackbackList', $output->data);
unset($args, $output, $columnList);
//Retrieve recent news and set them into context
$newest_news_url = sprintf("http://news.xpressengine.com/%s/news.php?version=%s&package=%s", _XE_LOCATION_, __ZBXE_VERSION__, _XE_PACKAGE_);
$cache_file = sprintf("%sfiles/cache/newest_news.%s.cache.php", _XE_PATH_, _XE_LOCATION_);
if(!file_exists($cache_file) || filemtime($cache_file)+ 60*60 < time()) {
// Considering if data cannot be retrieved due to network problem, modify filemtime to prevent trying to reload again when refreshing administration page
// Ensure to access the administration page even though news cannot be displayed
FileHandler::writeFile($cache_file,'');
FileHandler::getRemoteFile($newest_news_url, $cache_file, null, 1, 'GET', 'text/html', array('REQUESTURL'=>getFullUrl('')));
}
if(file_exists($cache_file)) {
$oXml = new XmlParser();
$buff = $oXml->parse(FileHandler::readFile($cache_file));
$item = $buff->zbxe_news->item;
if($item) {
if(!is_array($item)) $item = array($item);
foreach($item as $key => $val) {
$obj = null;
$obj->title = $val->body;
$obj->date = $val->attrs->date;
$obj->url = $val->attrs->url;
$news[] = $obj;
}
Context::set('news', $news);
}
Context::set('released_version', $buff->zbxe_news->attrs->released_version);
Context::set('download_link', $buff->zbxe_news->attrs->download_link);
}
// Get list of modules
$oModuleModel = &getModel('module');
$module_list = $oModuleModel->getModuleList();
if(is_array($module_list))
{
$isUpdated = false;
$needUpdate = false;
$addTables = false;
foreach($module_list AS $key=>$value)
{
if($value->need_install || $value->need_update)
$isUpdated = true;
if($value->need_install)
{
$addTables = true;
}
if($value->need_update)
{
$needUpdate = true;
}
}
}
Context::set('module_list', $module_list);
Context::set('isUpdated', $isUpdated);
Context::set('needUpdate', $isUpdated);
Context::set('addTables', $addTables);
Context::set('needUpdate', $needUpdate);
// gathering enviroment check
$mainVersion = join('.', array_slice(explode('.', __ZBXE_VERSION__), 0, 2));

View file

@ -82,7 +82,10 @@
$args->menu_srl = $menuSrl;
$args->menu_item_srl = getNextSequence();
$args->name = '{$lang->menu_gnb[\''.$value.'\']}';
if($value == 'dashboard') $args->url = getUrl('', 'module', 'admin');
if($value == 'dashboard')
{
$args->url = 'index.php?module=admin';
}
else $args->url = '#';
$args->listorder = -1*$args->menu_item_srl;
$output = executeQuery('menu.insertMenuItem', $args);

View file

@ -874,11 +874,6 @@ Lütfen son sürümü için indirme linkine tıklayınız.]]></value>
<value xml:lang="en"><![CDATA[Ratio(Keep Aspect)]]></value>
<value xml:lang="jp"><![CDATA[Ratio(縦横の比率をキープ)]]></value>
</item>
<item name="ratio">
<value xml:lang="ko"><![CDATA[Ratio(비율 맞추기)]]></value>
<value xml:lang="en"><![CDATA[Ratio(Keep Aspect)]]></value>
<value xml:lang="jp"><![CDATA[Ratio(縦横の比率をキープ)]]></value>
</item>
<item name="about_admin_ip_limit">
<value xml:lang="ko"><![CDATA[관리자 페이지로 접근가능한 IP대역을 지정합니다.]]></value>
<value xml:lang="en"><![CDATA[Sepcify IP address band that can access the admin page.]]></value>
@ -1073,6 +1068,21 @@ Lütfen son sürümü için indirme linkine tıklayınız.]]></value>
<value xml:lang="ko"><![CDATA[업데이트 가능]]></value>
<value xml:lang="en"><![CDATA[Update Available]]></value>
</item>
<item name="need_update_and_table">
<value xml:lang="ko"><![CDATA[DB Table 생성과 모듈 업데이트 필요]]></value>
<value xml:lang="en"><![CDATA[Need to Create DB Table and Update Module]]></value>
<value xml:lang="jp"><![CDATA[DBテーブルの生成とモジュールの更新が必要]]></value>
</item>
<item name="need_update">
<value xml:lang="ko"><![CDATA[모듈 업데이트 필요]]></value>
<value xml:lang="en"><![CDATA[Need to Update Module]]></value>
<value xml:lang="jp"><![CDATA[モジュールの更新が必要]]></value>
</item>
<item name="need_table">
<value xml:lang="ko"><![CDATA[DB Table 생성 필요]]></value>
<value xml:lang="en"><![CDATA[Need to Create DB Table]]></value>
<value xml:lang="jp"><![CDATA[DBテーブルの生成が必要]]></value>
</item>
<item name="admin_menu_setup">
<value xml:lang="ko"><![CDATA[관리자 메뉴 설정]]></value>
<value xml:lang="en"><![CDATA[Admin Menu Setup]]></value>
@ -1185,32 +1195,19 @@ Lütfen son sürümü için indirme linkine tıklayınız.]]></value>
<value xml:lang="zh-TW"><![CDATA[此資料會儲存在 <strong>files/config/ftp.config.php</strong> 檔案中。 安裝後可在設定頁面中新增、更改或刪除此資訊。]]></value>
<value xml:lang="de"><![CDATA[Die Angabe wird unter <strong>files/config/ftp.config.php</strong> gespeichert. Nach der Installation ist es auch möglich, dass die Angabe von Administrator modifiziert oder gelöscht werden kann.]]></value>
</item>
<item name="msg_ftp_not_connected">
<value xml:lang="ko"><![CDATA[localhost로의 FTP 접속 오류가 발생했습니다. FTP 포트 번호를 확인해주시거나 FTP 서비스가 가능한지 확인해주세요.]]></value>
<value xml:lang="en"><![CDATA[Connection to the localhost via FTP failed. Please check the port number and whether the FTP service is available.]]></value>
<value xml:lang="jp"><![CDATA[localhostへのFTP接続エラーが発生しました。FTPポート(port)番号をはじめ、FTPサービスが可能であるかを確認してください。]]></value>
<value xml:lang="zh-CN"><![CDATA[发生本地(localhost)FTP连接错误。请确认ftp端口号及支持ftp服务与否。]]></value>
<value xml:lang="zh-TW"><![CDATA[本地(localhost) FTP連線錯誤。請檢查 FTP 埠口並確認是否支援 FTP 功能。]]></value>
<value xml:lang="fr"><![CDATA[localhost로의 FTP 접속 오류가 발생하였습니다. ftp 포트 번호를 확인해주시거나 ftp 서비스가 가능한지 확인해주세요]]></value>
<value xml:lang="de"><![CDATA[Ein Verbindungsfehler des FTPs an localhost ist aufgetreten. Bitte FTP_Port checken, oder ob FTP_Service möglich ist.]]></value>
<value xml:lang="ru"><![CDATA[Connection to localhost via FTP failed. Please check the port number and if FTP service is available.]]></value>
<value xml:lang="es"><![CDATA[Ha ocurrico un error de conexión al FTP del localhost. Verifique el puerto del FTP y/o el funcionamiento del servicio FTP.]]></value>
<value xml:lang="tr"><![CDATA[Yerel web alanına FTP bağlantısı sağlanamadı. Lütfen port numarasını ve FTP servisinin mevcut olup-olmadığını kontrol ediniz .]]></value>
<value xml:lang="vi"><![CDATA[Kết nối bằng FTP không thành công. Xin vui lòng kiểm tra lại thông tin tài khoản và cổng kết nối!]]></value>
<value xml:lang="mn"><![CDATA[localhost-ын FTP холболт амжилтгvй боллоо. FTP дугаараа шалгах буюу эсвэл FTP vйлчилгээг ашиглах боломжтой эсэхээ шалгана уу.]]></value>
</item>
<item name="msg_ftp_invalid_auth_info">
<value xml:lang="ko"><![CDATA[입력하신 FTP 정보로 로그인을 하지 못했습니다. FTP정보를 확인해주세요.]]></value>
<value xml:lang="en"><![CDATA[Authentication failed. Please check the username and password.]]></value>
<value xml:lang="jp"><![CDATA[ログインに失敗しました。FTPアクセス情報を再度確認してください。]]></value>
<value xml:lang="zh-CN"><![CDATA[FTP登录失败。请确认输入的FTP信息。]]></value>
<value xml:lang="zh-TW"><![CDATA[FTP登入失敗。請確認輸入的 FTP 資訊。]]></value>
<value xml:lang="fr"><![CDATA[입력하신 FTP 정보로 로그인을 하지 못했습니다. FTP정보를 확인해주세요]]></value>
<value xml:lang="de"><![CDATA[Anmeldungsfehler mit der Angabe des FTPs Bitte die Angabe des FTPs festlegen.]]></value>
<value xml:lang="es"><![CDATA[Los datos de login para el FTP no son correctos. Veriféquelos.]]></value>
<value xml:lang="tr"><![CDATA[Kimlik doğrulama başarısız oldu. Lütfen kullanıcı adını ve şifreyi kontrol ediniz.]]></value>
<value xml:lang="vi"><![CDATA[Xác nhận thất bại. Xin vui lòng kiểm tra lại tên sử dụng và mật khẩu.]]></value>
<value xml:lang="mn"><![CDATA[Таны оруулсан FTP мэдээллээр нэвтэрч чадсангvй. FTPмэдээллээ шалгана уу.]]></value>
<item name="msg_ftp_no_directory">
<value xml:lang="ko"><![CDATA[FTP 접속에 성공했으나, 디렉토리 정보를 읽어올 수 없습니다. 서버 설정을 확인해주세요.]]></value>
<value xml:lang="en"><![CDATA[Succeed to connect to the host via FTP. However, can not read any directory list informaiton. Check the server configurations.]]></value>
<value xml:lang="jp"><![CDATA[Succeed to connect to the host via FTP. However, can not read any directory list informaiton. Check the server configurations.]]></value>
<value xml:lang="zh-CN"><![CDATA[Succeed to connect to the host via FTP. However, can not read any directory list informaiton. Check the server configurations.]]></value>
<value xml:lang="zh-TW"><![CDATA[Succeed to connect to the host via FTP. However, can not read any directory list informaiton. Check the server configurations.]]></value>
<value xml:lang="fr"><![CDATA[Succeed to connect to the host via FTP. However, can not read any directory list informaiton. Check the server configurations.]]></value>
<value xml:lang="de"><![CDATA[Succeed to connect to the host via FTP. However, can not read any directory list informaiton. Check the server configurations.]]></value>
<value xml:lang="ru"><![CDATA[Succeed to connect to the host via FTP. However, can not read any directory list informaiton. Check the server configurations.]]></value>
<value xml:lang="es"><![CDATA[Succeed to connect to the host via FTP. However, can not read any directory list informaiton. Check the server configurations.]]></value>
<value xml:lang="tr"><![CDATA[Succeed to connect to the host via FTP. However, can not read any directory list informaiton. Check the server configurations.]]></value>
<value xml:lang="vi"><![CDATA[Succeed to connect to the host via FTP. However, can not read any directory list informaiton. Check the server configurations.]]></value>
<value xml:lang="mn"><![CDATA[Succeed to connect to the host via FTP. However, can not read any directory list informaiton. Check the server configurations.]]></value>
</item>
<item name="msg_ftp_mkdir_fail">
<value xml:lang="ko"><![CDATA[FTP를 이용한 디렉토리 생성 명령에 실패했습니다. FTP 서버의 설정을 확인해주세요.]]></value>

View file

@ -1,10 +1,14 @@
</div>
<div class="footer">
<p class="power">Powered by <strong><a href="{_XE_LOCATION_SITE_}" target="_blank">XE</a></strong> (ver. {__XE_VERSION__}).</p>
<p class="power">
Powered by <strong><a href="{_XE_LOCATION_SITE_}" target="_blank">XE</a></strong>. <span class="vr">|</span>
<strong>Your version</strong>: {__XE_VERSION__} <span class="vr">|</span>
<!--@if(isset($latestVersion))--><strong>Latest version</strong>: <a href="{$latestVersion->url}" target="_blank" title="{zdate($latestVersion->date, 'Y-m-d')}">{$latestVersion->title}</a><!--@end-->
</p>
<p class="cache">
<button type="button" class="text" onclick="doResetAdminMenu();">{$lang->cmd_admin_menu_reset}</button>
<button type="button" class="text" onclick="doRecompileCacheFile();">{$lang->cmd_remake_cache}</button>
<button type="button" class="text" onclick="doClearSession();">{$lang->cmd_clear_session}</button>
<button type="button" class="text" onclick="doResetAdminMenu();">{$lang->cmd_admin_menu_reset}</button> <span class="vr">|</span>
<button type="button" class="text" onclick="doRecompileCacheFile();">{$lang->cmd_remake_cache}</button> <span class="vr">|</span>
<button type="button" class="text" onclick="doClearSession();">{$lang->cmd_clear_session}</button> <span class="vr">|</span>
<a href="http://code.google.com/p/xe-core/issues/entry" target="_blank">{$lang->bug_report}</a>
</p>
</div>

View file

@ -15,31 +15,43 @@
</li>
</ul>
</div>
<div class="gnb jx">
<ul>
<li loop="$gnbUrlList=>$key,$value" class="activeOn"|cond="$parentSrl==$key"><a href="{$value['href']}">{$value['text']}</a>
<div class="gnb">
<ul class="nav">
<li loop="$gnbUrlList=>$key,$value" class="activeOn"|cond="$parentSrl==$key"><a href="{getFullUrl('')}{$value['href']}"><span>{$value['text']}</span></a>
<ul cond="count($value['list'])">
<li loop="$value['list']=>$key2,$value2"><a href="{$value2['href']}">{$value2['text']}</a></li>
<li loop="$value['list']=>$key2,$value2"><a href="{getFullUrl('')}{$value2['href']}">{$value2['text']}</a></li>
</ul>
</li>
</ul>
</div>
<div class="bmk">
<a href="#bmk" class="tgAnchor" data-effect="fade" data-duration="200">{$lang->favorite}</a>
<ul id="bmk" class="tgContent">
<li loop="$favorite_list => $favorite">
<a href="{getUrl('act', $favorite->admin_index_act)}">{$favorite->title}</a>
<form class="action" action="">
<input type="hidden" name="module" value="admin" />
<input type="hidden" name="act" value="procAdminToggleFavorite" />
<input type="hidden" name="site_srl" value="0" />
<input type="hidden" name="module_name" value="{$favorite->module}" />
<input type="hidden" name="success_return_url" value="{getUrl('', 'module', 'admin')}" />
<button type="submit" class="text" title="{$lang->cmd_delete}">x</button>
</form>
</li>
<li cond="!is_array($favorite_list) || count($favorite_list) < 1">{$lang->no_data}</li>
</ul>
<select class="mnv">
<block loop="$gnbUrlList=>$key,$value">
<optgroup label="{$value['text']}" cond="count($value['list']) > 0">
<option loop="$value['list']=>$key2,$value2" value="{getFullUrl('')}{$value2['href']}" selected="selected"|cond="$value2['text'] == $subMenuTitle">{$value2['text']}</option>
</optgroup>
<option cond="count($value['list']) == 0" value="{getFullUrl('')}{$value['href']}" selected="selected"|cond="!$subMenuTitle">{$value['text']}</option>
</block>
</select>
<div class="bmk active">
<a href="#bmk" class="bmAnchor" data-effect="fade" data-duration="200">{$lang->favorite}</a>
<ul id="bmk" class="bmContent">
<li loop="$favorite_list => $favorite">
<a href="{getUrl('', 'module', 'admin', 'act', $favorite->admin_index_act)}">{$favorite->title}</a>
<form class="action" action="">
<input type="hidden" name="module" value="admin" />
<input type="hidden" name="act" value="procAdminToggleFavorite" />
<input type="hidden" name="site_srl" value="0" />
<input type="hidden" name="module_name" value="{$favorite->module}" />
<input type="hidden" name="success_return_url" value="{getUrl('', 'module', 'admin')}" />
<button type="submit" class="text" title="{$lang->cmd_delete}">x</button>
</form>
</li>
<li cond="!is_array($favorite_list) || count($favorite_list) < 1">{$lang->no_data}</li>
</ul>
</div>
<select class="mnv">
<option>{$lang->favorite}</option>
<option loop="$favorite_list => $favorite" value="{getUrl('', 'module', 'admin', 'act', $favorite->admin_index_act)}">{$favorite->title}</option>
</select>
</div>
</div>
<div class="body">
<div class="body">

View file

@ -76,7 +76,7 @@ jQuery(function($){
<li>
<p class="q"><label for="time_zone">{$lang->about_timezone}</label></p>
<p class="a">
<select name="time_zone" id="time_zone" class="fullWidth">
<select name="time_zone" id="time_zone">
<!--@foreach($time_zone_list as $key => $val)-->
<option value="{$key}" <!--@if($time_zone==$key)-->selected="selected"<!--@end-->>{$val}</option>
<!--@endforeach-->
@ -105,7 +105,7 @@ jQuery(function($){
<p>{$lang->detail_input_footer_script}</p>
</div>
<p class="a">
<textarea name="htmlFooter" id="htmlFooter" rows="4" cols="42">{$htmlFooter}</textarea>
<textarea name="htmlFooter" id="htmlFooter" rows="8" cols="42">{$htmlFooter}</textarea>
</p>
</li>
<li>
@ -137,7 +137,7 @@ jQuery(function($){
<p>{$lang->detail_about_admin_ip_limit}</p>
</div>
<p class="a">
<textarea name="admin_ip_list" id="admin_ip_list" rows="4" cols="42">{$admin_ip_list}</textarea>
<textarea name="admin_ip_list" id="admin_ip_list" rows="8" cols="42">{$admin_ip_list}</textarea>
{$lang->local_ip_address} : {$IP}</p>
</li>
<li>

View file

@ -58,19 +58,21 @@ header,footer,section,article,aside,nav,hgroup,details,menu,figure,figcaption{di
.x .table caption strong{color:#e00}
.x .table caption .side{float:right;font-weight:normal;margin-left:1em}
.x .table th,
.x .table td{border:0;padding:8px;vertical-align:top;text-align:left;border-bottom:1px solid #ddd;white-space:nowrap}
.x .table th{background:#f8f8f8}
.x .table td{border:0;padding:8px;vertical-align:top;text-align:left;border-bottom:1px solid #ddd}
.x .table th{background:#f8f8f8;white-space:nowrap}
.x .table thead th{border-bottom:1px solid #999}
.x .table tfoot td{font-weight:bold;background:#f8f8f8}
.x .table.even tbody tr:nth-of-type(even) td{background-color:#fafafa}
.x .table.even tbody tr:nth-of-type(even){background-color:#fafafa}
.x .table tbody tr:hover{background:#ffd !important}
.x .table td>input[type=text]{margin:-1px 0 !important;vertical-align:middle}
.x .table img{vertical-align:middle}
.x .table em{font-style:normal;font-weight:normal;color:#e00}
.x .table th.nowr,
.x .table td.nowr{white-space:nowrap}
.x .table th.title,
.x .table td.title,
.x .table th.text,
.x .table td.text{white-space:normal;width:100%}
.x .table td[colspan]{white-space:normal}
.x .table td.text{width:100%}
/* Form */
.x .form{margin:1em 0;padding:0}
.x .form fieldset{margin:0 0 2em 0;padding:0;border:0}
@ -84,6 +86,7 @@ header,footer,section,article,aside,nav,hgroup,details,menu,figure,figcaption{di
.x .form input[type=file]{cursor:pointer}
.x .form ul{position:relative;margin:1em 0;padding:0;list-style:none;border-top:2px solid #ccc;border-bottom:1px solid #ccc;zoom:1}
.x .form li{list-style:none;border:1px solid #ddd;border-left:0;border-right:0;margin:-1px 0;padding:8px 0;vertical-align:top;zoom:1}
.x .form li:hover{background:#ffd}
.x .form li:first-child{border-top:0}
.x .form li>label:first-child{display:block;font-weight:bold}
.x .form li label em{font-weight:normal}
@ -91,6 +94,7 @@ header,footer,section,article,aside,nav,hgroup,details,menu,figure,figcaption{di
.x .form input[type=text],
.x .form input[type=password],
.x .form input[type=file],
.x .form select[size],
.x .form textarea{position:relative;width:280px;margin:2px 0;border:1px solid #b7b7b7;border-right-color:#e1e1e1;border-bottom-color:#e1e1e1;background:transparent}
.x .form input[type=text],
.x .form input[type=password],
@ -105,7 +109,7 @@ header,footer,section,article,aside,nav,hgroup,details,menu,figure,figcaption{di
.x .form input[type=checkbox][disabled=disabled],
.x .form select[disabled=disabled],
.x .form textarea[disabled=disabled]{background:#ddd;text-shadow:1px 1px 0 #fff}
.x .form textarea{padding:3px 4px;vertical-align:top}
.x .form textarea{padding:3px 4px;vertical-align:top;resize:both}
.x .form span.desc,
.x .form em.desc{line-height:22px;vertical-align:middle;margin:0 10px}
.x .form p.desc{margin:.25em 0;line-height:1.4}
@ -113,60 +117,46 @@ header,footer,section,article,aside,nav,hgroup,details,menu,figure,figcaption{di
.x .form .a{margin:0 0 5px 0}
.x .form .tgForm{margin-right:1em}
/* Global Navigation Bar */
.x .gnb{position:relative;clear:both;border:1px solid #c1c1c1;border-left:0;border-right:0;background-color:#efefef;background:#efefef -webkit-gradient(linear, 0% 0%, 0% 100%, from(#efefef), to(#dcdcdc));background:#efefef -moz-linear-gradient(top, #efefef, #dcdcdc);filter:progid:DXImageTransform.Microsoft.gradient(startColorStr=#efefef, endColorStr=#dcdcdc);zoom:1}
.x .gnb ul{margin:0;padding:0 0 0 20px;list-style:none;border:1px solid #fff;border-left:0;border-right:0;zoom:1}
.x .gnb ul ul{position:absolute;top:30px;left:0;border:1px solid #ccc;border-top:0;padding:1px 0 0 0;background:#fff}
.x .gnb ul:after{content:"";display:block;clear:both}
.x .gnb li{position:relative;float:left;border:1px solid #fff;border-top:0;border-bottom:0;margin:0 -1px 0 0}
.x .gnb li li{float:none;clear:both;overflow:hidden;border:0;border-top:1px dotted #ccc;margin:0;padding:2px}
.x .gnb li li:first-child{border:0}
.x .gnb li a{float:left;font-weight:bold;color:#333;font-size:12px;height:14px;padding:8px 18px;white-space:nowrap;text-decoration:none;text-shadow:0 1px 0 #fff;zoom:1}
.x .gnb li a:hover,
.x .gnb li a:active,
.x .gnb li a:focus,
.x .gnb li.active a{background:#f4f4f4;border:1px solid #ccc;border-bottom:0;padding:7px 17px 8px 17px}
.x .gnb li.activeOn a{background:#fff;border:1px solid #ccc;border-bottom:0;padding:7px 17px 8px 17px}
.x .gnb li.active li a{display:block;float:none;color:#555;background:#fff;padding:5px 15px !important;font-weight:normal !important;border:0 !important}
.x .gnb li.active li a:hover,
.x .gnb li.active li a:active,
.x .gnb li.active li a:focus{border:0;background:#eee}
.x .gnb .setting{position:absolute;top:8px;right:2em;width:16px;height:0;padding:16px 0 0 0;overflow:hidden;background:url(../img/iconSetting.gif) no-repeat center}
.x .gnb.jx ul{display:block;position:static;padding:0}
.x .gnb.jx li{float:none;clear:both;border-top:1px solid #ccc}
.x .gnb.jx ul ul{border:0}
.x .gnb.jx li li{border:0}
.x .gnb.jx li a{float:none;display:block}
.x .gnb.jx li a:hover,
.x .gnb.jx li a:active,
.x .gnb.jx li a:focus{background:none}
.x .gnb.jx li.activeOn>a{background:#ddd}
.x .gnb{height:34px;clear:both;border:1px solid #c1c1c1;border-left:0;border-right:0;background-color:#efefef;background:#efefef -webkit-gradient(linear, 0% 0%, 0% 100%, from(#efefef), to(#dcdcdc));background:#efefef -moz-linear-gradient(top, #efefef, #dcdcdc);filter:progid:DXImageTransform.Microsoft.gradient(startColorStr=#efefef, endColorStr=#dcdcdc);zoom:1}
.x .gnb:after{content:"";display:block;clear:both}
.x .gnb .nav{float:left;position:relative;display:inline-block;*display:inline;zoom:1;margin:0 0 0 20px;padding:1px;list-style:none}
.x .gnb .nav ul{_position:absolute;display:block;_display:inline;zoom:1;clear:both;margin:0;padding:0;border:0;overflow:hidden}
.x .gnb.active .nav{top:-5px;padding:5px 5px 5px 0;margin:0 0 -100% 20px;border:1px solid #aaa;background:#fff;box-shadow:0 0 10px #999;border-radius:5px}
.x .gnb.active .nav ul{top:0;_position:relative;box-shadow:none;display:block;_display:inline;clear:both;padding:0;margin:0;border:0}
.x .gnb .nav:after{content:"";display:block;clear:both}
.x .gnb .nav li{position:relative;display:inline-block;*display:inline;zoom:1;vertical-align:top;overflow:hidden;margin:0}
.x .gnb .nav li.activeOn{z-index:10}
.x .gnb .nav li.activeOn>a{border:1px solid #ccc}
.x .gnb .nav li li{display:block;_float:left;clear:both;overflow:hidden;border:0;margin:0}
.x .gnb .nav li li:first-child{border:0}
.x .gnb .nav li a{display:block;_float:left;font-weight:bold;color:#333;font-size:12px;height:14px;padding:9px 0;white-space:nowrap;text-decoration:none;text-shadow:0 1px 0 #fff;zoom:1}
.x .gnb .nav li a span{padding:0 15px;border-left:1px solid #fff}
.x .gnb.active .nav li a span,
.x .gnb .nav li:first-child a span,
.x .gnb .nav li.activeOn+li a span{border:0;margin:0 0 0 1px}
.x .gnb .nav li a:hover,
.x .gnb .nav li a:active,
.x .gnb .nav li a:focus{background:#f4f4f4}
.x .gnb .nav li.activeOn>a{background:#fff;padding:8px 0}
.x .gnb .nav li li a{color:#555;background:#fff;padding:5px 15px !important;font-weight:normal !important;border:0 !important}
.x .gnb .nav li li a:hover,
.x .gnb .nav li li a:active,
.x .gnb .nav li li a:focus{border:0;background:#eee}
.x .gnb .bmk{position:relative;float:right;padding:8px 15px;margin:0 20px -100% 0;text-align:right;display:inline}
.x .gnb .bmk.active{top:-5px;padding:12px 14px 10px 15px;background-color:#fff;border:1px solid #aaa;box-shadow:0 0 10px #999;border-radius:5px}
.x .gnb .bmk .bmAnchor{height:16px;text-shadow:0 1px 0 #fff;display:inline-block;padding:0 0 0 20px;background:url(../img/iconFavorite.gif) no-repeat 0 -16px}
.x .gnb .bmk ul{display:none}
.x .gnb .bmk.active ul{position:relative;list-style:none;display:block !important;text-align:left;background:none;margin:0 !important;padding:10px 0 0 0 !important;border:0;box-shadow:none;border-radius:0}
.x .gnb .bmk li{display:block;position:relative;padding:3px 15px 3px 0 !important;white-space:nowrap}
.x .gnb .bmk li a{display:inline;padding:0;background:none !important;font-weight:normal}
.x .gnb .bmk li .action{position:absolute;top:0;right:0}
.x .gnb .bmk li .action .text{text-decoration:none;width:16px;text-align:center;margin:0;padding:0;border:0;background:none;overflow:visible}
.x .gnb .mnv{width:100%;height:32px;display:none}
@media only all and (max-width:860px){
.x .gnb ul{padding-left:1em}
.x .gnb .setting{right:1em}
}
@media only all and (max-width:640px){
.x .gnb ul{display:block;position:static;padding:0}
.x .gnb li{float:none;clear:both;border-top:1px solid #ccc}
.x .gnb ul ul{border:0;position:static}
.x .gnb li li{border:0}
.x .gnb li a{float:none;display:block}
.x .gnb li a:hover,
.x .gnb li a:active,
.x .gnb li a:focus{background:none}
.x .gnb li.activeOn>a{background:#ddd}
}
/* Favorite */
.x .bmk{position:absolute;right:20px;bottom:10px;padding:0 0 0 20px;background:url(../img/iconFavorite.gif) no-repeat 0 -16px}
.x .bmk>a{text-shadow:0 1px 0 #fff}
.x .bmk ul{position:absolute;top:140%;right:0;list-style:none;margin:0;padding:5px 10px;border:1px solid #aaa;border-radius:5px;background:#fff;box-shadow:1px 1px 3px #aaa}
.x .bmk li{position:relative;padding:3px 30px 3px 0;white-space:nowrap}
.x .bmk li .action{position:absolute;top:0;right:0}
.x .bmk li .action .text{text-decoration:none;width:16px;text-align:center;margin:0}
@media only all and (max-width:640px){
.x .bmk{position:static;background-color:#fff;padding:10px 20px;background:#fff}
.x .bmk .tgAnchor{display:block}
.x .bmk ul{position:relative;border:0;border-top:1px solid #ccc;border-radius:0;box-shadow:none;padding:0;margin:5px 0 0 0}
.x .bmk li{position:relative;top:-1px;border-top:1px dotted #ccc}
.x .gnb{height:auto}
.x .gnb .nav,
.x .gnb .bmk{display:none}
.x .gnb .mnv{display:block}
}
/* Local Navigation */
.x .lnb{position:relative;float:left;width:210px;margin:1em 0 1em -240px;line-height:normal;zoom:1;display:inline}
@ -236,7 +226,7 @@ header,footer,section,article,aside,nav,hgroup,details,menu,figure,figcaption{di
.x .prgrs.prgrsLarge .pAction,
.x .prgrs.prgrsLarge .pNum{height:34px;line-height:34px;font-size:14px}
/* Modal Window */
.modal{position:absolute;top:0;left:0;width:100%;_height:100%;min-height:100%;z-index:100}
.modal{position:absolute;top:0;left:0;width:100%;_height:100%;min-height:100%;z-index:99}
.modal .bg{position:absolute;background:#000;_background:none;width:100%;height:100%;opacity:.5;z-index:2;filter:progid:DXImageTransform.Microsoft.Alpha(opacity=50);zoom:1}
.modal .fg{position:relative;width:80%;margin:5em auto;background:#fff;padding:0 1em;*padding:1em;border:8px solid #ddd;z-index:3;zoom:1;border-radius:5px;box-shadow:0 0 6px #000}
.modal ul,
@ -262,7 +252,10 @@ body.modalContainer{_height:100%;_width:100%} /* IE6 only */
.x .h2Anchor{position:absolute;right:0;border:0;background:none;color:#00f;text-decoration:underline}
/* Skip Navigation */
.x .skipNav{margin:0;text-align:center}
.x .skipNav a{position:absolute;width:1px;height:1px;display:block;font-weight:bold;padding:10px 0}
@media only all and (max-width:860px){
.x .skipNav{display:none}
}
.x .skipNav a{position:absolute;width:1px;height:1px;display:block;padding:10px 0;font-weight:bold;overflow:hidden}
.x .skipNav a:hover,
.x .skipNav a:active,
.x .skipNav a:focus{position:relative;width:auto;height:auto}
@ -270,11 +263,11 @@ body.modalContainer{_height:100%;_width:100%} /* IE6 only */
.x .header{position:relative;z-index:2;padding:30px 0 0 0;background:#4c4c4c;box-shadow:0 0 10px #aaa;zoom:1;border-radius:5px 5px 0 0}
.x .header:after{content:"";display:block;clear:both}
.x .header a{text-decoration:none}
.x .header h1{margin:0 15px 10px 20px;font-size:24px;line-height:32px;display:inline-block;zoom:1}
.x .header h1{margin:0 0 10px 20px;font-size:24px;line-height:32px;display:inline-block;*display:inline;zoom:1;vertical-align:middle}
.x .header h1 *{vertical-align:middle}
.x .header h1 a{color:#fff;text-shadow:1px 1px 0 #000;filter:progid:DXImageTransform.Microsoft.dropshadow(OffX=1, OffY=1, Color=#000000, Positive=true);zoom:1}
.x .header h1 a{display:inline-block;color:#fff;text-shadow:1px 1px 0 #000;filter:progid:DXImageTransform.Microsoft.dropshadow(OffX=1, OffY=1, Color=#000000, Positive=true);zoom:1}
.x .header h1 .url{font-size:12px;font-weight:normal}
.x .header .site{margin:0;display:inline-block;zoom:1}
.x .header .site{margin:0 0 10px 20px;display:inline-block;*display:inline;zoom:1}
.x .header .site a{color:#fff;text-decoration:underline}
.x .header #moveSiteList{padding:10px 1em 5px 1em;margin:0}
.x .header #moveSiteList ul{list-style:none;margin:0;padding:0}
@ -282,12 +275,15 @@ body.modalContainer{_height:100%;_width:100%} /* IE6 only */
.x .header #siteMapList{padding:0 1em 1em 1em;margin:0}
.x .header #siteMapList li{white-space:nowrap}
.x .header .account{position:absolute;z-index:3;width:100%;top:0;right:0;white-space:nowrap;text-align:right;background:#333;border-bottom:1px solid #656565;color:#fff;font-size:12px;border-radius:5px 5px 0 0}
.x .header .account ul{margin:0 2px 0 0;padding:5px 20px 5px 0;list-style:none}
.x .header .account ul{margin:0;padding:5px 20px 5px 0;list-style:none}
.x .header .account li{position:relative;display:inline;border-left:1px solid #666;padding:0 6px 0 10px}
.x .header .account li:first-child{border:0}
.x .header .account a{color:#fff;display:inline-block;height:14px}
.x .header .account a.language{padding-right:16px;background:url(../img/iconArrow.gif) no-repeat right -160px}
.x .header #language{position:absolute;top:19px;right:-2em;padding:6px 4px !important;border:1px solid #666;border-top:0;background:#333}
.x .header #language{position:absolute;top:19px;right:-20px;padding:6px 4px !important;border:1px solid #666;border-top:0;background:#333}
@media only all and (max-width:860px){
.x .header #language{right:-10px}
}
.x .header #language li{border:0;display:block;padding:1px 8px 1px 10px;text-align:left;line-height:1}
.x .header #language li.selected{background:url(../img/iconCheck.gif) no-repeat left center}
.x .header #language li.selected a{text-decoration:underline}
@ -303,6 +299,7 @@ body.modalContainer{_height:100%;_width:100%} /* IE6 only */
.x .footer p{margin:0}
.x .footer .power{float:left}
.x .footer .cache{float:right}
.x .footer .vr{color:#ccc}
/* Body */
.x .body{position:relative;z-index:1;padding:1em 20px 1em 260px;zoom:1}
.x .body:after{content:"";display:block;clear:both}
@ -334,7 +331,9 @@ body.modalContainer{_height:100%;_width:100%} /* IE6 only */
.x .search form{float:right;margin:1em 0}
.x .search form *{vertical-align:middle}
/* Site Map */
.x .siteMap h2 input{font-size:14px;font-weight:bold;padding:0 .5em}
.x .siteMap h2 input{font-size:14px;font-weight:bold;padding:3px 4px;margin:0;border:0;background:transparent}
.x .siteMap h2:hover input,
.x .siteMap h2 input:focus{background:#ff0;border:1px dashed #ccc;margin:-1px}
.x .siteMap label{cursor:text}
.x .siteMap .lined ul{padding:0;margin:0;border-top:1px solid #eee;zoom:1}
.x .siteMap .lined li{position:relative;padding:0;margin:0;cursor:all-scroll;list-style:none;zoom:1}
@ -496,7 +495,10 @@ body.modalContainer{_height:100%;_width:100%} /* IE6 only */
.x .easyNav h2{font-size:16px}
.x .easyNav .category{width:30%;float:left;margin:0 2em;display:inline}
.x .easyNav .filter{position:absolute;top:0;right:0;margin:1em 2em;text-align:right}
.x .easyList td p{margin-top:0}
.x .easyList caption .side .text .hide,
.x .easyList caption .side .details .show{display:none}
.x .easyList caption .side .details .hide{display:inline}
.x .easyList td p:first-child{margin:0}
.x .easyList td p.update{background:#ffc;padding:.5em 1em;border:1px solid #fc9;border-left:0;border-right:0;text-align:center}
/* Font Preview */
.x .fontPreview{width:96%;border:1px solid #e9e9e9;zoom:1;padding:1em 2em;margin:.5em 0}
@ -576,7 +578,6 @@ body.modalContainer{_height:100%;_width:100%} /* IE6 only */
.x a.cMenu{display:inline-block;width:16px;height:0;padding:16px 0 0 0;overflow:hidden;vertical-align:middle;background:url(../../../../common/img/icon.bubble.png) no-repeat}
/* Responsive Layout */
@media only all and (max-width:860px){
.x .header h1{margin-left:.7em}
.x .header .account ul{padding-right:10px}
.x .body{padding:0}
.x .content{float:none;margin-left:0}
@ -587,10 +588,6 @@ body.modalContainer{_height:100%;_width:100%} /* IE6 only */
.x .easyNav .category{float:none;display:block;width:auto}
.x .easyNav .filter{position:static}
}
@media only all and (max-width:640px){
.x .skipNav a{position:relative;width:auto;height:auto}
.modal{position:absolute}
}
/* Legacy Code (Don't use it. It will be removed as soon as possible.) */
.x h3.xeAdmin,
.x h4.xeAdmin{position:relative;border-bottom-style:solid;border-bottom-color:#ccc;zoom:1}

File diff suppressed because one or more lines are too long

View file

@ -1,4 +1,7 @@
<!--#include("./_spHeader.html")-->
<div class="content dashboard" id="content">
<div cond="$XE_VALIDATOR_MESSAGE" class="message {$XE_VALIDATOR_MESSAGE_TYPE}">
<p>{$XE_VALIDATOR_MESSAGE}</p>
@ -15,15 +18,17 @@
</div>
</form>
<!--@end-->
<!--@if($isUpdated)-->
<!--@if($addTables || $needUpdate)-->
<div class="message update">
<h2>{$lang->update_available}</h2>
<h2 cond="$needUpdate && $addTables">{$lang->need_update_and_table}</h2>
<h2 cond="$needUpdate && !$addTables">{$lang->need_update}</h2>
<h2 cond="!$needUpdate && $addTables">{$lang->need_table}</h2>
<ul>
<!--@foreach($module_list AS $key => $value)-->
<!--@if($value->need_install)-->
<li><a href="{getUrl('','module','admin','act',$val->admin_index_act)}">{$value->module}</a> - <a href="#" onclick="doInstallModule('{$value->module}');return false;">{$lang->cmd_install}</a></li>
<li style="margin:0 0 4px 0;">{$value->module} - <span class="btn"><button type="button" onclick="doInstallModule('{$value->module}')">{$lang->cmd_create_db_table}</button></span></li>
<!--@else if($value->need_update)-->
<li><a href="{getUrl('','module','admin','act',$val->admin_index_act)}">{$value->module}</a> - <a href="#" onclick="doUpdateModule('{$value->module}')">{$lang->cmd_update}</a></li>
<li style="margin:0 0 4px 0;">{$value->module} - <span class="btn"><button type="button" onclick="doUpdateModule('{$value->module}')">{$lang->cmd_module_update}</button></li>
<!--@end-->
<!--@end-->
</ul>
@ -41,7 +46,7 @@
</ul>
</div>
<div class="portlet">
<h2 class="h2">{$lang->latest_documents}</h2>
<h2 class="h2"><a href="{getUrl('', 'module', 'admin', 'act', 'dispDocumentAdminList')}">{$lang->latest_documents}</a></h2>
<ul class="lined">
<!--@foreach($latestDocumentList AS $key=>$value)-->
{@$document = $value->variables}
@ -63,7 +68,7 @@
</ul>
</div>
<div class="portlet">
<h2 class="h2">{$lang->latest_comments}</h2>
<h2 class="h2"><a href="{getUrl('', 'module', 'admin', 'act', 'dispCommentAdminList')}">{$lang->latest_comments}</a></h2>
<ul class="lined">
<!--@foreach($latestCommentList AS $key=>$value)-->
<li>
@ -84,7 +89,7 @@
</ul>
</div>
<div class="portlet">
<h2 class="h2">{$lang->latest_trackbacks}</h2>
<h2 class="h2"><a href="{getUrl('', 'module', 'admin', 'act', 'dispTrackbackAdminList')}">{$lang->latest_trackbacks}</a></h2>
<ul class="lined">
<!--@foreach($latestTrackbackList AS $key=>$value)-->
<li>
@ -103,32 +108,6 @@
<li cond="!is_array($latestTrackbackList) || count($latestTrackbackList) < 1">{$lang->no_data}</li>
</ul>
</div>
<div class="portlet">
<h2 class="h2">{$lang->notices}</h2>
<ul class="lined">
<!--@foreach($news AS $key=>$value)-->
<li><a href="{$value->url}" target="_blank">{$value->title}</a> <span class="side">{zdate($value->date, 'Y-m-d')}</span></li>
<!--@end-->
<li cond="!is_array($news) || count($news) < 1">{$lang->no_data}</li>
</ul>
</div>
<div class="portlet">
<h2 class="h2">{$lang->favorites}</h2>
<ul class="lined">
<li loop="$favorite_list => $favorite">
<a href="{getUrl('act', $favorite->admin_index_act)}">{$favorite->title}</a>
<form class="action" action="">
<input type="hidden" name="module" value="admin" />
<input type="hidden" name="act" value="procAdminToggleFavorite" />
<input type="hidden" name="site_srl" value="0" />
<input type="hidden" name="module_name" value="{$favorite->module}" />
<input type="hidden" name="success_return_url" value="{getUrl('', 'module', 'admin')}" />
<button type="submit" class="text">{$lang->cmd_delete}</button>
</form>
</li>
<li cond="!is_array($favorite_list) || count($favorite_list) < 1">{$lang->no_data}</li>
</UL>
</div>
</div>
</div>
<!--#include("./_spFooter.html")-->

View file

@ -152,51 +152,73 @@ jQuery(function($){
// Global Navigation Bar
jQuery(function($){
$.fn.xeMenu = function(){
this
.removeClass('jx')
.attr('role', 'navigation') // WAI-ARIA role
.find('li')
.attr('role', 'menuitem') // WAI-ARIA role
.find('>ul').hide().end()
.filter(':has(>ul)')
.attr('aria-haspopup', 'true') // WAI-ARIA
$.fn.xeMenu = function(){
this
.attr('role', 'navigation') // WAI-ARIA role
.find('>.nav>li')
.attr('role', 'menuitem') // WAI-ARIA role
.find('>ul').css('height','0').end()
.filter(':has(>ul)')
.attr('aria-haspopup', 'true') // WAI-ARIA
.end()
.end()
.end()
.delegate('li', {
mouseover : function(){
.find('>.nav')
.mouseover(function(){
$(this)
.addClass('active')
.find('>ul').show().end()
.parentsUntil('.gnb')
.filter('li').addClass('active').end()
.end()
},
mouseleave : function(){
.parent('.gnb').addClass('active').end()
.find('>li>ul').css('height','auto').end()
})
.mouseleave(function(){
$(this)
.removeClass('active')
.find('>ul').hide();
},
focusout : function(){
.parent('.gnb').removeClass('active').end()
.find('>li>ul').css('height','0').end()
})
.focusout(function(){
var $this = $(this);
setTimeout(function(){
if(!$this.find(':focus').length) {
$this.removeClass('active').find('>ul').hide();
$this.mouseleave();
}
}, 1);
}
})
.delegate('a', {
focus : function(){
$(this).parent('li').mouseover();
}
});
};
})
.delegate('a', {
focus : function(){
$(this).mouseover();
}
});
this
.find('>.bmk')
.removeClass('active')
.mouseover(function(){
$(this).addClass('active')
})
.mouseleave(function(){
$(this).removeClass('active')
})
.focusout(function(){
var $this = $(this);
setTimeout(function(){
if(!$this.find(':focus').length) {
$this.mouseleave();
}
}, 1);
})
.delegate('a', {
focus : function(){
$(this).mouseover();
}
});
};
$('div.gnb').xeMenu();
$('div.gnb').xeMenu();
$('.gnb>.mnv').change(function(){
window.location.href=$(this).find('option:selected').val();
});
});
// Modal Window
jQuery(function($){
@ -944,7 +966,7 @@ function initLayer($layer) {
.bind('multilang-reset', function(){
$layer
.data('multilang-current-name', '')
.find('.langInput li').find('>input:text,>textarea').val(' ').prev('label').css('visibility','visible');
.find('.langInput li').find('>input:text,>textarea').val('').prev('label').css('visibility','visible');
mode = MODE_SAVE;
setTitleText();
@ -1190,3 +1212,21 @@ jQuery(function($){
$('.x>.body>.content').addClass('single'); // Add class single
}
});
/* Details toggle in admin table */
jQuery(function($){
var viewBtn = $('.x .dsTg span.side>button.text');
var tdTitle = $('.x .dsTg td.title');
tdTitle.each(function(){
var $t = $(this)
if($t.find('p.update').length==0){
$t.addClass('tg').find('>p:not(:first-child)').hide();
} else {
$t.addClass('up');
}
});
var details = $('.x .dsTg td.tg>p:not(:first-child)');
viewBtn.click(function(){
viewBtn.toggleClass('details');
details.slideToggle(200);
});
});

File diff suppressed because one or more lines are too long

View file

@ -1,4 +1,5 @@
<?php
require_once(_XE_PATH_.'libs/ftp.class.php');
class ModuleInstaller {
var $package = null;
@ -139,10 +140,13 @@
$_files = $oTar->files;
$file_list = array();
foreach($_files as $key => $info) {
FileHandler::writeFile($this->download_path."/".$info['name'], $info['file']);
$file_list[] = $info['name'];
}
if(is_array($_files))
{
foreach($_files as $key => $info) {
FileHandler::writeFile($this->download_path."/".$info['name'], $info['file']);
$file_list[] = $info['name'];
}
}
return $file_list;
}
@ -187,6 +191,11 @@
}
function _connect() {
if(!function_exists('ssh2_connect'))
{
return new Object(-1, 'msg_sftp_not_supported');
}
if(!$this->ftp_info->ftp_user || !$this->ftp_info->sftp || $this->ftp_info->sftp != 'Y') return new Object(-1,'msg_ftp_invalid_auth_info');
if($this->ftp_info->ftp_host)
@ -217,7 +226,7 @@
if(!@ssh2_sftp_unlink($this->sftp, $target_path))
{
return new Object(-1, "failed to delete file ".$path);
return new Object(-1, sprintf(Context::getLang('msg_delete_file_failed'), $path));
}
return new Object();
}
@ -229,7 +238,7 @@
if(!@ssh2_sftp_rmdir($this->sftp, $target_path))
{
return new Object(-1, "failed to delete directory ".$path);
return new Object(-1, sprintf(Context::getLang('msg_delete_dir_failed'), $path));
}
return new Object();
}
@ -284,7 +293,10 @@
}
$this->connection = ftp_connect($ftp_host, $this->ftp_info->ftp_port);
if(!$this->connection) return new Object(-1, 'msg_ftp_not_connected');
if(!$this->connection)
{
return new Object(-1, sprintf(Context::getLang('msg_ftp_not_connected'), $ftp_host));
}
$login_result = @ftp_login($this->connection, $this->ftp_info->ftp_user, $this->ftp_password);
if(!$login_result)
@ -361,7 +373,7 @@
return new Object(-1, "msg_make_directory_failed");
}
if(!stristr(PHP_OS, 'win'))
if(strtoupper(substr(PHP_OS, 0, 3)) !== 'WIN')
{
if (function_exists('ftp_chmod')) {
if(!ftp_chmod($this->connection, 0755, $ftp_path))
@ -411,7 +423,10 @@
}
$this->oFtp = new ftp();
if(!$this->oFtp->ftp_connect($ftp_host, $this->ftp_info->ftp_port)) return new Object(-1,'msg_ftp_not_connected');
if(!$this->oFtp->ftp_connect($ftp_host, $this->ftp_info->ftp_port))
{
return new Object(-1, sprintf(Context::getLang('msg_ftp_not_connected'), $ftp_host));
}
if(!$this->oFtp->ftp_login($this->ftp_info->ftp_user, $this->ftp_password)) {
$this->_close();
return new Object(-1,'msg_ftp_invalid_auth_info');
@ -427,7 +442,7 @@
if(!$this->oFtp->ftp_delete($target_path))
{
return new Object(-1, "failed to delete file ".$path);
return new Object(-1, sprintf(Context::getLang('msg_delete_file_failed'), $path));
}
return new Object();
}
@ -439,7 +454,7 @@
if(!$this->oFtp->ftp_rmdir($target_path))
{
return new Object(-1, "failed to delete directory ".$path);
return new Object(-1, sprintf(Context::getLang('msg_delete_dir_failed'), $path));
}
return new Object();
}
@ -451,8 +466,6 @@
function _copyDir(&$file_list){
if(!$this->ftp_password) return new Object(-1,'msg_ftp_password_input');
require_once(_XE_PATH_.'libs/ftp.class.php');
$output = $this->_connect();
if(!$output->toBool()) return $output;

View file

@ -12,13 +12,13 @@
<menus>
<menu name="easyInstall">
<title xml:lang="en">Easy Install</title>
<title xml:lang="ko">쉬운설치</title>
<title xml:lang="ko">쉬운 설치</title>
<title xml:lang="zh-CN">Easy Install</title>
<title xml:lang="jp">Easy Install</title>
<title xml:lang="es">Easy Install</title>
<title xml:lang="ru">Easy Install</title>
<title xml:lang="fr">Easy Install</title>
<title xml:lang="zh-TW">Easy Install</title>
<title xml:lang="zh-TW">自動安裝</title>
<title xml:lang="vi">Easy Install</title>
<title xml:lang="mn">Easy Install</title>
<title xml:lang="tr">Easy Install</title>

View file

@ -71,24 +71,26 @@
<value xml:lang="en"><![CDATA[If the %s is not set, the installation or update will not work. Pleas configure the FTP information.]]></value>
<value xml:lang="jp"><![CDATA[%sが完了されないと、イージーインストールが動作しません。 FTP設定を確認してください。]]></value>
<value xml:lang="ru"><![CDATA[If %s is not set, installation would not work. Please configure FTP information]]></value>
<value xml:lang="zh-TW"><![CDATA[請先將 %s,否則無法執行自動安裝功能。]]></value>
<value xml:lang="zh-TW"><![CDATA[請先將 %s完成,否則無法執行自動安裝功能。]]></value>
</item>
<item name="ftp_setup">
<value xml:lang="ko"><![CDATA[FTP 설정]]></value>
<value xml:lang="en"><![CDATA[FTP configuration]]></value>
<value xml:lang="jp"><![CDATA[FTP設定]]></value>
<value xml:lang="zh-TW"><![CDATA[FTP設定]]></value>
<value xml:lang="zh-TW"><![CDATA[FTP 設定]]></value>
</item>
<item name="description_update">
<value xml:lang="ko"><![CDATA[쉬운설치 사용전 %s를 해주세요.]]></value>
<value xml:lang="ko"><![CDATA[쉬운 설치 사용전 %s를 해주세요.]]></value>
<value xml:lang="en"><![CDATA[Click %s before using EasyInstall.]]></value>
<value xml:lang="jp"><![CDATA[新しくインストールしたモジュールバージョン情報などは%sを押すと反映されます。]]></value>
<value xml:lang="zh-TW"><![CDATA[使用自動安裝前請先點擊%s]]></value>
<value xml:lang="ru"><![CDATA[If you have upgraded or installed programs without EasyInstall module, please press %s to renew new information]]></value>
</item>
<item name="status_update">
<value xml:lang="ko"><![CDATA[상태 업데이트]]></value>
<value xml:lang="en"><![CDATA[update button]]></value>
<value xml:lang="jp"><![CDATA[アップデート]]></value>
<value xml:lang="zh-TW"><![CDATA[更新按鈕]]></value>
</item>
<item name="install">
<value xml:lang="ko"><![CDATA[설치]]></value>
@ -115,7 +117,7 @@
<value xml:lang="en"><![CDATA[Version]]></value>
<value xml:lang="jp"><![CDATA[現インストールバージョン]]></value>
<value xml:lang="zh-CN"><![CDATA[现用版本]]></value>
<value xml:lang="zh-TW"><![CDATA[版本]]></value>
<value xml:lang="zh-TW"><![CDATA[目前版本]]></value>
<value xml:lang="fr"><![CDATA[Version Courante]]></value>
<value xml:lang="es"><![CDATA[Versión actual]]></value>
<value xml:lang="tr"><![CDATA[Sürüm]]></value>
@ -156,7 +158,7 @@
<value xml:lang="en"><![CDATA[If FTP is unavailable, you should manually download and extract it into the target path. (If the target path is ./modules/board, extract it to ./modules)]]></value>
<value xml:lang="jp"><![CDATA[FTPの利用ができない場合は、直接ダウンロードし、サーバー上の該当パスにてインストールしてください。 (一つ上の階層にて解凍します。 ./modules/board の場合 ./modulesに tarを解凍してください。)]]></value>
<value xml:lang="zh-CN"><![CDATA[无法使用FTP时需得自行下载安装到指定路径。]]></value>
<value xml:lang="zh-TW"><![CDATA[如果 FTP無法使用的話,必須要手動下載並解壓縮到目標路徑。(假設目標路徑為 ./modules/board 的話,將檔案解壓縮到 ./modules就可以了)]]></value>
<value xml:lang="zh-TW"><![CDATA[如果 FTP 無法使用的話,必須要手動下載並解壓縮到目標路徑。(假設目標路徑為 ./modules/board 的話,將檔案解壓縮到 ./modules就可以了)]]></value>
<value xml:lang="ru"><![CDATA[If FTP is unavailable, you should manually download it and extract it into target path. (if target path is ./modules/board, extract it at ./modules)]]></value>
<value xml:lang="tr"><![CDATA[Eğer FTP kullanılamaz durumduysa, indirmeyi kendiniz yapmanız ve dosyaları hedef dizine çıkartmanız gerekmektedir. (eğer hedef yol ./modules/board ise, çıkarma işlemini ./modules yoluna yapınız)]]></value>
<value xml:lang="vi"><![CDATA[Khi FTP không được mở, bạn nên tải về và giả nén, sau đó Upload theo đường dẫn. (Nếu đường dẫn là ./modules/board, thì giải nén vào ./modules)]]></value>
@ -193,11 +195,13 @@
<value xml:lang="ko"><![CDATA[배포 버전]]></value>
<value xml:lang="en"><![CDATA[Distribute version]]></value>
<value xml:lang="jp"><![CDATA[配布バージョン]]></value>
<value xml:lang="zh-TW"><![CDATA[發布版本]]></value>
</item>
<item name="run">
<value xml:lang="ko"><![CDATA[실행]]></value>
<value xml:lang="en"><![CDATA[Run]]></value>
<value xml:lang="jp"><![CDATA[実行]]></value>
<value xml:lang="zh-TW"><![CDATA[執行]]></value>
</item>
<item name="rate">
<value xml:lang="ko"><![CDATA[%s점]]></value>
@ -213,26 +217,31 @@
<value xml:lang="ko"><![CDATA[섬네일]]></value>
<value xml:lang="en"><![CDATA[Thumbnail]]></value>
<value xml:lang="jp"><![CDATA[サムネイル]]></value>
<value xml:lang="zh-TW"><![CDATA[縮圖]]></value>
</item>
<item name="name">
<value xml:lang="ko"><![CDATA[이름]]></value>
<value xml:lang="en"><![CDATA[Name]]></value>
<value xml:lang="jp"><![CDATA[名前]]></value>
<value xml:lang="zh-TW"><![CDATA[名稱]]></value>
</item>
<item name="about_depending_programs">
<value xml:lang="ko"><![CDATA[이 패키지 사용을 위해서는 아래 프로그램이 설치되어 있어야 합니다.]]></value>
<value xml:lang="en"><![CDATA[To use this package, the following program should have been installed.]]></value>
<value xml:lang="jp"><![CDATA[このパッケージを使用するには、下記のプログラムがインストールされていなければなりません。]]></value>
<value xml:lang="zh-TW"><![CDATA[使用此 package將會安裝下列 program]]></value>
</item>
<item name="ftp_password">
<value xml:lang="ko"><![CDATA[FTP 비밀번호]]></value>
<value xml:lang="en"><![CDATA[FTP password]]></value>
<value xml:lang="jp"><![CDATA[FTP パスワード]]></value>
<value xml:lang="zh-TW"><![CDATA[FTP 密碼]]></value>
</item>
<item name="msg_dependency_package">
<value xml:lang="ko"><![CDATA[이 패키지를 의존하고 있는 다른 패키지가 있기 때문에 삭제할 수 없습니다.]]></value>
<value xml:lang="en"><![CDATA[Cannot remove this package because there exists another packages dependent on this.]]></value>
<value xml:lang="jp"><![CDATA[このパッケージに依存している他のパッケージがあるため、削除できません。]]></value>
<value xml:lang="zh-TW"><![CDATA[無法刪除此 package因為有其他 package用到。]]></value>
</item>
<item name="dependant_list">
<value xml:lang="ko"><![CDATA[이 패키지에 의존하는 패키지 목록]]></value>
@ -247,20 +256,75 @@
<value xml:lang="ko"><![CDATA[이 항목의 새로운 버전이 있습니다.]]></value>
<value xml:lang="en"><![CDATA[There is new version for this item.]]></value>
<value xml:lang="jp"><![CDATA[この項目の新しいバージョンがあります。]]></value>
<value xml:lang="zh-TW"><![CDATA[本項目有新版本。]]></value>
</item>
<item name="msg_do_you_like_update">
<value xml:lang="ko"><![CDATA[업데이트 하시겠습니까?]]></value>
<value xml:lang="en"><![CDATA[Would you like to update?]]></value>
<value xml:lang="jp"><![CDATA[アップデートしますか?]]></value>
<value xml:lang="zh-TW"><![CDATA[確定要更新嗎?]]></value>
</item>
<item name="msg_connection_fail">
<value xml:lang="ko"><![CDATA[서버 접속이 원활하지 않습니다.]]></value>
<value xml:lang="en"><![CDATA[Failed to connect to server.]]></value>
<value xml:lang="jp"><![CDATA[サーバに接続できませんでした。]]></value>
<value xml:lang="zh-TW"><![CDATA[主機連線錯誤。]]></value>
</item>
<item name="msg_not_match_server">
<value xml:lang="ko"><![CDATA[서버 설정이 올바르지 않습니다.]]></value>
<value xml:lang="en"><![CDATA[Server settings are incorrect.]]></value>
<value xml:lang="jp"><![CDATA[サーバー設定が正しくありません。]]></value>
<value xml:lang="zh-TW"><![CDATA[主機設定不正確。]]></value>
</item>
<item name="msg_ftp_invalid_auth_info">
<value xml:lang="ko"><![CDATA[입력하신 FTP 정보로 로그인을 하지 못했습니다. FTP정보를 확인해주세요.]]></value>
<value xml:lang="en"><![CDATA[Cannot log in with the FTP password you entered. Please check if it is correct.]]></value>
<value xml:lang="jp"><![CDATA[このFTP情報ではログインできません。FTP情報を確認してください。]]></value>
<value xml:lang="zh-CN"><![CDATA[FTP登录失败。请确认输入的FTP信息。]]></value>
<value xml:lang="zh-TW"><![CDATA[FTP登入失敗。請確認輸入的 FTP 資訊。]]></value>
<value xml:lang="fr"><![CDATA[입력하신 FTP 정보로 로그인을 하지 못했습니다. FTP정보를 확인해주세요]]></valuevalue xml:lang="de"><![CDATA[Anmeldungsfehler mit der Angabe des FTPs Bitte die Angabe des FTPs festlegen.]]></value>
<value xml:lang="es"><![CDATA[Los datos de login para el FTP no son correctos. Veriféquelos.]]></value>
<value xml:lang="tr"><![CDATA[Kimlik doğrulama başarısız oldu. Lütfen kullanıcı adını ve şifreyi kontrol ediniz.]]></value>
<value xml:lang="vi"><![CDATA[Xác nhận thất bại. Xin vui lòng kiểm tra lại tên sử dụng và mật khẩu.]]></value>
<value xml:lang="mn"><![CDATA[Таны оруулсан FTP мэдээллээр нэвтэрч чадсангvй. FTPмэдээллээ шалгана уу.]]></value>
</item>
<item name="msg_ftp_not_connected">
<value xml:lang="ko"><![CDATA[%s로의 FTP 접속 오류가 발생했습니다. FTP 포트 번호를 확인해주시거나 FTP 서비스가 가능한지 확인해주세요.]]></value>
<value xml:lang="en"><![CDATA[Connection to the %s via FTP failed. Please check the port number and whether the FTP service is available.]]></value>
<value xml:lang="jp"><![CDATA[%sへのFTP接続エラーが発生しました。FTPポート(port)番号をはじめ、FTPサービスが可能であるかを確認してください。]]></value>
<value xml:lang="zh-CN"><![CDATA[发生本地(%s)FTP连接错误。请确认ftp端口号及支持ftp服务与否。]]></value>
<value xml:lang="zh-TW"><![CDATA[本地(%s) FTP連線錯誤。請檢查 FTP 埠口並確認是否支援 FTP 功能。]]></value>
<value xml:lang="fr"><![CDATA[%s로의 FTP 접속 오류가 발생하였습니다. ftp 포트 번호를 확인해주시거나 ftp 서비스가 가능한지 확인해주세요]]></value>
<value xml:lang="de"><![CDATA[Ein Verbindungsfehler des FTPs an %s ist aufgetreten. Bitte FTP_Port checken, oder ob FTP_Service möglich ist.]]></value>
<value xml:lang="ru"><![CDATA[Connection to %s via FTP failed. Please check the port number and if FTP service is available.]]></value>
<value xml:lang="es"><![CDATA[Ha ocurrico un error de conexión al FTP del %s. Verifique el puerto del FTP y/o el funcionamiento del servicio FTP.]]></value>
<value xml:lang="tr"><![CDATA[Yerel web alanına FTP bağlantısı sağlanamadı. Lütfen port numarasını ve FTP servisinin mevcut olup-olmadığını kontrol ediniz .]]></value>
<value xml:lang="vi"><![CDATA[Kết nối bằng FTP không thành công. Xin vui lòng kiểm tra lại thông tin tài khoản và cổng kết nối!]]></value>
<value xml:lang="mn"><![CDATA[%s-ын FTP холболт амжилтгvй боллоо. FTP дугаараа шалгах буюу эсвэл FTP vйлчилгээг ашиглах боломжтой эсэхээ шалгана уу.]]></value>
</item>
<item name="msg_delete_file_failed">
<value xml:lang="ko"><![CDATA[파일 삭제가 실패했습니다. %s.]]></value>
<value xml:lang="en"><![CDATA[Failed to delete the file. %s.]]></value>
<value xml:lang="jp"><![CDATA[ファイルを削除できませんでした。]]></value>
</item>
<item name="msg_delete_dir_failed">
<value xml:lang="ko"><![CDATA[디렉터리 삭제가 실패했습니다. %s]]></value>
<value xml:lang="en"><![CDATA[Failed to delete the directory. %s]]></value>
<value xml:lang="jp"><![CDATA[ディレクトリを削除できませんでした。]]></value>
</item>
<item name="msg_ftp_password_input">
<value xml:lang="ko"><![CDATA[입력된 비밀번호가 없습니다.]]></value>
<value xml:lang="en"><![CDATA[No password entered.]]></value>
<value xml:lang="jp"><![CDATA[パスワードを入力してください。]]></value>
</item>
<item name="msg_sftp_not_supported">
<value xml:lang="ko"><![CDATA[SFTP 지원이 되지 않는 환경입니다.]]></value>
<value xml:lang="en"><![CDATA[SFTP is not supported.]]></value>
<value xml:lang="jp"><![CDATA[SFTP非対応環境です。]]></value>
</item>
<item name="msg_does_not_support_delete">
<value xml:lang="ko"><![CDATA[이 패키지가 삭제를 지원하지 않습니다(모듈 클래스에 moduleUninstall()이 없음).]]></value>
<value xml:lang="en"><![CDATA[Cannot delete this package (no moduleUninstall() in the module class).]]></value>
<value xml:lang="jp"><![CDATA[このパッケージは、削除をサポートしません(モジュールクラスにmoduleUninstall()がありません)。]]></value>
</item>
</lang>

View file

@ -7,7 +7,7 @@
<input type="hidden" name="act" value="procAutoinstallAdminUpdateinfo" />
<p>
<block cond="$show_ftp_note">
{@$ftp_link = sprintf('<a href="%s#ftpSetup">%s</a>', getUrl('', 'module', 'admin', 'act', 'dispAdminConfig'), $lang->ftp_setup)}
{@$ftp_link = sprintf('<a href="%s">%s</a>', getUrl('', 'module', 'admin', 'act', 'dispAdminConfigFtp'), $lang->ftp_setup)}
{sprintf($lang->description_ftp_note, $ftp_link)}
</block>
{@$btnUpdate = sprintf('<input type="submit" value="%s" class="text" />', $lang->status_update)}

View file

@ -20,7 +20,7 @@
<block cond="!$package->installed || $package->need_update">
<block cond="$show_ftp_note">
<p>{$lang->description_download}. (<a href="{getUrl('', 'module', 'admin', 'act', 'dispAdminConfig')}#ftpSetup">FTP Setup</a>)</p>
<p>{$lang->description_download}. (<a href="{getUrl('', 'module', 'admin', 'act', 'dispAdminConfigFtp')}">FTP Setup</a>)</p>
<p>{$lang->path}: {$package->path}</p>
<p><a href="{_XE_DOWNLOAD_SERVER_}?module=resourceapi&act=procResourceapiDownload&package_srl={$package->package_srl}">{$lang->cmd_download}</a>
</block>

View file

@ -31,18 +31,18 @@
</caption>
<thead>
<tr>
<th scope="col">{$lang->category}</th>
<th scope="col" class="nowr">{$lang->category}</th>
<th scope="col">{$lang->thumbnail}</th>
<th scope="col" class="title">{$lang->name}</th>
<th scope="col">{$lang->distribute_version}</th>
<th scope="col">{$lang->current_version}</th>
<th scope="col">{$lang->run}</th>
<th scope="col" class="nowr">{$lang->distribute_version}</th>
<th scope="col" class="nowr">{$lang->current_version}</th>
<th scope="col" class="nowr">{$lang->run}</th>
</tr>
</thead>
<tbody>
<tr loop="$item_list => $key, $item">
{@ $target_url = $original_site."?mid=download&package_srl=".$item->package_srl; }
<td>{$item->category}</td>
<td class="nowr">{$item->category}</td>
<td><img src="{str_replace('./', $uri, $item->item_screenshot_url)}" alt="" width="100" height="100" /></td>
<td class="title">
<p><a href="{$target_url}">{htmlspecialchars($item->title)}</a></p>
@ -64,9 +64,9 @@
<li loop="$item->deps => $package_srl">{$installed[$package_srl]->title}</li>
</ul>
</td>
<td>{htmlspecialchars($item->item_version)}</td>
<td>{htmlspecialchars($item->current_version)}</td>
<td>
<td class="nowr">{htmlspecialchars($item->item_version)}</td>
<td class="nowr">{htmlspecialchars($item->current_version)}</td>
<td class="nowr">
<a cond="!$item->current_version" href="{getUrl('act','dispAutoinstallAdminInstall','package_srl',$item->package_srl)}">{$lang->install}</a>
<a cond="!$show_ftp_note && $item->current_version && $item->avail_remove" href="{getUrl('act','dispAutoinstallAdminUninstall','package_srl',$item->package_srl)}">{$lang->cmd_delete}</a>
<a cond="$item->current_version && $item->need_update == 'Y'" href="{getUrl('act','dispAutoinstallAdminInstall','package_srl',$item->package_srl)}">{$lang->update}</a>

View file

@ -31,7 +31,8 @@
</block>
<block cond="!$package->avail_remove">
<div class="message error">
<p>{$lang->msg_dependency_package}</p>
<p cond="$package->deps">{$lang->msg_dependency_package}</p>
<p cond="!$package->deps">{$lang->msg_does_not_support_delete}</p>
</div>
<p cond="$package->deps">{$lang->dependant_list}:</p>
<ul cond="$package->deps">

View file

@ -12,7 +12,143 @@
**/
function init() {
}
/**
* @brief Modify comment(s) status to publish/unpublish if calling module is using Comment Approval System
* @return Object
*/
function procCommentAdminChangePublishedStatusChecked()
{ // Error display if none is selected
$cart = Context::get('cart');
if(!is_array($cart))
{
$comment_srl_list= explode('|@|', $cart);
}
else
{
$comment_srl_list = $cart;
}
$this->procCommentAdminChangeStatus();
if(!in_array(Context::getRequestMethod(),array('XMLRPC','JSON'))) {
$returnUrl = Context::get('success_return_url') ? Context::get('success_return_url') : getNotEncodedUrl('', 'module', 'admin', 'act', 'dispCommentAdminList', 'search_keyword', '');
header('location:'.$returnUrl);
return;
}
}
function procCommentAdminChangeStatus()
{
$will_publish = Context::get('will_publish');
// Error display if none is selected
$cart = Context::get('cart');
if(!$cart)
{
return $this->stop('msg_cart_is_null');
}
if(!is_array($cart))
{
$comment_srl_list= explode('|@|', $cart);
}
else
{
$comment_srl_list = $cart;
}
$args->status = $will_publish;
$args->comment_srls_list = $comment_srl_list;
$output = executeQuery('comment.updatePublishedStatus', $args);
if(!$output->toBool())
{
return $output;
}
else
{
//update comment count for document
$updated_documents_arr = array();
// create the controller object of the document
$oDocumentController = &getController('document');
// create the model object of the document
$oDocumentModel = &getModel('document');
// create the comment model object
$oCommentModel = &getModel('comment');
//get admin info
$logged_info = Context::get('logged_info');
//$oMemberModule = &getModel("member");
//$logged_info = $oMemberModule->getMemberInfoByMemberSrl($logged_member_srl);
$new_status = ($will_publish) ? "published" : "unpublished";
foreach($comment_srl_list as $comment_srl)
{
// check if comment already exists
$comment = $oCommentModel->getComment($comment_srl);
if($comment->comment_srl != $comment_srl) return new Object(-1, 'msg_invalid_request');
$document_srl = $comment->document_srl;
if (!in_array($document_srl,$updated_documents_arr))
{
$updated_documents_arr[] = $document_srl;
// update the number of comments
$comment_count = $oCommentModel->getCommentCount($document_srl);
// update comment count of the article posting
$output = $oDocumentController->updateCommentCount($document_srl, $comment_count, null, false);
$oDocument = $oDocumentModel->getDocument($document_srl);
$author_email=$oDocument->variables['email_address'];
$oModuleModel = &getModel("module");
$module_info = $oModuleModel->getModuleInfoByModuleSrl($comment->module_srl);
$already_sent = array();
// send email to comment's author, all admins and thread(document) subscribers - START
// -------------------------------------------------------
$oMail = new Mail();
$mail_title = "[XE - ".$module_info->mid."] comment(s) status changed to ".$new_status." on document: \"".$oDocument->getTitleText()."\"";
$oMail->setTitle($mail_title);
$mail_content = "
The comment #".$comment_srl." on document \"".$oDocument->getTitleText()."\" has been ".$new_status." by admin of <strong><i>". strtoupper($module_info->mid)."</i></strong> module.
<br />
<br />Comment content:
".$comment->content."
<br />
";
$oMail->setContent($mail_content);
$oMail->setSender($logged_info->user_name, $logged_info->email_address);
$document_author_email = $oDocument->variables['email_address'];
//mail to author of thread - START
if($document_author_email != $comment->email_address && $logged_info->email_address != $document_author_email) {
$oMail->setReceiptor($document_author_email, $document_author_email);
$oMail->send();
$already_sent[] = $document_author_email;
}
//mail to author of thread - STOP
//mail to all emails set for administrators - START
if($module_info->admin_mail)
{
$target_mail = explode(',',$module_info->admin_mail);
for($i=0;$i<count($target_mail);$i++) {
$email_address = trim($target_mail[$i]);
if(!$email_address) continue;
if($author_email != $email_address) {
$oMail->setReceiptor($email_address, $email_address);
$oMail->send();
}
}
}
//mail to all emails set for administrators - STOP
}
// ----------------------------------------------------------
// send email to comment's author, all admins and thread(document) subscribers - STOP
}
// call a trigger for calling "send mail to subscribers" (for moment just for forum)
ModuleHandler::triggerCall("comment.procCommentAdminChangeStatus","after",$comment_srl_list);
}
}
/**
* @brief Delete the selected comment from the administrator page
**/

View file

@ -25,18 +25,35 @@
$args->sort_index = 'list_order'; // /< Sorting values
$args->module_srl = Context::get('module_srl');
/*
$search_target = Context::get('search_target');
$search_keyword = Context::get('search_keyword');
if ($search_target == 'is_published' && $search_keyword == 'Y')
{
$args->status = 1;
}
if ($search_target == 'is_published' && $search_keyword == 'N')
{
$args->status = 0;
}
*/
// get a list by using comment->getCommentList.
$oCommentModel = &getModel('comment');
$secretNameList = $oCommentModel->getSecretNameList();
$columnList = array('comment_srl', 'document_srl', 'is_secret', 'content', 'comments.member_srl', 'comments.nick_name', 'comments.regdate', 'ipaddress');
$columnList = array('comment_srl', 'document_srl', 'is_secret', 'status', 'content', 'comments.member_srl', 'comments.nick_name', 'comments.regdate', 'ipaddress');
$output = $oCommentModel->getTotalCommentList($args, $columnList);
$oCommentModel = &getModel("comment");
$modules = $oCommentModel->getDistinctModules();
$modules_list = $modules;
// set values in the return object of comment_model:: getTotalCommentList() in order to use a template.
Context::set('total_count', $output->total_count);
Context::set('total_page', $output->total_page);
Context::set('page', $output->page);
Context::set('comment_list', $output->data);
Context::set('modules_list', $modules_list);
Context::set('page_navigation', $output->page_navigation);
Context::set('secret_name_list', $secretNameList);
// set the template

View file

@ -57,7 +57,16 @@
if (!$oDB->isIndexExists("comments", "idx_module_list_order"))
return true;
//2012. 02. 24 add comment published status column and index
if(!$oDB->isColumnExists("comments", "status"))
{
return true;
}
if (!$oDB->isIndexExists("comments", "idx_status"))
{
return true;
}
return false;
}
@ -93,7 +102,7 @@
}
if(!$oDB->isColumnExists("comment_voted_log", "point"))
$oDB->addColumn('comment_voted_log', 'point', 'number', 11, 0, true);
if (!$oDB->isIndexExists("comments", "idx_module_list_order"))
$oDB->addIndex
(
@ -103,6 +112,19 @@
true
);
//2012. 02. 24 add comment published status column and index
if(!$oDB->isColumnExists("comments", "status")) {
$oDB->addColumn("comments", "status", "number", 1, 1, true);
}
if (!$oDB->isIndexExists("comments", "idx_status"))
$oDB->addIndex
(
"comments",
"idx_status",
array("status", "comment_srl", "module_srl", "document_srl"),
true
);
return new Object(0, 'success_updated');
}

Some files were not shown because too many files have changed in this diff Show more