if(jQuery) (function($){
$.extend($.fn, {
violetGrid: function (o) {
if( !o ) var o = {};
if( o.container == undefined ) o.container = $(this);
if( o.defaultViewMode == undefined ) o.defaultViewMode = 'thumbnail';//or 'list'
if( o.directoryTreeData == undefined ) o.directoryTreeData = null;
if( o.dirIDprefix == undefined ) o.dirIDprefix = null;
if( o.host == undefined ) o.host = 'http://localhost/';
if( o.tree == undefined ) o.tree = null;
if( o.sharemodal == undefined ) o.sharemodal = $("#box-shareto");
if( o.copymodal == undefined ) o.copymodal = $("#box-copyto");
if( o.movemodal == undefined ) o.movemodal = $("#box-moveto");
var currentObj = {};
var createNode = function (d) {
if( !d ) var d = {};
if( d.id == undefined ) d.id = null;
if( d.name == undefined ) d.name = null;
if( d.minetype == undefined ) d.minetype = 'directory';
if( d.parentID == undefined ) d.parentID = null;
if( d.clickEvent == undefined ) d.clickEvent = null;
if( d.customEvent == undefined ) d.customEvent = null;
var strHTML = '
';
strHTML += '
';
strHTML += '
';
strHTML += '
';
strHTML += '
' + d.name + '
';
strHTML += '
';
var disabledItemsList = null;
var enabledItemsList = null;
var menuName = '';
if (d.minetype == 'directory') {
disabledItemsList = ['preview'];
menuName = 'gridMenuDir';
}
else {
disabledItemsList = ['newfolder'];
menuName = 'gridMenuFile';
}
$(o.container).append(strHTML);
$('div[rel="id:'+ d.id +'"].' + d.minetype).bind('click',function(e){itemClick(this)});
$('div[rel="id:'+ d.id +'"].' + d.minetype).bind('dblclick',function(e){doubleClick(this)});
$('div[rel="id:'+ d.id +'"].' + d.minetype).draggable({ containment: "parent",helper: "original" });
$('div[rel="id:'+ d.id +'"].' + d.minetype).contextMenu({
menu: menuName,
disabledItems: disabledItemsList,
enabledItems: enabledItemsList
}, function(action, el, pos) {
itemClick(el);
switch(action) {
case 'newfolder':
openNewFolderModal(currentObj);
break;
case 'rename':
rename(el);
break;
case 'share':
showShareModal(currentObj);
break;
case 'copy':
case 'cut':
showCopyModal(currentObj, action);
break;
default:
break;
}
});
}
var openNewFolderModal = function (c) {
$('#box-newfolder').modal('show');
$('#frm-newfolder').find('#f-parentid').val(c.id);
}
var bindCreateFolder = function () {
$('#box-newfolder').find('#frm-newfolder').unbind('submit');
$('#box-newfolder').find('#btn-submit-newfolder').unbind('click');
$('#box-newfolder').find('#frm-newfolder').bind('submit',
function(e){
if ($('#frm-newfolder').find('#f-newfoldername').val() == '') {
alert('Chưa nhập tên thư mục mới!');
}else {
var postData = $('#box-newfolder').find('#frm-newfolder').serializeArray();
var script = 'ajax/privatecontent/createdir';
sendCommand({
script: script,
postdata:postData,
callbackSuccess: function (parsedData) {
createNode({
id: parsedData.id,
name: parsedData.name,
curentNode: currentObj,
hidden: false,
addToJSONData:true});
o.tree.createDir(parsedData);
}
});
$('#box-newfolder').modal('hide');
}
e.preventDefault();
});
$('#box-newfolder').on('show.bs.modal', function () {
$('#box-newfolder').find('#frm-newfolder').get(0).reset();
});
$('#box-newfolder').on('shown.bs.modal', function () {
$('#box-newfolder').find('#frm-newfolder').find('#f-newfoldername').focus();
});
$('#box-newfolder').find('#btn-submit-newfolder').bind('click',
function (){
$('#box-newfolder').find('#frm-newfolder').submit();
});
}
var keyboardRename = function () {
$(document).bind('keydown','keypress', function(e) {
var selectedItem = $('.selector.selected').parent();
switch( e.keyCode ) {
case 113:
rename(selectedItem);
break;
case 27:
cancelRename(selectedItem);
break;
default:
break;
}
});
}
var showShareModal = function (obj) {
if (obj.type == undefined || obj.type == null) obj.type = 'directory';
$(o.sharemodal).modal('show');
$(o.sharemodal).find('INPUT#txtSelectedObj').val(obj.name);
$(o.sharemodal).find('.modal-header').text('Chia sẻ ' + (obj.type == 'directory'?'thư mục ':'file ') + obj.name);
}
var showCopyModal = function (obj, action) {
var modalTitle = action == 'copy' ? 'Sao chép ' + (obj.type == 'directory'?'thư mục ':'file ') + obj.name:'Di chuyển ' + (obj.type == 'directory'?'thư mục':'file') + ' ' + obj.name
var submitTitle = action == 'copy' ? 'Sao chép' : 'Di chuyển';
var submitIcon = action == 'copy' ? '' : '';
//btn-primary
$(o.copymodal).modal('show');
$(o.copymodal).find('INPUT#txtSelectedObj').val(obj.name);
$(o.copymodal).find('.modal-header').text(modalTitle);
$(o.copymodal).find('.btn-primary').empty();
$(o.copymodal).find('.btn-primary').append(submitIcon + "\n" + submitTitle);
var selectTree = $(o.copymodal).find('#select-destination-tree').violetTree({
container: $('#select-destination-tree'),
expandEasing: 'easeOutBounce',
collapseEasing: 'easeOutBounce',
homeDirNameDisplay: "Thư mục gốc",
contextmenuON: false
});
$(o.copymodal).find('.btn-primary').button().click(function() {excuteCopy(obj, selectTree, action)})
$(o.copymodal).on('hide.bs.modal', function () {
$(o.copymodal).find('.btn-primary').unbind('click');
});
}
var excuteCopy = function (obj, tree, action) {
var destObj = tree.getSelectedObj();
//sendCommand
var postdata = {sourceid:obj.id,
sourcetype:obj.type,
destid: destObj.id,
desttype: destObj.type,
flag:action}
sendCommand({
script:'ajax/privatecontent/copy',
postdata:postdata,
callbackSuccess: function (parsedData) {
if (parsedData.RESULT == true) {
//please add code here
}else return false;
}
});
}
var itemClick = function (i) {
$(i).parent().find('.selector').removeClass('selected');
$(i).parent().find('.selector').addClass('unselected');
$(i).parent().find('.file-name').removeClass('selected');
$(i).parent().find('.file-name').addClass('unselected');
$(i).find('.file-name').removeClass('unselected');
$(i).find('.file-name').addClass('selected');
$(i).find('.selector').removeClass('unselected');
$(i).find('.selector').addClass('selected');
if ($(i).find('.file-name').text() != '')
currentObj.name = $(i).find('.file-name').text();
currentObj.id = $(i).attr('rel').substring(3);
currentObj.type = $(i).find('>div>div').hasClass('icon-directory') ? 'directory':'file';
var item = searchItemByID(currentObj.id, currentObj.type);
currentObj.parentID = item.parentID;
}
var doubleClick = function (i) {
var rel = $(i).attr('rel');
if ($(i).hasClass('directory')) {
var id = rel.substring(3, rel.length);
o.curentParent = o.dirIDprefix + id;
renderGrid(o);
o.tree.openTreeOffset(id);
}
}
var searchItemByID = function (itemID, type) {
var source = (type == 'directory') ? o.directoryTreeData.DIRECTORIES : (type == 'file') ? o.directoryTreeData.FILES : null;
var item = {};
if (itemID == 0) {
item.id = 0;
item.parentID = 0;
item.name = 'Home';
}
else {
for (var i = 0 ; i < source.length; i++) {
if (source[i].id == itemID) {
item = source[i];
break;
}
}
}
item.type = type;
return item;
}
var renderGrid = function (o) {
$(o.container).find ('.vscell').remove();
var childDir = o.directoryTreeData.DIRECTORIES;
var childFile = o.directoryTreeData.FILES;
var currentDirID = o.curentParent.substring(o.dirIDprefix.length, o.curentParent.length);
var disabledItemsList = ['preview','rename','copy','cut','delete','open'];
var item = searchItemByID(currentDirID,'directory');
$(o.container).contextMenu({
menu: 'gridMenuParent',
disabledItems: disabledItemsList
}, function(action, el, pos) {
switch(action) {
case 'newfolder':
openNewFolderModal(item);
break;
case 'share':
showShareModal(item);
break;
default:
break;
}
});
for (var i = 0 ; i < childDir.length; i++) {
if (childDir[i].parentID != currentDirID) continue;
createNode ({
id: childDir[i].id,
name: childDir[i].name,
parentID: currentDirID,
});
}
for (var i = 0 ; i < childFile.length; i++) {
if (childFile[i].parentID != currentDirID) continue;
createNode ({
id: childFile[i].id,
name: childFile[i].name,
parentID: currentDirID,
minetype: childFile[i].minetype,
});
}
keyboardRename();
bindCreateFolder();
}
var rename = function (e) {
var nameObj = $(e).find('.file-name');
var editor = document.createElement ('INPUT');
editor.type = 'text';
editor.className = 'rename';
$(nameObj).text('');
$(nameObj).append(editor);
$(editor).attr('value', currentObj.name);
editor.focus();
$(editor).select();
$(editor).bind('focusout',function (e) {
cancelRename($(this).parent().parent());
});
$(editor).bind('keypress',function (e) {
var keycode = (e.keyCode ? e.keyCode : e.which);
if(keycode == '13'){
completeRename($(this).parent());
}
else {
}
e.stopPropagation();
});
}
var cancelRename = function (e) {
$(e).find('INPUT.rename').remove();
$(e).find('.file-name').text(currentObj.name);
}
var completeRename = function (e) {
var postdata = {id:currentObj.id,
objtype:currentObj.type,
newname:$(e).find('INPUT.rename').val()}
sendCommand({
script:'ajax/privatecontent/rename',
postdata:postdata,
callbackSuccess: function (parsedData) {
if (parsedData.RESULT == true) {
currentObj.name = parsedData.UPDATED.name;
$(e).find('INPUT.rename').remove();
$(e).text(currentObj.name);
}else return false;
}
});
}
var sendCommand = function (p) {
if( p.postdata == undefined ) p.postdata = null;
if( p.script == undefined ) p.script = o.script;
if( p.callbackSuccess == undefined ) p.callbackSuccess = null;
if( p.callbackDone == undefined ) p.callbackDone = null;
if( p.callbackFail == undefined ) p.callbackFail = null;
if( p.callbackAlways == undefined ) p.callbackAlways = null;
if (p.script != null) {
$.post(o.host + p.script, p.postdata, function (data){
if (data) {
parseData = $.parseJSON(data);
}
if (p.callbackSuccess != null) {
p.callbackSuccess(parseData);
}
}).done(function() {if (p.callbackDone != null)p.callbackDone(this);}).fail(function() {if (p.callbackFail != null)p.callbackFail(this);}).always(function() {if (p.callbackAlways != null)p.callbackAlways(this);});
}
}
this.setData = function (data) {
o.directoryTreeData = data.directoryTreeData;
o.curentParent = data.curentParent;
o.dirIDprefix = data.dirIDprefix;
renderGrid(o);
}
this.setTree = function (treeObj) {
o.tree = treeObj;
}
this.showModal = function (obj, act) {
switch( act ) {
case 'newfolder':
openNewFolderModal(obj);
break;
case 'copy':
case 'cut':
showCopyModal(obj, act);
break;
case 'share':
showShareModal(obj);
break;
default:
break;
}
}
this.searchItem = function (id, type) {
return searchItemByID (id, type);
}
this.initialize = function() {
return this;
};
return this.initialize();
}
});
})(jQuery);