diff --git a/Client/WebServer/Images/Docs-Menu/docs-delete.png b/Client/WebServer/Images/Docs-Menu/docs-delete.png new file mode 100644 index 000000000..2c31a2f3e Binary files /dev/null and b/Client/WebServer/Images/Docs-Menu/docs-delete.png differ diff --git a/Client/WebServer/index.html b/Client/WebServer/index.html index 5a39693be..556a10ae1 100644 --- a/Client/WebServer/index.html +++ b/Client/WebServer/index.html @@ -178,8 +178,8 @@
diff --git a/Projects/Superalgos/UI/Spaces/Docs-Space/DocsSpace.js b/Projects/Superalgos/UI/Spaces/Docs-Space/DocsSpace.js
index 64f2d4aa6..c29ea93d7 100644
--- a/Projects/Superalgos/UI/Spaces/Docs-Space/DocsSpace.js
+++ b/Projects/Superalgos/UI/Spaces/Docs-Space/DocsSpace.js
@@ -39,6 +39,7 @@ 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.
@@ -78,6 +79,7 @@ function newSuperalgosDocSpace() {
function setUpContextMenu() {
window.contextMenu = {
editParagraph: editParagraph,
+ deleteParagraph: deleteParagraph,
toJavascript: toJavascript,
toJson: toJson,
toText: toText,
@@ -164,6 +166,14 @@ function newSuperalgosDocSpace() {
}
}
+ function deleteParagraph() {
+ if (selectedParagraphIndex === undefined) { return }
+ if (selectedParagraphIndex === 0) { return }
+ docsSchemaDocument.paragraphs.splice(selectedParagraphIndex, 1)
+ contextMenuForceOutClick()
+ renderDocumentPage()
+ }
+
function toJavascript() {
let docSchemaParagraph = paragraphMap.get(selectedParagraph.id)
docSchemaParagraph.style = 'Javascript'
@@ -651,6 +661,9 @@ function newSuperalgosDocSpace() {
}
}
}
+
+ /* Reset this */
+ selectedParagraphIndex = undefined
/*
Depending on the Style of Paragraph we will need to remove
some info from the innerText.
@@ -663,6 +676,14 @@ function newSuperalgosDocSpace() {
}
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
@@ -2863,8 +2884,8 @@ function newSuperalgosDocSpace() {
role = ''
key = key + '-text'
innerHTML = getTextBasedOnLanguage(paragraph)
- innerHTML = addToolTips(innerHTML)
innerHTML = addCodeToCamelCase(innerHTML)
+ innerHTML = addToolTips(innerHTML)
innerHTML = addItalics(innerHTML)
innerHTML = innerHTML + addWarningIfTranslationIsOutdated(paragraph)
break
@@ -2981,9 +3002,9 @@ function newSuperalgosDocSpace() {
role = ''
key = key + '-list'
innerHTML = getTextBasedOnLanguage(paragraph)
+ innerHTML = addCodeToCamelCase(innerHTML)
innerHTML = addToolTips(innerHTML)
innerHTML = addBold(innerHTML)
- innerHTML = addCodeToCamelCase(innerHTML)
innerHTML = addItalics(innerHTML)
innerHTML = innerHTML + addWarningIfTranslationIsOutdated(paragraph)
break
@@ -3585,7 +3606,14 @@ function newSuperalgosDocSpace() {
}
function addCodeToCamelCase(text) {
- let splittedText = text.split(' ')
+ let expandedText = text
+ .replaceAll('{',' { ')
+ .replaceAll('}',' } ')
+ .replaceAll('(',' ( ')
+ .replaceAll(')',' ) ')
+ .replaceAll('[',' [ ')
+ .replaceAll(']',' ] ')
+ let splittedText = expandedText.split(' ')
let result = ''
for (let i = 0; i < splittedText.length; i++) {
let word = splittedText[i]
@@ -3598,6 +3626,13 @@ function newSuperalgosDocSpace() {
result = result + ' ' + word
}
}
+ result = result
+ .replaceAll(' { ','{')
+ .replaceAll(' } ','}')
+ .replaceAll(' ( ','(')
+ .replaceAll(' ) ',')')
+ .replaceAll(' [ ','[')
+ .replaceAll(' ] ',']')
return result
}
diff --git a/Projects/Superalgos/UI/Utilities/Strings.js b/Projects/Superalgos/UI/Utilities/Strings.js
index f4cd341f3..66f61f02b 100644
--- a/Projects/Superalgos/UI/Utilities/Strings.js
+++ b/Projects/Superalgos/UI/Utilities/Strings.js
@@ -17,11 +17,38 @@ function newSuperalgosUtilitiesStrings() {
we will accept strings with numbers and dots, so that
object paths test positive.
*/
- const result = /^[A-Za-z0-9.]+$/.test(text)
+
+ /* Check that there are not invalid symbols */
+ let result = /^[A-Za-z0-9.]+$/.test(text)
if (result === false) { return false }
- let character = text[0]
- if (character !== character.toLowerCase()) {
+ /* Check that first char is a letter in lower case*/
+ result = /^[a-z]+$/.test(text[0])
+ if (result === false) { return false }
+
+ let upperCaseDetected = false
+ let numbersDetected = false
+ let dotsDetected = false
+ for (let i = 1; i < text.length; i++) {
+ let character = text[i]
+
+ result = /^[0-9]+$/.test(character)
+ if (result === true) {
+ numbersDetected = true
+ if (text[i - 1] === '.') { return false }
+ }
+
+ result = /^[A-Z]+$/.test(character)
+ if (result === true) {
+ upperCaseDetected = true
+ if (text[i - 1] === '.') { return false }
+ }
+
+ if (character === '.') { dotsDetected = true }
+
+ }
+ /* Check that there is at lest one upper case before numbers or dots */
+ if (upperCaseDetected === false) {
return false
}
return true