Support for grammar rule category enable/disable
This commit is contained in:
parent
6740b14a17
commit
eef106c53f
26
Readme.md
26
Readme.md
@ -61,6 +61,32 @@ BesService.registerByElement(el)
|
||||
|
||||
Po potrebi lahko spremljamo dogodke v servisu tako, da ob registraciji servisa dodamo instanco razreda, v katerem implementiramo metode, ki jih servis kliče ob posameznih dogodkih. Primer takega razreda, ki doda prikaz statusne ikone, je v datoteki `samples\common.js`.
|
||||
|
||||
### Kategorije pravopisnih pravil
|
||||
|
||||
Privzeto servis preverja vnaprej določen nabor pravopisnih pravil. Pravila so razdeljena v kategorije (skupine) in za vsak servis posebej lahko vklapljamo ali izklapljamo vsa pravopisna pravila iz določene kategorije z uporabo metod `enableCategory()` in `disableCategory()`.
|
||||
|
||||
Primer:
|
||||
|
||||
```JavaScript
|
||||
// Registriramo servis za naš urejevalnik.
|
||||
BesService
|
||||
.registerByElement(el)
|
||||
.enableCategory('BESANA_CAT_6')
|
||||
.disableCategory('BESANA_CAT_1')
|
||||
.disableCategory('BESANA_CAT_2')
|
||||
```
|
||||
|
||||
Kategorije pravopisnih pravil so:
|
||||
|
||||
ID | opis
|
||||
-------------+------------------------------------------------
|
||||
BESANA_CAT_1 | strogo slogovne napake
|
||||
BESANA_CAT_2 | slogovne napake
|
||||
BESANA_CAT_3 | slogovno-slovnične napake
|
||||
BESANA_CAT_4 | strogo slovnične napake
|
||||
BESANA_CAT_5 | slovnične napake
|
||||
BESANA_CAT_6 | nomotehnične napake (potrebuje posebno licenco)
|
||||
|
||||
## Navodila za razvijalce
|
||||
|
||||
Programsko kodo v tem repozitoriju razvijamo s programom Visual Studio Code. Potrebna je namestitev vtičnika `esbenp.prettier-vscode`.
|
||||
|
31
samples/rule-categories.html
Normal file
31
samples/rule-categories.html
Normal file
@ -0,0 +1,31 @@
|
||||
<!DOCTYPE html>
|
||||
<html>
|
||||
<head>
|
||||
<meta charset="UTF-8" />
|
||||
<meta name="viewport" content="width=device-width, initial-scale=1.0" />
|
||||
<title>BesService <div contenteditable="true"> Example</title>
|
||||
<link rel="stylesheet" href="../styles.css" />
|
||||
<link rel="stylesheet" href="styles.css" />
|
||||
<script>const besUrl = 'http://localhost:225/api/v2';</script>
|
||||
<script src="../service.js"></script>
|
||||
<script src="common.js"></script>
|
||||
</head>
|
||||
<body>
|
||||
<p class="my-block">This is an example of a simple <code><div contenteditable="true"></code> edit control with style grammar rules disabled. Compare the proofing results with <a href="div-contenteditable.html">the default example</a>.</p>
|
||||
<div id="my-editor" class="my-block my-control" contenteditable="true">
|
||||
<p>Tukaj vpišite besedilo ki ga želite popraviti.</p>
|
||||
<p>Prišla je njena lepa hčera. Smatram da tega nebi bilo potrebno storiti. Predavanje je trajalo dve ure. S njim grem v Kamnik. Janez jutri nebo prišel. Prišel je z 100 idejami.</p>
|
||||
<p>To velja tudi v Bledu. To se je zgodilo na velikemu vrtu. Prišel je na Kamnik. On je včeraj prišel z svojo torbo. Dve žemlje prosim. Pogosto brskam po temu forumu. Prišel je včeraj in sicer s otroci. To ne vem. Pogleda vse kar daš v odložišče. Nisem jo videl. Ona izgleda dobro. Pri zanikanju ne smete uporabljati tožilnik. Vlak gre v Ljubljano čez Zidani Most. Skočil je čez okno. Slovenija meji na avstrijo. Jaz pišem v Slovenščini vsak Torek. Novica, da je skupina 25 planincev hodila pod vodstvom gorskega vodnika je napačna in zavajujoča. Želim da poješ kosmizailo. Jaz pogosto brskam po temu forumu. Med tem ko je iskal ključe, so se odprla vrata. V takoimenovanem skladišču je bilo veliko ljudi. V sobi sta dve mize. Stekel je h mami. Videl sem Jurčič Micko. To je bil njegov življenski cilj. Po vrsti popravite vse kar želite. Preden zaspiva mi prebere pravljico. Prišel je s stricom. Oni zadanejo tarčo. Mi gremo teči po polju. Mi gremo peči kruh. Usedel se je k miza. Postreži kosilo! Skul je veslanje z dvemi vesli.</p>
|
||||
<p>Na mizo nisem položil knjigo.</p>
|
||||
<p>Kvazimodo ji je ponavadi prinesel hrano in pijačo, medtem ko je spala, da ne bi videla njegov iznakažen in grd obraz. Poleg tega ji je pustil tudi piščalko, da bi ga lahko priklicala, če bi bilo to potrebno. Kvazimodo se je odločil, da razveseli Esmeraldo in ji obljubi, da ji bo pripeljal Febusa. Toda Febus ni želel priti. Kvazimodo ji je raje lagal, da ni mogel najti Febusa, kot da Esmeraldi pove resnico, ker bi ona trpela.</p>
|
||||
</div>
|
||||
<bes-popup-el/>
|
||||
<script>
|
||||
BesService
|
||||
.registerByElement(document.getElementById('my-editor'), new BesStatusIconEventSink())
|
||||
.enableCategory('BESANA_CAT_6')
|
||||
.disableCategory('BESANA_CAT_1')
|
||||
.disableCategory('BESANA_CAT_2')
|
||||
</script>
|
||||
</body>
|
||||
</html>
|
72
service.js
72
service.js
@ -36,6 +36,8 @@ class BesService {
|
||||
this.hostElement = hostElement
|
||||
this.textElement = textElement
|
||||
this.eventSink = eventSink
|
||||
this.enabledCategories = []
|
||||
this.disabledCategories = []
|
||||
this.results = [] // Results of grammar-checking, one per each block/paragraph of text
|
||||
this.createCorrectionPanel()
|
||||
|
||||
@ -132,6 +134,42 @@ class BesService {
|
||||
BesService.getServiceByElement(hostElement)?.unregister()
|
||||
}
|
||||
|
||||
/**
|
||||
* Enables all grammar rules of the given category.
|
||||
*
|
||||
* @param {String} cat Category ID. For the list of category IDs, see Readme.md.
|
||||
*/
|
||||
enableCategory(cat) {
|
||||
this.enabledCategories.push(cat)
|
||||
this.disabledCategories = this.disabledCategories.filter(
|
||||
value => value !== cat
|
||||
)
|
||||
if (this.timer) clearTimeout(this.timer)
|
||||
this.timer = setTimeout(() => {
|
||||
this.proofAll()
|
||||
delete this.timer
|
||||
}, 10)
|
||||
return this
|
||||
}
|
||||
|
||||
/**
|
||||
* Disables all grammar rules of the given category.
|
||||
*
|
||||
* @param {String} cat Category ID. For the list of category IDs, see Readme.md.
|
||||
*/
|
||||
disableCategory(cat) {
|
||||
this.enabledCategories = this.enabledCategories.filter(
|
||||
value => value !== cat
|
||||
)
|
||||
this.disabledCategories.push(cat)
|
||||
if (this.timer) clearTimeout(this.timer)
|
||||
this.timer = setTimeout(() => {
|
||||
this.proofAll()
|
||||
delete this.timer
|
||||
}, 10)
|
||||
return this
|
||||
}
|
||||
|
||||
/**
|
||||
* Called initially when grammar-checking run is started
|
||||
*/
|
||||
@ -518,7 +556,10 @@ class BesTreeService extends BesService {
|
||||
x.markup ? { markup: x.text } : { text: x.text }
|
||||
)
|
||||
}),
|
||||
language: node.lang ? node.lang : 'sl'
|
||||
language: node.lang ? node.lang : 'sl',
|
||||
enabledCategories: this.enabledCategories.join(','),
|
||||
disabledCategories: this.disabledCategories.join(','),
|
||||
enabledOnly: 'false'
|
||||
})
|
||||
}),
|
||||
{ signal }
|
||||
@ -845,7 +886,11 @@ class BesDOMService extends BesTreeService {
|
||||
service = new BesDOMService(hostElement, eventSink)
|
||||
if (service.eventSink && 'register' in service.eventSink)
|
||||
service.eventSink.register(service)
|
||||
service.proofAll()
|
||||
// Defer proofing giving user a chance to configure the service.
|
||||
service.timer = setTimeout(() => {
|
||||
service.proofAll()
|
||||
delete service.timer
|
||||
}, 10)
|
||||
return service
|
||||
}
|
||||
|
||||
@ -933,7 +978,11 @@ class BesCKService extends BesTreeService {
|
||||
service = new BesCKService(hostElement, ckEditorInstance, eventSink)
|
||||
if (service.eventSink && 'register' in service.eventSink)
|
||||
service.eventSink.register(service)
|
||||
service.proofAll()
|
||||
// Defer proofing giving user a chance to configure the service.
|
||||
service.timer = setTimeout(() => {
|
||||
service.proofAll()
|
||||
delete service.timer
|
||||
}, 10)
|
||||
return service
|
||||
}
|
||||
|
||||
@ -1154,7 +1203,10 @@ class BesPlainTextService extends BesService {
|
||||
}
|
||||
]
|
||||
}),
|
||||
language: this.hostElement.lang ? this.hostElement.lang : 'sl'
|
||||
language: this.hostElement.lang ? this.hostElement.lang : 'sl',
|
||||
enabledCategories: this.enabledCategories.join(','),
|
||||
disabledCategories: this.disabledCategories.join(','),
|
||||
enabledOnly: 'false'
|
||||
})
|
||||
}),
|
||||
{ signal }
|
||||
@ -1409,7 +1461,11 @@ class BesDOMPlainTextService extends BesPlainTextService {
|
||||
service = new BesDOMPlainTextService(hostElement, eventSink)
|
||||
if (service.eventSink && 'register' in service.eventSink)
|
||||
service.eventSink.register(service)
|
||||
service.proofAll()
|
||||
// Defer proofing giving user a chance to configure the service.
|
||||
service.timer = setTimeout(() => {
|
||||
service.proofAll()
|
||||
delete service.timer
|
||||
}, 10)
|
||||
return service
|
||||
}
|
||||
|
||||
@ -1551,7 +1607,11 @@ class BesTAService extends BesPlainTextService {
|
||||
service = new BesTAService(hostElement, eventSink)
|
||||
if (service.eventSink && 'register' in service.eventSink)
|
||||
service.eventSink.register(service)
|
||||
service.proofAll()
|
||||
// Defer proofing giving user a chance to configure the service.
|
||||
service.timer = setTimeout(() => {
|
||||
service.proofAll()
|
||||
delete service.timer
|
||||
}, 10)
|
||||
return service
|
||||
}
|
||||
|
||||
|
Loading…
x
Reference in New Issue
Block a user