Compare commits
3 Commits
6e83fc331b
...
09d7b3386b
Author | SHA1 | Date | |
---|---|---|---|
09d7b3386b | |||
61964a83a4 | |||
65771792d3 |
252
.eslintrc.yml
Normal file
252
.eslintrc.yml
Normal file
@ -0,0 +1,252 @@
|
||||
---
|
||||
# SPDX-License-Identifier: MIT OR LGPL-2.0-or-later
|
||||
# SPDX-FileCopyrightText: 2018 Claudio André <claudioandre.br@gmail.com>
|
||||
extends: 'eslint:recommended'
|
||||
rules:
|
||||
array-bracket-newline:
|
||||
- error
|
||||
- consistent
|
||||
array-bracket-spacing:
|
||||
- error
|
||||
- never
|
||||
array-callback-return: error
|
||||
arrow-parens:
|
||||
- error
|
||||
- as-needed
|
||||
arrow-spacing: error
|
||||
block-scoped-var: error
|
||||
block-spacing: error
|
||||
brace-style: error
|
||||
# Waiting for this to have matured a bit in eslint
|
||||
# camelcase:
|
||||
# - error
|
||||
# - properties: never
|
||||
# allow: [^vfunc_, ^on_, _instance_init]
|
||||
comma-dangle:
|
||||
- error
|
||||
- arrays: always-multiline
|
||||
objects: always-multiline
|
||||
functions: never
|
||||
comma-spacing:
|
||||
- error
|
||||
- before: false
|
||||
after: true
|
||||
comma-style:
|
||||
- error
|
||||
- last
|
||||
computed-property-spacing: error
|
||||
curly:
|
||||
- error
|
||||
- multi-or-nest
|
||||
- consistent
|
||||
dot-location:
|
||||
- error
|
||||
- property
|
||||
eol-last: error
|
||||
eqeqeq: error
|
||||
func-call-spacing: error
|
||||
func-name-matching: error
|
||||
func-style:
|
||||
- error
|
||||
- declaration
|
||||
- allowArrowFunctions: true
|
||||
indent:
|
||||
- error
|
||||
- 4
|
||||
- ignoredNodes:
|
||||
# Allow not indenting the body of GObject.registerClass, since in the
|
||||
# future it's intended to be a decorator
|
||||
- 'CallExpression[callee.object.name=GObject][callee.property.name=registerClass] > ClassExpression:first-child'
|
||||
# Allow dedenting chained member expressions
|
||||
MemberExpression: 'off'
|
||||
key-spacing:
|
||||
- error
|
||||
- beforeColon: false
|
||||
afterColon: true
|
||||
keyword-spacing:
|
||||
- error
|
||||
- before: true
|
||||
after: true
|
||||
linebreak-style:
|
||||
- error
|
||||
- unix
|
||||
lines-between-class-members:
|
||||
- error
|
||||
- always
|
||||
- exceptAfterSingleLine: true
|
||||
max-nested-callbacks: error
|
||||
max-statements-per-line: error
|
||||
new-parens: error
|
||||
no-array-constructor: error
|
||||
no-await-in-loop: error
|
||||
no-caller: error
|
||||
no-constant-condition:
|
||||
- error
|
||||
- checkLoops: false
|
||||
no-div-regex: error
|
||||
no-empty:
|
||||
- error
|
||||
- allowEmptyCatch: true
|
||||
no-extra-bind: error
|
||||
no-extra-parens:
|
||||
- error
|
||||
- all
|
||||
- conditionalAssign: false
|
||||
nestedBinaryExpressions: false
|
||||
returnAssign: false
|
||||
no-implicit-coercion:
|
||||
- error
|
||||
- allow:
|
||||
- '!!'
|
||||
no-invalid-this: error
|
||||
no-iterator: error
|
||||
no-label-var: error
|
||||
no-lonely-if: error
|
||||
no-loop-func: error
|
||||
no-nested-ternary: error
|
||||
no-new-object: error
|
||||
no-new-wrappers: error
|
||||
no-octal-escape: error
|
||||
no-proto: error
|
||||
no-prototype-builtins: 'off'
|
||||
no-restricted-globals: [error, window]
|
||||
no-restricted-properties:
|
||||
- error
|
||||
- object: imports
|
||||
property: format
|
||||
message: Use template strings
|
||||
- object: pkg
|
||||
property: initFormat
|
||||
message: Use template strings
|
||||
- object: Lang
|
||||
property: copyProperties
|
||||
message: Use Object.assign()
|
||||
- object: Lang
|
||||
property: bind
|
||||
message: Use arrow notation or Function.prototype.bind()
|
||||
- object: Lang
|
||||
property: Class
|
||||
message: Use ES6 classes
|
||||
no-restricted-syntax:
|
||||
- error
|
||||
- selector: >-
|
||||
MethodDefinition[key.name="_init"] >
|
||||
FunctionExpression[params.length=1] >
|
||||
BlockStatement[body.length=1]
|
||||
CallExpression[arguments.length=1][callee.object.type="Super"][callee.property.name="_init"] >
|
||||
Identifier:first-child
|
||||
message: _init() that only calls super._init() is unnecessary
|
||||
- selector: >-
|
||||
MethodDefinition[key.name="_init"] >
|
||||
FunctionExpression[params.length=0] >
|
||||
BlockStatement[body.length=1]
|
||||
CallExpression[arguments.length=0][callee.object.type="Super"][callee.property.name="_init"]
|
||||
message: _init() that only calls super._init() is unnecessary
|
||||
- selector: BinaryExpression[operator="instanceof"][right.name="Array"]
|
||||
message: Use Array.isArray()
|
||||
no-return-assign: error
|
||||
no-return-await: error
|
||||
no-self-compare: error
|
||||
no-shadow: error
|
||||
no-shadow-restricted-names: error
|
||||
no-spaced-func: error
|
||||
no-tabs: error
|
||||
no-template-curly-in-string: error
|
||||
no-throw-literal: error
|
||||
no-trailing-spaces: error
|
||||
no-undef-init: error
|
||||
no-unneeded-ternary: error
|
||||
no-unused-expressions: error
|
||||
no-unused-vars:
|
||||
- error
|
||||
# Vars use a suffix _ instead of a prefix because of file-scope private vars
|
||||
- varsIgnorePattern: (^unused|_$)
|
||||
argsIgnorePattern: ^(unused|_)
|
||||
no-useless-call: error
|
||||
no-useless-computed-key: error
|
||||
no-useless-concat: error
|
||||
no-useless-constructor: error
|
||||
no-useless-rename: error
|
||||
no-useless-return: error
|
||||
no-whitespace-before-property: error
|
||||
no-with: error
|
||||
nonblock-statement-body-position:
|
||||
- error
|
||||
- below
|
||||
object-curly-newline:
|
||||
- error
|
||||
- consistent: true
|
||||
multiline: true
|
||||
object-curly-spacing: error
|
||||
object-shorthand: error
|
||||
operator-assignment: error
|
||||
operator-linebreak: error
|
||||
padded-blocks:
|
||||
- error
|
||||
- never
|
||||
# These may be a bit controversial, we can try them out and enable them later
|
||||
# prefer-const: error
|
||||
# prefer-destructuring: error
|
||||
prefer-numeric-literals: error
|
||||
prefer-promise-reject-errors: error
|
||||
prefer-rest-params: error
|
||||
prefer-spread: error
|
||||
prefer-template: error
|
||||
quotes:
|
||||
- error
|
||||
- single
|
||||
- avoidEscape: true
|
||||
require-await: error
|
||||
rest-spread-spacing: error
|
||||
semi:
|
||||
- error
|
||||
- always
|
||||
semi-spacing:
|
||||
- error
|
||||
- before: false
|
||||
after: true
|
||||
semi-style: error
|
||||
space-before-blocks: error
|
||||
space-before-function-paren:
|
||||
- error
|
||||
- named: never
|
||||
# for `function ()` and `async () =>`, preserve space around keywords
|
||||
anonymous: always
|
||||
asyncArrow: always
|
||||
space-in-parens: error
|
||||
space-infix-ops:
|
||||
- error
|
||||
- int32Hint: false
|
||||
space-unary-ops: error
|
||||
spaced-comment: error
|
||||
switch-colon-spacing: error
|
||||
symbol-description: error
|
||||
template-curly-spacing: error
|
||||
template-tag-spacing: error
|
||||
unicode-bom: error
|
||||
wrap-iife:
|
||||
- error
|
||||
- inside
|
||||
yield-star-spacing: error
|
||||
yoda: error
|
||||
globals:
|
||||
ARGV: readonly
|
||||
Debugger: readonly
|
||||
GIRepositoryGType: readonly
|
||||
globalThis: readonly
|
||||
imports: readonly
|
||||
Intl: readonly
|
||||
log: readonly
|
||||
logError: readonly
|
||||
print: readonly
|
||||
printerr: readonly
|
||||
window: readonly
|
||||
TextEncoder: readonly
|
||||
TextDecoder: readonly
|
||||
console: readonly
|
||||
setTimeout: readonly
|
||||
setInterval: readonly
|
||||
clearTimeout: readonly
|
||||
clearInterval: readonly
|
||||
parserOptions:
|
||||
ecmaVersion: 2021
|
47
extension.js
47
extension.js
@ -169,15 +169,23 @@ class Indicator extends PanelMenu.Button {
|
||||
this._prefsButton = this._createButton ( 'big', 'preferences-system-symbolic', _('Preferences'), this._onPreferencesActivate );
|
||||
this._buttonMenu.actor.add_child (this._prefsButton);
|
||||
|
||||
if ( this.serverLogic && this.serverLogic.canRecheck )
|
||||
{
|
||||
this._recheckButton = this._createButton ( 'big', 'mail-send-receive-symbolic', _('Recheck all'), this.recheckAll );
|
||||
this._buttonMenu.actor.add_child (this._recheckButton );
|
||||
}
|
||||
|
||||
this._reloadButton = this._createButton ( 'big', 'view-refresh-symbolic', _('Reload view'), this.updateStatus );
|
||||
this._buttonMenu.actor.add_child (this._reloadButton );
|
||||
|
||||
if ( this.serverLogic && this.serverLogic.canRecheck )
|
||||
{
|
||||
let multiButtonBox = new St.BoxLayout( { style_class: 'monito-multibutton' } );
|
||||
this._recheckButton = this._createButton ( 'big', 'mail-send-receive-symbolic', _('Recheck all'), this.recheckAll );
|
||||
this._recheckSpecialButton = this._createPopupButton ( this.recheckSpecial );
|
||||
multiButtonBox.add_child ( this._recheckButton );
|
||||
multiButtonBox.add_child ( this._recheckSpecialButton );
|
||||
this._buttonMenu.actor.add_child (multiButtonBox);
|
||||
|
||||
const sourceActor = new St.Widget();
|
||||
this._menu = new PopupMenu.PopupMenu(sourceActor, 0.0, St.Side.TOP);
|
||||
const menuItem1 = this._menu.addAction('Item 1', () => console.log('activated'));
|
||||
}
|
||||
|
||||
let _intermediate = new PopupMenu.PopupBaseMenuItem ( {
|
||||
style_class: 'monito-services',
|
||||
reactive: false
|
||||
@ -222,6 +230,11 @@ class Indicator extends PanelMenu.Button {
|
||||
this.serverLogic.recheckAll ( this._recheckButton );
|
||||
}
|
||||
|
||||
recheckSpecial ( )
|
||||
{
|
||||
this._menu.open();
|
||||
}
|
||||
|
||||
changeShowAll ( )
|
||||
{
|
||||
this.showAll = ! this.showAll;
|
||||
@ -694,6 +707,28 @@ class Indicator extends PanelMenu.Button {
|
||||
return button;
|
||||
}
|
||||
|
||||
_createPopupButton ( callback ) {
|
||||
let size = 48;
|
||||
let sizeName = 'big';
|
||||
|
||||
let button = new St.Button({
|
||||
x_align: Clutter.ActorAlign.END,
|
||||
y_align: Clutter.ActorAlign.CENTER,
|
||||
reactive: true,
|
||||
can_focus: true,
|
||||
track_hover: true,
|
||||
style_class: 'button %s-button'.format(sizeName),
|
||||
rotation_angle_x: 0.0,
|
||||
width: 32,
|
||||
height: size
|
||||
});
|
||||
|
||||
button.child = PopupMenu.arrowIcon(St.Side.BOTTOM);
|
||||
|
||||
button.connect('clicked', Lang.bind(this, callback ) );
|
||||
return button;
|
||||
}
|
||||
|
||||
});
|
||||
|
||||
class Extension {
|
||||
|
33
prefs.js
33
prefs.js
@ -53,7 +53,7 @@ const column_definitions = {
|
||||
next_check: { label: _('Next check'), width: 200, expand: false, type: 'date' },
|
||||
last_state_change: { label: _('Last state changed'), width: 200, expand: false, type: 'date' },
|
||||
attempts: { label: _('Attempts'), width: 50, expand: false, },
|
||||
status_information: { label: _('Information'), width: 600, expand: false, },
|
||||
status_information: { label: _('Test result'), width: 600, expand: false, },
|
||||
output: { label: _('Output'), width: 600, expand: false, },
|
||||
actions: { label: 'Actions', width: 50, expand: false, special: 'actions' },
|
||||
};
|
||||
@ -100,7 +100,7 @@ function init() {
|
||||
this.settings = ExtensionUtils.getSettings(SETTINGS_SCHEMA);
|
||||
|
||||
this.gtkVersion = Gtk.get_major_version();
|
||||
monitoLog ( 'GTK version is ' + this.gtkVersion );
|
||||
// monitoLog ( 'GTK version is ' + this.gtkVersion );
|
||||
}
|
||||
|
||||
|
||||
@ -377,7 +377,7 @@ function createColumnsPrefTab ( noteBook, type, isActive )
|
||||
{
|
||||
let grid = new Gtk.Grid ( {
|
||||
halign: Gtk.Align.FILL,
|
||||
// margin: 18,
|
||||
margin: 18,
|
||||
column_spacing: 12,
|
||||
row_spacing: 12,
|
||||
visible: true,
|
||||
@ -395,13 +395,10 @@ function createColumnsPrefTab ( noteBook, type, isActive )
|
||||
let columnNumbers = new Gtk.TreeViewColumn ( { title: _("Column") } );
|
||||
this.ColumnNameRenderer = new Gtk.CellRendererCombo ( { editable: true,
|
||||
has_entry: false,
|
||||
text_column: 1 } );
|
||||
text_column: 0 } );
|
||||
this.ColumnNameRenderer.connect("edited", onComboChanged)
|
||||
this.ColumnNameRenderer.col = 0;
|
||||
if ( this.gtkVersion == 4 )
|
||||
columnNumbers.pack_start(this.ColumnNameRenderer, true);
|
||||
else
|
||||
columnNumbers.append(this.ColumnNameRenderer, true);
|
||||
columnNumbers.pack_start(this.ColumnNameRenderer, true);
|
||||
columnNumbers.add_attribute(this.ColumnNameRenderer, 'text', 0);
|
||||
this.treeView.append_column(columnNumbers);
|
||||
this.ColumnNameRenderer.connect('edited', Lang.bind ( this, this.editColumn ) );
|
||||
@ -482,7 +479,7 @@ function activateAccountRow ( ) {
|
||||
for ( var i in _columns )
|
||||
{
|
||||
let _iter = this.store.append();
|
||||
this.store.set_value(_iter, 0, _columns [ i ] );
|
||||
this.store.set_value(_iter, 0, getEntryLabel ( _columns [ i ] ) );
|
||||
this.store.set_value(_iter, 1, parseInt(_columnsSizes [ i ]) );
|
||||
}
|
||||
|
||||
@ -642,6 +639,21 @@ function removeColumnRow ( widget ) {
|
||||
}
|
||||
|
||||
|
||||
function getEntryName ( text )
|
||||
{
|
||||
for ( let [ _colName, _colDef ] of Object.entries(column_definitions) )
|
||||
if ( _colDef.label == text )
|
||||
return _colName;
|
||||
return 'N/A';
|
||||
}
|
||||
|
||||
|
||||
function getEntryLabel ( text )
|
||||
{
|
||||
return column_definitions[text].label;
|
||||
}
|
||||
|
||||
|
||||
function editColumn ( widget, path, text )
|
||||
{
|
||||
let _row = this.accountsChooser.get_selected_row();
|
||||
@ -656,7 +668,8 @@ function editColumn ( widget, path, text )
|
||||
}
|
||||
else
|
||||
{
|
||||
this.store.set_value(_iter[1], widget.col, text );
|
||||
this.store.set_value ( _iter[1], widget.col, text );
|
||||
text = getEntryName ( text );
|
||||
prefKey = 'columns';
|
||||
}
|
||||
|
||||
|
Loading…
Reference in New Issue
Block a user