From e42d6966b61a484e8b79991b9589892ad85f0d3e Mon Sep 17 00:00:00 2001 From: Luis Fernando Molina Date: Thu, 31 Dec 2020 13:35:19 +0100 Subject: [PATCH] so far so good --- .../UI/Spaces/Docs-Space/CommandInterface.js | 119 ++--- .../UI/Spaces/Docs-Space/ContextMenu.js | 475 ++++++++++++++++++ .../UI/Spaces/Docs-Space/DocsSpace.js | 471 +---------------- .../UI/Spaces/Docs-Space/DocumentPage.js | 6 +- .../UI/Spaces/Docs-Space/MainSearchPage.js | 6 +- .../UI/Spaces/Docs-Space/SearchResultsPage.js | 2 +- 6 files changed, 551 insertions(+), 528 deletions(-) create mode 100644 Projects/Superalgos/UI/Spaces/Docs-Space/ContextMenu.js diff --git a/Projects/Superalgos/UI/Spaces/Docs-Space/CommandInterface.js b/Projects/Superalgos/UI/Spaces/Docs-Space/CommandInterface.js index c0860f024..b903d0408 100644 --- a/Projects/Superalgos/UI/Spaces/Docs-Space/CommandInterface.js +++ b/Projects/Superalgos/UI/Spaces/Docs-Space/CommandInterface.js @@ -1,5 +1,6 @@ function newSuperalgosDocsCommmandInterface() { let thisObject = { + command: undefined, detectCommands: detectCommands, initialize: initialize, finalize: finalize @@ -27,27 +28,27 @@ function newSuperalgosDocsCommmandInterface() { UI.projects.superalgos.spaces.docsSpace.searchResultsPage.render() function checkHelpCommand() { - if (UI.projects.superalgos.spaces.docsSpace.command.toLowerCase() === 'docs.help') { - navigateTo('Superalgos', 'Topic', 'Docs Help Command') + if (UI.projects.superalgos.spaces.docsSpace.commandInterface.command.toLowerCase() === 'docs.help') { + UI.projects.superalgos.spaces.docsSpace.navigateTo('Superalgos', 'Topic', 'Docs Help Command') return } return 'Not Help Command' } function checkGotoCommand() { - if (UI.projects.superalgos.spaces.docsSpace.command.toLowerCase() === 'docs.help docs.goto') { - navigateTo('Superalgos', 'Topic', 'Docs Goto Command') + if (UI.projects.superalgos.spaces.docsSpace.commandInterface.command.toLowerCase() === 'docs.help docs.goto') { + UI.projects.superalgos.spaces.docsSpace.navigateTo('Superalgos', 'Topic', 'Docs Goto Command') return } - if (UI.projects.superalgos.spaces.docsSpace.command.indexOf('Docs.Goto') !== 0 && UI.projects.superalgos.spaces.docsSpace.command.indexOf('docs.goto') !== 0) { return 'Not Goto Command' } + if (UI.projects.superalgos.spaces.docsSpace.commandInterface.command.indexOf('Docs.Goto') !== 0 && UI.projects.superalgos.spaces.docsSpace.commandInterface.command.indexOf('docs.goto') !== 0) { return 'Not Goto Command' } - let splittedCommand = UI.projects.superalgos.spaces.docsSpace.command.split(' ') + let splittedCommand = UI.projects.superalgos.spaces.docsSpace.commandInterface.command.split(' ') if (splittedCommand[1] === undefined) { - navigateTo('Superalgos', 'Topic', 'Docs Error Too Few Parameters', 'Anchor Too Few Paramenters') + UI.projects.superalgos.spaces.docsSpace.navigateTo('Superalgos', 'Topic', 'Docs Error Too Few Parameters', 'Anchor Too Few Paramenters') return } - let secondaryCommand = UI.projects.superalgos.spaces.docsSpace.command.substring(UI.projects.superalgos.spaces.docsSpace.command.indexOf(' ') + 1, UI.projects.superalgos.spaces.docsSpace.command.length) + let secondaryCommand = UI.projects.superalgos.spaces.docsSpace.commandInterface.command.substring(UI.projects.superalgos.spaces.docsSpace.commandInterface.command.indexOf(' ') + 1, UI.projects.superalgos.spaces.docsSpace.commandInterface.command.length) let splittedSecondaryCommand = secondaryCommand.split('->') let project = splittedSecondaryCommand[0] let category = splittedSecondaryCommand[1] @@ -55,7 +56,7 @@ function newSuperalgosDocsCommmandInterface() { let anchor = splittedSecondaryCommand[3] if (SCHEMAS_BY_PROJECT.get(project) === undefined) { - navigateTo('Superalgos', 'Topic', 'Docs Error Project Does Not Exist', 'Anchor Project Does Not Exist') + UI.projects.superalgos.spaces.docsSpace.navigateTo('Superalgos', 'Topic', 'Docs Error Project Does Not Exist', 'Anchor Project Does Not Exist') return } let docsSchemaDocument @@ -73,37 +74,37 @@ function newSuperalgosDocsCommmandInterface() { break } default: { - navigateTo('Superalgos', 'Topic', 'Docs Error Category Not Valid', 'Anchor Category Not Valid') + UI.projects.superalgos.spaces.docsSpace.navigateTo('Superalgos', 'Topic', 'Docs Error Category Not Valid', 'Anchor Category Not Valid') return } } if (docsSchemaDocument === undefined) { - navigateTo('Superalgos', 'Topic', 'Docs Error Page Not Found', 'Anchor Page Not Found') + UI.projects.superalgos.spaces.docsSpace.navigateTo('Superalgos', 'Topic', 'Docs Error Page Not Found', 'Anchor Page Not Found') return } if (docsSchemaDocument.paragraphs === undefined) { - navigateTo('Superalgos', 'Topic', 'Docs Error Page With No Paragraphs', 'Anchor Page With No Paragraphs') + UI.projects.superalgos.spaces.docsSpace.navigateTo('Superalgos', 'Topic', 'Docs Error Page With No Paragraphs', 'Anchor Page With No Paragraphs') return } - navigateTo(project, category, type, anchor, undefined) + UI.projects.superalgos.spaces.docsSpace.navigateTo(project, category, type, anchor, undefined) } function checkAddCommand() { - if (UI.projects.superalgos.spaces.docsSpace.command.toLowerCase() === 'docs.help docs.add') { - navigateTo('Superalgos', 'Topic', 'Docs Add Command') + if (UI.projects.superalgos.spaces.docsSpace.commandInterface.command.toLowerCase() === 'docs.help docs.add') { + UI.projects.superalgos.spaces.docsSpace.navigateTo('Superalgos', 'Topic', 'Docs Add Command') return } - if (UI.projects.superalgos.spaces.docsSpace.command.indexOf('Docs.Add') !== 0 && UI.projects.superalgos.spaces.docsSpace.command.indexOf('docs.add') !== 0) { return 'Not Add Command' } + if (UI.projects.superalgos.spaces.docsSpace.commandInterface.command.indexOf('Docs.Add') !== 0 && UI.projects.superalgos.spaces.docsSpace.commandInterface.command.indexOf('docs.add') !== 0) { return 'Not Add Command' } if (UI.projects.superalgos.spaces.docsSpace.language !== DEFAULT_LANGUAGE) { - navigateTo('Superalgos', 'Topic', 'Docs Error Only In English', 'Anchor Only In English') + UI.projects.superalgos.spaces.docsSpace.navigateTo('Superalgos', 'Topic', 'Docs Error Only In English', 'Anchor Only In English') return } - let splittedCommand = UI.projects.superalgos.spaces.docsSpace.command.split(': ') + let splittedCommand = UI.projects.superalgos.spaces.docsSpace.commandInterface.command.split(': ') if (splittedCommand[1] === undefined) { - navigateTo('Superalgos', 'Topic', 'Docs Error Missing Colon', 'Anchor Missing Colon') + UI.projects.superalgos.spaces.docsSpace.navigateTo('Superalgos', 'Topic', 'Docs Error Missing Colon', 'Anchor Missing Colon') return } let primaryCommand = splittedCommand[0] @@ -113,17 +114,17 @@ function newSuperalgosDocsCommmandInterface() { if (splittedPrimaryCommand[0].toLowerCase() === 'docs.add') { if (splittedPrimaryCommand[2] !== 'to') { - navigateTo('Superalgos', 'Topic', 'Docs Error Missing To', 'Anchor Missing To') + UI.projects.superalgos.spaces.docsSpace.navigateTo('Superalgos', 'Topic', 'Docs Error Missing To', 'Anchor Missing To') return } if (splittedPrimaryCommand.length < 4) { - navigateTo('Superalgos', 'Topic', 'Docs Error Too Few Parameters', 'Anchor Too Few Paramenters') + UI.projects.superalgos.spaces.docsSpace.navigateTo('Superalgos', 'Topic', 'Docs Error Too Few Parameters', 'Anchor Too Few Paramenters') return } if (secondaryCommand === '') { - navigateTo('Superalgos', 'Topic', 'Docs Error Category Not Valid', 'Anchor Category Not Valid') + UI.projects.superalgos.spaces.docsSpace.navigateTo('Superalgos', 'Topic', 'Docs Error Category Not Valid', 'Anchor Category Not Valid') return } @@ -139,14 +140,14 @@ function newSuperalgosDocsCommmandInterface() { case 'topic': { let splittedSecondaryCommand = secondaryCommand.split('->') if (splittedSecondaryCommand.length < 3) { - navigateTo('Superalgos', 'Topic', 'Docs Error Too Few Parameters', 'Anchor Too Few Paramenters') + UI.projects.superalgos.spaces.docsSpace.navigateTo('Superalgos', 'Topic', 'Docs Error Too Few Parameters', 'Anchor Too Few Paramenters') return } addTopic(splittedPrimaryCommand[3], splittedSecondaryCommand[0], splittedSecondaryCommand[1], splittedSecondaryCommand[2]) return } default: { - navigateTo('Superalgos', 'Topic', 'Docs Error Category Not Valid', 'Anchor Category Not Valid') + UI.projects.superalgos.spaces.docsSpace.navigateTo('Superalgos', 'Topic', 'Docs Error Category Not Valid', 'Anchor Category Not Valid') return } } @@ -155,20 +156,20 @@ function newSuperalgosDocsCommmandInterface() { } function checkDeleteCommand() { - if (UI.projects.superalgos.spaces.docsSpace.command.toLowerCase() === 'docs.help docs.delete') { - navigateTo('Superalgos', 'Topic', 'Docs Delete Command') + if (UI.projects.superalgos.spaces.docsSpace.commandInterface.command.toLowerCase() === 'docs.help docs.delete') { + UI.projects.superalgos.spaces.docsSpace.navigateTo('Superalgos', 'Topic', 'Docs Delete Command') return } - if (UI.projects.superalgos.spaces.docsSpace.command.indexOf('Docs.Delete') !== 0 && UI.projects.superalgos.spaces.docsSpace.command.indexOf('docs.delete') !== 0) { return 'Not Delete Command' } + if (UI.projects.superalgos.spaces.docsSpace.commandInterface.command.indexOf('Docs.Delete') !== 0 && UI.projects.superalgos.spaces.docsSpace.commandInterface.command.indexOf('docs.delete') !== 0) { return 'Not Delete Command' } if (UI.projects.superalgos.spaces.docsSpace.language !== DEFAULT_LANGUAGE) { - navigateTo('Superalgos', 'Topic', 'Docs Error Only In English', 'Anchor Only In English') + UI.projects.superalgos.spaces.docsSpace.navigateTo('Superalgos', 'Topic', 'Docs Error Only In English', 'Anchor Only In English') return } - let splittedCommand = UI.projects.superalgos.spaces.docsSpace.command.split(': ') + let splittedCommand = UI.projects.superalgos.spaces.docsSpace.commandInterface.command.split(': ') if (splittedCommand[1] === undefined) { - navigateTo('Superalgos', 'Topic', 'Docs Error Missing Colon', 'Anchor Missing Colon') + UI.projects.superalgos.spaces.docsSpace.navigateTo('Superalgos', 'Topic', 'Docs Error Missing Colon', 'Anchor Missing Colon') return } let primaryCommand = splittedCommand[0] @@ -178,17 +179,17 @@ function newSuperalgosDocsCommmandInterface() { if (splittedPrimaryCommand[0].toLowerCase() === 'docs.delete') { if (splittedPrimaryCommand[2] !== 'from') { - navigateTo('Superalgos', 'Topic', 'Docs Error Missing From', 'Anchor Missing From') + UI.projects.superalgos.spaces.docsSpace.navigateTo('Superalgos', 'Topic', 'Docs Error Missing From', 'Anchor Missing From') return } if (splittedPrimaryCommand.length < 4) { - navigateTo('Superalgos', 'Topic', 'Docs Error Too Few Parameters', 'Anchor Too Few Paramenters') + UI.projects.superalgos.spaces.docsSpace.navigateTo('Superalgos', 'Topic', 'Docs Error Too Few Parameters', 'Anchor Too Few Paramenters') return } if (secondaryCommand === '') { - navigateTo('Superalgos', 'Topic', 'Docs Error Category Not Valid', 'Anchor Category Not Valid') + UI.projects.superalgos.spaces.docsSpace.navigateTo('Superalgos', 'Topic', 'Docs Error Category Not Valid', 'Anchor Category Not Valid') return } @@ -204,14 +205,14 @@ function newSuperalgosDocsCommmandInterface() { case 'topic': { let splittedSecondaryCommand = secondaryCommand.split('->') if (splittedSecondaryCommand.length < 3) { - navigateTo('Superalgos', 'Topic', 'Docs Error Too Few Parameters', 'Anchor Too Few Paramenters') + UI.projects.superalgos.spaces.docsSpace.navigateTo('Superalgos', 'Topic', 'Docs Error Too Few Parameters', 'Anchor Too Few Paramenters') return } deleteTopic(splittedPrimaryCommand[3], splittedSecondaryCommand[0], splittedSecondaryCommand[1], splittedSecondaryCommand[2]) return } default: { - navigateTo('Superalgos', 'Topic', 'Docs Error Category Not Valid', 'Anchor Category Not Valid') + UI.projects.superalgos.spaces.docsSpace.navigateTo('Superalgos', 'Topic', 'Docs Error Category Not Valid', 'Anchor Category Not Valid') return } } @@ -220,11 +221,11 @@ function newSuperalgosDocsCommmandInterface() { } function checkUReIndexCommand() { - if (UI.projects.superalgos.spaces.docsSpace.command.toLowerCase() === 'docs.help docs.reindex') { - navigateTo('Superalgos', 'Topic', 'Docs Reindex Command') + if (UI.projects.superalgos.spaces.docsSpace.commandInterface.command.toLowerCase() === 'docs.help docs.reindex') { + UI.projects.superalgos.spaces.docsSpace.navigateTo('Superalgos', 'Topic', 'Docs Reindex Command') return } - if (UI.projects.superalgos.spaces.docsSpace.command.indexOf('Docs.Reindex') !== 0 && UI.projects.superalgos.spaces.docsSpace.command.indexOf('docs.reindex') !== 0) { return 'Not Reindex Command' } + if (UI.projects.superalgos.spaces.docsSpace.commandInterface.command.indexOf('Docs.Reindex') !== 0 && UI.projects.superalgos.spaces.docsSpace.commandInterface.command.indexOf('docs.reindex') !== 0) { return 'Not Reindex Command' } setUpWorkspaceSchemas() thisObject.searchEngine.setUpSearchEngine() @@ -233,11 +234,11 @@ function newSuperalgosDocsCommmandInterface() { } function checkUSaveCommand() { - if (UI.projects.superalgos.spaces.docsSpace.command.toLowerCase() === 'docs.help docs.save') { - navigateTo('Superalgos', 'Topic', 'Docs Save Command') + if (UI.projects.superalgos.spaces.docsSpace.commandInterface.command.toLowerCase() === 'docs.help docs.save') { + UI.projects.superalgos.spaces.docsSpace.navigateTo('Superalgos', 'Topic', 'Docs Save Command') return } - if (UI.projects.superalgos.spaces.docsSpace.command.indexOf('Docs.Save') !== 0 && UI.projects.superalgos.spaces.docsSpace.command.indexOf('docs.save') !== 0) { return 'Not Save Command' } + if (UI.projects.superalgos.spaces.docsSpace.commandInterface.command.indexOf('Docs.Save') !== 0 && UI.projects.superalgos.spaces.docsSpace.commandInterface.command.indexOf('docs.save') !== 0) { return 'Not Save Command' } let requestsSent = 0 let responseCount = 0 @@ -271,7 +272,7 @@ function newSuperalgosDocsCommmandInterface() { if (responseCount === okResponses) { renderCommandResultsPage(["Succesfully saved all the latest changes."]) } else { - navigateTo('Superalgos', 'Topic', 'Docs Error Changes Not Saved', 'Anchor Changes Not Saved') + UI.projects.superalgos.spaces.docsSpace.navigateTo('Superalgos', 'Topic', 'Docs Error Changes Not Saved', 'Anchor Changes Not Saved') } } } @@ -289,18 +290,18 @@ function newSuperalgosDocsCommmandInterface() { ] } if (SCHEMAS_BY_PROJECT.get(project) === undefined) { - navigateTo('Superalgos', 'Topic', 'Docs Error Project Does Not Exist', 'Anchor Project Does Not Exist') + UI.projects.superalgos.spaces.docsSpace.navigateTo('Superalgos', 'Topic', 'Docs Error Project Does Not Exist', 'Anchor Project Does Not Exist') return } let exist = SCHEMAS_BY_PROJECT.get(project).map.docsNodeSchema.get(type) if (exist !== undefined) { - navigateTo('Superalgos', 'Topic', 'Docs Error Page Already Exists', 'Anchor Page Already Exists') + UI.projects.superalgos.spaces.docsSpace.navigateTo('Superalgos', 'Topic', 'Docs Error Page Already Exists', 'Anchor Page Already Exists') return } SCHEMAS_BY_PROJECT.get(project).array.docsNodeSchema.push(template) SCHEMAS_BY_PROJECT.get(project).map.docsNodeSchema.set(type, template) - navigateTo(project, 'Node', type) + UI.projects.superalgos.spaces.docsSpace.navigateTo(project, 'Node', type) } function addConcept(project, type) { @@ -316,18 +317,18 @@ function newSuperalgosDocsCommmandInterface() { } if (SCHEMAS_BY_PROJECT.get(project) === undefined) { - navigateTo('Superalgos', 'Topic', 'Docs Error Project Does Not Exist', 'Anchor Project Does Not Exist') + UI.projects.superalgos.spaces.docsSpace.navigateTo('Superalgos', 'Topic', 'Docs Error Project Does Not Exist', 'Anchor Project Does Not Exist') return } let exist = SCHEMAS_BY_PROJECT.get(project).map.docsConceptSchema.get(type) if (exist !== undefined) { - navigateTo('Superalgos', 'Topic', 'Docs Error Page Already Exists', 'Anchor Page Already Exists') + UI.projects.superalgos.spaces.docsSpace.navigateTo('Superalgos', 'Topic', 'Docs Error Page Already Exists', 'Anchor Page Already Exists') return } SCHEMAS_BY_PROJECT.get(project).array.docsConceptSchema.push(template) SCHEMAS_BY_PROJECT.get(project).map.docsConceptSchema.set(type, template) - navigateTo(project, 'Concept', type) + UI.projects.superalgos.spaces.docsSpace.navigateTo(project, 'Concept', type) } function addTopic(project, topic, type, pageNumber) { @@ -344,28 +345,28 @@ function newSuperalgosDocsCommmandInterface() { ] } if (SCHEMAS_BY_PROJECT.get(project) === undefined) { - navigateTo('Superalgos', 'Topic', 'Docs Error Project Does Not Exist', 'Anchor Project Does Not Exist') + UI.projects.superalgos.spaces.docsSpace.navigateTo('Superalgos', 'Topic', 'Docs Error Project Does Not Exist', 'Anchor Project Does Not Exist') return } let exist = SCHEMAS_BY_PROJECT.get(project).map.docsTopicSchema.get(type) if (exist !== undefined) { - navigateTo('Superalgos', 'Topic', 'Docs Error Page Already Exists', 'Anchor Page Already Exists') + UI.projects.superalgos.spaces.docsSpace.navigateTo('Superalgos', 'Topic', 'Docs Error Page Already Exists', 'Anchor Page Already Exists') return } SCHEMAS_BY_PROJECT.get(project).array.docsTopicSchema.push(template) SCHEMAS_BY_PROJECT.get(project).map.docsTopicSchema.set(type, template) - navigateTo(project, 'Topic', type) + UI.projects.superalgos.spaces.docsSpace.navigateTo(project, 'Topic', type) } function deleteNode(project, type) { if (SCHEMAS_BY_PROJECT.get(project) === undefined) { - navigateTo('Superalgos', 'Topic', 'Docs Error Project Does Not Exist', 'Anchor Project Does Not Exist') + UI.projects.superalgos.spaces.docsSpace.navigateTo('Superalgos', 'Topic', 'Docs Error Project Does Not Exist', 'Anchor Project Does Not Exist') return } let exist = SCHEMAS_BY_PROJECT.get(project).map.docsNodeSchema.get(type) if (exist === undefined) { - navigateTo('Superalgos', 'Topic', 'Docs Error Page Does Not Exist', 'Anchor Page Does Not Exist') + UI.projects.superalgos.spaces.docsSpace.navigateTo('Superalgos', 'Topic', 'Docs Error Page Does Not Exist', 'Anchor Page Does Not Exist') return } @@ -383,12 +384,12 @@ function newSuperalgosDocsCommmandInterface() { function deleteConcept(project, type) { if (SCHEMAS_BY_PROJECT.get(project) === undefined) { - navigateTo('Superalgos', 'Topic', 'Docs Error Project Does Not Exist', 'Anchor Project Does Not Exist') + UI.projects.superalgos.spaces.docsSpace.navigateTo('Superalgos', 'Topic', 'Docs Error Project Does Not Exist', 'Anchor Project Does Not Exist') return } let exist = SCHEMAS_BY_PROJECT.get(project).map.docsConceptSchema.get(type) if (exist === undefined) { - navigateTo('Superalgos', 'Topic', 'Docs Error Page Does Not Exist', 'Anchor Page Does Not Exist') + UI.projects.superalgos.spaces.docsSpace.navigateTo('Superalgos', 'Topic', 'Docs Error Page Does Not Exist', 'Anchor Page Does Not Exist') return } @@ -406,20 +407,20 @@ function newSuperalgosDocsCommmandInterface() { function deleteTopic(project, topic, type, pageNumber) { if (SCHEMAS_BY_PROJECT.get(project) === undefined) { - navigateTo('Superalgos', 'Topic', 'Docs Error Project Does Not Exist', 'Anchor Project Does Not Exist') + UI.projects.superalgos.spaces.docsSpace.navigateTo('Superalgos', 'Topic', 'Docs Error Project Does Not Exist', 'Anchor Project Does Not Exist') return } let exist = SCHEMAS_BY_PROJECT.get(project).map.docsTopicSchema.get(type) if (exist === undefined) { - navigateTo('Superalgos', 'Topic', 'Docs Error Page Does Not Exist', 'Anchor Page Does Not Exist') + UI.projects.superalgos.spaces.docsSpace.navigateTo('Superalgos', 'Topic', 'Docs Error Page Does Not Exist', 'Anchor Page Does Not Exist') return } else { if (exist.pageNumber !== pageNumber) { - navigateTo('Superalgos', 'Topic', 'Docs Error Page Number Mismatch', 'Anchor Page Number Mismatch') + UI.projects.superalgos.spaces.docsSpace.navigateTo('Superalgos', 'Topic', 'Docs Error Page Number Mismatch', 'Anchor Page Number Mismatch') return } if (exist.topic !== topic) { - navigateTo('Superalgos', 'Topic', 'Docs Error Topic Mismatch', 'Anchor Topic Mismatch') + UI.projects.superalgos.spaces.docsSpace.navigateTo('Superalgos', 'Topic', 'Docs Error Topic Mismatch', 'Anchor Topic Mismatch') return } } diff --git a/Projects/Superalgos/UI/Spaces/Docs-Space/ContextMenu.js b/Projects/Superalgos/UI/Spaces/Docs-Space/ContextMenu.js new file mode 100644 index 000000000..8be408977 --- /dev/null +++ b/Projects/Superalgos/UI/Spaces/Docs-Space/ContextMenu.js @@ -0,0 +1,475 @@ +function newSuperalgosDocsContextMenu() { + let thisObject = { + getSelection: getSelection, + forceOutClick: forceOutClick, + initialize: initialize, + finalize: finalize + } + + let selectedParagraphData = '' + let selectedParagraphIndex = '' + let selectedParagraphHeight = 0 + + return thisObject + + function initialize() { + setUpContextMenu() + } + + function finalize() { + + } + + function setUpContextMenu() { + window.contextMenu = { + editParagraph: editParagraph, + deleteParagraph: deleteParagraph, + toJavascript: toJavascript, + toJson: toJson, + toText: toText, + toTitle: toTitle, + toSubtitle: toSubtitle, + toNote: toNote, + toWarning: toWarning, + toError: toError, + toImportant: toImportant, + toSuccess: toSuccess, + toCallout: toCallout, + toSummary: toSummary, + toList: toList, + toTable: toTable, + toHierarchy: toHierarchy, + toGif: toGif, + toPng: toPng, + toAnchor: toAnchor, + toBlock: toBlock, + toInclude: toInclude, + toSection: toSection, + copyLink: copyLink, + toWebPageLink: toWebPageLink, + toYouTubeVideo: toYouTubeVideo + } + + function editParagraph() { + forceOutClick() + showHTMLTextArea() + + function showHTMLTextArea() { + if (selectedParagraph === undefined) { return } + + /* + When in editing mode, some type of paragraphs need to extend + the text area style so that while editing, it looks and feel + like the non editing style of the paragraph. For those we + add an extra style class. + */ + let extraClassName = '' + if (selectedParagraph.id.indexOf('definition') >= 0) { + extraClassName = ' ' + '' + } + if (selectedParagraph.id.indexOf('title') >= 0) { + extraClassName = ' ' + 'docs-h3' + } + if (selectedParagraph.id.indexOf('subtitle') >= 0) { + extraClassName = ' ' + 'docs-h4' + } + if (selectedParagraph.id.indexOf('note') >= 0) { + extraClassName = ' ' + 'docs-alert-note' + } + if (selectedParagraph.id.indexOf('success') >= 0) { + extraClassName = ' ' + 'docs-alert-success' + } + if (selectedParagraph.id.indexOf('important') >= 0) { + extraClassName = ' ' + 'docs-alert-important' + } + if (selectedParagraph.id.indexOf('warning') >= 0) { + extraClassName = ' ' + 'docs-alert-warning' + } + if (selectedParagraph.id.indexOf('error') >= 0) { + extraClassName = ' ' + 'docs-alert-error' + } + if (selectedParagraph.id.indexOf('javascript') >= 0) { + extraClassName = ' ' + 'language-javascript' + } + if (selectedParagraph.id.indexOf('json') >= 0) { + extraClassName = ' ' + 'language-json' + } + + textArea = document.createElement('textarea'); + textArea.id = "textArea"; + textArea.spellcheck = false; + textArea.className = "docs-text-area" + extraClassName + textArea.style.height = selectedParagraphHeight + textArea.value = selectedParagraphData + selectedParagraph.innerHTML = "" + selectedParagraph.appendChild(textArea) + textArea.style.display = 'block' + textArea.focus() + forceOutClick() + enterEditMode() + } + } + + function deleteParagraph() { + if (selectedParagraphIndex === undefined) { return } + if (selectedParagraphIndex === 0) { return } + docsSchemaDocument.paragraphs.splice(selectedParagraphIndex, 1) + forceOutClick() + UI.projects.superalgos.spaces.docsSpace.documentPage.render() + } + + function toJavascript() { + let docSchemaParagraph = paragraphMap.get(selectedParagraph.id) + docSchemaParagraph.style = 'Javascript' + forceOutClick() + UI.projects.superalgos.spaces.docsSpace.documentPage.render() + } + + function toJson() { + let docSchemaParagraph = paragraphMap.get(selectedParagraph.id) + docSchemaParagraph.style = 'Json' + forceOutClick() + UI.projects.superalgos.spaces.docsSpace.documentPage.render() + } + + function toText() { + let docSchemaParagraph = paragraphMap.get(selectedParagraph.id) + docSchemaParagraph.style = 'Text' + forceOutClick() + UI.projects.superalgos.spaces.docsSpace.documentPage.render() + } + + function toTitle() { + let docSchemaParagraph = paragraphMap.get(selectedParagraph.id) + docSchemaParagraph.style = 'Title' + forceOutClick() + UI.projects.superalgos.spaces.docsSpace.documentPage.render() + } + + function toSubtitle() { + let docSchemaParagraph = paragraphMap.get(selectedParagraph.id) + docSchemaParagraph.style = 'Subtitle' + forceOutClick() + UI.projects.superalgos.spaces.docsSpace.documentPage.render() + } + + function toNote() { + let docSchemaParagraph = paragraphMap.get(selectedParagraph.id) + docSchemaParagraph.style = 'Note' + forceOutClick() + UI.projects.superalgos.spaces.docsSpace.documentPage.render() + } + + function toWarning() { + let docSchemaParagraph = paragraphMap.get(selectedParagraph.id) + docSchemaParagraph.style = 'Warning' + forceOutClick() + UI.projects.superalgos.spaces.docsSpace.documentPage.render() + } + + function toError() { + let docSchemaParagraph = paragraphMap.get(selectedParagraph.id) + docSchemaParagraph.style = 'Error' + forceOutClick() + UI.projects.superalgos.spaces.docsSpace.documentPage.render() + } + + function toImportant() { + let docSchemaParagraph = paragraphMap.get(selectedParagraph.id) + docSchemaParagraph.style = 'Important' + forceOutClick() + UI.projects.superalgos.spaces.docsSpace.documentPage.render() + } + + function toSuccess() { + let docSchemaParagraph = paragraphMap.get(selectedParagraph.id) + docSchemaParagraph.style = 'Success' + forceOutClick() + UI.projects.superalgos.spaces.docsSpace.documentPage.render() + } + + function toCallout() { + let docSchemaParagraph = paragraphMap.get(selectedParagraph.id) + docSchemaParagraph.style = 'Callout' + forceOutClick() + UI.projects.superalgos.spaces.docsSpace.documentPage.render() + } + + function toSummary() { + let docSchemaParagraph = paragraphMap.get(selectedParagraph.id) + docSchemaParagraph.style = 'Summary' + forceOutClick() + UI.projects.superalgos.spaces.docsSpace.documentPage.render() + } + + function toSection() { + let docSchemaParagraph = paragraphMap.get(selectedParagraph.id) + docSchemaParagraph.style = 'Section' + forceOutClick() + UI.projects.superalgos.spaces.docsSpace.documentPage.render() + } + + function toList() { + let docSchemaParagraph = paragraphMap.get(selectedParagraph.id) + docSchemaParagraph.style = 'List' + forceOutClick() + UI.projects.superalgos.spaces.docsSpace.documentPage.render() + } + + function toTable() { + let docSchemaParagraph = paragraphMap.get(selectedParagraph.id) + docSchemaParagraph.style = 'Table' + forceOutClick() + UI.projects.superalgos.spaces.docsSpace.documentPage.render() + } + + function toHierarchy() { + let docSchemaParagraph = paragraphMap.get(selectedParagraph.id) + docSchemaParagraph.style = 'Hierarchy' + forceOutClick() + UI.projects.superalgos.spaces.docsSpace.documentPage.render() + } + + function toGif() { + let docSchemaParagraph = paragraphMap.get(selectedParagraph.id) + docSchemaParagraph.style = 'Gif' + forceOutClick() + UI.projects.superalgos.spaces.docsSpace.documentPage.render() + } + + function toPng() { + let docSchemaParagraph = paragraphMap.get(selectedParagraph.id) + docSchemaParagraph.style = 'Png' + forceOutClick() + UI.projects.superalgos.spaces.docsSpace.documentPage.render() + } + + function toAnchor() { + let docSchemaParagraph = paragraphMap.get(selectedParagraph.id) + docSchemaParagraph.style = 'Anchor' + forceOutClick() + UI.projects.superalgos.spaces.docsSpace.documentPage.render() + } + + function toBlock() { + let docSchemaParagraph = paragraphMap.get(selectedParagraph.id) + docSchemaParagraph.style = 'Block' + forceOutClick() + UI.projects.superalgos.spaces.docsSpace.documentPage.render() + } + + function toInclude() { + let docSchemaParagraph = paragraphMap.get(selectedParagraph.id) + docSchemaParagraph.style = 'Include' + forceOutClick() + UI.projects.superalgos.spaces.docsSpace.documentPage.render() + } + + function toWebPageLink() { + let docSchemaParagraph = paragraphMap.get(selectedParagraph.id) + docSchemaParagraph.style = 'Link' + forceOutClick() + UI.projects.superalgos.spaces.docsSpace.documentPage.render() + } + + function toYouTubeVideo() { + let docSchemaParagraph = paragraphMap.get(selectedParagraph.id) + docSchemaParagraph.style = 'Youtube' + forceOutClick() + UI.projects.superalgos.spaces.docsSpace.documentPage.render() + } + + function copyLink() { + let docSchemaParagraph = paragraphMap.get(selectedParagraph.id) + let clipboard + switch (docSchemaParagraph.style) { + case 'Anchor': { + clipboard = "docs.goto " + objectBeingRendered.project + '->' + objectBeingRendered.category + '->' + objectBeingRendered.type + '->' + docSchemaParagraph.text + break + } + case 'Block': { + clipboard = objectBeingRendered.project + '->' + objectBeingRendered.category + '->' + objectBeingRendered.type + '->' + docSchemaParagraph.text + break + } + default: { + clipboard = docSchemaParagraph.text + break + } + } + + UI.projects.superalgos.utilities.clipboard.copyTextToClipboard(clipboard) + forceOutClick() + } + } + + function forceOutClick() { + const outClick = document.getElementById('docs-space-div') + const menu = document.getElementById('menu') + menu.classList.remove('show') + outClick.style.display = "none" + } + + function getSelection() { + let selection = window.getSelection() + + /* + We need to locate the parent node that it is a Paragraph, + otherwise we could end up in an inner html element. + */ + let paragraphNode = selection.baseNode + + if (paragraphNode.id !== undefined && paragraphNode.parentNode.className === "docs-tooltip") { + return false + } + + + for (let i = 1; i < 10; i++) { + if (paragraphNode === undefined || paragraphNode === null) { return false } + if (paragraphNode.id === undefined || paragraphNode.id.indexOf('editable-paragraph') < 0) { + paragraphNode = paragraphNode.parentNode + if (paragraphNode === undefined) { return false } + } + } + if (paragraphNode === undefined || paragraphNode === null || paragraphNode.id === undefined || paragraphNode.id.indexOf('editable-paragraph') < 0) { + return false + } + /* + Get the dimenssions of the current paragraph to help us to define the dimenssions of the text area. + */ + selectedParagraph = paragraphNode + selectedParagraphHeight = paragraphNode.getClientRects()[0].height + if (selectedParagraphHeight < 30) { selectedParagraphHeight = 30 } + /* + We need to clean the Tool Tips text that might be at the paragraph selected. + To not destroy the DOM structure we will use a clone. + */ + paragraphNode = paragraphNode.cloneNode(true) + scanNodeChildren(paragraphNode) + function scanNodeChildren(node) { + if (node.childNodes === undefined) { return } + for (let i = 0; i < node.childNodes.length; i++) { + let childNode = node.childNodes[i] + if (childNode.className === "docs-tooltip") { + childNode.innerText = childNode.childNodes[0].data + } else { + scanNodeChildren(childNode) + } + } + } + + /* Reset this */ + selectedParagraphIndex = undefined + /* + Depending on the Style of Paragraph we will need to remove + some info from the innerText. + */ + if (paragraphNode.id.indexOf('definition-') >= 0) { + if (paragraphNode.id.indexOf('-summary') >= 0) { + selectedParagraphData = paragraphNode.innerText.trim().substring(9, paragraphNode.innerText.length) + } else { + selectedParagraphData = paragraphNode.innerText.trim() + } + return true + } + /* + Remeber the Selected Paragraph Index + */ + let splittedId = paragraphNode.id.split('-') + selectedParagraphIndex = splittedId[splittedId.length - 2] + /* + Check the style of the Paragraph + */ + if (paragraphNode.id.indexOf('-text') >= 0) { + selectedParagraphData = paragraphNode.innerText.trim() + return true + } + if (paragraphNode.id.indexOf('-title') >= 0) { + selectedParagraphData = paragraphNode.innerText.trim() + return true + } + if (paragraphNode.id.indexOf('-subtitle') >= 0) { + selectedParagraphData = paragraphNode.innerText.trim() + return true + } + if (paragraphNode.id.indexOf('-note') >= 0) { + selectedParagraphData = paragraphNode.innerText.trim().substring(6, paragraphNode.innerText.length) + return true + } + if (paragraphNode.id.indexOf('-success') >= 0) { + selectedParagraphData = paragraphNode.innerText.trim().substring(5, paragraphNode.innerText.length) + return true + } + if (paragraphNode.id.indexOf('-important') >= 0) { + selectedParagraphData = paragraphNode.innerText.trim().substring(11, paragraphNode.innerText.length) + return true + } + if (paragraphNode.id.indexOf('-warning') >= 0) { + selectedParagraphData = paragraphNode.innerText.trim().substring(10, paragraphNode.innerText.length) + return true + } + if (paragraphNode.id.indexOf('-error') >= 0) { + selectedParagraphData = paragraphNode.innerText.trim().substring(8, paragraphNode.innerText.length) + return true + } + if (paragraphNode.id.indexOf('-list') >= 0) { + selectedParagraphData = paragraphNode.innerText.trim() + return true + } + if (paragraphNode.id.indexOf('-table') >= 0) { + selectedParagraphData = UI.projects.superalgos.utilities.docs.reverseParseTable(paragraphNode.innerHTML) + return true + } + if (paragraphNode.id.indexOf('-hierarchy') >= 0) { + selectedParagraphData = UI.projects.superalgos.utilities.docs.reverseParseHierarchy(paragraphNode.innerHTML) + return true + } + if (paragraphNode.id.indexOf('-gif') >= 0) { + selectedParagraphData = UI.projects.superalgos.utilities.docs.reverseParseGIF(paragraphNode.innerHTML) + return true + } + if (paragraphNode.id.indexOf('-png') >= 0) { + selectedParagraphData = UI.projects.superalgos.utilities.docs.reverseParsePNG(paragraphNode.innerHTML) + return true + } + if (paragraphNode.id.indexOf('-javascript') >= 0) { + selectedParagraphData = paragraphNode.innerText.trim().substring(1, paragraphNode.innerText.length) + return true + } + if (paragraphNode.id.indexOf('-json') >= 0) { + selectedParagraphData = paragraphNode.innerText.trim().substring(1, paragraphNode.innerText.length) + return true + } + if (paragraphNode.id.indexOf('-callout') >= 0) { + selectedParagraphData = paragraphNode.innerText.trim() + return true + } + if (paragraphNode.id.indexOf('-summary') >= 0) { + selectedParagraphData = paragraphNode.innerText.trim().substring(9, paragraphNode.innerText.length) + return true + } + if (paragraphNode.id.indexOf('-anchor') >= 0) { + selectedParagraphData = paragraphNode.innerText.trim() + return true + } + if (paragraphNode.id.indexOf('-section') >= 0) { + selectedParagraphData = paragraphNode.innerText.trim() + return true + } + if (paragraphNode.id.indexOf('-block') >= 0) { + selectedParagraphData = paragraphNode.innerText.trim() + return true + } + if (paragraphNode.id.indexOf('-include') >= 0) { + selectedParagraphData = paragraphNode.innerText.trim() + return true + } + if (paragraphNode.id.indexOf('-link') >= 0) { + selectedParagraphData = UI.projects.superalgos.utilities.docs.reverseParseLink(paragraphNode.innerHTML) + return true + } + if (paragraphNode.id.indexOf('-youtube') >= 0) { + selectedParagraphData = UI.projects.superalgos.utilities.docs.reverseParseYoutube(paragraphNode.innerHTML) + return true + } + } +} \ No newline at end of file diff --git a/Projects/Superalgos/UI/Spaces/Docs-Space/DocsSpace.js b/Projects/Superalgos/UI/Spaces/Docs-Space/DocsSpace.js index abbcf2b6a..9b57c91a7 100644 --- a/Projects/Superalgos/UI/Spaces/Docs-Space/DocsSpace.js +++ b/Projects/Superalgos/UI/Spaces/Docs-Space/DocsSpace.js @@ -10,8 +10,8 @@ function newSuperalgosDocSpace() { footer: undefined, documentPage: undefined, commandInterface: undefined, + contextMenu: undefined, language: undefined, - command: undefined, menuLabelsMap: undefined, changeLanguage: changeLanguage, openSpaceAreaAndNavigateTo: openSpaceAreaAndNavigateTo, @@ -46,9 +46,6 @@ function newSuperalgosDocSpace() { let textArea let selectedParagraph - let selectedParagraphData = '' - let selectedParagraphIndex = '' - let selectedParagraphHeight = 0 let objectBeingRendered let paragraphMap // Here we will store a map of paragraphs from the Docs Node, Concept or Topics Schema in order to find it when we need to update them. let appSchemaDocument @@ -60,7 +57,6 @@ function newSuperalgosDocSpace() { thisObject.menuLabelsMap = new Map() setupSidePanelTab() - setUpContextMenu() setUpMenuItemsMap() setupUserLanguage() @@ -70,6 +66,7 @@ function newSuperalgosDocSpace() { thisObject.documentPage = newSuperalgosDocsDocumentPage() thisObject.footer = newSuperalgosDocsFooter() thisObject.commandInterface = newSuperalgosDocsCommmandInterface() + thisObject.contextMenu = newSuperalgosDocsContextMenu() thisObject.searchEngine.initialize() thisObject.mainSearchPage.initialize() @@ -77,6 +74,7 @@ function newSuperalgosDocSpace() { thisObject.documentPage.initialize() thisObject.footer.initialize() thisObject.commandInterface.initialize() + thisObject.contextMenu.initialize() isInitialized = true @@ -103,288 +101,6 @@ function newSuperalgosDocSpace() { browserResizedEventSubscriptionId = canvas.eventHandler.listenToEvent('Browser Resized', resize) } - function setUpContextMenu() { - window.contextMenu = { - editParagraph: editParagraph, - deleteParagraph: deleteParagraph, - toJavascript: toJavascript, - toJson: toJson, - toText: toText, - toTitle: toTitle, - toSubtitle: toSubtitle, - toNote: toNote, - toWarning: toWarning, - toError: toError, - toImportant: toImportant, - toSuccess: toSuccess, - toCallout: toCallout, - toSummary: toSummary, - toList: toList, - toTable: toTable, - toHierarchy: toHierarchy, - toGif: toGif, - toPng: toPng, - toAnchor: toAnchor, - toBlock: toBlock, - toInclude: toInclude, - toSection: toSection, - copyLink: copyLink, - toWebPageLink: toWebPageLink, - toYouTubeVideo: toYouTubeVideo - } - - function editParagraph() { - contextMenuForceOutClick() - showHTMLTextArea() - - function showHTMLTextArea() { - if (selectedParagraph === undefined) { return } - - /* - When in editing mode, some type of paragraphs need to extend - the text area style so that while editing, it looks and feel - like the non editing style of the paragraph. For those we - add an extra style class. - */ - let extraClassName = '' - if (selectedParagraph.id.indexOf('definition') >= 0) { - extraClassName = ' ' + '' - } - if (selectedParagraph.id.indexOf('title') >= 0) { - extraClassName = ' ' + 'docs-h3' - } - if (selectedParagraph.id.indexOf('subtitle') >= 0) { - extraClassName = ' ' + 'docs-h4' - } - if (selectedParagraph.id.indexOf('note') >= 0) { - extraClassName = ' ' + 'docs-alert-note' - } - if (selectedParagraph.id.indexOf('success') >= 0) { - extraClassName = ' ' + 'docs-alert-success' - } - if (selectedParagraph.id.indexOf('important') >= 0) { - extraClassName = ' ' + 'docs-alert-important' - } - if (selectedParagraph.id.indexOf('warning') >= 0) { - extraClassName = ' ' + 'docs-alert-warning' - } - if (selectedParagraph.id.indexOf('error') >= 0) { - extraClassName = ' ' + 'docs-alert-error' - } - if (selectedParagraph.id.indexOf('javascript') >= 0) { - extraClassName = ' ' + 'language-javascript' - } - if (selectedParagraph.id.indexOf('json') >= 0) { - extraClassName = ' ' + 'language-json' - } - - textArea = document.createElement('textarea'); - textArea.id = "textArea"; - textArea.spellcheck = false; - textArea.className = "docs-text-area" + extraClassName - textArea.style.height = selectedParagraphHeight - textArea.value = selectedParagraphData - selectedParagraph.innerHTML = "" - selectedParagraph.appendChild(textArea) - textArea.style.display = 'block' - textArea.focus() - contextMenuForceOutClick() - enterEditMode() - } - } - - function deleteParagraph() { - if (selectedParagraphIndex === undefined) { return } - if (selectedParagraphIndex === 0) { return } - docsSchemaDocument.paragraphs.splice(selectedParagraphIndex, 1) - contextMenuForceOutClick() - UI.projects.superalgos.spaces.docsSpace.documentPage.render(objectBeingRendered, paragraphMap) - } - - function toJavascript() { - let docSchemaParagraph = paragraphMap.get(selectedParagraph.id) - docSchemaParagraph.style = 'Javascript' - contextMenuForceOutClick() - UI.projects.superalgos.spaces.docsSpace.documentPage.render(objectBeingRendered, paragraphMap) - } - - function toJson() { - let docSchemaParagraph = paragraphMap.get(selectedParagraph.id) - docSchemaParagraph.style = 'Json' - contextMenuForceOutClick() - UI.projects.superalgos.spaces.docsSpace.documentPage.render(objectBeingRendered, paragraphMap) - } - - function toText() { - let docSchemaParagraph = paragraphMap.get(selectedParagraph.id) - docSchemaParagraph.style = 'Text' - contextMenuForceOutClick() - UI.projects.superalgos.spaces.docsSpace.documentPage.render(objectBeingRendered, paragraphMap) - } - - function toTitle() { - let docSchemaParagraph = paragraphMap.get(selectedParagraph.id) - docSchemaParagraph.style = 'Title' - contextMenuForceOutClick() - UI.projects.superalgos.spaces.docsSpace.documentPage.render(objectBeingRendered, paragraphMap) - } - - function toSubtitle() { - let docSchemaParagraph = paragraphMap.get(selectedParagraph.id) - docSchemaParagraph.style = 'Subtitle' - contextMenuForceOutClick() - UI.projects.superalgos.spaces.docsSpace.documentPage.render(objectBeingRendered, paragraphMap) - } - - function toNote() { - let docSchemaParagraph = paragraphMap.get(selectedParagraph.id) - docSchemaParagraph.style = 'Note' - contextMenuForceOutClick() - UI.projects.superalgos.spaces.docsSpace.documentPage.render(objectBeingRendered, paragraphMap) - } - - function toWarning() { - let docSchemaParagraph = paragraphMap.get(selectedParagraph.id) - docSchemaParagraph.style = 'Warning' - contextMenuForceOutClick() - UI.projects.superalgos.spaces.docsSpace.documentPage.render(objectBeingRendered, paragraphMap) - } - - function toError() { - let docSchemaParagraph = paragraphMap.get(selectedParagraph.id) - docSchemaParagraph.style = 'Error' - contextMenuForceOutClick() - UI.projects.superalgos.spaces.docsSpace.documentPage.render(objectBeingRendered, paragraphMap) - } - - function toImportant() { - let docSchemaParagraph = paragraphMap.get(selectedParagraph.id) - docSchemaParagraph.style = 'Important' - contextMenuForceOutClick() - UI.projects.superalgos.spaces.docsSpace.documentPage.render(objectBeingRendered, paragraphMap) - } - - function toSuccess() { - let docSchemaParagraph = paragraphMap.get(selectedParagraph.id) - docSchemaParagraph.style = 'Success' - contextMenuForceOutClick() - UI.projects.superalgos.spaces.docsSpace.documentPage.render(objectBeingRendered, paragraphMap) - } - - function toCallout() { - let docSchemaParagraph = paragraphMap.get(selectedParagraph.id) - docSchemaParagraph.style = 'Callout' - contextMenuForceOutClick() - UI.projects.superalgos.spaces.docsSpace.documentPage.render(objectBeingRendered, paragraphMap) - } - - function toSummary() { - let docSchemaParagraph = paragraphMap.get(selectedParagraph.id) - docSchemaParagraph.style = 'Summary' - contextMenuForceOutClick() - UI.projects.superalgos.spaces.docsSpace.documentPage.render(objectBeingRendered, paragraphMap) - } - - function toSection() { - let docSchemaParagraph = paragraphMap.get(selectedParagraph.id) - docSchemaParagraph.style = 'Section' - contextMenuForceOutClick() - UI.projects.superalgos.spaces.docsSpace.documentPage.render(objectBeingRendered, paragraphMap) - } - - function toList() { - let docSchemaParagraph = paragraphMap.get(selectedParagraph.id) - docSchemaParagraph.style = 'List' - contextMenuForceOutClick() - UI.projects.superalgos.spaces.docsSpace.documentPage.render(objectBeingRendered, paragraphMap) - } - - function toTable() { - let docSchemaParagraph = paragraphMap.get(selectedParagraph.id) - docSchemaParagraph.style = 'Table' - contextMenuForceOutClick() - UI.projects.superalgos.spaces.docsSpace.documentPage.render(objectBeingRendered, paragraphMap) - } - - function toHierarchy() { - let docSchemaParagraph = paragraphMap.get(selectedParagraph.id) - docSchemaParagraph.style = 'Hierarchy' - contextMenuForceOutClick() - UI.projects.superalgos.spaces.docsSpace.documentPage.render(objectBeingRendered, paragraphMap) - } - - function toGif() { - let docSchemaParagraph = paragraphMap.get(selectedParagraph.id) - docSchemaParagraph.style = 'Gif' - contextMenuForceOutClick() - UI.projects.superalgos.spaces.docsSpace.documentPage.render(objectBeingRendered, paragraphMap) - } - - function toPng() { - let docSchemaParagraph = paragraphMap.get(selectedParagraph.id) - docSchemaParagraph.style = 'Png' - contextMenuForceOutClick() - UI.projects.superalgos.spaces.docsSpace.documentPage.render(objectBeingRendered, paragraphMap) - } - - function toAnchor() { - let docSchemaParagraph = paragraphMap.get(selectedParagraph.id) - docSchemaParagraph.style = 'Anchor' - contextMenuForceOutClick() - UI.projects.superalgos.spaces.docsSpace.documentPage.render(objectBeingRendered, paragraphMap) - } - - function toBlock() { - let docSchemaParagraph = paragraphMap.get(selectedParagraph.id) - docSchemaParagraph.style = 'Block' - contextMenuForceOutClick() - UI.projects.superalgos.spaces.docsSpace.documentPage.render(objectBeingRendered, paragraphMap) - } - - function toInclude() { - let docSchemaParagraph = paragraphMap.get(selectedParagraph.id) - docSchemaParagraph.style = 'Include' - contextMenuForceOutClick() - UI.projects.superalgos.spaces.docsSpace.documentPage.render(objectBeingRendered, paragraphMap) - } - - function toWebPageLink() { - let docSchemaParagraph = paragraphMap.get(selectedParagraph.id) - docSchemaParagraph.style = 'Link' - contextMenuForceOutClick() - UI.projects.superalgos.spaces.docsSpace.documentPage.render(objectBeingRendered, paragraphMap) - } - - function toYouTubeVideo() { - let docSchemaParagraph = paragraphMap.get(selectedParagraph.id) - docSchemaParagraph.style = 'Youtube' - contextMenuForceOutClick() - UI.projects.superalgos.spaces.docsSpace.documentPage.render(objectBeingRendered, paragraphMap) - } - - function copyLink() { - let docSchemaParagraph = paragraphMap.get(selectedParagraph.id) - let clipboard - switch (docSchemaParagraph.style) { - case 'Anchor': { - clipboard = "docs.goto " + objectBeingRendered.project + '->' + objectBeingRendered.category + '->' + objectBeingRendered.type + '->' + docSchemaParagraph.text - break - } - case 'Block': { - clipboard = objectBeingRendered.project + '->' + objectBeingRendered.category + '->' + objectBeingRendered.type + '->' + docSchemaParagraph.text - break - } - default: { - clipboard = docSchemaParagraph.text - break - } - } - - UI.projects.superalgos.utilities.clipboard.copyTextToClipboard(clipboard) - contextMenuForceOutClick() - } - } - function setUpMenuItemsMap() { /* Here we will put put all the menu item labels of all nodes at all @@ -419,6 +135,7 @@ function newSuperalgosDocSpace() { thisObject.documentPage.finalize() thisObject.footer.finalize() thisObject.commandInterface.finalize() + thisObject.contextMenu.finalize() thisObject.searchEngine = undefined thisObject.mainSearchPage = undefined @@ -426,6 +143,7 @@ function newSuperalgosDocSpace() { thisObject.documentPage = undefined thisObject.footer = undefined thisObject.commandInterface = undefined + thisObject.contextMenu = undefined objectBeingRendered = undefined paragraphMap = undefined @@ -444,7 +162,7 @@ function newSuperalgosDocSpace() { UI.projects.superalgos.spaces.docsSpace.language = pLanguage window.localStorage.setItem('Docs Language', UI.projects.superalgos.spaces.docsSpace.language) let languageLabel = UI.projects.superalgos.utilities.languages.getLaguageLabel(UI.projects.superalgos.spaces.docsSpace.language) - navigateTo('Superalgos', 'Topic', 'Docs In ' + languageLabel) + UI.projects.superalgos.spaces.docsSpace.navigateTo('Superalgos', 'Topic', 'Docs In ' + languageLabel) } function onKeyDown(event) { @@ -556,178 +274,7 @@ function newSuperalgosDocSpace() { } } EDITOR_ON_FOCUS = false - UI.projects.superalgos.spaces.docsSpace.documentPage.render(objectBeingRendered, paragraphMap) - } - } - - function contextMenuForceOutClick() { - const outClick = document.getElementById('docs-space-div') - const menu = document.getElementById('menu') - menu.classList.remove('show') - outClick.style.display = "none" - } - - function contextMenuGetSelection() { - let selection = window.getSelection() - - /* - We need to locate the parent node that it is a Paragraph, - otherwise we could end up in an inner html element. - */ - let paragraphNode = selection.baseNode - - if (paragraphNode.id !== undefined && paragraphNode.parentNode.className === "docs-tooltip") { - return false - } - - - for (let i = 1; i < 10; i++) { - if (paragraphNode === undefined || paragraphNode === null) { return false } - if (paragraphNode.id === undefined || paragraphNode.id.indexOf('editable-paragraph') < 0) { - paragraphNode = paragraphNode.parentNode - if (paragraphNode === undefined) { return false } - } - } - if (paragraphNode === undefined || paragraphNode === null || paragraphNode.id === undefined || paragraphNode.id.indexOf('editable-paragraph') < 0) { - return false - } - /* - Get the dimenssions of the current paragraph to help us to define the dimenssions of the text area. - */ - selectedParagraph = paragraphNode - selectedParagraphHeight = paragraphNode.getClientRects()[0].height - if (selectedParagraphHeight < 30) { selectedParagraphHeight = 30 } - /* - We need to clean the Tool Tips text that might be at the paragraph selected. - To not destroy the DOM structure we will use a clone. - */ - paragraphNode = paragraphNode.cloneNode(true) - scanNodeChildren(paragraphNode) - function scanNodeChildren(node) { - if (node.childNodes === undefined) { return } - for (let i = 0; i < node.childNodes.length; i++) { - let childNode = node.childNodes[i] - if (childNode.className === "docs-tooltip") { - childNode.innerText = childNode.childNodes[0].data - } else { - scanNodeChildren(childNode) - } - } - } - - /* Reset this */ - selectedParagraphIndex = undefined - /* - Depending on the Style of Paragraph we will need to remove - some info from the innerText. - */ - if (paragraphNode.id.indexOf('definition-') >= 0) { - if (paragraphNode.id.indexOf('-summary') >= 0) { - selectedParagraphData = paragraphNode.innerText.trim().substring(9, paragraphNode.innerText.length) - } else { - selectedParagraphData = paragraphNode.innerText.trim() - } - return true - } - /* - Remeber the Selected Paragraph Index - */ - let splittedId = paragraphNode.id.split('-') - selectedParagraphIndex = splittedId[splittedId.length - 2] - /* - Check the style of the Paragraph - */ - if (paragraphNode.id.indexOf('-text') >= 0) { - selectedParagraphData = paragraphNode.innerText.trim() - return true - } - if (paragraphNode.id.indexOf('-title') >= 0) { - selectedParagraphData = paragraphNode.innerText.trim() - return true - } - if (paragraphNode.id.indexOf('-subtitle') >= 0) { - selectedParagraphData = paragraphNode.innerText.trim() - return true - } - if (paragraphNode.id.indexOf('-note') >= 0) { - selectedParagraphData = paragraphNode.innerText.trim().substring(6, paragraphNode.innerText.length) - return true - } - if (paragraphNode.id.indexOf('-success') >= 0) { - selectedParagraphData = paragraphNode.innerText.trim().substring(5, paragraphNode.innerText.length) - return true - } - if (paragraphNode.id.indexOf('-important') >= 0) { - selectedParagraphData = paragraphNode.innerText.trim().substring(11, paragraphNode.innerText.length) - return true - } - if (paragraphNode.id.indexOf('-warning') >= 0) { - selectedParagraphData = paragraphNode.innerText.trim().substring(10, paragraphNode.innerText.length) - return true - } - if (paragraphNode.id.indexOf('-error') >= 0) { - selectedParagraphData = paragraphNode.innerText.trim().substring(8, paragraphNode.innerText.length) - return true - } - if (paragraphNode.id.indexOf('-list') >= 0) { - selectedParagraphData = paragraphNode.innerText.trim() - return true - } - if (paragraphNode.id.indexOf('-table') >= 0) { - selectedParagraphData = UI.projects.superalgos.utilities.docs.reverseParseTable(paragraphNode.innerHTML) - return true - } - if (paragraphNode.id.indexOf('-hierarchy') >= 0) { - selectedParagraphData = UI.projects.superalgos.utilities.docs.reverseParseHierarchy(paragraphNode.innerHTML) - return true - } - if (paragraphNode.id.indexOf('-gif') >= 0) { - selectedParagraphData = UI.projects.superalgos.utilities.docs.reverseParseGIF(paragraphNode.innerHTML) - return true - } - if (paragraphNode.id.indexOf('-png') >= 0) { - selectedParagraphData = UI.projects.superalgos.utilities.docs.reverseParsePNG(paragraphNode.innerHTML) - return true - } - if (paragraphNode.id.indexOf('-javascript') >= 0) { - selectedParagraphData = paragraphNode.innerText.trim().substring(1, paragraphNode.innerText.length) - return true - } - if (paragraphNode.id.indexOf('-json') >= 0) { - selectedParagraphData = paragraphNode.innerText.trim().substring(1, paragraphNode.innerText.length) - return true - } - if (paragraphNode.id.indexOf('-callout') >= 0) { - selectedParagraphData = paragraphNode.innerText.trim() - return true - } - if (paragraphNode.id.indexOf('-summary') >= 0) { - selectedParagraphData = paragraphNode.innerText.trim().substring(9, paragraphNode.innerText.length) - return true - } - if (paragraphNode.id.indexOf('-anchor') >= 0) { - selectedParagraphData = paragraphNode.innerText.trim() - return true - } - if (paragraphNode.id.indexOf('-section') >= 0) { - selectedParagraphData = paragraphNode.innerText.trim() - return true - } - if (paragraphNode.id.indexOf('-block') >= 0) { - selectedParagraphData = paragraphNode.innerText.trim() - return true - } - if (paragraphNode.id.indexOf('-include') >= 0) { - selectedParagraphData = paragraphNode.innerText.trim() - return true - } - if (paragraphNode.id.indexOf('-link') >= 0) { - selectedParagraphData = UI.projects.superalgos.utilities.docs.reverseParseLink(paragraphNode.innerHTML) - return true - } - if (paragraphNode.id.indexOf('-youtube') >= 0) { - selectedParagraphData = UI.projects.superalgos.utilities.docs.reverseParseYoutube(paragraphNode.innerHTML) - return true + UI.projects.superalgos.spaces.docsSpace.documentPage.render() } } @@ -738,7 +285,7 @@ function newSuperalgosDocSpace() { UI.projects.superalgos.spaces.docsSpace.mainSearchPage.detectEnterOnSearchBox() UI.projects.superalgos.spaces.docsSpace.mainSearchPage.setFocusOnSearchBox() } else { - navigateTo(objectBeingRendered.project, objectBeingRendered.category, objectBeingRendered.type) + UI.projects.superalgos.spaces.docsSpace.navigateTo(objectBeingRendered.project, objectBeingRendered.category, objectBeingRendered.type) } } @@ -850,7 +397,7 @@ function newSuperalgosDocSpace() { nodeId: nodeId } - UI.projects.superalgos.spaces.docsSpace.documentPage.render(objectBeingRendered, paragraphMap) + UI.projects.superalgos.spaces.docsSpace.documentPage.render() /* Here we will check if we need to position the page at a particular anchor or at the top. diff --git a/Projects/Superalgos/UI/Spaces/Docs-Space/DocumentPage.js b/Projects/Superalgos/UI/Spaces/Docs-Space/DocumentPage.js index 0ce917a54..da44a6fde 100644 --- a/Projects/Superalgos/UI/Spaces/Docs-Space/DocumentPage.js +++ b/Projects/Superalgos/UI/Spaces/Docs-Space/DocumentPage.js @@ -15,7 +15,7 @@ function newSuperalgosDocsDocumentPage() { } - function render(objectBeingRendered, paragraphMap) { + function render() { appSchemaDocument = SCHEMAS_BY_PROJECT.get(objectBeingRendered.project).map.appSchema.get(objectBeingRendered.type) @@ -1526,7 +1526,7 @@ function newSuperalgosDocsDocumentPage() { exitEditMode() return } - if (contextMenuGetSelection() === false) { + if (UI.projects.superalgos.spaces.docsSpace.contextMenu.getSelection() === false) { /* The click was in a place where we can not recognize an editable piece. We will not open the menu in this circunstances. @@ -1543,7 +1543,7 @@ function newSuperalgosDocsDocumentPage() { outClick.addEventListener('click', () => { if (EDITOR_ON_FOCUS !== true) { - contextMenuForceOutClick() + UI.projects.superalgos.spaces.docsSpace.contextMenu.forceOutClick() } }) } diff --git a/Projects/Superalgos/UI/Spaces/Docs-Space/MainSearchPage.js b/Projects/Superalgos/UI/Spaces/Docs-Space/MainSearchPage.js index 5f2332954..75ada5239 100644 --- a/Projects/Superalgos/UI/Spaces/Docs-Space/MainSearchPage.js +++ b/Projects/Superalgos/UI/Spaces/Docs-Space/MainSearchPage.js @@ -43,12 +43,12 @@ function newSuperalgosDocsMainSearchPage() { function detectEnterOnSearchBox() { const element = document.getElementsByClassName("docs-search-input")[0] - if (UI.projects.superalgos.spaces.docsSpace.command !== undefined) { - element.value = UI.projects.superalgos.spaces.docsSpace.command + if (UI.projects.superalgos.spaces.docsSpace.commandInterface.command !== undefined) { + element.value = UI.projects.superalgos.spaces.docsSpace.commandInterface.command } element.addEventListener("keyup", function (event) { if (event.key === "Enter" || event.keyCode === 13) { - UI.projects.superalgos.spaces.docsSpace.command = element.value + UI.projects.superalgos.spaces.docsSpace.commandInterface.command = element.value UI.projects.superalgos.spaces.docsSpace.commandInterface.detectCommands() detectEnterOnSearchBox() diff --git a/Projects/Superalgos/UI/Spaces/Docs-Space/SearchResultsPage.js b/Projects/Superalgos/UI/Spaces/Docs-Space/SearchResultsPage.js index 82c01dd1e..462cf80bf 100644 --- a/Projects/Superalgos/UI/Spaces/Docs-Space/SearchResultsPage.js +++ b/Projects/Superalgos/UI/Spaces/Docs-Space/SearchResultsPage.js @@ -28,7 +28,7 @@ function newSuperalgosDocsSearchResultsPage() { let documentPoints = 0 for (const style in documentIndex.phraseCount) { - let key = UI.projects.superalgos.utilities.strings.cleanTextOfCommonWordEndings(UI.projects.superalgos.spaces.docsSpace.command.toLowerCase()) + let key = UI.projects.superalgos.utilities.strings.cleanTextOfCommonWordEndings(UI.projects.superalgos.spaces.docsSpace.commandInterface.command.toLowerCase()) let thisPhraseCount = documentIndex.phraseCount[style].get(key) if (thisPhraseCount === undefined) { thisPhraseCount = 0