diff --git a/Client/httpInterface.js b/Client/httpInterface.js index f89deb570..d9376afaf 100644 --- a/Client/httpInterface.js +++ b/Client/httpInterface.js @@ -464,6 +464,60 @@ exports.newHttpInterface = function newHttpInterface(WEB_SERVER, DATA_FILE_SERVE } break } + case 'Save-Tutorial-Schema': { + getBody(processRequest) + + async function processRequest(body) { + try { + let docsSchema = JSON.parse(body) + let project = requestParameters[3] + let filePath = global.env.PATH_TO_PROJECTS + '/' + project + '/Schemas/Docs-Tutorials' + + const fs = require('fs') + fs.rmdir(filePath, { recursive: true }, onDirDeleted) + + function onDirDeleted(err) { + if (err && err.code === 'EBUSY') { + throw ('Can not delete the folder ' + filePath + ' because a file in it is open by some other program.') + } + try { + fs.mkdirSync(filePath) + } catch (err) { + if (err.code !== 'EEXIST') { + throw (err) + } + } + + for (let i = 0; i < docsSchema.length; i++) { + let schemaDocument = docsSchema[i] + let fileContent = JSON.stringify(schemaDocument, undefined, 4) + let pageNumber = '00' + schemaDocument.pageNumber + let fileName = schemaDocument.tutorial.toLowerCase() + '-' + pageNumber.substring(pageNumber.length - 3, pageNumber.length) + '-' + schemaDocument.type.toLowerCase() + for (let j = 0; j < 10; j++) { + fileName = fileName.replace(' ', '-') + } + fileName = fileName + '.json' + + fs.writeFileSync(filePath + '/' + fileName, fileContent) + } + respondWithContent(JSON.stringify(global.DEFAULT_OK_RESPONSE), httpResponse) + } + + } catch (err) { + console.log('[ERROR] httpInterface -> Docs -> Save-Tutorial-Schema -> Method call produced an error.') + console.log('[ERROR] httpInterface -> Docs -> Save-Tutorial-Schema -> err.stack = ' + err.stack) + console.log('[ERROR] httpInterface -> Docs -> Save-Tutorial-Schema -> Params Received = ' + body) + + let error = { + result: 'Fail Because', + message: err.message, + stack: err.stack + } + respondWithContent(JSON.stringify(error), httpResponse) + } + } + break + } case 'Save-Book-Schema': { getBody(processRequest) @@ -1225,6 +1279,10 @@ exports.newHttpInterface = function newHttpInterface(WEB_SERVER, DATA_FILE_SERVE folder = 'Docs-Topics' break } + case 'DocsTutorialSchema': { + folder = 'Docs-Tutorials' + break + } case 'DocsBookSchema': { folder = 'Docs-Books' break diff --git a/Projects/Superalgos/Schemas/Docs-Tutorials/test-tut-001-first-page.json b/Projects/Superalgos/Schemas/Docs-Tutorials/test-tut-001-first-page.json new file mode 100644 index 000000000..3091fa6a8 --- /dev/null +++ b/Projects/Superalgos/Schemas/Docs-Tutorials/test-tut-001-first-page.json @@ -0,0 +1,14 @@ +{ + "tutorial": "Test Tut", + "pageNumber": "1", + "type": "First Page", + "definition": { + "text": "Write here a summary for this tutorial page." + }, + "paragraphs": [ + { + "style": "Text", + "text": "Left click and Edit to enter edit mode and change this text. ENTER to write new paragraphs. ESC to exit edit mode." + } + ] +} \ No newline at end of file diff --git a/Projects/Superalgos/UI/Spaces/Docs-Space/CommandInterface.js b/Projects/Superalgos/UI/Spaces/Docs-Space/CommandInterface.js index 959d73f67..eca1c8266 100644 --- a/Projects/Superalgos/UI/Spaces/Docs-Space/CommandInterface.js +++ b/Projects/Superalgos/UI/Spaces/Docs-Space/CommandInterface.js @@ -136,6 +136,10 @@ function newSuperalgosDocsCommmandInterface() { docsSchemaDocument = SCHEMAS_BY_PROJECT.get(project).map.docsTopicSchema.get(type) break } + case 'tutorial': { + docsSchemaDocument = SCHEMAS_BY_PROJECT.get(project).map.docsTutorialSchema.get(type) + break + } case 'book': { docsSchemaDocument = SCHEMAS_BY_PROJECT.get(project).map.docsBookSchema.get(type) break @@ -213,6 +217,15 @@ function newSuperalgosDocsCommmandInterface() { addTopic(splittedPrimaryCommand[3], splittedSecondaryCommand[0], splittedSecondaryCommand[1], splittedSecondaryCommand[2]) return } + case 'tutorial': { + let splittedSecondaryCommand = secondaryCommand.split('->') + if (splittedSecondaryCommand.length < 3) { + UI.projects.superalgos.spaces.docsSpace.navigateTo('Superalgos', 'Topic', 'Docs Error Too Few Parameters', 'Anchor Too Few Paramenters') + return + } + addTutorial(splittedPrimaryCommand[3], splittedSecondaryCommand[0], splittedSecondaryCommand[1], splittedSecondaryCommand[2]) + return + } case 'book': { addBook(splittedPrimaryCommand[3], secondaryCommand) return @@ -282,6 +295,15 @@ function newSuperalgosDocsCommmandInterface() { deleteTopic(splittedPrimaryCommand[3], splittedSecondaryCommand[0], splittedSecondaryCommand[1], splittedSecondaryCommand[2]) return } + case 'tutorial': { + let splittedSecondaryCommand = secondaryCommand.split('->') + if (splittedSecondaryCommand.length < 3) { + UI.projects.superalgos.spaces.docsSpace.navigateTo('Superalgos', 'Topic', 'Docs Error Too Few Parameters', 'Anchor Too Few Paramenters') + return + } + deleteTutorial(splittedPrimaryCommand[3], splittedSecondaryCommand[0], splittedSecondaryCommand[1], splittedSecondaryCommand[2]) + return + } case 'book': { deleteBook(splittedPrimaryCommand[3], secondaryCommand) return @@ -334,6 +356,10 @@ function newSuperalgosDocsCommmandInterface() { httpRequest(JSON.stringify(docsSchema), 'Docs/Save-Topic-Schema/' + project, onResponse) requestsSent++ + docsSchema = SCHEMAS_BY_PROJECT.get(project).array.docsTutorialSchema + httpRequest(JSON.stringify(docsSchema), 'Docs/Save-Tutorial-Schema/' + project, onResponse) + requestsSent++ + docsSchema = SCHEMAS_BY_PROJECT.get(project).array.docsBookSchema httpRequest(JSON.stringify(docsSchema), 'Docs/Save-Book-Schema/' + project, onResponse) requestsSent++ @@ -438,6 +464,34 @@ function newSuperalgosDocsCommmandInterface() { UI.projects.superalgos.spaces.docsSpace.navigateTo(project, 'Topic', type) } + function addTutorial(project, tutorial, type, pageNumber) { + let template = { + tutorial: tutorial, + pageNumber: pageNumber, + type: type, + definition: { text: "Write here a summary for this tutorial page." }, + paragraphs: [ + { + style: "Text", + text: UI.projects.superalgos.globals.docs.NEW_PARAGRAPH_TEXT + } + ] + } + if (SCHEMAS_BY_PROJECT.get(project) === undefined) { + 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.docsTutorialSchema.get(type) + if (exist !== undefined) { + UI.projects.superalgos.spaces.docsSpace.navigateTo('Superalgos', 'Topic', 'Docs Error Page Already Exists', 'Anchor Page Already Exists') + return + } + + SCHEMAS_BY_PROJECT.get(project).array.docsTutorialSchema.push(template) + SCHEMAS_BY_PROJECT.get(project).map.docsTutorialSchema.set(type, template) + UI.projects.superalgos.spaces.docsSpace.navigateTo(project, 'Tutorial', type) + } + function addBook(project, type) { let template = { type: type, @@ -543,6 +597,38 @@ function newSuperalgosDocsCommmandInterface() { UI.projects.superalgos.spaces.docsSpace.navigateTo('Superalgos', 'Topic', 'Docs Message Deleting Succeed') } + function deleteTutorial(project, tutorial, type, pageNumber) { + if (SCHEMAS_BY_PROJECT.get(project) === undefined) { + 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.docsTutorialSchema.get(type) + if (exist === undefined) { + 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) { + UI.projects.superalgos.spaces.docsSpace.navigateTo('Superalgos', 'Topic', 'Docs Error Page Number Mismatch', 'Anchor Page Number Mismatch') + return + } + if (exist.tutorial !== tutorial) { + UI.projects.superalgos.spaces.docsSpace.navigateTo('Superalgos', 'Topic', 'Docs Error Tutorial Mismatch', 'Anchor Tutorial Mismatch') + return + } + } + + SCHEMAS_BY_PROJECT.get(project).map.docsTutorialSchema.delete(type) + + for (let i = 0; i < SCHEMAS_BY_PROJECT.get(project).array.docsTutorialSchema.length; i++) { + docsSchemaDocument = SCHEMAS_BY_PROJECT.get(project).array.docsTutorialSchema[i] + if (docsSchemaDocument.type === type) { + docsSchemaDocument = SCHEMAS_BY_PROJECT.get(project).array.docsTutorialSchema.splice(i, 1) + break + } + } + UI.projects.superalgos.spaces.docsSpace.navigateTo('Superalgos', 'Topic', 'Docs Message Deleting Succeed') + } + function deleteBook(project, type) { if (SCHEMAS_BY_PROJECT.get(project) === undefined) { UI.projects.superalgos.spaces.docsSpace.navigateTo('Superalgos', 'Topic', 'Docs Error Project Does Not Exist', 'Anchor Project Does Not Exist') diff --git a/Projects/Superalgos/UI/Spaces/Docs-Space/DocsSpace.js b/Projects/Superalgos/UI/Spaces/Docs-Space/DocsSpace.js index 088e66322..737fea298 100644 --- a/Projects/Superalgos/UI/Spaces/Docs-Space/DocsSpace.js +++ b/Projects/Superalgos/UI/Spaces/Docs-Space/DocsSpace.js @@ -16,7 +16,7 @@ function newSuperalgosDocSpace() { currentDocumentBeingRendered: undefined, previousDocumentBeingRendered: undefined, currentBookBeingRendered: undefined, - paragraphMap: undefined, // Here we will store a map of paragraphs from the Docs Node, Concept, Topics or Books Schema in order to find it when we need to update them. + paragraphMap: undefined, // Here we will store a map of paragraphs from the Docs Node, Concept, Topics, Tutorials or Books Schema in order to find it when we need to update them. textArea: undefined, setUpWorkspaceSchemas: setUpWorkspaceSchemas, changeLanguage: changeLanguage, diff --git a/Projects/Superalgos/UI/Spaces/Docs-Space/DocumentPage.js b/Projects/Superalgos/UI/Spaces/Docs-Space/DocumentPage.js index 3005cebfe..604360a72 100644 --- a/Projects/Superalgos/UI/Spaces/Docs-Space/DocumentPage.js +++ b/Projects/Superalgos/UI/Spaces/Docs-Space/DocumentPage.js @@ -45,6 +45,10 @@ function newSuperalgosDocsDocumentPage() { thisObject.docsSchemaDocument = SCHEMAS_BY_PROJECT.get(UI.projects.superalgos.spaces.docsSpace.currentDocumentBeingRendered.project).map.docsTopicSchema.get(UI.projects.superalgos.spaces.docsSpace.currentDocumentBeingRendered.type) break } + case 'Tutorial': { + thisObject.docsSchemaDocument = SCHEMAS_BY_PROJECT.get(UI.projects.superalgos.spaces.docsSpace.currentDocumentBeingRendered.project).map.docsTutorialSchema.get(UI.projects.superalgos.spaces.docsSpace.currentDocumentBeingRendered.type) + break + } case 'Workspace': { thisObject.docsSchemaDocument = SCHEMAS_BY_PROJECT.get(UI.projects.superalgos.spaces.docsSpace.currentDocumentBeingRendered.project).map.workspaceSchema.get(UI.projects.superalgos.spaces.docsSpace.currentDocumentBeingRendered.nodeId) break @@ -119,6 +123,7 @@ function newSuperalgosDocsDocumentPage() { let definitionImagesArray = [] let hierarchyImagesArray = [] let orderedTopicPageIndexArray = [] + let orderedTutorialPageIndexArray = [] let HTML = '' HTML = HTML + '
' @@ -145,12 +150,23 @@ function newSuperalgosDocsDocumentPage() { if (UI.projects.superalgos.spaces.docsSpace.currentDocumentBeingRendered.category === 'Topic') { buildOrderedTopicPageIndex(thisObject.docsSchemaDocument.topic) - generatePreviousAndNextPageNavigation() + generateTopicPreviousAndNextPageNavigation() /* Topic Title */ titleLabel = thisObject.docsSchemaDocument.topic + ' Topic Content' HTML = HTML + '

' + titleLabel + '

' - generateMultiPageIndex() + generateTopicMultiPageIndex() + } + + if (UI.projects.superalgos.spaces.docsSpace.currentDocumentBeingRendered.category === 'Tutorial') { + + buildOrderedTutorialPageIndex(thisObject.docsSchemaDocument.tutorial) + generateTutorialPreviousAndNextPageNavigation() + /* Tutorial Title */ + titleLabel = thisObject.docsSchemaDocument.tutorial + ' Tutorial Content' + HTML = HTML + '

' + titleLabel + '

' + + generateTutorialMultiPageIndex() } HTML = HTML + '' // Common Style Container Ends @@ -183,7 +199,7 @@ function newSuperalgosDocsDocumentPage() { /* We will test if we can draw an image here or not*/ let testElement = UI.projects.superalgos.spaces.designSpace.getIconByProjectAndType(project, type) - if ((category === 'Topic' || category === 'Concept' || category === 'Book') && testElement === undefined) { + if ((category === 'Topic' || category === 'Tutorial' || category === 'Concept' || category === 'Book') && testElement === undefined) { HTML = HTML + '
Summary: ' + UI.projects.superalgos.utilities.docs.addToolTips(definitionText, UI.projects.superalgos.spaces.docsSpace.currentDocumentBeingRendered.type) + '
' } else { HTML = HTML + '
' @@ -231,7 +247,7 @@ function newSuperalgosDocsDocumentPage() { } } - function generatePreviousAndNextPageNavigation() { + function generateTopicPreviousAndNextPageNavigation() { let previousPage let nextPage @@ -256,7 +272,7 @@ function newSuperalgosDocsDocumentPage() { } } - function generateMultiPageIndex() { + function generateTopicMultiPageIndex() { /* We will go through all the schema docuents array for the current project and pick the documents that share the same key thatn the document we are rendering now. @@ -277,6 +293,80 @@ function newSuperalgosDocsDocumentPage() { } } + function buildOrderedTutorialPageIndex(tutorial) { + orderedTutorialPageIndexArray = [] + let schemaArray = SCHEMAS_BY_PROJECT.get(UI.projects.superalgos.spaces.docsSpace.currentDocumentBeingRendered.project).array.docsTutorialSchema + for (let i = 0; i < schemaArray.length; i++) { + let arrayItem = schemaArray[i] + + if (arrayItem.tutorial === tutorial) { + let itemAdded = false + if (orderedTutorialPageIndexArray.length === 0) { + orderedTutorialPageIndexArray.push(arrayItem) + itemAdded = true + } else { + for (let j = 0; j < orderedTutorialPageIndexArray.length; j++) { + let orderedArrayItem = orderedTutorialPageIndexArray[j] + if (Number(arrayItem.pageNumber) < Number(orderedArrayItem.pageNumber)) { + orderedTutorialPageIndexArray.splice(j, 0, arrayItem) + itemAdded = true + break + } + } + } + if (itemAdded === false) { + orderedTutorialPageIndexArray.push(arrayItem) + } + } + } + } + + function generateTutorialPreviousAndNextPageNavigation() { + let previousPage + let nextPage + + for (let i = 0; i < orderedTutorialPageIndexArray.length; i++) { + let arrayItem = orderedTutorialPageIndexArray[i] + + if (thisObject.docsSchemaDocument.type === arrayItem.type) { + previousPage = orderedTutorialPageIndexArray[i - 1] + nextPage = orderedTutorialPageIndexArray[i + 1] + + HTML = HTML + '
' + if (previousPage !== undefined) { + HTML = HTML + '' + } + HTML = HTML + '
<< Current Page: ' + thisObject.docsSchemaDocument.pageNumber + ' >>
' + if (nextPage !== undefined) { + HTML = HTML + '' + } + HTML = HTML + '
' + return + } + } + } + + function generateTutorialMultiPageIndex() { + /* + We will go through all the schema docuents array for the current project and pick + the documents that share the same key thatn the document we are rendering now. + With the info on those picked document we will build the index. + */ + let key = 'auto-generated-index-paragraph-' + autoGeneratedParagraphIndex + let paragraph + + for (let i = 0; i < orderedTutorialPageIndexArray.length; i++) { + let arrayItem = orderedTutorialPageIndexArray[i] + key = 'auto-generated-index-paragraph-' + autoGeneratedParagraphIndex + paragraph = { + style: "Title", + text: "" + arrayItem.type + "" + } + autoGeneratedParagraphIndex++ + HTML = HTML + '

' + arrayItem.pageNumber + '. ' + '' + paragraph.text + '

' + } + } + function addContent() { HTML = HTML + '
' if (thisObject.docsSchemaDocument.paragraphs !== undefined) { @@ -357,11 +447,15 @@ function newSuperalgosDocsDocumentPage() { includedSchemaDocument = SCHEMAS_BY_PROJECT.get(project).map.docsTopicSchema.get(type) break } + case 'Tutorial': { + includedSchemaDocument = SCHEMAS_BY_PROJECT.get(project).map.docsTutorialSchema.get(type) + break + } case 'Book': { includedSchemaDocument = SCHEMAS_BY_PROJECT.get(project).map.docsBookSchema.get(type) break } - default: return 'Category provided (' + category + ') not valid. Use Node, Concept, Topic or Book instead.' + default: return 'Category provided (' + category + ') not valid. Use Node, Concept, Topic, Tutorial or Book instead.' } if (includedSchemaDocument === undefined) { return category + ' document ' + type + ' not found at project ' + project @@ -451,7 +545,7 @@ function newSuperalgosDocsDocumentPage() { autoGeneratedParagraphIndex++ } - generateMultiPageIndex() + generateTopicMultiPageIndex() } } diff --git a/Projects/Superalgos/UI/Spaces/Docs-Space/SearchEngine.js b/Projects/Superalgos/UI/Spaces/Docs-Space/SearchEngine.js index d83a928f2..ed16e6ef0 100644 --- a/Projects/Superalgos/UI/Spaces/Docs-Space/SearchEngine.js +++ b/Projects/Superalgos/UI/Spaces/Docs-Space/SearchEngine.js @@ -57,6 +57,17 @@ function newSuperalgosDocsSearchEngine() { indexDocument(documentIndex) thisObject.docsIndex.push(documentIndex) } + /* Search in Tutorials */ + for (let i = 0; i < SCHEMAS_BY_PROJECT.get(project).array.docsTutorialSchema.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.docsTutorialSchema[i], + category: 'Tutorial', + project: project + } + indexDocument(documentIndex) + thisObject.docsIndex.push(documentIndex) + } /* Search in Books */ for (let i = 0; i < SCHEMAS_BY_PROJECT.get(project).array.docsBookSchema.length; i++) { documentIndex = { @@ -94,6 +105,13 @@ function newSuperalgosDocsSearchEngine() { } indexParagraph(paragraph) } + if (documentIndex.docsSchemaDocument.tutorial !== undefined) { + let paragraph = { + style: 'Tutorial', + text: documentIndex.docsSchemaDocument.tutorial + } + indexParagraph(paragraph) + } if (documentIndex.docsSchemaDocument.type !== undefined) { let paragraph = { style: 'Type', diff --git a/Projects/Superalgos/UI/Spaces/Docs-Space/SearchResultsPage.js b/Projects/Superalgos/UI/Spaces/Docs-Space/SearchResultsPage.js index 55c63ea1c..06146f5c4 100644 --- a/Projects/Superalgos/UI/Spaces/Docs-Space/SearchResultsPage.js +++ b/Projects/Superalgos/UI/Spaces/Docs-Space/SearchResultsPage.js @@ -44,12 +44,21 @@ function newSuperalgosDocsSearchResultsPage() { documentPoints = documentPoints + thisPhraseCount * 200 } } + if (documentIndex.docsSchemaDocument.tutorial !== undefined) { + if (key === UI.projects.superalgos.utilities.strings.cleanTextOfCommonWordEndings(documentIndex.docsSchemaDocument.tutorial.toLowerCase())) { + documentPoints = documentPoints + thisPhraseCount * 200 + } + } switch (style) { case 'topic': { documentPoints = documentPoints + thisPhraseCount * 100 break } + case 'tutorial': { + documentPoints = documentPoints + thisPhraseCount * 100 + break + } case 'type': { documentPoints = documentPoints + thisPhraseCount * 50 break @@ -185,7 +194,7 @@ function newSuperalgosDocsSearchResultsPage() { } function buildHTML() { - const tabs = ['All', 'Nodes', 'Concepts', 'Topics', 'Books', 'Workspace'] + const tabs = ['All', 'Nodes', 'Concepts', 'Topics', 'Tutorials', 'Books', 'Workspace'] let HTML = '' HTML = HTML + '
' HTML = HTML + UI.projects.superalgos.spaces.docsSpace.mainSearchPage.addSearchHeader() @@ -246,10 +255,19 @@ function newSuperalgosDocsSearchResultsPage() { HTML = HTML + '

' + result.documentIndex.project + ' > ' + result.documentIndex.category + path + '

' let mainLink = '' - if (result.documentIndex.docsSchemaDocument.topic === undefined) { - mainLink = result.documentIndex.docsSchemaDocument.type - } else { - mainLink = result.documentIndex.docsSchemaDocument.topic + ' - Page ' + result.documentIndex.docsSchemaDocument.pageNumber + ' - ' + result.documentIndex.docsSchemaDocument.type + + switch (result.documentIndex.docsSchemaDocument.type) { + case 'Topic': { + mainLink = result.documentIndex.docsSchemaDocument.topic + ' - Page ' + result.documentIndex.docsSchemaDocument.pageNumber + ' - ' + result.documentIndex.docsSchemaDocument.type + break + } + case 'Tutorial': { + mainLink = result.documentIndex.docsSchemaDocument.tutorial + ' - Page ' + result.documentIndex.docsSchemaDocument.pageNumber + ' - ' + result.documentIndex.docsSchemaDocument.type + break + } + default: { + mainLink = result.documentIndex.docsSchemaDocument.type + } } HTML = HTML + '

' + mainLink + '

' diff --git a/Projects/Superalgos/UI/Utilities/Docs.js b/Projects/Superalgos/UI/Utilities/Docs.js index d230e84ce..a14c993cd 100644 --- a/Projects/Superalgos/UI/Utilities/Docs.js +++ b/Projects/Superalgos/UI/Utilities/Docs.js @@ -396,6 +396,11 @@ function newSuperalgosUtilitiesDocs() { found = true break } + docsSchemaDocument = SCHEMAS_BY_PROJECT.get(project).map.docsTutorialSchema.get(type) + if (docsSchemaDocument !== undefined) { + found = true + break + } docsSchemaDocument = SCHEMAS_BY_PROJECT.get(project).map.docsBookSchema.get(type) if (docsSchemaDocument !== undefined) { found = true @@ -608,6 +613,57 @@ function newSuperalgosUtilitiesDocs() { break } + /* Search in docsTutorialSchema */ + if (SCHEMAS_BY_PROJECT.get(project).map.docsTutorialSchema.get(cleanPhrase5) !== undefined) { + if (cleanPhrase5 !== excludedType) { + taggedText = taggedText + phrase5.replace(cleanPhrase5, TAGGING_STRING_SEPARATOR + 'Tutorial' + '|' + cleanPhrase5 + '|' + project + TAGGING_STRING_SEPARATOR) + ' ' + } else { + taggedText = taggedText + phrase5 + ' ' + } + i = i + 4 + found = true + break + } + if (SCHEMAS_BY_PROJECT.get(project).map.docsTutorialSchema.get(cleanPhrase4) !== undefined) { + if (cleanPhrase4 !== excludedType) { + taggedText = taggedText + phrase4.replace(cleanPhrase4, TAGGING_STRING_SEPARATOR + 'Tutorial' + '|' + cleanPhrase4 + '|' + project + TAGGING_STRING_SEPARATOR) + ' ' + } else { + taggedText = taggedText + phrase4 + ' ' + } + i = i + 3 + found = true + break + } + if (SCHEMAS_BY_PROJECT.get(project).map.docsTutorialSchema.get(cleanPhrase3) !== undefined) { + if (cleanPhrase3 !== excludedType) { + taggedText = taggedText + phrase3.replace(cleanPhrase3, TAGGING_STRING_SEPARATOR + 'Tutorial' + '|' + cleanPhrase3 + '|' + project + TAGGING_STRING_SEPARATOR) + ' ' + } else { + taggedText = taggedText + phrase3 + ' ' + } + i = i + 2 + found = true + break + } + if (SCHEMAS_BY_PROJECT.get(project).map.docsTutorialSchema.get(cleanPhrase2) !== undefined) { + if (cleanPhrase2 !== excludedType) { + taggedText = taggedText + phrase2.replace(cleanPhrase2, TAGGING_STRING_SEPARATOR + 'Tutorial' + '|' + cleanPhrase2 + '|' + project + TAGGING_STRING_SEPARATOR) + ' ' + } else { + taggedText = taggedText + phrase2 + ' ' + } + i = i + 1 + found = true + break + } + if (SCHEMAS_BY_PROJECT.get(project).map.docsTutorialSchema.get(cleanPhrase1) !== undefined) { + if (cleanPhrase1 !== excludedType) { + taggedText = taggedText + phrase1.replace(cleanPhrase1, TAGGING_STRING_SEPARATOR + 'Tutorial' + '|' + cleanPhrase1 + '|' + project + TAGGING_STRING_SEPARATOR) + ' ' + } else { + taggedText = taggedText + phrase1 + ' ' + } + found = true + break + } + /* Search in docsBookSchema */ if (SCHEMAS_BY_PROJECT.get(project).map.docsBookSchema.get(cleanPhrase5) !== undefined) { if (cleanPhrase5 !== excludedType) { diff --git a/UI/AppPostLoader.js b/UI/AppPostLoader.js index 2b35301c5..fb00686ee 100644 --- a/UI/AppPostLoader.js +++ b/UI/AppPostLoader.js @@ -43,6 +43,7 @@ function newAppPostLoader() { docsNodeSchema: [], docsConceptSchema: [], docsTopicSchema: [], + docsTutorialSchema: [], docsBookSchema: [] }, map: { @@ -50,6 +51,7 @@ function newAppPostLoader() { docsNodeSchema: new Map(), docsConceptSchema: new Map(), docsTopicSchema: new Map(), + docsTutorialSchema: new Map(), docsBookSchema: new Map() } } @@ -135,6 +137,26 @@ function newAppPostLoader() { if (webServerResponses === totalWebServerCalls) { startCanvas() } } + totalWebServerCalls++ + httpRequest(undefined, 'Schema/' + project + '/DocsTutorialSchema', onResponseTutorialSchema) + + function onResponseTutorialSchema(err, schema) { + try { + schemas.array.docsTutorialSchema = JSON.parse(schema) + + for (let j = 0; j < schemas.array.docsTutorialSchema.length; j++) { + let schemaDocument = schemas.array.docsTutorialSchema[j] + let key = schemaDocument.type + schemas.map.docsTutorialSchema.set(key, schemaDocument) + } + } catch (err) { + console.log(err.stack) + } + + webServerResponses++ + if (webServerResponses === totalWebServerCalls) { startCanvas() } + } + totalWebServerCalls++ httpRequest(undefined, 'Schema/' + project + '/DocsBookSchema', onResponseBookSchema)