Issue 2385: Admin UI Refactoring - Advanced - Widgets

git-svn-id: http://xe-core.googlecode.com/svn/branches/maserati@11685 201d5d3c-b55e-5fd7-737f-ddc643e51545
This commit is contained in:
flyskyko 2012-10-15 02:59:49 +00:00
parent 41d3059d66
commit 5a450211ba
23 changed files with 446 additions and 663 deletions

View file

@ -311,10 +311,12 @@ class HTMLDisplayHandler {
$oContext->loadFile(array('./modules/admin/tpl/css/admin.css', 'all', '', 100000), true);
$oContext->loadFile(array("./modules/admin/tpl/css/admin_{$lang_type}.css", 'all', '', 100000), true);
$oContext->loadFile('./modules/admin/tpl/js/admin.js', true);
$oContext->loadFile(array('./common/css/bootstrap.css', 'all', '', 1), true);
} else {
$oContext->loadFile(array('./modules/admin/tpl/css/admin.min.css', 'all', '', 100000), true);
$oContext->loadFile(array("./modules/admin/tpl/css/admin_{$lang_type}.css", 'all', '',10000), true);
$oContext->loadFile('./modules/admin/tpl/js/admin.min.js', true);
$oContext->loadFile(array('./common/css/bootstrap.min.css', 'all', '', 1), true);
}
}
}

View file

@ -48,6 +48,7 @@ var default_url = "{Context::getDefaultUrl()}";
<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>
xe.current_lang = "{$lang_type}";
xe.cmd_find = "{$lang->cmd_find}";
//]]>
</script>
</head>

View file

@ -1,7 +1,6 @@
{@Context::addHtmlHeader('<meta name="apple-mobile-web-app-capable" content="yes" />
<meta name="viewport" content="width=device-width, initial-scale=1, minimum-scale=1, maximum-scale=1, user-scalable=no" />
')}
<load target="../../../common/css/bootstrap.min.css" index="1" usecdn="true" />
<div class="x">
<p class="skipNav"><a href="#content">{$lang->skip_to_content}</a></p>
<header class="header">

View file

@ -15,31 +15,9 @@
<div class="x_control-group">
<label class="x_control-label" for="_target_module">{$lang->start_module}</label>
<div class="x_controls moduleSearch">
<input type="text" name="_target_module" id="_target_module" value="{$start_module->browser_title} ({$start_module->mid})" readonly />
<input type="hidden" name="index_module_srl" id="index_module_srl" value="{$start_module->index_module_srl}" />
<a href="#msw" class="tgAnchor moduleTrigger x_btn">{$lang->cmd_find}</a> {$lang->about_start_module}
<div id="msw" class="tgContent moduleWindow x_well">
<div class="siteList x_control-group">
<label for="siteFinder">1. {$lang->select_site}</label>
<input type="search" class="siteFinder" id="siteFinder" name="site_filter" placeholder="URL">
<ul class="x_nav x_nav-tabs x_nav-stacked">
</ul>
</div>
<div class="moduleList x_control-group">
<label for>2. {$lang->select_module_type}</label>
<ul class="x_nav x_nav-tabs x_nav-stacked">
</ul>
</div>
<div class="instanceList x_control-group">
<label for="instanceList">3. {$lang->select_module_instance}</label>
<select size="8" id="instanceList" multiple>
</select>
</div>
<div class="x_pull-right">
<button type="button" class="moduleSearch_ok x_btn x_btn-inverse">{$lang->cmd_select}</button>
</div>
</div>
<div class="x_controls">
<input class="module_search" type="text" name="index_module_srl" value="{$start_module->index_module_srl}" />
{$lang->about_start_module}
</div>
</div>
<div class="x_control-group">
@ -234,18 +212,5 @@ jQuery(function($){
}
});
});
jQuery(function($){
$('.moduleSearch').bind('moduleSelect', function(e, aSelected){
var sType, sName, sSrl;
sType = aSelected[0].type;
sName = aSelected[0].browser_title;
sSrl = aSelected[0].module_srl;
$('#_target_module').val(sName);
$('#index_module_srl').val(sSrl);
});
});
</script>

View file

