diff --git a/.gitignore b/.gitignore index 253b700..83c9eed 100644 --- a/.gitignore +++ b/.gitignore @@ -2,3 +2,7 @@ bower_components/ node_modules/ min.js min.map + +# Electron stuff +fonts/ +Glowing\ Bear-*/ diff --git a/.travis.yml b/.travis.yml index 65e08bb..b84837b 100644 --- a/.travis.yml +++ b/.travis.yml @@ -1,6 +1,7 @@ language: node_js node_js: - - "0.10" + - "8" +dist: trusty install: "npm install" script: "sh -e run_tests.sh" notifications: diff --git a/3rdparty/favico-0.3.10.min.js b/3rdparty/favico-0.3.10.min.js new file mode 100644 index 0000000..b10aeec --- /dev/null +++ b/3rdparty/favico-0.3.10.min.js @@ -0,0 +1,8 @@ +/** + * @license MIT or GPL-2.0 + * @fileOverview Favico animations + * @author Miroslav Magda, http://blog.ejci.net + * @source: https://github.com/ejci/favico.js + * @version 0.3.10 + */ +!function(){var e=function(e){"use strict";function t(e){if(e.paused||e.ended||g)return!1;try{f.clearRect(0,0,h,l),f.drawImage(e,0,0,h,l)}catch(o){}m=setTimeout(function(){t(e)},S.duration),O.setIcon(s)}function o(e){var t=/^#?([a-f\d])([a-f\d])([a-f\d])$/i;e=e.replace(t,function(e,t,o,n){return t+t+o+o+n+n});var o=/^#?([a-f\d]{2})([a-f\d]{2})([a-f\d]{2})$/i.exec(e);return o?{r:parseInt(o[1],16),g:parseInt(o[2],16),b:parseInt(o[3],16)}:!1}function n(e,t){var o,n={};for(o in e)n[o]=e[o];for(o in t)n[o]=t[o];return n}function r(){return b.hidden||b.msHidden||b.webkitHidden||b.mozHidden}e=e?e:{};var i,a,l,h,s,f,c,u,d,y,w,g,x,p,m,b,v={bgColor:"#d00",textColor:"#fff",fontFamily:"sans-serif",fontStyle:"bold",type:"circle",position:"down",animation:"slide",elementId:!1,element:null,dataUrl:!1,win:window};x={},x.ff="undefined"!=typeof InstallTrigger,x.chrome=!!window.chrome,x.opera=!!window.opera||navigator.userAgent.indexOf("Opera")>=0,x.ie=/*@cc_on!@*/!1,x.safari=Object.prototype.toString.call(window.HTMLElement).indexOf("Constructor")>0,x.supported=x.chrome||x.ff||x.opera;var C=[];w=function(){},u=g=!1;var E=function(){i=n(v,e),i.bgColor=o(i.bgColor),i.textColor=o(i.textColor),i.position=i.position.toLowerCase(),i.animation=S.types[""+i.animation]?i.animation:v.animation,b=i.win.document;var t=i.position.indexOf("up")>-1,r=i.position.indexOf("left")>-1;if(t||r)for(var u in S.types)for(var d=0;d0?c.height:32,h=c.width>0?c.width:32,s.height=l,s.width=h,f=s.getContext("2d"),M.ready()},c.setAttribute("src",w.getAttribute("href"))):(l=32,h=32,c.height=l,c.width=h,s.height=l,s.width=h,f=s.getContext("2d"),M.ready())},M={};M.ready=function(){u=!0,M.reset(),w()},M.reset=function(){u&&(C=[],d=!1,y=!1,f.clearRect(0,0,h,l),f.drawImage(c,0,0,h,l),O.setIcon(s),window.clearTimeout(p),window.clearTimeout(m))},M.start=function(){if(u&&!y){var e=function(){d=C[0],y=!1,C.length>0&&(C.shift(),M.start())};if(C.length>0){y=!0;var t=function(){["type","animation","bgColor","textColor","fontFamily","fontStyle"].forEach(function(e){e in C[0].options&&(i[e]=C[0].options[e])}),S.run(C[0].options,function(){e()},!1)};d?S.run(d.options,function(){t()},!0):t()}}};var A={},I=function(e){return e.n="number"==typeof e.n?Math.abs(0|e.n):e.n,e.x=h*e.x,e.y=l*e.y,e.w=h*e.w,e.h=l*e.h,e.len=(""+e.n).length,e};A.circle=function(e){e=I(e);var t=!1;2===e.len?(e.x=e.x-.4*e.w,e.w=1.4*e.w,t=!0):e.len>=3&&(e.x=e.x-.65*e.w,e.w=1.65*e.w,t=!0),f.clearRect(0,0,h,l),f.drawImage(c,0,0,h,l),f.beginPath(),f.font=i.fontStyle+" "+Math.floor(e.h*(e.n>99?.85:1))+"px "+i.fontFamily,f.textAlign="center",t?(f.moveTo(e.x+e.w/2,e.y),f.lineTo(e.x+e.w-e.h/2,e.y),f.quadraticCurveTo(e.x+e.w,e.y,e.x+e.w,e.y+e.h/2),f.lineTo(e.x+e.w,e.y+e.h-e.h/2),f.quadraticCurveTo(e.x+e.w,e.y+e.h,e.x+e.w-e.h/2,e.y+e.h),f.lineTo(e.x+e.h/2,e.y+e.h),f.quadraticCurveTo(e.x,e.y+e.h,e.x,e.y+e.h-e.h/2),f.lineTo(e.x,e.y+e.h/2),f.quadraticCurveTo(e.x,e.y,e.x+e.h/2,e.y)):f.arc(e.x+e.w/2,e.y+e.h/2,e.h/2,0,2*Math.PI),f.fillStyle="rgba("+i.bgColor.r+","+i.bgColor.g+","+i.bgColor.b+","+e.o+")",f.fill(),f.closePath(),f.beginPath(),f.stroke(),f.fillStyle="rgba("+i.textColor.r+","+i.textColor.g+","+i.textColor.b+","+e.o+")","number"==typeof e.n&&e.n>999?f.fillText((e.n>9999?9:Math.floor(e.n/1e3))+"k+",Math.floor(e.x+e.w/2),Math.floor(e.y+e.h-.2*e.h)):f.fillText(e.n,Math.floor(e.x+e.w/2),Math.floor(e.y+e.h-.15*e.h)),f.closePath()},A.rectangle=function(e){e=I(e);var t=!1;2===e.len?(e.x=e.x-.4*e.w,e.w=1.4*e.w,t=!0):e.len>=3&&(e.x=e.x-.65*e.w,e.w=1.65*e.w,t=!0),f.clearRect(0,0,h,l),f.drawImage(c,0,0,h,l),f.beginPath(),f.font=i.fontStyle+" "+Math.floor(e.h*(e.n>99?.9:1))+"px "+i.fontFamily,f.textAlign="center",f.fillStyle="rgba("+i.bgColor.r+","+i.bgColor.g+","+i.bgColor.b+","+e.o+")",f.fillRect(e.x,e.y,e.w,e.h),f.fillStyle="rgba("+i.textColor.r+","+i.textColor.g+","+i.textColor.b+","+e.o+")","number"==typeof e.n&&e.n>999?f.fillText((e.n>9999?9:Math.floor(e.n/1e3))+"k+",Math.floor(e.x+e.w/2),Math.floor(e.y+e.h-.2*e.h)):f.fillText(e.n,Math.floor(e.x+e.w/2),Math.floor(e.y+e.h-.15*e.h)),f.closePath()};var T=function(e,t){t=("string"==typeof t?{animation:t}:t)||{},w=function(){try{if("number"==typeof e?e>0:""!==e){var n={type:"badge",options:{n:e}};if("animation"in t&&S.types[""+t.animation]&&(n.options.animation=""+t.animation),"type"in t&&A[""+t.type]&&(n.options.type=""+t.type),["bgColor","textColor"].forEach(function(e){e in t&&(n.options[e]=o(t[e]))}),["fontStyle","fontFamily"].forEach(function(e){e in t&&(n.options[e]=t[e])}),C.push(n),C.length>100)throw new Error("Too many badges requests in queue.");M.start()}else M.reset()}catch(r){throw new Error("Error setting badge. Message: "+r.message)}},u&&w()},U=function(e){w=function(){try{var t=e.width,o=e.height,n=document.createElement("img"),r=o/l>t/h?t/h:o/l;n.setAttribute("crossOrigin","anonymous"),n.onload=function(){f.clearRect(0,0,h,l),f.drawImage(n,0,0,h,l),O.setIcon(s)},n.setAttribute("src",e.getAttribute("src")),n.height=o/r,n.width=t/r}catch(i){throw new Error("Error setting image. Message: "+i.message)}},u&&w()},R=function(e){w=function(){try{if("stop"===e)return g=!0,M.reset(),void(g=!1);e.addEventListener("play",function(){t(this)},!1)}catch(o){throw new Error("Error setting video. Message: "+o.message)}},u&&w()},L=function(e){if(window.URL&&window.URL.createObjectURL||(window.URL=window.URL||{},window.URL.createObjectURL=function(e){return e}),x.supported){var o=!1;navigator.getUserMedia=navigator.getUserMedia||navigator.oGetUserMedia||navigator.msGetUserMedia||navigator.mozGetUserMedia||navigator.webkitGetUserMedia,w=function(){try{if("stop"===e)return g=!0,M.reset(),void(g=!1);o=document.createElement("video"),o.width=h,o.height=l,navigator.getUserMedia({video:!0,audio:!1},function(e){o.src=URL.createObjectURL(e),o.play(),t(o)},function(){})}catch(n){throw new Error("Error setting webcam. Message: "+n.message)}},u&&w()}},O={};O.getIcons=function(){var e=[],t=function(){for(var e=[],t=b.getElementsByTagName("head")[0].getElementsByTagName("link"),o=0;o=0?(A[i.type](n(e,l[a])),p=setTimeout(function(){o?a-=1:a+=1,S.run(e,t,o,a)},S.duration),O.setIcon(s),void 0):void t()},E(),{badge:T,video:R,image:U,webcam:L,reset:M.reset,browser:{supported:x.supported}}};"undefined"!=typeof define&&define.amd?define([],function(){return e}):"undefined"!=typeof module&&module.exports?module.exports=e:this.Favico=e}(); diff --git a/3rdparty/favico-0.3.5.min.js b/3rdparty/favico-0.3.5.min.js deleted file mode 100644 index c4630af..0000000 --- a/3rdparty/favico-0.3.5.min.js +++ /dev/null @@ -1,7 +0,0 @@ -/** - * @license MIT - * @fileOverview Favico animations - * @author Miroslav Magda, http://blog.ejci.net - * @version 0.3.5 - */ -!function(){var e=function(e){"use strict";function t(e){if(e.paused||e.ended||w)return!1;try{l.clearRect(0,0,s,h),l.drawImage(e,0,0,s,h)}catch(o){}p=setTimeout(t,O.duration,e),L.setIcon(c)}function o(e){var t=/^#?([a-f\d])([a-f\d])([a-f\d])$/i;e=e.replace(t,function(e,t,o,n){return t+t+o+o+n+n});var o=/^#?([a-f\d]{2})([a-f\d]{2})([a-f\d]{2})$/i.exec(e);return o?{r:parseInt(o[1],16),g:parseInt(o[2],16),b:parseInt(o[3],16)}:!1}function n(e,t){var o,n={};for(o in e)n[o]=e[o];for(o in t)n[o]=t[o];return n}function i(){return document.hidden||document.msHidden||document.webkitHidden||document.mozHidden}e=e?e:{};var r,a,h,s,c,l,f,d,u,y,g,w,m,x,p,b={bgColor:"#d00",textColor:"#fff",fontFamily:"sans-serif",fontStyle:"bold",type:"circle",position:"down",animation:"slide",elementId:!1};m={},m.ff="undefined"!=typeof InstallTrigger,m.chrome=!!window.chrome,m.opera=!!window.opera||navigator.userAgent.indexOf("Opera")>=0,m.ie=/*@cc_on!@*/!1,m.safari=Object.prototype.toString.call(window.HTMLElement).indexOf("Constructor")>0,m.supported=m.chrome||m.ff||m.opera;var v=[];g=function(){},d=w=!1;var C=function(){r=n(b,e),r.bgColor=o(r.bgColor),r.textColor=o(r.textColor),r.position=r.position.toLowerCase(),r.animation=O.types[""+r.animation]?r.animation:b.animation;var t=r.position.indexOf("up")>-1,i=r.position.indexOf("left")>-1;if(t||i)for(var d=0;d0?f.height:32,s=f.width>0?f.width:32,c.height=h,c.width=s,l=c.getContext("2d"),M.ready()}):(f.setAttribute("src",""),h=32,s=32,f.height=h,f.width=s,c.height=h,c.width=s,l=c.getContext("2d"),M.ready())}catch(y){throw"Error initializing favico. Message: "+y.message}},M={};M.ready=function(){d=!0,M.reset(),g()},M.reset=function(){d&&(v=[],u=!1,l.clearRect(0,0,s,h),l.drawImage(f,0,0,s,h),L.setIcon(c),window.clearTimeout(x),window.clearTimeout(p))},M.start=function(){if(d&&!y){var e=function(){u=v[0],y=!1,v.length>0&&(v.shift(),M.start())};if(v.length>0){y=!0;var t=function(){["type","animation","bgColor","textColor","fontFamily","fontStyle"].forEach(function(e){e in v[0].options&&(r[e]=v[0].options[e])}),O.run(v[0].options,function(){e()},!1)};u?O.run(u.options,function(){t()},!0):t()}}};var I={},E=function(e){return e.n="number"==typeof e.n?Math.abs(0|e.n):e.n,e.x=s*e.x,e.y=h*e.y,e.w=s*e.w,e.h=h*e.h,e.len=(""+e.n).length,e};I.circle=function(e){e=E(e);var t=!1;2===e.len?(e.x=e.x-.4*e.w,e.w=1.4*e.w,t=!0):e.len>=3&&(e.x=e.x-.65*e.w,e.w=1.65*e.w,t=!0),l.clearRect(0,0,s,h),l.drawImage(f,0,0,s,h),l.beginPath(),l.font=r.fontStyle+" "+Math.floor(e.h*(e.n>99?.85:1))+"px "+r.fontFamily,l.textAlign="center",t?(l.moveTo(e.x+e.w/2,e.y),l.lineTo(e.x+e.w-e.h/2,e.y),l.quadraticCurveTo(e.x+e.w,e.y,e.x+e.w,e.y+e.h/2),l.lineTo(e.x+e.w,e.y+e.h-e.h/2),l.quadraticCurveTo(e.x+e.w,e.y+e.h,e.x+e.w-e.h/2,e.y+e.h),l.lineTo(e.x+e.h/2,e.y+e.h),l.quadraticCurveTo(e.x,e.y+e.h,e.x,e.y+e.h-e.h/2),l.lineTo(e.x,e.y+e.h/2),l.quadraticCurveTo(e.x,e.y,e.x+e.h/2,e.y)):l.arc(e.x+e.w/2,e.y+e.h/2,e.h/2,0,2*Math.PI),l.fillStyle="rgba("+r.bgColor.r+","+r.bgColor.g+","+r.bgColor.b+","+e.o+")",l.fill(),l.closePath(),l.beginPath(),l.stroke(),l.fillStyle="rgba("+r.textColor.r+","+r.textColor.g+","+r.textColor.b+","+e.o+")","number"==typeof e.n&&e.n>999?l.fillText((e.n>9999?9:Math.floor(e.n/1e3))+"k+",Math.floor(e.x+e.w/2),Math.floor(e.y+e.h-.2*e.h)):l.fillText(e.n,Math.floor(e.x+e.w/2),Math.floor(e.y+e.h-.15*e.h)),l.closePath()},I.rectangle=function(e){e=E(e);var t=!1;2===e.len?(e.x=e.x-.4*e.w,e.w=1.4*e.w,t=!0):e.len>=3&&(e.x=e.x-.65*e.w,e.w=1.65*e.w,t=!0),l.clearRect(0,0,s,h),l.drawImage(f,0,0,s,h),l.beginPath(),l.font=r.fontStyle+" "+Math.floor(e.h*(e.n>99?.9:1))+"px "+r.fontFamily,l.textAlign="center",l.fillStyle="rgba("+r.bgColor.r+","+r.bgColor.g+","+r.bgColor.b+","+e.o+")",l.fillRect(e.x,e.y,e.w,e.h),l.fillStyle="rgba("+r.textColor.r+","+r.textColor.g+","+r.textColor.b+","+e.o+")","number"==typeof e.n&&e.n>999?l.fillText((e.n>9999?9:Math.floor(e.n/1e3))+"k+",Math.floor(e.x+e.w/2),Math.floor(e.y+e.h-.2*e.h)):l.fillText(e.n,Math.floor(e.x+e.w/2),Math.floor(e.y+e.h-.15*e.h)),l.closePath()};var T=function(e,t){t=("string"==typeof t?{animation:t}:t)||{},g=function(){try{if("number"==typeof e?e>0:""!==e){var n={type:"badge",options:{n:e}};if("animation"in t&&O.types[""+t.animation]&&(n.options.animation=""+t.animation),"type"in t&&I[""+t.type]&&(n.options.type=""+t.type),["bgColor","textColor"].forEach(function(e){e in t&&(n.options[e]=o(t[e]))}),["fontStyle","fontFamily"].forEach(function(e){e in t&&(n.options[e]=t[e])}),v.push(n),v.length>100)throw"Too many badges requests in queue.";M.start()}else M.reset()}catch(i){throw"Error setting badge. Message: "+i.message}},d&&g()},A=function(e){g=function(){try{var t=e.width,o=e.height,n=document.createElement("img"),i=o/h>t/s?t/s:o/h;n.setAttribute("src",e.getAttribute("src")),n.height=o/i,n.width=t/i,l.clearRect(0,0,s,h),l.drawImage(n,0,0,s,h),L.setIcon(c)}catch(r){throw"Error setting image. Message: "+r.message}},d&&g()},U=function(e){g=function(){try{if("stop"===e)return w=!0,M.reset(),w=!1,void 0;e.addEventListener("play",function(){t(this)},!1)}catch(o){throw"Error setting video. Message: "+o.message}},d&&g()},R=function(e){if(window.URL&&window.URL.createObjectURL||(window.URL=window.URL||{},window.URL.createObjectURL=function(e){return e}),m.supported){var o=!1;navigator.getUserMedia=navigator.getUserMedia||navigator.oGetUserMedia||navigator.msGetUserMedia||navigator.mozGetUserMedia||navigator.webkitGetUserMedia,g=function(){try{if("stop"===e)return w=!0,M.reset(),w=!1,void 0;o=document.createElement("video"),o.width=s,o.height=h,navigator.getUserMedia({video:!0,audio:!1},function(e){o.src=URL.createObjectURL(e),o.play(),t(o)},function(){})}catch(n){throw"Error setting webcam. Message: "+n.message}},d&&g()}},L={};L.getIcon=function(){var e=!1,t="",o=function(){for(var e=document.getElementsByTagName("head")[0].getElementsByTagName("link"),t=e.length,o=t-1;o>=0;o--)if(/(^|\s)icon(\s|$)/i.test(e[o].getAttribute("rel")))return e[o];return!1};if(r.elementId?(e=document.getElementById(r.elementId),e.setAttribute("href",e.getAttribute("src"))):(e=o(),e===!1&&(e=document.createElement("link"),e.setAttribute("rel","icon"),document.getElementsByTagName("head")[0].appendChild(e))),t=r.elementId?e.src:e.href,"data:"!==t.substr(0,5)&&-1===t.indexOf(document.location.hostname))throw new Error("Error setting favicon. Favicon image is on different domain (Icon: "+t+", Domain: "+document.location.hostname+")");return e.setAttribute("type","image/png"),e},L.setIcon=function(e){var t=e.toDataURL("image/png");if(r.elementId)document.getElementById(r.elementId).setAttribute("src",t);else if(m.ff||m.opera){var o=a;a=document.createElement("link"),m.opera&&a.setAttribute("rel","icon"),a.setAttribute("rel","icon"),a.setAttribute("type","image/png"),document.getElementsByTagName("head")[0].appendChild(a),a.setAttribute("href",t),o.parentNode&&o.parentNode.removeChild(o)}else a.setAttribute("href",t)};var O={};return O.duration=40,O.types={},O.types.fade=[{x:.4,y:.4,w:.6,h:.6,o:0},{x:.4,y:.4,w:.6,h:.6,o:.1},{x:.4,y:.4,w:.6,h:.6,o:.2},{x:.4,y:.4,w:.6,h:.6,o:.3},{x:.4,y:.4,w:.6,h:.6,o:.4},{x:.4,y:.4,w:.6,h:.6,o:.5},{x:.4,y:.4,w:.6,h:.6,o:.6},{x:.4,y:.4,w:.6,h:.6,o:.7},{x:.4,y:.4,w:.6,h:.6,o:.8},{x:.4,y:.4,w:.6,h:.6,o:.9},{x:.4,y:.4,w:.6,h:.6,o:1}],O.types.none=[{x:.4,y:.4,w:.6,h:.6,o:1}],O.types.pop=[{x:1,y:1,w:0,h:0,o:1},{x:.9,y:.9,w:.1,h:.1,o:1},{x:.8,y:.8,w:.2,h:.2,o:1},{x:.7,y:.7,w:.3,h:.3,o:1},{x:.6,y:.6,w:.4,h:.4,o:1},{x:.5,y:.5,w:.5,h:.5,o:1},{x:.4,y:.4,w:.6,h:.6,o:1}],O.types.popFade=[{x:.75,y:.75,w:0,h:0,o:0},{x:.65,y:.65,w:.1,h:.1,o:.2},{x:.6,y:.6,w:.2,h:.2,o:.4},{x:.55,y:.55,w:.3,h:.3,o:.6},{x:.5,y:.5,w:.4,h:.4,o:.8},{x:.45,y:.45,w:.5,h:.5,o:.9},{x:.4,y:.4,w:.6,h:.6,o:1}],O.types.slide=[{x:.4,y:1,w:.6,h:.6,o:1},{x:.4,y:.9,w:.6,h:.6,o:1},{x:.4,y:.9,w:.6,h:.6,o:1},{x:.4,y:.8,w:.6,h:.6,o:1},{x:.4,y:.7,w:.6,h:.6,o:1},{x:.4,y:.6,w:.6,h:.6,o:1},{x:.4,y:.5,w:.6,h:.6,o:1},{x:.4,y:.4,w:.6,h:.6,o:1}],O.run=function(e,t,o,a){var h=O.types[i()?"none":r.animation];return a=o===!0?"undefined"!=typeof a?a:h.length-1:"undefined"!=typeof a?a:0,t=t?t:function(){},a=0?(I[r.type](n(e,h[a])),x=setTimeout(function(){o?a-=1:a+=1,O.run(e,t,o,a)},O.duration),L.setIcon(c),void 0):(t(),void 0)},C(),{badge:T,video:U,image:A,webcam:R,reset:M.reset,browser:{supported:m.supported}}};"undefined"!=typeof define&&define.amd?define([],function(){return e}):"undefined"!=typeof module&&module.exports?module.exports=e:this.Favico=e}(); \ No newline at end of file diff --git a/README.md b/README.md index 61cff33..f9209e3 100644 --- a/README.md +++ b/README.md @@ -1,24 +1,30 @@ -#A web client for WeeChat [![Build Status](https://api.travis-ci.org/glowing-bear/glowing-bear.png)](https://travis-ci.org/glowing-bear/glowing-bear?branch=master) +# A web client for WeeChat [![Build Status](https://api.travis-ci.org/glowing-bear/glowing-bear.png)](https://travis-ci.org/glowing-bear/glowing-bear?branch=master) -Glowing Bear is a web frontend for the [WeeChat](http://weechat.org) IRC client and strives to be a modern interface. It relies on WeeChat to do all the heavy lifting and then provides some nice features on top of that, like embedding images, videos, and other content. The best part, however, is that you can use it from any modern internet device -- whether it's a computer, tablet, or smart phone -- and all your stuff is there, whereever you are. You don't have to deal with the messy technical details, and all you need to have installed is a browser or our app. +Glowing Bear is a web frontend for the [WeeChat](https://weechat.org) IRC client and strives to be a modern interface. It relies on WeeChat to do all the heavy lifting and then provides some nice features on top of that, like embedding images, videos, and other content. The best part, however, is that you can use it from any modern internet device -- whether it's a computer, tablet, or smart phone -- and all your stuff is there, wherever you are. You don't have to deal with the messy technical details, and all you need to have installed is a browser or our app. -##Getting Started +## Getting Started -Glowing Bear connects to the WeeChat instance you're already running (version 0.4.2 or later is required), and you need to be able to establish a connection to the WeeChat host from your device. It makes use of the relay plugin, and therefore you need to set up a relay. If you want to get started as quickly as possible, use these commands in WeeChat: +Glowing Bear connects to the WeeChat instance you're already running (version 0.4.2 or later is required), and you need to be able to establish a connection to the WeeChat host from your device. It makes use of the relay plugin, and therefore you need to set up a relay. If you want to try this out with a local WeeChat instance, use these commands in WeeChat to create an **unencrypted relay** (see the note below): /relay add weechat 9001 /set relay.network.password YOURPASSWORD -Now point your browser to the [Glowing Bear](http://www.glowing-bear.org)! If you're having trouble connecting, check that the host and port of your WeeChat host are entered correctly, and that your server's firewall permits incoming connections on the relay port. +Now point your browser to the [Glowing Bear](http://www.glowing-bear.org)! If you're having trouble connecting, check that the host and port of your WeeChat host are entered correctly, and that your server's firewall permits incoming connections on the relay port (9001 in this example). -Please note that the above instructions set up an *unencrypted* relay, and all your data will be transmitted in clear. Therefore, we strongly recommend that you set up encryption if you want to keep using Glowing Bear. We've written [a detailed guide on how to set up a trusted secure relay](https://4z2.de/2014/07/06/weechat-trusted-relay) for you. +**Please note that the above instructions set up an unencrypted relay, and all your data will be transmitted in clear.** You should not use this over the internet. We strongly recommend that you set up encryption if you want to keep using Glowing Bear. There's a guide on setting it up with Let's Encrypt on the landing page of the [next version of Glowing Bear](https://latest.glowing-bear.org), under "Getting Started". Ask us in `#glowing-bear` on freenode if something is unclear. -You can run Glowing Bear in many ways: use it like any other webpage, as an app in Firefox (choose "Install app" on the landing page) or Chrome ("Tools", then "Create application shortcuts"), or a full-screen Chrome app on Android ("Add to homescreen"). We also provide an [Android app](https://play.google.com/store/apps/details?id=com.glowing_bear) that you can install from the Google Play Store, and a [Firefox OS app](https://marketplace.firefox.com/app/glowing-bear/) in the Firefox Marketplace. +You can run Glowing Bear in many ways: -Android app on Google PlayFirefox OS app in the Firefox Marketplace + * like any other webpage + * Chrome app ("Tools", then "Create application shortcuts") + * Android Chrome app, a full-screen experience ("Add to homescreen"). + * [Android app](https://play.google.com/store/apps/details?id=com.glowing_bear) that you can install from the Google Play Store + * Electron app for Windows, Linux and macOS. ```npm install; npm install electron-packager; npm run build-electron-{windows, darwin, linux}``` (choose your platform from the list, e.g. `build-electron-darwin` for macOS) -##Screenshots +Android app on Google Play + +## Screenshots Running as Chrome application in a separate window on Windows and as Android app: @@ -27,20 +33,21 @@ Running as Chrome application in a separate window on Windows and as Android app Are you good with design? We'd love your help! ![Glowing Bear screenshot with lots of Comic Sans MS](https://4z2.de/glowing-bear3.png) -##How it Works +## How it Works What follows is a more technical explanation of how Glowing Bear works, and you don't need to understand it to use it. Glowing Bear uses WeeChat directly as its backend through the relay plugin. This means that we can connect to WeeChat directly from the browser using WebSockets. Therefore, the client does not need a special "backend service", and you don't have to install anything. A connection is made from your browser to your WeeChat, with no services in between. Thus, Glowing Bear is written purely in client-side JavaScript with a bit of HTML and CSS. -##FAQ +## FAQ -- *Can I use Glowing Bear to access a machine or port not exposed to the internet by passing the connection through my server?* No, that's not what Glowing Bear does. You can use a websocket proxy module for your webserver to forward `/weechat` to your WeeChat instance though. Here are some pointers you might find helpful for setting this up with [nginx](http://nginx.com/blog/websocket-nginx/) or [apache](https://httpd.apache.org/docs/2.4/mod/mod_proxy_wstunnel.html). -- *How does the encryption work?* TLS is used for securing the connection if you enable encryption. This is handled by your browser, and we have no influence on certificate handling, etc. You can find more detailed instructions on how to communicate securely in the "encryption instructions" tab on the [landing page](http://www.glowing-bear.org). A detailed guide on setting up a trusted secure relay is available [here](https://4z2.de/2014/07/06/weechat-trusted-relay). +- *Can I use Glowing Bear to access a machine or port not exposed to the internet by passing the connection through my server?* No, that's not what Glowing Bear does. You can use a websocket proxy module for your webserver to forward `/weechat` to your WeeChat instance though. We've got instructions for setting this up [on our wiki](https://github.com/glowing-bear/glowing-bear/wiki/Proxying-WeeChat-relay-with-a-web-server). +- *How does the encryption work?* TLS is used for securing the connection if you enable encryption. This is handled by your browser, and we have no influence on certificate handling, etc. You can find more detailed instructions on how to communicate securely in the "Getting Started" tab on the [landing page of our development version](https://latest.glowing-bear.org). +- *Can I make it so that there are no requests to third party servers at all?* Sure, you'll have to hide embeds by default (it's in the settings dialog), and download the JavaScript files for which we use a CDN by default. For the second step, you have two options: a) use the Android or Electron app, or b) run `npm run make-local` to download the files and apply a patch to use them instead of the CDN. But remember to re-run this command whenever you update Glowing Bear! -##Development +## Development -###Setup +### Setup Getting started with the development of Glowing Bear is really simple, partly because we don't have a build process (pure client-side JS, remember). All you have to do is clone the repository, fire up a webserver to host the files, and start fiddling around. You can try out your changes by reloading the page. Here's a simple example using the python simple web server: @@ -55,13 +62,11 @@ python -m http.server Now you can point your browser to [http://localhost:8000](http://localhost:8000)! -Remember that **you don't need to host Glowing Bear yourself to use it**, you can just use [our hosted version](http://www.glowing-bear.org) powered by GitHub pages, and we'll take care of updates for you. Your browser connects to WeeChat directly, so it does not matter where Glowing Bear is hosted. - -If you'd prefer a version hosted with HTTPS, GitHub serves that as well with an undocumented, not officially supported (by GitHub) link. Be careful though, it might break any minute. Anyway, here's the link: [secret GitHub HTTPS link](https://glowing-bear.github.io/glowing-bear/). +Remember that **you don't need to host Glowing Bear yourself to use it**, you can just use [our hosted version](https://www.glowing-bear.org) powered by GitHub pages, and we'll take care of updates for you. Your browser connects to WeeChat directly, so it does not matter where Glowing Bear is hosted. -You can also use the latest and greatest development version of Glowing Bear at [https://latest.glowing-bear.org/](https://latest.glowing-bear.org/). +You can also use the latest and greatest development version of Glowing Bear at [https://latest.glowing-bear.org/](https://latest.glowing-bear.org/). Branches of this repository are available as [https://latest.glowing-bear.org/**branchname**/](https://latest.glowing-bear.org/branchname/), and pull requests as [https://latest.glowing-bear.org/pull/**123**/](https://latest.glowing-bear.org/pull/123/)—note the trailing slashes. -###Running the tests +### Running the tests Glowing Bear uses Karma and Jasmine to run its unit tests. To run the tests locally, you will first need to install `npm` on your machine. Check out the wonderful [nvm](https://github.com/creationix/nvm) if you don't know it already, it's highly recommended. Once this is done, you will need to retrieve the necessary packages for testing Glowing-Bear (first, you might want to use `npm link` on any packages you have already installed globally): @@ -77,7 +82,7 @@ Or the end to end tests: **Note**: the end to end tests assume that a web server is hosting Glowing Bear on `localhost:8000` and that a WeeChat relay is configured on port 9001. -##Contributing +## Contributing Whether you are interested in contributing or simply want to talk about the project, join us at **#glowing-bear** on **freenode**! @@ -89,4 +94,4 @@ If you wish to submit code, we try to make the contribution process as simple as We'd also like to ask you to join our IRC channel, #glowing-bear on freenode, so we can discuss your ideas and changes. -If you're curious about the projects we're using, here's a list: [AngularJS](https://angularjs.org/), [Bootstrap](http://getbootstrap.com/), [Underscore](http://underscorejs.org/), [favico.js](http://lab.ejci.net/favico.js/), Emoji provided free by [Emoji One](http://emojione.com/), and [zlib.js](https://github.com/imaya/zlib.js). Technology-wise, [WebSockets](http://en.wikipedia.org/wiki/WebSocket) are the most important part, but we also use [local storage](https://developer.mozilla.org/en-US/docs/Web/Guide/API/DOM/Storage#localStorage), the [Notification Web API](https://developer.mozilla.org/en/docs/Web/API/notification), and last (but not least) [Apache Cordova](https://cordova.apache.org/) for our mobile app. +If you're curious about the projects we're using, here's a list: [AngularJS](https://angularjs.org/), [Bootstrap](http://getbootstrap.com/), [Underscore](http://underscorejs.org/), [favico.js](http://lab.ejci.net/favico.js/), Emoji provided free by [Emoji One](http://emojione.com/), and [zlib.js](https://github.com/imaya/zlib.js). Technology-wise, [WebSockets](https://en.wikipedia.org/wiki/WebSocket) are the most important part, but we also use [local storage](https://developer.mozilla.org/en-US/docs/Web/Guide/API/DOM/Storage#localStorage), the [Notification Web API](https://developer.mozilla.org/en/docs/Web/API/notification), and last (but not least) [Apache Cordova](https://cordova.apache.org/) for our mobile app. diff --git a/assets/img/badge_firefoxos.png b/assets/img/badge_firefoxos.png deleted file mode 100644 index 3bb6991..0000000 Binary files a/assets/img/badge_firefoxos.png and /dev/null differ diff --git a/assets/img/glowing-bear.icns b/assets/img/glowing-bear.icns new file mode 100644 index 0000000..968d9f3 Binary files /dev/null and b/assets/img/glowing-bear.icns differ diff --git a/bower.json b/bower.json index 72a4e1c..6ab68d1 100644 --- a/bower.json +++ b/bower.json @@ -1,17 +1,31 @@ { "name": "glowing-bear", "description": "A webclient for WeeChat", - "version": "0.6.0", + "version": "0.7.0", "homepage": "https://github.com/glowing-bear/glowing-bear", "license": "GPLv3", "private": true, "dependencies": { - "angular": "1.4.x", - "angular-route": "1.4.x", - "angular-sanitize": "1.4.x", - "angular-touch": "1.4.x", - "angular-loader": "1.4.x", - "angular-mocks": "1.4.x", - "html5-boilerplate": "~4.3.0" - } + "angular": "1.7.x", + "angular-route": "1.7.x", + "angular-sanitize": "1.7.x", + "angular-touch": "1.7.x", + "angular-loader": "1.7.x", + "angular-mocks": "1.7.x", + "underscore": "~1.9" + }, + "devDependencies": { + "bootstrap": "~3.3", + "html5-boilerplate": "~4.3.0", + "emojione": "~2.2" + }, + "keywords": [ + "weechat", + "irc" + ], + "ignore": [ + "**/.*", + "node_modules", + "bower_components" + ] } diff --git a/css/glowingbear.css b/css/glowingbear.css index 33719e2..bee10d0 100644 --- a/css/glowingbear.css +++ b/css/glowingbear.css @@ -73,10 +73,29 @@ td.message { border-bottom: 2px solid #555; } -.input-group-addon, .input-group-btn { +.input-group-btn { vertical-align: top; } +.input-group-addon { + background: none; + border: none; + color: #ccc; +} + +#jump-addon { + width: 0px; + max-width: 0px; + padding: 0; + overflow: hidden; + transition: all ease-in-out 0.5s; +} +.showjumpkeys #jump-addon { + width: auto; + max-width: 70px; + padding: 6px 12px; +} + .footer button { border-radius: 0; } @@ -89,6 +108,12 @@ input[type=text], input[type=password], #sendMessage { margin-bottom: 5px !important; } +.btn-complete-nick { + position: relative; + overflow: hidden; + cursor: pointer; +} + .btn-send-image { position: relative; overflow: hidden; @@ -155,6 +180,7 @@ input[type=text], input[type=password], #sendMessage { position: fixed; left: 145px; /* sidebar */ overflow: hidden; + width: 100%; /* for title modal click area */ } #topbar .actions { @@ -197,7 +223,9 @@ input[type=text], input[type=password], #sendMessage { overflow-y: auto; overflow-x: hidden; padding-top: 35px; /* topbar */ + padding-right: env(safe-area-inset-right); padding-bottom: 1px; /* need to force a padding here */ + padding-left: env(safe-area-inset-left); font-size: smaller; transition:0.2s ease-in-out; z-index: 2; @@ -216,7 +244,13 @@ input[type=text], input[type=password], #sendMessage { display:block!important; } -#sidebar .badge { + +#sidebar .buffer .badge { + display: none; +} + +#sidebar .buffer.unread .badge, #sidebar .buffer.notification .badge { + display: inline-block; border-radius: 0; margin-right: -10px; padding: 4px 7px; @@ -239,9 +273,9 @@ input[type=text], input[type=password], #sendMessage { overflow-x: hidden; right: 0; top: 0; - padding-top: 39px; + margin-top: 39px; padding-left: 5px; - padding-bottom: 35px; + padding-bottom: 44px; z-index: 2; } #nicklist ul { @@ -285,6 +319,12 @@ input[type=text], input[type=password], #sendMessage { color: #222; } +.nav-pills > li.highlight > a, .nav-pills > li.highlight > a span { + text-decoration: none; + color: #fff; + background: #428BCA; +} + .nav-pills > li > a { display: block; overflow: hidden; @@ -295,6 +335,7 @@ input[type=text], input[type=password], #sendMessage { .content { height: 100%; min-height: 100%; + padding: env(safe-area-inset-top) env(safe-area-inset-right) env(safe-area-inset-bottom) env(safe-area-inset-left); } #bufferlines { @@ -350,6 +391,7 @@ td.time { bottom: 0; height: 35px; width: 100%; + margin-bottom: env(safe-area-inset-bottom); /* margin for home-indicator on iPhone X */ -webkit-transition:0.2s ease-in-out all; transition:0.2s ease-in-out all; z-index: 1; @@ -424,14 +466,6 @@ div.colourbox { } -table.notimestamp td.time { - display: none !important; -} - -table.notimestampseconds td.time span.seconds { - display: none !important; -} - #sidebar .showquickkeys .buffer .buffer-quick-key { transition: all ease-in-out 0.5s; -webkit-transition: all ease-in-out 0.5s; @@ -456,6 +490,33 @@ table.notimestampseconds td.time span.seconds { align: right; } +#sidebar .showjumpkeys .buffer .buffer-jump-key { + transition: all ease-in-out 0.2s; + -webkit-transition: all ease-in-out 0.2s; + transition-delay: 0s; + -webkit-transition-delay: 0s; + opacity: 0.7; + margin-left: -1.2em; + margin-right: 0.1em; +} +#sidebar .buffer .buffer-jump-key { + margin-left: -1.2em; + margin-right: -0.2em; + font-size: smaller; + transition: all ease-in-out 0.2s; + -webkit-transition: all ease-in-out 0.2s; + opacity: 0; + text-shadow: -1px 0px 4px rgba(255, 255, 255, 0.4), + 0px -1px 4px rgba(255, 255, 255, 0.4), + 1px 0px 4px rgba(255, 255, 255, 0.4), + 0px 1px 4px rgba(255, 255, 255, 0.4); + vertical-align: baseline; + display: inline-block; + width: 1em; + align: right; +} + + .gb-modal { z-index: 1000; height: 100%; @@ -749,6 +810,7 @@ img.emojione { right: 60px; text-align: center; font-size: 18px; + width: initial; } #topbar .brand img { @@ -777,6 +839,10 @@ img.emojione { bottom: 0px; } + .content[sidebar-state=visible] #nicklist { + display: none; + } + .navbar-fixed-bottom { margin: 0; } @@ -789,6 +855,11 @@ img.emojione { font-size: 14px; } + .nav-pills li.buffer { + min-height: 30px; + max-height: 30px; + } + .nav-pills li a { padding: 10px 15px; } @@ -850,3 +921,8 @@ img.emojione { padding-right: 0px !important; } } + +/* ng-cloak hides elements until Angular loads, preventing flickering */ +[ng\:cloak], [ng-cloak], [data-ng-cloak], [x-ng-cloak], .ng-cloak, .x-ng-cloak { + display: none !important; +} diff --git a/css/themes/base16-default.css b/css/themes/base16-default.css new file mode 100644 index 0000000..ec40fcb --- /dev/null +++ b/css/themes/base16-default.css @@ -0,0 +1,1452 @@ +:root { + --base00: #181818; /* Default Background */ + --base01: #282828; /* Lighter Background (Used for status bars) */ + --base02: #383838; /* Selection Background */ + --base03: #585858; /* Comments, Invisibles, Line Highlighting */ + --base04: #B8B8B8; /* Dark Foreground (Used for status bars) */ + --base05: #D8D8D8; /* Default Foreground, Caret, Delimiters, Operators */ + --base06: #E8E8E8; /* Light Foreground (Not often used) */ + --base07: #F8F8F8; /* Light Background (Not often used) */ + --base08: #AB4642; /* "Red": Variables, XML Tags, Markup Link Text, Markup Lists, Diff Deleted */ + --base09: #DC9656; /* "Orange": Integers, Boolean, Constants, XML Attributes, Markup Link Url */ + --base0A: #F7CA88; /* "Yellow": Classes, Markup Bold, Search Text Background */ + --base0B: #A1B56C; /* "Green": Strings, Inherited Class, Markup Code, Diff Inserted */ + --base0C: #86C1B9; /* "Cyan": Support, Regular Expressions, Escape Characters, Markup Quotes */ + --base0D: #7CAFC2; /* "Blue": Functions, Methods, Attribute IDs, Headings */ + --base0E: #BA8BAF; /* "Magenta": Keywords, Storage, Selector, Markup Italic, Diff Changed */ + --base0F: #A16946; /* "Brown": Deprecated, Opening/Closing Embedded Language Tags e.g. */ +} + +body { + background-color: var(--base00); + color: var(--base05); +} +tr.bufferline { + line-height: 1.4; +} + +a:link { + color: var(--base0D); +} + +a:visited { + color: var(--base0E); +} + +#topbar .actions > a:visited { + color: var(--base0D); +} + +a:hover, a:active, a:focus, +#nicklist a:hover, #nicklist a:active, #nicklist a:focus { + color: var(--base0D); +} + +a:hover, a:active, a:focus, +#nicklist a:hover, #nicklist a:active, #nicklist a:focus { + background-color: var(--base03); + text-decoration: underline; +} + +a:visited:hover, a:visited:active, a:visited:focus { + color: var(--base0E); +} + +#topbar a:hover, #topbar a:active, +#topbar .actions > a:hover > i, +#topbar .actions > a:active > i { + background-color: var(--base01); +} + +.form-control { + color: var(--base05); + box-shadow: 0px 1px 0px rgba(255, 255, 255, 0.1), 0px 1px 7px 0px rgba(0, 0, 0, 0.2) inset; + background: var(--base01); + border: 0px none; +} + +.form-control:focus { + color: var(--base06); + box-shadow: 0px 1px 0px rgba(255, 255, 255, 0.1), 0px 1px 7px 0px rgba(0, 0, 0, 0.2) inset; + background: var(--base02); +} + +.form-control option { + color: var(--base05); + background: var(--base01); +} + +html { + background-color: inherit; +} + +/* fix for mobile firefox which ignores :hover */ +.nav-pills > li > a:hover, +.nav-pills > li > a:active, +.nav-pills > li > a:focus, +.nav-pills > li.highlight > a:hover, +.nav-pills > li.highlight > a:active, +.nav-pills > li.highlight > a:focus, +.nav-pills > li.active > a:hover, +.nav-pills > li.active > a:active, +.nav-pills > li.active > a:focus, +.nav-pills > li.notification > a:hover, +.nav-pills > li.notification > a:active, +.nav-pills > li.notification > a:focus { + background-color: var(--base03); +} + +.nav-pills > li > a:hover, +.nav-pills > li > a:hover span, +.nav-pills > li > a:active, +.nav-pills > li > a:active span, +.nav-pills > li > a:focus, +.nav-pills > li > a:focus span, +.nav-pills > li.active > a:hover, +.nav-pills > li.active > a:hover span, +.nav-pills > li.active > a:active, +.nav-pills > li.active > a:active span, +.nav-pills > li.active > a:focus, +.nav-pills > li.active > a:focus span { + color: var(--base06); +} + +.nav-pills > li > a:hover span, +.nav-pills > li > a:active span, +.nav-pills > li > a:focus span, +.nav-pills > li.active > a:hover span, +.nav-pills > li.active > a:active span, +.nav-pills > li.active > a:focus span { + background-color: transparent; +} + +.nav-pills > li.buffer.channel a span:last-of-type:before { + color: var(--base04); +} + +.nav-pills > li.buffer.channel.highlight a:hover span:last-of-type:before, +.nav-pills > li.buffer.channel.highlight a:active span:last-of-type:before, +.nav-pills > li.buffer.channel.highlight a:focus span:last-of-type:before, +.nav-pills > li.buffer.channel.active a:hover span:last-of-type:before, +.nav-pills > li.buffer.channel.active a:active span:last-of-type:before, +.nav-pills > li.buffer.channel.active a:focus span:last-of-type:before, +.nav-pills > li.buffer.channel.unread a span:last-of-type:before, +.nav-pills > li.buffer.channel.unread a:hover span:last-of-type:before, +.nav-pills > li.buffer.channel.unread a:active span:last-of-type:before, +.nav-pills > li.buffer.channel.unread a:focus span:last-of-type:before, +.nav-pills > li.buffer.channel.notification a:hover span:last-of-type:before, +.nav-pills > li.buffer.channel.notification a:active span:last-of-type:before, +.nav-pills > li.buffer.channel.notification a:focus span:last-of-type:before { + color: var(--base05); +} + +.nav-pills > li.buffer.channel.highlight a span:last-of-type:before, +.nav-pills > li.buffer.channel.active a span:last-of-type:before, +.nav-pills > li.buffer.channel.notification a span:last-of-type:before { + color: var(--base02); +} + +.nav-pills > li.active > a, +.nav-pills > li.highlight > a, +.nav-pills > li.unread > a, +.nav-pills > li.notification > a { + font-weight: bold; +} + +.nav-pills > li.active > a { + background-color: var(--base0E); + color: var(--base01); +} + +.nav-pills > li.highlight > a { + background-color: var(--base0A); + color: var(--base01); +} + +.nav-pills > li.highlight > a > span { + background-color: transparent; + color: var(--base01); +} + +.nav-pills > li.unread > a { + color: var(--base06); +} + +.nav-pills > li.notification > a { + background-color: var(--base0B); + color: var(--base00); +} + +.nav-pills > li.highlight > a:hover, +.nav-pills > li.highlight > a:hover span, +.nav-pills > li.highlight > a:active, +.nav-pills > li.highlight > a:active span, +.nav-pills > li.highlight > a:focus, +.nav-pills > li.highlight > a:focus span, +.nav-pills > li.unread > a:hover, +.nav-pills > li.unread > a:hover span, +.nav-pills > li.unread > a:active, +.nav-pills > li.unread > a:active span, +.nav-pills > li.unread > a:focus, +.nav-pills > li.unread > a:focus span, +.nav-pills > li.notification > a:hover, +.nav-pills > li.notification > a:hover span, +.nav-pills > li.notification > a:active, +.nav-pills > li.notification > a:active span, +.nav-pills > li.notification > a:focus, +.nav-pills > li.notification > a:focus span { + color: var(--base07); +} + +.nav-pills > li.highlight > a:hover span, +.nav-pills > li.highlight > a:active span, +.nav-pills > li.highlight > a:focus span, +.nav-pills > li.unread > a:hover span, +.nav-pills > li.unread > a:active span, +.nav-pills > li.unread > a:focus span, +.nav-pills > li.notification > a:hover span, +.nav-pills > li.notification > a:active span, +.nav-pills > li.notification > a:focus span { + background-color: transparent; +} + +.nav-pills li:nth-child(2n+1) { + background: var(--base01); +} + +.nav-pills > li > a { + color: var(--base05); +} + +tr.bufferline:hover { + background-color: transparent; +} + +.danger, +.alert-danger, +.badge .alert-danger, +.badge.danger { + background-color: var(--base08); + color: var(--base00); +} + +.alert-danger { + border-color: var(--base00); + color: var(--base00); +} + +.btn-default { + background-color: var(--base00); + border-color: var(--base01); + color: var(--base04); +} +.btn-default:hover { + background-color: var(--base01); + border-color: var(--base02); + color: var(--base05); +} +.btn-default.active, +.btn-default:active, +.btn-default.focus, +.btn-default:focus, +.btn-default.active.focus, +.btn-default.active:focus, +.btn-default:active.focus, +.btn-default:active:focus, +.btn-default.active:hover, +.btn-default:active:hover { + background-color: var(--base06); + border-color: var(--base05); + color: var(--base02); +} + +.btn-primary { + background-color: var(--base01); + border-color: var(--base02); + color: var(--base05); +} +.btn-primary:hover { + background-color: var(--base02); + border-color: var(--base03); + color: var(--base06); +} + +.btn-primary.active, +.btn-primary:active, +.btn-primary.focus, +.btn-primary:focus, +.btn-primary.active.focus, +.btn-primary.active:focus, +.btn-primary:active.focus, +.btn-primary:active:focus, +.btn-primary.active:hover, +.btn-primary:active:hover { + background-color: var(--base07); + border-color: var(--base06); + color: var(--base01); +} + +::-webkit-scrollbar-track-piece { + background-color: var(--base00); +} +::-webkit-scrollbar-thumb:vertical { + height: 15px; + background: var(--base02); +} + +.gb-modal .backdrop { + background-color:rgba(0, 0, 0, 0.2) +} + +input[type=text], input[type=password], #sendMessage, .badge { + box-shadow: 0px 1px 0px rgba(255, 255, 255, 0.1), 0px 1px 7px 0px rgba(0, 0, 0, 0.2) inset; +} + +input[type=text], input[type=password], #sendMessage, .btn-send, .btn-send-image, .btn-complete-nick { + color: var(--base05); + background: var(--base01); +} + +input[type=text]::-webkit-input-placeholder, input[type=password]::-webkit-input-placeholder { /* Chrome/Opera/Safari */ + color: var(--base04); +} +input[type=text]::-moz-placeholder, input[type=password]::-moz-placeholder { /* Firefox 19+ */ + color: var(--base04); +} +input[type=text]:-ms-input-placeholder, input[type=password]:-ms-input-placeholder { /* IE 10+ */ + color: var(--base04); +} +input[type=text]:-moz-placeholder, input[type=password]:-moz-placeholder { /* Firefox 18- */ + color: var(--base04); +} + +.badge, +.nav-pills li span.badge { + color: var(--base06); + background: var(--base02); +} + +.nav-pills li:nth-child(2n+1) span.badge { + background: var(--base03); +} + +.nav-pills li span.badge.danger { + color: var(--base00); + background: var(--base08); +} + +.btn-complete-nick:hover, .btn-complete-nick:focus, +.btn-send:hover, .btn-send:focus, +.btn-send-image:hover, .btn-send-image:focus { + background-color: var(--base07); + color: var(--base01); +} + +#connection-infos { + color: var(--base04); +} + +.color-light-green { + color: var(--base0B); +} + +.color-27 { + color: var(--base0D); +} + +#topbar { + background: var(--base02); + color: var(--base05); +} + +#topbar .actions { + background: var(--base02); +} + +#topbar .actions > a { + background: transparent; +} + +#topbar > .title > span:last-of-type:before { + color: var(--base04); +} + +#sidebar, .panel, .dropdown-menu, .modal-content { + background: var(--base00); +} + +.horizontal-line { + -webkit-box-shadow: rgba(255, 255, 255, 0.07) 0 1px 0; + -moz-box-shadow: rgba(255, 255, 255, 0.07) 0 1px 0; + box-shadow: rgba(255, 255, 255, 0.07) 0 1px 0; + border-bottom: 1px solid var(--base00); +} +.vertical-line { + -webkit-box-shadow: rgba(255, 255, 255, 0.07) 1px 0 0; + -moz-box-shadow: rgba(255, 255, 255, 0.07) 1px 0 0; + box-shadow: rgba(255, 255, 255, 0.07) 1px 0 0; + border-right: 1px solid var(--base00); +} +.vertical-line-left { + -webkit-box-shadow: rgba(255, 255, 255, 0.07) -1px 0 0; + -moz-box-shadow: rgba(255, 255, 255, 0.07) -1px 0 0; + box-shadow: rgba(255, 255, 255, 0.07) -1px 0 0; + border-left: 1px solid var(--base00); +} +.panel-group .panel-heading + .panel-collapse .panel-body, .modal-body, .modal-header, .modal-footer { + -webkit-box-shadow: rgba(255, 255, 255, 0.07) 0 -1px 0; + -moz-box-shadow: rgba(255, 255, 255, 0.07) 0 -1px 0; + box-shadow: rgba(255, 255, 255, 0.07) 0 -1px 0; + border-top: 1px solid var(--base00); +} + +#readmarker { + border-top-color: var(--base05); + border-bottom-color: var(--base00); +} + +button.close { + color: var(--base05); + opacity: 1; + text-shadow: none; +} + +button.close:hover { + background-color: var(--base07); + color: var(--base01); +} + +/****************************/ +/* Weechat colors and style */ +/****************************/ +/* style options, foreground */ +.cof-separator { + color: var(--base05); +} +.cof-chat { + color: var(--base05); +} + +.cof-chat_time, +.cof-chat_time_delimiters { + color: var(--base05); +} +.repeated-time .cob-chat_time, +.repeated-time .cob-chat_time_delimiters { + color: var(--base04); +} +.cof-chat_prefix_error { + color: var(--base0A); +} +.cof-chat_prefix_network { + color: var(--base0E); +} +.cof-chat_prefix_action { + color: var(--base06); +} +.cof-chat_prefix_join { + color: var(--base0B); +} +.cof-chat_prefix_quit { + color: var(--base08); +} +.cof-chat_prefix_more { + color: var(--base0E); +} +.cof-chat_prefix_suffix { + color: var(--base0B); +} +.cof-chat_buffer { + color: var(--base06); +} +.cof-chat_server { + color: var(--base0F); +} +.cof-chat_channel { + color: var(--base06); +} +.cof-chat_nick { + color: var(--base0C); +} +.cof-chat_nick_self { + color: var(--base07); +} +.cof-chat_nick_other { + color: var(--base0C); +} +.cof-invalid { + /* should never happen */ + color: green !important; + background-color: red !important; +} +.cof-chat_host { + color: var(--base0C); +} +.cof-chat_delimiters { + color: var(--base05); +} +.cof-chat_highlight { + color: var(--base03); +} +.cof-chat_read_marker { + color: var(--base05); +} +.cof-chat_text_found { + color: var(--base0A); +} +.cof-chat_value { + color: var(--base0C); +} +.cof-chat_prefix_buffer { + color: var(--base0F); +} +.cof-chat_tags { + color: var(--base08); +} +.cof-chat_inactive_window { + color: var(--base05); +} +.cof-chat_inactive_buffer { + color: var(--base05); +} +.cof-chat_prefix_buffer_inactive_buffer { + color: var(--base05); +} +.cof-chat_nick_offline { + color: var(--base05); +} +.cof-chat_nick_offline_highlight { + color: var(--base05); +} +.cof-chat_nick_prefix { + color: var(--base0B); +} +.cof-chat_nick_suffix { + color: var(--base0B); +} +.cof-emphasis { + color: var(--base07); +} +.cof-chat_day_change { + color: var(--base0C); +} + +/* style options, background */ +.cob-separator { +} +.cob-chat { +} +.cob-chat_time { +} +.cob-chat_time_delimiters { +} +.cob-chat_prefix_error { +} +.cob-chat_prefix_network { +} +.cob-chat_prefix_action { +} +.cob-chat_prefix_join { +} +.cob-chat_prefix_quit { +} +.cob-chat_prefix_more { +} +.cob-chat_prefix_suffix { +} +.cob-chat_buffer { +} +.cob-chat_server { +} +.cob-chat_channel { +} +.cob-chat_nick { +} +.cob-chat_nick_self { +} +.cob-chat_nick_other { +} +.cob-invalid { +} +.cob-chat_host { +} +.cob-chat_delimiters { +} +.cob-chat_highlight { + background-color: var(--base07); +} +.cob-chat_read_marker { +} +.cob-chat_text_found { +} +.cob-chat_value { +} +.cob-chat_prefix_buffer { +} +.cob-chat_tags { +} +.cob-chat_inactive_window { +} +.cob-chat_inactive_buffer { +} +.cob-chat_prefix_buffer_inactive_buffer { +} +.cob-chat_nick_offline { +} +.cob-chat_nick_offline_highlight { + background-color: var(--base02); +} +.cob-chat_nick_prefix { +} +.cob-chat_nick_suffix { +} +.cob-emphasis { + background-color: var(--base03); +} +.cob-chat_day_change { +} + +/* style options, attributes */ +.coa-separator { +} +.coa-chat { +} +.coa-chat_time { +} +.coa-chat_time_delimiters { +} +.coa-chat_prefix_error { +} +.coa-chat_prefix_network { +} +.coa-chat_prefix_action { +} +.coa-chat_prefix_join { +} +.coa-chat_prefix_quit { +} +.coa-chat_prefix_more { +} +.coa-chat_prefix_suffix { +} +.coa-chat_buffer { +} +.coa-chat_server { +} +.coa-chat_channel { +} +.coa-chat_nick { +} +.coa-chat_nick_self { + font-weight: bold; +} +.coa-chat_nick_other { +} +.coa-invalid { +} +.coa-chat_host { +} +.coa-chat_delimiters { +} +.coa-chat_highlight { +} +.coa-chat_read_marker { +} +.coa-chat_text_found { +} +.coa-chat_value { +} +.coa-chat_prefix_buffer { +} +.coa-chat_tags { +} +.coa-chat_inactive_window { +} +.coa-chat_inactive_buffer { +} +.coa-chat_prefix_buffer_inactive_buffer { +} +.coa-chat_nick_offline { +} +.coa-chat_nick_offline_highlight { +} +.coa-chat_nick_prefix { +} +.coa-chat_nick_suffix { +} +.coa-emphasis { +} +.coa-chat_day_change { +} + +/* WeeChat colors, foreground */ +.cwf-default { + color: var(--base05); +} +.cwf-black { + color: var(--base00); +} +.cwf-darkgray { + color: var(--base02); +} +.cwf-red { + color: var(--base08); +} +.cwf-lightred { + color: var(--base08); +} +.cwf-green { + color: var(--base0B); +} +.cwf-lightgreen { + color: var(--base0B); +} +.cwf-brown { + color: var(--base0A); +} +.cwf-yellow { + color: var(--base0A); +} +.cwf-blue { + color: var(--base0D); +} +.cwf-lightblue { + color: var(--base0D); +} +.cwf-magenta { + color: var(--base0E); +} +.cwf-lightmagenta { + color: var(--base0E); +} +.cwf-cyan { + color: var(--base0C); +} +.cwf-lightcyan { + color: var(--base0C); +} +.cwf-gray { + color: var(--base04); +} +.cwf-white { + color: var(--base07); +} + +/* WeeChat colors, background */ +.cwb-default { + background-color: transparent; +} +.cwb-black { + background-color: var(--base00); +} +.cwb-darkgray { + background-color: var(--base02); +} +.cwb-red { + background-color: var(--base08); +} +.cwb-lightred { + background-color: var(--base08); +} +.cwb-green { + background-color: var(--base0B); +} +.cwb-lightgreen { + background-color: var(--base0B); +} +.cwb-brown { + background-color: var(--base0A); +} +.cwb-yellow { + background-color: var(--base0A); +} +.cwb-blue { + background-color: var(--base0D); +} +.cwb-lightblue { + background-color: var(--base0D); +} +.cwb-magenta { + background-color: var(--base0E); +} +.cwb-lightmagenta { + background-color: var(--base0E); +} +.cwb-cyan { + background-color: var(--base0C); +} +.cwb-lightcyan { + background-color: var(--base0C); +} +.cwb-gray { + background-color: var(--base04); +} +.cwb-white { + background-color: var(--base07); +} + +/* extended colors, foreground */ +.cef-0 { + color: var(--base00); +} +.cef-1 { + color: var(--base08); +} +.cef-2 { + color: var(--base0B); +} +.cef-3 { + color: var(--base0A); +} +.cef-4 { + color: var(--base0D); +} +.cef-5 { + color: var(--base0E); +} +.cef-6 { + color: var(--base0C); +} +.cef-7 { + color: var(--base05); +} +.cef-8 { + color: var(--base03); +} +.cef-9 { + color: var(--base08); +} +.cef-10 { + color: var(--base0B); +} +.cef-11 { + color: var(--base0A); +} +.cef-12 { + color: var(--base0D); +} +.cef-13 { + color: var(--base0E); +} +.cef-14 { + color: var(--base0C); +} +.cef-15 { + color: var(--base07); +} +.cef-16 { + color: var(--base09); +} +.cef-17 { + color: var(--base0F); +} +.cef-18 { + color: var(--base01); +} +.cef-19 { + color: var(--base02); +} +.cef-20 { + color: var(--base04); +} +.cef-21 { + color: var(--base06); +} + +/* extended colors, background */ +.ceb-0 { + background-color: var(--base00); +} +.ceb-1 { + background-color: var(--base08); +} +.ceb-2 { + background-color: var(--base0B); +} +.ceb-3 { + background-color: var(--base0A); +} +.ceb-4 { + background-color: var(--base0D); +} +.ceb-5 { + background-color: var(--base0E); +} +.ceb-6 { + background-color: var(--base0C); +} +.ceb-7 { + background-color: var(--base05); +} +.ceb-8 { + background-color: var(--base03); +} +.ceb-9 { + background-color: var(--base08); +} +.ceb-10 { + background-color: var(--base0B); +} +.ceb-11 { + background-color: var(--base0A); +} +.ceb-12 { + background-color: var(--base0D); +} +.ceb-13 { + background-color: var(--base0E); +} +.ceb-14 { + background-color: var(--base0C); +} +.ceb-15 { + background-color: var(--base07); +} +.ceb-16 { + background-color: var(--base09); +} +.ceb-17 { + background-color: var(--base0F); +} +.ceb-18 { + background-color: var(--base01); +} +.ceb-19 { + background-color: var(--base02); +} +.ceb-20 { + background-color: var(--base04); +} +.ceb-21 { + background-color: var(--base06); +} + +/* Forcing extended colours into colour slots of palette */ +.cef-22 { color: var(--base08); } +.ceb-22 { background-color: var(--base08); } +.cef-23 { color: var(--base09); } +.ceb-23 { background-color: var(--base09); } +.cef-24 { color: var(--base0A); } +.ceb-24 { background-color: var(--base0A); } +.cef-25 { color: var(--base0B); } +.ceb-25 { background-color: var(--base0B); } +.cef-26 { color: var(--base0C); } +.ceb-26 { background-color: var(--base0C); } +.cef-27 { color: var(--base0D); } +.ceb-27 { background-color: var(--base0D); } +.cef-28 { color: var(--base0E); } +.ceb-28 { background-color: var(--base0E); } +.cef-29 { color: var(--base0F); } +.ceb-29 { background-color: var(--base0F); } +.cef-30 { color: var(--base08); } +.ceb-30 { background-color: var(--base08); } +.cef-31 { color: var(--base09); } +.ceb-31 { background-color: var(--base09); } +.cef-32 { color: var(--base0A); } +.ceb-32 { background-color: var(--base0A); } +.cef-33 { color: var(--base0B); } +.ceb-33 { background-color: var(--base0B); } +.cef-34 { color: var(--base0C); } +.ceb-34 { background-color: var(--base0C); } +.cef-35 { color: var(--base0D); } +.ceb-35 { background-color: var(--base0D); } +.cef-36 { color: var(--base0E); } +.ceb-36 { background-color: var(--base0E); } +.cef-37 { color: var(--base0F); } +.ceb-37 { background-color: var(--base0F); } +.cef-38 { color: var(--base08); } +.ceb-38 { background-color: var(--base08); } +.cef-39 { color: var(--base09); } +.ceb-39 { background-color: var(--base09); } +.cef-40 { color: var(--base0A); } +.ceb-40 { background-color: var(--base0A); } +.cef-41 { color: var(--base0B); } +.ceb-41 { background-color: var(--base0B); } +.cef-42 { color: var(--base0C); } +.ceb-42 { background-color: var(--base0C); } +.cef-43 { color: var(--base0D); } +.ceb-43 { background-color: var(--base0D); } +.cef-44 { color: var(--base0E); } +.ceb-44 { background-color: var(--base0E); } +.cef-45 { color: var(--base0F); } +.ceb-45 { background-color: var(--base0F); } +.cef-46 { color: var(--base08); } +.ceb-46 { background-color: var(--base08); } +.cef-47 { color: var(--base09); } +.ceb-47 { background-color: var(--base09); } +.cef-48 { color: var(--base0A); } +.ceb-48 { background-color: var(--base0A); } +.cef-49 { color: var(--base0B); } +.ceb-49 { background-color: var(--base0B); } +.cef-50 { color: var(--base0C); } +.ceb-50 { background-color: var(--base0C); } +.cef-51 { color: var(--base0D); } +.ceb-51 { background-color: var(--base0D); } +.cef-52 { color: var(--base0E); } +.ceb-52 { background-color: var(--base0E); } +.cef-53 { color: var(--base0F); } +.ceb-53 { background-color: var(--base0F); } +.cef-54 { color: var(--base08); } +.ceb-54 { background-color: var(--base08); } +.cef-55 { color: var(--base09); } +.ceb-55 { background-color: var(--base09); } +.cef-56 { color: var(--base0A); } +.ceb-56 { background-color: var(--base0A); } +.cef-57 { color: var(--base0B); } +.ceb-57 { background-color: var(--base0B); } +.cef-58 { color: var(--base0C); } +.ceb-58 { background-color: var(--base0C); } +.cef-59 { color: var(--base0D); } +.ceb-59 { background-color: var(--base0D); } +.cef-60 { color: var(--base0E); } +.ceb-60 { background-color: var(--base0E); } +.cef-61 { color: var(--base0F); } +.ceb-61 { background-color: var(--base0F); } +.cef-62 { color: var(--base08); } +.ceb-62 { background-color: var(--base08); } +.cef-63 { color: var(--base09); } +.ceb-63 { background-color: var(--base09); } +.cef-64 { color: var(--base0A); } +.ceb-64 { background-color: var(--base0A); } +.cef-65 { color: var(--base0B); } +.ceb-65 { background-color: var(--base0B); } +.cef-66 { color: var(--base0C); } +.ceb-66 { background-color: var(--base0C); } +.cef-67 { color: var(--base0D); } +.ceb-67 { background-color: var(--base0D); } +.cef-68 { color: var(--base0E); } +.ceb-68 { background-color: var(--base0E); } +.cef-69 { color: var(--base0F); } +.ceb-69 { background-color: var(--base0F); } +.cef-70 { color: var(--base08); } +.ceb-70 { background-color: var(--base08); } +.cef-71 { color: var(--base09); } +.ceb-71 { background-color: var(--base09); } +.cef-72 { color: var(--base0A); } +.ceb-72 { background-color: var(--base0A); } +.cef-73 { color: var(--base0B); } +.ceb-73 { background-color: var(--base0B); } +.cef-74 { color: var(--base0C); } +.ceb-74 { background-color: var(--base0C); } +.cef-75 { color: var(--base0D); } +.ceb-75 { background-color: var(--base0D); } +.cef-76 { color: var(--base0E); } +.ceb-76 { background-color: var(--base0E); } +.cef-77 { color: var(--base0F); } +.ceb-77 { background-color: var(--base0F); } +.cef-78 { color: var(--base08); } +.ceb-78 { background-color: var(--base08); } +.cef-79 { color: var(--base09); } +.ceb-79 { background-color: var(--base09); } +.cef-80 { color: var(--base0A); } +.ceb-80 { background-color: var(--base0A); } +.cef-81 { color: var(--base0B); } +.ceb-81 { background-color: var(--base0B); } +.cef-82 { color: var(--base0C); } +.ceb-82 { background-color: var(--base0C); } +.cef-83 { color: var(--base0D); } +.ceb-83 { background-color: var(--base0D); } +.cef-84 { color: var(--base0E); } +.ceb-84 { background-color: var(--base0E); } +.cef-85 { color: var(--base0F); } +.ceb-85 { background-color: var(--base0F); } +.cef-86 { color: var(--base08); } +.ceb-86 { background-color: var(--base08); } +.cef-87 { color: var(--base09); } +.ceb-87 { background-color: var(--base09); } +.cef-88 { color: var(--base0A); } +.ceb-88 { background-color: var(--base0A); } +.cef-89 { color: var(--base0B); } +.ceb-89 { background-color: var(--base0B); } +.cef-90 { color: var(--base0C); } +.ceb-90 { background-color: var(--base0C); } +.cef-91 { color: var(--base0D); } +.ceb-91 { background-color: var(--base0D); } +.cef-92 { color: var(--base0E); } +.ceb-92 { background-color: var(--base0E); } +.cef-93 { color: var(--base0F); } +.ceb-93 { background-color: var(--base0F); } +.cef-94 { color: var(--base08); } +.ceb-94 { background-color: var(--base08); } +.cef-95 { color: var(--base09); } +.ceb-95 { background-color: var(--base09); } +.cef-96 { color: var(--base0A); } +.ceb-96 { background-color: var(--base0A); } +.cef-97 { color: var(--base0B); } +.ceb-97 { background-color: var(--base0B); } +.cef-98 { color: var(--base0C); } +.ceb-98 { background-color: var(--base0C); } +.cef-99 { color: var(--base0D); } +.ceb-99 { background-color: var(--base0D); } +.cef-100 { color: var(--base0E); } +.ceb-100 { background-color: var(--base0E); } +.cef-101 { color: var(--base0F); } +.ceb-101 { background-color: var(--base0F); } +.cef-102 { color: var(--base08); } +.ceb-102 { background-color: var(--base08); } +.cef-103 { color: var(--base09); } +.ceb-103 { background-color: var(--base09); } +.cef-104 { color: var(--base0A); } +.ceb-104 { background-color: var(--base0A); } +.cef-105 { color: var(--base0B); } +.ceb-105 { background-color: var(--base0B); } +.cef-106 { color: var(--base0C); } +.ceb-106 { background-color: var(--base0C); } +.cef-107 { color: var(--base0D); } +.ceb-107 { background-color: var(--base0D); } +.cef-108 { color: var(--base0E); } +.ceb-108 { background-color: var(--base0E); } +.cef-109 { color: var(--base0F); } +.ceb-109 { background-color: var(--base0F); } +.cef-110 { color: var(--base08); } +.ceb-110 { background-color: var(--base08); } +.cef-111 { color: var(--base09); } +.ceb-111 { background-color: var(--base09); } +.cef-112 { color: var(--base0A); } +.ceb-112 { background-color: var(--base0A); } +.cef-113 { color: var(--base0B); } +.ceb-113 { background-color: var(--base0B); } +.cef-114 { color: var(--base0C); } +.ceb-114 { background-color: var(--base0C); } +.cef-115 { color: var(--base0D); } +.ceb-115 { background-color: var(--base0D); } +.cef-116 { color: var(--base0E); } +.ceb-116 { background-color: var(--base0E); } +.cef-117 { color: var(--base0F); } +.ceb-117 { background-color: var(--base0F); } +.cef-118 { color: var(--base08); } +.ceb-118 { background-color: var(--base08); } +.cef-119 { color: var(--base09); } +.ceb-119 { background-color: var(--base09); } +.cef-120 { color: var(--base0A); } +.ceb-120 { background-color: var(--base0A); } +.cef-121 { color: var(--base0B); } +.ceb-121 { background-color: var(--base0B); } +.cef-122 { color: var(--base0C); } +.ceb-122 { background-color: var(--base0C); } +.cef-123 { color: var(--base0D); } +.ceb-123 { background-color: var(--base0D); } +.cef-124 { color: var(--base0E); } +.ceb-124 { background-color: var(--base0E); } +.cef-125 { color: var(--base0F); } +.ceb-125 { background-color: var(--base0F); } +.cef-126 { color: var(--base08); } +.ceb-126 { background-color: var(--base08); } +.cef-127 { color: var(--base09); } +.ceb-127 { background-color: var(--base09); } +.cef-128 { color: var(--base0A); } +.ceb-128 { background-color: var(--base0A); } +.cef-129 { color: var(--base0B); } +.ceb-129 { background-color: var(--base0B); } +.cef-130 { color: var(--base0C); } +.ceb-130 { background-color: var(--base0C); } +.cef-131 { color: var(--base0D); } +.ceb-131 { background-color: var(--base0D); } +.cef-132 { color: var(--base0E); } +.ceb-132 { background-color: var(--base0E); } +.cef-133 { color: var(--base0F); } +.ceb-133 { background-color: var(--base0F); } +.cef-134 { color: var(--base08); } +.ceb-134 { background-color: var(--base08); } +.cef-135 { color: var(--base09); } +.ceb-135 { background-color: var(--base09); } +.cef-136 { color: var(--base0A); } +.ceb-136 { background-color: var(--base0A); } +.cef-137 { color: var(--base0B); } +.ceb-137 { background-color: var(--base0B); } +.cef-138 { color: var(--base0C); } +.ceb-138 { background-color: var(--base0C); } +.cef-139 { color: var(--base0D); } +.ceb-139 { background-color: var(--base0D); } +.cef-140 { color: var(--base0E); } +.ceb-140 { background-color: var(--base0E); } +.cef-141 { color: var(--base0F); } +.ceb-141 { background-color: var(--base0F); } +.cef-142 { color: var(--base08); } +.ceb-142 { background-color: var(--base08); } +.cef-143 { color: var(--base09); } +.ceb-143 { background-color: var(--base09); } +.cef-144 { color: var(--base0A); } +.ceb-144 { background-color: var(--base0A); } +.cef-145 { color: var(--base0B); } +.ceb-145 { background-color: var(--base0B); } +.cef-146 { color: var(--base0C); } +.ceb-146 { background-color: var(--base0C); } +.cef-147 { color: var(--base0D); } +.ceb-147 { background-color: var(--base0D); } +.cef-148 { color: var(--base0E); } +.ceb-148 { background-color: var(--base0E); } +.cef-149 { color: var(--base0F); } +.ceb-149 { background-color: var(--base0F); } +.cef-150 { color: var(--base08); } +.ceb-150 { background-color: var(--base08); } +.cef-151 { color: var(--base09); } +.ceb-151 { background-color: var(--base09); } +.cef-152 { color: var(--base0A); } +.ceb-152 { background-color: var(--base0A); } +.cef-153 { color: var(--base0B); } +.ceb-153 { background-color: var(--base0B); } +.cef-154 { color: var(--base0C); } +.ceb-154 { background-color: var(--base0C); } +.cef-155 { color: var(--base0D); } +.ceb-155 { background-color: var(--base0D); } +.cef-156 { color: var(--base0E); } +.ceb-156 { background-color: var(--base0E); } +.cef-157 { color: var(--base0F); } +.ceb-157 { background-color: var(--base0F); } +.cef-158 { color: var(--base08); } +.ceb-158 { background-color: var(--base08); } +.cef-159 { color: var(--base09); } +.ceb-159 { background-color: var(--base09); } +.cef-160 { color: var(--base0A); } +.ceb-160 { background-color: var(--base0A); } +.cef-161 { color: var(--base0B); } +.ceb-161 { background-color: var(--base0B); } +.cef-162 { color: var(--base0C); } +.ceb-162 { background-color: var(--base0C); } +.cef-163 { color: var(--base0D); } +.ceb-163 { background-color: var(--base0D); } +.cef-164 { color: var(--base0E); } +.ceb-164 { background-color: var(--base0E); } +.cef-165 { color: var(--base0F); } +.ceb-165 { background-color: var(--base0F); } +.cef-166 { color: var(--base08); } +.ceb-166 { background-color: var(--base08); } +.cef-167 { color: var(--base09); } +.ceb-167 { background-color: var(--base09); } +.cef-168 { color: var(--base0A); } +.ceb-168 { background-color: var(--base0A); } +.cef-169 { color: var(--base0B); } +.ceb-169 { background-color: var(--base0B); } +.cef-170 { color: var(--base0C); } +.ceb-170 { background-color: var(--base0C); } +.cef-171 { color: var(--base0D); } +.ceb-171 { background-color: var(--base0D); } +.cef-172 { color: var(--base0E); } +.ceb-172 { background-color: var(--base0E); } +.cef-173 { color: var(--base0F); } +.ceb-173 { background-color: var(--base0F); } +.cef-174 { color: var(--base08); } +.ceb-174 { background-color: var(--base08); } +.cef-175 { color: var(--base09); } +.ceb-175 { background-color: var(--base09); } +.cef-176 { color: var(--base0A); } +.ceb-176 { background-color: var(--base0A); } +.cef-177 { color: var(--base0B); } +.ceb-177 { background-color: var(--base0B); } +.cef-178 { color: var(--base0C); } +.ceb-178 { background-color: var(--base0C); } +.cef-179 { color: var(--base0D); } +.ceb-179 { background-color: var(--base0D); } +.cef-180 { color: var(--base0E); } +.ceb-180 { background-color: var(--base0E); } +.cef-181 { color: var(--base0F); } +.ceb-181 { background-color: var(--base0F); } +.cef-182 { color: var(--base08); } +.ceb-182 { background-color: var(--base08); } +.cef-183 { color: var(--base09); } +.ceb-183 { background-color: var(--base09); } +.cef-184 { color: var(--base0A); } +.ceb-184 { background-color: var(--base0A); } +.cef-185 { color: var(--base0B); } +.ceb-185 { background-color: var(--base0B); } +.cef-186 { color: var(--base0C); } +.ceb-186 { background-color: var(--base0C); } +.cef-187 { color: var(--base0D); } +.ceb-187 { background-color: var(--base0D); } +.cef-188 { color: var(--base0E); } +.ceb-188 { background-color: var(--base0E); } +.cef-189 { color: var(--base0F); } +.ceb-189 { background-color: var(--base0F); } +.cef-190 { color: var(--base08); } +.ceb-190 { background-color: var(--base08); } +.cef-191 { color: var(--base09); } +.ceb-191 { background-color: var(--base09); } +.cef-192 { color: var(--base0A); } +.ceb-192 { background-color: var(--base0A); } +.cef-193 { color: var(--base0B); } +.ceb-193 { background-color: var(--base0B); } +.cef-194 { color: var(--base0C); } +.ceb-194 { background-color: var(--base0C); } +.cef-195 { color: var(--base0D); } +.ceb-195 { background-color: var(--base0D); } +.cef-196 { color: var(--base0E); } +.ceb-196 { background-color: var(--base0E); } +.cef-197 { color: var(--base0F); } +.ceb-197 { background-color: var(--base0F); } +.cef-198 { color: var(--base08); } +.ceb-198 { background-color: var(--base08); } +.cef-199 { color: var(--base09); } +.ceb-199 { background-color: var(--base09); } +.cef-200 { color: var(--base0A); } +.ceb-200 { background-color: var(--base0A); } +.cef-201 { color: var(--base0B); } +.ceb-201 { background-color: var(--base0B); } +.cef-202 { color: var(--base0C); } +.ceb-202 { background-color: var(--base0C); } +.cef-203 { color: var(--base0D); } +.ceb-203 { background-color: var(--base0D); } +.cef-204 { color: var(--base0E); } +.ceb-204 { background-color: var(--base0E); } +.cef-205 { color: var(--base0F); } +.ceb-205 { background-color: var(--base0F); } +.cef-206 { color: var(--base08); } +.ceb-206 { background-color: var(--base08); } +.cef-207 { color: var(--base09); } +.ceb-207 { background-color: var(--base09); } +.cef-208 { color: var(--base0A); } +.ceb-208 { background-color: var(--base0A); } +.cef-209 { color: var(--base0B); } +.ceb-209 { background-color: var(--base0B); } +.cef-210 { color: var(--base0C); } +.ceb-210 { background-color: var(--base0C); } +.cef-211 { color: var(--base0D); } +.ceb-211 { background-color: var(--base0D); } +.cef-212 { color: var(--base0E); } +.ceb-212 { background-color: var(--base0E); } +.cef-213 { color: var(--base0F); } +.ceb-213 { background-color: var(--base0F); } +.cef-214 { color: var(--base08); } +.ceb-214 { background-color: var(--base08); } +.cef-215 { color: var(--base09); } +.ceb-215 { background-color: var(--base09); } +.cef-216 { color: var(--base0A); } +.ceb-216 { background-color: var(--base0A); } +.cef-217 { color: var(--base0B); } +.ceb-217 { background-color: var(--base0B); } +.cef-218 { color: var(--base0C); } +.ceb-218 { background-color: var(--base0C); } +.cef-219 { color: var(--base0D); } +.ceb-219 { background-color: var(--base0D); } +.cef-220 { color: var(--base0E); } +.ceb-220 { background-color: var(--base0E); } +.cef-221 { color: var(--base0F); } +.ceb-221 { background-color: var(--base0F); } +.cef-222 { color: var(--base08); } +.ceb-222 { background-color: var(--base08); } +.cef-223 { color: var(--base09); } +.ceb-223 { background-color: var(--base09); } +.cef-224 { color: var(--base0A); } +.ceb-224 { background-color: var(--base0A); } +.cef-225 { color: var(--base0B); } +.ceb-225 { background-color: var(--base0B); } +.cef-226 { color: var(--base0C); } +.ceb-226 { background-color: var(--base0C); } +.cef-227 { color: var(--base0D); } +.ceb-227 { background-color: var(--base0D); } +.cef-228 { color: var(--base0E); } +.ceb-228 { background-color: var(--base0E); } +.cef-229 { color: var(--base0F); } +.ceb-229 { background-color: var(--base0F); } +.cef-230 { color: var(--base08); } +.ceb-230 { background-color: var(--base08); } +.cef-231 { color: var(--base09); } +.ceb-231 { background-color: var(--base09); } +.cef-232 { color: var(--base0A); } +.ceb-232 { background-color: var(--base0A); } +.cef-233 { color: var(--base0B); } +.ceb-233 { background-color: var(--base0B); } +.cef-234 { color: var(--base0C); } +.ceb-234 { background-color: var(--base0C); } +.cef-235 { color: var(--base0D); } +.ceb-235 { background-color: var(--base0D); } +.cef-236 { color: var(--base0E); } +.ceb-236 { background-color: var(--base0E); } +.cef-237 { color: var(--base0F); } +.ceb-237 { background-color: var(--base0F); } +.cef-238 { color: var(--base08); } +.ceb-238 { background-color: var(--base08); } +.cef-239 { color: var(--base09); } +.ceb-239 { background-color: var(--base09); } +.cef-240 { color: var(--base0A); } +.ceb-240 { background-color: var(--base0A); } +.cef-241 { color: var(--base0B); } +.ceb-241 { background-color: var(--base0B); } +.cef-242 { color: var(--base0C); } +.ceb-242 { background-color: var(--base0C); } +.cef-243 { color: var(--base0D); } +.ceb-243 { background-color: var(--base0D); } +.cef-244 { color: var(--base0E); } +.ceb-244 { background-color: var(--base0E); } +.cef-245 { color: var(--base0F); } +.ceb-245 { background-color: var(--base0F); } +.cef-246 { color: var(--base08); } +.ceb-246 { background-color: var(--base08); } +.cef-247 { color: var(--base09); } +.ceb-247 { background-color: var(--base09); } +.cef-248 { color: var(--base0A); } +.ceb-248 { background-color: var(--base0A); } +.cef-249 { color: var(--base0B); } +.ceb-249 { background-color: var(--base0B); } +.cef-250 { color: var(--base0C); } +.ceb-250 { background-color: var(--base0C); } +.cef-251 { color: var(--base0D); } +.ceb-251 { background-color: var(--base0D); } +.cef-252 { color: var(--base0E); } +.ceb-252 { background-color: var(--base0E); } +.cef-253 { color: var(--base0F); } +.ceb-253 { background-color: var(--base0F); } +.cef-254 { color: var(--base08); } +.ceb-254 { background-color: var(--base08); } +.cef-255 { color: var(--base09); } +.ceb-255 { background-color: var(--base09); } + +/* attributes overrides */ +.a-b { + font-weight: bold; +} +.a-no-b { + font-weight: normal; +} +.a-i { + font-style: italic; +} +.a-no-i { + font-style: normal; +} +.a-u { + text-decoration: underline; +} +.a-no-u { + text-decoration: none; +} +.a-reset { + font-weight: normal; + font-style: normal; + text-decoration: none; +} + +/* highlight messages */ +.bufferline .prefix .highlight { + color: var(--base03) !important; + background-color: var(--base07) !important; + font-weight: bold !important; +} + +/* */ +/* Mobile layout */ +/* */ +@media (max-width: 968px) { + #nicklist { + box-shadow: 400px 0px 400px 400px var(--base00); + } + + .cof-chat_time, + .cof-chat_time_delimiters, + .repeated-time .cob-chat_time, + .repeated-time .cob-chat_time_delimiters { + color: var(--base04); + } + + .footer { + background: var(--base00); + } + + .btn-complete-nick:hover, + .btn-send:hover, + .btn-send-image:hover { + background: var(--base01); + color: var(--base05); + } + +} diff --git a/css/themes/base16-light.css b/css/themes/base16-light.css new file mode 100644 index 0000000..d45d8e4 --- /dev/null +++ b/css/themes/base16-light.css @@ -0,0 +1,20 @@ +@import "base16-default.css"; + +:root { + --base00: #f8f8f8; /* Default Background */ + --base01: #e8e8e8; /* Lighter Background (Used for status bars) */ + --base02: #d8d8d8; /* Selection Background */ + --base03: #b8b8b8; /* Comments, Invisibles, Line Highlighting */ + --base04: #585858; /* Dark Foreground (Used for status bars) */ + --base05: #383838; /* Default Foreground, Caret, Delimiters, Operators */ + --base06: #282828; /* Light Foreground (Not often used) */ + --base07: #181818; /* Light Background (Not often used) */ + --base08: #bd5a56; /* "Red": Variables, XML Tags, Markup Link Text, Markup Lists, Diff Deleted */ + --base09: #a96423; /* "Orange": Integers, Boolean, Constants, XML Attributes, Markup Link Url */ + --base0A: #774b08; /* "Yellow": Classes, Markup Bold, Search Text Background */ + --base0B: #7f9249; /* "Green": Strings, Inherited Class, Markup Code, Diff Inserted */ + --base0C: #3e7971; /* "Cyan": Support, Regular Expressions, Escape Characters, Markup Quotes */ + --base0D: #3e7184; /* "Blue": Functions, Methods, Attribute IDs, Headings */ + --base0E: #734568; /* "Magenta": Keywords, Storage, Selector, Markup Italic, Diff Changed */ + --base0F: #b9825f; /* "Brown": Deprecated, Opening/Closing Embedded Language Tags e.g. */ +} diff --git a/css/themes/base16-mocha.css b/css/themes/base16-mocha.css new file mode 100644 index 0000000..21ee3af --- /dev/null +++ b/css/themes/base16-mocha.css @@ -0,0 +1,20 @@ +@import "base16-default.css"; + +:root { + --base00: #3B3228; + --base01: #534636; + --base02: #645240; + --base03: #7e705a; + --base04: #b8afad; + --base05: #d0c8c6; + --base06: #e9e1dd; + --base07: #f5eeeb; + --base08: #cb6077; + --base09: #d28b71; + --base0A: #f4bc87; + --base0B: #beb55b; + --base0C: #7bbda4; + --base0D: #8ab3b5; + --base0E: #a89bb9; + --base0F: #bb9584; +} diff --git a/css/themes/base16-ocean-dark.css b/css/themes/base16-ocean-dark.css new file mode 100644 index 0000000..7f1647f --- /dev/null +++ b/css/themes/base16-ocean-dark.css @@ -0,0 +1,20 @@ +@import "base16-default.css"; + +:root { + --base00: #2b303b; + --base01: #343d46; + --base02: #4f5b66; + --base03: #65737e; + --base04: #a7adba; + --base05: #c0c5ce; + --base06: #dfe1e8; + --base07: #eff1f5; + --base08: #bf616a; + --base09: #d08770; + --base0A: #ebcb8b; + --base0B: #a3be8c; + --base0C: #96b5b4; + --base0D: #8fa1b3; + --base0E: #b48ead; + --base0F: #ab7967; +} diff --git a/css/themes/base16-solarized-dark.css b/css/themes/base16-solarized-dark.css new file mode 100644 index 0000000..7e8f6e0 --- /dev/null +++ b/css/themes/base16-solarized-dark.css @@ -0,0 +1,20 @@ +@import "base16-default.css"; + +:root { + --base00: #002b36; + --base01: #002b36; + --base02: #073642; + --base03: #073642; + --base04: #586e75; + --base05: #839496; + --base06: #93a1a1; + --base07: #93a1a1; + --base08: #dc322f; + --base09: #cb4b16; + --base0A: #b58900; + --base0B: #859900; + --base0C: #2aa198; + --base0D: #268bd2; + --base0E: #6c71c4; + --base0F: #d33682; +} diff --git a/css/themes/base16-solarized-light.css b/css/themes/base16-solarized-light.css new file mode 100644 index 0000000..9798ff6 --- /dev/null +++ b/css/themes/base16-solarized-light.css @@ -0,0 +1,20 @@ +@import "base16-default.css"; + +:root { + --base00: #fdf6e3; + --base01: #fdf6e3; + --base02: #eee8d5; + --base03: #eee8d5; + --base04: #93a1a1; + --base05: #657b83; + --base06: #586e75; + --base07: #586e75; + --base08: #dc322f; + --base09: #cb4b16; + --base0A: #b58900; + --base0B: #859900; + --base0C: #2aa198; + --base0D: #268bd2; + --base0E: #6c71c4; + --base0F: #d33682; +} diff --git a/css/themes/blue.css b/css/themes/blue.css new file mode 100644 index 0000000..c093a43 --- /dev/null +++ b/css/themes/blue.css @@ -0,0 +1,188 @@ +@import "dark.css"; + +body { + background-color: #1d222c; + color: #dfdfcf; +} + +a { + color: #0787c1; +} +.btn-primary { + background: linear-gradient(#0f99d9,#0177af); + border-color: #0d7eb2; +} + + +.badge { + border-radius: 0; +} + +.footer { + bottom: 5px; +} +#bufferlines { + bottom: 45px; +} + +.form-control { + color: #ccc; + background: #141922; + border: 2px solid #4a5b6c; +} + +.form-control option { + color: #eee; + background: #282828; +} + +.nav-pills > li > a { + /* To prevent resize when they get border on active or hover */ + border: 1px solid transparent; + margin-left: 5px; + margin-right: 5px; +} + +.nav-pills > li.active > a { + background-color: rgba(27, 97, 161, 0.4); + border: 1px solid #1b61a1; +} + +/* fix for mobile firefox which ignores :hover */ +.nav-pills > li > a:active, .nav-pills > li > a:active span, .nav-pills > li.active > a:hover { + background-color: #031633; + color: #fff; + +} +.nav-pills > li > a:hover, .nav-pills > li > a:hover span { + color: #fff; +} + +.nav-pills > li > a:hover, .nav-pills > li > a:focus { + background-color: #282828; + color: white; + border: 1px solid #363943; +} + +.nav-pills > li.highlight > a, .nav-pills > li.highlight > a span { + color: #fff; + background: #283244; +} + +.bufferfilter { + margin-left: 5px; + margin-right: 5px; +} + +tr.bufferline:hover { + background-color: #1b2737; +} +td.prefix { + border-right: 1px solid #464f5e; +} +td.message { + border-left: 1px solid #1b2737; +} +input[type=text], input[type=password], #sendMessage, .badge { + /*box-shadow: 0px 1px 0px rgba(255, 255, 255, 0.1), 0px 1px 7px 0px rgba(0, 0, 0, 0.8) inset; */ + border: 1px solid #4a5b6c; +} + +input[type=text], input[type=password], #sendMessage, .badge, .btn-send, .btn-send-image, .btn-complete-nick { + color: #ccc; + background: none repeat scroll 0% 0% rgba(0, 0, 0, 0.3); +} + +.btn-complete-nick:hover, .btn-complete-nick:focus, +.btn-send:hover, .btn-send:focus, +.btn-send-image:hover, .btn-send-image:focus { + background-color: #555; + color: white; +} + +.nav-pills li:nth-child(2n) { + background: #283244; +} + +.nav-pills > li > a { + color: #ddd; +} + +#topbar .actions { + background: #283244; + color: #666; +} + +#topbar, #sidebar, .panel, .dropdown-menu, .modal-content { + background: #283244; +} +#topbar, #topbar .actions, #sidebar, .panel, .dropdown-menu, .modal-content { + box-shadow: 0 1px #1d222c; + border-bottom: 1px solid #3a4657; +} +#sidebar { + padding-top: 40px; + border-right: 1px solid #1d1f29; + border-bottom: 0; + box-shadow: none; +} +#nicklist a { + border: 1px solid transparent; +} +#nicklist a:hover { + background: #282828; + border: 1px solid #363943; +} + +.horizontal-line { + -webkit-box-shadow: rgba(255, 255, 255, 0.07) 0 1px 0; + -moz-box-shadow: rgba(255, 255, 255, 0.07) 0 1px 0; + box-shadow: rgba(255, 255, 255, 0.07) 0 1px 0; + border-bottom: 1px solid #1b2737; +} +.vertical-line { + -webkit-box-shadow: rgba(255, 255, 255, 0.07) 1px 0 0; + -moz-box-shadow: rgba(255, 255, 255, 0.07) 1px 0 0; + box-shadow: rgba(255, 255, 255, 0.07) 1px 0 0; + border-right: 1px solid #1b2737; +} +.vertical-line-left { + -webkit-box-shadow: rgba(255, 255, 255, 0.07) -1px 0 0; + -moz-box-shadow: rgba(255, 255, 255, 0.07) -1px 0 0; + box-shadow: rgba(255, 255, 255, 0.07) -1px 0 0; + border-left: 1px solid #1b2737; +} +.panel-group .panel-heading + .panel-collapse .panel-body, .modal-body, .modal-header, .modal-footer { + -webkit-box-shadow: rgba(255, 255, 255, 0.07) 0 -1px 0; + -moz-box-shadow: rgba(255, 255, 255, 0.07) 0 -1px 0; + box-shadow: rgba(255, 255, 255, 0.07) 0 -1px 0; + border-top: 1px solid #1b2737; +} + +#readmarker { + border-color: rgba(29, 94, 152, 0.5); + height: 0; +} +#sendMessage:focus, #sendMessage:active { + border: 1px solid; + border-color: #0d7eb2; +} + +@media (min-width: 1400px) { + .content[sidebar-state="visible"] .footer { + padding-left: 205px; + } +} +@media (max-width: 968px) { + .footer { + padding-left: 5px !important; + } + + .btn-complete-nick:hover, + .btn-send:hover, + .btn-send-image:hover { + background: none repeat scroll 0% 0% rgba(0, 0, 0, 0.3); + color: #ccc; + } + +} diff --git a/css/themes/dark-spacious.css b/css/themes/dark-spacious.css new file mode 100644 index 0000000..38117f6 --- /dev/null +++ b/css/themes/dark-spacious.css @@ -0,0 +1,5 @@ +@import "dark.css"; + +tr.bufferline { + line-height: 1.4; +} diff --git a/css/themes/dark.css b/css/themes/dark.css index 8d303aa..c03e47a 100644 --- a/css/themes/dark.css +++ b/css/themes/dark.css @@ -35,6 +35,11 @@ html { color: #222; } +.nav-pills > li.highlight > a, .nav-pills > li.highlight > a span { + color: #fff; + background: #428BCA; +} + tr.bufferline:hover { background-color: #222222; } @@ -77,11 +82,12 @@ input[type=text], input[type=password], #sendMessage, .badge { box-shadow: 0px 1px 0px rgba(255, 255, 255, 0.1), 0px 1px 7px 0px rgba(0, 0, 0, 0.8) inset; } -input[type=text], input[type=password], #sendMessage, .badge, .btn-send, .btn-send-image { +input[type=text], input[type=password], #sendMessage, .badge, .btn-send, .btn-send-image, .btn-complete-nick { color: #ccc; background: none repeat scroll 0% 0% rgba(0, 0, 0, 0.3); } +.btn-complete-nick:hover, .btn-complete-nick:focus, .btn-send:hover, .btn-send:focus, .btn-send-image:hover, .btn-send-image:focus { background-color: #555; @@ -155,6 +161,15 @@ input[type=text], input[type=password], #sendMessage, .badge, .btn-send, .btn-se border-bottom-color: #121212; } +button.close { + color: #ddd; + opacity: 1; +} + +button.close:hover { + color: #ddd; +} + /****************************/ /* Weechat colors and style */ /****************************/ @@ -2119,6 +2134,12 @@ input[type=text], input[type=password], #sendMessage, .badge, .btn-send, .btn-se background: rgb(24,24,24); } + .btn-complete-nick:hover, + .btn-send:hover, + .btn-send-image:hover { + background: none repeat scroll 0% 0% rgba(0, 0, 0, 0.3); + color: #ccc; + } } diff --git a/css/themes/light.css b/css/themes/light.css index 6a5c109..be8012e 100644 --- a/css/themes/light.css +++ b/css/themes/light.css @@ -22,6 +22,12 @@ html { background-color: #222; } +.nav-pills > li.highlight > a, .nav-pills > li.highlight > a span { + color: #fff; + background: #428BCA; +} + +.btn-complete-nick, .btn-send, .btn-send-image, { background: none repeat scroll 0% 0% rgba(255, 255, 255, 0.3); @@ -2099,4 +2105,10 @@ select.form-control, select option, input[type=text], input[type=password], #sen background: rgb(230,230,230); } + .btn-complete-nick:hover, + .btn-send:hover, + .btn-send-image:hover { + color: #428BCA; + } + } diff --git a/directives/input.html b/directives/input.html index 030708f..0c0c343 100644 --- a/directives/input.html +++ b/directives/input.html @@ -1,8 +1,9 @@
- +