function execDocReady() { var pluginGroups = [ [ "../reference/lightblue4/docs/lib/widgster/widgster.js", "../reference/lightblue4/docs/lib/slimScroll/jquery.slimscroll.min.js", "../reference/jquery-plugins/jstree-v.pre1.0/_lib/jquery.cookie.js", "../reference/jquery-plugins/jstree-v.pre1.0/_lib/jquery.hotkeys.js", "../reference/jquery-plugins/jstree-v.pre1.0/jquery.jstree.js", "../reference/jquery-plugins/stompjs-develop/bundles/stomp.umd.min.js", "../reference/jquery-plugins/sockjs-client-main/dist/sockjs.min.js", "../reference/jquery-plugins/datetimepicker-2.5.20/build/jquery.datetimepicker.min.css", "../reference/light-blue/lib/bootstrap-datepicker.js", "../reference/jquery-plugins/datetimepicker-2.5.20/build/jquery.datetimepicker.full.min.js" ], [ "../reference/jquery-plugins/dataTables-1.10.16/media/css/jquery.dataTables_lightblue4.css", "../reference/jquery-plugins/dataTables-1.10.16/extensions/Responsive/css/responsive.dataTables_lightblue4.css", "../reference/jquery-plugins/dataTables-1.10.16/extensions/Select/css/select.dataTables_lightblue4.css", "../reference/jquery-plugins/dataTables-1.10.16/media/js/jquery.dataTables.min.js", "../reference/jquery-plugins/dataTables-1.10.16/extensions/Responsive/js/dataTables.responsive.min.js", "../reference/jquery-plugins/dataTables-1.10.16/extensions/Select/js/dataTables.select.min.js", "../reference/jquery-plugins/dataTables-1.10.16/extensions/RowGroup/js/dataTables.rowsGroup.min.js", "../reference/jquery-plugins/dataTables-1.10.16/extensions/Buttons/js/dataTables.buttons.min.js", "../reference/jquery-plugins/dataTables-1.10.16/extensions/Buttons/js/buttons.html5.js", "../reference/jquery-plugins/dataTables-1.10.16/extensions/Buttons/js/buttons.print.js", "../reference/jquery-plugins/dataTables-1.10.16/extensions/Buttons/js/jszip.min.js", "../reference/jquery-plugins/dataTables-1.10.16/extensions/Buttons/js/pdfmake.min.js", "../reference/jquery-plugins/dataTables-1.10.16/extensions/Buttons/js/vfs_fonts.js" ], [ "../reference/jquery-plugins/select2-4.0.2/dist/css/select2_lightblue4.css", "../reference/jquery-plugins/select2-4.0.2/dist/js/select2.min.js", "../reference/jquery-plugins/lou-multi-select-0.9.12/css/multiselect-lightblue4.css", "../reference/jquery-plugins/lou-multi-select-0.9.12/js/jquery.quicksearch.js", "../reference/jquery-plugins/lou-multi-select-0.9.12/js/jquery.multi-select.js", "../reference/jquery-plugins/multiple-select-1.5.2/dist/multiple-select-bluelight.css", "../reference/jquery-plugins/multiple-select-1.5.2/dist/multiple-select.min.js" ], [ "./js/common/table_new.js", "./js/adms/session-manager.js", "./js/adms/wiki-list.js", "./js/adms/editor-operation.js", "./js/adms/vesion-control.js" ] ]; loadPluginGroupsParallelAndSequential(pluginGroups).then(function () { console.log("모든 플러그인 로드 완료"); $(".widget").widgster(); setSideMenu("sidebar_large_menu_ai", "sidebar_medium_menu_ai_adms", "sidebar_small_menu_ai_adms"); //Select2 makePdServiceSelectBox(); //버전 멀티 셀렉트 박스 이니시에이터 makeVersionMultiSelectBox(); var waitCKEDITOR = setInterval(function () { try { if (window.CKEDITOR) { if (window.CKEDITOR.status === "loaded") { CKEDITOR.replace("add_tabmodal_editor"); clearInterval(waitCKEDITOR); } } } catch (err) { console.log("CKEDITOR 로드가 완료되지 않아서 초기화 재시도 중..."); } }, 313 /*milli*/); $("#editor").trigger("init.editor"); $("#wiki_tree").slimScroll({ height: "500px" }); CKEDITOR.instances["editor"].on("contentDom", function (event) { var editor = event.editor; var editable = editor.editable(); editable.attachListener(editor.document, "keyup", function (keyupEvent) { // sessoinManager.remoteUserUpdate(editor.getSelection(), keyupEvent.data.$); sessoinManager.remoteUserUpdate(editor.getData()); }); }); var userInfo = { userId: userID, userName: userName, userColor: generateRandomHexColor() }; var sessoinManager = $.sessionManager(StompJs.Client, SockJS, userInfo); sessoinManager.onContentsChange = function (contents) { // console.log(CKEDITOR.instances["editor"]); // console.log(CKEDITOR.instances["editor"].getSelection().root.$); // console.log(contents); // console.log(contents.cursorPosition.lineNumber); // CKEDITOR.instances["editor"].getSelection().root.$.querySelectorAll("p")[ // contents.cursorPosition.lineNumber // ].textContent = contents.selection.message; CKEDITOR.instances["editor"].setData(contents.selection.message); }; $("#btn_edit_contents").on("click", function () { var $btn = $(this); if ($btn.hasClass("btn-success")) { $btn.removeClass("btn-success").addClass("btn-primary"); $btn.empty(); $btn.append("").append(" 저장"); CKEDITOR.instances["editor"].setReadOnly(false); sessoinManager.setRoom(getWikiId()).done(function () { sessoinManager.openWebsocket(); }); } else { $.ajax({ type: "PUT", url: "/auth-user/api/arms/wiki/updateWiki.do", contentType: "application/json;charset=UTF-8", dataType: "json", data: JSON.stringify({ wikiId: getWikiId(), author: userID, contents: CKEDITOR.instances["editor"].getData() }), success: function () { $btn.addClass("btn-success").removeClass("btn-primary"); $btn.empty(); $btn.append("").append(" 수정"); CKEDITOR.instances["editor"].setReadOnly(true); sessoinManager.closeRoom(); } }); } }); $(".js-data-example-ajax").select2({ maximumSelectionLength: 5, width: "resolve", ajax: { url: function (params) { return "/auth-user/search-user/" + params.term; }, dataType: "json", delay: 250, processResults: function (data, params) { params.page = params.page || 1; return { results: data, pagination: { more: params.page * 30 < data.total_count } }; }, cache: true }, placeholder: "리뷰어 설정을 위한 계정명을 입력해 주세요", minimumInputLength: 1, templateResult: formatUser, templateSelection: formatUserSelection }); $("#save_req").click(function () { var table_name = "T_ARMS_REQADD_" + $("#selected_pdService").val(); var c_type_value; if (isEmpty($("input[name=reqType]:checked").val())) { c_type_value = "default"; } else { c_type_value = $("input[name=reqType]:checked").val(); } var req_title = $("#addview_req_title").val().trim(); if (!req_title) { jError("요구사항 제목이 없습니다."); return false; } var versionset_link = $("#add_multi_version").val(); if (versionset_link.length < 1) { jError("선택된 버전이 없습니다."); return false; } var reviewers01 = getReviewer(0, "addview_req_reviewers"); var reviewers02 = getReviewer(1, "addview_req_reviewers"); var reviewers03 = getReviewer(2, "addview_req_reviewers"); var reviewers04 = getReviewer(3, "addview_req_reviewers"); var reviewers05 = getReviewer(4, "addview_req_reviewers"); var select_req_priority_link = $("#addview_req_priority .btn.active input").val() === undefined ? "5" : $("#addview_req_priority .btn.active input").val(); var select_req_difficulty_link = $("#addview_req_difficulty .btn.active input").val() === undefined ? "5" : $("#addview_req_difficulty .btn.active input").val(); var select_req_state_link = $("#addview_req_state input[name='addview_req_state_options']:checked").val(); if (select_req_state_link === undefined) { jError("요구사항 상태가 선택되지 않았습니다."); return false; } var start_date_value = $("#addview_req_start_date").val(); var c_req_start_date; if (start_date_value) { c_req_start_date = new Date(start_date_value); } var end_date_value = $("#addview_req_end_date").val(); var c_req_end_date; if (end_date_value) { c_req_end_date = new Date(end_date_value); } var data_object_param = { ref: 2, c_title: req_title, c_type: c_type_value, c_req_pdservice_link: $("#selected_pdService").val(), c_req_pdservice_versionset_link: JSON.stringify(versionset_link), c_req_start_date: c_req_start_date, c_req_end_date: c_req_end_date, c_req_writer: "[" + userName + "]" + " - " + userID, c_req_contents: CKEDITOR.instances["add_tabmodal_editor"].getData() }; if (c_type_value === "default") { Object.assign(data_object_param, { c_req_priority_link: select_req_priority_link, c_req_difficulty_link: select_req_difficulty_link, c_req_state_link: select_req_state_link, c_req_reviewer01: reviewers01, c_req_reviewer02: reviewers02, c_req_reviewer03: reviewers03, c_req_reviewer04: reviewers04, c_req_reviewer05: reviewers05, c_req_reviewer01_status: "Draft", c_req_reviewer02_status: "Draft", c_req_reviewer03_status: "Draft", c_req_reviewer04_status: "Draft", c_req_reviewer05_status: "Draft" }); } console.log("save_req :: save data ->"); console.log(data_object_param); var success_message = c_type_value === "default" ? "신규 요구사항 ( " + req_title + " )이 추가되었습니다." : " 요구사항 폴더 ( " + req_title + " )가 등록되었습니다."; $.ajax({ url: "/auth-user/api/arms/reqAdd/" + table_name + "/addNode.do", type: "POST", data: data_object_param, success: function () { var reqLink = new CKEDITOR.dom.element("a", CKEDITOR.instances["editor"].document); reqLink.setAttribute("href", "/arms/detail.html"); reqLink.setAttribute("target", "_blank"); reqLink.$.textContent = CKEDITOR.instances["editor"].getSelection().getSelectedText(); CKEDITOR.instances["editor"].insertElement(reqLink); jSuccess(success_message); } }); }); var $wikiTree = $("#wiki_tree"); $("#btn_create_file").on("click", function () { var selectedWiki = $wikiTree.jstree("get_selected"); if (selectedWiki.length === 0) { selectedWiki = $("#node_2"); } $wikiTree.jstree("create", selectedWiki, "last", { attr: { rel: "default" } }); }); $("#btn_create_folder").on("click", function (obj) { var selectedWiki = $wikiTree.jstree("get_selected"); if (selectedWiki.length === 0) { selectedWiki = $("#node_2"); } $wikiTree.jstree("create", selectedWiki, "last", { attr: { rel: "folder" } }); }); $("#btn_collapse_all").on("click", function () { $wikiTree.jstree("close_all"); }); $("#mmenu .form-search").submit(function (event) { event.preventDefault(); $wikiTree.jstree("search", document.getElementById("text").value); }); resizePanel(); $("#version_table").on("click", ".btn-restore", function (clickEvent) { var $btn = $(clickEvent.target); var row = $btn.data("row"); $.ajax({ type: "GET", url: "/auth-user/api/arms/wiki/" + row.wikiId + "/" + row.version + "/getWiki.do", contentType: "application/json;charset=UTF-8", dataType: "json", success: function (data) { closePanel(); $("#btn_edit_contents").addClass("hidden"); $("#version_warning").removeClass("hidden"); $("#btn_restore_version").data("version", row.version); CKEDITOR.instances["editor"].setData(data.contents); } }); }); $("#btn_latest_version").on("click", function () { var $btn = $("#btn_edit_contents"); $btn.addClass("hidden btn-success").removeClass("btn-primary"); $btn.empty(); $btn.append("").append(" 수정"); var $btnVersion = $("#btn_version"); $btnVersion.addClass("hidden"); $.ajax({ type: "GET", url: "/auth-user/api/arms/wiki/" + getWikiId() + "/getWiki.do", contentType: "application/json;charset=UTF-8", dataType: "json", success: function (data) { $btn.removeClass("hidden"); $btnVersion.removeClass("hidden"); $("#version_warning").addClass("hidden"); CKEDITOR.instances["editor"].setData(data.contents); } }); }); $("#btn_restore_version").on("click", function () { var $btn = $("#btn_edit_contents"); var version = $(this).data("version"); $.ajax({ type: "PUT", url: "/auth-user/api/arms/wiki/changeRecent.do", contentType: "application/json;charset=UTF-8", dataType: "json", data: JSON.stringify({ wikiId: getWikiId(), version: version }), success: function () { $btn.addClass("btn-success").removeClass("hidden btn-primary"); $btn.empty(); $btn.append("").append(" 수정"); $("#version_warning").addClass("hidden"); CKEDITOR.instances["editor"].setReadOnly(true); sessoinManager.closeRoom(); } }); }); }); } function formatUser(jsonData) { var $container = $( "
" + "
" + "
" + "
" + "
" + "
" ); $container.find(".select2-result-jsonData__username").text(jsonData.username); $container.find(".select2-result-jsonData__id").text(jsonData.id); return $container; } // --- select2 (사용자 자동완성 검색 ) templateSelection 설정 --- // function formatUserSelection(jsonData) { if (jsonData.id == "") { jsonData.text = "placeholder"; } else { if (jsonData.username == undefined) { jsonData.text = jsonData.id; } else { jsonData.text = "[" + jsonData.username + "] - " + jsonData.id; } } return jsonData.text; } function getReviewer(index, req_reviewers_id) { var reviewer = "none"; if ($("#" + req_reviewers_id).select2("data")[index] != undefined) { reviewer = $("#" + req_reviewers_id).select2("data")[0].text; } return reviewer; } function getWikiId() { var selectedJsTreeId = $("#wiki_tree").jstree("get_selected").attr("id").replace("node_", "").replace("copy_", ""); return "WIKI_" + $("#selected_pdService").val() + "_" + selectedJsTreeId; } function generateRandomHexColor() { var randomColor = Math.floor(Math.random() * 16777216); var hexColor = randomColor.toString(16); while (hexColor.length < 6) { hexColor = "0" + hexColor; } return "#" + hexColor; } function tableSelectOption(obj) { var $li = $("
  • ").append(``); var $title = $("#tableTitle"); $li.on("click", function () { tableSelect(obj.c_id); $title.text(obj.c_title); }); return $li; } function filterList() { var searchText = $("#searchInput").val().toLowerCase(); var hasResults = false; $("#reqAddTableSelect li:not(:first)").each(function () { var itemText = $(this).text().toLowerCase(); if (itemText.includes(searchText)) { $(this).show(); hasResults = true; } else { $(this).hide(); } }); if (!hasResults) { if ($("#noResultsMessage").length === 0) { $("#reqAddTableSelect").append( '
  • 검색 결과가 없습니다.
  • ' ); } } else { $("#noResultsMessage").remove(); } } function build_ReqData_By_PdService() { var $btn = $("#btn_edit_contents"); $btn.addClass("hidden btn-success").removeClass("btn-primary"); $btn.empty(); $btn.append("").append(" 수정"); CKEDITOR.instances["editor"].setData(""); CKEDITOR.instances["editor"].setReadOnly(true); } function bind_VersionData_By_PdService() { $(".multiple-select option").remove(); $.ajax({ url: "/auth-user/api/arms/pdService/getVersionList?c_id=" + $("#selected_pdService").val(), type: "GET", dataType: "json", progress: true, statusCode: { 200: function (data) { ////////////////////////////////////////////////////////// for (var k in data.response) { var obj = data.response[k]; var $opt = $("