Sanitized public release v1.0.3
Source-Tag: v1.0.3 Manifest-SHA256: b7b09bf48f9e092ed8ad82f99c0319d6c3837d0a1549bd0cc4a374276c0f3896
This commit is contained in:
@@ -0,0 +1,102 @@
|
||||
var neoColourOptions = [
|
||||
{name: 'weechat.color.chat_nick_self', label: 'Your nickname', variable: '--neorelay-nick-self'},
|
||||
{name: 'weechat.color.chat_nick', label: 'Regular nickname fallback', variable: '--neorelay-nick'},
|
||||
{name: 'weechat.color.chat_nick_other', label: 'Other private nicknames', variable: '--neorelay-nick-other'},
|
||||
{name: 'weechat.color.nicklist_away', label: 'Away / AFK', variable: '--neorelay-nick-away'},
|
||||
{name: 'weechat.color.chat_highlight', label: 'Highlight foreground', variable: '--neorelay-chat-highlight'},
|
||||
{name: 'weechat.color.chat_highlight_bg', label: 'Highlight background', variable: '--neorelay-chat-highlight-bg'},
|
||||
{name: 'weechat.color.chat_time', label: 'Timestamp', variable: '--neorelay-chat-time'}
|
||||
];
|
||||
var neoPrefixOption = 'irc.color.nick_prefixes';
|
||||
var neoPaletteOption = 'weechat.color.chat_nick_colors';
|
||||
$scope.neoWeeChatColours = {loading: false, status: '', items: neoColourOptions, rows: {}, values: {}, prefixes: {}, prefixRaw: '', palettePreview: []};
|
||||
$scope.neoWeeChatColourPreview = neoResolveWeeChatColour;
|
||||
$scope.updateNeoPalettePreview = function() {
|
||||
$scope.neoWeeChatColours.palettePreview = String($scope.neoWeeChatColours.values[neoPaletteOption] || '').split(',').map(function(value) { return value.trim(); }).filter(neoValidWeeChatColour);
|
||||
};
|
||||
|
||||
function neoParsePrefixes(value) {
|
||||
var result = {};
|
||||
String(value || '').split(';').forEach(function(entry) {
|
||||
var match = entry.match(/^([A-Za-z*]):([^;]+)$/);
|
||||
if (match) result[match[1]] = match[2].replace(/^[*!/_|]+/, '');
|
||||
});
|
||||
return result;
|
||||
}
|
||||
|
||||
function neoApplyRelayColours() {
|
||||
neoColourOptions.forEach(function(item) {
|
||||
var value = $scope.neoWeeChatColours.values[item.name];
|
||||
document.documentElement.style.setProperty(item.variable, neoResolveWeeChatColour(value));
|
||||
});
|
||||
var prefixes = $scope.neoWeeChatColours.prefixes;
|
||||
document.documentElement.style.setProperty('--neorelay-nick-op', neoResolveWeeChatColour(prefixes.o || prefixes.a || prefixes.q || prefixes['*']));
|
||||
document.documentElement.style.setProperty('--neorelay-nick-halfop', neoResolveWeeChatColour(prefixes.h || prefixes['*']));
|
||||
document.documentElement.style.setProperty('--neorelay-nick-voice', neoResolveWeeChatColour(prefixes.v || prefixes['*']));
|
||||
}
|
||||
|
||||
$scope.loadNeoWeeChatColours = function() {
|
||||
if (!$rootScope.connected || $scope.neoWeeChatColours.loading) return;
|
||||
$scope.neoWeeChatColours.loading = true;
|
||||
$scope.neoWeeChatColours.status = 'Loading WeeChat colours...';
|
||||
var names = neoColourOptions.map(function(item) { return item.name; }).concat([neoPrefixOption, neoPaletteOption]);
|
||||
Promise.all(names.map(function(name) { return connection.requestInfolist('option', 0, name); })).then(function(results) {
|
||||
$scope.$applyAsync(function() {
|
||||
results.forEach(function(rows) {
|
||||
if (!rows[0]) return;
|
||||
var row = neoNormalizeOption(rows[0]);
|
||||
neoLoadedOptions[row.name] = row;
|
||||
$scope.neoWeeChatColours.rows[row.name] = row;
|
||||
$scope.neoWeeChatColours.values[row.name] = row.value;
|
||||
});
|
||||
$scope.neoWeeChatColours.prefixRaw = $scope.neoWeeChatColours.values[neoPrefixOption] || '';
|
||||
$scope.neoWeeChatColours.prefixes = neoParsePrefixes($scope.neoWeeChatColours.prefixRaw);
|
||||
$scope.updateNeoPalettePreview();
|
||||
neoApplyRelayColours();
|
||||
$scope.neoWeeChatColours.loading = false;
|
||||
$scope.neoWeeChatColours.status = 'Loaded from WeeChat.';
|
||||
});
|
||||
}, function() {
|
||||
$scope.$applyAsync(function() {
|
||||
$scope.neoWeeChatColours.loading = false;
|
||||
$scope.neoWeeChatColours.status = 'Unable to load WeeChat colours.';
|
||||
});
|
||||
});
|
||||
};
|
||||
|
||||
$scope.setNeoWeeChatColour = function(name) {
|
||||
var row = $scope.neoWeeChatColours.rows[name];
|
||||
var value = $scope.neoWeeChatColours.values[name];
|
||||
neoWriteOption(row, value, function(updated) {
|
||||
$scope.neoWeeChatColours.values[name] = updated.value;
|
||||
if (name === neoPaletteOption) $scope.updateNeoPalettePreview();
|
||||
neoApplyRelayColours();
|
||||
$scope.neoWeeChatColours.status = 'Saved ' + name + ' to WeeChat.';
|
||||
}, function(message) { $scope.neoWeeChatColours.status = message; });
|
||||
};
|
||||
|
||||
$scope.setNeoNickPrefixColour = function(mode) {
|
||||
var row = $scope.neoWeeChatColours.rows[neoPrefixOption];
|
||||
if (!row || !neoValidWeeChatColour($scope.neoWeeChatColours.prefixes[mode])) return;
|
||||
var found = false;
|
||||
var entries = String($scope.neoWeeChatColours.prefixRaw || '').split(';').filter(Boolean).map(function(entry) {
|
||||
if (entry.slice(0, 2) === mode + ':') {
|
||||
found = true;
|
||||
return mode + ':' + $scope.neoWeeChatColours.prefixes[mode];
|
||||
}
|
||||
return entry;
|
||||
});
|
||||
if (!found) entries.push(mode + ':' + $scope.neoWeeChatColours.prefixes[mode]);
|
||||
var value = entries.join(';');
|
||||
neoWriteOption(row, value, function(updated) {
|
||||
$scope.neoWeeChatColours.prefixRaw = updated.value;
|
||||
$scope.neoWeeChatColours.values[neoPrefixOption] = updated.value;
|
||||
$scope.neoWeeChatColours.prefixes = neoParsePrefixes(updated.value);
|
||||
neoApplyRelayColours();
|
||||
$scope.neoWeeChatColours.status = 'Saved IRC prefix colours to WeeChat.';
|
||||
}, function(message) { $scope.neoWeeChatColours.status = message; });
|
||||
};
|
||||
|
||||
$scope.$watch(function() { return $rootScope.connected; }, function(connected) {
|
||||
if (connected) $timeout($scope.loadNeoWeeChatColours, 250);
|
||||
});
|
||||
Reference in New Issue
Block a user