diff --git a/clientapp/templates.js b/clientapp/templates.js index bcd9f83..786067d 100644 --- a/clientapp/templates.js +++ b/clientapp/templates.js @@ -13,7 +13,7 @@ exports.pages = {}; exports.body = function anonymous(locals) { var buf = []; with (locals || {}) { - buf.push('

Update available!

You\'re currently disconnected

'); + buf.push('

Update available!

You\'re currently disconnected

'); } return buf.join(""); }; @@ -113,7 +113,7 @@ exports.includes.call = function anonymous(locals) { exports.includes.contactListItem = function anonymous(locals) { var buf = []; with (locals || {}) { - buf.push('
  • ' + jade.escape(null == (jade.interp = contact.displayName) ? "" : jade.interp) + '' + jade.escape(null == (jade.interp = contact.idleSince) ? "" : jade.interp) + '
    ' + jade.escape(null == (jade.interp = contact.unreadCount) ? "" : jade.interp) + "
  • "); + buf.push('
  • ' + jade.escape(null == (jade.interp = contact.displayName) ? "" : jade.interp) + '' + jade.escape(null == (jade.interp = contact.idleSince) ? "" : jade.interp) + '
    ' + jade.escape(null == (jade.interp = contact.unreadCount) ? "" : jade.interp) + "
  • "); } return buf.join(""); }; @@ -320,7 +320,7 @@ exports.includes.mucBareMessage = function anonymous(locals) { exports.includes.mucListItem = function anonymous(locals) { var buf = []; with (locals || {}) { - buf.push('
  • #
    ' + jade.escape(null == (jade.interp = contact.unreadCount) ? "" : jade.interp) + '
    ' + jade.escape(null == (jade.interp = contact.displayName) ? "" : jade.interp) + "
  • "); + buf.push('
  • ' + jade.escape(null == (jade.interp = contact.unreadCount) ? "" : jade.interp) + '
    ' + jade.escape(null == (jade.interp = contact.displayName) ? "" : jade.interp) + "
  • "); } return buf.join(""); }; @@ -539,7 +539,7 @@ exports.misc.growlMessage = function anonymous(locals) { exports.pages.chat = function anonymous(locals) { var buf = []; with (locals || {}) { - buf.push('
    @
    '); + buf.push('
    '); } return buf.join(""); }; @@ -548,7 +548,7 @@ exports.pages.chat = function anonymous(locals) { exports.pages.groupchat = function anonymous(locals) { var buf = []; with (locals || {}) { - buf.push('
    #
      '); + buf.push('
        '); } return buf.join(""); }; @@ -557,7 +557,7 @@ exports.pages.groupchat = function anonymous(locals) { exports.pages.settings = function anonymous(locals) { var buf = []; with (locals || {}) { - buf.push('

        Settings

        Change Avatar

        Drag and drop a new avatar here

        Desktop Integration

        LDAP settings

        '); + buf.push('

        Settings

        Change Avatar

        Drag and drop a new avatar here

        Desktop Integration

        LDAP settings

        '); } return buf.join(""); }; diff --git a/clientapp/templates/body.jade b/clientapp/templates/body.jade index d8b1dab..692c2d9 100644 --- a/clientapp/templates/body.jade +++ b/clientapp/templates/body.jade @@ -11,15 +11,18 @@ body g(transform='scale(0.4)') path(d='M37.418,34.3c-2.1-2.721-2.622-6.352-1.292-9.604c0.452-1.107,1.104-2.1,1.902-2.951 c-0.753-0.877-1.573-1.697-2.507-2.387l-2.609,1.408c-1.05-0.629-2.194-1.112-3.414-1.421l-0.845-2.833 c-0.75-0.112-1.512-0.188-2.287-0.188c-0.783,0-1.54,0.075-2.288,0.188l-0.851,2.833c-1.215,0.309-2.355,0.792-3.41,1.421 l-2.614-1.408c-1.229,0.912-2.318,2-3.228,3.231l1.404,2.612c-0.628,1.053-1.11,2.193-1.419,3.411l-2.832,0.849 c-0.114,0.75-0.187,1.508-0.187,2.287c0,0.778,0.073,1.537,0.187,2.286l2.832,0.848c0.309,1.22,0.791,2.36,1.419,3.413l-1.404,2.61 c0.909,1.231,1.999,2.321,3.228,3.231l2.614-1.406c1.055,0.628,2.195,1.11,3.41,1.42l0.851,2.832 c0.748,0.114,1.505,0.188,2.288,0.188c0.775,0,1.537-0.074,2.287-0.188l0.845-2.832c1.224-0.31,2.364-0.792,3.414-1.42l0.062,0.033 l2.045-3.02L37.418,34.3z M26.367,36.776c-2.777,0-5.027-2.253-5.027-5.027c0-2.775,2.25-5.028,5.027-5.028 c2.774,0,5.024,2.253,5.024,5.028C31.391,34.523,29.141,36.776,26.367,36.776z') path(d='M51.762,24.505l-1.125-0.459l-1.451,3.55c-0.814,1.993-2.832,3.054-4.505,2.37l-0.355-0.144 c-1.673-0.686-2.37-2.856-1.558-4.849l1.451-3.551l-1.125-0.46c-2.225,0.608-4.153,2.2-5.092,4.501 c-1.225,2.997-0.422,6.312,1.771,8.436l-2.958,6.812l-2.204,3.249l-0.007,2.281l5.275,2.154l1.593-1.633l0.7-3.861l2.901-6.836 c3.049,0.018,5.947-1.785,7.174-4.779C53.186,28.983,52.924,26.499,51.762,24.505z') - section#bookmarks - h1 Rooms - nav - input(type="text", class="inline", placeholder="add a room")#joinmuc - section#roster - h1 Direct messages - ul#contactrequests - nav - input(type="text", class="inline", placeholder="add a contact")#addcontact + div.viewport + section#bookmarks + h1 Rooms + nav + input(type="text", class="inline", placeholder="add a room")#joinmuc + section#roster + h1 Contacts + ul#contactrequests + nav + input(type="text", class="inline", placeholder="add a contact")#addcontact + section#kaiwaNotice + img(src="/images/logo.png", alt="Kaiwa") header#topbar #connectionStatus p diff --git a/clientapp/templates/includes/contactListItem.jade b/clientapp/templates/includes/contactListItem.jade index 252fba3..3059aac 100644 --- a/clientapp/templates/includes/contactListItem.jade +++ b/clientapp/templates/includes/contactListItem.jade @@ -3,6 +3,7 @@ li.contact.joined i.remove.fa.fa-times-circle i.presence.fa.fa-circle .user + img.avatar span.name=contact.displayName span.idleTime=contact.idleSince .unread=contact.unreadCount diff --git a/clientapp/templates/includes/mucListItem.jade b/clientapp/templates/includes/mucListItem.jade index 465cc19..23929cd 100644 --- a/clientapp/templates/includes/mucListItem.jade +++ b/clientapp/templates/includes/mucListItem.jade @@ -2,6 +2,5 @@ li.contact .wrap i.remove.fa.fa-times-circle i.join.fa.fa-sign-in - span.prefix # .unread=contact.unreadCount span.name=contact.displayName diff --git a/clientapp/templates/pages/chat.jade b/clientapp/templates/pages/chat.jade index dbffdbc..e07f4dd 100644 --- a/clientapp/templates/pages/chat.jade +++ b/clientapp/templates/pages/chat.jade @@ -2,7 +2,6 @@ section.page.chat section.conversation header .title - span.prefix @ span.name i.user_presence.fa.fa-circle span.status @@ -19,7 +18,7 @@ section.page.chat button.mute Mute button.unmute Unmute .chatBox + .contactState form.formwrap textarea(name='chatInput', type='text', placeholder='Send a message...', autocomplete='off') button.primary.small.call Call - .contactState diff --git a/clientapp/templates/pages/groupchat.jade b/clientapp/templates/pages/groupchat.jade index 3cc24ab..afac4ea 100644 --- a/clientapp/templates/pages/groupchat.jade +++ b/clientapp/templates/pages/groupchat.jade @@ -2,7 +2,6 @@ section.page.chat section.group.conversation header.online .title - span.prefix # span.name i.channel_actions.fa.fa-comments-o span.status(contenteditable="true", spellcheck="false") diff --git a/clientapp/templates/pages/settings.jade b/clientapp/templates/pages/settings.jade index 80acb41..5f20763 100644 --- a/clientapp/templates/pages/settings.jade +++ b/clientapp/templates/pages/settings.jade @@ -1,9 +1,5 @@ section.page.main - svg(version='1.1', xmlns='http://www.w3.org/2000/svg', xmlns:xlink='http://www.w3.org/1999/xlink', viewbox="0 0 30 30", height="30", width="30") - g(transform='scale(0.5)') - path(d='M37.418,34.3c-2.1-2.721-2.622-6.352-1.292-9.604c0.452-1.107,1.104-2.1,1.902-2.951 c-0.753-0.877-1.573-1.697-2.507-2.387l-2.609,1.408c-1.05-0.629-2.194-1.112-3.414-1.421l-0.845-2.833 c-0.75-0.112-1.512-0.188-2.287-0.188c-0.783,0-1.54,0.075-2.288,0.188l-0.851,2.833c-1.215,0.309-2.355,0.792-3.41,1.421 l-2.614-1.408c-1.229,0.912-2.318,2-3.228,3.231l1.404,2.612c-0.628,1.053-1.11,2.193-1.419,3.411l-2.832,0.849 c-0.114,0.75-0.187,1.508-0.187,2.287c0,0.778,0.073,1.537,0.187,2.286l2.832,0.848c0.309,1.22,0.791,2.36,1.419,3.413l-1.404,2.61 c0.909,1.231,1.999,2.321,3.228,3.231l2.614-1.406c1.055,0.628,2.195,1.11,3.41,1.42l0.851,2.832 c0.748,0.114,1.505,0.188,2.288,0.188c0.775,0,1.537-0.074,2.287-0.188l0.845-2.832c1.224-0.31,2.364-0.792,3.414-1.42l0.062,0.033 l2.045-3.02L37.418,34.3z M26.367,36.776c-2.777,0-5.027-2.253-5.027-5.027c0-2.775,2.25-5.028,5.027-5.028 c2.774,0,5.024,2.253,5.024,5.028C31.391,34.523,29.141,36.776,26.367,36.776z') - path(d='M51.762,24.505l-1.125-0.459l-1.451,3.55c-0.814,1.993-2.832,3.054-4.505,2.37l-0.355-0.144 c-1.673-0.686-2.37-2.856-1.558-4.849l1.451-3.551l-1.125-0.46c-2.225,0.608-4.153,2.2-5.092,4.501 c-1.225,2.997-0.422,6.312,1.771,8.436l-2.958,6.812l-2.204,3.249l-0.007,2.281l5.275,2.154l1.593-1.633l0.7-3.861l2.901-6.836 c3.049,0.018,5.947-1.785,7.174-4.779C53.186,28.983,52.924,26.499,51.762,24.505z') h1#title Settings div#avatarChanger diff --git a/clientapp/views/contactListItem.js b/clientapp/views/contactListItem.js index b936ba3..f49bdd1 100644 --- a/clientapp/views/contactListItem.js +++ b/clientapp/views/contactListItem.js @@ -22,6 +22,7 @@ module.exports = HumanView.extend({ displayUnreadCount: '.unread' }, srcBindings: { + avatar: '.avatar' }, events: { 'click': 'handleClick', diff --git a/dev_config.json b/dev_config.json index 1130136..0905c06 100644 --- a/dev_config.json +++ b/dev_config.json @@ -14,7 +14,7 @@ "domain": "example.com", "wss": "wss://example.com:5281/xmpp-websocket/", "muc": "chat.example.com", - "startup": "room%40chat.example.com", + "startup": "groupchat/room%40chat.example.com", "admin": "admin" }, "ldap": { diff --git a/public/css/_mixins.styl b/public/css/_mixins.styl index 9bfa9e5..c1bf524 100644 --- a/public/css/_mixins.styl +++ b/public/css/_mixins.styl @@ -41,6 +41,7 @@ avatar() width: 36px height: 36px roundall(0.2rem) + border-radius: 50% // this if for the content flash and hardware acceleration bugs in webkit webkit-transition-fix() diff --git a/public/css/_variables.styl b/public/css/_variables.styl index f0a76ca..41bcac9 100644 --- a/public/css/_variables.styl +++ b/public/css/_variables.styl @@ -25,7 +25,7 @@ $pink-lighter = #fce8f1 // Greens -$green = #4C9689 +$green = #41A564 $green-light = lighten($green, 70%) $green-lighter = lighten($green, 94%) $green-lighterer = #B2D5C9 @@ -65,25 +65,32 @@ $black = #3D3C40 // Style -$sidebarTopAndBottomBg = #1A233F +$topbarBg = #3D486B +$topbarFg = #fff + +$meUsernameColor = #fff + +$sidebarTopAndBottomBg = #2B3556 $sidebarOrgaName = #fff $sidebarBorder = #121A33 -$sidebarBg = #3D486B -$sidebarText = #ABB6DA +$sidebarBg = #E5E5E5 +$sidebarText = #565656 +$sidebarSectionTitleColor = #8E8E8E -$sidebarNames = #C1DCEC +$sidebarNames = #919191 $sidebarInputBg = $sidebarBg -$sidebarInputBorder = #626F9C +$sidebarInputBorder = #BBBBBB $sidebarInputText = $sidebarNames -$sidebarSelectionBg = #94B021 -$sidebarSelectionText = #fff +$sidebarSelectionBg = #AEAEAE +$sidebarSelectionText = #000 $sidebarUnreadBg = $sidebarSelectionBg -$sidebarUnreadText = $sidebarSelectionText +$sidebarUnreadText = #000 -$sidebarHover = $sidebarTopAndBottomBg +$sidebarHover = $sidebarSelectionBg +$sidebarHoverText = #fff $sidebarRequestBg = $sidebarHover $sidebarRequestBorder = $sidebarHover @@ -91,8 +98,8 @@ $sidebarRequestBorder = $sidebarHover $sidebarStatusText = $sidebarNames $sidebarStatusBorder = $sidebarInputBorder -$settingsBg = $sidebarBg -$settingsText = #fff +$settingsBg = transparent +$settingsText = #B5B5B5 $settingsHoverBg = #fff $settingsHoverText = $sidebarSelectionBg diff --git a/public/css/otalk.css b/public/css/client.css similarity index 93% rename from public/css/otalk.css rename to public/css/client.css index 67ec4f9..1db9ce0 100644 --- a/public/css/otalk.css +++ b/public/css/client.css @@ -188,7 +188,7 @@ a:active { position: absolute; top: 0px; right: 0px; - left: 220px; + left: 230px; height: 100%; -moz-box-sizing: border-box; -webkit-box-sizing: border-box; @@ -260,7 +260,7 @@ input[type=radio]:disabled { box-shadow: 0 0 5px #fdcad3; } .valid label { - color: #4c9689; + color: #41a564; } .valid input[type=text], .valid input[type=email], @@ -270,9 +270,9 @@ input[type=radio]:disabled { .valid input[type=url], .valid input[type=file], .valid textarea { - background: #f4f9f8; - border: 1px solid #c6e2dd; - color: #c6e2dd; + background: #f3faf6; + border: 1px solid #c3e7d0; + color: #c3e7d0; } .valid input[type=text]:focus, .valid input[type=email]:focus, @@ -282,8 +282,8 @@ input[type=radio]:disabled { .valid input[type=url]:focus, .valid input[type=file]:focus, .valid textarea:focus { - border: 1px solid #c6e2dd; - box-shadow: 0 0 5px #c6e2dd; + border: 1px solid #c3e7d0; + box-shadow: 0 0 5px #c3e7d0; } input[type=text], input[type=email], @@ -364,7 +364,7 @@ label { color: #fdcad3; } .has-icon .ss-icon.ss-check { - color: #c6e2dd; + color: #c3e7d0; } .has-icon .ss-icon.ss-search { color: #e0e0e0; @@ -432,15 +432,15 @@ button.secondary:hover { } .button.primary, button.primary { - background: #4c9689; + background: #41a564; } .button.primary:hover:not(:disabled), button.primary:hover:not(:disabled) { - background: #44877b; + background: #3b955a; } .button.primary:disabled, button.primary:disabled { - background: #c6e2dd; + background: #c3e7d0; } .button.secondary, button.secondary { @@ -517,13 +517,10 @@ button.secondary:hover:not(:disabled) { top: 0px; bottom: 0px; left: 0px; - width: 220px; - background-color: #3d486b; - color: #abb6da; - border-right: 1px solid #121a33; + width: 230px; + background-color: #e5e5e5; + color: #565656; z-index: 300; - overflow-y: auto; - overflow-x: hidden; -webkit-backface-visibility: hidden; -webkit-touch-callout: none; -webkit-user-select: none; @@ -533,24 +530,24 @@ button.secondary:hover:not(:disabled) { user-select: none; } #menu #organization { - width: 220px; + width: 230px; height: 42px; - margin-bottom: 10px; + background: #2b3556; } #menu #organization #orga_name { color: #fff; font-size: 17px; font-weight: 900; - line-height: 53px; + line-height: 42px; vertical-align: middle; margin-left: 20px; } #menu #organization .settings { position: relative; - height: 30px; - left: 0px; - background-color: #3d486b; - color: #fff; + height: 28px; + left: 5px; + background-color: transparent; + color: #b5b5b5; transition: none; border: 0; } @@ -560,13 +557,24 @@ button.secondary:hover:not(:disabled) { left: 3px; margin: 0px; margin-top: -13px; - fill: #fff; + fill: #b5b5b5; } #menu #organization .settings:hover svg { - fill: #94b021; + fill: #aeaeae; } #menu #organization .settings.active svg { - fill: #94b021; + fill: #aeaeae; +} +#menu .viewport { + position: absolute; + top: 42px; + bottom: 22px; + left: 0; + right: 0; + overflow-y: auto; + overflow-x: hidden; + padding-top: 20px; + padding-bottom: 10px; } #menu .main { margin: 10px 0 0 0; @@ -590,14 +598,15 @@ button.secondary:hover:not(:disabled) { position: relative; } #menu h1 { - font-size: 14px; + font-size: 15px; margin: 0; padding: 4px 20px; text-transform: uppercase; + margin-bottom: 7px; + color: #8e8e8e; } #roster, #bookmarks { - margin-right: 20px; margin-bottom: 25px; } #roster #contactrequests, @@ -612,9 +621,9 @@ button.secondary:hover:not(:disabled) { margin-left: 20px; margin-bottom: 10px; padding-bottom: 4px; - background: #1a233f; + background: #aeaeae; border-radius: 0.25rem; - border: 2px solid #1a233f; + border: 2px solid #aeaeae; } #roster #contactrequests li .response, #bookmarks #contactrequests li .response { @@ -642,30 +651,29 @@ button.secondary:hover:not(:disabled) { width: 178px; height: 25px; font-size: 12px; - background-color: #3d486b; + background-color: #e5e5e5; border-radius: 0.25rem; - border: 1px solid #626f9c; - color: #c1dcec; + border: 1px solid #bbb; + color: #919191; } #roster li, #bookmarks li { list-style-type: none; - padding: 4px 10px; - margin: 0px 0px 0px 10px; - border-radius: 0.25rem; + padding: 3px 10px; + padding-right: 15px; position: relative; - height: 25px; font-size: 14px; cursor: pointer; width: 100%; -moz-box-sizing: border-box; -webkit-box-sizing: border-box; box-sizing: border-box; - color: #c1dcec; + color: #919191; } #roster li:hover, #bookmarks li:hover { - background: #1a233f; + background: #aeaeae; + color: #fff; } #roster li.joined:hover:not(.hasUnread) .remove, #bookmarks li.joined:hover:not(.hasUnread) .remove { @@ -680,7 +688,7 @@ button.secondary:hover:not(:disabled) { #roster li.hasUnread .prefix, #bookmarks li.hasUnread .prefix { font-weight: 900; - color: #fff; + color: #000; } #roster li:not(.activeContact).offline .presence, #bookmarks li:not(.activeContact).offline .presence, @@ -704,14 +712,7 @@ button.secondary:hover:not(:disabled) { #bookmarks li.activeContact, #roster li.offline.activeContact, #bookmarks li.offline.activeContact { - background: #94b021; -} -#roster li.activeContact .prefix, -#bookmarks li.activeContact .prefix, -#roster li.offline.activeContact .prefix, -#bookmarks li.offline.activeContact .prefix { - color: #b2d5c9; - opacity: 1; + background: #aeaeae; } #roster li.activeContact:not(.dnd):not(.away):not(.online) .presence, #bookmarks li.activeContact:not(.dnd):not(.away):not(.online) .presence, @@ -728,17 +729,17 @@ button.secondary:hover:not(:disabled) { #bookmarks li.activeContact .join, #roster li.offline.activeContact .join, #bookmarks li.offline.activeContact .join { - color: #fff; + color: #000; } #roster li.activeContact .name, #bookmarks li.activeContact .name, #roster li.offline.activeContact .name, #bookmarks li.offline.activeContact .name { - color: #fff; + color: #000; } #roster li:not(.activeContact).online .presence, #bookmarks li:not(.activeContact).online .presence { - color: #4c9689; + color: #41a564; opacity: 1; } #roster li.online .name, @@ -775,7 +776,7 @@ button.secondary:hover:not(:disabled) { } #roster li.idle .name, #bookmarks li.idle .name { - color: #c1dcec; + color: #919191; font-style: italic; } #roster li .presence, @@ -784,18 +785,18 @@ button.secondary:hover:not(:disabled) { display: inline-block; margin-top: -10px; vertical-align: middle; - opacity: 0.5; + position: absolute; + right: 28px; + top: 21px; } #roster li .user, #bookmarks li .user { display: inline-block; - width: 120px; - line-height: 100%; + width: 170px; overflow: hidden; text-overflow: ellipsis; - height: 17px; + height: 20px; font-style: italic; - text-shadow: 0px 1px 1px rgba(0,0,0,0.25); } #roster li .status, #bookmarks li .status { @@ -811,22 +812,36 @@ button.secondary:hover:not(:disabled) { font-size: 12px; color: #594a57; } +#roster li .avatar, +#bookmarks li .avatar { + width: 16px; + height: 16px; + -moz-border-radius: 0.2rem; + -webkit-border-radius: 0.2rem; + -khtml-border-radius: 0.2rem; + -o-border-radius: 0.2rem; + -border-radius: 0.2rem; + border-radius: 0.2rem; + border-radius: 50%; + margin: 0; + padding: 0; + margin-right: 5px; + margin-top: 4px; +} #roster li .name, #bookmarks li .name { width: 100%; - line-height: 100%; overflow: hidden; text-overflow: ellipsis; - height: 17px; - text-shadow: 0px 1px 1px rgba(0,0,0,0.3); - position: absolute; - left: 22px; max-width: 140px; + line-height: 23px; + height: 23px; + position: absolute; } #roster li .unread, #bookmarks li .unread { display: none; - color: #fff; + color: #000; height: 16px; width: 18px; -moz-border-radius: 5px; @@ -837,12 +852,12 @@ button.secondary:hover:not(:disabled) { border-radius: 5px; position: absolute; padding-top: 2px; - right: 5px; - top: 3px; + right: 15px; + top: 6px; font-size: 10px; font-weight: 700; text-align: center; - background: #94b021; + background: #aeaeae; } #roster li .unread:not(:empty), #bookmarks li .unread:not(:empty) { @@ -853,21 +868,13 @@ button.secondary:hover:not(:disabled) { #roster li .join, #bookmarks li .join { position: absolute; - right: 7px; - top: 5px; + right: 10px; + top: 8px; font-size: 14px; display: inline-block; font-family: FontAwesome; visibility: hidden; } -#roster li .prefix, -#bookmarks li .prefix { - font-weight: 300; - opacity: 0.5; - position: relative; - left: -15px; - text-shadow: 0px 1px 1px rgba(0,0,0,0.25); -} #roster li button, #bookmarks li button { margin: -15px 0px 0px 5px; @@ -889,10 +896,24 @@ button.secondary:hover:not(:disabled) { display: inline-block; } #roster .wrap { - padding-left: 0px; + padding-left: 14px; + height: 23px; } #bookmarks .wrap { padding-left: 14px; + height: 23px; +} +#kaiwaNotice { + position: absolute; + bottom: 5px; + left: 50%; + width: 50px; + margin-left: -25px; +} +#kaiwaNotice img { + width: 100%; + display: block; + opacity: 0.4; } @-moz-keyframes pulsate { 0% { @@ -964,9 +985,9 @@ button.secondary:hover:not(:disabled) { position: fixed; top: 0px; right: 0px; - left: 220px; + left: 230px; right: 200px; - height: 55px; + height: 42px; z-index: 101; } .conversation header .title { @@ -975,7 +996,7 @@ button.secondary:hover:not(:disabled) { top: 0px; white-space: nowrap; display: inline-block; - height: 53px; + height: 42px; } .conversation header .prefix, .conversation header .name, @@ -988,13 +1009,13 @@ button.secondary:hover:not(:disabled) { text-rendering: optimizelegibility; top: 0px; vertical-align: middle; + line-height: 42px; } .conversation header .prefix { color: #9e9ea6; font-size: 22px; font-weight: 500; margin-left: 25px; - line-height: 53px; cursor: default; } .conversation header .name { @@ -1002,15 +1023,14 @@ button.secondary:hover:not(:disabled) { font-weight: 900; overflow: hidden; text-overflow: ellipsis; - padding-left: 3px; - line-height: 53px; + padding-left: 20px; cursor: default; + color: #fff; } .conversation header .user_presence, .conversation header .channel_actions { color: #9e9ea6; padding-left: 8px; - line-height: 53px; cursor: default; } .conversation header .user_presence { @@ -1018,7 +1038,7 @@ button.secondary:hover:not(:disabled) { font-size: 12px; } .conversation header .user_presence.online { - color: #4c9689; + color: #41a564; opacity: 1; } .conversation header .user_presence.offline { @@ -1053,7 +1073,6 @@ button.secondary:hover:not(:disabled) { font-size: 16px; line-height: 18px; margin-left: 15px; - padding-top: 5px; white-space: nowrap; overflow: hidden; text-overflow: ellipsis; @@ -1154,8 +1173,7 @@ button.secondary:hover:not(:disabled) { bottom: 0px; position: fixed; right: 0px; - left: 221px; - height: 4rem; + left: 230px; z-index: 302; transition: none; -webkit-transition: none; @@ -1164,7 +1182,7 @@ button.secondary:hover:not(:disabled) { display: none; position: fixed; left: 245px; - bottom: 64px; + bottom: 46px; border: 2px solid #ddd; border-bottom: 0; border-radius: 0.25rem 0.25rem 0 0; @@ -1198,30 +1216,24 @@ button.secondary:hover:not(:disabled) { transition: none; -webkit-transition: none; position: relative; - height: 38px; - left: 24px; - margin-right: 50px; } .conversation .chatBox textarea { display: inline-block; vertical-align: middle; background: none repeat scroll 0% 0% padding-box #fff; font-size: 13px; - border-width: 2px; - border-style: solid; - border-color: #e0e0e0; - border-image: none; - border-radius: 0px 0.2rem 0.2rem 0px; + border: 0; + border-top: 2px solid #e0e0e0; + border-radius: 0; font-family: "Lato", sans-serif; margin: 0; color: #3d3c40; overflow-y: auto; box-shadow: none; outline: 0px none; - position: absolute; bottom: 0px; - height: 38px; - padding: 9px 5px 9px 8px; + height: 44px; + padding: 13px 24px; max-height: 102px; resize: none !important; } @@ -1249,8 +1261,8 @@ button.secondary:hover:not(:disabled) { position: absolute; top: 0px; right: 0px; - bottom: 4rem; - margin-top: 54px; + bottom: 59px; + margin-top: 43px; width: 100%; -moz-box-sizing: border-box; -webkit-box-sizing: border-box; @@ -1261,14 +1273,13 @@ button.secondary:hover:not(:disabled) { display: block; background: none repeat scroll 0% 0% #fff; font-size: 1rem; - color: #555459; - font-weight: 900; - text-align: center; + color: #babbbf; + text-align: right; cursor: default; clear: both; position: relative; line-height: 1.2rem; - margin: 1.5rem 0px; + margin: 10px 0 30px; padding: 0; min-height: 0; } @@ -1278,14 +1289,13 @@ button.secondary:hover:not(:disabled) { top: 0.6rem; margin: 0px; border-width: 1px 0px 0px 0px; - border-style: solid none; + border-style: dotted none; border-color: #ddd; } .messages li.day_divider .day_divider_name { background: none repeat scroll 0% 0% #fff; text-transform: capitalize; - text-align: center; - padding: 0px 1rem; + padding-left: 1rem; display: inline-block; margin: 0px auto; position: relative; @@ -1315,6 +1325,7 @@ button.secondary:hover:not(:disabled) { -o-border-radius: 0.2rem; -border-radius: 0.2rem; border-radius: 0.2rem; + border-radius: 50%; } .messages li .messageAvatar .name { text-indent: -9999em; @@ -1349,15 +1360,15 @@ button.secondary:hover:not(:disabled) { padding: 0px 0px 12px 15px; width: 99%; vertical-align: top; + position: relative; } .messages .messageWrapper .message_header .name { display: inline-block; margin-right: 0.25rem; - font-weight: 900; - font-size: 15px; - color: #3d3c40; - line-height: 22px; - cursor: pointer; + font-size: 12px; + line-height: 16px; + color: #9e9ea6; + font-weight: bold; } .messages .messageWrapper .message_header .name:empty { margin-right: 0; @@ -1365,7 +1376,7 @@ button.secondary:hover:not(:disabled) { .messages .messageWrapper .message_header .nickname { display: inline-block; font-weight: 500; - font-size: 14px; + font-size: 12px; color: #9e9ea6; line-height: 22px; cursor: pointer; @@ -1383,13 +1394,15 @@ button.secondary:hover:not(:disabled) { width: 60px; line-height: 22px; text-transform: uppercase; - cursor: pointer; + text-aligne: right; + position: absolute; + right: 0; } .messages .message { font-size: 15px; - line-height: 22px; + line-height: 20px; color: #3d3c40; - margin: 0px 0px 2px 0px; + margin: 0; display: block; min-width: 20px; width: 100%; @@ -1471,11 +1484,13 @@ button.secondary:hover:not(:disabled) { } #members_toggle { position: absolute; - top: 60px; - right: 20px; + top: 50px; + right: 27px; cursor: pointer; color: #9e9ea6; font-size: 16px; + background: #fff; + padding: 5px; } #members_toggle:hover { color: #439fe0; @@ -1541,8 +1556,8 @@ button.secondary:hover:not(:disabled) { } .groupRoster li.online:before, .groupRoster li.chat:before { - background: #4c9689; - border-color: #4c9689; + background: #41a564; + border-color: #41a564; } .groupRoster li.online:not(:hover) .name, .groupRoster li.chat:not(:hover) .name { @@ -1600,24 +1615,12 @@ button.secondary:hover:not(:disabled) { .embed a.source { display: none; } -.main svg { - position: absolute; - top: 24px; - left: 16px; - margin: 0px; - margin-top: -13px; - fill: #9e9ea6; - z-index: 101; -} .main h1 { - color: #555459; - padding: 0; + color: #fff; + padding: 6px 12px; margin: 0; - position: fixed; - top: 14px; - left: 266px; - right: 200px; z-index: 101; + position: fixed; } .main #ldapSettings { display: none; @@ -1681,7 +1684,7 @@ button.secondary:hover:not(:disabled) { .main > div #ldapUsers .fa-plus:hover, .main > div #ldapUsers .fa-minus:hover, .main > div #ldapUsers .delete:hover { - color: #94b021; + color: #aeaeae; } .main > div #ldapUsers .fa-plus.meIsAdmin, .main > div #ldapUsers .fa-minus.meIsAdmin, @@ -1734,9 +1737,6 @@ button.secondary:hover:not(:disabled) { .logout { margin-right: 5px; } -.aux { - background: #fafafb; -} .aux header { margin-top: 8%; text-align: center; @@ -1941,7 +1941,6 @@ rgba(0,0,0,0.7) margin: 0; } #topbar.connected { - background-color: #f7f7f7; z-index: 100; } #topbar.connected #connectionStatus { @@ -1951,9 +1950,9 @@ rgba(0,0,0,0.7) position: fixed; right: 0px; top: 0px; - height: 55px; + height: 42px; width: 100%; - background-color: #8899ce; + background-color: #3d486b; z-index: 102; -webkit-touch-callout: none; -webkit-user-select: none; @@ -1965,7 +1964,7 @@ rgba(0,0,0,0.7) } #topbar #connectionStatus { width: 340px; - margin: 9px auto; + margin: 2px auto; background-color: transparent; } #topbar #connectionStatus p { @@ -1986,7 +1985,7 @@ rgba(0,0,0,0.7) display: none; position: fixed; right: 0; - padding: 8px 5px 5px 5px; + padding: 1px 0px 5px 5px; width: 175px; } #topbar .avatar { @@ -1997,6 +1996,7 @@ rgba(0,0,0,0.7) background-color: transparent; vertical-align: middle; margin: 3px 0.5rem 0px 0px; + border-radius: 50%; } #topbar .name, #topbar .status { @@ -2007,19 +2007,18 @@ rgba(0,0,0,0.7) text-align: right; } #topbar .name { - color: #555459; - font-size: 17px; + color: #fff; + font-size: 14px; font-weight: 900; + margin-top: 3px; } #topbar .status { color: #9e9ea6; font-weight: normal; - font-size: 14px; - line-height: 14px; + font-size: 12px; border-width: 0px; margin: 0px; padding: 0px; - line-height: 18px; height: 18px; white-space: nowrap; transition: all 0.25s; diff --git a/public/css/otalk.styl b/public/css/client.styl similarity index 100% rename from public/css/otalk.styl rename to public/css/client.styl diff --git a/public/css/components/layout.styl b/public/css/components/layout.styl index 4843910..97a7bd8 100644 --- a/public/css/components/layout.styl +++ b/public/css/components/layout.styl @@ -27,6 +27,6 @@ a position: absolute top: 0px right: 0px - left: 220px + left: 230px height: 100% borderbox() diff --git a/public/css/pages/aux.styl b/public/css/pages/aux.styl index e7db267..1f57dc3 100644 --- a/public/css/pages/aux.styl +++ b/public/css/pages/aux.styl @@ -1,5 +1,4 @@ .aux - background: lighten($gray-light, 93%) header margin-top: 8% diff --git a/public/css/pages/chat.styl b/public/css/pages/chat.styl index 4365812..d80d3b7 100644 --- a/public/css/pages/chat.styl +++ b/public/css/pages/chat.styl @@ -23,9 +23,9 @@ position: fixed top: 0px right: 0px - left: 220px + left: 230px right: 200px - height: 55px + height: 42px z-index: 101 .title @@ -34,7 +34,7 @@ top: 0px white-space: nowrap display: inline-block - height: 53px + height: 42px .prefix, .name, .user_presence, .channel_actions, .status display: inline-block @@ -43,13 +43,13 @@ text-rendering: optimizelegibility top: 0px vertical-align: middle + line-height: 42px .prefix color: $gray font-size: $font-size-h2 font-weight: $font-weight-classic margin-left: 25px - line-height: 53px cursor: default .name @@ -57,14 +57,13 @@ font-weight: $font-weight-bolder overflow: hidden text-overflow: ellipsis - padding-left: 3px - line-height: 53px + padding-left: 20px cursor: default + color: $topbarFg .user_presence, .channel_actions color: $gray padding-left: 8px - line-height: 53px cursor: default .user_presence @@ -106,7 +105,6 @@ font-size: $font-size-h3 line-height: 18px margin-left: 15px - padding-top: 5px white-space: nowrap overflow: hidden text-overflow: ellipsis @@ -194,8 +192,7 @@ bottom: 0px position: fixed right: 0px - left: 221px - height: 4rem + left: 230px z-index: 302 transition: none -webkit-transition: none @@ -204,7 +201,7 @@ display: none position: fixed left: 245px - bottom: 64px + bottom: 46px border: 2px solid #ddd border-bottom: 0 border-radius: 0.25rem 0.25rem 0 0 @@ -235,30 +232,24 @@ transition: none -webkit-transition: none position: relative - height:38px - left: 24px - margin-right: 50px textarea display: inline-block vertical-align: middle background: none repeat scroll 0% 0% padding-box #fff font-size: 13px - border-width: 2px - border-style: solid - border-color: $gray-lighter - border-image: none - border-radius: 0px 0.2rem 0.2rem 0px + border: 0 + border-top: 2px solid $gray-lighter + border-radius: 0 font-family: "Lato",sans-serif margin: 0 color: #3D3C40 overflow-y: auto box-shadow: none outline: 0px none - position: absolute bottom: 0px - height: 38px - padding: 9px 5px 9px 8px + height: 44px; + padding: 13px 24px max-height: 102px resize: none !important @@ -285,8 +276,8 @@ position: absolute top: 0px right: 0px - bottom: 4rem - margin-top: 54px + bottom: 59px + margin-top: 43px width: 100% borderbox() -webkit-overflow-scrolling: touch @@ -295,14 +286,13 @@ display: block background: none repeat scroll 0% 0% #fff font-size: 1rem - color: #555459 - font-weight: 900 - text-align: center + color: $gray-light + text-align: right cursor: default clear: both position: relative line-height: 1.2rem - margin: 1.5rem 0px + margin: 10px 0 30px padding: 0 min-height: 0 @@ -312,14 +302,13 @@ top: 0.6rem margin: 0px border-width: 1px 0px 0px 0px - border-style: solid none + border-style: dotted none border-color: #ddd .day_divider_name background: none repeat scroll 0% 0% #fff text-transform: capitalize - text-align: center - padding: 0px 1rem + padding-left: 1rem display: inline-block margin: 0px auto position: relative @@ -376,24 +365,24 @@ padding: 0px 0px 12px 15px width: 99% vertical-align: top + position: relative .message_header .name display: inline-block margin-right: 0.25rem - font-weight: $font-weight-bolder - font-size: $font-size-message - color: $black - line-height: 22px - cursor: pointer + font-size: $font-size-small + line-height: 16px + color: $gray + font-weight: bold &:empty margin-right: 0 .nickname display: inline-block font-weight: $font-weight-classic - font-size: $font-size-base + font-size: $font-size-small color: $gray line-height: 22px cursor: pointer @@ -409,13 +398,15 @@ width: 60px line-height: 22px text-transform: uppercase - cursor: pointer + text-aligne: right + position: absolute + right: 0 .message font-size: $font-size-message - line-height: 22px + line-height: 20px color: $black - margin: 0px 0px 2px 0px + margin: 0 display: block min-width: 20px width: 100% @@ -502,11 +493,13 @@ */ #members_toggle position: absolute - top: 60px - right: 20px + top: 50px + right: 27px cursor: pointer color: $gray font-size: $font-size-h3 + background: #fff + padding: 5px &:hover color: #439FE0 diff --git a/public/css/pages/header.styl b/public/css/pages/header.styl index 46cdde4..36fe73c 100644 --- a/public/css/pages/header.styl +++ b/public/css/pages/header.styl @@ -2,7 +2,6 @@ @import '../_mixins' #topbar.connected - background-color: rgb(247, 247, 247) z-index: 100 #connectionStatus display: none @@ -11,16 +10,16 @@ position: fixed right: 0px top: 0px - height: 55px + height: 42px width: 100% - background-color: lighten($sidebarTopAndBottomBg, 60%) + background-color: $topbarBg z-index: 102 noselect() - color: #fff + color: $topbarFg #connectionStatus width: 340px - margin: 9px auto + margin: 2px auto background-color: transparent p diff --git a/public/css/pages/me.styl b/public/css/pages/me.styl index 82809fb..63cf9a8 100644 --- a/public/css/pages/me.styl +++ b/public/css/pages/me.styl @@ -7,7 +7,7 @@ display: none position: fixed right: 0 - padding: 8px 5px 5px 5px + padding: 1px 0px 5px 5px width: 175px .avatar @@ -18,6 +18,7 @@ background-color: transparent vertical-align: middle margin: 3px 0.5rem 0px 0px; + border-radius: 50%; .name, .status @@ -28,19 +29,18 @@ text-align: right .name - color: $gray-dark - font-size: $font-size-large + color: $meUsernameColor + font-size: $font-size-base font-weight: $font-weight-bolder + margin-top: 3px; .status color: $gray font-weight: normal - font-size: $font-size-base - line-height: $font-size-base + font-size: $font-size-small border-width: 0px margin: 0px padding: 0px - line-height: 18px height: 18px white-space: nowrap transition: all .25s diff --git a/public/css/pages/roster.styl b/public/css/pages/roster.styl index 1cea884..f831bbc 100644 --- a/public/css/pages/roster.styl +++ b/public/css/pages/roster.styl @@ -6,33 +6,30 @@ top: 0px bottom: 0px left: 0px - width: 220px + width: 230px background-color: $sidebarBg color: $sidebarText - border-right: 1px solid $sidebarBorder z-index: 300 - overflow-y: auto; - overflow-x: hidden; webkit-transition-fix() noselect() #organization - width: 220px + width: 230px height: 42px - margin-bottom: 10px + background: $sidebarTopAndBottomBg #orga_name - color: $sidebarOrgaName + color: $topbarFg font-size: $font-size-large font-weight: $font-weight-bolder - line-height: 53px; + line-height: 42px; vertical-align: middle margin-left: 20px .settings position: relative - height: 30px - left: 0px + height: 28px; + left: 5px; background-color: $settingsBg color: $settingsText transition: none @@ -54,6 +51,17 @@ svg fill: $settingsHoverText + .viewport + position: absolute + top: 42px + bottom: 22px + left: 0 + right: 0 + overflow-y: auto + overflow-x: hidden + padding-top: 20px + padding-bottom: 10px + .main margin: 10px 0 0 0 text-align: center @@ -76,14 +84,15 @@ position: relative h1 - font-size: $font-size-base + font-size: $font-size-message margin: 0 padding: 4px 20px text-transform: uppercase + margin-bottom: 7px; + color: $sidebarSectionTitleColor #roster, #bookmarks - margin-right: 20px margin-bottom: 25px #contactrequests @@ -126,11 +135,9 @@ li list-style-type: none - padding: 4px 10px - margin: 0px 0px 0px 10px - border-radius: 0.25rem + padding: 3px 10px + padding-right: 15px position: relative - height: 25px font-size: $font-size-base cursor: pointer width: 100% @@ -139,6 +146,7 @@ &:hover background: $sidebarHover + color: $sidebarHoverText &.joined &:hover:not(.hasUnread) .remove @@ -150,7 +158,7 @@ &.hasUnread, &.hasUnread .prefix font-weight: $font-weight-bolder - color: #fff + color: $sidebarUnreadText &:not(.activeContact).offline, &:not(.activeContact).chat @@ -170,16 +178,13 @@ &.activeContact, &.offline.activeContact background: $sidebarSelectionBg - .prefix - color: $green-lighterer - opacity: 1 &:not(.dnd):not(.away):not(.online) .presence color: $brown-darkerer opacity: 1 .remove, .join - color: #fff + color: $sidebarSelectionText .name - color: #fff + color: $sidebarSelectionText &:not(.activeContact).online .presence @@ -221,17 +226,17 @@ display: inline-block margin-top: -10px vertical-align: middle - opacity: 0.5 + position: absolute; + right: 28px; + top: 21px; .user display: inline-block - width: 120px - line-height: 100% + width: 170px overflow: hidden text-overflow: ellipsis - height: $font-size-base+3 + height: $font-size-base+6 font-style: italic - text-shadow: 0px 1px 1px rgba(0, 0, 0, 0.25) .status font-size: $font-size-small @@ -245,16 +250,24 @@ font-size: $font-size-small color: darken($brown-light, 50%) + .avatar + width: 16px + height: 16px + roundall(0.2rem) + border-radius: 50% + margin: 0 + padding: 0 + margin-right: 5px + margin-top: 4px + .name width: 100% - line-height: 100% overflow: hidden text-overflow: ellipsis - height: $font-size-base+3 - text-shadow: 0px 1px 1px rgba(0, 0, 0, 0.3) - position: absolute - left: 22px max-width: 140px + line-height: 23px + height: 23px + position: absolute .unread display: none @@ -264,8 +277,8 @@ roundall(5px) position: absolute padding-top:2px - right: 5px - top: 3px + right: 15px + top: 6px font-size: $font-size-smaller font-weight: $font-weight-bold text-align: center @@ -276,20 +289,13 @@ .remove, .join position: absolute - right: 7px - top: 5px + right: 10px + top: 8px font-size: $font-size-base display: inline-block font-family: FontAwesome visibility: hidden - .prefix - font-weight: 300 - opacity: 0.5 - position: relative - left: -15px - text-shadow: 0px 1px 1px rgba(0, 0, 0, 0.25); - button margin: -15px 0px 0px 5px @@ -308,11 +314,13 @@ #roster .wrap - padding-left: 0px + padding-left: 14px + height: 23px; #bookmarks .wrap padding-left: 14px + height: 23px @keyframes pulsate 0% @@ -321,3 +329,15 @@ opacity: 0.5 100% opacity: 1.0 + +#kaiwaNotice + position: absolute + bottom: 5px + left: 50% + width: 50px + margin-left: -25px + + img + width: 100% + display: block + opacity: .4 diff --git a/public/css/pages/settings.styl b/public/css/pages/settings.styl index 2cacf51..114f3a8 100644 --- a/public/css/pages/settings.styl +++ b/public/css/pages/settings.styl @@ -4,24 +4,12 @@ // Settings .main - svg - position: absolute - top: 24px - left: 16px - margin: 0px - margin-top: -13px - fill: $gray - z-index: 101 - h1 - color: $gray-dark - padding: 0 + color: #fff + padding: 6px 12px margin: 0 - position: fixed - top: 14px - left: 266px - right: 200px z-index: 101 + position: fixed #ldapSettings display: none diff --git a/server.js b/server.js index 369171e..59f5d9a 100644 --- a/server.js +++ b/server.js @@ -352,7 +352,7 @@ var clientApp = new Moonboots({ debug: false }, stylesheets: [ - __dirname + '/public/css/otalk.css', + __dirname + '/public/css/client.css', __dirname + '/public/css/jquery.oembed.css', __dirname + '/public/css/jquery-impromptu.css' ], @@ -400,5 +400,5 @@ clientApp.on('ready', function () { //}, app).listen(config.http.port); app.listen(config.http.port, function () { - console.log('Otalk running at: ' + config.http.baseUrl); + console.log('Kaiwa running at: ' + config.http.baseUrl); }); diff --git a/views/layout.jade b/views/layout.jade index cbd76d1..4dc40f2 100644 --- a/views/layout.jade +++ b/views/layout.jade @@ -3,7 +3,7 @@ html head title Kaiwa meta(name="viewport", content="width=device-width, initial-scale=1, user-scalable=no") - link(rel="stylesheet", href="/css/otalk.css") + link(rel="stylesheet", href="/css/client.css") link(rel="shortcut icon", type="image/png", href="data:image/png;base64,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") block head body.aux