Repository files navigation

Datastar Java SDK

This package provides a Java SDK for working with Datastar.

License

This package is licensed for free under the MIT License.

Requirements

This package requires Java 17 or later.

Installation

Install using Maven by adding the following to your pom.xml:

<dependencyManagement>
<dependencies>
<dependency>
<groupId>dev.data-star</groupId>
<artifactId>datastar-java-sdk</artifactId>
<version>1.0.0</version>
<type>pom</type>
<scope>import</scope>
</dependency>
</dependencies>
</dependencyManagement>
<dependencies>
<dependency>
<groupId>dev.data-star</groupId>
<artifactId>datastar-java-sdk-core</artifactId>
</dependency>
<!-- If needed (JAX-RS adapter) -->
<dependency>
<groupId>dev.data-star</groupId>
<artifactId>datastar-java-sdk-jaxrs</artifactId>
</dependency>
</dependencies>

Usage

Import Statements

importstarfederation.datastar.utils.ServerSentEventGenerator;

Set up Server-Sent Events Generator

You will want to set up the ServerSentEventGenerator to be able to handle the framework you choose to use. Adapters are provided for various framework requests and responses in the SDK.

AbstractResponseAdapterresponseAdapter = newHttpServletResponseAdapter(response);
ServerSentEventGeneratorgenerator = newServerSentEventGenerator(responseAdapter);

Once the generator is set up you can use it to send events. Let's utilize this event for the next few examples.

PatchElementsevent = PatchElements.builder()
.selector("#test")
.data("<div>test</div>")
.build();

Sending Events

This is how you would send an event with default HTTP/SSE options. The default options include a monotonically increasing integer counter for event ids and a retry duration of 1000ms.

generator.send(event);

Custom Event IDs and Retry Durations

If you want to modify these you can call send and pass the arguments you want for each accordingly.

// custom event idgenerator.send(event, "custom-id");
// custom retry durationgenerator.send(event, 2000);
// both customgenerator.send(event, "custom-id", 2000);

Events, Event Options, Examples

There are a few different event types in Datastar and each come with their own options. You can check out the SDK Guide for a review of all of them.

Example: Patch Elements into the DOM

This event is used to patch elements into the DOM. The data is a string that represents the HTML to be patched into the DOM.

Options
  • selector (string) The CSS selector to use to insert the element. If not provided or empty, Datastar will default to using the id attribute of the element.
  • mode (ElementPatchMode) The mode to use when patching the element into the DOM. If not provided the Datastar client side will default to outer.
  • useViewTransition Whether to use view transitions, if not provided the Datastar client side will default to false.
PatchElementsevent = PatchElements.builder()
.selector("#feed")
.mode(ElementPatchMode.Append)
.useViewTransition(true)
.data("<div id=\"feed\">\n<span>1</span>\n</div>")
.build();

Example: Removing HTML Elements from the DOM

This event is used to remove elements from the DOM.

Options
  • selector (string) The CSS selector to use to remove the elements. If not provided or empty, Datastar will default to using the id attribute of the element.
  • useViewTransition Whether to use view transitions, if not provided the Datastar client side will default to false.
PatchElementsevent = PatchElements.builder()
.selector("#feed")
.mode(ElementPatchMode.Remove)
.useViewTransition(true)
.build();

Example: Patching/Updating Signals

This event is used to patch data into the signals object on the client side. The data is a JSON object that represents the data to be patched into the signals object.

Options
  • onlyIfMissing (boolean) Whether to patch the signals only if they do not already exist. If not provided, the Datastar client side will default to false, which will cause the data to be patched into the signals.
PatchSignalsevent = PatchSignals.builder()
.data("{\"key\": \"value\"}")
.onlyIfMissing(true)
.build();

Example: Removing Signals

For a signal to be removed, the signal values must be set to null. The signals can be nested, and therefore to remove a leaf value, you have to provide the path to the leaf.

PatchSignalsevent = PatchSignals.builder()
.data("{\"user\": {\"name\":null, \"email\": null}}")
.build();

Example: Executing Scripts

This event is used to execute a script on the client side. The script is a string that represents the script to be executed. The script can be any valid JavaScript code. The script will be executed in the context of the client side.

Options
  • autoRemove Whether to remove the script after execution, if not provided the Datastar client side will default to true.
  • attributes A line separated list of attributes to add to the script element, if not provided the Datastar client side will default to type module. Each item in the array should be a string in the format key value.
ExecuteScriptevent = ExecuteScript.builder()
.script("console.log('Hello World');")
.autoRemove(false)
.attributes("type='module'")
.build();

Example: Reading Signals

This will read signals from a request and merge them into the signals object on the backend. The request is an object that represents the request to read the signals from. The store is a DataStore object that represents the store to merge the signals into.

Often you would want to have a Datastore created on your backend to keep track of any signals in Datastar. Here is an example of how you would create a DataStore as well as read signals from a request.

DataStorestore = newDataStore();
SignalReader.readSignals(request, store);

About

Official Datastar Java SDK.

Resources

Stars

22 stars

Watchers

1 watching

Forks

Releases

Packages

Contributors

Languages

, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Add copy buttons to all
 blocks\n(function() {\n function addCopyButtons() {\n document.querySelectorAll('pre code').forEach(function(codeBlock) {\n if (codeBlock.parentElement.hasAttribute('data-copy-added')) return;\n codeBlock.parentElement.setAttribute('data-copy-added', 'true');\n \n var btn = document.createElement('button');\n btn.textContent = 'Copy';\n btn.style.cssText = 'position:absolute;top:4px;right:4px;padding:2px 8px;font-size:11px;background:#4ecdc4;border:none;border-radius:4px;color:#1a1a2e;cursor:pointer;opacity:0.7;transition:opacity 0.2s;';\n btn.onmouseover = function() { this.style.opacity = '1'; };\n btn.onmouseout = function() { this.style.opacity = '0.7'; };\n btn.onclick = function() {\n navigator.clipboard.writeText(codeBlock.textContent).then(function() {\n btn.textContent = 'Copied!';\n setTimeout(function() { btn.textContent = 'Copy'; }, 1500);\n });\n };\n codeBlock.parentElement.style.position = 'relative';\n codeBlock.parentElement.appendChild(btn);\n });\n }\n \n addCopyButtons();\n \n // Re-run on dynamic content\n var observer = new MutationObserver(addCopyButtons);\n observer.observe(document.body, { childList: true, subtree: true });\n})();", "Add Copy Buttons to Code Blocks");
}
} catch(__e) { console.warn('[Userscript:Add Copy Buttons to Code Blocks]', __e); }
})();
(function(){
try {
var __m = "github.com";
var __re = new RegExp('^' + "github\\.com" + '
Skip to content

Repository files navigation

Datastar Java SDK

This package provides a Java SDK for working with Datastar.

License

This package is licensed for free under the MIT License.

Requirements

This package requires Java 17 or later.

Installation

Install using Maven by adding the following to your pom.xml:

<dependencyManagement>
<dependencies>
<dependency>
<groupId>dev.data-star</groupId>
<artifactId>datastar-java-sdk</artifactId>
<version>1.0.0</version>
<type>pom</type>
<scope>import</scope>
</dependency>
</dependencies>
</dependencyManagement>
<dependencies>
<dependency>
<groupId>dev.data-star</groupId>
<artifactId>datastar-java-sdk-core</artifactId>
</dependency>
<!-- If needed (JAX-RS adapter) -->
<dependency>
<groupId>dev.data-star</groupId>
<artifactId>datastar-java-sdk-jaxrs</artifactId>
</dependency>
</dependencies>

Usage

Import Statements

importstarfederation.datastar.utils.ServerSentEventGenerator;

Set up Server-Sent Events Generator

You will want to set up the ServerSentEventGenerator to be able to handle the framework you choose to use. Adapters are provided for various framework requests and responses in the SDK.

AbstractResponseAdapterresponseAdapter = newHttpServletResponseAdapter(response);
ServerSentEventGeneratorgenerator = newServerSentEventGenerator(responseAdapter);

Once the generator is set up you can use it to send events. Let's utilize this event for the next few examples.

PatchElementsevent = PatchElements.builder()
.selector("#test")
.data("<div>test</div>")
.build();

Sending Events

This is how you would send an event with default HTTP/SSE options. The default options include a monotonically increasing integer counter for event ids and a retry duration of 1000ms.

generator.send(event);

Custom Event IDs and Retry Durations

If you want to modify these you can call send and pass the arguments you want for each accordingly.

// custom event idgenerator.send(event, "custom-id");
// custom retry durationgenerator.send(event, 2000);
// both customgenerator.send(event, "custom-id", 2000);

Events, Event Options, Examples

There are a few different event types in Datastar and each come with their own options. You can check out the SDK Guide for a review of all of them.

Example: Patch Elements into the DOM

This event is used to patch elements into the DOM. The data is a string that represents the HTML to be patched into the DOM.

Options
  • selector (string) The CSS selector to use to insert the element. If not provided or empty, Datastar will default to using the id attribute of the element.
  • mode (ElementPatchMode) The mode to use when patching the element into the DOM. If not provided the Datastar client side will default to outer.
  • useViewTransition Whether to use view transitions, if not provided the Datastar client side will default to false.
PatchElementsevent = PatchElements.builder()
.selector("#feed")
.mode(ElementPatchMode.Append)
.useViewTransition(true)
.data("<div id=\"feed\">\n<span>1</span>\n</div>")
.build();

Example: Removing HTML Elements from the DOM

This event is used to remove elements from the DOM.

Options
  • selector (string) The CSS selector to use to remove the elements. If not provided or empty, Datastar will default to using the id attribute of the element.
  • useViewTransition Whether to use view transitions, if not provided the Datastar client side will default to false.
PatchElementsevent = PatchElements.builder()
.selector("#feed")
.mode(ElementPatchMode.Remove)
.useViewTransition(true)
.build();

Example: Patching/Updating Signals

This event is used to patch data into the signals object on the client side. The data is a JSON object that represents the data to be patched into the signals object.

Options
  • onlyIfMissing (boolean) Whether to patch the signals only if they do not already exist. If not provided, the Datastar client side will default to false, which will cause the data to be patched into the signals.
PatchSignalsevent = PatchSignals.builder()
.data("{\"key\": \"value\"}")
.onlyIfMissing(true)
.build();

Example: Removing Signals

For a signal to be removed, the signal values must be set to null. The signals can be nested, and therefore to remove a leaf value, you have to provide the path to the leaf.

PatchSignalsevent = PatchSignals.builder()
.data("{\"user\": {\"name\":null, \"email\": null}}")
.build();

Example: Executing Scripts

This event is used to execute a script on the client side. The script is a string that represents the script to be executed. The script can be any valid JavaScript code. The script will be executed in the context of the client side.

Options
  • autoRemove Whether to remove the script after execution, if not provided the Datastar client side will default to true.
  • attributes A line separated list of attributes to add to the script element, if not provided the Datastar client side will default to type module. Each item in the array should be a string in the format key value.
ExecuteScriptevent = ExecuteScript.builder()
.script("console.log('Hello World');")
.autoRemove(false)
.attributes("type='module'")
.build();

Example: Reading Signals

This will read signals from a request and merge them into the signals object on the backend. The request is an object that represents the request to read the signals from. The store is a DataStore object that represents the store to merge the signals into.

Often you would want to have a Datastore created on your backend to keep track of any signals in Datastar. Here is an example of how you would create a DataStore as well as read signals from a request.

DataStorestore = newDataStore();
SignalReader.readSignals(request, store);

About

Official Datastar Java SDK.

Resources

Stars

22 stars

Watchers

1 watching

Forks

Releases

Packages

Contributors

Languages

, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Force GitHub README to respect dark mode\n(function() {\n var style = document.createElement('style');\n style.textContent = '\n .markdown-body {\n color-scheme: dark light;\n }\n .markdown-body pre { background: #161b22 !important; }\n .markdown-body code { background: rgba(110, 118, 129, 0.4) !important; }\n .markdown-body table th, .markdown-body table td { border-color: #30363d !important; }\n .markdown-body img { background: #0d1117; }\n .markdown-body blockquote { border-left-color: #8b949e; }\n .markdown-body hr { border-color: #30363d; }\n ';\n document.head.appendChild(style);\n})();", "GitHub Dark Mode README Fix"); } } catch(__e) { console.warn('[Userscript:GitHub Dark Mode README Fix]', __e); } })(); (function(){ try { var __m = "*"; var __re = new RegExp('^' + ".*" + '
Skip to content

Repository files navigation

Datastar Java SDK

This package provides a Java SDK for working with Datastar.

License

This package is licensed for free under the MIT License.

Requirements

This package requires Java 17 or later.

Installation

Install using Maven by adding the following to your pom.xml:

<dependencyManagement>
<dependencies>
<dependency>
<groupId>dev.data-star</groupId>
<artifactId>datastar-java-sdk</artifactId>
<version>1.0.0</version>
<type>pom</type>
<scope>import</scope>
</dependency>
</dependencies>
</dependencyManagement>
<dependencies>
<dependency>
<groupId>dev.data-star</groupId>
<artifactId>datastar-java-sdk-core</artifactId>
</dependency>
<!-- If needed (JAX-RS adapter) -->
<dependency>
<groupId>dev.data-star</groupId>
<artifactId>datastar-java-sdk-jaxrs</artifactId>
</dependency>
</dependencies>

Usage

Import Statements

importstarfederation.datastar.utils.ServerSentEventGenerator;

Set up Server-Sent Events Generator

You will want to set up the ServerSentEventGenerator to be able to handle the framework you choose to use. Adapters are provided for various framework requests and responses in the SDK.

AbstractResponseAdapterresponseAdapter = newHttpServletResponseAdapter(response);
ServerSentEventGeneratorgenerator = newServerSentEventGenerator(responseAdapter);

Once the generator is set up you can use it to send events. Let's utilize this event for the next few examples.

PatchElementsevent = PatchElements.builder()
.selector("#test")
.data("<div>test</div>")
.build();

Sending Events

This is how you would send an event with default HTTP/SSE options. The default options include a monotonically increasing integer counter for event ids and a retry duration of 1000ms.

generator.send(event);

Custom Event IDs and Retry Durations

If you want to modify these you can call send and pass the arguments you want for each accordingly.

// custom event idgenerator.send(event, "custom-id");
// custom retry durationgenerator.send(event, 2000);
// both customgenerator.send(event, "custom-id", 2000);

Events, Event Options, Examples

There are a few different event types in Datastar and each come with their own options. You can check out the SDK Guide for a review of all of them.

Example: Patch Elements into the DOM

This event is used to patch elements into the DOM. The data is a string that represents the HTML to be patched into the DOM.

Options
  • selector (string) The CSS selector to use to insert the element. If not provided or empty, Datastar will default to using the id attribute of the element.
  • mode (ElementPatchMode) The mode to use when patching the element into the DOM. If not provided the Datastar client side will default to outer.
  • useViewTransition Whether to use view transitions, if not provided the Datastar client side will default to false.
PatchElementsevent = PatchElements.builder()
.selector("#feed")
.mode(ElementPatchMode.Append)
.useViewTransition(true)
.data("<div id=\"feed\">\n<span>1</span>\n</div>")
.build();

Example: Removing HTML Elements from the DOM

This event is used to remove elements from the DOM.

Options
  • selector (string) The CSS selector to use to remove the elements. If not provided or empty, Datastar will default to using the id attribute of the element.
  • useViewTransition Whether to use view transitions, if not provided the Datastar client side will default to false.
PatchElementsevent = PatchElements.builder()
.selector("#feed")
.mode(ElementPatchMode.Remove)
.useViewTransition(true)
.build();

Example: Patching/Updating Signals

This event is used to patch data into the signals object on the client side. The data is a JSON object that represents the data to be patched into the signals object.

Options
  • onlyIfMissing (boolean) Whether to patch the signals only if they do not already exist. If not provided, the Datastar client side will default to false, which will cause the data to be patched into the signals.
PatchSignalsevent = PatchSignals.builder()
.data("{\"key\": \"value\"}")
.onlyIfMissing(true)
.build();

Example: Removing Signals

For a signal to be removed, the signal values must be set to null. The signals can be nested, and therefore to remove a leaf value, you have to provide the path to the leaf.

PatchSignalsevent = PatchSignals.builder()
.data("{\"user\": {\"name\":null, \"email\": null}}")
.build();

Example: Executing Scripts

This event is used to execute a script on the client side. The script is a string that represents the script to be executed. The script can be any valid JavaScript code. The script will be executed in the context of the client side.

Options
  • autoRemove Whether to remove the script after execution, if not provided the Datastar client side will default to true.
  • attributes A line separated list of attributes to add to the script element, if not provided the Datastar client side will default to type module. Each item in the array should be a string in the format key value.
ExecuteScriptevent = ExecuteScript.builder()
.script("console.log('Hello World');")
.autoRemove(false)
.attributes("type='module'")
.build();

Example: Reading Signals

This will read signals from a request and merge them into the signals object on the backend. The request is an object that represents the request to read the signals from. The store is a DataStore object that represents the store to merge the signals into.

Often you would want to have a Datastore created on your backend to keep track of any signals in Datastar. Here is an example of how you would create a DataStore as well as read signals from a request.

DataStorestore = newDataStore();
SignalReader.readSignals(request, store);

About

Official Datastar Java SDK.

Resources

Stars

22 stars

Watchers

1 watching

Forks

Releases

Packages

Contributors

Languages

, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Highlight search terms from Google/DuckDuckGo/Bing referrer\n(function() {\n var ref = document.referrer;\n var terms = [];\n \n if (ref.includes('google.com') || ref.includes('duckduckgo.com') || ref.includes('bing.com')) {\n var url = new URL(ref);\n var q = url.searchParams.get('q') || url.searchParams.get('p');\n if (q) {\n terms = q.split(/\\s+/).filter(function(t) { return t.length > 2; });\n }\n }\n \n if (terms.length === 0) return;\n \n var style = document.createElement('style');\n style.textContent = '.userscript-highlight { background: #fbbf24; color: #1a1a2e; padding: 1px 3px; border-radius: 2px; }';\n document.head.appendChild(style);\n \n function highlight(node) {\n if (node.nodeType === 3) { // text node\n var text = node.textContent;\n var found = false;\n terms.forEach(function(term) {\n var regex = new RegExp('(' + term.replace(/[.*+?^${}()|[\\]\\\\]/g, '\\\\') + ')', 'gi');\n if (regex.test(text)) {\n found = true;\n var frag = document.createDocumentFragment();\n var parts = text.split(regex);\n parts.forEach(function(part, i) {\n if (i % 2 === 0) {\n frag.appendChild(document.createTextNode(part));\n } else {\n var span = document.createElement('span');\n span.className = 'userscript-highlight';\n span.textContent = part;\n frag.appendChild(span);\n }\n });\n node.parentNode.replaceChild(frag, node);\n }\n });\n } else if (node.nodeType === 1 && node.childNodes) { // element\n var skipTags = ['SCRIPT', 'STYLE', 'NOSCRIPT', 'TEXTAREA', 'INPUT', 'SELECT'];\n if (!skipTags.includes(node.tagName)) {\n Array.from(node.childNodes).forEach(highlight);\n }\n }\n }\n \n highlight(document.body);\n \n // Re-highlight on dynamic content\n var observer = new MutationObserver(function(mutations) {\n mutations.forEach(function(m) {\n m.addedNodes.forEach(function(node) {\n if (node.nodeType === 1 || node.nodeType === 3) highlight(node);\n });\n });\n });\n observer.observe(document.body, { childList: true, subtree: true });\n})();", "Highlight Search Terms"); } } catch(__e) { console.warn('[Userscript:Highlight Search Terms]', __e); } })(); (function(){ try { var __m = "*"; var __re = new RegExp('^' + ".*" + '
Skip to content

Repository files navigation

Datastar Java SDK

This package provides a Java SDK for working with Datastar.

License

This package is licensed for free under the MIT License.

Requirements

This package requires Java 17 or later.

Installation

Install using Maven by adding the following to your pom.xml:

<dependencyManagement>
<dependencies>
<dependency>
<groupId>dev.data-star</groupId>
<artifactId>datastar-java-sdk</artifactId>
<version>1.0.0</version>
<type>pom</type>
<scope>import</scope>
</dependency>
</dependencies>
</dependencyManagement>
<dependencies>
<dependency>
<groupId>dev.data-star</groupId>
<artifactId>datastar-java-sdk-core</artifactId>
</dependency>
<!-- If needed (JAX-RS adapter) -->
<dependency>
<groupId>dev.data-star</groupId>
<artifactId>datastar-java-sdk-jaxrs</artifactId>
</dependency>
</dependencies>

Usage

Import Statements

importstarfederation.datastar.utils.ServerSentEventGenerator;

Set up Server-Sent Events Generator

You will want to set up the ServerSentEventGenerator to be able to handle the framework you choose to use. Adapters are provided for various framework requests and responses in the SDK.

AbstractResponseAdapterresponseAdapter = newHttpServletResponseAdapter(response);
ServerSentEventGeneratorgenerator = newServerSentEventGenerator(responseAdapter);

Once the generator is set up you can use it to send events. Let's utilize this event for the next few examples.

PatchElementsevent = PatchElements.builder()
.selector("#test")
.data("<div>test</div>")
.build();

Sending Events

This is how you would send an event with default HTTP/SSE options. The default options include a monotonically increasing integer counter for event ids and a retry duration of 1000ms.

generator.send(event);

Custom Event IDs and Retry Durations

If you want to modify these you can call send and pass the arguments you want for each accordingly.

// custom event idgenerator.send(event, "custom-id");
// custom retry durationgenerator.send(event, 2000);
// both customgenerator.send(event, "custom-id", 2000);

Events, Event Options, Examples

There are a few different event types in Datastar and each come with their own options. You can check out the SDK Guide for a review of all of them.

Example: Patch Elements into the DOM

This event is used to patch elements into the DOM. The data is a string that represents the HTML to be patched into the DOM.

Options
  • selector (string) The CSS selector to use to insert the element. If not provided or empty, Datastar will default to using the id attribute of the element.
  • mode (ElementPatchMode) The mode to use when patching the element into the DOM. If not provided the Datastar client side will default to outer.
  • useViewTransition Whether to use view transitions, if not provided the Datastar client side will default to false.
PatchElementsevent = PatchElements.builder()
.selector("#feed")
.mode(ElementPatchMode.Append)
.useViewTransition(true)
.data("<div id=\"feed\">\n<span>1</span>\n</div>")
.build();

Example: Removing HTML Elements from the DOM

This event is used to remove elements from the DOM.

Options
  • selector (string) The CSS selector to use to remove the elements. If not provided or empty, Datastar will default to using the id attribute of the element.
  • useViewTransition Whether to use view transitions, if not provided the Datastar client side will default to false.
PatchElementsevent = PatchElements.builder()
.selector("#feed")
.mode(ElementPatchMode.Remove)
.useViewTransition(true)
.build();

Example: Patching/Updating Signals

This event is used to patch data into the signals object on the client side. The data is a JSON object that represents the data to be patched into the signals object.

Options
  • onlyIfMissing (boolean) Whether to patch the signals only if they do not already exist. If not provided, the Datastar client side will default to false, which will cause the data to be patched into the signals.
PatchSignalsevent = PatchSignals.builder()
.data("{\"key\": \"value\"}")
.onlyIfMissing(true)
.build();

Example: Removing Signals

For a signal to be removed, the signal values must be set to null. The signals can be nested, and therefore to remove a leaf value, you have to provide the path to the leaf.

PatchSignalsevent = PatchSignals.builder()
.data("{\"user\": {\"name\":null, \"email\": null}}")
.build();

Example: Executing Scripts

This event is used to execute a script on the client side. The script is a string that represents the script to be executed. The script can be any valid JavaScript code. The script will be executed in the context of the client side.

Options
  • autoRemove Whether to remove the script after execution, if not provided the Datastar client side will default to true.
  • attributes A line separated list of attributes to add to the script element, if not provided the Datastar client side will default to type module. Each item in the array should be a string in the format key value.
ExecuteScriptevent = ExecuteScript.builder()
.script("console.log('Hello World');")
.autoRemove(false)
.attributes("type='module'")
.build();

Example: Reading Signals

This will read signals from a request and merge them into the signals object on the backend. The request is an object that represents the request to read the signals from. The store is a DataStore object that represents the store to merge the signals into.

Often you would want to have a Datastore created on your backend to keep track of any signals in Datastar. Here is an example of how you would create a DataStore as well as read signals from a request.

DataStorestore = newDataStore();
SignalReader.readSignals(request, store);

About

Official Datastar Java SDK.

Resources

Stars

22 stars

Watchers

1 watching

Forks

Releases

Packages

Contributors

Languages

, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Strip utm_, fbclid, gclid, etc. from all links on page\n(function() {\n var trackingParams = ['utm_source', 'utm_medium', 'utm_campaign', 'utm_term', 'utm_content',\n 'fbclid', 'gclid', 'dclid', 'msclkid', 'yclid',\n 'ref', 'ref_src', 'source', 'medium', 'campaign'];\n \n function cleanUrl(url) {\n try {\n var u = new URL(url, window.location.origin);\n var changed = false;\n trackingParams.forEach(function(p) {\n if (u.searchParams.has(p)) {\n u.searchParams.delete(p);\n changed = true;\n }\n });\n return changed ? u.toString() : url;\n } catch (e) {\n return url;\n }\n }\n \n function cleanLinks() {\n document.querySelectorAll('a[href]').forEach(function(a) {\n var clean = cleanUrl(a.href);\n if (clean !== a.href) a.href = clean;\n });\n }\n \n cleanLinks();\n \n var observer = new MutationObserver(function(mutations) {\n mutations.forEach(function(m) {\n m.addedNodes.forEach(function(node) {\n if (node.nodeType === 1) {\n if (node.tagName === 'A') cleanLinks();\n node.querySelectorAll('a[href]').forEach(function(a) {\n var clean = cleanUrl(a.href);\n if (clean !== a.href) a.href = clean;\n });\n }\n });\n });\n });\n observer.observe(document.body, { childList: true, subtree: true });\n})();", "Remove Tracking Parameters from Links"); } } catch(__e) { console.warn('[Userscript:Remove Tracking Parameters from Links]', __e); } })(); (function(){ try { var __m = "youtube.com"; var __re = new RegExp('^' + "youtube\\.com" + '
Skip to content

Repository files navigation

Datastar Java SDK

This package provides a Java SDK for working with Datastar.

License

This package is licensed for free under the MIT License.

Requirements

This package requires Java 17 or later.

Installation

Install using Maven by adding the following to your pom.xml:

<dependencyManagement>
<dependencies>
<dependency>
<groupId>dev.data-star</groupId>
<artifactId>datastar-java-sdk</artifactId>
<version>1.0.0</version>
<type>pom</type>
<scope>import</scope>
</dependency>
</dependencies>
</dependencyManagement>
<dependencies>
<dependency>
<groupId>dev.data-star</groupId>
<artifactId>datastar-java-sdk-core</artifactId>
</dependency>
<!-- If needed (JAX-RS adapter) -->
<dependency>
<groupId>dev.data-star</groupId>
<artifactId>datastar-java-sdk-jaxrs</artifactId>
</dependency>
</dependencies>

Usage

Import Statements

importstarfederation.datastar.utils.ServerSentEventGenerator;

Set up Server-Sent Events Generator

You will want to set up the ServerSentEventGenerator to be able to handle the framework you choose to use. Adapters are provided for various framework requests and responses in the SDK.

AbstractResponseAdapterresponseAdapter = newHttpServletResponseAdapter(response);
ServerSentEventGeneratorgenerator = newServerSentEventGenerator(responseAdapter);

Once the generator is set up you can use it to send events. Let's utilize this event for the next few examples.

PatchElementsevent = PatchElements.builder()
.selector("#test")
.data("<div>test</div>")
.build();

Sending Events

This is how you would send an event with default HTTP/SSE options. The default options include a monotonically increasing integer counter for event ids and a retry duration of 1000ms.

generator.send(event);

Custom Event IDs and Retry Durations

If you want to modify these you can call send and pass the arguments you want for each accordingly.

// custom event idgenerator.send(event, "custom-id");
// custom retry durationgenerator.send(event, 2000);
// both customgenerator.send(event, "custom-id", 2000);

Events, Event Options, Examples

There are a few different event types in Datastar and each come with their own options. You can check out the SDK Guide for a review of all of them.

Example: Patch Elements into the DOM

This event is used to patch elements into the DOM. The data is a string that represents the HTML to be patched into the DOM.

Options
  • selector (string) The CSS selector to use to insert the element. If not provided or empty, Datastar will default to using the id attribute of the element.
  • mode (ElementPatchMode) The mode to use when patching the element into the DOM. If not provided the Datastar client side will default to outer.
  • useViewTransition Whether to use view transitions, if not provided the Datastar client side will default to false.
PatchElementsevent = PatchElements.builder()
.selector("#feed")
.mode(ElementPatchMode.Append)
.useViewTransition(true)
.data("<div id=\"feed\">\n<span>1</span>\n</div>")
.build();

Example: Removing HTML Elements from the DOM

This event is used to remove elements from the DOM.

Options
  • selector (string) The CSS selector to use to remove the elements. If not provided or empty, Datastar will default to using the id attribute of the element.
  • useViewTransition Whether to use view transitions, if not provided the Datastar client side will default to false.
PatchElementsevent = PatchElements.builder()
.selector("#feed")
.mode(ElementPatchMode.Remove)
.useViewTransition(true)
.build();

Example: Patching/Updating Signals

This event is used to patch data into the signals object on the client side. The data is a JSON object that represents the data to be patched into the signals object.

Options
  • onlyIfMissing (boolean) Whether to patch the signals only if they do not already exist. If not provided, the Datastar client side will default to false, which will cause the data to be patched into the signals.
PatchSignalsevent = PatchSignals.builder()
.data("{\"key\": \"value\"}")
.onlyIfMissing(true)
.build();

Example: Removing Signals

For a signal to be removed, the signal values must be set to null. The signals can be nested, and therefore to remove a leaf value, you have to provide the path to the leaf.

PatchSignalsevent = PatchSignals.builder()
.data("{\"user\": {\"name\":null, \"email\": null}}")
.build();

Example: Executing Scripts

This event is used to execute a script on the client side. The script is a string that represents the script to be executed. The script can be any valid JavaScript code. The script will be executed in the context of the client side.

Options
  • autoRemove Whether to remove the script after execution, if not provided the Datastar client side will default to true.
  • attributes A line separated list of attributes to add to the script element, if not provided the Datastar client side will default to type module. Each item in the array should be a string in the format key value.
ExecuteScriptevent = ExecuteScript.builder()
.script("console.log('Hello World');")
.autoRemove(false)
.attributes("type='module'")
.build();

Example: Reading Signals

This will read signals from a request and merge them into the signals object on the backend. The request is an object that represents the request to read the signals from. The store is a DataStore object that represents the store to merge the signals into.

Often you would want to have a Datastore created on your backend to keep track of any signals in Datastar. Here is an example of how you would create a DataStore as well as read signals from a request.

DataStorestore = newDataStore();
SignalReader.readSignals(request, store);

About

Official Datastar Java SDK.

Resources

Stars

22 stars

Watchers

1 watching

Forks

Releases

Packages

Contributors

Languages

, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Auto-enable theater mode on YouTube\n(function() {\n function tryTheater() {\n var btn = document.querySelector('button[aria-label=\"Theater mode\"], ytd-player #player button[title=\"Theater mode\"]');\n if (btn && !btn.classList.contains('activated')) {\n btn.click();\n }\n }\n \n // Try immediately\n tryTheater();\n \n // Try after navigation (SPA)\n var lastUrl = location.href;\n setInterval(function() {\n if (location.href !== lastUrl) {\n lastUrl = location.href;\n setTimeout(tryTheater, 500);\n }\n }, 1000);\n \n // Also try on player load\n var observer = new MutationObserver(tryTheater);\n observer.observe(document.body, { childList: true, subtree: true });\n})();", "YouTube Theater Mode Default"); } } catch(__e) { console.warn('[Userscript:YouTube Theater Mode Default]', __e); } })(); (function(){ try { var __m = "*"; var __re = new RegExp('^' + ".*" + '
Skip to content

Repository files navigation

Datastar Java SDK

This package provides a Java SDK for working with Datastar.

License

This package is licensed for free under the MIT License.

Requirements

This package requires Java 17 or later.

Installation

Install using Maven by adding the following to your pom.xml:

<dependencyManagement>
<dependencies>
<dependency>
<groupId>dev.data-star</groupId>
<artifactId>datastar-java-sdk</artifactId>
<version>1.0.0</version>
<type>pom</type>
<scope>import</scope>
</dependency>
</dependencies>
</dependencyManagement>
<dependencies>
<dependency>
<groupId>dev.data-star</groupId>
<artifactId>datastar-java-sdk-core</artifactId>
</dependency>
<!-- If needed (JAX-RS adapter) -->
<dependency>
<groupId>dev.data-star</groupId>
<artifactId>datastar-java-sdk-jaxrs</artifactId>
</dependency>
</dependencies>

Usage

Import Statements

importstarfederation.datastar.utils.ServerSentEventGenerator;

Set up Server-Sent Events Generator

You will want to set up the ServerSentEventGenerator to be able to handle the framework you choose to use. Adapters are provided for various framework requests and responses in the SDK.

AbstractResponseAdapterresponseAdapter = newHttpServletResponseAdapter(response);
ServerSentEventGeneratorgenerator = newServerSentEventGenerator(responseAdapter);

Once the generator is set up you can use it to send events. Let's utilize this event for the next few examples.

PatchElementsevent = PatchElements.builder()
.selector("#test")
.data("<div>test</div>")
.build();

Sending Events

This is how you would send an event with default HTTP/SSE options. The default options include a monotonically increasing integer counter for event ids and a retry duration of 1000ms.

generator.send(event);

Custom Event IDs and Retry Durations

If you want to modify these you can call send and pass the arguments you want for each accordingly.

// custom event idgenerator.send(event, "custom-id");
// custom retry durationgenerator.send(event, 2000);
// both customgenerator.send(event, "custom-id", 2000);

Events, Event Options, Examples

There are a few different event types in Datastar and each come with their own options. You can check out the SDK Guide for a review of all of them.

Example: Patch Elements into the DOM

This event is used to patch elements into the DOM. The data is a string that represents the HTML to be patched into the DOM.

Options
  • selector (string) The CSS selector to use to insert the element. If not provided or empty, Datastar will default to using the id attribute of the element.
  • mode (ElementPatchMode) The mode to use when patching the element into the DOM. If not provided the Datastar client side will default to outer.
  • useViewTransition Whether to use view transitions, if not provided the Datastar client side will default to false.
PatchElementsevent = PatchElements.builder()
.selector("#feed")
.mode(ElementPatchMode.Append)
.useViewTransition(true)
.data("<div id=\"feed\">\n<span>1</span>\n</div>")
.build();

Example: Removing HTML Elements from the DOM

This event is used to remove elements from the DOM.

Options
  • selector (string) The CSS selector to use to remove the elements. If not provided or empty, Datastar will default to using the id attribute of the element.
  • useViewTransition Whether to use view transitions, if not provided the Datastar client side will default to false.
PatchElementsevent = PatchElements.builder()
.selector("#feed")
.mode(ElementPatchMode.Remove)
.useViewTransition(true)
.build();

Example: Patching/Updating Signals

This event is used to patch data into the signals object on the client side. The data is a JSON object that represents the data to be patched into the signals object.

Options
  • onlyIfMissing (boolean) Whether to patch the signals only if they do not already exist. If not provided, the Datastar client side will default to false, which will cause the data to be patched into the signals.
PatchSignalsevent = PatchSignals.builder()
.data("{\"key\": \"value\"}")
.onlyIfMissing(true)
.build();

Example: Removing Signals

For a signal to be removed, the signal values must be set to null. The signals can be nested, and therefore to remove a leaf value, you have to provide the path to the leaf.

PatchSignalsevent = PatchSignals.builder()
.data("{\"user\": {\"name\":null, \"email\": null}}")
.build();

Example: Executing Scripts

This event is used to execute a script on the client side. The script is a string that represents the script to be executed. The script can be any valid JavaScript code. The script will be executed in the context of the client side.

Options
  • autoRemove Whether to remove the script after execution, if not provided the Datastar client side will default to true.
  • attributes A line separated list of attributes to add to the script element, if not provided the Datastar client side will default to type module. Each item in the array should be a string in the format key value.
ExecuteScriptevent = ExecuteScript.builder()
.script("console.log('Hello World');")
.autoRemove(false)
.attributes("type='module'")
.build();

Example: Reading Signals

This will read signals from a request and merge them into the signals object on the backend. The request is an object that represents the request to read the signals from. The store is a DataStore object that represents the store to merge the signals into.

Often you would want to have a Datastore created on your backend to keep track of any signals in Datastar. Here is an example of how you would create a DataStore as well as read signals from a request.

DataStorestore = newDataStore();
SignalReader.readSignals(request, store);

About

Official Datastar Java SDK.

Resources

Stars

22 stars

Watchers

1 watching

Forks

Releases

Packages

Contributors

Languages

, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Remove or un-stick sticky/fixed headers that block content\n(function() {\n function unstick() {\n document.querySelectorAll('header, nav, [role=\"banner\"], .header, .navbar, .sticky, .fixed-top, [style*=\"position: fixed\"], [style*=\"position:sticky\"]').forEach(function(el) {\n if (el.style.position === 'fixed' || el.style.position === 'sticky' || \n getComputedStyle(el).position === 'fixed' || getComputedStyle(el).position === 'sticky') {\n el.style.position = 'static';\n el.style.top = 'auto';\n el.style.zIndex = 'auto';\n }\n });\n }\n \n unstick();\n \n var observer = new MutationObserver(unstick);\n observer.observe(document.body, { childList: true, subtree: true, attributes: true, attributeFilter: ['style', 'class'] });\n})();", "Kill Sticky Headers"); } } catch(__e) { console.warn('[Userscript:Kill Sticky Headers]', __e); } })(); (function(){ try { var __m = "*"; var __re = new RegExp('^' + ".*" + '
Skip to content

Repository files navigation

Datastar Java SDK

This package provides a Java SDK for working with Datastar.

License

This package is licensed for free under the MIT License.

Requirements

This package requires Java 17 or later.

Installation

Install using Maven by adding the following to your pom.xml:

<dependencyManagement>
<dependencies>
<dependency>
<groupId>dev.data-star</groupId>
<artifactId>datastar-java-sdk</artifactId>
<version>1.0.0</version>
<type>pom</type>
<scope>import</scope>
</dependency>
</dependencies>
</dependencyManagement>
<dependencies>
<dependency>
<groupId>dev.data-star</groupId>
<artifactId>datastar-java-sdk-core</artifactId>
</dependency>
<!-- If needed (JAX-RS adapter) -->
<dependency>
<groupId>dev.data-star</groupId>
<artifactId>datastar-java-sdk-jaxrs</artifactId>
</dependency>
</dependencies>

Usage

Import Statements

importstarfederation.datastar.utils.ServerSentEventGenerator;

Set up Server-Sent Events Generator

You will want to set up the ServerSentEventGenerator to be able to handle the framework you choose to use. Adapters are provided for various framework requests and responses in the SDK.

AbstractResponseAdapterresponseAdapter = newHttpServletResponseAdapter(response);
ServerSentEventGeneratorgenerator = newServerSentEventGenerator(responseAdapter);

Once the generator is set up you can use it to send events. Let's utilize this event for the next few examples.

PatchElementsevent = PatchElements.builder()
.selector("#test")
.data("<div>test</div>")
.build();

Sending Events

This is how you would send an event with default HTTP/SSE options. The default options include a monotonically increasing integer counter for event ids and a retry duration of 1000ms.

generator.send(event);

Custom Event IDs and Retry Durations

If you want to modify these you can call send and pass the arguments you want for each accordingly.

// custom event idgenerator.send(event, "custom-id");
// custom retry durationgenerator.send(event, 2000);
// both customgenerator.send(event, "custom-id", 2000);

Events, Event Options, Examples

There are a few different event types in Datastar and each come with their own options. You can check out the SDK Guide for a review of all of them.

Example: Patch Elements into the DOM

This event is used to patch elements into the DOM. The data is a string that represents the HTML to be patched into the DOM.

Options
  • selector (string) The CSS selector to use to insert the element. If not provided or empty, Datastar will default to using the id attribute of the element.
  • mode (ElementPatchMode) The mode to use when patching the element into the DOM. If not provided the Datastar client side will default to outer.
  • useViewTransition Whether to use view transitions, if not provided the Datastar client side will default to false.
PatchElementsevent = PatchElements.builder()
.selector("#feed")
.mode(ElementPatchMode.Append)
.useViewTransition(true)
.data("<div id=\"feed\">\n<span>1</span>\n</div>")
.build();

Example: Removing HTML Elements from the DOM

This event is used to remove elements from the DOM.

Options
  • selector (string) The CSS selector to use to remove the elements. If not provided or empty, Datastar will default to using the id attribute of the element.
  • useViewTransition Whether to use view transitions, if not provided the Datastar client side will default to false.
PatchElementsevent = PatchElements.builder()
.selector("#feed")
.mode(ElementPatchMode.Remove)
.useViewTransition(true)
.build();

Example: Patching/Updating Signals

This event is used to patch data into the signals object on the client side. The data is a JSON object that represents the data to be patched into the signals object.

Options
  • onlyIfMissing (boolean) Whether to patch the signals only if they do not already exist. If not provided, the Datastar client side will default to false, which will cause the data to be patched into the signals.
PatchSignalsevent = PatchSignals.builder()
.data("{\"key\": \"value\"}")
.onlyIfMissing(true)
.build();

Example: Removing Signals

For a signal to be removed, the signal values must be set to null. The signals can be nested, and therefore to remove a leaf value, you have to provide the path to the leaf.

PatchSignalsevent = PatchSignals.builder()
.data("{\"user\": {\"name\":null, \"email\": null}}")
.build();

Example: Executing Scripts

This event is used to execute a script on the client side. The script is a string that represents the script to be executed. The script can be any valid JavaScript code. The script will be executed in the context of the client side.

Options
  • autoRemove Whether to remove the script after execution, if not provided the Datastar client side will default to true.
  • attributes A line separated list of attributes to add to the script element, if not provided the Datastar client side will default to type module. Each item in the array should be a string in the format key value.
ExecuteScriptevent = ExecuteScript.builder()
.script("console.log('Hello World');")
.autoRemove(false)
.attributes("type='module'")
.build();

Example: Reading Signals

This will read signals from a request and merge them into the signals object on the backend. The request is an object that represents the request to read the signals from. The store is a DataStore object that represents the store to merge the signals into.

Often you would want to have a Datastore created on your backend to keep track of any signals in Datastar. Here is an example of how you would create a DataStore as well as read signals from a request.

DataStorestore = newDataStore();
SignalReader.readSignals(request, store);

About

Official Datastar Java SDK.

Resources

Stars

22 stars

Watchers

1 watching

Forks

Releases

Packages

Contributors

Languages

, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Universal Dark Mode - works on any site\n(function() {\n var enabled = true;\n \n function applyDarkMode() {\n if (!enabled) return;\n \n // Create style element if it doesn't exist\n var style = document.getElementById('universal-dark-mode-style');\n if (!style) {\n style = document.createElement('style');\n style.id = 'universal-dark-mode-style';\n document.head.appendChild(style);\n }\n \n // Dark mode CSS - inverts colors but preserves images/video\n style.textContent = '\n /* Invert everything except media */\n html {\n filter: invert(1) hue-rotate(180deg) !important;\n background: #1a1a2e !important;\n }\n \n /* Restore images, videos, iframes, canvas */\n img, video, iframe, canvas, svg, picture, [style*=\"background-image\"] {\n filter: invert(1) hue-rotate(180deg) !important;\n }\n \n /* Preserve specific elements that should not be inverted */\n .no-dark-mode, .no-dark-mode *,\n [data-theme=\"light\"], [data-theme=\"light\"],\n .ace_editor, .ace_editor *,\n .CodeMirror, .CodeMirror *,\n .monaco-editor, .monaco-editor *,\n .markdown-body pre, .markdown-body pre *,\n .highlight, .highlight *,\n pre code, pre code * {\n filter: none !important;\n }\n \n /* Fix common UI elements */\n .modal, .popup, .dropdown-menu, .tooltip, .popover {\n filter: invert(1) hue-rotate(180deg) !important;\n background: #2d2d44 !important;\n border-color: #444 !important;\n }\n \n /* Scrollbars */\n ::-webkit-scrollbar { background: #1a1a2e !important; }\n ::-webkit-scrollbar-thumb { background: #444 !important; }\n ::-webkit-scrollbar-thumb:hover { background: #555 !important; }\n \n /* Selection */\n ::selection { background: #4ecdc4 !important; color: #1a1a2e !important; }\n ::-moz-selection { background: #4ecdc4 !important; color: #1a1a2e !important; }\n ';\n }\n \n function removeDarkMode() {\n var style = document.getElementById('universal-dark-mode-style');\n if (style) style.remove();\n }\n \n // Toggle with Alt+Shift+D\n document.addEventListener('keydown', function(e) {\n if (e.altKey && e.shiftKey && e.key === 'D') {\n e.preventDefault();\n enabled = !enabled;\n if (enabled) {\n applyDarkMode();\n console.log('[Universal Dark Mode] Enabled');\n } else {\n removeDarkMode();\n console.log('[Universal Dark Mode] Disabled');\n }\n }\n });\n \n // Apply on load\n applyDarkMode();\n \n // Re-apply on dynamic content\n var observer = new MutationObserver(function(mutations) {\n if (enabled && !document.getElementById('universal-dark-mode-style')) {\n applyDarkMode();\n }\n });\n observer.observe(document.head, { childList: true });\n \n console.log('[Universal Dark Mode] Loaded - Press Alt+Shift+D to toggle');\n})();", "Universal Dark Mode"); } } catch(__e) { console.warn('[Userscript:Universal Dark Mode]', __e); } })(); })();
Skip to content

Repository files navigation

Datastar Java SDK

This package provides a Java SDK for working with Datastar.

License

This package is licensed for free under the MIT License.

Requirements

This package requires Java 17 or later.

Installation

Install using Maven by adding the following to your pom.xml:

<dependencyManagement>
<dependencies>
<dependency>
<groupId>dev.data-star</groupId>
<artifactId>datastar-java-sdk</artifactId>
<version>1.0.0</version>
<type>pom</type>
<scope>import</scope>
</dependency>
</dependencies>
</dependencyManagement>
<dependencies>
<dependency>
<groupId>dev.data-star</groupId>
<artifactId>datastar-java-sdk-core</artifactId>
</dependency>
<!-- If needed (JAX-RS adapter) -->
<dependency>
<groupId>dev.data-star</groupId>
<artifactId>datastar-java-sdk-jaxrs</artifactId>
</dependency>
</dependencies>

Usage

Import Statements

importstarfederation.datastar.utils.ServerSentEventGenerator;

Set up Server-Sent Events Generator

You will want to set up the ServerSentEventGenerator to be able to handle the framework you choose to use. Adapters are provided for various framework requests and responses in the SDK.

AbstractResponseAdapterresponseAdapter = newHttpServletResponseAdapter(response);
ServerSentEventGeneratorgenerator = newServerSentEventGenerator(responseAdapter);

Once the generator is set up you can use it to send events. Let's utilize this event for the next few examples.

PatchElementsevent = PatchElements.builder()
.selector("#test")
.data("<div>test</div>")
.build();

Sending Events

This is how you would send an event with default HTTP/SSE options. The default options include a monotonically increasing integer counter for event ids and a retry duration of 1000ms.

generator.send(event);

Custom Event IDs and Retry Durations

If you want to modify these you can call send and pass the arguments you want for each accordingly.

// custom event idgenerator.send(event, "custom-id");
// custom retry durationgenerator.send(event, 2000);
// both customgenerator.send(event, "custom-id", 2000);

Events, Event Options, Examples

There are a few different event types in Datastar and each come with their own options. You can check out the SDK Guide for a review of all of them.

Example: Patch Elements into the DOM

This event is used to patch elements into the DOM. The data is a string that represents the HTML to be patched into the DOM.

Options
  • selector (string) The CSS selector to use to insert the element. If not provided or empty, Datastar will default to using the id attribute of the element.
  • mode (ElementPatchMode) The mode to use when patching the element into the DOM. If not provided the Datastar client side will default to outer.
  • useViewTransition Whether to use view transitions, if not provided the Datastar client side will default to false.
PatchElementsevent = PatchElements.builder()
.selector("#feed")
.mode(ElementPatchMode.Append)
.useViewTransition(true)
.data("<div id=\"feed\">\n<span>1</span>\n</div>")
.build();

Example: Removing HTML Elements from the DOM

This event is used to remove elements from the DOM.

Options
  • selector (string) The CSS selector to use to remove the elements. If not provided or empty, Datastar will default to using the id attribute of the element.
  • useViewTransition Whether to use view transitions, if not provided the Datastar client side will default to false.
PatchElementsevent = PatchElements.builder()
.selector("#feed")
.mode(ElementPatchMode.Remove)
.useViewTransition(true)
.build();

Example: Patching/Updating Signals

This event is used to patch data into the signals object on the client side. The data is a JSON object that represents the data to be patched into the signals object.

Options
  • onlyIfMissing (boolean) Whether to patch the signals only if they do not already exist. If not provided, the Datastar client side will default to false, which will cause the data to be patched into the signals.
PatchSignalsevent = PatchSignals.builder()
.data("{\"key\": \"value\"}")
.onlyIfMissing(true)
.build();

Example: Removing Signals

For a signal to be removed, the signal values must be set to null. The signals can be nested, and therefore to remove a leaf value, you have to provide the path to the leaf.

PatchSignalsevent = PatchSignals.builder()
.data("{\"user\": {\"name\":null, \"email\": null}}")
.build();

Example: Executing Scripts

This event is used to execute a script on the client side. The script is a string that represents the script to be executed. The script can be any valid JavaScript code. The script will be executed in the context of the client side.

Options
  • autoRemove Whether to remove the script after execution, if not provided the Datastar client side will default to true.
  • attributes A line separated list of attributes to add to the script element, if not provided the Datastar client side will default to type module. Each item in the array should be a string in the format key value.
ExecuteScriptevent = ExecuteScript.builder()
.script("console.log('Hello World');")
.autoRemove(false)
.attributes("type='module'")
.build();

Example: Reading Signals

This will read signals from a request and merge them into the signals object on the backend. The request is an object that represents the request to read the signals from. The store is a DataStore object that represents the store to merge the signals into.

Often you would want to have a Datastore created on your backend to keep track of any signals in Datastar. Here is an example of how you would create a DataStore as well as read signals from a request.

DataStorestore = newDataStore();
SignalReader.readSignals(request, store);

About

Official Datastar Java SDK.

Resources

Stars

22 stars

Watchers

1 watching

Forks

Releases

Packages

Contributors

Languages