From b401f6efa2da7ab9ff936228132664be4301d4b4 Mon Sep 17 00:00:00 2001 From: foreverjerry7 Date: Tue, 23 Mar 2021 17:38:17 +0800 Subject: [PATCH] added changes --- client/src/annotator_ui.js | 59 ++++++++++++++++++++++++++++++++++++++ index.xhtml | 15 ++++++++++ server/src/dispatch.py | 5 +++- server/src/newEntity.py | 31 ++++++++++++++++++++ 4 files changed, 109 insertions(+), 1 deletion(-) create mode 100644 server/src/newEntity.py diff --git a/client/src/annotator_ui.js b/client/src/annotator_ui.js index 4de3fe19..427c4e44 100644 --- a/client/src/annotator_ui.js +++ b/client/src/annotator_ui.js @@ -3321,6 +3321,60 @@ var AnnotatorUI = (function ($, window, undefined) { $("#waiter").dialog("open"); }; + var createEntity = function () { + dispatcher.post("showForm", [createEntityForm]); + } + var createEntityForm = $("#create_entity_form"); + var createEntityFormSubmit = function (evt) { + dispatcher.post("hideForm"); + return false; + } + createEntityForm.submit(createEntityFormSubmit); + initForm(createEntityForm, { + width: 550, + resizable: false, + no_cancel: true, + open: function (evt) { + keymap = {}; + }, + }); + $("#create_entity_form-ok").click(function () { + // create new entity + let entity = $("#entity_name").val(); + // let collection = window.location.href.split("#")[1]; + let fullPath = window.location.href.split("#")[1]; + let document = fullPath.split("/").reverse()[0]; + let collection = fullPath.substr( + 0, + fullPath.length - document.length + ); + $.post( + "ajax.cgi", + { + protocol: 1, + action: "createEntity", + entity_name: entity, + collection: collection, + }, + function () { + dispatcher.post("ajax", [ + { + action: + "getCollectionInformation", + collection: collection, + }, + "collectionLoaded", + { + collection: collection, + keep: true, + }, + ]); + // window.location = window.location.pathname + "#" + collection + folderName; + // $("#span_form").dialog("close"); + } + ); + }); + var spanChangeLock = function (evt) { var $this = $(evt.target); var locked = $this.is(":checked"); @@ -3373,6 +3427,11 @@ var AnnotatorUI = (function ($, window, undefined) { text: "Split", click: splitSpan, }, + { + id: "span_form_create_entity", + text: "Create Entity", + click: createEntity, + }, ], create: function (evt) { var $ok = $("#span_form-ok").wrap( diff --git a/index.xhtml b/index.xhtml index c6cc2a3a..6d465343 100644 --- a/index.xhtml +++ b/index.xhtml @@ -820,6 +820,21 @@ +
+
+ Create New Entity +
+ + + + + +
Entity Name + +
+
+
+
diff --git a/server/src/dispatch.py b/server/src/dispatch.py index f25101bf..c763df81 100644 --- a/server/src/dispatch.py +++ b/server/src/dispatch.py @@ -41,6 +41,7 @@ from newDocument import create_new_document, import_new_document, delete_new_document, create_folder from createSpanAll import create_span_all_text, create_span_all_re from utils import GLOBAL_LOGGER, fetch_all_annotations, prehandle_data, cache_model_results +from newEntity import create_new_entity # no-op function that can be invoked by client to log a user action @@ -71,6 +72,8 @@ def logging_no_op(collection, document, log): 'deleteSpan': delete_span, 'splitSpan': split_span, + 'createEntity': create_new_entity, + 'createArc': create_arc, 'reverseArc': reverse_arc, 'deleteArc': delete_arc, @@ -130,7 +133,7 @@ def logging_no_op(collection, document, log): # Actions that correspond to labeling function functionality EXPAND_ACTION = {'labelingFunctionProcess', 'instantExecutor', 'addLabelingFunction', 'deleteLabelingFunction', 'getAvailableLabelingFunction', 'createSpanAllText', - 'createSpanAllRe', 'fetchAllAnnotations', 'preprocessModelData', 'createNewDocument', 'importNewDocument','deleteNewDocument', 'createNewUser', 'cacheModelResults', 'createFolder'} + 'createSpanAllRe', 'fetchAllAnnotations', 'preprocessModelData', 'createNewDocument', 'importNewDocument','deleteNewDocument', 'createNewUser', 'cacheModelResults', 'createFolder', 'createEntity'} # Actions that correspond to annotation functionality ANNOTATION_ACTION = {'createArc', 'deleteArc', 'createSpan', 'deleteSpan', 'splitSpan', 'suggestSpanTypes', 'undo'} diff --git a/server/src/newEntity.py b/server/src/newEntity.py new file mode 100644 index 00000000..6f5dd256 --- /dev/null +++ b/server/src/newEntity.py @@ -0,0 +1,31 @@ +import os +import shutil +import re +from document import real_directory +from os.path import join as path_join +from projectconfig import __parse_configs, __default_configuration, __read_or_default, SECTION_ALIAS, SEPARATOR_STR + +def create_new_entity(**kwargs): + res = dict() + entity = kwargs['entity_name'] + collection = kwargs['collection'] + real_dir = real_directory(collection) + config_dir = real_dir + "annotation.conf" + configstr = __read_or_default(config_dir, __default_configuration) + configstr = configstr.split("\n") + + # section = "general" + # section_lines = {section: []} + # section_labels = {} + + for ln, l in enumerate(configstr): + if l == "[relations]": + configstr.insert(ln-2, entity) + + with open(config_dir, 'w') as configFile: + configFile.write("\n".join(configstr)) + + + res['status'] = 200 + + return res \ No newline at end of file