@ -482,10 +482,22 @@ $('.modulefinder').xeModuleFinder();
// Module Search : A New Version Of Module Finder
jQuery(function($){
var tmpCount = 0;
_xeModuleSearch = function(){
var t = this;
var $t = $(this);
var $moduleWindow = $t.find(".moduleWindow");
var is_multiple = $t.data('multiple');
if(!is_multiple) is_multiple = '';
var id = '__module_searcher_' + tmpCount;
tmpCount++;
// add html
$.exec_json('module.getModuleAdminModuleSearcherHtml', {'id': id, 'is_multiple': is_multiple}, function(data){
if(!data || !data.html) return;
$t.after(data.html).addClass('tgAnchor').attr('href', '#' + id).xeContentToggler();
var $moduleWindow = $t.next(".moduleWindow");
var $siteListDiv = $moduleWindow.find('.siteList');
var $moduleListDiv = $moduleWindow.find('.moduleList');
var $instanceListDiv = $moduleWindow.find('.instanceList');
@ -499,7 +511,7 @@ _xeModuleSearch = function(){
function setListSize($UL, nHeight){
var nWidth, $div;
$UL.find('li div').width('');
$UL.css('height', '');
$UL.css('height', 'auto');
$UL.css('overflow-y', '');
if($UL.height() > nHeight){
$div = $UL.find('li div');
@ -545,6 +557,7 @@ _xeModuleSearch = function(){
$t
.not('.xe-module-search')
.addClass('xe-module-search')
.parent()
.find('a.moduleTrigger')
.bind('before-open.tc', function(){
var $this;
@ -571,9 +584,9 @@ _xeModuleSearch = function(){
$moduleListDiv.hide();
$instanceListDiv.hide();
$.exec_json('admin.getSiteAllList', {domain:""}, on_complete);
})
.end()
.find('.tgContent .siteList>ul')
});
$moduleWindow
.find('.siteList>ul')
.delegate('a','click',function(oEvent){
var $this, $finder;
@ -624,7 +637,7 @@ _xeModuleSearch = function(){
for(var x in list) {
if(!list.hasOwnProperty(x)) continue;
$li = $('<option />').html(list[x].browser_title).appendTo($instanceList).val(list[x].module_srl).data('mid', list[x].module_srl)
$li = $('<option />').html(list[x].browser_title + ' (' + list[x].mid + ')').appendTo($instanceList).val(list[x].module_srl).data('mid', list[x].mid)
.data('module_srl', list[x].module_srl).data('layout_srl', list[x].layout_srl).data('browser_title', list[x].browser_title);
}
@ -639,12 +652,13 @@ _xeModuleSearch = function(){
.end()
.find('.moduleSearch_ok').click(function(oEvent){
var aSelected = [];
$t.find('select>option:selected').each(function(){
$instanceList.find('option:selected').each(function(){
aSelected.push({
'type' : t.sSelectedModuleType,
'module_srl' : $(this).data('module_srl'),
'layout_srl' : $(this).data('layout_srl'),
'browser_title' : $(this).data('browser_title')
'browser_title' : $(this).data('browser_title'),
'mid' : $(this).data('mid')
});
});
@ -653,7 +667,7 @@ _xeModuleSearch = function(){
oEvent.preventDefault();
});
});
return this;
};
@ -662,7 +676,45 @@ $.fn.xeModuleSearch = function(){
$(this).each(_xeModuleSearch);
};
$('.moduleSearch').xeModuleSearch();
$('.moduleTrigger').xeModuleSearch();
// Add html for .module_search
$.fn.xeModuleSearchHtml = function(){
var tmpCount = 0;
$(this).each(function(){
var $this = $(this);
var id = $this.attr('id');
if(!id) id = '__module_search_' + tmpCount;
tmpCount++;
// add html
var $btn = $('<a class="x_btn moduleTrigger">' + xe.cmd_find + '</a>');
var $displayInput = $('<input type="text" readonly>');
$this.after($btn).after('&nbsp;').after($displayInput).hide();
$btn.xeModuleSearch();
// on selected module
$btn.bind('moduleSelect', function(e, selected){
$displayInput.val(selected[0].browser_title + ' (' + selected[0].mid + ')');
$this.val(selected[0].module_srl);
});
// get module info
if($this.val()){
$.exec_json('module.getModuleAdminModuleInfo', {'module_srl': $this.val()}, function(data){
if(!data || !data.module_info) return;
$displayInput.val(data.module_info.browser_title + ' (' + data.module_info.mid + ')');
});
}
});
return this;
}
$('.module_search').xeModuleSearchHtml();
});
// Sortable table
@ -937,14 +989,14 @@ $('.filebox')
$displayInput.val($hiddenInput.val());
var pattern = /^\$user_lang->/;
if(pattern.test($displayInput.val())){
$.exec_json('module.getModuleAdminLangCode', {'name': $displayInput.val().replace('$user_lang->', '')}, on_complete);
function on_complete(data){
function on_complete2(data){
if(!data || !data.langs) return;
$displayInput.closest('.g11n').addClass('active');
$displayInput.val(data.langs[xe.current_lang]).attr('disabled', 'disabled').width(135);
}
$.exec_json('module.getModuleAdminLangCode', {'name': $displayInput.val().replace('$user_lang->', '')}, on_complete2);
}
});

View file

@ -163,7 +163,5 @@
<input class="x_btn x_btn-primary" type="submit" value="{$lang->cmd_insert}"|cond="$act == 'dispLayoutAdminInsert'" value="{$lang->cmd_save}"|cond="$act == 'dispLayoutAdminModify'" onclick="doSubmitConfig()"/>
</span>
</div>
<include target="include.multilang.html" />
<include target="include.multilang.textarea.html" />
</div>
<iframe name="hiddenIframe" src="about:blank" width="1000px" height="1000px" frameborder="0" style="position:absolute;top:-9999px;left:-9999px"></iframe>

View file

@ -39,6 +39,8 @@
<action name="getModuleAdminMultilingualHtml" type="model" />
<action name="getModuleAdminLangListHtml" type="model" />
<action name="getModuleInfoByMenuItemSrl" type="model" />
<action name="getModuleAdminModuleSearcherHtml" type="model" />
<action name="getModuleAdminModuleInfo" type="model" />
<action name="procModuleAdminInsertCategory" type="controller" standalone="true" ruleset="insertCategory" />
<action name="procModuleAdminUpdateCategory" type="controller" standalone="true" ruleset="updateCategory" />

View file

@ -461,5 +461,30 @@
$this->add('html', $tpl);
}
/**
* return module searcher html
*/
function getModuleAdminModuleSearcherHtml()
{
Context::loadLang('./modules/admin/lang');
$oTemplate = TemplateHandler::getInstance();
$tpl = $oTemplate->compile('./modules/module/tpl', 'module_searcher_v17.html');
$this->add('html', $tpl);
}
/**
* return module info.
*/
function getModuleAdminModuleInfo()
{
$module_srl = Context::get('module_srl');
$model = getModel('module');
$module_info = $model->getModuleInfoByModuleSrl($module_srl);
$this->add('module_info', $module_info);
}
}
?>

View file

@ -0,0 +1,21 @@
<div id="{$id}" class="tgContent moduleWindow x_well xe-toggling-content" style="display:none;">
<div class="siteList x_control-group">
<label for="siteFinder">{$lang->select_site}</label>
<input type="search" class="siteFinder" id="siteFinder" name="site_filter" placeholder="URL">
<ul class="x_nav x_nav-tabs x_nav-stacked" style="">
</ul>
</div>
<div class="moduleList x_control-group">
<label>{$lang->select_module_type}</label>
<ul class="x_nav x_nav-tabs x_nav-stacked">
</ul>
</div>
<div class="instanceList x_control-group">
<label for="instanceList">{$lang->select_module_instance}</label>
<select size="8" id="instanceList" <!--@if($is_multiple)-->multiple<!--@endif--> style="height:auto!important">
</select>
<div class="x_pull-right">
<button type="button" class="moduleSearch_ok x_btn_ x_btn-inverse">{$lang->cmd_select}</button>
</div>
</div>
</div>

View file

@ -4,7 +4,7 @@
unset($lang_supported[$lang_type]);
$lang_supported = array_merge($a, $lang_supported);
}
<p>{sprintf($lang->about_multilingual_search_result, $total_count)}</p>
<p cond="!$name">{sprintf($lang->about_multilingual_search_result, $total_count)}</p>
<fieldset class="list">
<form loop="$lang_code_list => $no, $val" action="" class="item">
<a href="#lang-{$no}" data-toggle="#lang-{$no}" data-lang_code="{$val->name}"><span>{$val->value}<span></a>

View file

@ -1,10 +1,12 @@
<include target="header.html" />
<div class="table even easyList dsTg">
<table width="100%" border="1" cellspacing="0">
<table class="x_table x_table-striped x_table-hover dsTg">
<caption>
All({$tCount})
<span class="side"><button type="button" class="text"><span class="hide">{$lang->simple_view}</span><span class="show">{$lang->detail_view}</span></button></span>
<div class="x_pull-right x_btn-group">
<button class="x_btn x_btn-mini x_active __simple">{$lang->simple_view}</button>
<button class="x_btn x_btn-mini __detail">{$lang->detail_view}</button>
</div>
</caption>
<thead>
<tr>
@ -33,9 +35,8 @@
</block>
</td>
<td class="nowr">{$widget->path}</td>
<td class="nowr"><a href="{getUrl('act', 'dispWidgetAdminGenerateCode', 'selected_widget', $widget->widget)}">{$lang->cmd_generate_code}</a></td>
<td class="nowr"><a cond="$widget->remove_url" href="{$widget->remove_url}&amp;return_url={urlencode(getRequestUriByServerEnviroment())}">{$lang->cmd_delete}</a></td>
<td class="nowr"><a class="x_btn" href="{getUrl('act', 'dispWidgetAdminGenerateCode', 'selected_widget', $widget->widget)}">{$lang->cmd_generate_code}</a></td>
<td class="nowr"><a class="x_btn x_btn-danger" cond="$widget->remove_url" href="{$widget->remove_url}&amp;return_url={urlencode(getRequestUriByServerEnviroment())}">{$lang->cmd_delete}</a></td>
</tr>
</tbody>
</table>
</div>

View file

@ -1,4 +1,6 @@
<h1 class="h1">{$lang->installed_widgets}</h1>
<div cond="$XE_VALIDATOR_MESSAGE" class="message {$XE_VALIDATOR_MESSAGE_TYPE}">
<div class="x_page-header">
<h1>{$lang->installed_widgets}</h1>
</div>
<div cond="$XE_VALIDATOR_MESSAGE" class="x_alert x_alert-{$XE_VALIDATOR_MESSAGE_TYPE}">
<p>{$XE_VALIDATOR_MESSAGE}</p>
</div>

View file

@ -41,12 +41,12 @@ function doDisplaySkinColorset(colorset)
function doHideSkinColorset()
{
jQuery('select[name=colorset]').parents('li').hide();
jQuery('select[name=colorset]').closest('.x_control-group').hide();
}
function doShowSkinColorset()
{
jQuery('select[name=colorset]').parents('li').show();
jQuery('select[name=colorset]').closest('.x_control-group').show();
}
function completeGenerateCodeInPage(widget_code) {
@ -219,7 +219,7 @@ jQuery(document).ready(function($){
if(src instanceof Object ) {
for(var i=0;i<src.length;i++){
if(src[i].id) {
htmlCode += '<img src="'+src[i].id+'" alt="" style="border: 1px solid #ccc; padding: 5px; max-height: 200px; max-width: 200px;"><button class="filebox_del text" type="button">'+xe.lang.cmd_delete+'</button>';
htmlCode += '<img src="'+src[i].id+'" alt="" style="border: 1px solid #ccc; padding: 5px; max-height: 200px; max-width: 200px;"><button class="filebox_del x_btn x_btn-mini x_btn-danger" type="button">'+xe.lang.cmd_delete+'</button> ';
if(i==0) $(this).siblings('input').val(src[i].id);
else {
var aux = $(this).siblings('input').val();
@ -228,7 +228,7 @@ jQuery(document).ready(function($){
}
else {
if(src[i]){
htmlCode += '<img src="'+src[i]+'" alt="" style="border: 1px solid #ccc; padding: 5px; max-height: 200px; max-width: 200px;"><button class="filebox_del text" type="button">'+xe.lang.cmd_delete+'</button>';
htmlCode += '<img src="'+src[i]+'" alt="" style="border: 1px solid #ccc; padding: 5px; max-height: 200px; max-width: 200px;"><button class="filebox_del x_btn x_btn-mini x_btn-danger" type="button">'+xe.lang.cmd_delete+'</button> ';
if(i==0) $(this).siblings('input').val(src[i]);
else {
var aux = $(this).siblings('input').val();
@ -238,7 +238,7 @@ jQuery(document).ready(function($){
}
}
} else {
htmlCode = '<img src="'+src+'" alt="" style="border: 1px solid #ccc; padding: 5px; max-height: 200px; max-width: 200px;"> <button class="filebox_del text" type="button">'+xe.lang.cmd_delete+'</button>';
htmlCode = '<img src="'+src+'" alt="" style="border: 1px solid #ccc; padding: 5px; max-height: 200px; max-width: 200px;"> <button class="filebox_del x_btn x_btn-mini x_btn-danger" type="button">'+xe.lang.cmd_delete+'</button> ';
$(this).siblings('input').val(src);
}
$(this).before(htmlCode);

View file

@ -6,31 +6,20 @@ xe.MidManager = xe.createApp("MidManager", {
init: function(key){
var self = this;
var $keyObj = this.$keyObj = $('.extra_vars input[name='+key+']');
var $finder = $keyObj.siblings('.finder');
$keyObj.siblings('button.search').bind('click', function(){
$finder.slideDown(100);
return false;
});
$keyObj.parent().find('button.delete,a.delete').bind('click', function(){
$keyObj.val('').next().val('');
return false;
});
$finder.find('.moduleIdList').siblings('button').bind('click', function(){
$keyObj.val($finder.find('.moduleIdList').val());
self.cast('MID_SYNC');
$finder.slideUp(100);
return false;
});
jQuery(function($){
$('.moduleSearch').bind('moduleSelect', function(e, aSelected){
$keyObj.siblings('.moduleTrigger').bind('moduleSelect', function(e, aSelected){
self.cast('MID_SYNC_NEW', aSelected);
});
});
self.cast('MID_SYNC');
},
API_MID_SYNC: function(){
@ -61,17 +50,8 @@ xe.MidManager = xe.createApp("MidManager", {
var module_srl = htSelected.module_srl;
if (!module_srl) return;
function on_complete(data){
if (data.error){
alert(data.message);
return;
}
self.$keyObj.val(data.module_list[0].module_srl);
self.$keyObj.next().val(data.module_list[0].browser_title+' ('+data.module_list[0].mid+', '+data.module_list[0].module_name+')');
}
$.exec_json('module.getModuleAdminModuleList', {'module_srls': module_srl}, on_complete);
self.$keyObj.val(htSelected.module_srl);
self.$keyObj.next().val(htSelected.browser_title+' ('+htSelected.mid+', '+htSelected.type+')');
}
});

View file

@ -15,7 +15,6 @@ xe.ModuleListManager = xe.createApp("ModuleListManager", {
this.$selectedObj
.nextAll('button')
.filter('.modulelist_add').bind('click', function(){ self.cast('MODULELIST_ADD'); return false; }).hide().end()
.filter('.modulelist_del').bind('click', function(){ self.cast('MODULELIST_DEL'); return false; }).end()
.filter('.modulelist_up').bind('click', function(){ self.cast('MODULELIST_UP'); return false; }).end()
.filter('.modulelist_down').bind('click', function(){ self.cast('MODULELIST_DOWN'); return false; }).end()
@ -24,6 +23,17 @@ xe.ModuleListManager = xe.createApp("ModuleListManager", {
$(this).nextAll().show();
});
this.$selectedObj.nextAll('a').filter('.moduleTrigger').bind('moduleSelect', function(e, aSelected){
var sType, sName, sSrl;
for(var i=0, nLen=aSelected.length; i<nLen; i++){
sType = aSelected[i].mid + ', ' + aSelected[i].type;
sName = aSelected[i].browser_title;
sSrl = aSelected[i].module_srl;
self.cast("ADD_MODULE_TO_MODULELIST_MANAGER", [sType, sName, sSrl]);
}
}).end()
this.cast('MODULELIST_SYNC');
},
@ -74,7 +84,7 @@ xe.ModuleListManager = xe.createApp("ModuleListManager", {
for(var i in data.module_list){
var module = data.module_list[i];
var obj = $(document.createElement('option'));
obj.val(module.module_srl).html(module.browser_title+' ('+module.module_name+')').appendTo(self.$selectedObj);
obj.val(module.module_srl).html(module.browser_title + ' (' + module.mid + ', ' + module.module_name + ')').appendTo(self.$selectedObj);
}
}

View file

@ -1,30 +0,0 @@
(function($){
xe.MultiLangManager = xe.createApp("MultiLangManager", {
$keyObj: null,
init: function(key){
var $keyObj = this.$keyObj = $('.extra_vars input[name='+key+']');
},
API_MULTILANG_SYNC: function(){
var self = this;
var regexp = /^\$user_lang\-\>/;
var langCode = this.$keyObj.val();
if (!regexp.test(langCode)) return;
function on_complete(data){
if (data.error){
alert(data.message);
return;
}
$('#' + self.$keyObj.attr('name')).val(data.lang);
}
$.exec_json('module.getLangByLangcode', {'langCode': langCode}, on_complete);
}
});
})(jQuery);

View file

@ -11,8 +11,8 @@ xe.MultiOrderManager = xe.createApp("MultiOrderManager", {
this.$showObj = $keyObj.parent().find('.multiorder_show');
this.$selectedObj = $keyObj.parent().find('.multiorder_selected');
this.$showObj
.nextAll('button')
this.$keyObj.parent()
.find('button')
.filter('.multiorder_add').bind('click', function(){ self.cast('MULTIORDER_ADD'); return false; }).end()
.filter('.multiorder_del').bind('click', function(){ self.cast('MULTIORDER_DEL'); return false; }).end()
.filter('.multiorder_up').bind('click', function(){ self.cast('MULTIORDER_UP'); return false; }).end()

View file

@ -1,103 +0,0 @@
<block cond="$use_filebox">
<style>
.filebox_item { border: 1px solid #ccc!important; padding: 5px; max-height: 200px; max-width: 200px; }
</style>
<div class="modal" id="modalFilebox">
<div class="fg portlet">
<h2 class="h2">FileBox</h2>
<div class="filebox_list"></div>
<h2 class="h2">Upload</h2>
<form id="filebox_upload" class="form" action="./" method="post" enctype="multipart/form-data">
<input type="hidden" name="module" value="module" />
<input type="hidden" name="act" value="procModuleFileBoxAdd" />
<input type="hidden" name="ajax" value="true" />
<table cellspacing="0" id="attributes">
<tr>
<td>
<label for="attribute_name1">{$lang->attribute_name} </label><input type="text" name="attribute_name1" id="attribute_name1" />
</td>
<td>
<label for="attribute_value1">{$lang->attribute_value} </label><input type="text" name="attribute_value1" id="attribute_value1" />
</td>
<td><a href="javascript:addRow('attributes')">{$lang->add}</a></td>
<td><a href="javascript:clearRow('attributes',1)">{$lang->delete}</a></td>
</tr>
<tr>
<td>
<label for="file">{$lang->file}</label><input type="file" name="addfile" id="file"/>
</td>
</tr>
</table>
<div class="btnArea">
<span class="btn small"><input type="submit" value="{$lang->cmd_submit}" /></span>
</div>
</form>
</div>
</div>
<script>
xe.lang.cmd_delete = '{$lang->cmd_delete}';
function addRow(tableID){
var table = document.getElementById(tableID);
var rowCount = table.rows.length;
var initial = table.rows(0);
var text1 = initial.cells(0).children(0).innerHTML;
var text2 = initial.cells(1).children(0).innerHTML;
var addrow = table.rows(rowCount-2).cells(2).children(0);
var deleteLink = table.rows(rowCount-2).cells(3).children(0).cloneNode(true);
var row = table.insertRow(rowCount-1);
//cell for attribute name
var cell0= row.insertCell(0)
var element0 = document.createElement("label");
element0.innerHTML = text1;
element0.htmlFor = "attribute_name"+rowCount;
cell0.appendChild(element0);
var element1 = document.createElement("input");
element1.type = "text";
element1.name="attribute_name"+rowCount;
element1.id="attribute_name"+rowCount;
cell0.appendChild(element1);
//cell for attribute value
var cell1 = row.insertCell(1);
var element2 = document.createElement("label");
element2.innerHTML = text2;
element2.htmlFor = "attribute_value"+rowCount;
cell1.appendChild(element2);
var element3 = document.createElement("input");
element3.type = "text";
element3.id="attribute_value"+rowCount;
element3.name="attribute_value"+rowCount;
cell1.appendChild(element3);
//cell for addrow link
var cell2 = row.insertCell(2);
cell2.appendChild(addrow);
//cell for delete link
var cell3 = row.insertCell(3);
deleteLink.href = "javascript:clearRow('attributes',"+rowCount+")";
cell3.appendChild(deleteLink);
}
function clearRow(tableID,rowNumber){
var table = document.getElementById(tableID);
var text = "attribute_name"+rowNumber;
var rowCount = table.rows.length;
var sw = 0;
for(i=0;i<rowCount-2;i++){
if(table.rows(i).cells[0].children(1).id == text) {
table.deleteRow(i);
sw = 1;
}
}
if(!sw){
var addrow = table.rows(rowCount-2).cells(2).children(0);
table.rows(rowCount-3).cells(2).appendChild(addrow);
table.deleteRow(rowCount-2);
}
}
</script>
</block>

View file

@ -1,25 +1,32 @@
<include cond="$in_admin" target="header.html" />
<load target="js/generate_code.js" usecdn="true" />
<h2 class="h2">{$widget_info->title}</h2>
<div class="x_well">
<h2>{$widget_info->title}</h2>
<p>{$widget_info->description}</p>
<form id="widget_code_form" class="form" action="./" method="post">
</div>
<form id="widget_code_form" class="x_form-horizontal x_well" action="./" method="post">
<input type="hidden" name="module" value="widget" />
<input type="hidden" name="act" value="procWidgetGenerateCode" />
<input type="hidden" name="selected_widget" value="{$widget_info->widget}" />
<h3 class="h3">{$lang->cmd_generate_code}</h3>
<h3>{$lang->cmd_generate_code}</h3>
<p>{$lang->about_widget_code}</p>
<include target="widget_generate_code.include.html" />
<div class="btnArea">
<span class="btn small"><input type="submit" value="{$lang->cmd_generate_code}" /></span>
<input type="submit" class="x_btn x_btn-primary" value="{$lang->cmd_generate_code}" />
</div>
</form>
<h3 class="h3">{$lang->widget_code}</h3>
<div class="x_well">
<h3>{$lang->widget_code}</h3>
<p><textarea id="widget_code" rows="8" cols="42" style="width: 100%; height: 50px;" readonly="readonly"></textarea>
</div>
<div class="btnArea">
<a href="{getUrl('', 'module', 'admin', 'act', 'dispWidgetAdminDownloadedList')}" class="x_btn">{$lang->cmd_list}</a>
</div>
<include target="../../module/tpl/include.filebox.html" />
<include target="widget_generate_code.multilang.html" />
<include target="widget_generate_code.multilang.textarea.html" />

View file

@ -4,66 +4,58 @@
<load target="js/multi_lang.js" usecdn="true" />
<!--%load_js_plugin("ui.colorpicker")-->
<ul>
<li>
<p class="q"><label for="skin">{$lang->skin}</label></p>
<p class="a">
<select name="skin" id="skin" style="width:280px">
<div class="x_control-group">
<label class="x_control-label" for="skin">{$lang->skin}</label>
<div class="x_controls">
<select name="skin" id="skin" style="width:220px">
<option value="">{$lang->select}</option>
<option loop="$skin_list => $skin_name, $skin" value="{$skin_name}">{$skin->title} ({$skin_name})</option>
</select>
<input type="button" value="{$lang->cmd_select}" />
</p>
</li>
<li>
<p class="q"><label for="colorset">{$lang->colorset}</label></p>
<p class="a">
<select name="colorset" id="widget_colorset" style="width:280px">
<input type="button" class="x_btn" value="{$lang->cmd_select}" />
</div>
</div>
<div class="x_control-group">
<label class="x_control-label" for="colorset">{$lang->colorset}</label>
<div class="x_controls">
<select name="colorset" id="widget_colorset" style="width:220px">
</select>
</p>
</li>
<li>
<p class="q"><label for="widget_cache">{$lang->widget_cache}</label></p>
<p class="a">
</div>
</div>
<div class="x_control-group">
<label class="x_control-label" for="widget_cache">{$lang->widget_cache}</label>
<div class="x_controls">
<input type="text" name="widget_cache" id="widget_cache" value="0" size="2" style="width:auto" /> {$lang->unit_min}
({$lang->about_widget_cache})
</p>
</li>
</ul>
<span class="x_help-block">{$lang->about_widget_cache}</span>
</div>
</div>
{@$suggestion_id = 0}
<block loop="$widget_info->extra_var => $id, $var">
{@$suggestion_id++}
<block cond="!$not_first && !$var->group"><ul class="extra_vars"></block>
<block cond="!$not_first && !$var->group"><section class="extra_vars section"></block>
<block cond="$group != $var->group">
<block cond="$not_first"></ul></block>
<h3 class="h3">{$var->group}</h3>
<ul class="extra_vars">
<block cond="$not_first"></section></block>
<section class="extra_vars section">
<h1>{$var->group}</h3>
{@$group = $var->group}
</block>
{@$not_first = true}
<li class="moduleSearch moduleSearch1 modulefinder"|cond="$var->type == 'mid' || $var->type == 'module_srl_list'">
<p class="q"><label for="{$id}">{$var->name}</label></p>
<div class="a">
<div cond="$var->type == 'text'" class="multiLangEdit">
{@$use_multilang = true}
<input type="hidden" name="{$id}" value="" class="vLang" />
<input type="text" id="{$id}" class="vLang" />
<span class="desc"><a href="#langEdit" class="editUserLang tgAnchor">{$lang->cmd_set_multilingual}</a></span>
<div class="x_control-group <!--@if($var->type == 'mid' || $var->type == 'module_srl_list')-->moduleSearch moduleSearch1 modulefinder<!--@end-->">
<label class="x_control-label" for="{$id}">{$var->name}</label>
<div class="x_controls">
<div cond="$var->type == 'text'">
<input type="text" name="{$id}" class="lang_code" />
<script>
xe.registerApp(new xe.MultiLangManager('{$id}'));
</script>
</div>
<input cond="$var->type == 'color'" type="text" name="{$id}" value="" id="{$id}" class="color-indicator" />
<div cond="$var->type == 'textarea'" class="multiLangEdit">
{@$use_multilang_textarea = true}
<input type="hidden" name="{$id}" value="" class="vLang" />
<textarea cond="$var->type == 'textarea'" id="{$id}" class="vLang" rows="8" cols="42"></textarea>
<span class="desc"><a href="#langEditTextarea" class="editUserLang tgAnchor">{$lang->cmd_set_multilingual}</a></span>
<input cond="$var->type == 'color'" type="text" name="{$id}" value="" id="{$id}" class="color-indicator" style="width:178px" />
<div cond="$var->type == 'textarea'">
<textarea cond="$var->type == 'textarea'" name="{$id}" id="{$id}" class="lang_code" rows="8" cols="42"></textarea>
<script>
xe.registerApp(new xe.MultiLangManager('{$id}'));
</script>
</div>
<select cond="$var->type == 'select'" name="{$id}" id="{$id}" style="width:290px">
<select cond="$var->type == 'select'" name="{$id}" id="{$id}" style="width:220px">
<option loop="$var->options => $key, $val" value="{$key}">{$val}</option>
</select>
<block cond="$var->type == 'select-multi-order'">
@ -73,168 +65,75 @@
<!--@else-->
<input type="hidden" name="{$id}" value="" />
<!--@end-->
<select class="multiorder_show" size="8" multiple="multiple" style="width:290px;vertical-align:top">
<div style="display:inline-block">
<select class="multiorder_show" size="8" multiple="multiple" style="width:220px;vertical-align:top">
<option loop="$var->options => $key, $val" cond="!$var->init_options[$key]" value="{$key}" default="true"|cond="$var->default_options[$key]">{$val}</option>
</select>
<button type="button" class="text multiorder_add" style="vertical-align:top">{$lang->cmd_insert}</button>
<select class="multiorder_selected" size="8" multiple="multiple" style="width:290px;vertical-align:top">
</select><br />
<button type="button" class="x_btn x_btn-mini multiorder_add" style="vertical-align:top">{$lang->cmd_insert}</button>
</div>
<div style="display:inline-block">
<select class="multiorder_selected" size="8" multiple="multiple" style="width:220px;vertical-align:top">
<option loop="$var->options => $key, $val" cond="$var->init_options[$key]" value="{$key}" default="true"|cond="$var->default_options[$key]">{$val}</option>
</select>
<button type="button" class="text multiorder_up" style="vertical-align:top">{$lang->cmd_move_up}</button>
<button type="button" class="text multiorder_down" style="vertical-align:top">{$lang->cmd_move_down}</button>
<button type="button" class="text multiorder_del" style="vertical-align:top">{$lang->cmd_delete}</button>
</select><br />
<button type="button" class="x_btn x_btn-mini multiorder_up" style="vertical-align:top">{$lang->cmd_move_up}</button>
<button type="button" class="x_btn x_btn-mini multiorder_down" style="vertical-align:top">{$lang->cmd_move_down}</button>
<button type="button" class="x_btn x_btn-mini x_btn-danger multiorder_del" style="vertical-align:top">{$lang->cmd_delete}</button>
</div>
<script>
xe.registerApp(new xe.MultiOrderManager('{$id}'));
</script>
</block>
<block cond="$var->type == 'mid_list'">
<fieldset loop="$mid_list => $module_category_srl, $modules" style="border: 1px solid #ccc; margin:1em 0; padding:.5em 1em">
<fieldset loop="$mid_list => $module_category_srl, $modules">
<block cond="count($mid_list) > 1">
<legend cond="$modules->title">{$modules->title}</legend>
<legend cond="!$modules->title">{$lang->none_category}</legend>
</block>
<div loop="$modules->list => $key, $val">
<input type="checkbox" value="{$key}" name="{$id}" id="chk_mid_list_{$key}" />
<label for="chk_mid_list_{$key}">{$key} ({$val->browser_title})</label>
<label class="x_inline"><input type="checkbox" value="{$key}" name="{$id}" /> {$key} ({$val->browser_title})</label>
</div>
</fieldset>
</block>
<block cond="$var->type == 'member_group'">
<block loop="$group_list => $key, $val">
<input type="checkbox" value="{$key}" name="{$id}" id="chk_member_gruop_{$id}_{$key}" />
<label for="chk_member_gruop_{$id}_{$key}">{$val->title}</label>
<label class="x_inline"><input type="checkbox" value="{$key}" name="{$id}" id="chk_member_gruop_{$id}_{$key}" /> {$val->title}</label>
</block>
</block>
<block cond="$var->type == 'module_srl_list'">
<p class="desc">{$var->description}</p>
<input type="hidden" name="{$id}" value="" />
<select class="modulelist_selected" size="8" multiple="multiple" style="width:290px;"></select>
<select class="modulelist_selected" size="8" multiple="multiple" style="width:220px;"></select>
<br/>
<span style="padding:1px;margin:1px"><b><a href="#moduleSearchWindow1" class="tgAnchor moduleSearch">{$lang->cmd_add}</a></b></span>
<button type="button" class="text modulelist_up" style="vertical-align:top">{$lang->cmd_move_up}</button>
<button type="button" class="text modulelist_down" style="vertical-align:top">{$lang->cmd_move_down}</button>
<button type="button" class="text modulelist_del" style="vertical-align:top">{$lang->cmd_delete}</button>
<a href="#" type="button" id="__module_srl_list_{$id}" class="x_btn x_btn-mini moduleTrigger" data-multiple="true">{$lang->cmd_add}</a>
<button type="button" class="x_btn x_btn-mini modulelist_up">{$lang->cmd_move_up}</button>
<button type="button" class="x_btn x_btn-mini modulelist_down">{$lang->cmd_move_down}</button>
<button type="button" class="x_btn x_btn-mini x_btn-danger modulelist_del">{$lang->cmd_delete}</button>
<script>
xe.registerApp(new xe.ModuleListManager('{$id}'));
</script>
<script>
jQuery(function($){
$('.moduleSearch1').bind('moduleSelect', function(e, aSelected){
var sType, sName, sSrl;
for(var i=0, nLen=aSelected.length; i<nLen; i++){
sType = aSelected[i].type;
sName = aSelected[i].browser_title;
sSrl = aSelected[i].module_srl;
xe.broadcast("ADD_MODULE_TO_MODULELIST_MANAGER", [sType, sName, sSrl]);
}
});
});
</script>
<!-- new module search -->
<div id="moduleSearchWindow1" class="moduleSearchWindow tgContent">
<div class="siteList sectionDiv">
<h2>{$lang->select_site}</h2>
<div class="siteListSearchBox">
<div class="siteListSearchBoxBorder">
<div class="searchImg icon-search"></div>
<input type="text" class="siteListSearchInput" name="site_filter">
</div>
</div>
<div class="siteListUL">
<ul>
</ul>
</div>
</div>
<div class="moduleTypeList sectionDiv">
<h2>{$lang->select_module_type}</h2>
<div>
<ul class="moduleTypeListUL">
</ul>
</div>
</div>
<div class="moduleInstanceList sectionDiv">
<h2>{$lang->select_module_instance}</h2>
<div>
<select class="moduleInstanceListSelect" multiple="multiple" size="8">
</select>
</div>
<button class="btn btn_primary moduleSearch_ok">{$lang->cmd_select}</button>
</div>
</div>
<!--// new module search -->
</block>
<block cond="$var->type == 'mid'">
<input type="hidden" name="{$id}" value="" />
<input type="text" readonly="readonly" /> <!--button class="text search">{$lang->cmd_search}</button> <button class="text delete">{$lang->cmd_delete}</button-->
<span style="padding:1px;margin:1px"><b><a href="#moduleSearchWindow2" class="tgAnchor moduleSearch">{$lang->cmd_select}</a></b></span>
<span style="padding:1px;margin:1px"><b><a href="#" class="text delete">{$lang->cmd_delete}</a></b></span>
<!-- callback function for moduleSearchWindow2 is defined in MidManager -->
<!-- new module search -->
<div id="moduleSearchWindow2" class="moduleSearchWindow tgContent">
<div class="siteList sectionDiv">
<h2>{$lang->select_site}</h2>
<div class="siteListSearchBox">
<div class="siteListSearchBoxBorder">
<div class="searchImg icon-search"></div>
<input type="text" class="siteListSearchInput" name="site_filter">
</div>
</div>
<div class="siteListUL">
<ul>
</ul>
</div>
</div>
<div class="moduleTypeList sectionDiv">
<h2>{$lang->select_module_type}</h2>
<div>
<ul class="moduleTypeListUL">
</ul>
</div>
</div>
<div class="moduleInstanceList sectionDiv">
<h2>{$lang->select_module_instance}</h2>
<div>
<select class="moduleInstanceListSelect"size="8">
</select>
</div>
<button class="btn btn_primary moduleSearch_ok">{$lang->cmd_select}</button>
</div>
</div>
<!--// new module search -->
<div class="finder" style="display: none;">
<div class="a">
<input type="text" class="site_keyword" /> <a href="#suggestion_{$suggestion_id}" class="tgAnchor findSite">{$lang->find_site}</a>
<div id="suggestion_{$suggestion_id}" class="tgContent suggestion">
<ul>
</ul>
</div>
</div>
<p class="a"><select class="moduleList" style="width:290px;"></select></p>
<p class="a"><select class="moduleIdList" style="width:290px;"></select> <button class="text">{$lang->cmd_select}</button></p>
</div>
<input type="text" style="width:220px" readonly="readonly" />
<a href="#" class="x_btn x_btn-mini moduleTrigger">{$lang->cmd_select}</a>
<button type="button" class="x_btn x_btn-mini x_btn-danger delete">{$lang->cmd_delete}</button>
<script>
xe.registerApp(new xe.MidManager('{$id}'));
</script>
</block>
<block cond="$var->type == 'filebox'">
{@$use_filebox = true}
<input type="hidden" name="{$id}" />
<a class="modalAnchor filebox" href="#modalFilebox">{$lang->cmd_select}</a>
<a class="x_btn x_btn-mini modalAnchor filebox" href="#modalFilebox">{$lang->cmd_select}</a>
</block>
<select cond="$var->type == 'menu'" name="{$id}" style="width:290px">
<select cond="$var->type == 'menu'" name="{$id}" style="width:220px">
<option value="">-</option>
<option loop="$menu_list => $key, $val" value="{$val->menu_srl}">{$val->title}</option>
</select>
</div>
</li>
</div>
</block>
</ul>
</section>
<script>
xe.current_lang = "{$lang_type}";
</script>

View file

@ -1,23 +0,0 @@
<block cond="$use_multilang">
<div id="langEdit" class="langEdit tgContent">
<ul class="langList"></ul>
<div class="langInput form">
<h2>{$lang->multilingual} <strong>{$lang->cmd_modify}...</strong> | <a href="#langEdit">{$lang->cmd_insert}</a></h2>
<ul>
{@
/* move current language to the top */
$a = array($lang_type=>$lang_supported[$lang_type]);
unset($lang_supported[$lang_type]);
$lang_supported = array_merge($a, $lang_supported);
}
<li loop="$lang_supported=>$code,$name" class="{$code}"><label for="{$code}_var1">{$name}</label> <input type="text" value="" id="{$code}_var1" /></li>
</ul>
<div class="action">
<div class="btnArea">
<span class="btn small"><input type="submit" value="{$lang->use}|{$lang->use_after_save}" /></span>
</div>
<p><a href="{getUrl('act','dispModuleAdminLangcode')}">{$lang->multilingual_manager}</a></p>
</div>
</div>
</div>
</block>

View file

@ -1,27 +0,0 @@
<block cond="$use_multilang_textarea">
<style>
#langEditTextarea textarea { width: 258px; }
</style>
<div id="langEditTextarea" class="langEdit tgContent">
<ul class="langList"></ul>
<div class="langInput form">
<h2>{$lang->multilingual} <strong>{$lang->cmd_modify}...</strong> | <a href="#langEdit">{$lang->cmd_insert}</a></h2>
<ul>
{@
/* move current language to the top */
$a = array($lang_type=>$lang_supported[$lang_type]);
unset($lang_supported[$lang_type]);
$lang_supported = array_merge($a, $lang_supported);
}
<li loop="$lang_supported=>$code,$name" class="{$code}"><label for="{$code}_var1">{$name}</label> <textarea id="{$code}_var1" rows="8" cols="42"></textarea></li>
</ul>
<div class="action">
<div class="btnArea">
<span class="btn small"><input type="submit" value="{$lang->use}|{$lang->use_after_save}" /></span>
</div>
<p><a href="{getUrl('act','dispModuleAdminLangcode')}">{$lang->multilingual_manager}</a></p>
</div>
</div>
</div>
</block>

View file

@ -33,14 +33,17 @@
</ul>
</form>
</div>
<div class="x" style="padding: 0 10px;">
<h2 class="h2">{$widget_info->title}</h2>
<div class="x" style="padding: 10px">
<div class="x_page-header">
<h1>{$widget_info->title}</h1>
</div>
<p>{$widget_info->description}</p>
<h3 class="h3">{$lang->cmd_generate_code}</h3>
<div id="content" class="x_well">
<h2>{$lang->cmd_generate_code}</h2>
<p>{$lang->about_widget_code_in_page}</p>
<form class="form" action="./" method="post" id="fo_widget">
<form class="x_form x_form-horizontal" action="./" method="post" id="fo_widget">
<input type="hidden" name="module" value="widget" />
<input type="hidden" name="module_srl" value="{$module_srl}" />
<input type="hidden" name="widget_sequence" value="" />
@ -54,11 +57,10 @@
<include target="widget_generate_code.include.html" />
<div class="btnArea">
<span class="btn small"><input type="submit" value="{$lang->cmd_generate_code}" /></span>
<input type="submit" class="x_btn x_btn-primary" value="{$lang->cmd_generate_code}" />
</div>
</form>
</div>
<include target="../../module/tpl/include.filebox.html" />
<include target="widget_generate_code.multilang.html" />
<include target="widget_generate_code.multilang.textarea.html" />
</div>