/**
* Druga wersja pluginu:
* - usunięte element zwiazane z sekcjami - zostaną przeniesione do innego pluginu
* - dropbox do uploadu plików
* - osobna karta do ładowania pluginów z ustawieniem url'a
* - widok miniatur z checkboxem
*/
(function ($) {
Array.prototype.inArray = function (value) {
// Returns true if the passed value is found in the
// array. Returns false if it is not.
var i;
for (i = 0; i < this.length; i++) {
if (this[i] == value) {
return true;
}
}
return false;
};
$.fn.bitResource = function (options) {
return this.each(function () {
if (undefined == $(this).data('bitResource')) {
var plugin = new $.bitResource(this, options);
$(this).data('bitResource', plugin);
}
});
};
$.bitResource = function (element, options) {
var $element = $(element);
var plugin = this;
var defaults = {
/**
* Filtr formatów: klucz określa nazwę, wartość (tablica) - rozszerzenia formatów,
* filterFormat: {
* Obrazy: ['bmp','png'],
* PDF: ['pdf'],
* 'Dokumenty worda': ['docx','doc'],
* Filmy: {
* extensions: ['avi','flv','mp4'],
* active: true,
* disabled: true
* }
* }
*/
title: 'Lista sekcji', //Tytuł okna
filterFormat: {}, //filtrowanie formatów
selectedId: null, // ID sekcji która ma być zaznaczona i pobrana
treeviewMaxHeight: null, // maxymalna wysokość drzewa
filesMaxHeight: null, //maksymalna wysokość okna z plikami
dirsUrl: '/resource/index/get-dirs', //url pobierania plików
dirsType: 'Zasoby', // 'Zasoby' lub 'Sekcje' //typ plików (na potrzeby akcji .../get-dirs)
filesUrl: '/resource/index/get-resources',
uploadUrl: '/resource/index/upload-file',
searchContainers: false,
searchFiles: false,
upload: false,
hideResource: false,
hideTree: false,
displayActions: false,
containerInfoUrl: '/resource/index/get-container-info',
pageInfoUrl: '/resource/index/get-page-info',
filePresentation: 'miniatures', // 'miniatures', 'list'
componentId: 'bitresource-' + Math.floor((Math.random() * 999999) + 1),
currentNodeInputId: 'hidden-container-id',
dropzone: false, // zakładka dropzone
dropzoneUrl: '/', // adres url wysyłanych plików
dropzoneSuccessCallback: function (file, response) {
},
dropzoneErrorCallback: function (file, response) {
},
dropzoneAcceptCallback: function (file, done) {
done();
},
dropzonePostParams: {},
/**
* pliki można zaznaczyć
*/
filesCheckable: false,
onlyOneFile: false,
jsTreeCallback: function (tree) {
},
jsTreeCache: true,
//źródła bibliotek
pathSource: {
css: {
dropzoneCss: '/assets/css/dropzone.css',
jsTreeCss: '/js/jstree/dist/themes/default/style.css',
resourceCss: '/app/css/resource/index/index.css'
},
js: {
dropzoneJs: '/assets/js/dropzone.min.js',
jsTreeJs: '/js/jstree/dist/jstree.min.js',
bitFileContainer: '/app/js/bit.fileContainer.js'
}
},
// Czy prezentować strony w sekcji
showPagesInTree: false,
sort: false,
changeListType: false,
canGeneratePdf: false
};
plugin.settings = {}; //ustawienia pluginu
var selectedElements = {}; //zaznaczone elementy {tablica asocjacyjna: klucz - id zasobu, wartość obiekt z wierszem z bazy danych} - filesCheckable, pobieranie przez metode getSelected
var currentDir = null; //id aktualnego elementu drzewa
var currentDirType = null; //typ aktualnego elementu drzewa
var libraries = [];
var $treeview = null;
var filteredFormats = []; //zmienne filtrów
var searchContainerString = '', searchFilesString = ''; //zmienne wyszukiwarek
//private methods
/**
* Tworzy szkielet
* (elementy z klasami br-* są kluczowe - w nich umieszczane są poszczególne komponenty)
*/
function createSkeleton() {
var $html = $('
' +
'' +
'
');
if (!plugin.settings.hideTree) {
var skeletonUrlFile = plugin.settings.displayActions ?
'/app/js/bitresource2/html/jsTreeSkeletonWithActions.html'
: '/app/js/bitresource2/html/jsTreeSkeleton.html';
var lgn1 = plugin.settings.hideResource ? '12' : '4';
jQuery.ajax({
url: skeletonUrlFile,
success: function (html) {
$html.find('.row').append(html);
},
async: false
});
}
if (!plugin.settings.hideResource) {
var lgn2 = plugin.settings.hideTree ? '12' : '8';
jQuery.ajax({
url: '/app/js/bitresource2/html/jsTreeFilesSkeleton.html',
success: function (html) {
$html.find('.row').append(html);
},
async: false
});
}
if (plugin.settings.filePresentation == 'miniatures') {
$html.find('.files-list').addClass('ace-thumbnails clearfix filter-show-all');
}
if (plugin.settings.treeviewMaxHeight) {
$html.find('.br-treeview').css('max-height', plugin.settings.treeviewMaxHeight);
}
if (plugin.settings.filesMaxHeight) {
$html.find('.br-content').css({
'max-height': plugin.settings.filesMaxHeight,
overflow: 'auto'
});
}
$html.find('.widget-title').html(plugin.settings.title);
$element.append($html);
}
/**
* Tworzy widok drzewa.
*
* @param element
* @param simple - Jeśli true nie są podpiane zdarzenie przy onchange i ready
*/
function createTreeBox(element, simple) {
var $treeview = element;
$treeview.jstree({
'core': {
multiple: false,
'data': {
url: plugin.settings.dirsUrl,
data: function (node) {
if (node.id !== '#') {
return {
id: node.li_attr['data-id'],
type: plugin.settings.dirsType,
showPages: plugin.settings.showPagesInTree ? 1 : 0,
selected: plugin.settings.selectedId
};
} else {
return {
id: 0,
search: searchContainerString,
type: plugin.settings.dirsType,
showPages: plugin.settings.showPagesInTree ? 1 : 0,
selected: plugin.settings.selectedId
};
}
}
},
'strings': {
'Loading ...': 'Proszę czekać...'
},
'check_callback': function (o, n, p, i, m) {
if (m && m.dnd && m.pos !== 'i') {
return false;
}
if (o === "move_node" || o === "copy_node") {
if (this.get_node(n).parent === this.get_node(p).id) {
return false;
}
}
return true;
}
},
plugins: [
// plugin.settings['jsTreeCache'] ? "state" : null,
"types",
plugin.settings.displayActions ? "contextmenu" : null,
"themes",
"html_data",
"ui"
],
contextmenu: {
items: function (node) {
return setContextMenuActions(node);
}
}
});
if (!simple) {
$treeview.on("changed.jstree", function (e, data) {
if (typeof data.node !== 'undefined') {
//set current dir
currentDir = data.node.li_attr['data-id'];
currentDirType = data.node.li_attr['data-type'];
if (plugin.settings.displayActions) {
setTopToolbarActionsAllowed(data.node);
}
//get folder files
getDirFiles(currentDir);
$('#' + plugin.settings.componentId + '-hidden-upload-container-id').val(currentDir).trigger('change');
$('#' + plugin.settings.componentId + ' .' + plugin.settings.currentNodeInputId).val(currentDir).trigger('change');
}
}).on('ready.jstree', function () {
$treeview.jstree(true).deselect_all();
$treeview.jstree(true).select_node('jstree-node-300');
plugin.settings['jsTreeCallback']($treeview);
$('#' + plugin.settings.componentId).closest('.tabbable').find('.nav-tabs li').removeClass('hidden');
}).on('changed.jstree', function () {
$('#show-file-uploader2').prop('disabled', false);
});
}
}
function setContextMenuActions(node) {
var items = {};
if (node.li_attr['data-new'] == true) {
items.addItem = {
label: "Dodaj",
action: function () {
$element.find('#add-node').click();
}
};
}
if (node.li_attr['data-edit'] == true) {
items.editItem = {
label: "Edytuj",
action: function () {
$element.find('#edit-node').click();
}
};
}
if (node.li_attr['data-delete'] == true) {
items.deleteItem = {
label: "Usuń",
action: function () {
$element.find('#remove-node').click();
}
};
}
if ($(node).hasClass("folder")) {
// Delete the "delete" menu item
delete items.deleteItem;
}
return items;
}
function setTopToolbarActionsAllowed(node) {
var $treeview = $element.find('.br-treeview');
if (node.li_attr['data-new'] == true) {
setEnabled($element.find('#add-node'));
createNewActionHandler($treeview);
} else {
setDisabled($element.find('#add-node'));
}
if (node.li_attr['data-edit'] == true) {
setEnabled($element.find('#edit-node'));
createEditActionHandler($treeview);
} else {
setDisabled($element.find('#edit-node'));
}
if (node.li_attr['data-delete'] == true) {
setEnabled($element.find('#remove-node'));
createDeleteActionHandler($treeview);
} else {
setDisabled($element.find('#remove-node'));
}
}
function setDisabled(node) {
node.unbind('click');
node.css('cursor', 'no-drop');
node.css('opacity', '0.65');
}
function setEnabled(node) {
node.unbind('click');
node.css('cursor', '');
node.css('opacity', '');
}
/**
* pobiera listę plików aktualnego katalogu
* @param node
*/
function getDirFiles(id) {
$filesBox = $element.find('.br-files ul');
//$filesBox = $('.files-list ul');
if ($filesBox)
$filesBox.empty();
var _data = {
id: id
};
if (plugin.settings.sort) {
var _sortBtn = $element.find('.sort-buttons').find('.sort_button.active');
var _sortBtnClass = _sortBtn.attr('class').split(' ');
_data.sn = _sortBtnClass.shift();
_data.sd = _sortBtnClass.reverse().shift();
}
if(plugin.settings.dirsType === 'Zasoby'){
$.ajax({
type: 'POST',
url: plugin.settings.filesUrl,
data: _data,
success: function (data) {
var $fEmpty = $element.find('.br-files .f-empty');
$fEmpty.remove();
if (data.length) {
$(data).each(function (i, v) {
var $eee = createFileElement(v);
$filesBox.append($eee);
});
filterRun();
} else {
$filesBox.append('
Brak elementów
');
}
}
});
}
}
/**
* pobiera listę plików aktualnego katalogu
* @param node
*/
function getSearchedFiles(string) {
$filesBox = $element.find('.br-files ul');
if ($filesBox)
$filesBox.empty();
$.ajax({
type: 'POST',
url: plugin.settings.filesUrl,
data: {string: string},
success: function (data) {
var $fEmpty = $element.find('.br-files .f-empty');
$fEmpty.remove();
if (data.length) {
$(data).each(function (i, v) {
var $eee = createFileElement(v);
$filesBox.append($eee);
});
} else {
$filesBox.append('
Brak wyników wyszukiwania
');
}
filterRun();
}
});
}
function clearMark() {
//Zdjęcie znacznika
$('.files-list li input:checkbox').each(function () {
var _this = $(this);
_this.prop('checked', false);
_this.parent().addClass('hidden');
});
}
/**
* tworzy pojedyńczy element
* @param data
* @returns {*|HTMLElement}
*/
function createFileElement(data) {
if (plugin.settings.filePresentation == 'miniatures') {
var FileCntnr = new FilesContainer();
var fileImage = FileCntnr.fileImagePath(data);
var fSize = FileCntnr.fileSize(data);
var html = '