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( "folder " + "" + " " + "" + "" ); } }, 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( "folder " + "" + " " + " " + "" ); 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("

" + //""+ // edit icon page "" + strTitle + "

"); $("#" + 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; }