philos Δημοσ. 23 Απριλίου 2018 Δημοσ. 23 Απριλίου 2018 (επεξεργασμένο) Λοιπόν, προσπαθώ να ενσωματώσω τον Mathtype Editor, σε έναν κάπως ξεπερασμένο BBCode editor (vBulletin 3). Για να σας βάλω στο κλίμα: - Ο Mathtype Editor εξάγει το αποτέλεσμα σε MathML (κείμενο) - Έτσι, πρόσθεσα ένα νέο BBCode [MATHML]{param}[/MATHML] που δέχεται ως παράμετρο το mathml κείμενο και το μετατρέπει σε png μέσω του συνδέσμου: http://www.wiris.net/demo/editor/render.png?demo-image¢erbaseline=false&mml={param} - Με ειδικό κουμπί μέσω JavaScript, αφού ο χρήστης γράψει ό,τι θέλει στο Mathtype, πατώντας το, εισάγεται αυτόματα στον editor του vBulletin το [MATHML] bbcode μαζί με ό,τι έχει φτιάξει, σε mathml ως παράμετρο. Έστω ότι ο χρήστης επιθυμήσει μετέπειτα να κάνει edit τις μαθηματικές παραστάσεις. Πρέπει λοιπόν να πάρουμε τα mathml κείμενα από τον BBCode editor του vBulletin και να τα περάσουμε πάλι στον Mathtype editor. Αυτό μπορεί να γίνει με την ειδική συνάρτηση setMathML (= της περνάς ως παράμετρο το mathml κείμενο και αυτομάτως μορφοποιούνται οι παραστάσεις στον Mathtype). Παράδειγμα (για το convertHTMLEntity μη ρωτάτε, ήταν αναγκαίο ) : function ReEditMathML() { var sceditorcontents = window.parent.vB_Editor['vB_Editor_001'].get_editor_contents(); sceditorcontents = convertHTMLEntity(sceditorcontents); sceditorcontents = sceditorcontents.replace("[MATHML]", ""); sceditorcontents = sceditorcontents.replace("[/MATHML]", ""); editor.setMathML(sceditorcontents); } function convertHTMLEntity(text){ const span = document.createElement('span'); return text .replace(/&[#A-Za-z0-9]+;/gi, (entity,position,text)=> { span.innerHTML = entity; return span.innerText; }); } Το πρόβλημα: μέσα στον editor μπορεί να υπάρχουν πάνω από ένα άνοιγμα - κλείσιμο [MATHML]blahblah111[/MATHML][MATHML]blahblah222[/MATHML][MATHML]blahblah333[/MATHML]. Συνεπώς δεν επαρκεί η τυπική λύση να πάρω το κείμενο μεταξύ δύο strings (μεταξύ της [MATHML] και της [/MATHML]). Χρειάζομαι να περάσω με κάποιο τρόπο τα: blahblah111 blahblah222 blahblah333 ... σε έναν array και μετά για κάθε item του array να τρέξω την setMathML(). Πως μπορώ να το κάνω αυτό σε JavaScript; Έχω βρει λύσεις μόνο για να πάρω τη substring between two strings που σας είπα, όμως κάτι τέτοιο πιάνει μόνο τις άκρες [MATHML] [/MATHML] πράγμα μη σωστό. Το να τα περάσω σε array θα με βοηθήσει να κάνω και καλύτερη διαχείριση των data για την εμπειρία του χρήστη. Ευχαριστώ για το χρόνο σας. Επεξ/σία 23 Απριλίου 2018 από philos
ajaxmonkey4hire Δημοσ. 23 Απριλίου 2018 Δημοσ. 23 Απριλίου 2018 var txt = "[MATHML]blahblah111[/MATHML][MATHML]blahblah222[/MATHML][MATHML]blahblah333[/MATHML]"; var arr = txt.match(/\[MATHML\](.*?)\[\/MATHML\]/g).map(function(item){ return item.replace(/\[\/?MATHML\]/g,''); }); console.log(arr); //["blahblah111", "blahblah222", "blahblah333"] 2
Προτεινόμενες αναρτήσεις
Δημιουργήστε ένα λογαριασμό ή συνδεθείτε για να σχολιάσετε
Πρέπει να είστε μέλος για να αφήσετε σχόλιο
Δημιουργία λογαριασμού
Εγγραφείτε με νέο λογαριασμό στην κοινότητα μας. Είναι πανεύκολο!
Δημιουργία νέου λογαριασμούΣύνδεση
Έχετε ήδη λογαριασμό; Συνδεθείτε εδώ.
Συνδεθείτε τώρα