mirror of
https://github.com/florisboard/florisboard.git
synced 2024-09-20 03:52:18 +02:00
Restrict variable name input validation and fix behavior bugs
This commit is contained in:
parent
0dc0f53a91
commit
ea159527f3
@ -28,6 +28,8 @@ import androidx.compose.foundation.layout.padding
|
||||
import androidx.compose.foundation.layout.requiredSize
|
||||
import androidx.compose.foundation.shape.CutCornerShape
|
||||
import androidx.compose.foundation.shape.RoundedCornerShape
|
||||
import androidx.compose.foundation.text.KeyboardActions
|
||||
import androidx.compose.foundation.text.KeyboardOptions
|
||||
import androidx.compose.material.ButtonDefaults
|
||||
import androidx.compose.material.MaterialTheme
|
||||
import androidx.compose.material.Text
|
||||
@ -40,8 +42,10 @@ import androidx.compose.runtime.saveable.rememberSaveable
|
||||
import androidx.compose.runtime.setValue
|
||||
import androidx.compose.ui.Alignment
|
||||
import androidx.compose.ui.Modifier
|
||||
import androidx.compose.ui.platform.LocalFocusManager
|
||||
import androidx.compose.ui.res.painterResource
|
||||
import androidx.compose.ui.text.font.FontFamily
|
||||
import androidx.compose.ui.text.input.ImeAction
|
||||
import androidx.compose.ui.unit.Dp
|
||||
import androidx.compose.ui.unit.TextUnit
|
||||
import androidx.compose.ui.unit.dp
|
||||
@ -145,7 +149,7 @@ internal fun EditPropertyDialog(
|
||||
}
|
||||
|
||||
fun isPropertyNameValid(): Boolean {
|
||||
return propertyName.isNotBlank() && propertyName != SnyggEmptyPropertyInfoForAdding.name
|
||||
return propertyNameValidation.isValid() && propertyName != SnyggEmptyPropertyInfoForAdding.name
|
||||
}
|
||||
|
||||
fun isPropertyValueValid(): Boolean {
|
||||
@ -270,10 +274,14 @@ private fun PropertyNameInput(
|
||||
onDismissRequest = { propertiesExpanded = false },
|
||||
)
|
||||
} else {
|
||||
val focusManager = LocalFocusManager.current
|
||||
FlorisOutlinedTextField(
|
||||
value = name,
|
||||
onValueChange = onNameChange,
|
||||
enabled = isAddPropertyDialog,
|
||||
keyboardOptions = KeyboardOptions(imeAction = ImeAction.Done),
|
||||
keyboardActions = KeyboardActions(onDone = { focusManager.clearFocus() }),
|
||||
singleLine = true,
|
||||
showValidationHint = isAddPropertyDialog,
|
||||
showValidationError = showSelectAsError,
|
||||
validationResult = nameValidation,
|
||||
|
@ -31,6 +31,7 @@ object ExtensionValidation {
|
||||
private val MetaIdRegex = """^[a-z][a-z0-9_]*(\.[a-z0-9][a-z0-9_]*)*${'$'}""".toRegex()
|
||||
private val ComponentIdRegex = """^[a-z][a-z0-9_]*${'$'}""".toRegex()
|
||||
private val ThemeComponentStylesheetPathRegex = """^[^:*<>"']*${'$'}""".toRegex()
|
||||
val ThemeComponentVariableNameRegex = """^[a-zA-Z0-9-_]+${'$'}""".toRegex()
|
||||
|
||||
val MetaId = ValidationRule<String> {
|
||||
forKlass = ExtensionMeta::class
|
||||
@ -143,10 +144,14 @@ object ExtensionValidation {
|
||||
val ThemeComponentVariableName = ValidationRule<String> {
|
||||
forKlass = SnyggStylesheet::class
|
||||
forProperty = "propertyName"
|
||||
validator { str ->
|
||||
validator { input ->
|
||||
val str = input.trim()
|
||||
when {
|
||||
str.isBlank() -> resultInvalid(error = "Please enter a variable name")
|
||||
str == "-" || str.startsWith("--") -> resultValid()
|
||||
!ThemeComponentVariableNameRegex.matches(str) -> {
|
||||
resultInvalid(error = "Please enter a valid variable name matching $ThemeComponentVariableNameRegex")
|
||||
}
|
||||
else -> resultValid(hint = "By convention a FlorisCSS variable name starts with two dashes (--)")
|
||||
}
|
||||
}
|
||||
|
@ -16,15 +16,16 @@
|
||||
|
||||
package dev.patrickgold.florisboard.snygg.value
|
||||
|
||||
import dev.patrickgold.florisboard.res.ext.ExtensionValidation
|
||||
|
||||
private const val VarKey = "varKey"
|
||||
private val VarRegex = """^[a-zA-Z0-9-_]+${'$'}""".toRegex()
|
||||
|
||||
sealed interface SnyggVarValue : SnyggValue
|
||||
|
||||
data class SnyggDefinedVarValue(val key: String) : SnyggVarValue {
|
||||
companion object : SnyggValueEncoder {
|
||||
override val spec = SnyggValueSpec {
|
||||
function(name = "var") { string(id = VarKey, regex = VarRegex) }
|
||||
function(name = "var") { string(id = VarKey, regex = ExtensionValidation.ThemeComponentVariableNameRegex) }
|
||||
}
|
||||
|
||||
override fun defaultValue() = SnyggDefinedVarValue("")
|
||||
|
Loading…
Reference in New Issue
Block a user