=== ViDesigner Word Explainer ===
Contributors: ViDesigner
Tags: education, dictionary, multilingual, explanation
Requires at least: 6.0
Requires PHP: 8.0
Stable tag: 1.0.1
Tested up to: 7.1.3
License: GPLv3 or later
License URI: https://www.gnu.org/licenses/gpl-3.0.html

Ordforklaringer på sidens sprog med supplerende forklaring på brugerens valgte hjælpesprog.

== Beskrivelse ==
Gør svære ord lettere at forstå direkte i din tekst. Den besøgende klikker på et ord
og får en kort forklaring og et eksempel på sidens sprog samt en supplerende
forklaring på sit valgte hjælpesprog.

Du vælger AI-udbyder og bruger din egen API-nøgle. Pluginadgangen købes via Freemius.
Du kan afprøve AI-funktionerne i 7 dage med egen API-nøgle. AI-forbrug betales separat
hos din valgte udbyder fra første opslag. Den faste demo kræver ingen API-nøgle.

Pluginet distribueres via ViDesigner/Freemius. Denne pakke er ikke en udgave til
WordPress.orgs pluginbibliotek.

== Installation ==
1. Tag en backup af hjemmesiden.
2. Fjern tidligere manuelt indlæst Word Explainer-JavaScript og CSS, så to versioner ikke reagerer på samme klik. Den gamle explain.php bruges ikke af pluginet.
3. Upload ZIP-filen i WordPress: Plugins > Tilføj plugin > Upload plugin.
4. Installer og aktivér. Følg Freemius-licens-/prøveflowet.
5. Åbn menupunktet Word Explainer. Vælg sidens sprog, standardhjælpesprog og tilladte hjælpesprog.
6. Vælg AI-udbyder, kontrollér modelnavnet, og indsæt din egen nøgle for den udbyder. Gem.
7. Slå AI-forklaringer til, når licensen/prøven og API-kontoen er klar.

== Aktivér på tekst ==
I Gutenberg, Avada eller en anden sidebygger: Giv et tekstområde CSS-klassen
word-explainer-enabled
Brug klassen uden punktum i editorens felt CSS Class / Ekstra CSS-klasser.

Eller brug denne shortcode omkring teksten:
[videsigner_word_explainer]Her står din tekst med svære ord.[/videsigner_word_explainer]

Shortcoden viser selv teksten. Indsæt den ikke to gange.
I Avada anbefales et Text Block-element med shortcoden som tekst.
Undgå hele sidens overordnede container, navigationsmenuer, kodeeksempler og formularer.

== Demo uden API-nøgle ==
[videsigner_word_explainer demo="yes"]

Demoen viser en fast dansk tekst med fem ord: udsyn, vejgreb, reaktionstid,
bremselængde og vigepligt. Forklaringerne er færdigskrevne med dansk som hovedsprog
og engelsk som hjælpesprog. Der foretages ingen AI-kald i denne demo.
Demoen er tilgængelig, selv om AI er slået fra eller licensen er udløbet.

== Betjening ==
Klik på et ord i det aktiverede område. Forklaringen vises på sidens sprog.
Vælg hjælpesprog i boksen for at se samme betydning og eksempel på et andet sprog.
Dit valg huskes i browserens localStorage som vdwe-helper. Hvis lagring er blokeret,
virker forklaringen stadig, men valget huskes ikke.

Tastatur: Markér ét ord og tryk Alt+E, eller brug knappen Forklar markeret ord.
Escape og Luk-knappen lukker boksen. Klik udenfor eller scroll på siden lukker også.
Man kan scrolle inde i lange forklaringer uden at lukke dem.
Links, knapper, formularfelter, menuer og kodeblokke aktiverer ikke en forklaring.

== AI og omkostninger ==
Der er adaptere til OpenAI Responses API, Anthropic Messages API og Gemini Generate
Content API. Modelnavnet kan ændres under indstillinger, hvis udbyderen ændrer sit katalog.
Standardnavne er udvalgt ud fra de officielle kataloger pr. 25.10.2026, men adgang,
kvoter og fakturering afhænger af din egen API-konto. Ingen automatisk skift af udbyder.

Den 7 dages prøveperiode dækker pluginadgangen. AI-forbruget betales af kunden
fra første AI-opslag. Et almindeligt chatabonnement er ikke en API-konto.

