2023-05-16 10:50:42 +08:00

249 lines
8.1 KiB
JavaScript

$(document).ready(function()
{
function saveOrders(orders)
{
$.post(createLink('doc','sortBookOrder'),
{sort:orders},
function(data)
{
if(data.result != "success")
{
bootbox.alert(data.message);
}
},'json');
}
function updateOrders(ele, parentOrder, orders)
{
var root = false;
if(typeof ele === 'undefined')
{
ele = $('.books > dl, .books > .catalog > dl');
root = true;
orders = {};
}
if(typeof parentOrder === 'undefined')
{
parentOrder = '';
var $parent = ele.closest('.catalog:not(".catalog-empty, .drag-shadow")');
if($parent.length)
{
parentOrder = $parent.children('strong').find('.order').text();
}
}
var index = 1;
ele.children('.catalog:not(".catalog-empty, .drag-shadow")').each(function()
{
var $this = $(this);
var order = (parentOrder === '' ? '' : (parentOrder + '.')) + (index++);
orders[$this.data('id')] = order;
$this.children('strong').find('.order').text(order);
var $dl = $this.children('dl');
if($dl.length)
{
updateOrders($dl, order, orders);
}
});
if(root)
{
saveOrders(orders);
}
};
$('.books dl').append('<dd class="catalog catalog-empty">&nbsp;</dd>');
$('.books > .catalog .catalog, .books > dl .catalog').not('.catalog-empty').droppable(
{
trigger: function($e){return $e.children('.actions').find('.sort-handle')},
target: function($e){return $e.siblings('.catalog');},
container: '.books',
nested: true,
flex: true,
sensorOffsetY: -10,
start: function()
{
$('.books').addClass('show-empty-catalog');
},
drag: function(e)
{
if(e.target)
{
$('.drop-area').removeClass('drop-area');
e.target.closest('dl').addClass('drop-area');
}
},
drop: function(e)
{
e.target.before(e.element);
updateOrders();
},
finish: function()
{
$('.drop-area').removeClass('drop-area');
$('.books').removeClass('show-empty-catalog');
}
});
'use strict';
var NAME = 'zui.splitRow'; // model name
// File input list
// The SplitRow model class
var SplitRow = function(element, options)
{
var that = this;
that.name = NAME;
var $element = that.$ = $(element);
options = that.options = $.extend({}, SplitRow.DEFAULTS, this.$.data(), options);
var id = options.id || $element.attr('id') || $.zui.uuid();
var $cols = $element.children('.side-col,.main-col');
var $firstCol = $cols.first();
var $secondCol = $cols.eq(1);
var $spliter = $firstCol.next('.col-spliter');
if (!$spliter.length)
{
$spliter = $(options.spliter);
if (!$spliter.parent().length)
{
$spliter.insertAfter($firstCol);
}
}
var spliterWidth = $spliter.width();
var minFirstColWidth = $firstCol.data('minWidth');
var minSecondColWidth = $secondCol.data('minWidth');
var setFirstColWidth = function(width)
{
var rowWidth = $element.width();
var maxFirstWidth = rowWidth - minSecondColWidth - spliterWidth;
width = Math.max(minFirstColWidth, Math.min(width, maxFirstWidth));
$firstCol.width(width);
$.zui.store.set('splitRowFirstSize:' + id, width);
};
var defaultWidth = $.zui.store.get('splitRowFirstSize:' + id);
if(typeof(defaultWidth) == 'undefined')
{
defaultWidth = 0;
$firstCol.find('.tabs ul.nav-tabs li').each(function(){defaultWidth += $(this).outerWidth()});
defaultWidth += ($firstCol.find('.tabs ul.nav-tabs li').length - 1) * 10;
defaultWidth += 30;
}
setFirstColWidth(defaultWidth);
var documentEventName = '.' + id;
var mouseDownX, isMouseDown, startFirstWidth;
$spliter.on('mousedown', function(e)
{
startFirstWidth = $firstCol.width();
mouseDownX = e.pageX;
isMouseDown = true;
$element.addClass('row-spliting');
e.preventDefault();
$(document).on('mousemove' + documentEventName, function(e)
{
if (isMouseDown)
{
var deltaX = e.pageX - mouseDownX;
setFirstColWidth(startFirstWidth + deltaX);
e.preventDefault();
} else {
$(document).off(documentEventName);
$element.removeClass('row-spliting');
}
}).on('mouseup' + documentEventName + ' mouseleave' + documentEventName, function(e)
{
isMouseDown = false;
$(document).off(documentEventName);
$element.removeClass('row-spliting');
});
});
var fixColClass = function($col)
{
if (options.smallSize) $col.toggleClass('col-sm-size', $col.width() < options.smallSize);
if (options.middleSize) $col.toggleClass('col-md-size', $col.width() < options.middleSize);
};
var resizeCols = function() {
var cellHeight = $(window).height() - $('#footer').outerHeight() - $('#header').outerHeight() - 42;
$cols.children('.panel').height(cellHeight).css('maxHeight', cellHeight).find('.panel-body').css('position', 'absolute');
var sideHeight = cellHeight - $cols.find('.nav-tabs').height() - $cols.find('.side-footer').height() - 35;
$cols.find('.tab-content').height(sideHeight).css('maxHeight', sideHeight).css('overflow-y', 'auto');
};
$(window).on('resize', resizeCols);
$firstCol.on('resize', function(e) {fixColClass($firstCol);});
$secondCol.on('resize', function(e) {fixColClass($secondCol);});
fixColClass($firstCol);
fixColClass($secondCol);
resizeCols();
};
// default options
SplitRow.DEFAULTS =
{
spliter: '<div class="col-spliter"></div>',
smallSize: 700,
middleSize: 850
};
// Extense jquery element
$.fn.splitRow = function(option)
{
return this.each(function()
{
var $this = $(this);
var data = $this.data(NAME);
var options = typeof option == 'object' && option;
if(!data) $this.data(NAME, (data = new SplitRow(this, options)));
});
};
SplitRow.NAME = NAME;
$.fn.splitRow.Constructor = SplitRow;
// Auto call splitRow after document load complete
$(function()
{
$('.split-row').splitRow();
});
var $pageSetting = $('#pageSetting');
if($pageSetting.length)
{
$pageSetting.on('click', '.close-dropdown', function()
{
$pageSetting.parent().removeClass('open');
}).on('click', function(e){e.stopPropagation()});
}
$('.ajaxCollect').mousedown(function (event) {
var obj = $(this);
var url = obj.data('url');
$.get(url, function(response)
{
if(response.status == 'yes')
{
obj.children('i').removeClass().addClass('icon icon-star text-yellow');
obj.parent().prev().children('.file-name').children('i').remove('.icon');
obj.parent().prev().children('.file-name').prepend('<i class="icon icon-star text-yellow"></i> ');
}
else
{
obj.children('i').removeClass().addClass('icon icon-star-empty');
obj.parent().prev().children('.file-name').children('i').remove(".icon");
}
}, 'json');
return false;
});
$('dd.catalog[data-id="' + articleID + '"]').addClass('active');
});