Added a function to calculate math on notes
This commit is contained in:
parent
aded72928c
commit
7fe702cb1b
@ -158,12 +158,18 @@
|
|||||||
Uncheck all Checked items
|
Uncheck all Checked items
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
<div class="sixteen wide column">
|
<div class="eight wide column">
|
||||||
<div class="ui labeled icon fluid basic button" v-on:click="undoCustom">
|
<div class="ui labeled icon fluid basic button" v-on:click="undoCustom">
|
||||||
<i class="undo icon"></i>
|
<i class="undo icon"></i>
|
||||||
Undo last change
|
Undo last change
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
|
<div class="eight wide column">
|
||||||
|
<div class="ui labeled icon fluid basic button" v-on:click="calculateMath" data-tooltip="Calculates algebra before '='">
|
||||||
|
<i class="calculator icon"></i>
|
||||||
|
Simple Math
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
<div class="sixteen wide column" v-if="rawTextId > 0">
|
<div class="sixteen wide column" v-if="rawTextId > 0">
|
||||||
<share-note-component
|
<share-note-component
|
||||||
:note-id="noteid"
|
:note-id="noteid"
|
||||||
@ -561,6 +567,57 @@
|
|||||||
}
|
}
|
||||||
})
|
})
|
||||||
},
|
},
|
||||||
|
calculateMath(){
|
||||||
|
//
|
||||||
|
// Find math in note and calculate the outcome
|
||||||
|
//
|
||||||
|
|
||||||
|
//Close menu if user is on mobile, then sort list
|
||||||
|
if(this.$store.getters.getIsUserOnMobile){
|
||||||
|
this.showNoteOptions = false
|
||||||
|
}
|
||||||
|
|
||||||
|
//Fetch the container
|
||||||
|
let container = document.getElementById('squire-id')
|
||||||
|
|
||||||
|
// simple function that trys to evaluate javascript
|
||||||
|
const shittyMath = (string) => {
|
||||||
|
try {
|
||||||
|
return Function('"use strict"; return (' + string + ')')();
|
||||||
|
} catch (error) {
|
||||||
|
console.log('Math Error: ', string)
|
||||||
|
return null
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
//Go through each item, on first level, look for Unordered Lists
|
||||||
|
container.childNodes.forEach( (node) => {
|
||||||
|
|
||||||
|
const line = node.innerText.trim()
|
||||||
|
|
||||||
|
// = sign exists and its the last character in the string
|
||||||
|
let equalLocation = line.indexOf('=')
|
||||||
|
if(equalLocation != -1 && (line.length-1) == equalLocation ){
|
||||||
|
|
||||||
|
//Pull out everything before the formula and try to evaluate it
|
||||||
|
const formula = line.split('=').shift()
|
||||||
|
const output = shittyMath(formula)
|
||||||
|
|
||||||
|
//If its a number and didn't throw an error, update the line
|
||||||
|
if(!isNaN(output) && output != null){
|
||||||
|
|
||||||
|
//Since there is HTML in the line, splice in the number after the = sign
|
||||||
|
let newLine = node.innerHTML.slice(0, equalLocation+1).trim()
|
||||||
|
newLine += ` ${output}`
|
||||||
|
newLine += node.innerHTML.slice(equalLocation+1).trim()
|
||||||
|
|
||||||
|
//Slam in that new HTML with the output
|
||||||
|
node.innerHTML = newLine
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
})
|
||||||
|
},
|
||||||
setText(inText){
|
setText(inText){
|
||||||
|
|
||||||
this.editor.setHTML(inText)
|
this.editor.setHTML(inText)
|
||||||
|
Loading…
Reference in New Issue
Block a user