Commit 3ce0f2f2 authored by Ronan Abhamon's avatar Ronan Abhamon

feat(Utils/uri-tools): replace and escape html caracters like `<`

parent 9991bf23
...@@ -162,10 +162,10 @@ ColumnLayout { ...@@ -162,10 +162,10 @@ ColumnLayout {
// TMP // TMP
model: ListModel { model: ListModel {
ListElement { $dateSection: 1465389121000; $outgoing: true; $timestamp: 1465389121000; $type: 'message'; $content: "<a href='http://google.fr'>click here</a>" } ListElement { $dateSection: 1465389121000; $outgoing: true; $timestamp: 1465389121000; $type: 'message'; $content: "<img src='http://html.com/wp-content/uploads/html-com-1.png' width='50%' height='50%' />www.google.fr" }
ListElement { $dateSection: 1465389121000; $outgoing: true; $timestamp: 1465389121000; $type: 'message'; $content: "<a href='mailto:qq1@qqpart.com'>Contact mail</a>" } ListElement { $dateSection: 1465389121000; $outgoing: true; $timestamp: 1465389121000; $type: 'message'; $content: "<a href='mailto:qq1@qqpart.com'>Contact mail</a>" }
ListElement { $dateSection: 1465389121000; $timestamp: 1465389133000; $type: 'event'; $content: 'incoming_call' } ListElement { $dateSection: 1465389121000; $timestamp: 1465389133000; $type: 'event'; $content: 'incoming_call' }
ListElement { $dateSection: 1465389121000; $timestamp: 1465389439000; $type: 'message'; $content: 'Perfect! bg g vg gv v g v hgv gv gv jhb jh b jb jh hg vg cfcy f v u uyg f tf tf ft f tf t t fy ft f tu ty f rd rd d d uu gu y gg y f r dr ' } ListElement { $dateSection: 1465389121000; $timestamp: 1465389439000; $type: 'message'; $content: '<blink>Perfect!</blink> bg g vg gv v g v hgv gv gv jhb jh b jb jh hg vg cfcy f v u uyg f tf tf ft f tf t t fy ft f tu ty f rd rd d d uu gu y gg y f r dr ' }
ListElement { $dateSection: 1465389121000; $timestamp: 1465389500000; $type: 'event'; $content: 'end_call' } ListElement { $dateSection: 1465389121000; $timestamp: 1465389500000; $type: 'event'; $content: 'end_call' }
ListElement { $dateSection: 1465994221000; $outgoing: true; $timestamp: 1465924321000; $type: 'message'; $content: 'You\'ve heard the expression, "Just believe it and it will come." Well, technically, that is true, however, \'believing\' is not just thinking that you can have it...' } ListElement { $dateSection: 1465994221000; $outgoing: true; $timestamp: 1465924321000; $type: 'message'; $content: 'You\'ve heard the expression, "Just believe it and it will come." Well, technically, that is true, however, \'believing\' is not just thinking that you can have it...' }
ListElement { $dateSection: 1465994221000; $timestamp: 1465924391000; $type: 'event'; $content: 'lost_incoming_call' } ListElement { $dateSection: 1465994221000; $timestamp: 1465924391000; $type: 'event'; $content: 'lost_incoming_call' }
......
import QtQuick 2.7 import QtQuick 2.7
import Linphone.Styles 1.0 import Linphone.Styles 1.0
import Utils 1.0
// =================================================================== // ===================================================================
...@@ -36,12 +37,16 @@ Item { ...@@ -36,12 +37,16 @@ Item {
right: container.right right: container.right
} }
padding: ChatStyle.entry.message.padding padding: ChatStyle.entry.message.padding
text: $content text: Utils.encodeUrisToQmlFormat($content)
wrapMode: Text.Wrap wrapMode: Text.Wrap
// Little fix. Text may disappear with scrolling. // Little fix. Text may disappear with scrolling.
renderType: Text.NativeRendering renderType: Text.NativeRendering
// See http://doc.qt.io/qt-5/qml-qtquick-text.html#textFormat-prop
// and http://doc.qt.io/qt-5/richtext-html-subset.html
textFormat: Text.StyledText
onLinkActivated: Qt.openUrlExternally(link) onLinkActivated: Qt.openUrlExternally(link)
MouseArea { MouseArea {
......
...@@ -2,6 +2,8 @@ ...@@ -2,6 +2,8 @@
// Library to deal with URI. // Library to deal with URI.
// =================================================================== // ===================================================================
.pragma library
// Level 0. ---------------------------------------------------------- // Level 0. ----------------------------------------------------------
var URI_PCT_ENCODED = '%[A-Fa-f\\d]{2}' var URI_PCT_ENCODED = '%[A-Fa-f\\d]{2}'
...@@ -84,12 +86,6 @@ var URI_REGEX = new RegExp(URI, 'g') ...@@ -84,12 +86,6 @@ var URI_REGEX = new RegExp(URI, 'g')
// =================================================================== // ===================================================================
function test () {
console.log('TOTO', URI_REGEX)
console.log('fe ef ef ef feff eff e fefefefe http://99w-w*w.test.com efeffe effe f ffe eef'.match(URI_REGEX))
}
test()
/* TODO: Supports: /* TODO: Supports:
URI-reference = URI / relative-ref URI-reference = URI / relative-ref
......
...@@ -2,6 +2,8 @@ ...@@ -2,6 +2,8 @@
// Contains many common helpers. // Contains many common helpers.
// =================================================================== // ===================================================================
.import 'uri-tools.js' as UriTools
// Load by default a window in the ui/views folder. // Load by default a window in the ui/views folder.
// If options.isString is equals to true, a marshalling component can // If options.isString is equals to true, a marshalling component can
// be used. // be used.
...@@ -240,3 +242,14 @@ function genRandomNumberBetweenIntervals (intervals) { ...@@ -240,3 +242,14 @@ function genRandomNumberBetweenIntervals (intervals) {
return n return n
} }
// -------------------------------------------------------------------
function encodeUrisToQmlFormat (text) {
return text
.replace(/</g, '&lt;')
.replace(/>/g, '&gt;')
.replace(UriTools.URI_REGEX, function (match) {
return '<a href="' + match + '">' + match + '</a>'
})
}
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment