Most everything is optional. Performance can drop dramatically if you choose to exclude data points. The more data you send Akismet about each comment, the greater the accuracy. They recommend erring on the side of including too much data.
Most everything is optional. Performance can drop dramatically if you choose to exclude data points. The more data you send Akismet about each comment, the greater the accuracy. They recommend erring on the side of including too much data.
If you are sending content to Akismet to be rechecked, such as a post that has been edited or old pending comments that you'd like to recheck, include this parameter with a string describing why the content is being rechecked.
If you are sending content to Akismet to be rechecked, such as a post that has been edited or old pending comments that you'd like to recheck, include this parameter with a string describing why the content is being rechecked.
In PHP, there is an array of environmental variables called $_SERVER that contains information about the Web server itself as well as a key/value for every HTTP header sent with the request. This data is highly useful to Akismet.
In PHP, there is an array of environmental variables called $_SERVER that contains information about the Web server itself as well as a key/value for every HTTP header sent with the request. This data is highly useful to Akismet.
If you are sending content to Akismet to be rechecked, such as a post that has been edited or old pending comments that you'd like to recheck, include this parameter with a string describing why the content is being rechecked.
If you are sending content to Akismet to be rechecked, such as a post that has been edited or old pending comments that you'd like to recheck, include this parameter with a string describing why the content is being rechecked.
In PHP, there is an array of environmental variables called $_SERVER that contains information about the Web server itself as well as a key/value for every HTTP header sent with the request. This data is highly useful to Akismet.
How the submitted content interacts with the server can be very telling, so please include as much of it as possible.
In PHP, there is an array of environmental variables called $_SERVER that contains information about the Web server itself as well as a key/value for every HTTP header sent with the request. This data is highly useful to Akismet.
How the submitted content interacts with the server can be very telling, so please include as much of it as possible.
This is the call you will make the most. It takes a number of arguments and characteristics about the submitted content and then returns a thumbs up or thumbs down. Performance can drop dramatically if you choose to exclude data points. The more data you send Akismet about each comment, the greater the accuracy. They recommend erring on the side of including too much data
By default, if an error (IO, empty response from Akismet, etc.) occurs the function will return false and log the error, use the trueOnError parameter to change this behavior.
This is the call you will make the most. It takes a number of arguments and characteristics about the submitted content and then returns a thumbs up or thumbs down. Performance can drop dramatically if you choose to exclude data points. The more data you send Akismet about each comment, the greater the accuracy. They recommend erring on the side of including too much data
By default, if an error (IO, empty response from Akismet, etc.) occurs the function will return false and log the error, use the trueOnError parameter to change this behavior.
The x-akismet-pro-tip header from the last operation, if any.
If the x-akismet-pro-tip header is set to discard, then Akismet has determined that the comment is blatant spam, and you can safely discard it without saving it in any spam queue.
Set to true if Akismet has determined that the last checked comment is blatant spam, and you can safely discard it without saving it in any spam queue.
Set to true if Akismet has determined that the last checked comment is blatant spam, and you can safely discard it without saving it in any spam queue.
Set to true if Akismet has determined that the last checked comment is blatant spam, and you can safely discard it without saving it in any spam queue.
Set to true if Akismet has determined that the last checked comment is blatant spam, and you can safely discard it without saving it in any spam queue.
The x-akismet-pro-tip header from the last operation, if any.
If the x-akismet-pro-tip header is set to discard, then Akismet has determined that the comment is blatant spam, and you can safely discard it without saving it in any spam queue.
This call is intended for the submission of false positives - items that were incorrectly classified as spam by Akismet. It takes identical arguments as comment check and submit spam.
It is very important that the values you submit with this call match those of your comment check calls as closely as possible. In order to learn from its mistakes, Akismet needs to match your missed spam and false positive reports to the original comment-check API calls made when the content was first posted. While it is normal for less information to be available for submit-spam and submit-ham calls (most comment systems and forums will not store all metadata), you should ensure that the values that you do send match those of the original content.
This call is intended for the submission of false positives - items that were incorrectly classified as spam by Akismet. It takes identical arguments as comment check and submit spam.
It is very important that the values you submit with this call match those of your comment check calls as closely as possible. In order to learn from its mistakes, Akismet needs to match your missed spam and false positive reports to the original comment-check API calls made when the content was first posted. While it is normal for less information to be available for submit-spam and submit-ham calls (most comment systems and forums will not store all metadata), you should ensure that the values that you do send match those of the original content.
This call is for submitting comments that weren't marked as spam but should have been.
It is very important that the values you submit with this call match those of your comment check calls as closely as possible. In order to learn from its mistakes, Akismet needs to match your missed spam and false positive reports to the original comment-check API calls made when the content was first posted. While it is normal for less information to be available for submit-spam and submit-ham calls (most comment systems and forums will not store all metadata), you should ensure that the values that you do send match those of the original content.
This call is for submitting comments that weren't marked as spam but should have been.
It is very important that the values you submit with this call match those of your comment check calls as closely as possible. In order to learn from its mistakes, Akismet needs to match your missed spam and false positive reports to the original comment-check API calls made when the content was first posted. While it is normal for less information to be available for submit-spam and submit-ham calls (most comment systems and forums will not store all metadata), you should ensure that the values that you do send match those of the original content.
Key verification authenticates your key before calling the comment check, submit spam, or submit ham methods. This is the first call that you should make to Akismet and is especially useful if you will have multiple users with their own Akismet subscriptions using your application.
Key verification authenticates your key before calling the comment check, submit spam, or submit ham methods. This is the first call that you should make to Akismet and is especially useful if you will have multiple users with their own Akismet subscriptions using your application.
diff --git a/docs/scripts/clipboard.js b/docs/scripts/clipboard.js
index b00ce24..7a4f33c 100644
--- a/docs/scripts/clipboard.js
+++ b/docs/scripts/clipboard.js
@@ -1,3 +1,7 @@
+/*
+ * Copyright 2014-2023 JetBrains s.r.o. Use of this source code is governed by the Apache 2.0 license.
+ */
+
window.addEventListener('load', () => {
document.querySelectorAll('span.copy-icon').forEach(element => {
element.addEventListener('click', (el) => copyElementsContentToClipboard(element));
diff --git a/docs/scripts/navigation-loader.js b/docs/scripts/navigation-loader.js
index 9246491..3df7ac8 100644
--- a/docs/scripts/navigation-loader.js
+++ b/docs/scripts/navigation-loader.js
@@ -1,3 +1,7 @@
+/*
+ * Copyright 2014-2023 JetBrains s.r.o. Use of this source code is governed by the Apache 2.0 license.
+ */
+
navigationPageText = fetch(pathToRoot + "navigation.html").then(response => response.text())
displayNavigationFromPage = () => {
diff --git a/docs/scripts/pages.json b/docs/scripts/pages.json
index 1b911f5..bdcd091 100644
--- a/docs/scripts/pages.json
+++ b/docs/scripts/pages.json
@@ -1 +1 @@
-[{"name":"const val ADMIN_ROLE: String","description":"net.thauvin.erik.akismet.AkismetComment.Companion.ADMIN_ROLE","location":"akismet-kotlin/net.thauvin.erik.akismet/-akismet-comment/-companion/-a-d-m-i-n_-r-o-l-e.html","searchKeys":["ADMIN_ROLE","const val ADMIN_ROLE: String","net.thauvin.erik.akismet.AkismetComment.Companion.ADMIN_ROLE"]},{"name":"const val TYPE_BLOG_POST: String","description":"net.thauvin.erik.akismet.AkismetComment.Companion.TYPE_BLOG_POST","location":"akismet-kotlin/net.thauvin.erik.akismet/-akismet-comment/-companion/-t-y-p-e_-b-l-o-g_-p-o-s-t.html","searchKeys":["TYPE_BLOG_POST","const val TYPE_BLOG_POST: String","net.thauvin.erik.akismet.AkismetComment.Companion.TYPE_BLOG_POST"]},{"name":"const val TYPE_COMMENT: String","description":"net.thauvin.erik.akismet.AkismetComment.Companion.TYPE_COMMENT","location":"akismet-kotlin/net.thauvin.erik.akismet/-akismet-comment/-companion/-t-y-p-e_-c-o-m-m-e-n-t.html","searchKeys":["TYPE_COMMENT","const val TYPE_COMMENT: String","net.thauvin.erik.akismet.AkismetComment.Companion.TYPE_COMMENT"]},{"name":"const val TYPE_CONTACT_FORM: String","description":"net.thauvin.erik.akismet.AkismetComment.Companion.TYPE_CONTACT_FORM","location":"akismet-kotlin/net.thauvin.erik.akismet/-akismet-comment/-companion/-t-y-p-e_-c-o-n-t-a-c-t_-f-o-r-m.html","searchKeys":["TYPE_CONTACT_FORM","const val TYPE_CONTACT_FORM: String","net.thauvin.erik.akismet.AkismetComment.Companion.TYPE_CONTACT_FORM"]},{"name":"const val TYPE_FORUM_POST: String","description":"net.thauvin.erik.akismet.AkismetComment.Companion.TYPE_FORUM_POST","location":"akismet-kotlin/net.thauvin.erik.akismet/-akismet-comment/-companion/-t-y-p-e_-f-o-r-u-m_-p-o-s-t.html","searchKeys":["TYPE_FORUM_POST","const val TYPE_FORUM_POST: String","net.thauvin.erik.akismet.AkismetComment.Companion.TYPE_FORUM_POST"]},{"name":"const val TYPE_MESSAGE: String","description":"net.thauvin.erik.akismet.AkismetComment.Companion.TYPE_MESSAGE","location":"akismet-kotlin/net.thauvin.erik.akismet/-akismet-comment/-companion/-t-y-p-e_-m-e-s-s-a-g-e.html","searchKeys":["TYPE_MESSAGE","const val TYPE_MESSAGE: String","net.thauvin.erik.akismet.AkismetComment.Companion.TYPE_MESSAGE"]},{"name":"const val TYPE_PINGBACK: String","description":"net.thauvin.erik.akismet.AkismetComment.Companion.TYPE_PINGBACK","location":"akismet-kotlin/net.thauvin.erik.akismet/-akismet-comment/-companion/-t-y-p-e_-p-i-n-g-b-a-c-k.html","searchKeys":["TYPE_PINGBACK","const val TYPE_PINGBACK: String","net.thauvin.erik.akismet.AkismetComment.Companion.TYPE_PINGBACK"]},{"name":"const val TYPE_REPLY: String","description":"net.thauvin.erik.akismet.AkismetComment.Companion.TYPE_REPLY","location":"akismet-kotlin/net.thauvin.erik.akismet/-akismet-comment/-companion/-t-y-p-e_-r-e-p-l-y.html","searchKeys":["TYPE_REPLY","const val TYPE_REPLY: String","net.thauvin.erik.akismet.AkismetComment.Companion.TYPE_REPLY"]},{"name":"const val TYPE_SIGNUP: String","description":"net.thauvin.erik.akismet.AkismetComment.Companion.TYPE_SIGNUP","location":"akismet-kotlin/net.thauvin.erik.akismet/-akismet-comment/-companion/-t-y-p-e_-s-i-g-n-u-p.html","searchKeys":["TYPE_SIGNUP","const val TYPE_SIGNUP: String","net.thauvin.erik.akismet.AkismetComment.Companion.TYPE_SIGNUP"]},{"name":"const val TYPE_TRACKBACK: String","description":"net.thauvin.erik.akismet.AkismetComment.Companion.TYPE_TRACKBACK","location":"akismet-kotlin/net.thauvin.erik.akismet/-akismet-comment/-companion/-t-y-p-e_-t-r-a-c-k-b-a-c-k.html","searchKeys":["TYPE_TRACKBACK","const val TYPE_TRACKBACK: String","net.thauvin.erik.akismet.AkismetComment.Companion.TYPE_TRACKBACK"]},{"name":"const val TYPE_TWEET: String","description":"net.thauvin.erik.akismet.AkismetComment.Companion.TYPE_TWEET","location":"akismet-kotlin/net.thauvin.erik.akismet/-akismet-comment/-companion/-t-y-p-e_-t-w-e-e-t.html","searchKeys":["TYPE_TWEET","const val TYPE_TWEET: String","net.thauvin.erik.akismet.AkismetComment.Companion.TYPE_TWEET"]},{"name":"constructor(apiKey: String)","description":"net.thauvin.erik.akismet.Akismet.Akismet","location":"akismet-kotlin/net.thauvin.erik.akismet/-akismet/-akismet.html","searchKeys":["Akismet","constructor(apiKey: String)","net.thauvin.erik.akismet.Akismet.Akismet"]},{"name":"constructor(apiKey: String, blog: String)","description":"net.thauvin.erik.akismet.Akismet.Akismet","location":"akismet-kotlin/net.thauvin.erik.akismet/-akismet/-akismet.html","searchKeys":["Akismet","constructor(apiKey: String, blog: String)","net.thauvin.erik.akismet.Akismet.Akismet"]},{"name":"constructor(request: HttpServletRequest)","description":"net.thauvin.erik.akismet.AkismetComment.AkismetComment","location":"akismet-kotlin/net.thauvin.erik.akismet/-akismet-comment/-akismet-comment.html","searchKeys":["AkismetComment","constructor(request: HttpServletRequest)","net.thauvin.erik.akismet.AkismetComment.AkismetComment"]},{"name":"constructor(userIp: String, userAgent: String)","description":"net.thauvin.erik.akismet.AkismetComment.AkismetComment","location":"akismet-kotlin/net.thauvin.erik.akismet/-akismet-comment/-akismet-comment.html","searchKeys":["AkismetComment","constructor(userIp: String, userAgent: String)","net.thauvin.erik.akismet.AkismetComment.AkismetComment"]},{"name":"fun checkComment(comment: AkismetComment, trueOnError: Boolean = false): Boolean","description":"net.thauvin.erik.akismet.Akismet.checkComment","location":"akismet-kotlin/net.thauvin.erik.akismet/-akismet/check-comment.html","searchKeys":["checkComment","fun checkComment(comment: AkismetComment, trueOnError: Boolean = false): Boolean","net.thauvin.erik.akismet.Akismet.checkComment"]},{"name":"fun dateToGmt(date: Date): String","description":"net.thauvin.erik.akismet.Akismet.Companion.dateToGmt","location":"akismet-kotlin/net.thauvin.erik.akismet/-akismet/-companion/date-to-gmt.html","searchKeys":["dateToGmt","fun dateToGmt(date: Date): String","net.thauvin.erik.akismet.Akismet.Companion.dateToGmt"]},{"name":"fun dateToGmt(date: LocalDateTime): String","description":"net.thauvin.erik.akismet.Akismet.Companion.dateToGmt","location":"akismet-kotlin/net.thauvin.erik.akismet/-akismet/-companion/date-to-gmt.html","searchKeys":["dateToGmt","fun dateToGmt(date: LocalDateTime): String","net.thauvin.erik.akismet.Akismet.Companion.dateToGmt"]},{"name":"fun executeMethod(apiUrl: HttpUrl, formBody: FormBody, trueOnError: Boolean = false): Boolean","description":"net.thauvin.erik.akismet.Akismet.executeMethod","location":"akismet-kotlin/net.thauvin.erik.akismet/-akismet/execute-method.html","searchKeys":["executeMethod","fun executeMethod(apiUrl: HttpUrl, formBody: FormBody, trueOnError: Boolean = false): Boolean","net.thauvin.erik.akismet.Akismet.executeMethod"]},{"name":"fun jsonComment(json: String): AkismetComment","description":"net.thauvin.erik.akismet.Akismet.Companion.jsonComment","location":"akismet-kotlin/net.thauvin.erik.akismet/-akismet/-companion/json-comment.html","searchKeys":["jsonComment","fun jsonComment(json: String): AkismetComment","net.thauvin.erik.akismet.Akismet.Companion.jsonComment"]},{"name":"fun reset()","description":"net.thauvin.erik.akismet.Akismet.reset","location":"akismet-kotlin/net.thauvin.erik.akismet/-akismet/reset.html","searchKeys":["reset","fun reset()","net.thauvin.erik.akismet.Akismet.reset"]},{"name":"fun submitHam(comment: AkismetComment): Boolean","description":"net.thauvin.erik.akismet.Akismet.submitHam","location":"akismet-kotlin/net.thauvin.erik.akismet/-akismet/submit-ham.html","searchKeys":["submitHam","fun submitHam(comment: AkismetComment): Boolean","net.thauvin.erik.akismet.Akismet.submitHam"]},{"name":"fun submitSpam(comment: AkismetComment): Boolean","description":"net.thauvin.erik.akismet.Akismet.submitSpam","location":"akismet-kotlin/net.thauvin.erik.akismet/-akismet/submit-spam.html","searchKeys":["submitSpam","fun submitSpam(comment: AkismetComment): Boolean","net.thauvin.erik.akismet.Akismet.submitSpam"]},{"name":"fun toJson(): String","description":"net.thauvin.erik.akismet.AkismetComment.toJson","location":"akismet-kotlin/net.thauvin.erik.akismet/-akismet-comment/to-json.html","searchKeys":["toJson","fun toJson(): String","net.thauvin.erik.akismet.AkismetComment.toJson"]},{"name":"fun verifyKey(): Boolean","description":"net.thauvin.erik.akismet.Akismet.verifyKey","location":"akismet-kotlin/net.thauvin.erik.akismet/-akismet/verify-key.html","searchKeys":["verifyKey","fun verifyKey(): Boolean","net.thauvin.erik.akismet.Akismet.verifyKey"]},{"name":"object Companion","description":"net.thauvin.erik.akismet.Akismet.Companion","location":"akismet-kotlin/net.thauvin.erik.akismet/-akismet/-companion/index.html","searchKeys":["Companion","object Companion","net.thauvin.erik.akismet.Akismet.Companion"]},{"name":"object Companion","description":"net.thauvin.erik.akismet.AkismetComment.Companion","location":"akismet-kotlin/net.thauvin.erik.akismet/-akismet-comment/-companion/index.html","searchKeys":["Companion","object Companion","net.thauvin.erik.akismet.AkismetComment.Companion"]},{"name":"open class Akismet(apiKey: String)","description":"net.thauvin.erik.akismet.Akismet","location":"akismet-kotlin/net.thauvin.erik.akismet/-akismet/index.html","searchKeys":["Akismet","open class Akismet(apiKey: String)","net.thauvin.erik.akismet.Akismet"]},{"name":"open class AkismetComment(val userIp: String, val userAgent: String)","description":"net.thauvin.erik.akismet.AkismetComment","location":"akismet-kotlin/net.thauvin.erik.akismet/-akismet-comment/index.html","searchKeys":["AkismetComment","open class AkismetComment(val userIp: String, val userAgent: String)","net.thauvin.erik.akismet.AkismetComment"]},{"name":"open operator override fun equals(other: Any?): Boolean","description":"net.thauvin.erik.akismet.AkismetComment.equals","location":"akismet-kotlin/net.thauvin.erik.akismet/-akismet-comment/equals.html","searchKeys":["equals","open operator override fun equals(other: Any?): Boolean","net.thauvin.erik.akismet.AkismetComment.equals"]},{"name":"open override fun hashCode(): Int","description":"net.thauvin.erik.akismet.AkismetComment.hashCode","location":"akismet-kotlin/net.thauvin.erik.akismet/-akismet-comment/hash-code.html","searchKeys":["hashCode","open override fun hashCode(): Int","net.thauvin.erik.akismet.AkismetComment.hashCode"]},{"name":"open override fun toString(): String","description":"net.thauvin.erik.akismet.AkismetComment.toString","location":"akismet-kotlin/net.thauvin.erik.akismet/-akismet-comment/to-string.html","searchKeys":["toString","open override fun toString(): String","net.thauvin.erik.akismet.AkismetComment.toString"]},{"name":"val logger: Logger","description":"net.thauvin.erik.akismet.Akismet.logger","location":"akismet-kotlin/net.thauvin.erik.akismet/-akismet/logger.html","searchKeys":["logger","val logger: Logger","net.thauvin.erik.akismet.Akismet.logger"]},{"name":"val userAgent: String","description":"net.thauvin.erik.akismet.AkismetComment.userAgent","location":"akismet-kotlin/net.thauvin.erik.akismet/-akismet-comment/user-agent.html","searchKeys":["userAgent","val userAgent: String","net.thauvin.erik.akismet.AkismetComment.userAgent"]},{"name":"val userIp: String","description":"net.thauvin.erik.akismet.AkismetComment.userIp","location":"akismet-kotlin/net.thauvin.erik.akismet/-akismet-comment/user-ip.html","searchKeys":["userIp","val userIp: String","net.thauvin.erik.akismet.AkismetComment.userIp"]},{"name":"var appUserAgent: String","description":"net.thauvin.erik.akismet.Akismet.appUserAgent","location":"akismet-kotlin/net.thauvin.erik.akismet/-akismet/app-user-agent.html","searchKeys":["appUserAgent","var appUserAgent: String","net.thauvin.erik.akismet.Akismet.appUserAgent"]},{"name":"var author: String?","description":"net.thauvin.erik.akismet.AkismetComment.author","location":"akismet-kotlin/net.thauvin.erik.akismet/-akismet-comment/author.html","searchKeys":["author","var author: String?","net.thauvin.erik.akismet.AkismetComment.author"]},{"name":"var authorEmail: String?","description":"net.thauvin.erik.akismet.AkismetComment.authorEmail","location":"akismet-kotlin/net.thauvin.erik.akismet/-akismet-comment/author-email.html","searchKeys":["authorEmail","var authorEmail: String?","net.thauvin.erik.akismet.AkismetComment.authorEmail"]},{"name":"var authorUrl: String?","description":"net.thauvin.erik.akismet.AkismetComment.authorUrl","location":"akismet-kotlin/net.thauvin.erik.akismet/-akismet-comment/author-url.html","searchKeys":["authorUrl","var authorUrl: String?","net.thauvin.erik.akismet.AkismetComment.authorUrl"]},{"name":"var blog: String","description":"net.thauvin.erik.akismet.Akismet.blog","location":"akismet-kotlin/net.thauvin.erik.akismet/-akismet/blog.html","searchKeys":["blog","var blog: String","net.thauvin.erik.akismet.Akismet.blog"]},{"name":"var blogCharset: String?","description":"net.thauvin.erik.akismet.AkismetComment.blogCharset","location":"akismet-kotlin/net.thauvin.erik.akismet/-akismet-comment/blog-charset.html","searchKeys":["blogCharset","var blogCharset: String?","net.thauvin.erik.akismet.AkismetComment.blogCharset"]},{"name":"var blogLang: String?","description":"net.thauvin.erik.akismet.AkismetComment.blogLang","location":"akismet-kotlin/net.thauvin.erik.akismet/-akismet-comment/blog-lang.html","searchKeys":["blogLang","var blogLang: String?","net.thauvin.erik.akismet.AkismetComment.blogLang"]},{"name":"var content: String?","description":"net.thauvin.erik.akismet.AkismetComment.content","location":"akismet-kotlin/net.thauvin.erik.akismet/-akismet-comment/content.html","searchKeys":["content","var content: String?","net.thauvin.erik.akismet.AkismetComment.content"]},{"name":"var dateGmt: String?","description":"net.thauvin.erik.akismet.AkismetComment.dateGmt","location":"akismet-kotlin/net.thauvin.erik.akismet/-akismet-comment/date-gmt.html","searchKeys":["dateGmt","var dateGmt: String?","net.thauvin.erik.akismet.AkismetComment.dateGmt"]},{"name":"var debugHelp: String","description":"net.thauvin.erik.akismet.Akismet.debugHelp","location":"akismet-kotlin/net.thauvin.erik.akismet/-akismet/debug-help.html","searchKeys":["debugHelp","var debugHelp: String","net.thauvin.erik.akismet.Akismet.debugHelp"]},{"name":"var errorMessage: String","description":"net.thauvin.erik.akismet.Akismet.errorMessage","location":"akismet-kotlin/net.thauvin.erik.akismet/-akismet/error-message.html","searchKeys":["errorMessage","var errorMessage: String","net.thauvin.erik.akismet.Akismet.errorMessage"]},{"name":"var httpStatusCode: Int","description":"net.thauvin.erik.akismet.Akismet.httpStatusCode","location":"akismet-kotlin/net.thauvin.erik.akismet/-akismet/http-status-code.html","searchKeys":["httpStatusCode","var httpStatusCode: Int","net.thauvin.erik.akismet.Akismet.httpStatusCode"]},{"name":"var isDiscard: Boolean","description":"net.thauvin.erik.akismet.Akismet.isDiscard","location":"akismet-kotlin/net.thauvin.erik.akismet/-akismet/is-discard.html","searchKeys":["isDiscard","var isDiscard: Boolean","net.thauvin.erik.akismet.Akismet.isDiscard"]},{"name":"var isTest: Boolean","description":"net.thauvin.erik.akismet.AkismetComment.isTest","location":"akismet-kotlin/net.thauvin.erik.akismet/-akismet-comment/is-test.html","searchKeys":["isTest","var isTest: Boolean","net.thauvin.erik.akismet.AkismetComment.isTest"]},{"name":"var isVerifiedKey: Boolean","description":"net.thauvin.erik.akismet.Akismet.isVerifiedKey","location":"akismet-kotlin/net.thauvin.erik.akismet/-akismet/is-verified-key.html","searchKeys":["isVerifiedKey","var isVerifiedKey: Boolean","net.thauvin.erik.akismet.Akismet.isVerifiedKey"]},{"name":"var permalink: String?","description":"net.thauvin.erik.akismet.AkismetComment.permalink","location":"akismet-kotlin/net.thauvin.erik.akismet/-akismet-comment/permalink.html","searchKeys":["permalink","var permalink: String?","net.thauvin.erik.akismet.AkismetComment.permalink"]},{"name":"var postModifiedGmt: String?","description":"net.thauvin.erik.akismet.AkismetComment.postModifiedGmt","location":"akismet-kotlin/net.thauvin.erik.akismet/-akismet-comment/post-modified-gmt.html","searchKeys":["postModifiedGmt","var postModifiedGmt: String?","net.thauvin.erik.akismet.AkismetComment.postModifiedGmt"]},{"name":"var proTip: String","description":"net.thauvin.erik.akismet.Akismet.proTip","location":"akismet-kotlin/net.thauvin.erik.akismet/-akismet/pro-tip.html","searchKeys":["proTip","var proTip: String","net.thauvin.erik.akismet.Akismet.proTip"]},{"name":"var recheckReason: String?","description":"net.thauvin.erik.akismet.AkismetComment.recheckReason","location":"akismet-kotlin/net.thauvin.erik.akismet/-akismet-comment/recheck-reason.html","searchKeys":["recheckReason","var recheckReason: String?","net.thauvin.erik.akismet.AkismetComment.recheckReason"]},{"name":"var referrer: String?","description":"net.thauvin.erik.akismet.AkismetComment.referrer","location":"akismet-kotlin/net.thauvin.erik.akismet/-akismet-comment/referrer.html","searchKeys":["referrer","var referrer: String?","net.thauvin.erik.akismet.AkismetComment.referrer"]},{"name":"var response: String","description":"net.thauvin.erik.akismet.Akismet.response","location":"akismet-kotlin/net.thauvin.erik.akismet/-akismet/response.html","searchKeys":["response","var response: String","net.thauvin.erik.akismet.Akismet.response"]},{"name":"var serverEnv: Map","description":"net.thauvin.erik.akismet.AkismetComment.serverEnv","location":"akismet-kotlin/net.thauvin.erik.akismet/-akismet-comment/server-env.html","searchKeys":["serverEnv","var serverEnv: Map","net.thauvin.erik.akismet.AkismetComment.serverEnv"]},{"name":"var type: String?","description":"net.thauvin.erik.akismet.AkismetComment.type","location":"akismet-kotlin/net.thauvin.erik.akismet/-akismet-comment/type.html","searchKeys":["type","var type: String?","net.thauvin.erik.akismet.AkismetComment.type"]},{"name":"var userRole: String?","description":"net.thauvin.erik.akismet.AkismetComment.userRole","location":"akismet-kotlin/net.thauvin.erik.akismet/-akismet-comment/user-role.html","searchKeys":["userRole","var userRole: String?","net.thauvin.erik.akismet.AkismetComment.userRole"]}]
+[{"name":"const val ADMIN_ROLE: String","description":"net.thauvin.erik.akismet.AkismetComment.Companion.ADMIN_ROLE","location":"-akismet -kotlin/net.thauvin.erik.akismet/-akismet-comment/-companion/-a-d-m-i-n_-r-o-l-e.html","searchKeys":["ADMIN_ROLE","const val ADMIN_ROLE: String","net.thauvin.erik.akismet.AkismetComment.Companion.ADMIN_ROLE"]},{"name":"const val TYPE_BLOG_POST: String","description":"net.thauvin.erik.akismet.AkismetComment.Companion.TYPE_BLOG_POST","location":"-akismet -kotlin/net.thauvin.erik.akismet/-akismet-comment/-companion/-t-y-p-e_-b-l-o-g_-p-o-s-t.html","searchKeys":["TYPE_BLOG_POST","const val TYPE_BLOG_POST: String","net.thauvin.erik.akismet.AkismetComment.Companion.TYPE_BLOG_POST"]},{"name":"const val TYPE_COMMENT: String","description":"net.thauvin.erik.akismet.AkismetComment.Companion.TYPE_COMMENT","location":"-akismet -kotlin/net.thauvin.erik.akismet/-akismet-comment/-companion/-t-y-p-e_-c-o-m-m-e-n-t.html","searchKeys":["TYPE_COMMENT","const val TYPE_COMMENT: String","net.thauvin.erik.akismet.AkismetComment.Companion.TYPE_COMMENT"]},{"name":"const val TYPE_CONTACT_FORM: String","description":"net.thauvin.erik.akismet.AkismetComment.Companion.TYPE_CONTACT_FORM","location":"-akismet -kotlin/net.thauvin.erik.akismet/-akismet-comment/-companion/-t-y-p-e_-c-o-n-t-a-c-t_-f-o-r-m.html","searchKeys":["TYPE_CONTACT_FORM","const val TYPE_CONTACT_FORM: String","net.thauvin.erik.akismet.AkismetComment.Companion.TYPE_CONTACT_FORM"]},{"name":"const val TYPE_FORUM_POST: String","description":"net.thauvin.erik.akismet.AkismetComment.Companion.TYPE_FORUM_POST","location":"-akismet -kotlin/net.thauvin.erik.akismet/-akismet-comment/-companion/-t-y-p-e_-f-o-r-u-m_-p-o-s-t.html","searchKeys":["TYPE_FORUM_POST","const val TYPE_FORUM_POST: String","net.thauvin.erik.akismet.AkismetComment.Companion.TYPE_FORUM_POST"]},{"name":"const val TYPE_MESSAGE: String","description":"net.thauvin.erik.akismet.AkismetComment.Companion.TYPE_MESSAGE","location":"-akismet -kotlin/net.thauvin.erik.akismet/-akismet-comment/-companion/-t-y-p-e_-m-e-s-s-a-g-e.html","searchKeys":["TYPE_MESSAGE","const val TYPE_MESSAGE: String","net.thauvin.erik.akismet.AkismetComment.Companion.TYPE_MESSAGE"]},{"name":"const val TYPE_PINGBACK: String","description":"net.thauvin.erik.akismet.AkismetComment.Companion.TYPE_PINGBACK","location":"-akismet -kotlin/net.thauvin.erik.akismet/-akismet-comment/-companion/-t-y-p-e_-p-i-n-g-b-a-c-k.html","searchKeys":["TYPE_PINGBACK","const val TYPE_PINGBACK: String","net.thauvin.erik.akismet.AkismetComment.Companion.TYPE_PINGBACK"]},{"name":"const val TYPE_REPLY: String","description":"net.thauvin.erik.akismet.AkismetComment.Companion.TYPE_REPLY","location":"-akismet -kotlin/net.thauvin.erik.akismet/-akismet-comment/-companion/-t-y-p-e_-r-e-p-l-y.html","searchKeys":["TYPE_REPLY","const val TYPE_REPLY: String","net.thauvin.erik.akismet.AkismetComment.Companion.TYPE_REPLY"]},{"name":"const val TYPE_SIGNUP: String","description":"net.thauvin.erik.akismet.AkismetComment.Companion.TYPE_SIGNUP","location":"-akismet -kotlin/net.thauvin.erik.akismet/-akismet-comment/-companion/-t-y-p-e_-s-i-g-n-u-p.html","searchKeys":["TYPE_SIGNUP","const val TYPE_SIGNUP: String","net.thauvin.erik.akismet.AkismetComment.Companion.TYPE_SIGNUP"]},{"name":"const val TYPE_TRACKBACK: String","description":"net.thauvin.erik.akismet.AkismetComment.Companion.TYPE_TRACKBACK","location":"-akismet -kotlin/net.thauvin.erik.akismet/-akismet-comment/-companion/-t-y-p-e_-t-r-a-c-k-b-a-c-k.html","searchKeys":["TYPE_TRACKBACK","const val TYPE_TRACKBACK: String","net.thauvin.erik.akismet.AkismetComment.Companion.TYPE_TRACKBACK"]},{"name":"const val TYPE_TWEET: String","description":"net.thauvin.erik.akismet.AkismetComment.Companion.TYPE_TWEET","location":"-akismet -kotlin/net.thauvin.erik.akismet/-akismet-comment/-companion/-t-y-p-e_-t-w-e-e-t.html","searchKeys":["TYPE_TWEET","const val TYPE_TWEET: String","net.thauvin.erik.akismet.AkismetComment.Companion.TYPE_TWEET"]},{"name":"constructor(apiKey: String)","description":"net.thauvin.erik.akismet.Akismet.Akismet","location":"-akismet -kotlin/net.thauvin.erik.akismet/-akismet/-akismet.html","searchKeys":["Akismet","constructor(apiKey: String)","net.thauvin.erik.akismet.Akismet.Akismet"]},{"name":"constructor(apiKey: String, blog: String)","description":"net.thauvin.erik.akismet.Akismet.Akismet","location":"-akismet -kotlin/net.thauvin.erik.akismet/-akismet/-akismet.html","searchKeys":["Akismet","constructor(apiKey: String, blog: String)","net.thauvin.erik.akismet.Akismet.Akismet"]},{"name":"constructor(request: )","description":"net.thauvin.erik.akismet.AkismetComment.AkismetComment","location":"-akismet -kotlin/net.thauvin.erik.akismet/-akismet-comment/-akismet-comment.html","searchKeys":["AkismetComment","constructor(request: )","net.thauvin.erik.akismet.AkismetComment.AkismetComment"]},{"name":"constructor(userIp: String, userAgent: String)","description":"net.thauvin.erik.akismet.AkismetComment.AkismetComment","location":"-akismet -kotlin/net.thauvin.erik.akismet/-akismet-comment/-akismet-comment.html","searchKeys":["AkismetComment","constructor(userIp: String, userAgent: String)","net.thauvin.erik.akismet.AkismetComment.AkismetComment"]},{"name":"fun checkComment(comment: AkismetComment, trueOnError: Boolean = false): Boolean","description":"net.thauvin.erik.akismet.Akismet.checkComment","location":"-akismet -kotlin/net.thauvin.erik.akismet/-akismet/check-comment.html","searchKeys":["checkComment","fun checkComment(comment: AkismetComment, trueOnError: Boolean = false): Boolean","net.thauvin.erik.akismet.Akismet.checkComment"]},{"name":"fun dateToGmt(date: Date): String","description":"net.thauvin.erik.akismet.Akismet.Companion.dateToGmt","location":"-akismet -kotlin/net.thauvin.erik.akismet/-akismet/-companion/date-to-gmt.html","searchKeys":["dateToGmt","fun dateToGmt(date: Date): String","net.thauvin.erik.akismet.Akismet.Companion.dateToGmt"]},{"name":"fun dateToGmt(date: LocalDateTime): String","description":"net.thauvin.erik.akismet.Akismet.Companion.dateToGmt","location":"-akismet -kotlin/net.thauvin.erik.akismet/-akismet/-companion/date-to-gmt.html","searchKeys":["dateToGmt","fun dateToGmt(date: LocalDateTime): String","net.thauvin.erik.akismet.Akismet.Companion.dateToGmt"]},{"name":"fun executeMethod(apiUrl: , formBody: , trueOnError: Boolean = false): Boolean","description":"net.thauvin.erik.akismet.Akismet.executeMethod","location":"-akismet -kotlin/net.thauvin.erik.akismet/-akismet/execute-method.html","searchKeys":["executeMethod","fun executeMethod(apiUrl: , formBody: , trueOnError: Boolean = false): Boolean","net.thauvin.erik.akismet.Akismet.executeMethod"]},{"name":"fun jsonComment(json: String): AkismetComment","description":"net.thauvin.erik.akismet.Akismet.Companion.jsonComment","location":"-akismet -kotlin/net.thauvin.erik.akismet/-akismet/-companion/json-comment.html","searchKeys":["jsonComment","fun jsonComment(json: String): AkismetComment","net.thauvin.erik.akismet.Akismet.Companion.jsonComment"]},{"name":"fun reset()","description":"net.thauvin.erik.akismet.Akismet.reset","location":"-akismet -kotlin/net.thauvin.erik.akismet/-akismet/reset.html","searchKeys":["reset","fun reset()","net.thauvin.erik.akismet.Akismet.reset"]},{"name":"fun submitHam(comment: AkismetComment): Boolean","description":"net.thauvin.erik.akismet.Akismet.submitHam","location":"-akismet -kotlin/net.thauvin.erik.akismet/-akismet/submit-ham.html","searchKeys":["submitHam","fun submitHam(comment: AkismetComment): Boolean","net.thauvin.erik.akismet.Akismet.submitHam"]},{"name":"fun submitSpam(comment: AkismetComment): Boolean","description":"net.thauvin.erik.akismet.Akismet.submitSpam","location":"-akismet -kotlin/net.thauvin.erik.akismet/-akismet/submit-spam.html","searchKeys":["submitSpam","fun submitSpam(comment: AkismetComment): Boolean","net.thauvin.erik.akismet.Akismet.submitSpam"]},{"name":"fun toJson(): String","description":"net.thauvin.erik.akismet.AkismetComment.toJson","location":"-akismet -kotlin/net.thauvin.erik.akismet/-akismet-comment/to-json.html","searchKeys":["toJson","fun toJson(): String","net.thauvin.erik.akismet.AkismetComment.toJson"]},{"name":"fun verifyKey(): Boolean","description":"net.thauvin.erik.akismet.Akismet.verifyKey","location":"-akismet -kotlin/net.thauvin.erik.akismet/-akismet/verify-key.html","searchKeys":["verifyKey","fun verifyKey(): Boolean","net.thauvin.erik.akismet.Akismet.verifyKey"]},{"name":"object Companion","description":"net.thauvin.erik.akismet.Akismet.Companion","location":"-akismet -kotlin/net.thauvin.erik.akismet/-akismet/-companion/index.html","searchKeys":["Companion","object Companion","net.thauvin.erik.akismet.Akismet.Companion"]},{"name":"object Companion","description":"net.thauvin.erik.akismet.AkismetComment.Companion","location":"-akismet -kotlin/net.thauvin.erik.akismet/-akismet-comment/-companion/index.html","searchKeys":["Companion","object Companion","net.thauvin.erik.akismet.AkismetComment.Companion"]},{"name":"open class Akismet(apiKey: String)","description":"net.thauvin.erik.akismet.Akismet","location":"-akismet -kotlin/net.thauvin.erik.akismet/-akismet/index.html","searchKeys":["Akismet","open class Akismet(apiKey: String)","net.thauvin.erik.akismet.Akismet"]},{"name":"open class AkismetComment(val userIp: String, val userAgent: String)","description":"net.thauvin.erik.akismet.AkismetComment","location":"-akismet -kotlin/net.thauvin.erik.akismet/-akismet-comment/index.html","searchKeys":["AkismetComment","open class AkismetComment(val userIp: String, val userAgent: String)","net.thauvin.erik.akismet.AkismetComment"]},{"name":"open operator override fun equals(other: Any?): Boolean","description":"net.thauvin.erik.akismet.AkismetComment.equals","location":"-akismet -kotlin/net.thauvin.erik.akismet/-akismet-comment/equals.html","searchKeys":["equals","open operator override fun equals(other: Any?): Boolean","net.thauvin.erik.akismet.AkismetComment.equals"]},{"name":"open override fun hashCode(): Int","description":"net.thauvin.erik.akismet.AkismetComment.hashCode","location":"-akismet -kotlin/net.thauvin.erik.akismet/-akismet-comment/hash-code.html","searchKeys":["hashCode","open override fun hashCode(): Int","net.thauvin.erik.akismet.AkismetComment.hashCode"]},{"name":"open override fun toString(): String","description":"net.thauvin.erik.akismet.AkismetComment.toString","location":"-akismet -kotlin/net.thauvin.erik.akismet/-akismet-comment/to-string.html","searchKeys":["toString","open override fun toString(): String","net.thauvin.erik.akismet.AkismetComment.toString"]},{"name":"val logger: Logger","description":"net.thauvin.erik.akismet.Akismet.logger","location":"-akismet -kotlin/net.thauvin.erik.akismet/-akismet/logger.html","searchKeys":["logger","val logger: Logger","net.thauvin.erik.akismet.Akismet.logger"]},{"name":"val userAgent: String","description":"net.thauvin.erik.akismet.AkismetComment.userAgent","location":"-akismet -kotlin/net.thauvin.erik.akismet/-akismet-comment/user-agent.html","searchKeys":["userAgent","val userAgent: String","net.thauvin.erik.akismet.AkismetComment.userAgent"]},{"name":"val userIp: String","description":"net.thauvin.erik.akismet.AkismetComment.userIp","location":"-akismet -kotlin/net.thauvin.erik.akismet/-akismet-comment/user-ip.html","searchKeys":["userIp","val userIp: String","net.thauvin.erik.akismet.AkismetComment.userIp"]},{"name":"var appUserAgent: String","description":"net.thauvin.erik.akismet.Akismet.appUserAgent","location":"-akismet -kotlin/net.thauvin.erik.akismet/-akismet/app-user-agent.html","searchKeys":["appUserAgent","var appUserAgent: String","net.thauvin.erik.akismet.Akismet.appUserAgent"]},{"name":"var author: String?","description":"net.thauvin.erik.akismet.AkismetComment.author","location":"-akismet -kotlin/net.thauvin.erik.akismet/-akismet-comment/author.html","searchKeys":["author","var author: String?","net.thauvin.erik.akismet.AkismetComment.author"]},{"name":"var authorEmail: String?","description":"net.thauvin.erik.akismet.AkismetComment.authorEmail","location":"-akismet -kotlin/net.thauvin.erik.akismet/-akismet-comment/author-email.html","searchKeys":["authorEmail","var authorEmail: String?","net.thauvin.erik.akismet.AkismetComment.authorEmail"]},{"name":"var authorUrl: String?","description":"net.thauvin.erik.akismet.AkismetComment.authorUrl","location":"-akismet -kotlin/net.thauvin.erik.akismet/-akismet-comment/author-url.html","searchKeys":["authorUrl","var authorUrl: String?","net.thauvin.erik.akismet.AkismetComment.authorUrl"]},{"name":"var blog: String","description":"net.thauvin.erik.akismet.Akismet.blog","location":"-akismet -kotlin/net.thauvin.erik.akismet/-akismet/blog.html","searchKeys":["blog","var blog: String","net.thauvin.erik.akismet.Akismet.blog"]},{"name":"var blogCharset: String?","description":"net.thauvin.erik.akismet.AkismetComment.blogCharset","location":"-akismet -kotlin/net.thauvin.erik.akismet/-akismet-comment/blog-charset.html","searchKeys":["blogCharset","var blogCharset: String?","net.thauvin.erik.akismet.AkismetComment.blogCharset"]},{"name":"var blogLang: String?","description":"net.thauvin.erik.akismet.AkismetComment.blogLang","location":"-akismet -kotlin/net.thauvin.erik.akismet/-akismet-comment/blog-lang.html","searchKeys":["blogLang","var blogLang: String?","net.thauvin.erik.akismet.AkismetComment.blogLang"]},{"name":"var content: String?","description":"net.thauvin.erik.akismet.AkismetComment.content","location":"-akismet -kotlin/net.thauvin.erik.akismet/-akismet-comment/content.html","searchKeys":["content","var content: String?","net.thauvin.erik.akismet.AkismetComment.content"]},{"name":"var dateGmt: String?","description":"net.thauvin.erik.akismet.AkismetComment.dateGmt","location":"-akismet -kotlin/net.thauvin.erik.akismet/-akismet-comment/date-gmt.html","searchKeys":["dateGmt","var dateGmt: String?","net.thauvin.erik.akismet.AkismetComment.dateGmt"]},{"name":"var debugHelp: String","description":"net.thauvin.erik.akismet.Akismet.debugHelp","location":"-akismet -kotlin/net.thauvin.erik.akismet/-akismet/debug-help.html","searchKeys":["debugHelp","var debugHelp: String","net.thauvin.erik.akismet.Akismet.debugHelp"]},{"name":"var errorMessage: String","description":"net.thauvin.erik.akismet.Akismet.errorMessage","location":"-akismet -kotlin/net.thauvin.erik.akismet/-akismet/error-message.html","searchKeys":["errorMessage","var errorMessage: String","net.thauvin.erik.akismet.Akismet.errorMessage"]},{"name":"var httpStatusCode: Int","description":"net.thauvin.erik.akismet.Akismet.httpStatusCode","location":"-akismet -kotlin/net.thauvin.erik.akismet/-akismet/http-status-code.html","searchKeys":["httpStatusCode","var httpStatusCode: Int","net.thauvin.erik.akismet.Akismet.httpStatusCode"]},{"name":"var isDiscard: Boolean","description":"net.thauvin.erik.akismet.Akismet.isDiscard","location":"-akismet -kotlin/net.thauvin.erik.akismet/-akismet/is-discard.html","searchKeys":["isDiscard","var isDiscard: Boolean","net.thauvin.erik.akismet.Akismet.isDiscard"]},{"name":"var isTest: Boolean","description":"net.thauvin.erik.akismet.AkismetComment.isTest","location":"-akismet -kotlin/net.thauvin.erik.akismet/-akismet-comment/is-test.html","searchKeys":["isTest","var isTest: Boolean","net.thauvin.erik.akismet.AkismetComment.isTest"]},{"name":"var isVerifiedKey: Boolean","description":"net.thauvin.erik.akismet.Akismet.isVerifiedKey","location":"-akismet -kotlin/net.thauvin.erik.akismet/-akismet/is-verified-key.html","searchKeys":["isVerifiedKey","var isVerifiedKey: Boolean","net.thauvin.erik.akismet.Akismet.isVerifiedKey"]},{"name":"var permalink: String?","description":"net.thauvin.erik.akismet.AkismetComment.permalink","location":"-akismet -kotlin/net.thauvin.erik.akismet/-akismet-comment/permalink.html","searchKeys":["permalink","var permalink: String?","net.thauvin.erik.akismet.AkismetComment.permalink"]},{"name":"var postModifiedGmt: String?","description":"net.thauvin.erik.akismet.AkismetComment.postModifiedGmt","location":"-akismet -kotlin/net.thauvin.erik.akismet/-akismet-comment/post-modified-gmt.html","searchKeys":["postModifiedGmt","var postModifiedGmt: String?","net.thauvin.erik.akismet.AkismetComment.postModifiedGmt"]},{"name":"var proTip: String","description":"net.thauvin.erik.akismet.Akismet.proTip","location":"-akismet -kotlin/net.thauvin.erik.akismet/-akismet/pro-tip.html","searchKeys":["proTip","var proTip: String","net.thauvin.erik.akismet.Akismet.proTip"]},{"name":"var recheckReason: String?","description":"net.thauvin.erik.akismet.AkismetComment.recheckReason","location":"-akismet -kotlin/net.thauvin.erik.akismet/-akismet-comment/recheck-reason.html","searchKeys":["recheckReason","var recheckReason: String?","net.thauvin.erik.akismet.AkismetComment.recheckReason"]},{"name":"var referrer: String?","description":"net.thauvin.erik.akismet.AkismetComment.referrer","location":"-akismet -kotlin/net.thauvin.erik.akismet/-akismet-comment/referrer.html","searchKeys":["referrer","var referrer: String?","net.thauvin.erik.akismet.AkismetComment.referrer"]},{"name":"var response: String","description":"net.thauvin.erik.akismet.Akismet.response","location":"-akismet -kotlin/net.thauvin.erik.akismet/-akismet/response.html","searchKeys":["response","var response: String","net.thauvin.erik.akismet.Akismet.response"]},{"name":"var serverEnv: Map","description":"net.thauvin.erik.akismet.AkismetComment.serverEnv","location":"-akismet -kotlin/net.thauvin.erik.akismet/-akismet-comment/server-env.html","searchKeys":["serverEnv","var serverEnv: Map","net.thauvin.erik.akismet.AkismetComment.serverEnv"]},{"name":"var type: String?","description":"net.thauvin.erik.akismet.AkismetComment.type","location":"-akismet -kotlin/net.thauvin.erik.akismet/-akismet-comment/type.html","searchKeys":["type","var type: String?","net.thauvin.erik.akismet.AkismetComment.type"]},{"name":"var userRole: String?","description":"net.thauvin.erik.akismet.AkismetComment.userRole","location":"-akismet -kotlin/net.thauvin.erik.akismet/-akismet-comment/user-role.html","searchKeys":["userRole","var userRole: String?","net.thauvin.erik.akismet.AkismetComment.userRole"]}]
diff --git a/docs/scripts/platform-content-handler.js b/docs/scripts/platform-content-handler.js
index 7c5e8af..8c4ca53 100644
--- a/docs/scripts/platform-content-handler.js
+++ b/docs/scripts/platform-content-handler.js
@@ -1,3 +1,7 @@
+/*
+ * Copyright 2014-2023 JetBrains s.r.o. Use of this source code is governed by the Apache 2.0 license.
+ */
+
filteringContext = {
dependencies: {},
restrictedDependencies: [],
diff --git a/docs/scripts/sourceset_dependencies.js b/docs/scripts/sourceset_dependencies.js
index b3aa738..9d52f63 100644
--- a/docs/scripts/sourceset_dependencies.js
+++ b/docs/scripts/sourceset_dependencies.js
@@ -1 +1 @@
-sourceset_dependencies='{":dokkaHtml/main":[]}'
+sourceset_dependencies='{"root/main":[]}'
diff --git a/docs/scripts/symbol-parameters-wrapper_deferred.js b/docs/scripts/symbol-parameters-wrapper_deferred.js
index 248d0ab..7ecae7a 100644
--- a/docs/scripts/symbol-parameters-wrapper_deferred.js
+++ b/docs/scripts/symbol-parameters-wrapper_deferred.js
@@ -1,83 +1,64 @@
+/*
+ * Copyright 2014-2023 JetBrains s.r.o. Use of this source code is governed by the Apache 2.0 license.
+ */
+
// helps with some corner cases where starts working already,
// but the signature is not yet long enough to be wrapped
-const leftPaddingPx = 60
+(function() {
+ const leftPaddingPx = 60;
-const symbolResizeObserver = new ResizeObserver(entries => {
- entries.forEach(entry => {
- const symbolElement = entry.target
- symbolResizeObserver.unobserve(symbolElement) // only need it once, otherwise will be executed multiple times
- wrapSymbolParameters(symbolElement);
- })
-});
-
-const wrapAllSymbolParameters = () => {
- document.querySelectorAll("div.symbol").forEach(symbol => wrapSymbolParameters(symbol))
-}
-
-const wrapSymbolParameters = (symbol) => {
- let parametersBlock = symbol.querySelector("span.parameters")
- if (parametersBlock == null) {
- return // nothing to wrap
+ function createNbspIndent() {
+ let indent = document.createElement("span");
+ indent.append(document.createTextNode("\u00A0\u00A0\u00A0\u00A0"));
+ indent.classList.add("nbsp-indent");
+ return indent;
}
- let symbolBlockWidth = symbol.clientWidth
+ function wrapSymbolParameters(entry) {
+ const symbol = entry.target;
+ const symbolBlockWidth = entry.borderBoxSize && entry.borderBoxSize[0] && entry.borderBoxSize[0].inlineSize;
- // Even though the script is marked as `defer` and we wait for `DOMContentLoaded` event,
- // it can happen that `symbolBlockWidth` is 0, indicating that something hasn't been loaded.
- // In this case, just retry once all styles have been applied and it has been resized correctly.
- if (symbolBlockWidth === 0) {
- symbolResizeObserver.observe(symbol)
- return
+ // Even though the script is marked as `defer` and we wait for `DOMContentLoaded` event,
+ // or if this block is a part of hidden tab, it can happen that `symbolBlockWidth` is 0,
+ // indicating that something hasn't been loaded.
+ // In this case, observer will be triggered onсe again when it will be ready.
+ if (symbolBlockWidth > 0) {
+ const node = symbol.querySelector(".parameters");
+
+ if (node) {
+ // if window resize happened and observer was triggered, reset previously wrapped
+ // parameters as they might not need wrapping anymore, and check again
+ node.classList.remove("wrapped");
+ node.querySelectorAll(".parameter .nbsp-indent")
+ .forEach(indent => indent.remove());
+
+ const innerTextWidth = Array.from(symbol.children)
+ .filter(it => !it.classList.contains("block")) // blocks are usually on their own (like annotations), so ignore it
+ .map(it => it.getBoundingClientRect().width)
+ .reduce((a, b) => a + b, 0);
+
+ // if signature text takes up more than a single line, wrap params for readability
+ if (innerTextWidth > (symbolBlockWidth - leftPaddingPx)) {
+ node.classList.add("wrapped");
+ node.querySelectorAll(".parameter").forEach(param => {
+ // has to be a physical indent so that it can be copied. styles like
+ // paddings and `::before { content: " " }` do not work for that
+ param.prepend(createNbspIndent());
+ });
+ }
+ }
+ }
}
- let innerTextWidth = Array.from(symbol.children)
- .filter(it => !it.classList.contains("block")) // blocks are usually on their own (like annotations), so ignore it
- .map(it => it.getBoundingClientRect().width).reduce((a, b) => a + b, 0)
+ const symbolsObserver = new ResizeObserver(entries => entries.forEach(wrapSymbolParameters));
- // if signature text takes up more than a single line, wrap params for readability
- let shouldWrapParams = innerTextWidth > (symbolBlockWidth - leftPaddingPx)
- if (shouldWrapParams) {
- parametersBlock.classList.add("wrapped")
- parametersBlock.querySelectorAll("span.parameter").forEach(param => {
- // has to be a physical indent so that it can be copied. styles like
- // paddings and `::before { content: " " }` do not work for that
- param.prepend(createNbspIndent())
- })
+ function initHandlers() {
+ document.querySelectorAll("div.symbol").forEach(symbol => symbolsObserver.observe(symbol));
}
-}
-const createNbspIndent = () => {
- let indent = document.createElement("span")
- indent.append(document.createTextNode("\u00A0\u00A0\u00A0\u00A0"))
- indent.classList.add("nbsp-indent")
- return indent
-}
+ if (document.readyState === 'loading') window.addEventListener('DOMContentLoaded', initHandlers);
+ else initHandlers();
-const resetAllSymbolParametersWrapping = () => {
- document.querySelectorAll("div.symbol").forEach(symbol => resetSymbolParametersWrapping(symbol))
-}
-
-const resetSymbolParametersWrapping = (symbol) => {
- let parameters = symbol.querySelector("span.parameters")
- if (parameters != null) {
- parameters.classList.remove("wrapped")
- parameters.querySelectorAll("span.parameter").forEach(param => {
- let indent = param.querySelector("span.nbsp-indent")
- if (indent != null) indent.remove()
- })
- }
-}
-
-if (document.readyState === 'loading') {
- window.addEventListener('DOMContentLoaded', () => {
- wrapAllSymbolParameters()
- })
-} else {
- wrapAllSymbolParameters()
-}
-
-window.onresize = event => {
- // need to re-calculate if params need to be wrapped after resize
- resetAllSymbolParametersWrapping()
- wrapAllSymbolParameters()
-}
+ // ToDo: Add `unobserve` if dokka will be SPA-like:
+ // https://github.com/w3c/csswg-drafts/issues/5155
+})();
diff --git a/docs/styles/font-jb-sans-auto.css b/docs/styles/font-jb-sans-auto.css
index 95d8ef8..bdc6872 100644
--- a/docs/styles/font-jb-sans-auto.css
+++ b/docs/styles/font-jb-sans-auto.css
@@ -1,3 +1,7 @@
+/*
+ * Copyright 2014-2023 JetBrains s.r.o. Use of this source code is governed by the Apache 2.0 license.
+ */
+
/* Light weight */
@font-face {
font-family: 'JetBrains Sans';
diff --git a/docs/styles/jetbrains-mono.css b/docs/styles/jetbrains-mono.css
deleted file mode 100644
index 9a0f06f..0000000
--- a/docs/styles/jetbrains-mono.css
+++ /dev/null
@@ -1,17 +0,0 @@
-@font-face{
- font-family: 'JetBrains Mono';
- src: url('https://raw.githubusercontent.com/JetBrains/JetBrainsMono/master/fonts/web/JetBrainsMono-Regular.eot') format('embedded-opentype'),
- url('https://raw.githubusercontent.com/JetBrains/JetBrainsMono/master/fonts/webfonts/JetBrainsMono-Regular.woff2') format('woff2'),
- url('https://raw.githubusercontent.com/JetBrains/JetBrainsMono/master/fonts/ttf/JetBrainsMono-Regular.ttf') format('truetype');
- font-weight: normal;
- font-style: normal;
-}
-
-@font-face{
- font-family: 'JetBrains Mono';
- src: url('https://raw.githubusercontent.com/JetBrains/JetBrainsMono/master/fonts/web/JetBrainsMono-Bold.eot') format('embedded-opentype'),
- url('https://raw.githubusercontent.com/JetBrains/JetBrainsMono/master/fonts/webfonts/JetBrainsMono-Bold.woff2') format('woff2'),
- url('https://raw.githubusercontent.com/JetBrains/JetBrainsMono/master/fonts/ttf/JetBrainsMono-Bold.ttf') format('truetype');
- font-weight: bold;
- font-style: bold;
-}
\ No newline at end of file
diff --git a/docs/styles/logo-styles.css b/docs/styles/logo-styles.css
index f3846e8..69804e4 100644
--- a/docs/styles/logo-styles.css
+++ b/docs/styles/logo-styles.css
@@ -1,3 +1,7 @@
+/*
+ * Copyright 2014-2023 JetBrains s.r.o. Use of this source code is governed by the Apache 2.0 license.
+ */
+
:root {
--dokka-logo-image-url: url('../images/logo-icon.svg');
--dokka-logo-height: 50px;
diff --git a/docs/styles/main.css b/docs/styles/main.css
index 5aa04a4..ebe1ce1 100644
--- a/docs/styles/main.css
+++ b/docs/styles/main.css
@@ -1,4 +1,6 @@
-#pages-search{cursor:pointer;border:none;border-radius:50%;background:transparent;fill:#fff;fill:var(--dark-mode-and-search-icon-color)}#pages-search:focus{outline:none}#pages-search:hover{background:var(--white-10)}.search,.search [data-test=ring-select],.search [data-test=ring-tooltip],.search [data-test=ring-select_focus],.search #pages-search{display:inline-block;padding:0;margin:0;font-size:0;line-height:0}.search-hotkey-popup{background-color:var(--background-color) !important;padding:4px}.popup-wrapper{min-width:calc(100% - 322px) !important;border:1px solid rgba(255,255,255,.2) !important;background-color:#27282c !important}.popup-wrapper [class^=filterWrapper]{border-bottom:1px solid rgba(255,255,255,.2)}.popup-wrapper input{color:rgba(255,255,255,.8) !important;font-weight:normal !important}.popup-wrapper span[data-test-custom=ring-select-popup-filter-icon]{color:#fff}.popup-wrapper button[data-test=ring-input-clear]{color:#fff !important}@media screen and (max-width: 759px){.popup-wrapper{min-width:100% !important}}.template-wrapper{display:grid;height:32px;grid-template-columns:auto auto}.template-wrapper strong{color:rgba(255,255,255,.8)}.template-wrapper span{color:rgba(255,255,255,.8);line-height:32px}.template-wrapper span.template-description{color:rgba(255,255,255,.6);justify-self:end}@media screen and (max-width: 759px){.template-wrapper{display:flex;flex-direction:column;height:auto}.template-wrapper span{line-height:unset}}.template-name{justify-self:start}[class^=fade]{display:none}[class*=hover]{background-color:rgba(255,255,255,.1) !important}
+/*!
+ * Copyright 2014-2023 JetBrains s.r.o. Use of this source code is governed by the Apache 2.0 license.
+ */#pages-search{cursor:pointer;border:none;border-radius:50%;background:transparent;fill:#fff;fill:var(--dark-mode-and-search-icon-color)}#pages-search:focus{outline:none}#pages-search:hover{background:var(--white-10)}.search,.search [data-test=ring-select],.search [data-test=ring-tooltip],.search [data-test=ring-select_focus],.search #pages-search{display:inline-block;padding:0;margin:0;font-size:0;line-height:0}.search-hotkey-popup{background-color:var(--background-color) !important;padding:4px}.popup-wrapper{min-width:calc(100% - 322px) !important;border:1px solid rgba(255,255,255,.2) !important;background-color:#27282c !important}.popup-wrapper [class^=filterWrapper]{border-bottom:1px solid rgba(255,255,255,.2)}.popup-wrapper input{color:rgba(255,255,255,.8) !important;font-weight:normal !important}.popup-wrapper span[data-test-custom=ring-select-popup-filter-icon]{color:#fff}.popup-wrapper button[data-test=ring-input-clear]{color:#fff !important}@media screen and (max-width: 759px){.popup-wrapper{min-width:100% !important}}.template-wrapper{display:grid;height:32px;grid-template-columns:auto auto}.template-wrapper strong{color:rgba(255,255,255,.8)}.template-wrapper span{color:rgba(255,255,255,.8);line-height:32px}.template-wrapper span.template-description{color:rgba(255,255,255,.6);justify-self:end}@media screen and (max-width: 759px){.template-wrapper{display:flex;flex-direction:column;height:auto}.template-wrapper span{line-height:unset}}.template-name{justify-self:start}[class^=fade]{display:none}[class*=hover]{background-color:rgba(255,255,255,.1) !important}
/* stylelint-disable color-no-hex */
:root {
@@ -113,6 +115,10 @@
--ring-alert-z-index: 6;
}
-html,.app-root{height:100%}.search-root{margin:0;padding:0;background:var(--ring-content-background-color);font-family:var(--ring-font-family);font-size:var(--ring-font-size);line-height:var(--ring-line-height)}.search-content{z-index:8}
+/*!
+ * Copyright 2014-2023 JetBrains s.r.o. Use of this source code is governed by the Apache 2.0 license.
+ *//*!
+ * Copyright 2014-2023 JetBrains s.r.o. Use of this source code is governed by the Apache 2.0 license.
+ */html,.app-root{height:100%}.search-root{margin:0;padding:0;background:var(--ring-content-background-color);font-family:var(--ring-font-family);font-size:var(--ring-font-size);line-height:var(--ring-line-height)}.search-content{z-index:8}
/*# sourceMappingURL=main.css.map*/
\ No newline at end of file
diff --git a/docs/styles/prism.css b/docs/styles/prism.css
index 4287f6d..2d3a091 100644
--- a/docs/styles/prism.css
+++ b/docs/styles/prism.css
@@ -1,3 +1,7 @@
+/*
+ * Copyright 2014-2023 JetBrains s.r.o. Use of this source code is governed by the Apache 2.0 license.
+ */
+
/*
* Custom Dokka styles
*/
diff --git a/docs/styles/style.css b/docs/styles/style.css
index 7f6e4b0..67a899a 100644
--- a/docs/styles/style.css
+++ b/docs/styles/style.css
@@ -1,3 +1,7 @@
+/*
+ * Copyright 2014-2023 JetBrains s.r.o. Use of this source code is governed by the Apache 2.0 license.
+ */
+
@import url('./font-jb-sans-auto.css');
@import url('https://fonts.googleapis.com/css?family=JetBrains+Mono');
@@ -1476,4 +1480,4 @@ has only one header, and the header text is the same as the tab name, so no poin
*/
.main-content[data-page-type="package"] .tabs-section-body h2 {
display: none;
-}
\ No newline at end of file
+}
diff --git a/examples/.idea/.name b/examples/.idea/.name
deleted file mode 100644
index bdb1d33..0000000
--- a/examples/.idea/.name
+++ /dev/null
@@ -1 +0,0 @@
-akismet-examples
\ No newline at end of file
diff --git a/examples/.idea/checkstyle-idea.xml b/examples/.idea/checkstyle-idea.xml
deleted file mode 100644
index ead1d8a..0000000
--- a/examples/.idea/checkstyle-idea.xml
+++ /dev/null
@@ -1,16 +0,0 @@
-
-
-
-
-
-
-
-
\ No newline at end of file
diff --git a/examples/.idea/encodings.xml b/examples/.idea/encodings.xml
deleted file mode 100644
index 97626ba..0000000
--- a/examples/.idea/encodings.xml
+++ /dev/null
@@ -1,6 +0,0 @@
-
-
-
-
-
-
\ No newline at end of file
diff --git a/examples/bld/.gitignore b/examples/bld/.gitignore
new file mode 100644
index 0000000..a2805aa
--- /dev/null
+++ b/examples/bld/.gitignore
@@ -0,0 +1,55 @@
+.gradle
+.DS_Store
+build
+lib/bld/**
+!lib/bld/bld-wrapper.jar
+!lib/bld/bld-wrapper.properties
+lib/compile/
+lib/runtime/
+lib/standalone/
+lib/test/
+
+# IDEA ignores
+
+# User-specific
+.idea/**/workspace.xml
+.idea/**/tasks.xml
+.idea/**/usage.statistics.xml
+.idea/**/dictionaries
+.idea/**/shelf
+
+# AWS User-specific
+.idea/**/aws.xml
+
+# Generated files
+.idea/**/contentModel.xml
+
+# Sensitive or high-churn files
+.idea/**/dataSources/
+.idea/**/dataSources.ids
+.idea/**/dataSources.local.xml
+.idea/**/sqlDataSources.xml
+.idea/**/dynamic.xml
+.idea/**/uiDesigner.xml
+.idea/**/dbnavigator.xml
+
+# Gradle
+.idea/**/gradle.xml
+
+# Mongo Explorer plugin
+.idea/**/mongoSettings.xml
+
+# mpeltonen/sbt-idea plugin
+.idea_modules/
+
+# JIRA plugin
+atlassian-ide-plugin.xml
+
+# Cursive Clojure plugin
+.idea/replstate.xml
+
+# SonarLint plugin
+.idea/sonarlint/
+
+# Editor-based Rest Client
+.idea/httpRequests
\ No newline at end of file
diff --git a/examples/bld/.idea/.gitignore b/examples/bld/.idea/.gitignore
new file mode 100644
index 0000000..26d3352
--- /dev/null
+++ b/examples/bld/.idea/.gitignore
@@ -0,0 +1,3 @@
+# Default ignored files
+/shelf/
+/workspace.xml
diff --git a/examples/bld/.idea/.name b/examples/bld/.idea/.name
new file mode 100644
index 0000000..2ee9f40
--- /dev/null
+++ b/examples/bld/.idea/.name
@@ -0,0 +1 @@
+akismet-kotlin-examples-bld
\ No newline at end of file
diff --git a/examples/bld/.idea/app.iml b/examples/bld/.idea/app.iml
new file mode 100644
index 0000000..2c1fe21
--- /dev/null
+++ b/examples/bld/.idea/app.iml
@@ -0,0 +1,30 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/examples/bld/.idea/bld.iml b/examples/bld/.idea/bld.iml
new file mode 100644
index 0000000..e63e11e
--- /dev/null
+++ b/examples/bld/.idea/bld.iml
@@ -0,0 +1,14 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/examples/bld/.idea/inspectionProfiles/Project_Default.xml b/examples/bld/.idea/inspectionProfiles/Project_Default.xml
new file mode 100644
index 0000000..1e01b48
--- /dev/null
+++ b/examples/bld/.idea/inspectionProfiles/Project_Default.xml
@@ -0,0 +1,8 @@
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/examples/bld/.idea/libraries/bld.xml b/examples/bld/.idea/libraries/bld.xml
new file mode 100644
index 0000000..ca84ff0
--- /dev/null
+++ b/examples/bld/.idea/libraries/bld.xml
@@ -0,0 +1,18 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/examples/bld/.idea/libraries/compile.xml b/examples/bld/.idea/libraries/compile.xml
new file mode 100644
index 0000000..9bd86aa
--- /dev/null
+++ b/examples/bld/.idea/libraries/compile.xml
@@ -0,0 +1,13 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/examples/bld/.idea/libraries/runtime.xml b/examples/bld/.idea/libraries/runtime.xml
new file mode 100644
index 0000000..2ae5c4b
--- /dev/null
+++ b/examples/bld/.idea/libraries/runtime.xml
@@ -0,0 +1,14 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/examples/bld/.idea/libraries/test.xml b/examples/bld/.idea/libraries/test.xml
new file mode 100644
index 0000000..b80486a
--- /dev/null
+++ b/examples/bld/.idea/libraries/test.xml
@@ -0,0 +1,14 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/examples/bld/.idea/misc.xml b/examples/bld/.idea/misc.xml
new file mode 100644
index 0000000..542659b
--- /dev/null
+++ b/examples/bld/.idea/misc.xml
@@ -0,0 +1,9 @@
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/examples/bld/.idea/modules.xml b/examples/bld/.idea/modules.xml
new file mode 100644
index 0000000..55adcb9
--- /dev/null
+++ b/examples/bld/.idea/modules.xml
@@ -0,0 +1,9 @@
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/examples/bld/.idea/runConfigurations/Run Tests.xml b/examples/bld/.idea/runConfigurations/Run Tests.xml
new file mode 100644
index 0000000..2b503e5
--- /dev/null
+++ b/examples/bld/.idea/runConfigurations/Run Tests.xml
@@ -0,0 +1,9 @@
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/examples/bld/.idea/vcs.xml b/examples/bld/.idea/vcs.xml
new file mode 100644
index 0000000..b2bdec2
--- /dev/null
+++ b/examples/bld/.idea/vcs.xml
@@ -0,0 +1,6 @@
+
+
+
+
+
+
\ No newline at end of file
diff --git a/examples/bld/.vscode/launch.json b/examples/bld/.vscode/launch.json
new file mode 100644
index 0000000..30a8889
--- /dev/null
+++ b/examples/bld/.vscode/launch.json
@@ -0,0 +1,11 @@
+{
+ "version": "0.2.0",
+ "configurations": [
+ {
+ "type": "java",
+ "name": "Run Tests",
+ "request": "launch",
+ "mainClass": "com.example.ExampleTest"
+ }
+ ]
+}
diff --git a/examples/bld/.vscode/settings.json b/examples/bld/.vscode/settings.json
new file mode 100644
index 0000000..133aa45
--- /dev/null
+++ b/examples/bld/.vscode/settings.json
@@ -0,0 +1,15 @@
+{
+ "java.project.sourcePaths": [
+ "src/main/java",
+ "src/main/resources",
+ "src/test/java",
+ "src/bld/java"
+ ],
+ "java.configuration.updateBuildConfiguration": "automatic",
+ "java.project.referencedLibraries": [
+ "${HOME}/.bld/dist/bld-1.7.5.jar",
+ "lib/compile/*.jar",
+ "lib/runtime/*.jar",
+ "lib/test/*.jar"
+ ]
+}
diff --git a/examples/bld/README.md b/examples/bld/README.md
new file mode 100644
index 0000000..4cec4ce
--- /dev/null
+++ b/examples/bld/README.md
@@ -0,0 +1,18 @@
+## Kotlin Example
+To compile & run the Kotlin example:
+
+```text
+./bld compile
+
+./bld run --args=API_KEY
+```
+
+## Java Example
+cd
+To compile & run the Java example:
+
+```text
+./bld compile
+
+./bld run-java --args=API_KEY
+```
diff --git a/examples/bld/bld b/examples/bld/bld
new file mode 100755
index 0000000..80d2986
--- /dev/null
+++ b/examples/bld/bld
@@ -0,0 +1,2 @@
+#!/usr/bin/env sh
+java -jar "$(dirname "$0")/lib/bld/bld-wrapper.jar" "$0" --build com.example.ExampleBuild "$@"
\ No newline at end of file
diff --git a/examples/bld/bld.bat b/examples/bld/bld.bat
new file mode 100644
index 0000000..084bb72
--- /dev/null
+++ b/examples/bld/bld.bat
@@ -0,0 +1,4 @@
+@echo off
+set DIRNAME=%~dp0
+if "%DIRNAME%" == "" set DIRNAME=.
+java -jar "%DIRNAME%/lib/bld/bld-wrapper.jar" "%0" --build com.example.ExampleBuild %*
\ No newline at end of file
diff --git a/examples/bld/lib/bld/bld-wrapper.jar b/examples/bld/lib/bld/bld-wrapper.jar
new file mode 100644
index 0000000..b185103
Binary files /dev/null and b/examples/bld/lib/bld/bld-wrapper.jar differ
diff --git a/examples/bld/lib/bld/bld-wrapper.properties b/examples/bld/lib/bld/bld-wrapper.properties
new file mode 100644
index 0000000..095b48c
--- /dev/null
+++ b/examples/bld/lib/bld/bld-wrapper.properties
@@ -0,0 +1,7 @@
+bld.downloadExtensionJavadoc=false
+bld.downloadExtensionSources=true
+bld.extensions=com.uwyn.rife2:bld-kotlin:0.9.0-SNAPSHOT
+bld.repositories=MAVEN_LOCAL,MAVEN_CENTRAL,RIFE2_SNAPSHOTS,RIFE2_RELEASES
+bld.downloadLocation=
+bld.sourceDirectories=
+bld.version=1.7.5
diff --git a/examples/bld/src/bld/java/com/example/ExampleBuild.java b/examples/bld/src/bld/java/com/example/ExampleBuild.java
new file mode 100644
index 0000000..33f0638
--- /dev/null
+++ b/examples/bld/src/bld/java/com/example/ExampleBuild.java
@@ -0,0 +1,58 @@
+package com.example;
+
+import rife.bld.BaseProject;
+import rife.bld.BuildCommand;
+import rife.bld.extension.CompileKotlinOperation;
+import rife.bld.extension.CompileKotlinOptions;
+import rife.bld.operations.RunOperation;
+
+import java.util.List;
+
+import static rife.bld.dependencies.Repository.*;
+import static rife.bld.dependencies.Scope.compile;
+
+public class ExampleBuild extends BaseProject {
+ public ExampleBuild() {
+ pkg = "com.example";
+ name = "Example";
+ version = version(0, 1, 0);
+
+ mainClass = "com.example.AkismetExampleKt";
+
+ javaRelease = 11;
+ downloadSources = true;
+ autoDownloadPurge = true;
+ repositories = List.of(MAVEN_LOCAL, MAVEN_CENTRAL, SONATYPE_SNAPSHOTS_LEGACY);
+
+ scope(compile)
+ .include(dependency("net.thauvin.erik:akismet-kotlin:1.0.0"))
+ .include(dependency("jakarta.servlet:jakarta.servlet-api:6.0.0"));
+ }
+
+ public static void main(String[] args) {
+ new ExampleBuild().start(args);
+ }
+
+ @Override
+ public void compile() throws Exception {
+ new CompileKotlinOperation()
+ .fromProject(this)
+ .compileOptions(
+ new CompileKotlinOptions()
+ .jdkRelease(javaRelease)
+ .verbose(true)
+ )
+ .execute();
+
+ // Also compile the Java source code
+ super.compile();
+ }
+
+ @BuildCommand(value = "run-java", summary = "Runs the Java example")
+ public void runJava() throws Exception {
+ new RunOperation()
+ .fromProject(this)
+ .mainClass("com.example.AkismetSample")
+ .execute();
+ }
+}
diff --git a/examples/src/main/java/com/example/AkismetSample.java b/examples/bld/src/main/java/com/example/AkismetSample.java
similarity index 100%
rename from examples/src/main/java/com/example/AkismetSample.java
rename to examples/bld/src/main/java/com/example/AkismetSample.java
diff --git a/examples/src/main/kotlin/com/example/AkismetExample.kt b/examples/bld/src/main/kotlin/com/example/AkismetExample.kt
similarity index 100%
rename from examples/src/main/kotlin/com/example/AkismetExample.kt
rename to examples/bld/src/main/kotlin/com/example/AkismetExample.kt
diff --git a/examples/src/main/kotlin/com/example/AkismetServlet.kt b/examples/bld/src/main/kotlin/com/example/AkismetServlet.kt
similarity index 100%
rename from examples/src/main/kotlin/com/example/AkismetServlet.kt
rename to examples/bld/src/main/kotlin/com/example/AkismetServlet.kt
diff --git a/examples/.editorconfig b/examples/gradle/.editorconfig
similarity index 100%
rename from examples/.editorconfig
rename to examples/gradle/.editorconfig
diff --git a/examples/.gitattributes b/examples/gradle/.gitattributes
similarity index 100%
rename from examples/.gitattributes
rename to examples/gradle/.gitattributes
diff --git a/examples/.gitignore b/examples/gradle/.gitignore
similarity index 100%
rename from examples/.gitignore
rename to examples/gradle/.gitignore
diff --git a/examples/gradle/.idea/.gitignore b/examples/gradle/.idea/.gitignore
new file mode 100644
index 0000000..26d3352
--- /dev/null
+++ b/examples/gradle/.idea/.gitignore
@@ -0,0 +1,3 @@
+# Default ignored files
+/shelf/
+/workspace.xml
diff --git a/examples/gradle/.idea/.name b/examples/gradle/.idea/.name
new file mode 100644
index 0000000..ac5e64e
--- /dev/null
+++ b/examples/gradle/.idea/.name
@@ -0,0 +1 @@
+akismet-examples-gradle
\ No newline at end of file
diff --git a/.idea/checkstyle-idea.xml b/examples/gradle/.idea/checkstyle-idea.xml
similarity index 100%
rename from .idea/checkstyle-idea.xml
rename to examples/gradle/.idea/checkstyle-idea.xml
diff --git a/examples/.idea/codeStyles/codeStyleConfig.xml b/examples/gradle/.idea/codeStyles/codeStyleConfig.xml
similarity index 100%
rename from examples/.idea/codeStyles/codeStyleConfig.xml
rename to examples/gradle/.idea/codeStyles/codeStyleConfig.xml
diff --git a/examples/.idea/compiler.xml b/examples/gradle/.idea/compiler.xml
similarity index 87%
rename from examples/.idea/compiler.xml
rename to examples/gradle/.idea/compiler.xml
index 907f7b6..61ad941 100644
--- a/examples/.idea/compiler.xml
+++ b/examples/gradle/.idea/compiler.xml
@@ -1,7 +1,7 @@
-
+
diff --git a/.idea/encodings.xml b/examples/gradle/.idea/encodings.xml
similarity index 100%
rename from .idea/encodings.xml
rename to examples/gradle/.idea/encodings.xml
diff --git a/examples/gradle/.idea/gradle.xml b/examples/gradle/.idea/gradle.xml
new file mode 100644
index 0000000..7d3b3e8
--- /dev/null
+++ b/examples/gradle/.idea/gradle.xml
@@ -0,0 +1,17 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/examples/.idea/inspectionProfiles/Project_Default.xml b/examples/gradle/.idea/inspectionProfiles/Project_Default.xml
similarity index 100%
rename from examples/.idea/inspectionProfiles/Project_Default.xml
rename to examples/gradle/.idea/inspectionProfiles/Project_Default.xml
diff --git a/examples/gradle/.idea/jarRepositories.xml b/examples/gradle/.idea/jarRepositories.xml
new file mode 100644
index 0000000..a529ef2
--- /dev/null
+++ b/examples/gradle/.idea/jarRepositories.xml
@@ -0,0 +1,25 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/examples/gradle/.idea/kotlinc.xml b/examples/gradle/.idea/kotlinc.xml
new file mode 100644
index 0000000..e805548
--- /dev/null
+++ b/examples/gradle/.idea/kotlinc.xml
@@ -0,0 +1,6 @@
+
+
+
+
+
+
\ No newline at end of file
diff --git a/examples/.idea/misc.xml b/examples/gradle/.idea/misc.xml
similarity index 75%
rename from examples/.idea/misc.xml
rename to examples/gradle/.idea/misc.xml
index f09e92a..7940811 100644
--- a/examples/.idea/misc.xml
+++ b/examples/gradle/.idea/misc.xml
@@ -6,7 +6,10 @@
-
+
+