mirror of
https://github.com/InsanusMokrassar/MicroUtils.git
synced 2024-11-22 16:23:50 +00:00
add extensions in JS
This commit is contained in:
parent
e83e0a8535
commit
837cac644d
@ -10,6 +10,12 @@
|
|||||||
* `Okio`: `3.9.0` -> `3.9.1`
|
* `Okio`: `3.9.0` -> `3.9.1`
|
||||||
* `AndroidFragment`: `1.8.2` -> `1.8.3`
|
* `AndroidFragment`: `1.8.2` -> `1.8.3`
|
||||||
* `androidx.compose.material3:material3` has been replaced with `org.jetbrains.compose.material3:material3`
|
* `androidx.compose.material3:material3` has been replaced with `org.jetbrains.compose.material3:material3`
|
||||||
|
* `Common`:
|
||||||
|
* `JS`:
|
||||||
|
* Add several useful extensions
|
||||||
|
* `Compose`:
|
||||||
|
* `JS`:
|
||||||
|
* Add several useful extensions
|
||||||
|
|
||||||
## 0.22.2
|
## 0.22.2
|
||||||
|
|
||||||
|
@ -0,0 +1,19 @@
|
|||||||
|
package dev.inmo.micro_utils.common.compose
|
||||||
|
|
||||||
|
import org.jetbrains.compose.web.dom.AttrBuilderContext
|
||||||
|
import org.w3c.dom.Element
|
||||||
|
|
||||||
|
operator fun <T : Element> AttrBuilderContext<T>?.plus(
|
||||||
|
other: AttrBuilderContext<T>?
|
||||||
|
) = when (this) {
|
||||||
|
null -> other ?: {}
|
||||||
|
else -> when (other) {
|
||||||
|
null -> this ?: {}
|
||||||
|
else -> {
|
||||||
|
{
|
||||||
|
invoke(this)
|
||||||
|
other(this)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
@ -0,0 +1,22 @@
|
|||||||
|
package dev.inmo.micro_utils.common.compose
|
||||||
|
|
||||||
|
import androidx.compose.runtime.Composable
|
||||||
|
import androidx.compose.runtime.DisposableEffect
|
||||||
|
import androidx.compose.runtime.DisposableEffectResult
|
||||||
|
import androidx.compose.runtime.DisposableEffectScope
|
||||||
|
import org.jetbrains.compose.web.attributes.AttrsScope
|
||||||
|
import org.jetbrains.compose.web.dom.ElementScope
|
||||||
|
import org.w3c.dom.Element
|
||||||
|
|
||||||
|
/**
|
||||||
|
* This function must be called in the context of your tag content. It works like default [AttrsScope.ref],
|
||||||
|
* but able to be used several times. Uses [DisposableEffect] under the hood
|
||||||
|
*/
|
||||||
|
@Composable
|
||||||
|
fun <T : Element> ElementScope<T>.ref(
|
||||||
|
block: DisposableEffectScope.(T) -> DisposableEffectResult
|
||||||
|
) {
|
||||||
|
DisposableEffect(0) {
|
||||||
|
block(scopeElement)
|
||||||
|
}
|
||||||
|
}
|
@ -0,0 +1,11 @@
|
|||||||
|
package dev.inmo.micro_utils.common.compose
|
||||||
|
|
||||||
|
import org.jetbrains.compose.web.dom.AttrBuilderContext
|
||||||
|
|
||||||
|
fun tagClasses(vararg classnames: String): AttrBuilderContext<*> = {
|
||||||
|
classes(*classnames)
|
||||||
|
}
|
||||||
|
|
||||||
|
fun tagId(id: String): AttrBuilderContext<*> = {
|
||||||
|
id(id)
|
||||||
|
}
|
@ -0,0 +1,13 @@
|
|||||||
|
package dev.inmo.micro_utils.common
|
||||||
|
|
||||||
|
import kotlinx.browser.window
|
||||||
|
|
||||||
|
fun copyToClipboard(text: String): Boolean {
|
||||||
|
return runCatching {
|
||||||
|
window.navigator.clipboard.writeText(
|
||||||
|
text
|
||||||
|
)
|
||||||
|
}.onFailure {
|
||||||
|
it.printStackTrace()
|
||||||
|
}.isSuccess
|
||||||
|
}
|
@ -0,0 +1,29 @@
|
|||||||
|
package dev.inmo.micro_utils.common
|
||||||
|
|
||||||
|
import kotlinx.browser.window
|
||||||
|
import org.w3c.files.Blob
|
||||||
|
import org.w3c.files.BlobPropertyBag
|
||||||
|
import kotlin.js.json
|
||||||
|
|
||||||
|
external class ClipboardItem(data: dynamic)
|
||||||
|
|
||||||
|
inline fun Blob.convertToClipboardItem(): ClipboardItem {
|
||||||
|
val itemData: dynamic = json(this.type to this)
|
||||||
|
return ClipboardItem(itemData)
|
||||||
|
}
|
||||||
|
|
||||||
|
suspend fun copyImageURLToClipboard(imageUrl: String): Boolean {
|
||||||
|
return runCatching {
|
||||||
|
val response = window.fetch(imageUrl).await()
|
||||||
|
val blob = response.blob().await()
|
||||||
|
val data = arrayOf(
|
||||||
|
Blob(
|
||||||
|
arrayOf(blob),
|
||||||
|
BlobPropertyBag("image/png")
|
||||||
|
).convertToClipboardItem()
|
||||||
|
).asDynamic()
|
||||||
|
window.navigator.clipboard.write(data)
|
||||||
|
}.onFailure {
|
||||||
|
it.printStackTrace()
|
||||||
|
}.isSuccess
|
||||||
|
}
|
Loading…
Reference in New Issue
Block a user