Implement full support of WeeChat text styling

with-route-provider
Philippe Proulx 12 years ago
parent ea798ef3c4
commit 9772da0095
  1. 1929
      css/style.css
  2. 5
      index.html
  3. 71
      js/models.js
  4. 15
      js/websockets.js
  5. 1752
      js/weechat.js

File diff suppressed because it is too large Load Diff

@ -7,6 +7,7 @@
<title ng-bind-template="WeeChat {{ pageTitle}}"></title> <title ng-bind-template="WeeChat {{ pageTitle}}"></title>
<link href="//netdna.bootstrapcdn.com/bootstrap/3.0.0/css/bootstrap.min.css" rel="stylesheet" media="screen"> <link href="//netdna.bootstrapcdn.com/bootstrap/3.0.0/css/bootstrap.min.css" rel="stylesheet" media="screen">
<link rel="shortcut icon" type="image/png" href="img/favicon.png" > <link rel="shortcut icon" type="image/png" href="img/favicon.png" >
<link href="css/style.css" rel="stylesheet" media="screen">
<link href="css/glowingbear.css" rel="stylesheet" media="screen"> <link href="css/glowingbear.css" rel="stylesheet" media="screen">
<script src="//ajax.googleapis.com/ajax/libs/angularjs/1.2.0-rc.2/angular.min.js"></script> <script src="//ajax.googleapis.com/ajax/libs/angularjs/1.2.0-rc.2/angular.min.js"></script>
<script src="//ajax.googleapis.com/ajax/libs/angularjs/1.2.0-rc.2/angular-sanitize.min.js"></script> <script src="//ajax.googleapis.com/ajax/libs/angularjs/1.2.0-rc.2/angular-sanitize.min.js"></script>
@ -221,9 +222,9 @@ $ openssl req -nodes -newkey rsa:2048 -keyout relay.pem -x509 -days 365 -out rel
{{ bufferline.date | date:'HH:mm' }} {{ bufferline.date | date:'HH:mm' }}
</span> </span>
</td> </td>
<td class="prefix vertical-line"><span ng-repeat="part in bufferline.prefix" style="{{ part.fg }}">{{ part.text }}</span></td> <td class="prefix vertical-line"><span ng-repeat="part in bufferline.prefix" ng-class="{{ part.classes }}">{{ part.text }}</span></td>
<td class="message"> <td class="message">
<span ng-repeat="part in bufferline.content" class="text" style="{{ part.fg }}" ng-bind-html="part.text"></span> <span ng-repeat="part in bufferline.content" class="text" ng-class="{{ part.classes }}" ng-bind-html="part.text"></span>
<div ng-repeat="metadata in bufferline.metadata"> <div ng-repeat="metadata in bufferline.metadata">
<div ng-show="metadata.visible"> <div ng-show="metadata.visible">

@ -4,7 +4,7 @@
*/ */
var models = angular.module('weechatModels', []); var models = angular.module('weechatModels', []);
models.service('models', ['$rootScope', 'colors', function($rootScope, colors) { models.service('models', ['$rootScope', function($rootScope) {
/* /*
* Buffer class * Buffer class
*/ */
@ -59,36 +59,64 @@ models.service('models', ['$rootScope', 'colors', function($rootScope, colors) {
* BufferLine class * BufferLine class
*/ */
this.BufferLine = function(message) { this.BufferLine = function(message) {
var buffer = message['buffer'];
var date = message['date'];
/* function addClasses(textElements) {
* Parse the text elements from the buffer line added var typeToClassPrefixFg = {
* 'option': 'cof-',
* @param message weechat message 'weechat': 'cwf-',
*/ 'ext': 'cef-'
function parseLineAddedTextElements(message) { };
var text = colors.parse(message); var typeToClassPrefixBg = {
text_elements =_.map(text, function(text_element) { 'option': 'cob-',
if (text_element && ('fg' in text_element)) { 'weechat': 'cwb-',
text_element['fg'] = colors.prepareCss(text_element['fg']); 'ext': 'ceb-'
};
textElements.forEach(function(textEl) {
textEl.classes = [];
// foreground color
var prefix = typeToClassPrefixFg[textEl.fgColor.type];
textEl.classes.push(prefix + textEl.fgColor.name);
// background color
prefix = typeToClassPrefixBg[textEl.bgColor.type];
textEl.classes.push(prefix + textEl.bgColor.name);
// attributes
if (textEl.attrs.name !== null) {
textEl.classes.push('coa-' + textEl.attrs.name);
}
var allReset = true;
for (var attr in textEl.attrs.override) {
if (textEl.attrs.override[attr]) {
allReset = false;
break;
}
}
if (allReset) {
textEl.classes.push('a-reset');
} else for (var attr in textEl.attrs.override) {
val = textEl.attrs.override[attr];
if (val) {
textEl.classes.push('a-' + attr);
} else {
textEl.classes.push('a-no-' + attr);
}
} }
// TODO: parse background as well
return text_element;
}); });
return text_elements;
} }
var buffer = message['buffer']; var prefix = weeChat.Protocol.rawText2Rich(message['prefix']);
var date = message['date']; addClasses(prefix);
var prefix = parseLineAddedTextElements(message['prefix']);
var tags_array = message['tags_array']; var tags_array = message['tags_array'];
var displayed = message['displayed']; var displayed = message['displayed'];
var highlight = message['highlight']; var highlight = message['highlight'];
var content = parseLineAddedTextElements(message['message']); var content = weeChat.Protocol.rawText2Rich(message['message']);
addClasses(content);
var rtext = ""; var rtext = "";
if(content[0] != undefined) { if(content[0] != undefined) {
@ -104,6 +132,7 @@ models.service('models', ['$rootScope', 'colors', function($rootScope, colors) {
highlight: highlight, highlight: highlight,
displayed: displayed, displayed: displayed,
text: rtext, text: rtext,
} }
} }

@ -14,16 +14,7 @@ weechat.filter('toArray', function () {
} }
}); });
weechat.factory('colors', [function($scope) { weechat.factory('handlers', ['$rootScope', 'models', 'plugins', function($rootScope, models, plugins) {
return {
prepareCss: weeChat.color.prepareCss,
parse: weeChat.color.parse
};
}]);
weechat.factory('handlers', ['$rootScope', 'colors', 'models', 'plugins', function($rootScope, colors, models, plugins) {
var handleBufferClosing = function(message) { var handleBufferClosing = function(message) {
var bufferMessage = message['objects'][0]['content'][0]; var bufferMessage = message['objects'][0]['content'][0];
@ -147,7 +138,7 @@ weechat.factory('handlers', ['$rootScope', 'colors', 'models', 'plugins', functi
}]); }]);
weechat.factory('connection', ['$q', '$rootScope', '$log', '$store', 'handlers', 'colors', 'models', function($q, $rootScope, $log, storage, handlers, colors, models) { weechat.factory('connection', ['$q', '$rootScope', '$log', '$store', 'handlers', 'models', function($q, $rootScope, $log, storage, handlers, models) {
protocol = new weeChat.Protocol(); protocol = new weeChat.Protocol();
var websocket = null; var websocket = null;
@ -570,4 +561,4 @@ weechat.controller('WeechatCtrl', ['$rootScope', '$scope', '$store', '$timeout',
} }
}] }]
); );

File diff suppressed because it is too large Load Diff
Loading…
Cancel
Save