Structure page with json

This commit is contained in:
chris committed 2013-10-23 18:39:35 +08:00
1 parent 6d5f1a2f12
commit a4d1c68299
15 files changed
+470 -144

No files matched your search

+280 -123
View File
@@ -42,7 +42,6 @@ function customOpenSlide() {
});
$noiFrame = $openSlide.not('.view-page');
$iFrame = $openSlide.filter('.view-page.open-slide');
$noiFrame.pageslide({
W: 314,
openFn: function(pageslide, element) {
@@ -67,17 +66,22 @@ function customOpenSlide() {
.css('display', 'inline-block')
.closest('.navbar-inner')
.addClass('active');
_type = element.hasClass('page') ? 'page' : 'link';
var _id = element.data('id'),
_type = element.hasClass('page') ? 'page' : 'link',
_parent = element.data('parent'),
_edit = element.hasClass('edit') ? true : false;
$('#pageslide .parent').val(_parent);
if(_id !== 'new') {
$('#pageslide form').attr({
'action': $('#pageslide form').attr('action') + '/' + _id,
'id': 'edit_' + _type + '_' + _id
'id': 'edit_' + _type + '_' + _id,
'method': 'put'
});
setForm(element.data('form'));
} else {
$('#pageslide form').prop('method', 'post')
};
_type == 'page' ? pageSetting(element.data('id'), _edit) : '';
_type == 'page' ? pageSetting(element.data('id'), _edit) : linkSetting(element.data('id'), _edit);
}
});
$iFrame.pageslide({
@@ -112,22 +116,30 @@ function customOpenSlide() {
}
function pageSetting(id, edit) {
$pageModule = $('#page_module_app_id'),
$pageF2E = $('#page_app_frontend_url'),
$pageDesign = $('#page_design'),
$pageTheme = $('#page_theme_id'),
$pageCategory = $('#page-category'),
$pageTags = $('#page-tags');
if(edit) {
$pageModule = $('#pageslide #page_module_app_id');
$pageF2E = $('#pageslide #page_app_frontend_url');
$pageDivF2E = $('#pageslide #front_url');
$pageDesign = $('#pageslide #page_design');
$pageTheme = $('#pageslide #page_theme_id');
$pageCategory = $('#pageslide #page-category');
$pageCategoryGroup = $('#pageslide #page-category-groups');
$pageTags = $('#pageslide #page-tags');
$pageTagsGroup = $('#pageslide #page-tags-groups');
$pagePublishedTrue = $('#pageslide #page_is_published_true');
$pageCount = $('#pageslide #page_count');
$pageDivCount = $('#pageslide #front_count');
_status = edit;
_ID = id;
if(_status) {
$.ajax({
url: 'page-setting.json',
type: 'POST',
url: "<%= Rails.application.routes.url_helpers.get_page_setting_json_admin_pages_path %>",
contentType: "application/json; charset=utf-8",
dataType: 'json',
data: '{"id": ' + id + '}',
data: {id: id},
cache: false,
})
.done(function(data) {
_boolean = true;
_selectData = data;
$.each(_pageData.design, function(index, val) {
$pageDesign.append('<option value="' + val.main[1] + '" ' + (val.main[1] == _selectData.design.main ? 'selected="selected"' : '') + '>' + val.main[0] + '</option>');
@@ -137,31 +149,52 @@ function pageSetting(id, edit) {
});
};
});
$pageModule.append('<option/>');
$.each(_pageData.module, function(index, val) {
$pageModule.append('<option value="' + val.main[1] + '" ' + (val.main[1] == _selectData.module.main ? 'selected="selected"' : '') + '>' + val.main[0] + '</option>');
if(val.main[1] == _selectData.module.main) {
if(_selectData.module.main && val.main[1] == _selectData.module.main) {
$pageDivF2E.show();
$.each(val.sub, function(index, val) {
$pageF2E.append('<option value="' + $(this)[1] + '" ' + ($(this)[1] == _selectData.module.sub ? 'selected="selected"' : '') + '>' + $(this)[0]+ '</option>')
});
$.each(val.category, function(index, val) {
var _arr = $.inArray($(this)[1], _selectData.module.category[1]);
$pageCategory.append('<label class="checkbox"><input type="checkbox" name="page[category][]" value="'+ $(this)[1] + '">'+ $(this)[0] +'</label>');
if(!_selectData.module.category[0] && _arr !== -1) {
$pageCategory.find('input[type="checkbox"]').eq(index).prop('checked', true);
}
_selectData.module.category[0] ? $pageCategory.siblings('.checkbox').children('.select_all').prop('checked', true) : '';
});
$.each(val.tags, function(index, val) {
var _arr = $.inArray($(this)[1], _selectData.module.tags[1]);
$pageTags.append('<label class="checkbox"><input type="checkbox" name="page[tag][]" value="'+ $(this)[1] + '">'+ $(this)[0] +'</label>');
if(!_selectData.module.tags[0] && _arr !== -1) {
$pageTags.find('input[type="checkbox"]').eq(index).prop('checked', true);
}
_selectData.module.tags[0] ? $pageTags.siblings('.checkbox').children('.select_all').prop('checked', true) : '';
$.each(val.count, function(index, val) {
$pageCount.append('<option value="' + val + '" ' + (val == _selectData.module.count ? 'selected="selected"' : '') + '>' + val+ '</option>');
});
$pageDivCount.show();
if(val.category.length > 0) {
$.each(val.category, function(index, val) {
var _arr = $.inArray($(this)[1], _selectData.module.category[1]);
$pageCategory.append('<label class="checkbox"><input type="checkbox" name="page[category][]" value="'+ $(this)[1] + '">'+ $(this)[0] +'</label>');
if(!_selectData.module.category[0] && _arr !== -1) {
$pageCategory.find('input[type="checkbox"]').eq(index).prop('checked', true);
}
_selectData.module.category[0] ? $pageCategory.siblings('.checkbox').children('.select_all').prop('checked', true) : '';
});
$pageCategoryGroup.show();
}
if(val.category.length > 0) {
$.each(val.tags, function(index, val) {
var _arr = $.inArray($(this)[1], _selectData.module.tags[1]);
$pageTags.append('<label class="checkbox"><input type="checkbox" name="page[tag][]" value="'+ $(this)[1] + '">'+ $(this)[0] +'</label>');
if(!_selectData.module.tags[0] && _arr !== -1) {
$pageTags.find('input[type="checkbox"]').eq(index).prop('checked', true);
}
_selectData.module.tags[0] ? $pageTags.siblings('.checkbox').children('.select_all').prop('checked', true) : '';
});
$pageTagsGroup.show();
}
};
});
changeSetting(true);
_selectData.module.public ? $pagePublishedTrue.prop('checked', true) : $pagePublishedTrue.prop('checked', false);
$.each(_selectData.module.link, function(index, val) {
if(val[1]) {
$('#pageslide .active-link.' + val[0]).find('input[type="checkbox"]').prop('checked', true).end().find('.active-mune').slideDown(300);
$('#pageslide .active-link.' + val[0]).find('input[type="radio"]').eq(val[2]).prop('checked', true);
}
});
changeSetting(id);
$('#pageslide').find('.nano').nanoScroller({ scrollTop: 0, iOSNativeScrolling: true });
})
.fail(function(jqXHR, textStatus) {
console.log(jqXHR.status, textStatus)
@@ -169,117 +202,112 @@ function pageSetting(id, edit) {
$('#pageslide .view-page').append($errorMsg);
});
} else {
_boolean = false;
$.each(_pageData.design, function(index, val) {
$pageDesign.append('<option value="' + val.main[1] + '">' + val.main[0] + '</option>');
if(index == 0) {
$pageDesign.append('<option value="' + val.main[1] + '" ' + (val.main[2] ? 'selected="selected"' : '') + '>' + val.main[0] + '</option>');
if(val.main[2]) {
$.each(val.sub, function(index, val) {
$pageTheme.append('<option value="' + $(this)[1] + '">' + $(this)[0]+ '</option>')
});
};
});
$pageModule.append('<option/>');
$.each(_pageData.module, function(index, val) {
$pageModule.append('<option value="' + val.main[1] + '">' + val.main[0] + '</option>');
if(index == 0) {
$.each(val.sub, function(index, val) {
$pageF2E.append('<option value="' + $(this)[1] + '">' + $(this)[0]+ '</option>')
});
$.each(val.category, function(index, val) {
$pageCategory.append('<label class="checkbox"><input type="checkbox" name="page[category][]" value="'+ $(this)[1] + '">'+ $(this)[0] +'</label>');
});
$.each(val.tags, function(index, val) {
$pageTags.append('<label class="checkbox"><input type="checkbox" name="page[tag][]" value="'+ $(this)[1] + '">'+ $(this)[0] +'</label>');
});
};
});
changeSetting(false);
changeSetting(id);
};
};
function changeSetting(boolean) {
$('#pageslide').on('change', '.change', function(event) {
var _data, _select, _subData, $subSelete;
if(event.target.id == 'page_design') {
_data = _pageData.design;
_select = boolean ? _selectData.design : null;
_subData = 'template';
$subSelete = $('#page_theme_id');
} else {
_data = _pageData.module;
_select = boolean ? _selectData.module : null;
_subData = 'module';
$subSelete = $('#page_app_frontend_url');
};
$(this).children("option:selected").each(function () {
var _val = $(this).val();
$subSelete.empty();
$.each(_data, function(index, val) {
if(_val == val.main[1]) {
$.each(val.sub, function(index, val) {
var _selected = _select && $(this)[1] == _select.sub ? 'selected="selected"' : '';
$subSelete.append('<option value="' + $(this)[1] + '" ' + _selected + '>' + $(this)[0] + '</option>');
});
if(event.target.id == 'page_module_app_id') {
$pageCategory.empty();
$pageTags.empty();
$('.select_all').prop('checked', false)
$.each(val.category, function(index, val) {
if(val !== 0) {
$('#page-category-groups').slideDown(300);
var _arr = _select ? $.inArray($(this)[1], _select.category[1]) : '';
$pageCategory.append('<label class="checkbox"><input type="checkbox" name="page[category][]" value="'+ $(this)[1] + '">'+ $(this)[0] +'</label>');
if(_select && !_select.category[0] && _arr !== -1) {
$pageCategory.find('input[type="checkbox"]').eq(index).prop('checked', true);
}
_select && _val == _select.main && _select.category[0] ? $pageCategory.siblings('.checkbox').children('.select_all').prop('checked', true) : '';
} else {
$('#page-category-groups').slideUp(300);
}
});
$.each(val.tags, function(index, val) {
if(val !== 0) {
$('#page-tags-groups').slideDown(300);
var _arr = _select ? $.inArray($(this)[1], _select.tags[1]) : '';
$pageTags.append('<label class="checkbox"><input type="checkbox" name="page[tag][]" value="'+ $(this)[1] + '">'+ $(this)[0] +'</label>');
if(_select && !_select.tags[0] && _arr !== -1) {
$pageTags.find('input[type="checkbox"]').eq(index).prop('checked', true);
}
_select && _val == _select.main && _select.tags[0] ? $pageTags.siblings('.checkbox').children('.select_all').prop('checked', true) : '';
} else {
$('#page-tags-groups').slideUp(300);
}
});
}
return false;
function linkSetting(id, edit) {
$linkKey = $('#pageslide .link-key');
$linkUrl = $('#pageslide .link-url');
$linkTitle = $('#pageslide .link-title'),
$linkPublishedTrue = $('#link_is_published_true');
_status = edit;
if(_status) {
$.ajax({
url: 'link-setting.json',
type: 'POST',
contentType: "application/json; charset=utf-8",
dataType: 'json',
data: '{"id": ' + id + '}',
cache: false,
})
.done(function(data) {
_linkData = data;
$linkKey.val(data.key);
$.each(data.url, function(index, val) {
$linkUrl.eq(index).val(val)
});
$.each(data.title, function(index, val) {
$linkTitle.eq(index).val(val)
});
data.public ? $linkPublishedTrue.prop('checked', true) : $linkPublishedTrue.prop('checked', false);
$linkPublishedTrue.prop('checked') ? $('.link-options').slideDown(300) : $('.link-options').slideUp(300);
$.each(data.link, function(index, val) {
if(val[0]) {
$('.active-link').eq(index).find('input[type="checkbox"]').prop('checked', true).end().find('.active-mune').slideDown(300);
val[1] == 1 ? $('.active-link').eq(index).find('input[type="radio"]').eq(val[1]).prop('checked', true) : $('.active-link').eq(index).find('input[type="radio"]').eq(val[1]).prop('checked', true);
};
});
$('#pageslide').find('.nano').nanoScroller({ scrollTop: 0, iOSNativeScrolling: true });
})
.fail(function(jqXHR, textStatus) {
console.log(jqXHR.status, textStatus)
var $errorMsg = '<div class="error-cover"><div class="msg"><i class="icons-warning"></i><p>Sorry! Something is wrong</p></div></div>'
$('#pageslide .view-page').append($errorMsg);
});
event.preventDefault();
});
$('#pageslide').on('change', '.checkbox-groups input[type="checkbox"]', function(event) {
if($(this).hasClass('select_all') && $(this).prop('checked')) {
$(this).closest('.checkbox').siblings('.groups').find('input[type="checkbox"]').prop('checked', false);
} else if($(this).prop('checked')) {
$(this).closest('.groups').siblings('.checkbox').find('.select_all').prop('checked', false);
}
event.preventDefault();
});
}
}
function changeSetting(id) {
getView(id);
$pagePublishedTrue.prop('checked') ? $('.link-options').slideDown(300) : $('.link-options').slideUp(300);
}
function getPageData() {
$.getJSON('page-design-module.json').done(function(data) {
$.getJSON("<%= Rails.application.routes.url_helpers.get_page_design_module_json_admin_items_path %>").done(function(data) {
_pageData = data;
});
}
function getView(id) {
var _data = {};
_data.val = $('#pageslide #page_app_frontend_url option:selected').val();
_data.id = id;
$.ajax({
url: "<%#= Rails.application.routes.url_helpers.get_display_style_admin_pages_path %>",
dataType: "html",
data: _data,
contentType: "application/html; charset=utf-8",
cache: false,
});
}
$(function(){
var $pageModule = null,
$pageF2E = null,
$pageDesign = null,
$pageTheme = null,
$pageCategory = null,
$pageTags = null;
_pageData = null;
_selectData = null;
$(function() {
$pageModule = null,
$pageF2E = null,
$pageDivF2E = null,
$pageDesign = null,
$pageTheme = null,
$pageCategory = null,
$pageCategoryGroup = null,
$pageTags = null,
$pageTagsGroup = null,
$pagePublishedTrue = null,
$pageCount = null,
$pageDivCount = null,
$linkKey = null,
$linkUrl = null,
$linkTitle = null,
$linkPublishedTrue = null,
_boolean = null,
_ID = null,
_type = null,
_status = null,
_pageData = null,
_selectData = null,
_linkData = null;
$('.sortable').nestedSortable({
handle: '.brand',
items: 'li',
@@ -296,7 +324,7 @@ $(function(){
} else {
position = $(ui.item).index();
};
$.post("<%= Rails.application.routes.url_helpers.admin_update_position_path %>", { id: ui.item.attr('id'), parent_id: (ui.item.parent().closest('li').attr('id') || ui.item.parent().closest('ol').attr('id')), position: position } );
$.post("<%= Rails.application.routes.url_helpers.update_position_admin_items_path %>", { id: ui.item.attr('id'), parent_id: (ui.item.parent().closest('li').attr('id') || ui.item.parent().closest('ol').attr('id')), position: position } );
}
});
$(".sortable").delegate(".brand, .delete", clickEvent, function(e){
@@ -311,7 +339,136 @@ $(function(){
}
e.preventDefault();
});
$("#dialog").on('show', function (e) {
$(this).find('.delete-item').on(clickEvent, function() {
$target.parents('.navbar').parent('li').remove();
$('ol').not('.sortable').each(function() {
if($(this).children('li').index() == -1) {
$(this).remove();
}
});
itemsQuantity();
$('#dialog').modal('hide');
e.preventDefault();
})
});
$('#pageslide').on('change', '.change', function(event) {
var _data, _select, _subData, $subSelete;
if(event.target.id !== 'page_app_frontend_url') {
if(event.target.id == 'page_design') {
_data = _pageData.design;
_select = _boolean ? _selectData.design : null;
_subData = 'template';
$subSelete = $('#pageslide #page_theme_id');
} else {
_data = _pageData.module;
_select = _boolean ? _selectData.module : null;
_subData = 'module';
$subSelete = $('#pageslide #page_app_frontend_url');
};
$(this).children("option:selected").each(function () {
var _val = $(this).val();
$subSelete.empty();
if(_val) {
$.each(_data, function(index, val) {
if(_val == val.main[1]) {
$pageDivF2E.show();
$.each(val.sub, function(index, val) {
var _selected = _select && $(this)[1] == _select.sub ? 'selected="selected"' : '';
$subSelete.append('<option value="' + $(this)[1] + '" ' + _selected + '>' + $(this)[0] + '</option>');
});
$.each(val.count, function(index, val) {
$pageCount.append('<option value="' + val + '" ' + (_select.main == _val && val == _selectData.module.count ? 'selected="selected"' : '') + '>' + val+ '</option>');
});
$pageDivCount.show();
if(event.target.id == 'page_module_app_id') {
if(val.category.length > 0) {
$.each(val.category, function(index, val) {
if(val !== 0) {
var _arr = _select ? $.inArray($(this)[1], _select.category[1]) : '';
$pageCategory.append('<label class="checkbox"><input type="checkbox" name="page[category][]" value="'+ $(this)[1] + '">'+ $(this)[0] +'</label>');
if(_select && !_select.category[0] && _arr !== -1) {
$pageCategory.find('input[type="checkbox"]').eq(index).prop('checked', true);
}
_select && _val == _select.main && _select.category[0] ? $pageCategory.siblings('.checkbox').children('.select_all').prop('checked', true) : '';
}
});
$pageCategoryGroup.show();
} else {
$pageCategory.empty();
$pageCategoryGroup.hide();
}
if(val.tags.length > 0) {
$.each(val.tags, function(index, val) {
if(val !== 0) {
var _arr = _select ? $.inArray($(this)[1], _select.tags[1]) : '';
$pageTags.append('<label class="checkbox"><input type="checkbox" name="page[tag][]" value="'+ $(this)[1] + '">'+ $(this)[0] +'</label>');
if(_select && !_select.tags[0] && _arr !== -1) {
$pageTags.find('input[type="checkbox"]').eq(index).prop('checked', true);
}
_select && _val == _select.main && _select.tags[0] ? $pageTags.siblings('.checkbox').children('.select_all').prop('checked', true) : '';
}
});
$pageTagsGroup.show();
} else {
$pageTags.empty();
$pageTagsGroup.hide();
}
}
return false;
};
});
} else {
$pageCategory.empty();
$pageCategoryGroup.hide();
$pageTags.empty();
$pageTagsGroup.hide();
$pageF2E.empty();
$pageDivF2E.hide();
$pageCount.empty();
$pageDivCount.hide();
}
});
} else {
getView(_ID);
return false;
}
event.preventDefault();
});
$('#pageslide').on('change', '.checkbox-groups input', function(event) {
var $checked = $(this);
if($checked.attr('type') == 'checkbox') {
if($checked.hasClass('select_all') && $checked.prop('checked')) {
$checked.closest('.checkbox').siblings('.groups').find('input[type="checkbox"]').prop('checked', false);
} else if($checked.prop('checked') && !$checked.hasClass('lang-enable')) {
$checked.closest('.groups').siblings('.checkbox').find('.select_all').prop('checked', false);
} else {
if($checked.prop('checked')) {
$checked.closest('.active-link').addClass('active').siblings('active-link').removeClass('active').end().find('.active-mune').slideDown(300);
if(_status) {
var _index = $checked.closest('.link-options').find('.active').index() - 1,
_index = _type == 'page' ? _selectData.module.link[_index][1] : _linkData.link[_index][1] ;
$checked.closest('.active-link').find('.active-mune input').eq(_index).prop('checked', true);
}
} else {
$('.active-link').removeClass('active');
$checked.closest('.active-link').find('.active-mune').slideUp(300, function() {
$(this).find('input:eq(0)').prop('checked', true);
})
}
}
return false;
} else if($checked.attr('type') == 'radio' && !$(this).closest('div').hasClass('active-mune')) {
$('#pageslide #page_is_published_true').prop('checked') || $('#pageslide #link_is_published_true').prop('checked') ? $('.link-options').slideDown(300) : $('.link-options').slideUp(300);
return false;
}
event.preventDefault();
});
tip();
touchSupport()
itemsQuantity();
+1 -3
View File
@@ -2,6 +2,4 @@
//= require jquery.ui.sortable
//= require lib/jquery.ui.touch-punch.min.js
//= require lib/jquery.mjs.nestedSortable.js
//= require lib/items/items
//= require lib/items/update_cates_and_tags
//= require lib/items/page_widget_edit_interface
//= require lib/items/items