Samatekst - samatekstide (palindroomide) veebiredaktor ja pilves hoitav tekstikogu
Koodirepo - Funktsioonikataloog - Koodimeetrikad - Näppimisest, konfimisest ja tööriistade isetegemisest
(UI raamistik)
GitHub
(koodihoidla)Visual Studio Code
(koodiredaktor)Google Apps
Google Apps Script
(programmeerimiskeel)Google Apps Script Editor
(koodiredaktor)Google Sheet
Google Sign-In
(OpenID Connect
standardile vastav)GitHub Pages
(github.io
, Jekyll
)Backspace
ja Delete
ühe tärgi kaupa).=
)>
) ja järglased (<
)Suur osa funktsionaalsusest on seotud samatekstide teisendamisega ühest esitusest (kujust) teise. Samatekst võib olla mitmes erinevas esituses:
#Tekst
) Esitus teksti- (1)
sisestusalal +-------> Siseesitus
^ +
| + |
| (2) | |
+ (2) | | (3)
HTML <---------------+ |
|
v
HTML <------------+ Pilveesitus
+ (4)
|
| (4)
v
Tekstikogu
esitus
(1) kasutaja sisestab tekstisisestusalal; klahvivajutused püütakse sündmuste keydown
ja keypress
abil kinni, filtreeritakse (lubatud tähed ja kirjavahemärgid), tehakse kindlaks kursori (ingl caret) asukoht. Sisestatavat teksti hoitakse sisekujul.
(2) Tähe lisamisel lisab programm automaatselt peegeltähe ja uuendab tekstisisestusalal olevat teksti.
(3) Kasutaja saab teksti salvestada. Programm teisendab salvestatava teksti pilveesitusse.
(4) Salvestatud tekste saab sirvida ja otsida. Salvestatud tekstid esitatakse kuval HTML abil.
kuvaKeskelementYhekordselt
.|
)./
.IT//|Säh, hästi!
Samma|s
tähendab Samas
, kui kuvaKeskelementYhekordselt
= true
IT//|Säh, hästi!
|
- tühitekst/
.span
-elemendi vahel (võivad olla tühjad): A
, K1
, Kt
, K2
, B
.span
-elementi (A
) 0-pikkusega tühik (​
), seda selleks, et tekstisisestusala div
-element ei kollapseeruks.<span id='A'>IT//Sä</span><span id='K1' class='kesk'>h</span><span id='Kt' class='kesk'>, </span><span id='K2'>h</span><span id='B'>ästi!</span>
<span id='A'>​</span><span id='K1'></span><span id='Kt'></span><span id='K2'></span><span id='B'></span>
- tühiteksti esitamine 0-pikkusega tühiku abil
IT
Säh, hästi!
<br>
-elemendi abil.Kuvatakse HTML-esituse abil. Näide:
<span id='A'>IT<br><br>Sä</span><span id='K1' class='kesk'>h</span><span id='Kt' class='kesk'>, </span><span id='K2'>h</span><span id='B'>ästi!</span>
/
. Näide: IT//Säh, hästi!
Tekst
)
0
- ei logita midagi1
- logitakse tekstisisestus ja -väljastus2
- lisaks eelmisele logitakse keydown
ja keypress
sündmused jmlogimistase = 2;
sirvija konsoolilaud OK
, aud NOT OK
) ja saadetud tekstSamasTest.html
; testid pannakse kirja failis SamasTest.js
.Tekst
) püütakse kinni sündmuste keydown
, keypress
ja paste
jälgimisega ja töötlemisega. #Tekst
(tekstisisestusväli)
↓
keydown keypress paste
(sündmusekäsitlejad)
↓ ↓
tootleEriklahv(keyCode) lisaTahtVoiPunktuatsioon(charCode)
↓ ↓
tootleBackspace()
tootleDelete()
kuvaKesktahtYhekordselt = true
kuvaKesktahtYhekordselt = false
suurtaheks()
vaiketaheks()
↓ ↓
kuvaTekst()
keydown
käsitleja püüab kinni eriklahvivajutused, mida redaktoris tavapärasest eriliselt töödeldakse: 8
(Backspace
), 46
(Delete
), 33
(PgUp
), 34
(PgDn
), 38
(Up
), 40
(Down
). Nende vaikimisi toiming tühistatakse ja vajutusi käsitletakse tavapärasest erinevalt. Suunab eriklahvivajutuste töötlemiseks funktsiooni tootleEriklahv
.keypress
käsitleja suunab kasutaja sisestatud tärgi töötlemiseks funktsiooni lisaTahtVoiPunktuatsioon
.paste
käsitleja puhastab asetatava teksti kõrvalistest tärkidest ja kontrollib, kas asetamise tulemusena tekkinud tekst on samatekst. Kui ei ole, siis annab veateate ja sisendit ei aktsepteeri.Kasutaja sisendi töötlemiseks on vaja tuvastada ka kursori (caret) positsioon. Seda teeb funktsioon tuvastaCaretJaSeaSisekursor
.
markeeriTekst
ja markeeriTekstikoguTekst
.seaCaret
.Node
objekt: https://www.w3schools.com/xml/dom_node.aspjQuery-ga tippudele ligipääsemine: https://api.jquery.com/get/
keypress
parem kui keydown
, sest keypress
näitab, milline tärk sisestati (eristab suur- ja väiketähti). keydown
näitab millist klahvi vajutati.Väga hea seletus: http://stackoverflow.com/questions/1367700/whats-the-difference-between-keydown-and-keypress-in-net
peidetud
(style='display: none;'
); parem kui JQuery show
, hide
ja toggle
.Nuppude mitteaktiivseks tegemine klassiga disabled
.
Input
elemendis vt: setSelectionRange() HTML veebi-APIs HTMLInputElement - https://developer.mozilla.org/en-US/docs/Web/API/HTMLInputElement/setSelectionRangeoninput
võimalust, vt
http://stackoverflow.com/questions/11189136/fire-oninput-event-with-jqueryVt ka http://stackoverflow.com/questions/9906885/detect-backspace-and-del-on-input-event
metakey
-ga: http://stackoverflow.com/questions/2903991/how-to-detect-ctrlv-ctrlc-using-javascriptbreak
lause ei tööta Javascript forEach
-ga.Tärgi asetamine stringi - vt http://stackoverflow.com/questions/4313841/javascript-how-can-i-insert-a-string-at-a-specific-index
Ctrl+V (Paste) käsitlemine
- Vt https://www.w3.org/TR/clipboard-apis/
- Vt onpaste
sündmus https://www.w3schools.com/jsref/event_onpaste.asp
- Kasutatud on: http://stackoverflow.com/questions/6902455/how-do-i-capture-the-input-value-on-a-paste-event
Range
- The Range interface represents a fragment of a document that can contain nodes and parts of text nodes. Vt https://developer.mozilla.org/en-US/docs/Web/API/Rangedocument.createRange()
vt: https://developer.mozilla.org/en-US/docs/Web/API/Document/createRangeRange
objekt vt: https://developer.mozilla.org/en-US/docs/Web/API/RangeSelection
objekt vt: https://developer.mozilla.org/en-US/docs/Web/API/Selection