function copytoclipboard() {
var text = $("#showStringValue").val();
$("#notification").text("Texten har kopierat till Urklipp");
copyText(text);
}
function copyText(text) {
function selectElementText(element) {
if (document.selection) {
var range = document.body.createTextRange();
range.moveToElementText(element);
range.select();
} else if (window.getSelection) {
var range = document.createRange();
range.selectNode(element);
window.getSelection().removeAllRanges();
window.getSelection().addRange(range);
}
}
var element = document.createElement('DIV');
element.textContent = text;
document.body.appendChild(element);
selectElementText(element);
document.execCommand('copy');
element.remove();
}
function createTree() {
// console.log("create tree");
$.getJSON(
'/ajax/folderAndDocumentList_editPage.php?pageId=' + intPageId,
function (data) {
function addEmptyPlaceholders(nodes) {
for (var i = 0; i < nodes.length; i++) {
if (nodes[i].file == undefined) {
if (!nodes[i].children || nodes[i].children.length === 0) {
nodes[i].children = [{ name: 'Mappen är tom', emptyPlaceholder: true }];
} else {
addEmptyPlaceholders(nodes[i].children);
}
}
}
}
addEmptyPlaceholders(data);
$('#documentListAllPage').tree({
data: data,
autoOpen: true,
dragAndDrop: true,
openedIcon: '∨',
closedIcon: '❯',
onCreateLi: function (node, li) {
if (node.emptyPlaceholder) {
li.find('.jqtree-element .jqtree-title').css({'font-style':'italic','color':'#999'});
li.find('.jqtree-element').css('cursor','default');
return;
}
if (node.file != undefined) {
var strFileIconHtml = UI.fileIcon(node.name);
li.find('.jqtree-element').append(
" " + strFileIconHtml + " " +
" " +
"
" +
" " + node.fileSize + " " + node.dateCreated + "" +
" " +
"
"
);
} else {
li.find('.jqtree-title').prop("title", strInfoEditFolder);
li.find('.jqtree-element').append(
"
" +
"" +
" " +
"" +
""
);
}
},
onCanMoveTo: function (moved_node, target_node, position) {
if (target_node.file && position == "inside") {
return false;
}
//forbid moving more then 3 level
//Here we calculate depth: Moved node children + Target node parents
var depth = 0;
var movedNodeTmp = moved_node;
while (movedNodeTmp.children.length != 0) {
depth++;
var movedNodeNext = movedNodeTmp.children[0];
for (var i = 0; i < movedNodeTmp.children.length; i++) {
if (movedNodeTmp.children[i].length != 0) {
movedNodeNext = movedNodeTmp.children[i];
}
}
movedNodeTmp = movedNodeNext;
}
while (target_node.parent != null) {
depth++;
target_node = target_node.parent;
}
if ((depth > 2 && moved_node.file != true)) {
// console.log("Stopped at depth " + depth);
return false;
}
// console.log("Depth: " + depth);
return true;
}
});
$('#documentListAllPage').bind('tree.open', function(e) {
$(e.node.element).children('.jqtree-element').find('.dms-folder-icon').first().attr('src','/images/fileicons/folder-open.svg');
});
$('#documentListAllPage').bind('tree.close', function(e) {
$(e.node.element).children('.jqtree-element').find('.dms-folder-icon').first().attr('src','/images/fileicons/folder.svg');
});
}
);
}
$(window).on("load", function () {
// Redactor 4 initialization
if (typeof Redactor !== "undefined") {
var _brfslug = window.location.pathname.split('/').filter(Boolean)[0] || '';
var r4config = {
lang: "sv",
theme: "light",
toolbar: { stickyTopOffset: 62 },
plugins: ['wordpaste', 'listindent', 'fontsize', 'fontcolor', 'ai', 'imageresize', 'help'],
buttons: {
toolbar: ['add', 'ai-tools', 'html', 'format', 'bold', 'italic', 'moreinline', 'list', 'link', 'image', 'table', 'highlight'],
context: ['ai-tools', 'format', 'bold', 'italic', 'moreinline', 'link']
},
popups: {
inline: ['underline', 'deleted', 'code', 'sub', 'sup', 'removeinline']
},
ai: Object.assign({}, window.RedactorAISv || {}, {
text: {
url: '/ajax/redactor/ai_proxy.php?brfslug=' + _brfslug,
endpoint: 'https://api.openai.com/v1/chat/completions',
model: 'gpt-5.4-mini-2026-03-17',
stream: false,
data: { remotetable: 'page', remoteid: (typeof pageIdUpload !== "undefined") ? pageIdUpload : 0, remotepage: window.location.pathname }
},
image: {
url: '/ajax/redactor/ai_proxy.php?brfslug=' + _brfslug,
endpoint: 'https://api.openai.com/v1/images/generations',
model: 'dall-e-3',
save: '/ajax/redactor/ai_save_image.php?brfslug=' + _brfslug,
data: { pageId: (typeof pageIdUpload !== "undefined") ? pageIdUpload : 0, remotetable: 'page', remoteid: (typeof pageIdUpload !== "undefined") ? pageIdUpload : 0, remotepage: window.location.pathname }
}
})
};
if (pageIdUpload > 0) {
r4config.image = {
upload: '/ajax/redactor/uploadimage_redactor.php?brfslug=' + _brfslug,
select: '/ajax/redactor/image_list.php?brfslug=' + _brfslug,
data: { pageId: pageIdUpload }
};
}
Redactor("#input-content", r4config);
}
$('#documentListAllPage').bind(
'tree.move',
function (event) {
event.preventDefault();
// do the move first, and _then_ POST back.
event.move_info.do_move();
$.post('/ajax/save_folderAndDocumentList.php', {tree: $(this).tree('toJson'), pageId: intPageId});
}
);
$('#rename-folder').on('shown.bs.modal', function () {
$('#folder_name').focus();
});
$('#documentListAllPage').bind(
'tree.dblclick',
function (event) {
if (event.node != undefined) {
if (event.node.file == undefined) {
$("#folder_name").val(event.node.name);
$("#folder_id").val(event.node.id);
$("#rename-folder").modal('show');
} else {
// console.log(location);
var filename = filenameById(event.node.id, event.node.name);
copyText(filename);
showNotification("Link to the document is copied in clipboard");
//prompt("Copy filename for sharing purposes",filename);
//$("#showStringValue").val(filename);
//$("#showString").modal();
}
}
}
);
// Only load the file tree immediately if the file manager panel is already
// visible. When collapsed, the tree is loaded on first expand instead
// (see eg-file-manager-body show.bs.collapse handler in sidaRedigera.php).
var strFmKey = "egFileManager_" + intPageId;
if (!document.getElementById("eg-file-manager-body") || localStorage.getItem(strFmKey) === "open") {
setTimeout(function () {
createTree();
}, 2000);
}
});
function filenameById(id, name) {
name = name || "";
// var filename = location.origin + "/" + strBrfSlug + "/dokument/id/" + id + "/file/" + encodeURI(name);
var filename = location.origin + "/" + strBrfSlug + "/dokument/id/" + id + "/file/" + encodeURI(name);
return filename;
}
function modalFilename(id, name) {
filename = filenameById(id, name);
//prompt("Copy filename for sharing purposes", filename);
$("#showStringValue").val(filename);
$("#showString").modal();
}
function showNotification(notification) {
$("#notificationBox").html(notification).fadeIn(500).delay(750).fadeOut(1500);
}
function submitFolderNameChange() {
// console.log("start renaming");
if ($("#folder_name").val().trim().length < 1) {
$("#rename_message").show().text(strInfoRenameNothingEntered);
//setTimeout(function () {
// $("#rename_message").fadeOut();
//}, 5000);
// console.log("renaming stopped");
return;
} else if ($("#folder_name").val().trim().length > 30) {
$("#rename_message").show().text("Mappens namn får vara max 30 tecken.");
setTimeout(function () {
$("#rename_message").fadeOut();
}, 5000);
return;
}
$.ajax({
type: "POST",
url: strCurrentUrl + "#files",
data: {
folder_name: $("#folder_name").val(),
folder_id: $("#folder_id").val(),
action: "rename_folder"
},
success: function (data) {
// console.log("renaming done");
reloadTree(0);
$("#rename-folder").modal('hide');
// window.location.reload();
}
});
}
function closeFolderRename() {
//window.location.reload();
$("#rename-folder").hide();
}
$("#rename-folder").hide();
function addFolder(folderName) {
folderName = folderName || document.getElementById("folder").value;
if (!folderName || folderName.trim().length === 0) {
$("#add_folder_message").text("Ange ett mappnamn").show();
return;
}
$.ajax({
type: "POST",
url: strCurrentUrl + "#files",
data: {
folder_name: folderName,
folder_action: "add_folder",
action: "add_folder"
},
success: function (data) {
// Close modal first, then clean up
$("#add-folder-modal .btn-close").click();
setTimeout(function () {
document.getElementById("folder").value = "";
$("#add_folder_message").hide();
}, 300);
showNotification("Mappen \"" + folderName + "\" skapades");
reloadTree(500);
}
});
}
function confirmDmsDelete(strTitle, strMessage, fnOnConfirm, strBtnLabel) {
strBtnLabel = strBtnLabel || ' Radera';
$("#confirmDmsDeleteTitle").text(strTitle);
$("#confirmDmsDeleteMessage").text(strMessage);
$("#confirmDmsDeleteBtn").html(strBtnLabel).off("click").on("click", function () {
$("#confirmDmsDeleteModal").modal("hide");
fnOnConfirm();
});
$("#confirmDmsDeleteModal").modal("show");
}
function deleteFile(fileId) {
confirmDmsDelete("Radera fil", "Är du säker på att du vill radera denna fil?", function () {
$.ajax({
type: "POST",
url: window.location.href,
data: {
deleteFile: fileId,
url: window.location.href,
action: "delete_file"
},
success: function (data) {
data = data.split("")[0];
var node = $('#documentListAllPage').tree('getNodeById', fileId);
$('#documentListAllPage').tree('removeNode', node);
if (data.indexOf("SUCCESS") != -1) {
reloadTree(0);
egUpdateFileManagerState();
} else {
confirmDmsDelete("Fel", "Filen kunde inte raderas.", function () {}, "OK");
reloadTree(0);
}
}
});
});
}
function deleteFolder(folderId) {
// First check if the folder can be deleted (is it empty?)
$.ajax({
type: "POST",
url: window.location.href,
data: {
deleteFolder: folderId,
url: window.location.href,
action: "delete_folder",
check: "1"
},
success: function (data) {
data = data.split("")[0];
if (data.indexOf("NOTEMPTY:") != -1) {
var strContent = data.split("NOTEMPTY:")[1];
confirmDmsDelete("Kan inte radera", "Mappen innehåller " + strContent + ". Töm mappen innan du raderar den.", function () {}, "OK");
} else if (data.indexOf("EMPTY") != -1) {
confirmDmsDelete("Radera mapp", "Är du säker på att du vill radera denna mapp?", function () {
$.ajax({
type: "POST",
url: window.location.href,
data: {
deleteFolder: folderId,
url: window.location.href,
action: "delete_folder"
},
success: function (data) {
data = data.split("")[0];
if (data.indexOf("SUCCESS") != -1) {
var node = $('#documentListAllPage').tree('getNodeById', folderId);
$('#documentListAllPage').tree('removeNode', node);
reloadTree(0);
egUpdateFileManagerState();
} else {
confirmDmsDelete("Fel", "Mappen kunde inte raderas.", function () {}, "OK");
reloadTree(0);
}
}
});
});
} else {
confirmDmsDelete("Fel", "Mappen kunde inte raderas.", function () {}, "OK");
}
}
});
}
// Update file count badge and module previews after file/folder changes
function egUpdateFileManagerState() {
// Update the file count badge by counting tree nodes of type "file"
var $tree = $('#documentListAllPage');
if ($tree.length && $tree.tree) {
setTimeout(function() {
var intCount = 0;
try {
$tree.tree('getTree').iterate(function(node) {
if (!node.children || node.children.length === 0) intCount++;
return true;
});
} catch(e) { /* tree not initialized yet */ }
var $badge = $('.eg-file-count-badge');
if (intCount > 0) {
$badge.text(intCount + (intCount === 1 ? ' fil' : ' filer')).show();
} else {
$badge.hide();
}
}, 500); // wait for tree reload
}
// Refresh module previews (documents module shows file list)
if (typeof window.egRefreshModuleList === "function") {
window.egRefreshModuleList(false);
}
}
var treeData = null;
function reloadTree(intDelay) {
intDelay = typeof intDelay !== 'undefined' ? intDelay : 1000;
setTimeout(function () {
$.get('/ajax/folderAndDocumentList_editPage.php?pageId=' + intPageId, function (data) {
json = JSON.parse(data);
treeData = data;
console.log("data:", json);
$('#documentListAllPage').tree('loadData', json, null, function () {
alert("data is loaded");
});
});
/*
if ($('#documentListAllPage').tree('loadDataFromUrl', '/ajax/folderAndDocumentList_editPage.php?pageId='+intPageId) == null) {
console.log("reload tree");
createTree();
} else {
console.log("cannot load tree data");
}*/
}, intDelay);
}
function initTree() {
console.log("setting up DMS tree");
$.getJSON(
'/ajax/folderAndDocumentList_editPage.php?pageId=' + intPageId,
function (data) {
var hasFiles = false;
function addEmptyPlaceholders(nodes) {
for (var i = 0; i < nodes.length; i++) {
if (nodes[i].file == undefined) {
if (!nodes[i].children || nodes[i].children.length === 0) {
nodes[i].children = [{ name: 'Mappen är tom', emptyPlaceholder: true }];
} else {
addEmptyPlaceholders(nodes[i].children);
}
}
}
}
addEmptyPlaceholders(data);
$('#' + strDivId).tree({
data: data,
autoOpen: false,
openedIcon: '∨',
closedIcon: '❯',
/* dragAndDrop: false,
onCreateLi: function(node, li) {
hasFiles=true;
if(node.file != undefined){
li.find('.jqtree-element').click(function(){
console.log("downloading"+node.id);
documentDownload(node.id);
}).prepend(
" " +
" " +
"
" + node.fileSize + "" +
"
"+
//node.downloadUrl+
//node.fileSize+
//"
Download"+
"
"
);
li.find('.jqtree-title').click(function(){
console.log("downloading"+node.id);
documentDownload(node.id);
}).append(
" " + node.fileSize + "" +
);
}
if(node.file == undefined){
hasFiles=true;
li.find('.jqtree-element .jqtree-title').addClass('relative mb10').append(
" "
);
}
} */
dragAndDrop: true,
onCreateLi: function (node, li) {
if (node.emptyPlaceholder) {
li.find('.jqtree-element .jqtree-title').css({'font-style':'italic','color':'#999'});
li.find('.jqtree-element').css('cursor','default');
return;
}
if (node.file != undefined) {
var strFileIconHtml = UI.fileIcon(node.name);
li.find('.jqtree-element').prepend(
"" +
"" +
"" + strFileIconHtml + " "
);
li.find('.jqtree-title').append(
"" +
" " + node.fileSize + " " + node.dateCreated + "" +
"
"
);
} else {
var intItemCount = node.children ? node.children.filter(function(c){ return !c.emptyPlaceholder; }).length : 0;
var strBadge = intItemCount > 0 ? " " + intItemCount + "" : "";
li.find('.jqtree-title').prop("title", strInfoEditFolder);
li.find('.jqtree-element').prepend(
"
" +
"" +
" " +
" " +
""
);
li.find('.jqtree-title').append(
strBadge +
"
" + node.dateCreated + " "
);
}
},
onCanMoveTo: function (moved_node, target_node, position) {
if (target_node.file && position == "inside") {
return false;
}
//forbid moving more then 3 level
//Here we calculate depth: Moved node children + Target node parents
var depth = 0;
var movedNodeTmp = moved_node;
while (movedNodeTmp.children.length != 0) {
depth++;
var movedNodeNext = movedNodeTmp.children[0];
for (var i = 0; i < movedNodeTmp.children.length; i++) {
if (movedNodeTmp.children[i].length != 0) {
movedNodeNext = movedNodeTmp.children[i];
}
}
movedNodeTmp = movedNodeNext;
}
while (target_node.parent != null) {
depth++;
target_node = target_node.parent;
}
if ((depth > 2 && moved_node.file != true)) {
// console.log("Stopped at depth " + depth);
return false;
}
// console.log("Depth: " + depth);
return true;
}
});
$('#' + strDivId).bind('tree.click', function(event) {
var $clickTarget = $(event.click_event.target);
if ($clickTarget.closest('.dms-action-btn').length) {
event.preventDefault();
return;
}
if (event.node && event.node.file == undefined) {
event.preventDefault();
$(this).tree('toggle', event.node);
}
});
$('#' + strDivId).bind('tree.open', function(e) {
$(e.node.element).children('.jqtree-element').find('.dms-folder-icon').first().attr('src','/images/fileicons/folder-open.svg');
});
$('#' + strDivId).bind('tree.close', function(e) {
$(e.node.element).children('.jqtree-element').find('.dms-folder-icon').first().attr('src','/images/fileicons/folder.svg');
});
if (hasFiles) {
if (strDivId != "documentListAllPage") $("#" + strDivId).prepend("");
$("#" + strDivId).show();
console.log("Has files");
}
}
);
}
setTimeout(function () {
//reloadTree(9);
initTree();
}, 1000);
function uploadAll(event, form) {
event = event || window.event;
event.preventDefault();
var d = new FormData(form);
console.log('formdata', d);
$.ajax({
url: "/ajax/uploadfileorimage.php",
type: 'POST',
data: d,
processData: false,
contentType: false,
success: function (data) {
$("#uploadStatus").html(data).fadeIn().delay(1500).fadeOut("slow");
renewImages();
reloadTree();
form.reset();
},
error: function (data) {
if (data && data.responseText) {
console.log("ERROR", data, data.responseText);
$flash = UI.buildFlash({header: 'Error', text: data.responseText, type: 'danger'});
$('#uploadFlash').html($flash);
setTimeout(function () {
$('#uploadFlash').fadeOut("slow", function () {
$('#uploadFlash').html("").fadeIn()
});
}, 3000);
}
}
});
return false;
}