Skip to content

Commit 41bf0b2

Browse files
authored
Merge pull request #708 from wordpress-mobile/issue/460-schemeless-urls
Proper handling of email, schemeless URLs
2 parents af5fa2b + 19c40b3 commit 41bf0b2

File tree

1 file changed

+16
-1
lines changed

1 file changed

+16
-1
lines changed

aztec/src/main/kotlin/org/wordpress/aztec/AztecText.kt

Lines changed: 16 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -196,6 +196,10 @@ open class AztecText : AppCompatEditText, TextWatcher, UnknownHtmlSpan.OnUnknown
196196
}
197197
}
198198

199+
private val REGEXP_EMAIL = Regex("^[A-Z0-9._%+-]+@[A-Z0-9.-]+.[A-Z]{2,}$",
200+
setOf(RegexOption.DOT_MATCHES_ALL, RegexOption.IGNORE_CASE))
201+
private val REGEXP_STANDALONE_URL = Regex("^(?:[a-z]+:|#|\\?|\\.|/)", RegexOption.DOT_MATCHES_ALL)
202+
199203
enum class EditorHasChanges {
200204
CHANGES, NO_CHANGES, UNKNOWN
201205
}
@@ -1426,6 +1430,17 @@ open class AztecText : AppCompatEditText, TextWatcher, UnknownHtmlSpan.OnUnknown
14261430
onSelectionChanged(urlSpanBounds.first, urlSpanBounds.second)
14271431
}
14281432

1433+
private fun correctUrl(inputUrl: String): String {
1434+
val url = inputUrl.trim()
1435+
if (REGEXP_EMAIL.matches(url)) {
1436+
return "mailto:$url"
1437+
}
1438+
if (!REGEXP_STANDALONE_URL.containsMatchIn(url)) {
1439+
return "http://$url"
1440+
}
1441+
return url
1442+
}
1443+
14291444
@SuppressLint("InflateParams")
14301445
fun showLinkDialog(presetUrl: String = "", presetAnchor: String = "") {
14311446
val urlAndAnchor = linkFormatter.getSelectedUrlWithAnchor()
@@ -1447,7 +1462,7 @@ open class AztecText : AppCompatEditText, TextWatcher, UnknownHtmlSpan.OnUnknown
14471462
builder.setTitle(R.string.link_dialog_title)
14481463

14491464
builder.setPositiveButton(R.string.link_dialog_button_ok, { _, _ ->
1450-
val linkText = urlInput.text.toString().trim { it <= ' ' }
1465+
val linkText = TextUtils.htmlEncode(correctUrl(urlInput.text.toString().trim { it <= ' ' }))
14511466
val anchorText = anchorInput.text.toString().trim { it <= ' ' }
14521467

14531468
link(linkText, anchorText)

0 commit comments

Comments
 (0)