Source-Tag: v1.0.3 Manifest-SHA256: b7b09bf48f9e092ed8ad82f99c0319d6c3837d0a1549bd0cc4a374276c0f3896
103 lines
5.8 KiB
PHP
103 lines
5.8 KiB
PHP
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);
|
|
});
|