[polari/wip/fmuellner/template-strings: 4/4] style: Use backticks over concatenation or format()



commit 7fdbaf0020738382eb398e71e2a4be66cc4be96d
Author: Florian Müllner <fmuellner gnome org>
Date:   Sat Jul 28 03:14:38 2018 +0200

    style: Use backticks over concatenation or format()
    
    Template strings are much nicer than those alternatives, with the only
    drawback (shared with concatenation) that xgettext doesn't recognize
    them yet. But at least for non-translatable strings, we can embrace
    them and re-enable the style rule that enforces them.
    
    https://gitlab.gnome.org/GNOME/polari/merge_requests/64

 lint/eslintrc-legacy.json |  1 -
 src/accountsMonitor.js    |  2 +-
 src/application.js        | 54 +++++++++++++++++++++++------------------------
 src/chatView.js           | 32 ++++++++++++++--------------
 src/connections.js        |  2 +-
 src/entryArea.js          |  5 +++--
 src/initialSetup.js       |  2 +-
 src/ircParser.js          |  8 +++----
 src/joinDialog.js         |  2 +-
 src/mainWindow.js         | 22 ++++++++++---------
 src/networksManager.js    |  6 +++---
 src/roomList.js           |  6 +++---
 src/roomStack.js          |  4 ++--
 src/serverRoomManager.js  |  2 +-
 src/tabCompletion.js      |  6 +++---
 src/telepathyClient.js    | 24 ++++++++++-----------
 src/userList.js           | 11 +++++-----
 src/userTracker.js        | 16 +++++++-------
 src/utils.js              | 26 ++++++++++++-----------
 19 files changed, 117 insertions(+), 114 deletions(-)
---
diff --git a/lint/eslintrc-legacy.json b/lint/eslintrc-legacy.json
index 9597da3..ad2c560 100644
--- a/lint/eslintrc-legacy.json
+++ b/lint/eslintrc-legacy.json
@@ -16,7 +16,6 @@
                 "SwitchCase": 1
             }
         ],
-        "prefer-template": "off",
         "quotes": "off"
    }
 }
