diff --git a/Projects/Superalgos/UI/Spaces/Design-Space/DesignSpace.js b/Projects/Superalgos/UI/Spaces/Design-Space/DesignSpace.js index 09a05e437..23e4647f3 100644 --- a/Projects/Superalgos/UI/Spaces/Design-Space/DesignSpace.js +++ b/Projects/Superalgos/UI/Spaces/Design-Space/DesignSpace.js @@ -1,6 +1,4 @@ - function newSuperalgosDesignSpace() { - const MODULE_NAME = 'Designe Space' let thisObject = { container: undefined, iconsByProjectAndName: undefined, diff --git a/Projects/Superalgos/UI/Spaces/Docs-Space/DocsSpace.js b/Projects/Superalgos/UI/Spaces/Docs-Space/DocsSpace.js index 63f2c76a0..13fe41e75 100644 --- a/Projects/Superalgos/UI/Spaces/Docs-Space/DocsSpace.js +++ b/Projects/Superalgos/UI/Spaces/Docs-Space/DocsSpace.js @@ -1,10 +1,16 @@ function newSuperalgosDocSpace() { const MODULE_NAME = 'Doc Space' let thisObject = { - changeLanguage: changeLanguage, isVisible: undefined, sidePanelTab: undefined, container: undefined, + searchEngine: undefined, + mainSearchPage: undefined, + searchResultsPage: undefined, + footer: undefined, + documentPage: undefined, + language: undefined, + changeLanguage: changeLanguage, openSpaceAreaAndNavigateTo: openSpaceAreaAndNavigateTo, navigateTo: navigateTo, scrollToElement: scrollToElement, @@ -47,35 +53,53 @@ function newSuperalgosDocSpace() { let docsSchemaDocument let menuLabelsMap = new Map() let command - let docsIndex = [] - let language return thisObject function initialize() { - docsIndex = [] - thisObject.sidePanelTab = newSidePanelTab() - thisObject.sidePanelTab.container.connectToParent(thisObject.container, false, false) - thisObject.sidePanelTab.initialize('right') - openingEventSubscriptionId = thisObject.sidePanelTab.container.eventHandler.listenToEvent('opening', onOpening) - closingEventSubscriptionId = thisObject.sidePanelTab.container.eventHandler.listenToEvent('closing', onClosing) - browserResizedEventSubscriptionId = canvas.eventHandler.listenToEvent('Browser Resized', resize) + setupSidePanelTab() setUpContextMenu() setUpMenuItemsMap() + setupUserLanguage() - /* - Getting the used preferred languague - */ - if (window.localStorage.getItem('Docs Language') !== null && window.localStorage.getItem('Docs Language') !== undefined && window.localStorage.getItem('Docs Language') !== 'undefined') { - language = window.localStorage.getItem('Docs Language') - } else { - window.localStorage.setItem('Docs Language', DEFAULT_LANGUAGE) - language = DEFAULT_LANGUAGE - } + thisObject.searchEngine = newSuperalgosDocsSearchEngine() + thisObject.mainSearchPage = newSuperalgosDocsMainSearchPage() + thisObject.searchResultsPage = newSuperalgosDocsSearchResultsPage() + thisObject.documentPage = newSuperalgosDocsDocumentPage() + thisObject.footer = newSuperalgosDocsFooter() + + thisObject.searchEngine.initialize() + thisObject.mainSearchPage.initialize() + thisObject.searchResultsPage.initialize() + thisObject.documentPage.initialize() + thisObject.footer.initialize() isInitialized = true + function setupUserLanguage() { + /* + Getting the used preferred languague + */ + if (window.localStorage.getItem('Docs Language') !== null && window.localStorage.getItem('Docs Language') !== undefined && window.localStorage.getItem('Docs Language') !== 'undefined') { + UI.projects.superalgos.spaces.docsSpace.language = window.localStorage.getItem('Docs Language') + } else { + window.localStorage.setItem('Docs Language', DEFAULT_LANGUAGE) + UI.projects.superalgos.spaces.docsSpace.language = DEFAULT_LANGUAGE + } + + } + + function setupSidePanelTab() { + thisObject.sidePanelTab = newSidePanelTab() + thisObject.sidePanelTab.container.connectToParent(thisObject.container, false, false) + thisObject.sidePanelTab.initialize('right') + openingEventSubscriptionId = thisObject.sidePanelTab.container.eventHandler.listenToEvent('opening', onOpening) + closingEventSubscriptionId = thisObject.sidePanelTab.container.eventHandler.listenToEvent('closing', onClosing) + + browserResizedEventSubscriptionId = canvas.eventHandler.listenToEvent('Browser Resized', resize) + } + function setUpContextMenu() { window.contextMenu = { editParagraph: editParagraph, @@ -386,12 +410,23 @@ function newSuperalgosDocSpace() { thisObject.sidePanelTab.container.eventHandler.stopListening(openingEventSubscriptionId) thisObject.sidePanelTab.container.eventHandler.stopListening(closingEventSubscriptionId) + thisObject.searchEngine.finalize() + thisObject.mainSearchPage.finalize() + thisObject.searchResultsPage.finalize() + thisObject.documentPage.finalize() + thisObject.footer.finalize() + + thisObject.searchEngine = undefined + thisObject.mainSearchPage = undefined + thisObject.searchResultsPage = undefined + thisObject.documentPage = undefined + thisObject.footer = undefined + objectBeingRendered = undefined paragraphMap = undefined appSchemaDocument = undefined docsSchemaDocument = undefined menuLabelsMap = undefined - docsIndex = undefined isInitialized = false } @@ -401,66 +436,12 @@ function newSuperalgosDocSpace() { } function changeLanguage(pLanguage) { - language = pLanguage - window.localStorage.setItem('Docs Language', language) - let languageLabel = UI.projects.superalgos.utilities.languages.getLaguageLabel(language) + 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) } - function cleanTextForSearch(text) { - let result = replaceSpecialCharactersForSpaces(text) - result = result.replaceAll(' ', '') - result = result.replaceAll('s', '') - result = result.replaceAll('ing', '') - result = result.replaceAll('ed', '') - result = result.replaceAll('y', '') - result = result.replaceAll('ies', '') - return result - } - - function replaceSpecialCharactersForSpaces(text) { - let result = text - result = result.replaceAll('. ', ' ') - result = result.replaceAll(', ', ' ') - result = result.replaceAll('- ', ' ') - result = result.replaceAll('/ ', ' ') - result = result.replaceAll('_ ', ' ') - result = result.replaceAll(': ', ' ') - result = result.replaceAll('; ', ' ') - result = result.replaceAll('( ', ' ') - result = result.replaceAll(') ', ' ') - result = result.replaceAll('{ ', ' ') - result = result.replaceAll('} ', ' ') - result = result.replaceAll('[ ', ' ') - result = result.replaceAll('] ', ' ') - result = result.replaceAll('" ', ' ') - result = result.replaceAll('\\n ', ' ') - result = result.replaceAll('\\ ', ' ') - - result = result.replaceAll('.', ' ') - result = result.replaceAll(',', ' ') - result = result.replaceAll('-', ' ') - result = result.replaceAll('/', ' ') - result = result.replaceAll('_', ' ') - result = result.replaceAll(':', ' ') - result = result.replaceAll(';', ' ') - result = result.replaceAll('(', ' ') - result = result.replaceAll(')', ' ') - result = result.replaceAll('{', ' ') - result = result.replaceAll('}', ' ') - result = result.replaceAll('[', ' ') - result = result.replaceAll(']', ' ') - result = result.replaceAll('"', ' ') - result = result.replaceAll('\\n', ' ') - result = result.replaceAll("\\", ' ') - - result = result.replaceAll('@', ' ') - result = result.replaceAll(' ', ' ') - result = result.replaceAll(' ', ' ') - result = result.replaceAll(' ', ' ') - return result - } - function onKeyDown(event) { /* When an editor is on focus we will only @@ -526,7 +507,7 @@ function newSuperalgosDocSpace() { /* Deleting paragarphs is only possible in the default language. */ - if (language === DEFAULT_LANGUAGE) { + if (UI.projects.superalgos.spaces.docsSpace.language === DEFAULT_LANGUAGE) { docsSchemaDocument.paragraphs.splice(selectededitableParagraphIndex, 1) if (docsSchemaDocument.paragraphs.length === 0) { let newParagraph = { @@ -541,7 +522,7 @@ function newSuperalgosDocSpace() { /* Adding paragarphs is only possible in the default language. */ - if (language === DEFAULT_LANGUAGE) { + if (UI.projects.superalgos.spaces.docsSpace.language === DEFAULT_LANGUAGE) { /* We will update the one paragraph we have and we will add the rest. */ @@ -781,7 +762,9 @@ function newSuperalgosDocSpace() { function onOpening() { thisObject.isVisible = true if (objectBeingRendered === undefined) { - renderSearchPage() + thisObject.mainSearchPage.render() + detectEnterOnSearchBox() + setFocusOnSearchBox() } else { navigateTo(objectBeingRendered.project, objectBeingRendered.category, objectBeingRendered.type) } @@ -854,166 +837,11 @@ function newSuperalgosDocSpace() { } } - function setUpSearchEngine() { - for (let j = 0; j < PROJECTS_ARRAY.length; j++) { - let project = PROJECTS_ARRAY[j] - - let documentIndex - - /* Search in Nodes */ - for (let i = 0; i < SCHEMAS_BY_PROJECT.get(project).array.docsNodeSchema.length; i++) { - documentIndex = { - phraseCount: {}, // here we have an object with properties matching it paragraph style, and each property is a map of phrases and their total count. - docsSchemaDocument: SCHEMAS_BY_PROJECT.get(project).array.docsNodeSchema[i], - category: 'Node', - project: project - } - indexDocument(documentIndex) - docsIndex.push(documentIndex) - } - /* Search in Concepts */ - for (let i = 0; i < SCHEMAS_BY_PROJECT.get(project).array.docsConceptSchema.length; i++) { - documentIndex = { - phraseCount: {}, // here we have an object with properties matching it paragraph style, and each property is a map of phrases and their total count. - docsSchemaDocument: SCHEMAS_BY_PROJECT.get(project).array.docsConceptSchema[i], - category: 'Concept', - project: project - } - indexDocument(documentIndex) - docsIndex.push(documentIndex) - } - /* Search in Topics */ - for (let i = 0; i < SCHEMAS_BY_PROJECT.get(project).array.docsTopicSchema.length; i++) { - documentIndex = { - phraseCount: {}, // here we have an object with properties matching it paragraph style, and each property is a map of phrases and their total count. - docsSchemaDocument: SCHEMAS_BY_PROJECT.get(project).array.docsTopicSchema[i], - category: 'Topic', - project: project - } - indexDocument(documentIndex) - docsIndex.push(documentIndex) - } - /* Search in Workspace */ - for (let i = 0; i < SCHEMAS_BY_PROJECT.get(project).array.workspaceSchema.length; i++) { - documentIndex = { - phraseCount: {}, // here we have an object with properties matching it paragraph style, and each property is a map of phrases and their total count. - docsSchemaDocument: SCHEMAS_BY_PROJECT.get(project).array.workspaceSchema[i], - category: 'Workspace', - project: project - } - indexDocument(documentIndex) - docsIndex.push(documentIndex) - } - } - - function indexDocument(documentIndex) { - - if (documentIndex.docsSchemaDocument === undefined) { - return - } - - if (documentIndex.docsSchemaDocument.topic !== undefined) { - let paragraph = { - style: 'Topic', - text: documentIndex.docsSchemaDocument.topic - } - indexParagraph(paragraph) - } - if (documentIndex.docsSchemaDocument.type !== undefined) { - let paragraph = { - style: 'Type', - text: documentIndex.docsSchemaDocument.type - } - indexParagraph(paragraph) - } - if (documentIndex.docsSchemaDocument.definition !== undefined) { - let paragraph = { - style: 'Definition', - text: documentIndex.docsSchemaDocument.definition.text, - translations: documentIndex.docsSchemaDocument.definition.translations - } - indexParagraph(paragraph) - indexAllTranslations(paragraph) - } - if (documentIndex.docsSchemaDocument.paragraphs !== undefined) { - for (let k = 0; k < documentIndex.docsSchemaDocument.paragraphs.length; k++) { - let paragraph = documentIndex.docsSchemaDocument.paragraphs[k] - indexParagraph(paragraph) - indexAllTranslations(paragraph) - } - } - - function indexAllTranslations(paragraph) { - if (paragraph.translations === undefined) { return } - for (i = 0; i < paragraph.translations.length; i++) { - let translation = paragraph.translations[i] - translation.style = paragraph.style - indexParagraph(translation) - } - } - - function indexParagraph(paragraph) { - if (paragraph.text === undefined) { - return - } - if (paragraph.style === undefined) { - return - } - - let text = paragraph.text.toLowerCase() - let style = paragraph.style.toLowerCase() - let stylePhraseCount = documentIndex.phraseCount[style] - - if (stylePhraseCount === undefined) { - stylePhraseCount = new Map() - documentIndex.phraseCount[style] = stylePhraseCount - } - - text = replaceSpecialCharactersForSpaces(text) - - let splittedText = text.split(' ') - - for (n = 0; n < splittedText.length; n++) { - let phrase = '' - for (let m = 0; m < 10; m++) { - let word = splittedText[n + m] - if (word !== undefined) { - if (m === 0) { - phrase = phrase + word - } else { - phrase = phrase + ' ' + word - } - let key = cleanTextForSearch(phrase) - - let thisPhraseCount = stylePhraseCount.get(key) - if (thisPhraseCount === undefined) { thisPhraseCount = 0 } - thisPhraseCount++ - - stylePhraseCount.set(key, thisPhraseCount) - } - } - } - } - } - } - function onClosing() { objectBeingRendered = undefined thisObject.isVisible = false } - function renderSearchPage() { - let HTML = '' - HTML = HTML + '
' - HTML = HTML + '
' - HTML = HTML + '
' - HTML = HTML + '
' - let docsContentDiv = document.getElementById('docs-content-div') - docsContentDiv.innerHTML = HTML + addFooter() - detectEnterOnSearchBox() - setFocusOnSearchBox() - } - function detectCommands() { if (checkHelpCommand() === undefined) { return } @@ -1095,7 +923,7 @@ function newSuperalgosDocSpace() { } if (command.indexOf('Docs.Add') !== 0 && command.indexOf('docs.add') !== 0) { return 'Not Add Command' } - if (language !== DEFAULT_LANGUAGE) { + if (UI.projects.superalgos.spaces.docsSpace.language !== DEFAULT_LANGUAGE) { navigateTo('Superalgos', 'Topic', 'Docs Error Only In English', 'Anchor Only In English') return } @@ -1160,7 +988,7 @@ function newSuperalgosDocSpace() { } if (command.indexOf('Docs.Delete') !== 0 && command.indexOf('docs.delete') !== 0) { return 'Not Delete Command' } - if (language !== DEFAULT_LANGUAGE) { + if (UI.projects.superalgos.spaces.docsSpace.language !== DEFAULT_LANGUAGE) { navigateTo('Superalgos', 'Topic', 'Docs Error Only In English', 'Anchor Only In English') return } @@ -1225,9 +1053,8 @@ function newSuperalgosDocSpace() { } if (command.indexOf('Docs.Reindex') !== 0 && command.indexOf('docs.reindex') !== 0) { return 'Not Reindex Command' } - docsIndex = [] setUpWorkspaceSchemas() - setUpSearchEngine() + thisObject.searchEngine.setUpSearchEngine() renderCommandResultsPage(["Succesfully rebuild the search engine indexes."]) } @@ -1458,7 +1285,7 @@ function newSuperalgosDocSpace() { HTML = HTML + '' let docsContentDiv = document.getElementById('docs-content-div') - docsContentDiv.innerHTML = HTML + addFooter() + docsContentDiv.innerHTML = HTML + UI.projects.superalgos.spaces.docsSpace.footer.addFooter() detectEnterOnSearchBox() setFocusOnSearchBox() @@ -1473,24 +1300,24 @@ function newSuperalgosDocSpace() { buildHTML() function buildResultsArray() { - for (let i = 0; i < docsIndex.length; i++) { - let documentIndex = docsIndex[i] + for (let i = 0; i < thisObject.searchEngine.docsIndex.length; i++) { + let documentIndex = thisObject.searchEngine.docsIndex[i] let documentPoints = 0 for (const style in documentIndex.phraseCount) { - let key = cleanTextForSearch(command.toLowerCase()) + let key = UI.projects.superalgos.utilities.strings.cleanTextOfCommonWordEndings(command.toLowerCase()) let thisPhraseCount = documentIndex.phraseCount[style].get(key) if (thisPhraseCount === undefined) { thisPhraseCount = 0 } if (documentIndex.docsSchemaDocument.type !== undefined) { - if (key === cleanTextForSearch(documentIndex.docsSchemaDocument.type.toLowerCase())) { + if (key === UI.projects.superalgos.utilities.strings.cleanTextOfCommonWordEndings(documentIndex.docsSchemaDocument.type.toLowerCase())) { documentPoints = documentPoints + thisPhraseCount * 100 } } if (documentIndex.docsSchemaDocument.topic !== undefined) { - if (key === cleanTextForSearch(documentIndex.docsSchemaDocument.topic.toLowerCase())) { + if (key === UI.projects.superalgos.utilities.strings.cleanTextOfCommonWordEndings(documentIndex.docsSchemaDocument.topic.toLowerCase())) { documentPoints = documentPoints + thisPhraseCount * 200 } } @@ -1728,7 +1555,7 @@ function newSuperalgosDocSpace() { } let docsContentDiv = document.getElementById('docs-content-div') - docsContentDiv.innerHTML = HTML + addFooter() + docsContentDiv.innerHTML = HTML + UI.projects.superalgos.spaces.docsSpace.footer.addFooter() detectEnterOnSearchBox() setFocusOnSearchBox() @@ -1952,7 +1779,7 @@ function newSuperalgosDocSpace() { Here we inject the HTML we built into the DOM at the Docs Space Div. */ let docsContentDiv = document.getElementById('docs-content-div') - docsContentDiv.innerHTML = HTML + addFooter() + docsContentDiv.innerHTML = HTML + UI.projects.superalgos.spaces.docsSpace.footer.addFooter() console.log(docsContentDiv.innerHTML) @@ -2075,7 +1902,7 @@ function newSuperalgosDocSpace() { } } if (objectBeingRendered.category === 'Node') { - autoGeneratedHtml() + autoGeneratedHtml() } HTML = HTML + '' // Content Ends @@ -3341,51 +3168,6 @@ function newSuperalgosDocSpace() { return HTML } - function addFooter() { - let languageLabel = UI.projects.superalgos.utilities.languages.getLaguageLabel(language) - - let HTML = '' - - HTML = HTML + '' // Container Ends - - return HTML - } - function addWarningIfTranslationIsOutdated(paragraph) { if (paragraph === undefined) { return '' } if (paragraph.updated === undefined) { return '' } @@ -3394,7 +3176,7 @@ function newSuperalgosDocSpace() { for (let i = 0; i < paragraph.translations.length; i++) { let translation = paragraph.translations[i] if (translation.updated === undefined) { continue } - if (translation.language === language) { + if (translation.language === UI.projects.superalgos.spaces.docsSpace.language) { if (paragraph.updated < translation.updated) { return '' } else { @@ -3411,13 +3193,13 @@ function newSuperalgosDocSpace() { if (paragraph.translations.length === 0) { return paragraph.text } for (let i = 0; i < paragraph.translations.length; i++) { let translation = paragraph.translations[i] - if (translation.language === language) { return translation.text } + if (translation.language === UI.projects.superalgos.spaces.docsSpace.language) { return translation.text } } return paragraph.text } function setTextBasedOnLanguage(paragraph, text) { - if (language === DEFAULT_LANGUAGE) { + if (UI.projects.superalgos.spaces.docsSpace.language === DEFAULT_LANGUAGE) { if (paragraph.text !== text) { paragraph.text = text paragraph.updated = (new Date()).valueOf() @@ -3437,7 +3219,7 @@ function newSuperalgosDocSpace() { } for (let i = 0; i < paragraph.translations.length; i++) { let translation = paragraph.translations[i] - if (translation.language === language) { + if (translation.language === UI.projects.superalgos.spaces.docsSpace.language) { if (translation.text !== text) { translation.text = text translation.updated = (new Date()).valueOf() @@ -3446,7 +3228,7 @@ function newSuperalgosDocSpace() { } } let translation = { - language: language, + language: UI.projects.superalgos.spaces.docsSpace.language, text: text, updated: (new Date()).valueOf() } @@ -3991,9 +3773,9 @@ function newSuperalgosDocSpace() { if (UI.projects.superalgos.spaces.designSpace.workspace === undefined) { return } if (UI.projects.superalgos.spaces.designSpace.workspace.isInitialized === false) { return } - if (docsIndex && docsIndex.length === 0) { + if (thisObject.searchEngine.docsIndex && thisObject.searchEngine.docsIndex.length === 0) { setUpWorkspaceSchemas() - setUpSearchEngine() + thisObject.searchEngine.setUpSearchEngine() } } } diff --git a/Projects/Superalgos/UI/Spaces/Docs-Space/DocumentPage.js b/Projects/Superalgos/UI/Spaces/Docs-Space/DocumentPage.js new file mode 100644 index 000000000..b5bd237be --- /dev/null +++ b/Projects/Superalgos/UI/Spaces/Docs-Space/DocumentPage.js @@ -0,0 +1,16 @@ +function newSuperalgosDocsDocumentPage() { + let thisObject = { + initialize: initialize, + finalize: finalize + } + + return thisObject + + function initialize() { + + } + + function finalize() { + + } +} \ No newline at end of file diff --git a/Projects/Superalgos/UI/Spaces/Docs-Space/Footer.js b/Projects/Superalgos/UI/Spaces/Docs-Space/Footer.js new file mode 100644 index 000000000..8c9626d2b --- /dev/null +++ b/Projects/Superalgos/UI/Spaces/Docs-Space/Footer.js @@ -0,0 +1,62 @@ +function newSuperalgosDocsFooter() { + let thisObject = { + addFooter: addFooter, + initialize: initialize, + finalize: finalize + } + + return thisObject + + function initialize() { + + } + + function finalize() { + + } + + function addFooter() { + let languageLabel = UI.projects.superalgos.utilities.languages.getLaguageLabel(UI.projects.superalgos.spaces.docsSpace.language) + + let HTML = '' + + HTML = HTML + '' // Container Ends + + return HTML + } +} \ No newline at end of file diff --git a/Projects/Superalgos/UI/Spaces/Docs-Space/MainSearchPage.js b/Projects/Superalgos/UI/Spaces/Docs-Space/MainSearchPage.js new file mode 100644 index 000000000..4f895631a --- /dev/null +++ b/Projects/Superalgos/UI/Spaces/Docs-Space/MainSearchPage.js @@ -0,0 +1,27 @@ +function newSuperalgosDocsMainSearchPage() { + let thisObject = { + render: render, + initialize: initialize, + finalize: finalize + } + + return thisObject + + function initialize() { + + } + + function finalize() { + + } + + function render() { + let HTML = '' + HTML = HTML + '
' + HTML = HTML + '
' + HTML = HTML + '
' + HTML = HTML + '
' + let docsContentDiv = document.getElementById('docs-content-div') + docsContentDiv.innerHTML = HTML + UI.projects.superalgos.spaces.docsSpace.footer.addFooter() + } +} \ No newline at end of file diff --git a/Projects/Superalgos/UI/Spaces/Docs-Space/SearchEngine.js b/Projects/Superalgos/UI/Spaces/Docs-Space/SearchEngine.js new file mode 100644 index 000000000..d2c52eea5 --- /dev/null +++ b/Projects/Superalgos/UI/Spaces/Docs-Space/SearchEngine.js @@ -0,0 +1,163 @@ +function newSuperalgosDocsSearchEngine() { + let thisObject = { + docsIndex: undefined, + setUpSearchEngine: setUpSearchEngine, + initialize: initialize, + finalize: finalize + } + + return thisObject + + function initialize() { + thisObject.docsIndex = [] + } + + function finalize() { + thisObject.docsIndex = undefined + } + + function setUpSearchEngine() { + thisObject.docsIndex = [] + + for (let j = 0; j < PROJECTS_ARRAY.length; j++) { + let project = PROJECTS_ARRAY[j] + + let documentIndex + + /* Search in Nodes */ + for (let i = 0; i < SCHEMAS_BY_PROJECT.get(project).array.docsNodeSchema.length; i++) { + documentIndex = { + phraseCount: {}, // here we have an object with properties matching it paragraph style, and each property is a map of phrases and their total count. + docsSchemaDocument: SCHEMAS_BY_PROJECT.get(project).array.docsNodeSchema[i], + category: 'Node', + project: project + } + indexDocument(documentIndex) + thisObject.docsIndex.push(documentIndex) + } + /* Search in Concepts */ + for (let i = 0; i < SCHEMAS_BY_PROJECT.get(project).array.docsConceptSchema.length; i++) { + documentIndex = { + phraseCount: {}, // here we have an object with properties matching it paragraph style, and each property is a map of phrases and their total count. + docsSchemaDocument: SCHEMAS_BY_PROJECT.get(project).array.docsConceptSchema[i], + category: 'Concept', + project: project + } + indexDocument(documentIndex) + thisObject.docsIndex.push(documentIndex) + } + /* Search in Topics */ + for (let i = 0; i < SCHEMAS_BY_PROJECT.get(project).array.docsTopicSchema.length; i++) { + documentIndex = { + phraseCount: {}, // here we have an object with properties matching it paragraph style, and each property is a map of phrases and their total count. + docsSchemaDocument: SCHEMAS_BY_PROJECT.get(project).array.docsTopicSchema[i], + category: 'Topic', + project: project + } + indexDocument(documentIndex) + thisObject.docsIndex.push(documentIndex) + } + /* Search in Workspace */ + for (let i = 0; i < SCHEMAS_BY_PROJECT.get(project).array.workspaceSchema.length; i++) { + documentIndex = { + phraseCount: {}, // here we have an object with properties matching it paragraph style, and each property is a map of phrases and their total count. + docsSchemaDocument: SCHEMAS_BY_PROJECT.get(project).array.workspaceSchema[i], + category: 'Workspace', + project: project + } + indexDocument(documentIndex) + thisObject.docsIndex.push(documentIndex) + } + } + + function indexDocument(documentIndex) { + + if (documentIndex.docsSchemaDocument === undefined) { + return + } + + if (documentIndex.docsSchemaDocument.topic !== undefined) { + let paragraph = { + style: 'Topic', + text: documentIndex.docsSchemaDocument.topic + } + indexParagraph(paragraph) + } + if (documentIndex.docsSchemaDocument.type !== undefined) { + let paragraph = { + style: 'Type', + text: documentIndex.docsSchemaDocument.type + } + indexParagraph(paragraph) + } + if (documentIndex.docsSchemaDocument.definition !== undefined) { + let paragraph = { + style: 'Definition', + text: documentIndex.docsSchemaDocument.definition.text, + translations: documentIndex.docsSchemaDocument.definition.translations + } + indexParagraph(paragraph) + indexAllTranslations(paragraph) + } + if (documentIndex.docsSchemaDocument.paragraphs !== undefined) { + for (let k = 0; k < documentIndex.docsSchemaDocument.paragraphs.length; k++) { + let paragraph = documentIndex.docsSchemaDocument.paragraphs[k] + indexParagraph(paragraph) + indexAllTranslations(paragraph) + } + } + + function indexAllTranslations(paragraph) { + if (paragraph.translations === undefined) { return } + for (i = 0; i < paragraph.translations.length; i++) { + let translation = paragraph.translations[i] + translation.style = paragraph.style + indexParagraph(translation) + } + } + + function indexParagraph(paragraph) { + if (paragraph.text === undefined) { + return + } + if (paragraph.style === undefined) { + return + } + + let text = paragraph.text.toLowerCase() + let style = paragraph.style.toLowerCase() + let stylePhraseCount = documentIndex.phraseCount[style] + + if (stylePhraseCount === undefined) { + stylePhraseCount = new Map() + documentIndex.phraseCount[style] = stylePhraseCount + } + + text = UI.projects.superalgos.utilities.strings.replaceSpecialCharactersForSpaces(text) + + let splittedText = text.split(' ') + + for (n = 0; n < splittedText.length; n++) { + let phrase = '' + for (let m = 0; m < 10; m++) { + let word = splittedText[n + m] + if (word !== undefined) { + if (m === 0) { + phrase = phrase + word + } else { + phrase = phrase + ' ' + word + } + let key = UI.projects.superalgos.utilities.strings.cleanTextOfCommonWordEndings(phrase) + + let thisPhraseCount = stylePhraseCount.get(key) + if (thisPhraseCount === undefined) { thisPhraseCount = 0 } + thisPhraseCount++ + + stylePhraseCount.set(key, thisPhraseCount) + } + } + } + } + } + } +} \ No newline at end of file diff --git a/Projects/Superalgos/UI/Spaces/Docs-Space/SearchResultsPage.js b/Projects/Superalgos/UI/Spaces/Docs-Space/SearchResultsPage.js new file mode 100644 index 000000000..8cbc7a0c8 --- /dev/null +++ b/Projects/Superalgos/UI/Spaces/Docs-Space/SearchResultsPage.js @@ -0,0 +1,16 @@ +function newSuperalgosDocsSearchResultsPage() { + let thisObject = { + initialize: initialize, + finalize: finalize + } + + return thisObject + + function initialize() { + + } + + function finalize() { + + } +} \ No newline at end of file diff --git a/Projects/Superalgos/UI/Utilities/Strings.js b/Projects/Superalgos/UI/Utilities/Strings.js index 66f61f02b..92d87ea65 100644 --- a/Projects/Superalgos/UI/Utilities/Strings.js +++ b/Projects/Superalgos/UI/Utilities/Strings.js @@ -1,7 +1,9 @@ function newSuperalgosUtilitiesStrings() { thisObject = { fromCamelCaseToUpperWithSpaces: fromCamelCaseToUpperWithSpaces, - isCamelCase: isCamelCase + isCamelCase: isCamelCase, + replaceSpecialCharactersForSpaces: replaceSpecialCharactersForSpaces, + cleanTextOfCommonWordEndings: cleanTextOfCommonWordEndings } return thisObject @@ -53,4 +55,58 @@ function newSuperalgosUtilitiesStrings() { } return true } + + function replaceSpecialCharactersForSpaces(text) { + let result = text + result = result.replaceAll('. ', ' ') + result = result.replaceAll(', ', ' ') + result = result.replaceAll('- ', ' ') + result = result.replaceAll('/ ', ' ') + result = result.replaceAll('_ ', ' ') + result = result.replaceAll(': ', ' ') + result = result.replaceAll('; ', ' ') + result = result.replaceAll('( ', ' ') + result = result.replaceAll(') ', ' ') + result = result.replaceAll('{ ', ' ') + result = result.replaceAll('} ', ' ') + result = result.replaceAll('[ ', ' ') + result = result.replaceAll('] ', ' ') + result = result.replaceAll('" ', ' ') + result = result.replaceAll('\\n ', ' ') + result = result.replaceAll('\\ ', ' ') + + result = result.replaceAll('.', ' ') + result = result.replaceAll(',', ' ') + result = result.replaceAll('-', ' ') + result = result.replaceAll('/', ' ') + result = result.replaceAll('_', ' ') + result = result.replaceAll(':', ' ') + result = result.replaceAll(';', ' ') + result = result.replaceAll('(', ' ') + result = result.replaceAll(')', ' ') + result = result.replaceAll('{', ' ') + result = result.replaceAll('}', ' ') + result = result.replaceAll('[', ' ') + result = result.replaceAll(']', ' ') + result = result.replaceAll('"', ' ') + result = result.replaceAll('\\n', ' ') + result = result.replaceAll("\\", ' ') + + result = result.replaceAll('@', ' ') + result = result.replaceAll(' ', ' ') + result = result.replaceAll(' ', ' ') + result = result.replaceAll(' ', ' ') + return result + } + + function cleanTextOfCommonWordEndings(text) { + let result = UI.projects.superalgos.utilities.strings.replaceSpecialCharactersForSpaces(text) + result = result.replaceAll(' ', '') + result = result.replaceAll('s', '') + result = result.replaceAll('ing', '') + result = result.replaceAll('ed', '') + result = result.replaceAll('y', '') + result = result.replaceAll('ies', '') + return result + } } \ No newline at end of file