harbour-nextcloudnotes/qml/pages/EditPage.qml

183 lines
7.1 KiB
QML
Raw Normal View History

2018-10-21 02:44:23 +03:00
import QtQuick 2.0
import Sailfish.Silica 1.0
2018-11-28 16:05:36 +03:00
import Nemo.Notifications 1.0
2018-10-21 02:44:23 +03:00
2018-11-18 13:25:28 +03:00
Dialog {
id: editDialog
2018-10-21 02:44:23 +03:00
property int id
property int modified
property string title
property string category
property string content
property bool favorite
property string etag
property bool error
property string errorMessage
property string date
2018-12-04 01:08:41 +03:00
2018-11-18 13:25:28 +03:00
onAccepted: {
2018-12-07 02:30:18 +03:00
api.updateNote(note.id, { 'category': categoryField.text, 'content': contentArea.text, 'favorite': favoriteButton.selected } )
2018-11-18 13:25:28 +03:00
}
function reloadContent() {
2019-02-24 18:40:47 +03:00
api.getNoteFromApi(note.id)
/*note = api.getNote(note.id)
dialogHeader.title = note.title
contentArea.text = note.content
favoriteButton.selected = note.favorite
categoryField.text = note.category
2019-02-24 18:40:47 +03:00
modifiedDetail.modified = note.modified*/
2018-12-04 01:08:41 +03:00
}
2018-10-21 02:44:23 +03:00
SilicaFlickable {
anchors.fill: parent
2018-12-13 01:10:45 +03:00
contentHeight: mainColumn.height + Theme.paddingLarge
2018-10-21 02:44:23 +03:00
2018-10-23 23:15:59 +03:00
PullDownMenu {
2018-11-18 15:11:22 +03:00
MenuItem {
text: qsTr("Reset")
onClicked: reloadContent()
2018-10-23 23:15:59 +03:00
}
2018-11-28 16:05:36 +03:00
MenuItem {
text: qsTr("Markdown syntax")
2018-12-13 01:10:45 +03:00
onClicked: pageStack.push(Qt.resolvedUrl("SyntaxPage.qml"))
2018-11-28 16:05:36 +03:00
}
2018-10-23 23:15:59 +03:00
}
2018-10-21 02:44:23 +03:00
Column {
2018-12-07 02:30:18 +03:00
id: mainColumn
width: parent.width
2018-10-21 02:44:23 +03:00
2018-11-18 13:25:28 +03:00
DialogHeader {
id: dialogHeader
//title: note.title
2018-10-21 02:44:23 +03:00
}
2018-12-07 02:30:18 +03:00
Column {
2018-10-21 02:44:23 +03:00
width: parent.width
2018-12-07 02:30:18 +03:00
spacing: Theme.paddingLarge
Separator {
width: parent.width
color: Theme.primaryColor
horizontalAlignment: Qt.AlignHCenter
}
TextArea {
id: contentArea
width: parent.width
//text: note.content
placeholderText: qsTr("No content")
2018-12-11 19:44:00 +03:00
font.family: appSettings.useMonoFont ? "DejaVu Sans Mono" : Theme.fontFamily
2018-12-07 02:30:18 +03:00
property int preTextLength: 0
property var listPrefixes: [/^( *)- /gm, /^( *)\* /gm, /^( *)\+ /gm, /^( *)- \[ \] /gm, /^( *)- \[[xX]\] /gm, /^( *)> /gm, /^( *)\d+. /gm]
onTextChanged: {
if (editDialog.status === PageStatus.Active &&
2018-12-07 02:30:18 +03:00
text.length > preTextLength &&
text.charAt(cursorPosition-1) === "\n") {
var clipboard = ""
var preLine = text.substring(text.lastIndexOf("\n", cursorPosition-2), text.indexOf("\n", cursorPosition-1))
listPrefixes.forEach(function(currentValue, index) {
var prefix = preLine.match(currentValue)
if (prefix !== null) {
if (index === listPrefixes.length-1) {
var newListNumber = parseInt(prefix[0].split(". ")[0]) + 1
clipboard = prefix[0].replace(/\d/gm, newListNumber.toString())
}
else {
clipboard = prefix[0]
}
2018-12-04 17:49:29 +03:00
}
2018-12-07 02:30:18 +03:00
})
if (clipboard !== "") {
var tmpClipboard = Clipboard.text
Clipboard.text = clipboard
contentArea.paste()
Clipboard.text = tmpClipboard
2018-12-04 17:49:29 +03:00
}
}
2018-12-07 02:30:18 +03:00
preTextLength = text.length
}
}
2018-11-18 13:25:28 +03:00
}
Flow {
x: Theme.horizontalPageMargin
width: parent.width - 2*x
spacing: Theme.paddingMedium
2018-12-06 18:01:43 +03:00
visible: opacity > 0.0
opacity: categoryField.focus ? 1.0 : 0.0
Behavior on opacity { FadeAnimator { } }
Repeater {
id: categoryRepeater
2018-12-07 02:30:18 +03:00
model: api.categories
BackgroundItem {
id: categoryBackground
width: categoryRectangle.width
height: categoryRectangle.height
Rectangle {
id: categoryRectangle
width: categoryLabel.width + Theme.paddingLarge
height: categoryLabel.height + Theme.paddingSmall
color: "transparent"
border.color: Theme.highlightColor
radius: height / 4
Label {
id: categoryLabel
anchors.centerIn: parent
text: modelData
color: categoryBackground.highlighted ? Theme.highlightColor : Theme.primaryColor
font.pixelSize: Theme.fontSizeSmall
}
}
onClicked: categoryField.text = modelData
}
}
}
2018-11-18 13:25:28 +03:00
Row {
x: Theme.horizontalPageMargin
width: parent.width - x
IconButton {
id: favoriteButton
property bool selected//: note.favorite
2018-11-18 13:25:28 +03:00
width: Theme.iconSizeMedium
2018-11-18 15:11:22 +03:00
icon.source: (selected ? "image://theme/icon-m-favorite-selected?" : "image://theme/icon-m-favorite?") +
2018-11-18 13:25:28 +03:00
(favoriteButton.highlighted ? Theme.secondaryHighlightColor : Theme.secondaryColor)
2018-12-07 02:30:18 +03:00
onClicked: {
api.updateNote(note.id, {'favorite': !note.favorite})
}
2018-11-18 13:25:28 +03:00
}
TextField {
id: categoryField
width: parent.width - favoriteButton.width
//text: note.category
placeholderText: qsTr("No category")
label: qsTr("Category")
2018-12-07 02:30:18 +03:00
EnterKey.iconSource: "image://theme/icon-m-enter-accept"
EnterKey.onClicked: {
categoryField.focus = false
}
onFocusChanged: {
if (focus === false && text !== note.category) {
api.updateNote(note.id, {'content': note.content, 'category': text}) // This does not seem to work without adding the content
}
}
2018-11-18 13:25:28 +03:00
}
2018-10-21 02:44:23 +03:00
}
2018-12-07 02:30:18 +03:00
DetailItem {
id: modifiedDetail
label: qsTr("Modified")
property int modified//: note.modified
value: new Date(modified * 1000).toLocaleString(Qt.locale(), Locale.ShortFormat)
2018-12-07 02:30:18 +03:00
}
2018-10-21 02:44:23 +03:00
}
VerticalScrollDecorator {}
}
2018-12-04 19:24:45 +03:00
allowedOrientations: defaultAllowedOrientations
2018-10-21 02:44:23 +03:00
}