1
0
mirror of https://github.com/wbbaddons/Tims-Chat.git synced 2024-10-31 14:10:08 +00:00

Use dropdown for usermenu, resort CSS, improve templates

This commit is contained in:
Tim Düsterhus 2012-10-19 22:26:12 +02:00
parent c23e35aa24
commit ca123d62b0
6 changed files with 286 additions and 321 deletions

View File

@ -369,6 +369,7 @@ window.console ?=
li.attr 'id', id
li.addClass 'timsChatUser'
li.addClass 'jsTooltip'
li.addClass 'dropdown'
li.addClass 'you' if user.userID is WCF.User.userID
li.addClass 'suspended' if user.suspended
if user.awayStatus?
@ -378,16 +379,15 @@ window.console ?=
a = $ '<a>' + WCF.String.escapeHTML(user.username) + '</a>'
a.addClass 'userLink'
a.addClass 'dropdownToggle'
a.data 'userID', user.userID
a.data 'toggle', id
a.click $.proxy (event) ->
event.preventDefault()
@toggleUserMenu $ event.target
, @
li.append a
menu = $ '<ul></ul>'
menu.addClass 'timsChatUserMenu'
#menu.addClass 'timsChatUserMenu'
menu.addClass 'dropdownMenu'
menu.append $ '<li><a>' + WCF.Language.get('wcf.chat.query') + '</a></li>'
menu.append $ '<li><a>' + WCF.Language.get('wcf.chat.kick') + '</a></li>'
menu.append $ '<li><a>' + WCF.Language.get('wcf.chat.ban') + '</a></li>'
@ -549,20 +549,6 @@ window.console ?=
$('#timsChatUserList').hide()
$('#timsChatRoomList').show()
###
# Toggles the user-menu.
#
# @param jQuery-object target
###
toggleUserMenu: (target) ->
li = target.parent()
if li.hasClass 'activeMenuItem'
li.find('.timsChatUserMenu').wcfBlindOut 'vertical', () ->
li.removeClass 'activeMenuItem'
else
li.addClass 'activeMenuItem'
li.find('.timsChatUserMenu').wcfBlindIn 'vertical'
###
# Unloads the chat.
###
unload: () ->

View File

@ -10,10 +10,44 @@
#tplChat {
#content {
position: relative;
}
#timsChatRoomContent {
text-align: left;
#timsChatRoomContent {
text-align: left;
#timsChatTopic {
padding: 5px;
}
.timsChatMessageContainer {
height: 200px;
overflow-y: scroll;
overflow-x: hidden;
padding-left: 7px !important;
.timsChatMessage {
padding-left: 16px;
min-height: 16px;
clear: both;
time {
font-size: .8em;
&::before, &::after {
font-size: .8em;
}
&::before {
content: "[";
}
&::after {
content: "]";
}
}
&.unloaded {
opacity: 0.4;
}
}
}
}
}
.sidebar {
@ -36,149 +70,74 @@
}
}
#timsChatTopic {
padding: 5px;
}
.timsChatMessageContainer {
height: 200px;
overflow-y: scroll;
overflow-x: hidden;
padding-left: 7px !important;
}
#smilies {
padding: 14px 21px 7px;
border-bottom-right-radius: 0px;
> div {
li {
display: inline;
margin: 5px 5px 0 0;
.icon24 {
//.square(16px);
}
}
}
}
#timsChatForm {
white-space: nowrap;
margin-top: 10px;
// Fix to align chatInput in center
text-align: center;
}
#timsChatInput {
position: relative;
z-index: 10;
#timsChatInput {
position: relative;
z-index: 10;
}
}
#timsChatControls {
position: relative;
.borderRadius(5px, 5px, 0, 5px);
}
#timsChatOptions {
top: -1px;
right: 1px;
margin-left: 0;
position: relative;
width: 100%;
> ul {
margin-right: -1px;
text-align: right;
#smilies {
padding: 14px 21px 7px;
border-bottom-right-radius: 0px;
> li {
> a {
&.button {
.borderRadius(0);
margin: 0;
padding-right: 7px;
> div {
li {
display: inline;
margin: 5px 5px 0 0;
.icon24 {
//.square(16px);
}
}
}
}
#timsChatOptions {
top: -1px;
right: 1px;
margin-left: 0;
position: relative;
width: 100%;
> ul {
margin-right: -1px;
text-align: right;
> li {
> a {
&.button {
.borderRadius(0);
margin: 0;
padding-right: 7px;
}
}
display: inline-block;
margin-left: -5px;
}
> li:first-child {
> a {
border-bottom-left-radius: 14px;
}
}
display: inline-block;
margin-left: -5px;
}
> li:first-child {
> a {
border-bottom-left-radius: 14px;
> li:last-child {
> a {
border-bottom-right-radius: 14px;
}
}
}
> li:last-child {
> a {
border-bottom-right-radius: 14px;
}
}
}
}
#timsChatUserList {
.timsChatUserMenu {
display: none;
background-color: rgba(0, 0, 0, 0.1);
margin-bottom: -5px;
padding: 1px 0 6px;
.boxShadowNative(0px 0px 5px 0px rgba(0, 0, 0, 0.1) inset);
border-bottom: 1px solid @wcfContentBackgroundColor;
color: rgba(0, 0, 0, 0.4);
> li {
a {
background-color: rgba(255, 255, 255, 0.22);
.textShadow(@wcfSidebarBackgroundColor + rgba(0, 0, 0, 0.1) + rgba(255, 255, 255, 0.22)) !important;
.borderRadius(5px, 0, 0, 5px);
margin-left: 35px;
padding: 1px 0 1px 15px;
color: @wcfColor;
}
}
}
.timsChatAway {
opacity: .5;
}
> li {
> a {
background-image: url("../icon/arrowRight.svg");
background-position: 15px center;
background-repeat: no-repeat;
}
&.activeMenuItem {
> a {
background-image: url("../icon/arrowDown.svg");
}
}
}
}
.timsChatMessage {
padding-left: 16px;
min-height: 16px;
clear: both;
time {
font-size: .8em;
&::before, &::after {
font-size: .8em;
}
&::before {
content: "[";
}
&::after {
content: "]";
}
}
&.unloaded {
opacity: 0.4;
}
}
@ -189,111 +148,6 @@
background-image: url("../icon/spinner.svg");
}
.timsChatSidebarTabs {
height: 34px;
z-index: 131;
position: relative;
.boxShadowNative(0 0 5px 0 rgba(0, 0, 0, 0.1));
.left & {
margin-right: 1px;
}
.right & {
margin-left: 1px;
}
ul {
background-color: rgba(0, 0, 0, 0.2);
height: 33px;
li {
width: 50%;
float: left;
text-align: center;
a {
color: fade(@wcfColor, 80%);
.textShadow(@wcfContentBackgroundColor);
height: 22px;
padding: 9px 0 0;
.transition(~"border-radius .2s linear 0s, background-color .2s linear 0s, font-size", .2s);
.collapsed & {
border: none !important;
}
}
&.active a {
background-color: @wcfContentBackgroundColor;
border-bottom: 1px solid darken(@wcfSidebarBackgroundColor, 6%);
.borderRadius(0, 7px);
color: @wcfColor;
font-size: 130%;
font-weight: bold;
height: 23px;
padding: 7px 0 0;
}
&:first-child.active a {
.borderRadius(0, 0, 7px, 0);
border-right: 1px solid darken(@wcfSidebarBackgroundColor, 6%);
.right & {
margin-left: -1px;
}
}
&:last-child.active a {
.borderRadius(0, 0, 0, 7px);
border-left: 1px solid darken(@wcfSidebarBackgroundColor, 6%);
.left & {
margin-right: -1px;
}
}
& .badge {
.badgeBG(@wcfSidebarBackgroundColor + rgba(0, 0, 0, 0.2));
.badgeShadow(@wcfSidebarBackgroundColor + rgba(0, 0, 0, 0.2));
position: relative;
top: -1px;
color: #fff;
}
&.active .badge {
font-size: 65% !important;
.badgeBG(@wcfContentBackgroundColor);
.badgeShadow(@wcfContentBackgroundColor);
}
}
}
}
#timsChatRoomList {
margin-top: 5px;
> div > div {
margin-top: 10px;
}
}
#sidebarContainer {
overflow-y: auto;
height: 420px;
width: 100%;
border-top: 1px solid darken(@wcfSidebarBackgroundColor, 8%);
z-index: 131;
position: relative;
}
#sidebarContainer a {
outline: none;
overflow: hidden;
}
#timsChatCopyright {
bottom: 5px;
position: absolute;
@ -306,10 +160,103 @@
min-height: 50%;
}
.sidebarContent {
#sidebarContent {
padding-top: 0px;
> div {
ul {
.timsChatSidebarTabs {
height: 34px;
z-index: 131;
position: relative;
.boxShadowNative(0 0 5px 0 rgba(0, 0, 0, 0.1));
.left & {
margin-right: 1px;
}
.right & {
margin-left: 1px;
}
ul {
background-color: rgba(0, 0, 0, 0.2);
height: 33px;
li {
width: 50%;
float: left;
text-align: center;
a {
color: fade(@wcfColor, 80%);
.textShadow(@wcfContentBackgroundColor);
height: 22px;
padding: 9px 0 0;
.transition(~"border-radius .2s linear 0s, background-color .2s linear 0s, font-size", .2s);
.collapsed & {
border: none !important;
}
}
&.active a {
background-color: @wcfContentBackgroundColor;
border-bottom: 1px solid darken(@wcfSidebarBackgroundColor, 6%);
.borderRadius(0, 7px);
color: @wcfColor;
font-size: 130%;
font-weight: bold;
}
&:first-child.active a {
.borderRadius(0, 0, 7px, 0);
border-right: 1px solid darken(@wcfSidebarBackgroundColor, 6%);
.right & {
margin-left: -1px;
}
}
&:last-child.active a {
.borderRadius(0, 0, 0, 7px);
border-left: 1px solid darken(@wcfSidebarBackgroundColor, 6%);
.left & {
margin-right: -1px;
}
}
.badge {
.badgeBG(@wcfSidebarBackgroundColor + rgba(0, 0, 0, 0.2));
.badgeShadow(@wcfSidebarBackgroundColor + rgba(0, 0, 0, 0.2));
position: relative;
top: -1px;
color: #fff;
}
&.active .badge {
font-size: 65% !important;
.badgeBG(@wcfContentBackgroundColor);
.badgeShadow(@wcfContentBackgroundColor);
}
}
}
}
#sidebarContainer {
overflow-y: auto;
height: 420px;
width: 100%;
border-top: 1px solid darken(@wcfSidebarBackgroundColor, 8%);
z-index: 131;
position: relative;
a {
outline: none;
overflow: hidden;
}
ul:not(.dropdownMenu) {
> li {
margin-top: 5px;
background-color: transparent !important;
@ -319,18 +266,49 @@
background-color: fade(@wcfContentBackgroundColor, 33.33%);
.textShadow(fade(@wcfContentBackgroundColor, 33.33%));
.transition(background-color, .2s);
&:hover {
background-color: @wcfContentBackgroundColor;
}
&.activeMenuItem, &.dropdownOpen, &:hover {
> a {
background-color: @wcfContentBackgroundColor !important;
.boxShadowNative(0 0 5px rgba(0, 0, 0, 0.1));
}
}
}
}
#timsChatRoomList {
margin-top: 5px;
> div {
> div {
text-align: center;
margin-top: 10px;
}
}
}
#timsChatUserList {
.timsChatUserMenu {
display: none;
background-color: rgba(0, 0, 0, 0.1);
border-bottom: 1px solid @wcfContentBackgroundColor;
color: rgba(0, 0, 0, 0.4);
> li {
a {
background-color: rgba(255, 255, 255, 0.22);
.textShadow(@wcfSidebarBackgroundColor + rgba(0, 0, 0, 0.1) + rgba(255, 255, 255, 0.22)) !important;
.borderRadius(5px, 0, 0, 5px);
margin-left: 35px;
padding: 1px 0 1px 15px;
color: @wcfColor;
}
}
}
> li.activeMenuItem {
> a {
background-color: @wcfContentBackgroundColor !important;
.boxShadowNative(0 0 5px rgba(0, 0, 0, 0.1));
}
.timsChatAway {
opacity: .5;
}
}
}

View File

@ -86,32 +86,32 @@
<nav id="timsChatOptions">
<ul class="smallButtons">
<li>
<a id="timsChatAutoscroll" accesskey="d" href="javascript:;" class="timsChatToggle jsTooltip button" title="{lang}wcf.global.button.disable{/lang}" data-disable-message="{lang}wcf.global.button.disable{/lang}" data-enable-message="{lang}wcf.global.button.enable{/lang}" data-status="1">
<a id="timsChatAutoscroll" accesskey="d" class="timsChatToggle jsTooltip button" title="{lang}wcf.global.button.disable{/lang}" data-disable-message="{lang}wcf.global.button.disable{/lang}" data-enable-message="{lang}wcf.global.button.enable{/lang}" data-status="1">
<img alt="" src="{icon size='S'}enabled{/icon}" /> <span>{lang}wcf.chat.scroll{/lang}</span>
</a>
</li>
<li>
<a id="timsChatFullscreen" accesskey="f" href="javascript:;" class="timsChatToggle jsTooltip button" title="{lang}wcf.global.button.disable{/lang}" data-disable-message="{lang}wcf.global.button.disable{/lang}" data-enable-message="{lang}wcf.global.button.enable{/lang}" data-status="0">
<a id="timsChatFullscreen" accesskey="f" class="timsChatToggle jsTooltip button" title="{lang}wcf.global.button.disable{/lang}" data-disable-message="{lang}wcf.global.button.disable{/lang}" data-enable-message="{lang}wcf.global.button.enable{/lang}" data-status="0">
<img alt="" src="{icon size='S'}disabled{/icon}" /> <span>{lang}wcf.chat.fullscreen{/lang}</span>
</a>
</li>
<li>
<a id="timsChatNotify" accesskey="n" href="javascript:;" class="timsChatToggle jsTooltip button" title="{lang}wcf.global.button.enable{/lang}" data-disable-message="{lang}wcf.global.button.disable{/lang}" data-enable-message="{lang}wcf.global.button.enable{/lang}" data-status="0">
<a id="timsChatNotify" accesskey="n" class="timsChatToggle jsTooltip button" title="{lang}wcf.global.button.enable{/lang}" data-disable-message="{lang}wcf.global.button.disable{/lang}" data-enable-message="{lang}wcf.global.button.enable{/lang}" data-status="0">
<img alt="" src="{icon size='S'}disabled{/icon}" /> <span>{lang}wcf.chat.notify{/lang}</span>
</a>
</li>
<li{if !MODULE_SMILEY} style="display: none;"{/if}>
<a id="timsChatSmilies" accesskey="e" href="javascript:;" class="timsChatToggle jsTooltip button" title="{lang}wcf.global.button.{if ENABLE_SMILIES_DEFAULT_VALUE}dis{else}en{/if}able{/lang}" data-disable-message="{lang}wcf.global.button.disable{/lang}" data-enable-message="{lang}wcf.global.button.enable{/lang}" data-status="{@ENABLE_SMILIES_DEFAULT_VALUE}">
<a id="timsChatSmilies" accesskey="e" class="timsChatToggle jsTooltip button" title="{lang}wcf.global.button.{if ENABLE_SMILIES_DEFAULT_VALUE}dis{else}en{/if}able{/lang}" data-disable-message="{lang}wcf.global.button.disable{/lang}" data-enable-message="{lang}wcf.global.button.enable{/lang}" data-status="{@ENABLE_SMILIES_DEFAULT_VALUE}">
<img alt="" src="{icon size='S'}{if ENABLE_SMILIES_DEFAULT_VALUE}en{else}dis{/if}abled{/icon}" /> <span>{lang}wcf.chat.smilies{/lang}</span>
</a>
</li>
<li>
<a id="timsChatClear" href="javascript:;" class="jsTooltip button" title="{lang}wcf.chat.clear.description{/lang}">
<a id="timsChatClear" class="jsTooltip button" title="{lang}wcf.chat.clear.description{/lang}">
<img alt="" src="{icon size='S'}delete{/icon}" /> <span>{lang}wcf.chat.clear{/lang}</span>
</a>
</li>
<li>
<a id="timsChatMark" href="javascript:;" class="jsTooltip button" title="{lang}wcf.chat.mark.description{/lang}">
<a id="timsChatMark" class="jsTooltip button" title="{lang}wcf.chat.mark.description{/lang}">
<img alt="" src="{icon size='S'}check{/icon}" /> <span>{lang}wcf.chat.mark{/lang}</span>
</a>
</li>

View File

@ -1,50 +1,50 @@
{if $templateName == 'chat'}<address id="timsChatCopyright" class="copyright">{lang}wcf.chat.copyright{/lang}</address>
{elseif $templateName == 'chatCopyright'}
<dl>
<dt>{lang}wcf.chat.copyright.leader{/lang}</dt>
<dd>
<ul>
<li><a href="http://tims.bastelstu.be/">Tim Düsterhus</a></li>
</ul>
</dd>
</dl>
<dl>
<dt>{lang}wcf.chat.copyright.developer{/lang}</dt>
<dd>
<ul>
<li><a href="http://tims.bastelstu.be/">Tim Düsterhus</a></li>
<li><a href="https://github.com/max-m">Maximilian Mader</a></li>
</ul>
</dd>
</dl>
<dl>
<dt>{lang}wcf.chat.copyright.graphics{/lang}</dt>
<dd>
<ul>
<li><a href="http://www.cls-design.com/">Tom</a></li>
</ul>
</dd>
</dl>
<dl>
<dt>{lang}wcf.chat.copyright.translation{/lang}</dt>
<dd>
<ul>
<li>Riccardo Vianello (it)</li>
</ul>
</dd>
</dl>
<dl>
<dt>{lang}wcf.chat.copyright.thanks{/lang}</dt>
<dd>
<ul>
<li><a href="http://www.wbbaddons.de/user/2020-noone/">-noone-</a></li>
<li><a href="https://github.com/dtdesign">Alexander Ebert</a></li>
<li>Gabi</li>
<li><a href="https://github.com/Leon-">Stefan Hahn</a></li>
<li><a href="http://packageforge.de">Oliver Kliebisch</a></li>
<li>Christian Kubandt</li>
<li><a href="http://www.wbbaddons.de">Martin Schwendowius</a></li>
</ul>
</dd>
</dl>
<dl>
<dt>{lang}wcf.chat.copyright.leader{/lang}</dt>
<dd>
<ul>
<li><a href="http://tims.bastelstu.be/">Tim Düsterhus</a></li>
</ul>
</dd>
</dl>
<dl>
<dt>{lang}wcf.chat.copyright.developer{/lang}</dt>
<dd>
<ul>
<li><a href="http://tims.bastelstu.be/">Tim Düsterhus</a></li>
<li><a href="https://github.com/max-m">Maximilian Mader</a></li>
</ul>
</dd>
</dl>
<dl>
<dt>{lang}wcf.chat.copyright.graphics{/lang}</dt>
<dd>
<ul>
<li><a href="http://www.cls-design.com/">Tom</a></li>
</ul>
</dd>
</dl>
<dl>
<dt>{lang}wcf.chat.copyright.translation{/lang}</dt>
<dd>
<ul>
<li>Riccardo Vianello (it)</li>
</ul>
</dd>
</dl>
<dl>
<dt>{lang}wcf.chat.copyright.thanks{/lang}</dt>
<dd>
<ul>
<li><a href="http://www.wbbaddons.de/user/2020-noone/">-noone-</a></li>
<li><a href="https://github.com/dtdesign">Alexander Ebert</a></li>
<li>Gabi</li>
<li><a href="https://github.com/Leon-">Stefan Hahn</a></li>
<li><a href="http://packageforge.de">Oliver Kliebisch</a></li>
<li>Christian Kubandt</li>
<li><a href="http://www.wbbaddons.de">Martin Schwendowius</a></li>
</ul>
</dd>
</dl>
{/if}

View File

@ -1,3 +1,4 @@
<script type="text/javascript" src="{@$__wcf->getPath('wcf')}js/be.bastelstu.WCF.Chat.js{if $chatVersion|isset}?version={$chatVersion|urlencode}{/if}"></script>
<script type="text/javascript" src="{@$__wcf->getPath('wcf')}js/jCounter.jQuery.js"></script>
{if CHAT_SOCKET_IO_PATH}<script type="text/javascript" src="{CHAT_SOCKET_IO_PATH}/socket.io/socket.io.js"></script>{/if}
{event name='javascript'}

View File

@ -1,8 +1,8 @@
<div id="sidebarContent" class="sidebarContent">
<nav class="timsChatSidebarTabs">
<ul>
<li id="toggleUsers" class="active"><a href="javascript:;" title="{lang}wcf.chat.users{/lang}">{lang}wcf.chat.users{/lang} <span class="badge">0</span></a></li>
<li id="toggleRooms"><a href="javascript:;" title="{lang}wcf.chat.rooms{/lang}" data-refresh-url="{link controller="Chat" action="RefreshRoomList"}{/link}">{lang}wcf.chat.rooms{/lang} <span class="badge">{#$rooms|count}</span></a></li>
<li id="toggleUsers" class="active"><a title="{lang}wcf.chat.users{/lang}">{lang}wcf.chat.users{/lang} <span class="badge">0</span></a></li>
<li id="toggleRooms"><a title="{lang}wcf.chat.rooms{/lang}" data-refresh-url="{link controller="Chat" action="RefreshRoomList"}{/link}">{lang}wcf.chat.rooms{/lang} <span class="badge">{#$rooms|count}</span></a></li>
</ul>
</nav>
@ -20,7 +20,7 @@
{/if}
{/foreach}
</ul>
<div style="text-align: center;"><button type="button">{lang}wcf.chat.forceRefresh{/lang}</button></div>
<div><button type="button">{lang}wcf.chat.forceRefresh{/lang}</button></div>
</div>
</nav>
</div>