Sæt et passende dagligt loft. Standard: 100 nye AI-forsøg pr. UTC-døgn og 10 opslag
pr. minut pr. forbindelse. Cache-opslag bruger ikke den daglige AI-kvote.
Et mislykket udgående API-forsøg tæller med: udbyderen kan have behandlet kaldet.
Loftet er antal forsøg og er ikke et garanteret beløbsloft. Sæt også grænser hos udbyderen.
Delte netværk kan dele minutgrænsen. IP-baserede grænser er en begrænsning af misbrug,
ikke en garanti mod automatiserede eller distribuerede angreb.

== Sprog og fagområde ==
Hjemmesideejeren vælger ét sprog for sidens tekster i denne første version.
Engelsk er standardhjælpesprog. Besøgende vælger blandt ejerens tilladte sprog.
Arabisk, persisk og urdu vises fra højre mod venstre. Ordgenkendelsen bruger Unicode
og Intl.Segmenter, når browseren understøtter det. Der bruges en Unicode-fallback ellers.
Kvaliteten af ordopdeling og AI-forklaring varierer mellem sprog.

Fagområdet kan fx være sundhed, teknik eller almindeligt sprog og læring.
En valgfri kontekstindstilling sender op til 400 tegn fra tekstafsnittet for at skelne
mellem ordets betydninger. Den er slået fra som standard.

== Privatliv og nøgler ==
WordPress-serveren kontakter kun den valgte AI-udbyder ved opslag. Browseren får
aldrig API-nøglen. Nøgler i databasen er krypteret med AES-256-GCM og WordPress' salts;
OpenSSL skal være tilgængelig. Ved skift af salts skal nøglerne indtastes igen.
Krypteringen beskytter ikke mod fuld adgang til både serverfiler og database.

Alternativt kan nøgler ligge i wp-config.php (indsæt selv din rigtige nøgle på serveren):
define( 'VDWE_OPENAI_API_KEY', 'DIN_EGEN_NOEGLE' );
define( 'VDWE_ANTHROPIC_API_KEY', 'DIN_EGEN_NOEGLE' );
define( 'VDWE_GEMINI_API_KEY', 'DIN_EGEN_NOEGLE' );
Konstanter har forrang for nøgler i kontrolpanelet.

Ved et opslag sendes ordet, side-/hjælpesprog og fagområde til den valgte udbyder,
og eventuelt tekstudsnittet hvis kontekst er aktiveret. Brug ikke fortrolige tekstområder
uden passende grundlag. Offentlige API-kald bruger en nonce og begrænsning på serveren;
en offentlig nonce er ikke en hemmelig adgangsnøgle.

OpenAI-kald bruger store=false. Det er ikke en generel garanti for nul opbevaring hos
udbyderen; hver udbyders egne vilkår og indstillinger gælder.

Forklaringer caches lokalt i WordPress-tabellen {prefix}vdwe_cache. Cachen skelner mellem
ord, sprog, kontekst, fagområde, udbyder, model og indstillingsversion. Standardlevetid
7 dage. Daglige/minutlige tællere gemmer kun hashværdier og udløbstid, ikke rå IP-adresser.
Oprydning sker via WordPress Cron. Ved afinstallation fjernes pluginets indstillinger,
krypterede nøgler, cache og kvotetællere. Dine indlæg og sider slettes ikke.

Freemius SDK 2.13.5 er inkluderet. Licens-/konto-/købsdata behandles af Freemius.
Se https://freemius.com/privacy/ og de valgte AI-udbyderes politikker.

== Kompatibilitet og begrænsninger ==
Kræver WordPress 6.0 eller nyere, PHP 8.0 eller nyere og OpenSSL.
Brug en opdateret udgave af Chrome, Edge, Firefox eller Safari.
Pluginet fungerer på aktiverede tekstområder via shortcode eller CSS-klasse;
det ændrer ikke automatisk alle tekster på hjemmesiden.

Første version er beregnet til almindelig enkeltstående WordPress, ikke netværksaktivering.
Ingen garanti for faglig/juridisk korrekthed i AI-genererede forklaringer.

== Changelog ==
= 1.0.1 =
* Undgå dobbelt indlæsning af klasser ved opgradering fra prøve-/demopakken til Pro.

= 1.0.0 =
* Første udgave til distribution via ViDesigner/Freemius.
* Ordforklaringer med valgbart hjælpesprog, egen API-nøgle, cache og licensstyring.
* Generaliseret hjælpetekst og tydelige API-fejl.

= 0.1.0-beta.9 =
* Generalize the subject help text for all audiences.

= 0.1.0-beta.8 =
* Preserve handled AI errors as JSON on hosts that replace gateway error pages.
* Distinguish invalid API keys, permissions, model access and quotas.
* Reduce Luna reasoning latency and limit provider wait time.

= 0.1.0-beta.2 =
Første WordPress-beta baseret på Word Explainer til Drive4you.