diff --git a/src/accountsMonitor.js b/src/accountsMonitor.js
index 79ee69c..91e67e4 100644
--- a/src/accountsMonitor.js
+++ b/src/accountsMonitor.js
@@ -55,7 +55,7 @@ var AccountsMonitor = class {
         if (settings)
             return settings;
 
-        let path = '/org/gnome/Polari/Accounts/%s/'.format(account.get_path_suffix());
+        let path = `/org/gnome/Polari/Accounts/${account.get_path_suffix()}/`;
         settings = new Gio.Settings({ schema_id: 'org.gnome.Polari.Account',
                                       path: path });
         this._accountSettings.set(accountPath, settings);
diff --git a/src/application.js b/src/application.js
index 39e52f4..e0feddd 100644
--- a/src/application.js
+++ b/src/application.js
@@ -20,7 +20,7 @@ const MAX_RETRIES = 3;
 
 const IRC_SCHEMA_REGEX = /^(irc?:\/\/)([\da-z.-]+):?(\d+)?\/(?:%23)?([\w.+-]+)/i;
 
-const AUTOSTART_DIR = GLib.get_user_config_dir() + '/autostart';
+const AUTOSTART_DIR = `${GLib.get_user_config_dir()}/autostart`;
 const AUTOSTART_FILE = '/org.gnome.Polari.Autostart.desktop';
 
 var Application = GObject.registerClass({
@@ -71,7 +71,7 @@ var Application = GObject.registerClass({
 
             v = dict.lookup_value('version', null);
             if (v && v.get_boolean()) {
-                print("Polari %s".format(pkg.version));
+                print(`Polari ${pkg.version}`);
                 return 0;
             }
 
@@ -107,12 +107,12 @@ var Application = GObject.registerClass({
     }
 
     _ensureService(conn, name, opath, iface, command) {
-        debug('Trying to ensure service %s'.format(name));
+        debug(`Trying to ensure service ${name}`);
 
         if (this._checkService(conn, name, opath, iface))
             return;
 
-        log('Failed to activate service %s, starting manually'.format(name));
+        log(`Failed to activate service ${name}, starting manually`);
 
         let proc = new Gio.Subprocess({ argv: [command] });
 
@@ -157,13 +157,13 @@ var Application = GObject.registerClass({
                             Tp.ACCOUNT_MANAGER_BUS_NAME,
                             '/app/libexec/mission-control-5');
         this._ensureService(conn,
-                            Tp.CM_BUS_NAME_BASE + 'idle',
-                            Tp.CM_OBJECT_PATH_BASE + 'idle',
+                            `${Tp.CM_BUS_NAME_BASE}idle`,
+                            `${Tp.CM_OBJECT_PATH_BASE}idle`,
                             'org.freedesktop.Telepathy.ConnectionManager',
                             '/app/libexec/telepathy-idle');
         this._ensureService(conn,
-                            Tp.CLIENT_BUS_NAME_BASE + 'Logger',
-                            Tp.CLIENT_OBJECT_PATH_BASE + 'Logger',
+                            `${Tp.CLIENT_BUS_NAME_BASE}Logger`,
+                            `${Tp.CLIENT_OBJECT_PATH_BASE}Logger`,
                             Tp.IFACE_CLIENT,
                             '/app/libexec/telepathy-logger');
         return true;
@@ -263,7 +263,7 @@ var Application = GObject.registerClass({
             if (actionEntry.change_state)
                 action.connect('change-state', actionEntry.change_state);
             if (actionEntry.accels)
-                this.set_accels_for_action('app.' + actionEntry.name,
+                this.set_accels_for_action(`app.${actionEntry.name}`,
                                            actionEntry.accels);
             this.add_action(action);
         });
@@ -277,7 +277,7 @@ var Application = GObject.registerClass({
         this._onRunInBackgroundChanged();
 
         for (let i = 1; i < 10; i++)
-            this.set_accels_for_action('app.nth-room(%d)'.format(i), ['<Alt>' + i]);
+            this.set_accels_for_action(`app.nth-room(${i})`, [`<Alt>${i}`]);
 
         this._telepathyClient = null;
 
@@ -401,13 +401,13 @@ var Application = GObject.registerClass({
 
             if (matches.length)
                 joinAction.activate(new GLib.Variant('(ssu)',
-                                                     [matches[0], '#' + room, time]));
+                                                     [matches[0], `#${room}`, time]));
             else
                 this._createAccount(matchedId, server, port, a => {
                     if (a)
                         joinAction.activate(new GLib.Variant('(ssu)',
                                                              [a.get_object_path(),
-                                                              '#' + room, time]));
+                                                              `#${room}`, time]));
                 });
         });
     }
@@ -481,14 +481,14 @@ var Application = GObject.registerClass({
             return true;
         }
 
-        let f = Gio.File.new_for_path(GLib.get_user_cache_dir() +
-                                      '/polari/initial-setup-completed');
+        let path = `${GLib.get_user_cache_dir()}/polari/initial-setup-completed`;
+        let f = Gio.File.new_for_path(path);
         try {
             this._touchFile(f);
         } catch (e) {
             if (e.matches(Gio.IOErrorEnum, Gio.IOErrorEnum.EXISTS))
                 return false; // initial setup has completed
-            log('Failed to mark initial setup as completed: ' + e.message);
+            log(`Failed to mark initial setup as completed: ${e.message}`);
         }
 
         let savedRooms = this._settings.get_value('saved-channel-list');
@@ -542,7 +542,7 @@ var Application = GObject.registerClass({
         let baseNick = Polari.util_get_basenick(nominalNick);
 
         let tracker = this._userStatusMonitor.getUserTrackerForAccount(account);
-        let contactsChangedId = tracker.connect('contacts-changed::' + baseNick,
+        let contactsChangedId = tracker.connect(`contacts-changed::${baseNick}`,
             (t, nick) => {
                 if (nick != nominalNick)
                     return;
@@ -577,7 +577,7 @@ var Application = GObject.registerClass({
         let server = params['server'];
         let accountName = params['account'];
         let port = params['port'];
-        debug('Failed to connect to %s with username %s'.format(server, accountName));
+        debug(`Failed to connect to ${server} with username ${accountName}`);
 
         let accountServers = [];
         if (this._networksManager.getAccountIsPredefined(account))
@@ -623,8 +623,8 @@ var Application = GObject.registerClass({
         let oldParams = account.dup_parameters_vardict().deep_unpack();
         let nick = oldParams['account'].deep_unpack();
 
-        debug('Retrying with nickname %s'.format(nick + '_'));
-        let params = { account: new GLib.Variant('s', nick + '_') };
+        debug(`Retrying with nickname ${nick}_`);
+        let params = { account: new GLib.Variant('s', `${nick}_`) };
         this._retryWithParams(account, new GLib.Variant('a{sv}', params));
         return true;
     }
@@ -636,7 +636,7 @@ var Application = GObject.registerClass({
         if (!server)
             return false;
 
-        debug('Retrying with %s:%d'.format(server.address, server.port));
+        debug(`Retrying with ${server.address}:${server.port}`);
         let params = { server: new GLib.Variant('s', server.address),
                        port: new GLib.Variant('u', server.port),
                        'use-ssl': new GLib.Variant('b', server.ssl) };
@@ -663,9 +663,9 @@ var Application = GObject.registerClass({
                     return;
 
             if (reason != Tp.ConnectionStatusReason.REQUESTED) {
-                let strReasons = Object.keys(Tp.ConnectionStatusReason);
-                debug('Account %s disconnected with reason %s'
-                    .format(account.display_name, strReasons[reason]));
+                let strReason = Object.keys(Tp.ConnectionStatusReason)[reason];
+                let name = account.display_name;
+                debug(`Account ${name} disconnected with reason ${strReason}`);
 
                 // Connection failed, keep tp from retrying over and over
                 let presence = Tp.ConnectionPresenceType.OFFLINE;
@@ -748,21 +748,21 @@ var Application = GObject.registerClass({
     }
 
     _onRunInBackgroundChanged() {
-        let file = Gio.File.new_for_path(AUTOSTART_DIR + AUTOSTART_FILE);
+        let file = Gio.File.new_for_path(`${AUTOSTART_DIR}${AUTOSTART_FILE}`);
 
         if (this._settings.get_boolean('run-in-background'))
             try {
-                this._createLink(file, pkg.pkgdatadir + AUTOSTART_FILE);
+                this._createLink(file, `${pkg.pkgdatadir}${AUTOSTART_FILE}`);
             } catch (e) {
                 if (!e.matches(Gio.IOErrorEnum, Gio.IOErrorEnum.EXISTS))
-                    log('Failed to create autostart link: ' + e.message);
+                    log(`Failed to create autostart link: ${e.message}`);
             }
         else
             try {
                 file.delete(null);
             } catch (e) {
                 if (!e.matches(Gio.IOErrorEnum, Gio.IOErrorEnum.NOT_FOUND))
-                    log('Failed to remove autostart link: ' + e.message);
+                    log(`Failed to remove autostart link: ${e.message}`);
             }
     }
 
diff --git a/src/chatView.js b/src/chatView.js
index 12c9e93..d009fac 100644
--- a/src/chatView.js
+++ b/src/chatView.js
@@ -134,7 +134,7 @@ class TextView extends Gtk.TextView {
 
     _updateLayout() {
         this._layout = this.create_pango_layout(null);
-        this._layout.set_markup('<small><b>%s</b></small>'.format(_("New Messages")), -1);
+        this._layout.set_markup(`<small><b>${_("New Messages")}</b></small>`, -1);
     }
 });
 
@@ -559,7 +559,7 @@ var ChatView = GObject.registerClass({
                      messageType: source.get_message_type() };
         }
 
-        throw new Error('Cannot create message from source ' + source);
+        throw new Error(`Cannot create message from source ${source}`);
     }
 
     _getReadyLogs() {
@@ -884,7 +884,7 @@ var ChatView = GObject.registerClass({
     }
 
     _getNickTagName(nick) {
-        return NICKTAG_PREFIX + Polari.util_get_basenick(nick);
+        return `${NICKTAG_PREFIX}${Polari.util_get_basenick(nick)}`;
     }
 
     _getNickFromTagName(tagName) {
@@ -943,7 +943,7 @@ var ChatView = GObject.registerClass({
     _onMemberDisconnected(room, member, message) {
         let text = _("%s has disconnected").format(member.alias);
         if (message)
-            text += ' (%s)'.format(message);
+            text += ` (${message})`;
         this._insertStatus(text, member.alias, 'left');
     }
 
@@ -972,7 +972,7 @@ var ChatView = GObject.registerClass({
         let text = _("%s left").format(member.alias);
 
         if (message)
-            text += ' (%s)'.format(message);
+            text += ` (${message})`;
 
         this._insertStatus(text, member.alias, 'left');
     }
@@ -981,7 +981,7 @@ var ChatView = GObject.registerClass({
         this._insertTpMessage(tpMessage);
         this._resetStatusCompressed();
         let nick = tpMessage.sender.alias;
-        let nickTag = this._lookupTag('nick' + nick);
+        let nickTag = this._lookupTag(`nick${nick}`);
         if (!nickTag)
             return;
         nickTag._lastActivity = GLib.get_monotonic_time();
@@ -1003,7 +1003,7 @@ var ChatView = GObject.registerClass({
     }
 
     _shouldShowStatus(nick) {
-        let nickTag = this._lookupTag('nick' + nick);
+        let nickTag = this._lookupTag(`nick${nick}`);
 
         if (!nickTag || !nickTag._lastActivity)
             return false;
@@ -1016,9 +1016,9 @@ var ChatView = GObject.registerClass({
         let buffer = this._view.buffer;
         let headerMark = buffer.get_mark('idle-status-start');
 
-        let headerTagName = 'status-compressed' + this._state.lastStatusGroup;
-        let headerArrowTagName = 'status-arrow-compressed' + this._state.lastStatusGroup;
-        let groupTagName = 'status' + this._state.lastStatusGroup;
+        let headerTagName = `status-compressed${this._state.lastStatusGroup}`;
+        let headerArrowTagName = `status-arrow-compressed${this._state.lastStatusGroup}`;
+        let groupTagName = `status${this._state.lastStatusGroup}`;
 
         let headerTag, headerArrowTag, groupTag;
         if (!headerMark) {
@@ -1098,7 +1098,7 @@ var ChatView = GObject.registerClass({
             }
             this._updateStatusHeader();
 
-            groupTag = this._lookupTag('status' + this._state.lastStatusGroup);
+            groupTag = this._lookupTag(`status${this._state.lastStatusGroup}`);
             tags.push(groupTag);
         } else {
             this._resetStatusCompressed();
@@ -1215,7 +1215,7 @@ var ChatView = GObject.registerClass({
                 tags.push(this._lookupTag('gap'));
             needsGap = false;
             this._insertWithTags(iter,
-                                 this._formatTimestamp(message.timestamp) + '\n',
+                                 `${this._formatTimestamp(message.timestamp)}\n`,
                                  tags);
         }
         state.lastTimestamp = message.timestamp;
@@ -1224,7 +1224,7 @@ var ChatView = GObject.registerClass({
 
         let tags = [];
         if (isAction) {
-            message.text = "%s %s".format(message.nick, message.text);
+            message.text = `${message.nick} ${message.text}`;
             state.lastNick = null;
             tags.push(this._lookupTag('action'));
             if (needsGap)
@@ -1365,7 +1365,7 @@ var ChatView = GObject.registerClass({
 
     _createUrlTag(url) {
         if (!url.includes(':'))
-            url = 'http://' + url;
+            url = `http://${url}`;
 
         let tag = new ButtonTag();
         tag.connect('notify::hover', () => {
@@ -1384,10 +1384,10 @@ var ChatView = GObject.registerClass({
         let buffer = this._view.get_buffer();
         let iter = buffer.get_end_iter();
         let tags = [];
-        let groupTag = this._lookupTag('status' + this._state.lastStatusGroup);
+        let groupTag = this._lookupTag(`status${this._state.lastStatusGroup}`);
         if (groupTag && iter.ends_tag(groupTag))
             tags.push(groupTag);
-        let headerTag = this._lookupTag('status-compressed' + this._state.lastStatusGroup);
+        let headerTag = this._lookupTag(`status-compressed${this._state.lastStatusGroup}`);
         if (headerTag && iter.ends_tag(headerTag))
             tags.push(headerTag);
         if (iter.get_line_offset() != 0)
diff --git a/src/connections.js b/src/connections.js
index 1c1de1b..f5576fc 100644
--- a/src/connections.js
+++ b/src/connections.js
@@ -372,7 +372,7 @@ var ConnectionDetails = GObject.registerClass({
         this._savedRealname = params.fullname || '';
 
         if (port != defaultPort)
-            this._savedServer += ':%d'.format(port);
+            this._savedServer += `:${port}`;
 
         if (this._savedServer != account.display_name)
             this._savedName = account.display_name;
diff --git a/src/entryArea.js b/src/entryArea.js
index 4487dea..4494c49 100644
--- a/src/entryArea.js
+++ b/src/entryArea.js
@@ -418,8 +418,9 @@ var EntryArea = GObject.registerClass({
             });
         } catch (e) {
             let type = typeof this._pasteContent;
-            debug('Failed to paste content of type ' +
-                  (type == 'object' ? this._pasteContent.toString() : type));
+            if (type == 'object')
+                type = this._pasteContent.toString();
+            debug(`Failed to paste content of type ${type}`);
         }
         this._confirmLabel.hide();
     }
diff --git a/src/initialSetup.js b/src/initialSetup.js
index cdd3af5..b9b55b8 100644
--- a/src/initialSetup.js
+++ b/src/initialSetup.js
@@ -128,7 +128,7 @@ var InitialSetupWindow = GObject.registerClass({
         let time = Utils.getTpEventTime();
         toJoinRooms.forEach(room => {
             if (room[0] != '#')
-                room = '#' + room;
+                room = `#${room}`;
 
             let app = Gio.Application.get_default();
             let action = app.lookup_action('join-room');
diff --git a/src/ircParser.js b/src/ircParser.js
index 62da0dc..7bf2cfe 100644
--- a/src/ircParser.js
+++ b/src/ircParser.js
@@ -104,7 +104,7 @@ var IrcParser = class {
                         try {
                             contact = c.dup_contact_by_id_finish(res);
                         } catch (e) {
-                            logError(e, 'Failed to get contact for ' + nick);
+                            logError(e, `Failed to get contact for ${nick}`);
                             return;
                         }
                         this._room.add_member(contact);
@@ -120,7 +120,7 @@ var IrcParser = class {
                     break;
                 }
                 if (argv.length)
-                    log('Excess arguments to JOIN command: ' + argv);
+                    log(`Excess arguments to JOIN command: ${argv}`);
 
                 let account = this._room.account;
                 let app = Gio.Application.get_default();
@@ -144,7 +144,7 @@ var IrcParser = class {
                         try {
                             contact = c.dup_contact_by_id_finish(res);
                         } catch (e) {
-                            logError(e, 'Failed to get contact for ' + nick);
+                            logError(e, `Failed to get contact for ${nick}`);
                             return;
                         }
                         this._room.remove_member(contact);
@@ -198,7 +198,7 @@ var IrcParser = class {
                     break;
                 }
                 if (argv.length)
-                    log('Excess arguments to NICK command: ' + argv);
+                    log(`Excess arguments to NICK command: ${argv}`);
 
                 this._app.setAccountNick(this._room.account, nick);
                 break;
diff --git a/src/joinDialog.js b/src/joinDialog.js
index a2dc2f1..ccc34da 100644
--- a/src/joinDialog.js
+++ b/src/joinDialog.js
@@ -165,7 +165,7 @@ var JoinDialog = GObject.registerClass({
         let toJoinRooms = this._serverRoomList.selectedRooms;
         toJoinRooms.forEach(room => {
             if (room[0] != '#')
-                room = '#' + room;
+                room = `#${room}`;
 
             let app = Gio.Application.get_default();
             let action = app.lookup_action('join-room');
diff --git a/src/mainWindow.js b/src/mainWindow.js
index 041f8a2..46418ac 100644
--- a/src/mainWindow.js
+++ b/src/mainWindow.js
@@ -262,14 +262,15 @@ var MainWindow = GObject.registerClass({
     }
 
     _onDeleteEvent() {
-        let f = Gio.File.new_for_path(GLib.get_user_cache_dir() +
-                                      '/polari/close-confirmation-shown');
+        let f = Gio.File.new_for_path(
+            `${GLib.get_user_cache_dir()}/polari/close-confirmation-shown`
+        );
         try {
             this._touchFile(f);
         } catch (e) {
             if (e.matches(Gio.IOErrorEnum, Gio.IOErrorEnum.EXISTS))
                 return Gdk.EVENT_PROPAGATE; // the dialog has been shown
-            log('Failed to mark confirmation dialog as shown: ' + e.message);
+            log(`Failed to mark confirmation dialog as shown: ${e.message}`);
         }
 
         this._closeConfirmationDialog.show();
@@ -287,10 +288,10 @@ var MainWindow = GObject.registerClass({
 
         let layout = this._gtkSettings.gtk_decoration_layout;
         if (layout) {
-            let split = layout.split(':');
+            let [buttonsLeft, buttonsRight] = layout.split(':');
 
-            layoutLeft = split[0] + ':';
-            layoutRight = ':' + split[1];
+            layoutLeft = `${buttonsLeft}:`;
+            layoutRight = `:${buttonsRight}`;
         }
 
         this._titlebarLeft.set_decoration_layout(layoutLeft);
@@ -383,7 +384,7 @@ var MainWindow = GObject.registerClass({
         let accessibleName = ngettext("%d user",
                                       "%d users", numMembers).format(numMembers);
         this._showUserListButton.get_accessible().set_name(accessibleName);
-        this._showUserListButton.label = '%d'.format(numMembers);
+        this._showUserListButton.label = `${numMembers}`;
     }
 
     _updateTitlebar() {
@@ -393,10 +394,11 @@ var MainWindow = GObject.registerClass({
             let pos = 0;
             for (let i = 0; i < urls.length; i++) {
                 let url = urls[i];
-                let text = this._room.topic.substr(pos, url.pos - pos);
+                let text = GLib.markup_escape_text(
+                    this._room.topic.substr(pos, url.pos - pos), -1
+                );
                 let urlText = GLib.markup_escape_text(url.url, -1);
-                subtitle += GLib.markup_escape_text(text, -1) +
-                            '<a href="%s">%s</a>'.format(urlText, urlText);
+                subtitle += `${text} <a href="${urlText}">${urlText}</a>`;
                 pos = url.pos + url.url.length;
             }
             subtitle += GLib.markup_escape_text(this._room.topic.substr(pos), -1);
diff --git a/src/networksManager.js b/src/networksManager.js
index e51e2c9..3a19f86 100644
--- a/src/networksManager.js
+++ b/src/networksManager.js
@@ -22,7 +22,7 @@ var NetworksManager = class {
             [, data] = file.load_contents(null);
             this._parseNetworks(ByteArray.toString(data));
         } catch (e) {
-            log('Failed to load network list: ' + e.message);
+            log(`Failed to load network list: ${e.message}`);
         }
     }
 
@@ -31,7 +31,7 @@ var NetworksManager = class {
         try {
             networks = JSON.parse(data);
         } catch (e) {
-            log('Failed to parse network list: ' + e.message);
+            log(`Failed to parse network list: ${e.message}`);
             return false;
         }
 
@@ -74,7 +74,7 @@ var NetworksManager = class {
     getNetworkDetails(id) {
         let network = this._lookupNetwork(id);
         if (!network.servers || !network.servers.length)
-            throw new Error('No servers for network ' + id);
+            throw new Error(`No servers for network ${id}`);
 
         let server = this.getNetworkServers(id)[0];
         return {
diff --git a/src/roomList.js b/src/roomList.js
index d39ee60..83d3a3d 100644
--- a/src/roomList.js
+++ b/src/roomList.js
@@ -185,7 +185,7 @@ var RoomRow = GObject.registerClass({
             let menu = new Gio.Menu();
             let isRoom = this._room.type == Tp.HandleType.ROOM;
             menu.append(isRoom ? _("Leave chatroom") : _("End conversation"),
-                        'app.leave-room(("%s", ""))'.format(this._room.id));
+                        `app.leave-room(("${this._room.id}", ""))`);
 
             this._popover = Gtk.Popover.new_from_model(this, menu);
             this._popoverVisibleChangedId =
@@ -361,12 +361,12 @@ var RoomListHeader = GObject.registerClass({
                server address, e.g. "GNOME (irc.gnome.org)" */
             let fullTitle = _("%s (%s)").format(accountName, server);
             this._popoverTitle.label = (accountName == server) ? accountName : fullTitle;
-            this._popoverStatus.label = '<sup>' + this._getStatusLabel() + '</sup>';
+            this._popoverStatus.label = `<sup>${this._getStatusLabel()}</sup>`;
         } else {
             let styleContext = this._popoverStatus.get_style_context();
             styleContext.remove_class('dim-label');
 
-            this._popoverTitle.label = '<b>' + _("Connection Problem") + '</b>';
+            this._popoverTitle.label = `<b>${_("Connection Problem")}</b>`;
             this._popoverStatus.label = this._getErrorLabel();
         }
     }
diff --git a/src/roomStack.js b/src/roomStack.js
index 79a7305..e9f4bc5 100644
--- a/src/roomStack.js
+++ b/src/roomStack.js
@@ -125,7 +125,7 @@ class SavePasswordConfirmationBar extends Gtk.Revealer {
         this._titleLabel = new Gtk.Label({ halign: Gtk.Align.START,
                                            valign: Gtk.Align.CENTER,
                                            wrap: true });
-        this._titleLabel.set_markup('<b>' + title + '</b>');
+        this._titleLabel.set_markup(`<b>${title}</b>`);
         box.add(this._titleLabel);
 
         let accountName = this._room.account.display_name;
@@ -155,7 +155,7 @@ class ChatPlaceholder extends Gtk.Overlay {
 
         let title = new Gtk.Label({ use_markup: true, halign: Gtk.Align.START,
                                     margin_start: 14 });
-        title.label = '<span letter_spacing="4500">%s</span>'.format(_("Polari"));
+        title.label = `<span letter_spacing="4500">${_("Polari")}</span>`;
         title.get_style_context().add_class('polari-background-title');
 
         let description = new Gtk.Label({ label: _("Join a room using the + button."),
diff --git a/src/serverRoomManager.js b/src/serverRoomManager.js
index db9ccc0..9680354 100644
--- a/src/serverRoomManager.js
+++ b/src/serverRoomManager.js
@@ -328,7 +328,7 @@ var ServerRoomList = GObject.registerClass({
                 let room = roomManager.lookupRoomByName(roomInfo.get_name(), this._account);
                 let sensitive = room == null;
                 let checked = !sensitive;
-                let count = '%d'.format(roomInfo.get_members_count(null));
+                let count = `${roomInfo.get_members_count(null)}`;
 
                 let { CHECKED, NAME, COUNT, SENSITIVE } = RoomListColumn;
                 let iter = store.insert_with_valuesv(-1,
diff --git a/src/tabCompletion.js b/src/tabCompletion.js
index ceab0a2..4edb4e9 100644
--- a/src/tabCompletion.js
+++ b/src/tabCompletion.js
@@ -39,7 +39,7 @@ var TabCompletion = class {
         let commands = Object.keys(IrcParser.knownCommands);
         for (let i = 0; i < commands.length; i++) {
             let row = new Gtk.ListBoxRow();
-            row._text = '/' + commands[i];
+            row._text = `/${commands[i]}`;
             row._casefoldedText = row._text.toLowerCase();
             row.add(new Gtk.Label({ label: row._text,
                                     halign: Gtk.Align.START,
@@ -159,9 +159,9 @@ var TabCompletion = class {
         this._previousWasCommand = this._isCommand;
 
         if (this._isCommand)
-            return row._text + ' ';
+            return `${row._text} `;
         if (this._startPos == 0 || this._isChained)
-            return row._text + ': ';
+            return `${row._text}: `;
         return row._text;
     }
 
diff --git a/src/telepathyClient.js b/src/telepathyClient.js
index 3d18f40..58fcd12 100644
--- a/src/telepathyClient.js
+++ b/src/telepathyClient.js
@@ -72,7 +72,7 @@ class SASLAuthHandler {
     _onSASLStatusChanged(proxy, sender, [status]) {
         let name = this._channel.connection.get_account().display_name;
         let statusString = (Object.keys(SASLStatus))[status];
-        debug('Auth status for server "%s": %s'.format(name, statusString));
+        debug(`Auth status for server "${name}": ${statusString}`);
 
         switch (status) {
             case SASLStatus.NOT_STARTED:
@@ -201,8 +201,7 @@ class TelepathyClient extends Tp.BaseClient {
     _onNetworkChanged(mon, connected) {
         let presence = connected ? Tp.ConnectionPresenceType.AVAILABLE
                                  : Tp.ConnectionPresenceType.OFFLINE;
-        debug('Network changed to %s'.format(connected ? 'available'
-                                                       : 'unavailable'));
+        debug(`Network changed to ${connected ? 'available' : 'unavailable'}`);
 
         this._accountsMonitor.visibleAccounts.forEach(a => {
             this._setAccountPresence(a, presence);
@@ -236,13 +235,12 @@ class TelepathyClient extends Tp.BaseClient {
         let msg = account.requested_status_message;
         let accountName = account.display_name;
 
-        debug('Setting presence of account "%s" to %s'.format(accountName,
-                                                              status));
+        debug(`Setting presence of account "${accountName}" to ${status}`);
         account.request_presence_async(presence, status, msg, (o, res) => {
             try {
                 account.request_presence_finish(res);
             } catch (e) {
-                log('Connection failed: ' + e.message);
+                log(`Connection failed: ${e.message}`);
             }
         });
     }
@@ -276,14 +274,14 @@ class TelepathyClient extends Tp.BaseClient {
         req.set_target_id(targetType, targetId);
         req.set_delegate_to_preferred_handler(true);
 
-        let preferredHandler = Tp.CLIENT_BUS_NAME_BASE + 'Polari';
+        let preferredHandler = `${Tp.CLIENT_BUS_NAME_BASE}Polari`;
         req.ensure_and_observe_channel_async(preferredHandler, cancellable,
             (o, res) => {
                 let channel = null;
                 try {
                     channel = req.ensure_and_observe_channel_finish(res);
                 } catch (e) {
-                    debug('Failed to ensure channel: ' + e.message);
+                    debug(`Failed to ensure channel: ${e.message}`);
                 }
 
                 if (callback)
@@ -316,7 +314,7 @@ class TelepathyClient extends Tp.BaseClient {
                     try {
                         r.send_identify_message_finish(res);
                     } catch (e) {
-                        log('Failed to send identify message: ' + e.message);
+                        log(`Failed to send identify message: ${e.message}`);
                     }
                     this._connectRooms(account);
                 });
@@ -333,7 +331,7 @@ class TelepathyClient extends Tp.BaseClient {
                 try {
                     c.send_message_finish(res);
                 } catch (e) {
-                    log('Failed to send message: ' + e.message);
+                    log(`Failed to send message: ${e.message}`);
                 }
             });
     }
@@ -414,7 +412,7 @@ class TelepathyClient extends Tp.BaseClient {
             try {
                 c.leave_finish(res);
             } catch (e) {
-                log('Failed to leave channel: ' + e.message);
+                log(`Failed to leave channel: ${e.message}`);
             }
         });
     }
@@ -534,11 +532,11 @@ class TelepathyClient extends Tp.BaseClient {
     }
 
     _getPendingNotificationID(room, id) {
-        return 'pending-message-%s-%d'.format(room.id, id);
+        return `pending-message-${room.id}-${id}`;
     }
 
     _getIdentifyNotificationID(accountPath) {
-        return 'identify-password-%s'.format(accountPath);
+        return `identify-password-${accountPath}`;
     }
 
     _createNotification(room, summary, body) {
diff --git a/src/userList.js b/src/userList.js
index 4b82734..a7a588c 100644
--- a/src/userList.js
+++ b/src/userList.js
@@ -381,14 +381,15 @@ var UserPopover = GObject.registerClass({
         if (this._globalStatusChangedId > 0)
             this._userTracker.disconnect(this._globalStatusChangedId);
         this._globalStatusChangedId =
-            this._userTracker.connect("status-changed::" + basenick,
+            this._userTracker.connect(`status-changed::${basenick}`,
                                       this._onStatusChanged.bind(this));
 
         if (this._contactsChangedId > 0)
             this._userTracker.disconnect(this._contactsChangedId);
-        this._contactsChangedId = this._userTracker.connect("contacts-changed::" + basenick, () => {
-            this._userDetails.user = this._userTracker.lookupContact(this._nickname);
-        });
+        this._contactsChangedId =
+            this._userTracker.connect(`contacts-changed::${basenick}`, () => {
+                this._userDetails.user = this._userTracker.lookupContact(this._nickname);
+            });
 
         this._onStatusChanged();
         this._updateDetailsContact();
@@ -511,7 +512,7 @@ class UserListRow extends Gtk.ListBoxRow {
             let preMatch = this._user.alias.substring(0, filterIndex);
             let theMatch = this._user.alias.substring(filterIndex, filterIndex + this._filter.length);
             let postMatch = this._user.alias.substring(filterIndex + this._filter.length);
-            this._label.label = preMatch + '<b>' + theMatch + '</b>' + postMatch;
+            this._label.label = `${preMatch} <b> ${theMatch} </b> ${postMatch}`;
         }
     }
 
diff --git a/src/userTracker.js b/src/userTracker.js
index 390f8ad..5b529dc 100644
--- a/src/userTracker.js
+++ b/src/userTracker.js
@@ -203,7 +203,7 @@ const UserTracker = GObject.registerClass({
         if (room.type == Tp.HandleType.ROOM) {
             let map = this._baseNickContacts;
             if (this._pushMember(map, baseNick, member) == 1) {
-                this.emit("status-changed::" + baseNick, baseNick, status);
+                this.emit(`status-changed::${baseNick}`, baseNick, status);
 
                 if (this._shouldNotifyNick(member.alias))
                     this._notifyNickAvailable(member, room);
@@ -212,7 +212,7 @@ const UserTracker = GObject.registerClass({
             }
         }
 
-        this.emit("contacts-changed::" + baseNick, member.alias);
+        this.emit(`contacts-changed::${baseNick}`, member.alias);
     }
 
     _popMember(map, baseNick, member) {
@@ -237,7 +237,7 @@ const UserTracker = GObject.registerClass({
         [found, nContacts] = this._popMember(map, baseNick, member);
         if (found) {
             if (nContacts == 0) {
-                this.emit("status-changed::" + baseNick, member.alias, status);
+                this.emit(`status-changed::${baseNick}`, member.alias, status);
                 this._setNotifyActionEnabled(member.alias, true);
 
                 this._app.withdraw_notification(this._getNotifyActionNameInternal(member.alias));
@@ -248,7 +248,7 @@ const UserTracker = GObject.registerClass({
                 for (let r of this._roomData.keys())
                     this._untrackMember(member, r);
             }
-            this.emit("contacts-changed::" + baseNick, member.alias);
+            this.emit(`contacts-changed::${baseNick}`, member.alias);
         }
     }
 
@@ -330,9 +330,9 @@ const UserTracker = GObject.registerClass({
     }
 
     _getNotifyActionNameInternal(nickName) {
-        return 'notify-user-' +
-               this._account.get_path_suffix() + '-' +
-               Polari.util_get_basenick(nickName);
+        let pathSuffix = this._account.get_path_suffix();
+        let baseNick = Polari.util_get_basenick(nickName);
+        return `notify-user-${pathSuffix}-${baseNick}`;
     }
 
     getNotifyActionName(nickName) {
@@ -355,6 +355,6 @@ const UserTracker = GObject.registerClass({
             this._app.add_action(action);
         }
 
-        return 'app.' + name;
+        return `app.${name}`;
     }
 });
diff --git a/src/utils.js b/src/utils.js
index 830f182..2b0341b 100644
--- a/src/utils.js
+++ b/src/utils.js
@@ -56,6 +56,7 @@ const _notTrailingJunk = '[^\\s`!()\\[\\]{};:\'\\".,<>?\u00AB\u00BB\u201C\u201D\
 // a lot of false positives, so whitelist some useful ones and hope nobody complains :-)
 const _schemeWhitelist = ['geo', 'mailto', 'man', 'info', 'ghelp', 'help'];
 
+/* eslint-disable prefer-template */
 const _urlRegexp = new RegExp(
     '(^|' + _leadingJunk + ')' +
     '(' +
@@ -81,6 +82,7 @@ const _urlRegexp = new RegExp(
             _notTrailingJunk +                    // last non-junk char
         ')' +
     ')', 'gi');
+/* eslint-enable prefer-template */
 
 const _channelRegexp = new RegExp('(^| )#([\\w\\+\\.-]+)', 'g');
 
@@ -119,8 +121,8 @@ function _storePassword(schema, label, account, password, callback) {
             let success = Secret.password_store_finish(res);
             callback(success);
         } catch (e) {
-            log('Failed to store password for account "%s": %s'.format(
-                account.display_name, e.message));
+            let name = account.display_name;
+            log(`Failed to store password for account "${name}": ${e.message}`);
             callback(false);
         }
     });
@@ -141,8 +143,8 @@ function _lookupPassword(schema, account, callback) {
             let password = Secret.password_lookup_finish(res);
             callback(password);
         } catch (e) {
-            log('Failed to lookup password for account "%s": %s'.format(
-                account.display_name, e.message));
+            let name = account.display_name;
+            log(`Failed to lookup password for account "${name}": ${e.message}`);
             callback(null);
         }
     });
@@ -166,8 +168,8 @@ function findUrls(str) {
 function findChannels(str, server) {
     let res = [], match;
     while ((match = _channelRegexp.exec(str)))
-        res.push({ url: 'irc://%s/%s'.format(server, match[2]),
-                   name: '#' + match[2],
+        res.push({ url: `irc://${server}/${match[2]}`,
+                   name: `#${match[2]}`,
                    pos: match.index + match[1].length });
     return res;
 }
@@ -182,7 +184,7 @@ function openURL(url, timestamp) {
     } catch (e) {
         let n = new AppNotifications.SimpleOutput(_("Failed to open link"));
         app.notificationQueue.addNotification(n);
-        debug("failed to open %s: %s".format(url, e.message));
+        debug(`Failed to open ${url}: ${e.message}`);
     }
 }
 
@@ -202,7 +204,7 @@ function updateTerms(terms, str) {
 
 function _getGpasteExpire(callback) {
     let session = new Soup.Session();
-    let paramUrl = GPASTE_BASEURL + 'api/json/parameter/expire';
+    let paramUrl = `${GPASTE_BASEURL}api/json/parameter/expire`;
     let message = Soup.form_request_new_from_hash('GET', paramUrl, {});
     session.queue_message(message, (s, message) => {
         if (message.status_code != Soup.KnownStatusCode.OK) {
@@ -241,7 +243,7 @@ function gpaste(text, title, callback) {
     }
 
     if (title.length > MAX_PASTE_TITLE_LENGTH)
-        title = title.substr(0, MAX_PASTE_TITLE_LENGTH - 1) + '…';
+        title = `${title.substr(0, MAX_PASTE_TITLE_LENGTH - 1)}…`;
 
     let params = {
         title: title,
@@ -251,7 +253,7 @@ function gpaste(text, title, callback) {
     };
 
     let session = new Soup.Session();
-    let createUrl = GPASTE_BASEURL + 'api/json/create';
+    let createUrl = `${GPASTE_BASEURL}api/json/create`;
     let message = Soup.form_request_new_from_hash('POST', createUrl, params);
     session.queue_message(message, (s, message) => {
         if (message.status_code != Soup.KnownStatusCode.OK) {
@@ -266,7 +268,7 @@ function gpaste(text, title, callback) {
             log(e.message);
         }
         if (info.result && info.result.id)
-            callback(GPASTE_BASEURL + info.result.id);
+            callback(`${GPASTE_BASEURL}${info.result.id}`);
         else
             callback(null);
     });
@@ -289,7 +291,7 @@ function imgurPaste(pixbuf, title, callback) {
     let message = Soup.form_request_new_from_hash('POST', createUrl, params);
 
     let requestHeaders = message.request_headers;
-    requestHeaders.append('Authorization', 'Client-ID ' + IMGUR_CLIENT_ID);
+    requestHeaders.append('Authorization', `Client-ID ${IMGUR_CLIENT_ID}`);
     session.queue_message(message, (s, message) => {
         if (message.status_code != Soup.KnownStatusCode.OK) {
             callback(null);



[Date Prev][Date Next]   [Thread Prev][Thread Next]   [Thread Index] [Date Index] [Author Index]