318 lines
10 KiB
QML
318 lines
10 KiB
QML
|
import org.kde.falkon 1.0 as Falkon
|
||
|
import QtQuick.Controls 2.3
|
||
|
import QtQuick.Layouts 1.0
|
||
|
import QtQuick 2.3
|
||
|
|
||
|
Falkon.PluginInterface {
|
||
|
|
||
|
QtObject {
|
||
|
id: g_readability
|
||
|
property string script
|
||
|
}
|
||
|
|
||
|
QtObject {
|
||
|
id: g_config
|
||
|
property string icon
|
||
|
property bool contextMenu
|
||
|
property string colorTheme
|
||
|
property string font
|
||
|
property int fontSize
|
||
|
}
|
||
|
|
||
|
QtObject {
|
||
|
id: g_jsObject
|
||
|
signal configChanged()
|
||
|
signal setColorTheme(string colorTheme)
|
||
|
signal setFont(string colorTheme)
|
||
|
signal setFontSize(string colorTheme)
|
||
|
}
|
||
|
|
||
|
function setColorTheme(colorTheme) {
|
||
|
var themes = ["light", "sepia", "dark"]
|
||
|
if (!themes.includes(colorTheme)) {
|
||
|
return
|
||
|
}
|
||
|
|
||
|
if (g_config.colorTheme != colorTheme) {
|
||
|
g_config.colorTheme = colorTheme
|
||
|
|
||
|
configChanged()
|
||
|
}
|
||
|
}
|
||
|
|
||
|
function setFont(font) {
|
||
|
var fonts = ["sans-serif", "serif"]
|
||
|
if (!fonts.includes(font)) {
|
||
|
return
|
||
|
}
|
||
|
|
||
|
if (g_config.font != font) {
|
||
|
g_config.font = font
|
||
|
|
||
|
configChanged()
|
||
|
}
|
||
|
}
|
||
|
|
||
|
function setFontSize(fontSize) {
|
||
|
if (fontSize < 1 && fontSize > 9) {
|
||
|
return
|
||
|
}
|
||
|
|
||
|
if (g_config.fontSize != fontSize) {
|
||
|
g_config.fontSize = fontSize
|
||
|
|
||
|
configChanged()
|
||
|
}
|
||
|
}
|
||
|
|
||
|
init: function(state, settingsPath) {
|
||
|
g_config.icon = "dark"
|
||
|
g_config.contextMenu = true
|
||
|
g_config.colorTheme = "sepia"
|
||
|
g_config.font = "sans-serif"
|
||
|
g_config.fontSize = 5
|
||
|
|
||
|
loadSettings()
|
||
|
|
||
|
Falkon.ExternalJsObject.registerExtraObject({
|
||
|
id: 'readability',
|
||
|
object: g_jsObject
|
||
|
})
|
||
|
}
|
||
|
|
||
|
testPlugin: function() {
|
||
|
return true
|
||
|
}
|
||
|
|
||
|
unload: function() {
|
||
|
}
|
||
|
|
||
|
Falkon.Settings {
|
||
|
id: settings
|
||
|
name: 'Readability'
|
||
|
}
|
||
|
|
||
|
function findCurrentTab() {
|
||
|
var window = Falkon.Windows.getCurrent()
|
||
|
for (var i = 0; i < window.tabs.length; ++i) {
|
||
|
if (window.tabs[i].current) {
|
||
|
return window.tabs[i]
|
||
|
}
|
||
|
}
|
||
|
}
|
||
|
|
||
|
function makeReadability() {
|
||
|
if (g_readability.script.length == 0) {
|
||
|
var scriptReadability = Falkon.FileUtils.readAllFileContents("data/Readability.js")
|
||
|
var scriptToolbar = Falkon.FileUtils.readAllFileContents("data/Toolbar.js")
|
||
|
var style = Falkon.FileUtils.readAllFileContents("data/style.css").toString().replace(/[\n\r]/g, '')
|
||
|
var scriptCall = Falkon.FileUtils.readAllFileContents("data/Call.js").toString()
|
||
|
|
||
|
scriptCall = scriptCall.replace("{readability.js}", scriptReadability)
|
||
|
scriptCall = scriptCall.replace("{toolbar.js}", scriptToolbar)
|
||
|
scriptCall = scriptCall.replace("{style.css}", style)
|
||
|
|
||
|
g_readability.script = scriptCall
|
||
|
}
|
||
|
|
||
|
var initConfigScript = "initConfig('" + g_config.colorTheme + "', '" + g_config.font + "', " + g_config.fontSize + ");"
|
||
|
|
||
|
var currentTab = findCurrentTab()
|
||
|
currentTab.execJavaScript(g_readability.script + initConfigScript)
|
||
|
}
|
||
|
|
||
|
function loadSettings() {
|
||
|
g_config.icon = settings.value({key: 'icon', defaultValue: g_config.icon})
|
||
|
g_config.contextMenu = settings.value({key: 'showInContextMenu', defaultValue: g_config.contextMenu})
|
||
|
g_config.colorTheme = settings.value({key: 'colorTheme', defaultValue: g_config.colorTheme})
|
||
|
g_config.font = settings.value({key: 'font', defaultValue: g_config.font})
|
||
|
g_config.fontSize = settings.value({key: 'fontSize', defaultValue: g_config.fontSize})
|
||
|
}
|
||
|
|
||
|
function saveSettings() {
|
||
|
settings.setValue({key: 'icon', value: g_config.icon})
|
||
|
settings.setValue({key: 'showInContextMenu', value: g_config.contextMenu})
|
||
|
settings.setValue({key: 'colorTheme', value: g_config.colorTheme})
|
||
|
settings.setValue({key: 'font', value: g_config.font})
|
||
|
settings.setValue({key: 'fontSize', value: g_config.fontSize})
|
||
|
|
||
|
if (!settings.sync()) {
|
||
|
console.log("Unable to store the settings!")
|
||
|
return false
|
||
|
}
|
||
|
return true
|
||
|
}
|
||
|
|
||
|
function currentIcon() {
|
||
|
if (g_config.icon == 'light') {
|
||
|
return 'data/icon-light.png'
|
||
|
}
|
||
|
else {
|
||
|
return 'data/icon-dark.png'
|
||
|
}
|
||
|
}
|
||
|
|
||
|
populateWebViewMenu: function(menu, webHitTestResult) {
|
||
|
if (g_config.contextMenu) {
|
||
|
var action = menu.addAction({
|
||
|
text: i18n('Launch Readability'),
|
||
|
icon: currentIcon()
|
||
|
})
|
||
|
|
||
|
action.triggered.connect(function() {
|
||
|
makeReadability()
|
||
|
})
|
||
|
}
|
||
|
}
|
||
|
|
||
|
Falkon.BrowserAction {
|
||
|
name: i18n('Readability')
|
||
|
identity: 'readability-id'
|
||
|
title: i18n('Readimport QtQuick.Window 2.2ability')
|
||
|
toolTip: i18n('Launch Readability')
|
||
|
icon: currentIcon()
|
||
|
location: Falkon.BrowserAction.NavigationToolBar | Falkon.BrowserAction.StatusBar
|
||
|
onClicked: makeReadability()
|
||
|
|
||
|
popup: Pane {
|
||
|
id: mainPane
|
||
|
|
||
|
ColumnLayout {
|
||
|
Label {
|
||
|
id: infoLabel
|
||
|
text: i18n("Trying to convert the page for easier reading.")
|
||
|
}
|
||
|
}
|
||
|
}
|
||
|
}
|
||
|
|
||
|
settingsWindow: Pane {
|
||
|
ColumnLayout {
|
||
|
RowLayout {
|
||
|
GroupBox {
|
||
|
Layout.alignment: Qt.AlignTop
|
||
|
Layout.fillWidth: true
|
||
|
Layout.fillHeight: true
|
||
|
ColumnLayout {
|
||
|
Layout.alignment: Qt.AlignTop
|
||
|
Label {
|
||
|
text: i18n('Menu icon')
|
||
|
}
|
||
|
RadioButton {
|
||
|
id: radioIconLight
|
||
|
text: i18n('Light')
|
||
|
checked: g_config.icon == 'light'
|
||
|
}
|
||
|
RadioButton {
|
||
|
id: radioIconDark
|
||
|
text: i18n('Dark')
|
||
|
checked: g_config.icon == 'dark'
|
||
|
}
|
||
|
}
|
||
|
}
|
||
|
GroupBox {
|
||
|
Layout.alignment: Qt.AlignTop
|
||
|
Layout.fillWidth: true
|
||
|
Layout.fillHeight: true
|
||
|
ColumnLayout {
|
||
|
Label {
|
||
|
text: i18n('Color Scheme')
|
||
|
}
|
||
|
RadioButton {
|
||
|
id: radioColorThemeLight
|
||
|
text: i18n('Light')
|
||
|
checked: g_config.colorTheme == 'light'
|
||
|
}
|
||
|
RadioButton {
|
||
|
id: radioColorThemeSepia
|
||
|
text: i18n('Sepia')
|
||
|
checked: g_config.colorTheme == 'sepia'
|
||
|
}
|
||
|
RadioButton {
|
||
|
id: radioColorThemeDark
|
||
|
text: i18n('Dark')
|
||
|
checked: g_config.colorTheme == 'dark'
|
||
|
}
|
||
|
}
|
||
|
}
|
||
|
}
|
||
|
GroupBox {
|
||
|
Layout.fillWidth: true
|
||
|
ColumnLayout {
|
||
|
Label {
|
||
|
text: i18n('Font')
|
||
|
}
|
||
|
RadioButton {
|
||
|
id: radioFontSansSerif
|
||
|
text: i18n('Sans-Serif')
|
||
|
checked: g_config.font == 'sans-serif'
|
||
|
}
|
||
|
RadioButton {
|
||
|
id: radioFontSerif
|
||
|
text: i18n('Serif')
|
||
|
checked: g_config.font == 'serif'
|
||
|
}
|
||
|
}
|
||
|
}
|
||
|
RowLayout {
|
||
|
Layout.fillWidth: true
|
||
|
Label {
|
||
|
text: i18n('Font size')
|
||
|
Layout.alignment: Qt.AlignLeft
|
||
|
Layout.fillWidth: true
|
||
|
}
|
||
|
ComboBox {
|
||
|
id: comboBoxFontSize
|
||
|
Layout.alignment: Qt.AlignRight
|
||
|
currentIndex: g_config.fontSize
|
||
|
model: ListModel {
|
||
|
id: model
|
||
|
ListElement { text: "10 px" }
|
||
|
ListElement { text: "12 px" }
|
||
|
ListElement { text: "14 px" }
|
||
|
ListElement { text: "16 px" }
|
||
|
ListElement { text: "18 px" }
|
||
|
ListElement { text: "20 px" }
|
||
|
ListElement { text: "22 px" }
|
||
|
ListElement { text: "24 px" }
|
||
|
ListElement { text: "26 px" }
|
||
|
}
|
||
|
}
|
||
|
}
|
||
|
CheckBox {
|
||
|
id: checkboxContextMenu
|
||
|
checked: g_config.contextMenu
|
||
|
text: i18n('Show in context menu')
|
||
|
Layout.fillWidth: true;
|
||
|
}
|
||
|
Button {
|
||
|
id: button
|
||
|
text: i18n('Save')
|
||
|
hoverEnabled: true
|
||
|
Layout.fillWidth: true;
|
||
|
onClicked: function() {
|
||
|
function selectedColorTheme() {
|
||
|
if (radioColorThemeLight.checked) {return "light"}
|
||
|
if (radioColorThemeSepia.checked) {return "sepia"}
|
||
|
if (radioColorThemeDark.checked) {return "dark"}
|
||
|
return "dark"
|
||
|
}
|
||
|
|
||
|
g_config.icon = radioIconLight.checked ? "light" : "dark"
|
||
|
g_config.contextMenu = checkboxContextMenu.checkState == Qt.Checked
|
||
|
g_config.colorTheme = selectedColorTheme()
|
||
|
g_config.font = radioFontSansSerif.checked ? "sans-serif" : "serif"
|
||
|
g_config.fontSize = comboBoxFontSize.currentIndex
|
||
|
|
||
|
if (saveSettings()) {
|
||
|
button.text = i18n('Saved!')
|
||
|
} else {
|
||
|
button.text = i18n('Error occurred, try again!')
|
||
|
}
|
||
|
}
|
||
|
}
|
||
|
}
|
||
|
}
|
||
|
|
||
|
}
|