Commit 3cd463f9 by Nate Hardison Committed by Joe Blaylock

Resetting Candy to stock CSS and JS

To beat the "booty call" bug, whereby starting a private chat makes
the recipient believe that they've been taken into a private room
(when in fact they're still in the group room), we're resetting all
of the Candy static assets to the stock resources.

Override user agent CSS default on message input

The default Candy CSS doesn't do a very good CSS reset, so in this
case, the user agent stylesheet put a margin in the message form,
pushing the input box up a bit. Set the margin to 0 so that things
look normal.
parent 17865dd4
...@@ -6,601 +6,578 @@ ...@@ -6,601 +6,578 @@
* @copyright 2011 Amiado Group AG, All rights reserved. * @copyright 2011 Amiado Group AG, All rights reserved.
*/ */
html, body { html, body {
margin: 0; margin: 0;
padding: 0; padding: 0;
font-family: Arial, Helvetica, sans-serif; font-family: Arial, Helvetica, sans-serif;
} }
#candy { #candy {
margin: 0; position: absolute;
padding: 0; top: 0;
position: absolute; bottom: 0;
top: 0; right: 0;
bottom: 0; left: 0;
right: 0; background-color: #ccc;
width: 100%; color: #333;
background-color: #bdb7a1; overflow: hidden;
color: #333;
overflow: hidden;
border: 1px solid #bdb7a1;
border-top-right-radius: 10px;
box-sizing: border-box;
}
#candy.poppedOut {
border-top-left-radius: 0 !important;
}
#chatPopin {
position: absolute;
bottom: 5px;
right: 5px;
font-size: 24px;
height: 18px !important;
width: 22px;
color: #666;
}
#chatPopin:hover {
color: #333;
text-decoration: none;
} }
a { a {
color: #333; color: #333;
text-decoration: none; text-decoration: none;
} }
ul { ul {
list-style: none; list-style: none;
padding: 0; padding: 0;
margin: 0; margin: 0;
} }
#chat-tabs { #chat-tabs {
margin: 0 0 0 28px; list-style: none;
padding: 0; margin: 0 200px 0 0;
overflow: auto; padding: 0;
border-left: 1px solid #bdb7a1; overflow: auto;
} overflow-y: hidden;
#chat-pane.collapsed-message-pane #chat-tabs {
height: 100%;
width: 29px;
border-left: 0;
margin: 30px 0 0 0;
}
#chat-tabs #chat-expand-arrow {
position: absolute;
top: 0;
left: 0;
width: 27px;
height: 15px;
padding: 5px 0;
cursor: pointer;
}
#chat-tabs #chat-expand-arrow em {
font-size: 18px;
padding: 0 10px;
} }
#chat-tabs li { #chat-tabs li {
margin: 0; margin: 0;
float: left; float: left;
position: relative; position: relative;
white-space: nowrap; border-right: 1px solid #aaa;
white-space: nowrap;
} }
#chat-tabs li a { #chat-tabs li a {
background-color: #e9e6df; background-color: #ddd;
padding: 6px 20px 4px 1px; padding: 6px 50px 4px 10px;
display: inline-block; display: inline-block;
color: #999; color: #666;
height: 19px; height: 20px;
font-size: 22px;
-webkit-font-smoothing: antialiased;
}
#chat-tabs li a.label {
border-right: 1px solid #bdb7a1;
border-bottom: 1px solid #bdb7a1;
}
#chat-pane.collapsed-message-pane #chat-tabs li a.label {
border-bottom: 0;
margin-bottom: 1px;
} }
#chat-tabs li.active a { #chat-tabs li.active a {
color: #333; background-color: white;
font-weight: bold; color: black;
}
#chat-tabs li.active a.label {
border-bottom: 1px solid white;
background-color: white;
} }
#chat-tabs li a.transition { #chat-tabs li a.transition {
display: none; /* JRBL */ position: absolute;
top: 0;
right: 0;
padding: 0;
width: 35px;
height: 30px;
background: url(img/tab-transitions.png) repeat-y left;
} }
#chat-tabs li a.close { #chat-tabs li a.close {
background-color: transparent; background-color: transparent;
position: absolute; position: absolute;
top: 2px; top: 0;
right: 7px; right: 0;
height: auto; height: auto;
padding: 0; padding: 5px;
margin: 0; margin: 1px 5px 0 2px;
color: #999; color: #999;
}
#chat-tabs li.active a.transition {
color: gray;
background: url(img/tab-transitions.png) repeat-y -50px;
} }
#chat-tabs li a.close:hover, #chat-tabs li.active a.close:hover { #chat-tabs li a.close:hover, #chat-tabs li.active a.close:hover {
color: #333; color: black;
} }
#chat-tabs li .unread { #chat-tabs li .unread {
color: white; color: white;
background-color: #8C1515; background-color: #9b1414;
padding: 1px 2px; padding: 2px 4px;
font-weight: normal; font-weight: bold;
font-size: 10px; font-size: 10px;
position: absolute; position: absolute;
top: 12px; top: 6px;
right: 30px; right: 22px;
border-radius: 5px; border-radius: 3px;
} }
#chat-tabs li.offline a.label { #chat-tabs li.offline a.label {
text-decoration: line-through; text-decoration: line-through;
} }
#chat-toolbar { #chat-toolbar {
/* position: fixed;
position: fixed; bottom: 0;
bottom: 0; right: 0;
right: 0; font-size: 11px;
font-size: 11px; color: #666;
color: #666; width: 200px;
width: 200px; height: 24px;
height: 24px; padding-top: 7px;
padding-top: 7px; border-top: 1px solid #aaa;
border-top: 1px solid #e9e6df; background-color: #d9d9d9;
background-color: #d3cec0; display: none;
*/ }
display: none !important;
}
#chat-toolbar li { #chat-toolbar li {
width: 16px; width: 16px;
height: 16px; height: 16px;
margin-left: 5px; margin-left: 5px;
float: left; float: left;
display: inline-block; display: inline-block;
cursor: pointer; cursor: pointer;
background-position: top left; background-position: top left;
background-repeat: no-repeat; background-repeat: no-repeat;
} }
#chat-toolbar #emoticons-icon { #chat-toolbar #emoticons-icon {
background-image: url(img/action/emoticons.png); background-image: url(img/action/emoticons.png);
} }
#chat-toolbar .context { #chat-toolbar .context {
background-image: url(img/action/settings.png); background-image: url(img/action/settings.png);
display: none; display: none;
} }
.role-moderator #chat-toolbar .context, .affiliation-owner #chat-toolbar .context { .role-moderator #chat-toolbar .context, .affiliation-owner #chat-toolbar .context {
display: inline-block; display: inline-block;
} }
#chat-sound-control { #chat-sound-control {
background-image: url(img/action/sound-off.png); background-image: url(img/action/sound-off.png);
} }
#chat-sound-control.checked { #chat-sound-control.checked {
background-image: url(img/action/sound-on.png); background-image: url(img/action/sound-on.png);
} }
#chat-autoscroll-control { #chat-autoscroll-control {
background-image: url(img/action/autoscroll-off.png); background-image: url(img/action/autoscroll-off.png);
} }
#chat-autoscroll-control.checked { #chat-autoscroll-control.checked {
background-image: url(img/action/autoscroll-on.png); background-image: url(img/action/autoscroll-on.png);
} }
#chat-statusmessage-control { #chat-statusmessage-control {
background: url(img/action/statusmessage-off.png); background: url(img/action/statusmessage-off.png);
} }
#chat-statusmessage-control.checked { #chat-statusmessage-control.checked {
background: url(img/action/statusmessage-on.png); background: url(img/action/statusmessage-on.png);
} }
#chat-toolbar .usercount { #chat-toolbar .usercount {
background-image: url(img/action/usercount.png); background-image: url(img/action/usercount.png);
cursor: default; cursor: default;
padding-left: 20px; padding-left: 20px;
width: auto; width: auto;
margin-right: 5px; margin-right: 5px;
float: right; float: right;
} }
.usercount span { .usercount span {
display: inline-block; display: inline-block;
padding: 1px 3px; padding: 1px 3px;
background-color: #ccc; background-color: #ccc;
font-weight: bold; font-weight: bold;
border-radius: 3px; border-radius: 3px;
} }
.room-pane { .room-pane {
/* display: none; */ display: none;
} }
.roster-pane { .roster-pane {
position: absolute; position: absolute;
overflow: auto; overflow: auto;
top: 30px; top: 0;
right: 0; right: 0;
bottom: 30px; bottom: 0;
width: 198px; width: 200px;
margin: 0; margin: 30px 0 32px 0;
} }
.roster-pane .user { .roster-pane .user {
cursor: pointer; cursor: pointer;
width: 90%; padding: 4px 7px;
padding: 6px 5%; font-size: 12px;
font-size: 14px; margin: 0 4px 2px 4px;
margin: 0; opacity: 0;
/* display: none; */ display: none;
color: #666; color: #666;
float: left; clear: both;
clear: both; height: 15px;
height: 17px; background-color: #ddd;
background-color: #d3cec0;
border-bottom: 1px solid #bdb7a1;
} }
.roster-pane .user:hover {
background-color: #eee;
}
.roster-pane .user.status-ignored {
cursor: default;
}
.roster-pane .user.me { .roster-pane .user.me {
font-weight: bold; font-weight: bold;
cursor: default; cursor: default;
} }
.roster-pane .user:hover,
.roster-pane .user.me:hover { .roster-pane .user.me:hover {
background-color: #e9e6df; background-color: #ddd;
}
.roster-pane .user.status-ignored {
cursor: default;
color: #999;
opacity: .5 !important;
} }
.roster-pane .label { .roster-pane .label {
float: left; float: left;
width: 125px; width: 110px;
overflow: hidden; overflow: hidden;
white-space: nowrap; white-space: nowrap;
} }
.roster-pane li { .roster-pane li {
width: 16px; width: 16px;
height: 16px; height: 16px;
float: right; float: right;
display: block; display: block;
margin-left: 3px; margin-left: 3px;
background-repeat: no-repeat; background-repeat: no-repeat;
background-position: center; background-position: center;
} }
.roster-pane li.role { .roster-pane li.role {
cursor: default; cursor: default;
display: none; display: none;
} }
.roster-pane li.role-moderator { .roster-pane li.role-moderator {
background-image: url(img/roster/role-moderator.png); background-image: url(img/roster/role-moderator.png);
display: block; display: block;
} }
.roster-pane li.affiliation-owner { .roster-pane li.affiliation-owner {
background-image: url(img/roster/affiliation-owner.png); background-image: url(img/roster/affiliation-owner.png);
display: block; display: block;
} }
.roster-pane li.ignore { .roster-pane li.ignore {
background-image: url(img/roster/ignore.png); background-image: url(img/roster/ignore.png);
display: none; display: none;
} }
.roster-pane .status-ignored li.ignore { .roster-pane .status-ignored li.ignore {
display: block; display: block;
} }
.roster-pane .me li.context { .roster-pane .me li.context {
display: none; display: none;
} }
.roster-pane li.context { .roster-pane li.context {
background-image: url(img/action/menu.png); background-image: url(img/action/menu.png);
cursor: pointer; cursor: pointer;
} }
.roster-pane li.context:hover { .roster-pane li.context:hover {
background-color: #ccc; background-color: #ccc;
border-radius: 4px; border-radius: 4px;
} }
.message-pane-wrapper { .message-pane-wrapper {
clear: both; clear: both;
overflow: auto; overflow: auto;
position: absolute; position: absolute;
top: 0; top: 0;
right: 0; right: 0;
bottom: 0; bottom: 0;
left: 0; left: 0;
height: auto; height: auto;
width: auto; width: auto;
margin: 30px 199px 32px 0; margin: 30px 200px 32px 0;
background-color: white; background-color: white;
font-size: 13px; font-size: 13px;
} }
.message-pane { .message-pane {
margin: 0; margin: 0;
padding: 5px 10px 2px 10px; padding: 5px 10px 2px 10px;
} }
.message-pane dt { .message-pane dt {
width: 55px; width: 55px;
float: left; float: left;
color: #888; color: #888;
font-size: 10px; font-size: 10px;
text-align: right; text-align: right;
padding-top: 4px; padding-top: 4px;
} }
.message-pane dd { .message-pane dd {
overflow: auto; overflow: auto;
padding: 2px 0 1px 100px; padding: 2px 0 1px 130px;
margin: 0 0 2px 0; margin: 0 0 2px 0;
white-space: -o-pre-wrap; /* Opera */ white-space: -o-pre-wrap; /* Opera */
word-wrap: break-word; /* Internet Explorer 5.5+ */ word-wrap: break-word; /* Internet Explorer 5.5+ */
} }
.message-pane dd .label { .message-pane dd .label {
font-weight: bold; font-weight: bold;
white-space: nowrap; white-space: nowrap;
display: block; display: block;
margin-left: -90px; margin-left: -125px;
width: 90px; width: 120px;
float: left; float: left;
overflow: hidden; overflow: hidden;
} }
.message-pane .subject { .message-pane .subject {
color: #a00; color: #a00;
font-weight: bold; font-weight: bold;
} }
.message-pane .adminmessage { .message-pane .adminmessage {
color: #a00; color: #a00;
font-weight: bold; font-weight: bold;
} }
.message-pane .infomessage { .message-pane .infomessage {
color: #888; color: #888;
font-style: italic; font-style: italic;
padding-left: 5px; padding-left: 5px;
} }
.message-pane .emoticon { .message-pane .emoticon {
vertical-align: text-bottom; vertical-align: text-bottom;
height: 15px; height: 15px;
width: 15px; width: 15px;
} }
.message-form-wrapper { .message-form-wrapper {
position: absolute; position: fixed;
bottom: 1px; bottom: 0;
left: 0; left: 0;
right: 0; right: 0;
width: auto; width: auto;
margin-right: 199px; margin-right: 200px;
background-color: #e9e6df; border-top: 1px solid #ccc;
height: 30px; background-color: #f2f2f2;
height: 31px;
} }
.message-form { .message-form {
position: absolute; position: fixed;
bottom: 1px; bottom: 0;
left: 0; left: 0;
right: 0; right: 0;
margin: 0 199px 0 0; margin-right: 320px;
padding: 0; margin-bottom: 0;
height: 30px; padding: 0;
} }
.message-form input { .message-form input {
border: 0 none; border: 0 none;
font-size: 14px; padding: 5px 10px;
width: 100%; font-size: 14px;
height: 100%; width: 100%;
display: block; display: block;
outline-width: 0; outline-width: 0;
padding: 0 50px 0 5px; background-color: #f2f2f2;
background-color: transparent;
}
.message-form input:focus {
background-color: white;
} }
.message-form input.submit { .message-form input.submit {
cursor: pointer; cursor: pointer;
background-color: #333; background-color: #ccc;
color: #e9e6df; color: #666;
position: absolute; position: fixed;
bottom: 0; bottom: 0;
right: 0; right: 0;
margin: 3px; margin: 3px 203px 3px 3px;
padding: 5px; padding: 5px 7px;
width: 40px; width: auto;
font-size: 12px; font-size: 12px;
line-height: 12px; line-height: 12px;
height: 24px; height: 25px;
font-weight: bold; font-weight: bold;
border-radius: 10px;
} }
#tooltip { #tooltip {
position: absolute; position: absolute;
z-index: 10; z-index: 10;
display: none; display: none;
margin: 18px -18px 2px -2px; margin: 18px -18px 2px -2px;
color: white; color: white;
font-size: 11px; font-size: 11px;
padding: 5px 0; padding: 5px 0;
background: url(img/tooltip-arrows.gif) no-repeat left bottom; background: url(img/tooltip-arrows.gif) no-repeat left bottom;
} }
#tooltip div { #tooltip div {
background-color: black; background-color: black;
padding: 2px 5px; padding: 2px 5px;
zoom: 1; zoom: 1;
} }
#context-menu { #context-menu {
position: absolute; position: absolute;
z-index: 10; z-index: 10;
display: none; display: none;
padding: 15px 10px; padding: 15px 10px;
margin: 8px -28px -8px -12px; margin: 8px -28px -8px -12px;
background: url(img/context-arrows.gif) no-repeat left bottom; background: url(img/context-arrows.gif) no-repeat left bottom;
} }
#context-menu ul { #context-menu ul {
background-color: black; background-color: black;
color: white; color: white;
font-size: 12px; font-size: 12px;
padding: 2px; padding: 2px;
zoom: 1; zoom: 1;
} }
#context-menu li { #context-menu li {
padding: 3px 5px 3px 20px; padding: 3px 5px 3px 20px;
line-height: 12px; line-height: 12px;
cursor: pointer; cursor: pointer;
margin-bottom: 2px; margin-bottom: 2px;
background: 1px no-repeat; background: 1px no-repeat;
white-space: nowrap; white-space: nowrap;
} }
#context-menu li:hover { #context-menu li:hover {
background-color: #666; background-color: #666;
} }
#context-menu li:last-child { #context-menu li:last-child {
margin-bottom: 0; margin-bottom: 0;
} }
#context-menu .private { #context-menu .private {
background-image: url(img/action/private.png); background-image: url(img/action/private.png);
} }
#context-menu .ignore { #context-menu .ignore {
background-image: url(img/action/ignore.png); background-image: url(img/action/ignore.png);
} }
#context-menu .unignore { #context-menu .unignore {
background-image: url(img/action/unignore.png); background-image: url(img/action/unignore.png);
} }
#context-menu .kick { #context-menu .kick {
background-image: url(img/action/kick.png); background-image: url(img/action/kick.png);
} }
#context-menu .ban { #context-menu .ban {
background-image: url(img/action/ban.png); background-image: url(img/action/ban.png);
} }
#context-menu .subject { #context-menu .subject {
background-image: url(img/action/subject.png); background-image: url(img/action/subject.png);
} }
#context-menu .emoticons { #context-menu .emoticons {
padding-left: 5px; padding-left: 5px;
width: 85px; width: 85px;
white-space: normal; white-space: normal;
} }
#context-menu .emoticons:hover { #context-menu .emoticons:hover {
background-color: transparent; background-color: transparent;
} }
#context-menu .emoticons img { #context-menu .emoticons img {
cursor: pointer; cursor: pointer;
margin: 3px; margin: 3px;
height: 15px; height: 15px;
width: 15px; width: 15px;
} }
#chat-modal { #chat-modal {
background: url(img/modal-bg.png); background: url(img/modal-bg.png);
width: 300px; width: 300px;
padding: 20px 5px; padding: 20px 5px;
color: white; color: white;
font-size: 16px; font-size: 16px;
position: absolute; position: fixed;
left: 50%; left: 50%;
top: 50%; top: 50%;
margin-left: -155px; margin-left: -155px;
margin-top: -45px; margin-top: -45px;
text-align: center; text-align: center;
display: none; display: none;
z-index: 100; z-index: 100;
border-radius: 5px; border-radius: 5px;
} }
#chat-modal-overlay { #chat-modal-overlay {
position: absolute; position: absolute;
left: 0; left: 0;
top: 0; top: 0;
right: 0; right: 0;
bottom: 0; bottom: 0;
z-index: 90; z-index: 90;
background-image: url(img/overlay.png); background-image: url(img/overlay.png);
border-top-left-radius: 8px;
} }
#chat-modal.modal-login { #chat-modal.modal-login {
display: block; display: block;
margin-top: -100px; margin-top: -100px;
} }
#chat-modal-spinner { #chat-modal-spinner {
display: none; display: none;
margin-left: 15px; margin-left: 15px;
} }
#chat-modal form { #chat-modal form {
margin: 15px 0; margin: 15px 0;
} }
#chat-modal label, #chat-modal input, #chat-modal select { #chat-modal label, #chat-modal input, #chat-modal select {
display: block; display: block;
float: left; float: left;
line-height: 26px; line-height: 26px;
font-size: 16px; font-size: 16px;
margin: 5px 0; margin: 5px 0;
} }
#chat-modal input, #chat-modal select { #chat-modal input, #chat-modal select {
padding: 2px; padding: 2px;
line-height: 16px; line-height: 16px;
width: 150px; width: 150px;
} }
#chat-modal label { #chat-modal label {
text-align: right; text-align: right;
padding-right: 1em; padding-right: 1em;
clear: both; clear: both;
width: 100px; width: 100px;
} }
#chat-modal input.button { #chat-modal input.button {
float: none; float: none;
display: block; display: block;
margin: 5px auto; margin: 5px auto;
clear: both; clear: both;
position: relative; position: relative;
top: 10px; top: 10px;
/* width: 200px; */ width: 200px;
width: 120px; /* JRBL */
} }
#chat-modal .close { #chat-modal .close {
position: absolute; position: absolute;
right: 0; right: 0;
display: none; display: none;
padding: 0 5px; padding: 0 5px;
margin: -17px 3px 0 0; margin: -17px 3px 0 0;
color: white; color: white;
border-radius: 3px; border-radius: 3px;
} }
#chat-modal .close:hover { #chat-modal .close:hover {
background-color: #333; background-color: #333;
} }
/**
* candy_shop.js
* -------------
* This is where we can hook into the Candy.js chat widget to
* provide our own, custom UI functionality. See
* http://candy-chat.github.io/candy/#customization for more info.
*/
var CandyShop = (function(self) { return self; }(CandyShop || {}));
CandyShop.EdX = (function(self, Candy, $) {
self.init = function() {
// When a new chat room is added, update the corresponding
// tab's title text and CSS class
Candy.View.Event.Room.onAdd = function(roomPane) {
var roomJid = roomPane['roomJid'];
var roomType = roomPane['type'];
var roomTabClass;
if (roomType === 'groupchat') {
roomTabClass = 'icon-group';
roomTabCloseClass = 'hidden';
} else {
roomTabClass = 'icon-user';
roomTabCloseClass = '';
}
var roomTab = $('#chat-tabs li[data-roomjid="' + roomJid + '"]').find('.label');
roomTab.attr('title', roomTab.text()).html('<em class="' + roomTabClass + '"></em>');
}
// When a user joins or leaves the chat, update the roster
// in the sidebar accordingly
Candy.View.Event.Roster.onUpdate = function(vars) {
var roomJid = vars['roomJid'];
var userNick = vars['user']['data']['nick'];
var userJid = vars['user']['data']['jid'];
var userObject = $('#chat-rooms .room-pane[data-roomjid="' + roomJid + '"] .roster-pane .user[data-jid="' + userJid + '"]');
if ($(userObject).hasClass('me')) {
$(userObject).find('.label').html('<em class="icon-flag"></em> ' + userNick);
$('#chat-rooms .room-pane[data-roomjid="' + roomJid + '"] .roster-pane').prepend($(userObject));
}
}
};
return self;
}(CandyShop.EdX || {}, Candy, jQuery));
/*
* Date Format 1.2.3
* (c) 2007-2009 Steven Levithan <stevenlevithan.com>
* MIT license
*
* Includes enhancements by Scott Trenda <scott.trenda.net>
* and Kris Kowal <cixar.com/~kris.kowal/>
*
* Accepts a date, a mask, or a date and a mask.
* Returns a formatted version of the given date.
* The date defaults to the current date/time.
* The mask defaults to dateFormat.masks.default.
*
* @link http://blog.stevenlevithan.com/archives/date-time-format
*/
var dateFormat = function () {
var token = /d{1,4}|m{1,4}|yy(?:yy)?|([HhMsTt])\1?|[LloSZ]|"[^"]*"|'[^']*'/g,
timezone = /\b(?:[PMCEA][SDP]T|(?:Pacific|Mountain|Central|Eastern|Atlantic) (?:Standard|Daylight|Prevailing) Time|(?:GMT|UTC)(?:[-+]\d{4})?)\b/g,
timezoneClip = /[^-+\dA-Z]/g,
pad = function (val, len) {
val = String(val);
len = len || 2;
while (val.length < len) val = "0" + val;
return val;
};
// Regexes and supporting functions are cached through closure
return function (date, mask, utc) {
var dF = dateFormat;
// You can't provide utc if you skip other args (use the "UTC:" mask prefix)
if (arguments.length == 1 && Object.prototype.toString.call(date) == "[object String]" && !/\d/.test(date)) {
mask = date;
date = undefined;
}
// Passing date through Date applies Date.parse, if necessary
date = date ? new Date(date) : new Date;
if (isNaN(date)) throw SyntaxError("invalid date");
mask = String(dF.masks[mask] || mask || dF.masks["default"]);
// Allow setting the utc argument via the mask
if (mask.slice(0, 4) == "UTC:") {
mask = mask.slice(4);
utc = true;
}
var _ = utc ? "getUTC" : "get",
d = date[_ + "Date"](),
D = date[_ + "Day"](),
m = date[_ + "Month"](),
y = date[_ + "FullYear"](),
H = date[_ + "Hours"](),
M = date[_ + "Minutes"](),
s = date[_ + "Seconds"](),
L = date[_ + "Milliseconds"](),
o = utc ? 0 : date.getTimezoneOffset(),
flags = {
d: d,
dd: pad(d),
ddd: dF.i18n.dayNames[D],
dddd: dF.i18n.dayNames[D + 7],
m: m + 1,
mm: pad(m + 1),
mmm: dF.i18n.monthNames[m],
mmmm: dF.i18n.monthNames[m + 12],
yy: String(y).slice(2),
yyyy: y,
h: H % 12 || 12,
hh: pad(H % 12 || 12),
H: H,
HH: pad(H),
M: M,
MM: pad(M),
s: s,
ss: pad(s),
l: pad(L, 3),
L: pad(L > 99 ? Math.round(L / 10) : L),
t: H < 12 ? "a" : "p",
tt: H < 12 ? "am" : "pm",
T: H < 12 ? "A" : "P",
TT: H < 12 ? "AM" : "PM",
Z: utc ? "UTC" : (String(date).match(timezone) || [""]).pop().replace(timezoneClip, ""),
o: (o > 0 ? "-" : "+") + pad(Math.floor(Math.abs(o) / 60) * 100 + Math.abs(o) % 60, 4),
S: ["th", "st", "nd", "rd"][d % 10 > 3 ? 0 : (d % 100 - d % 10 != 10) * d % 10]
};
return mask.replace(token, function ($0) {
return $0 in flags ? flags[$0] : $0.slice(1, $0.length - 1);
});
};
}();
// Some common format strings
dateFormat.masks = {
"default": "ddd mmm dd yyyy HH:MM:ss",
shortDate: "m/d/yy",
mediumDate: "mmm d, yyyy",
longDate: "mmmm d, yyyy",
fullDate: "dddd, mmmm d, yyyy",
shortTime: "h:MM TT",
mediumTime: "h:MM:ss TT",
longTime: "h:MM:ss TT Z",
isoDate: "yyyy-mm-dd",
isoTime: "HH:MM:ss",
isoDateTime: "yyyy-mm-dd'T'HH:MM:ss",
isoUtcDateTime: "UTC:yyyy-mm-dd'T'HH:MM:ss'Z'"
};
// Internationalization strings
dateFormat.i18n = {
dayNames: [
"Sun", "Mon", "Tue", "Wed", "Thu", "Fri", "Sat",
"Sunday", "Monday", "Tuesday", "Wednesday", "Thursday", "Friday", "Saturday"
],
monthNames: [
"Jan", "Feb", "Mar", "Apr", "May", "Jun", "Jul", "Aug", "Sep", "Oct", "Nov", "Dec",
"January", "February", "March", "April", "May", "June", "July", "August", "September", "October", "November", "December"
]
};
// For convenience...
Date.prototype.format = function (mask, utc) {
return dateFormat(this, mask, utc);
};
\ No newline at end of file
$(window).load(function() {
var isInIframe = (window.location != window.parent.location) ? true : false;
if (isInIframe) {
$('#chat-pane #chat-tabs').prepend('<div id="chat-expand-arrow"><em class="icon-chevron-right"></em></div>');
} else {
$('#candy').addClass('poppedOut').append('<a href="#" onclick="event.preventDefault();" title="Pop-In Chat Window" class="icon-signin" id="chatPopin"></a>');
}
var collapseMessageForm = function() {
$('#candy').animate({width: '230px'}, 'slow', function() {
$('#chat-expand-arrow em').toggleClass('icon-chevron-left').toggleClass('icon-chevron-right');
$('#chat-pane').toggleClass('collapsed-message-pane');
});
$('#chat-pane .roster-pane').animate({top: '0px'}, 'slow');
$('#chat-rooms .message-pane-wrapper, #chat-rooms .message-form-wrapper, form.message-form').fadeOut('slow');
}
var expandMessageForm = function() {
$('#chat-pane').toggleClass('collapsed-message-pane');
$('#candy').animate({width: '100%'}, 'slow', function() {
$('#chat-expand-arrow em').toggleClass('icon-chevron-left').toggleClass('icon-chevron-right');
});
$('#chat-pane .roster-pane').animate({top: '30px'}, 'slow');
$('#chat-rooms .message-pane-wrapper, #chat-rooms .message-form-wrapper, form.message-form').fadeIn('slow');
}
var activeTab;
$('#chat-expand-arrow').click(function() {
if ($('#chat-pane').hasClass('collapsed-message-pane')) {
activeTab.addClass('active');
expandMessageForm();
} else {
activeTab = $('#chat-tabs li.active');
$('#chat-tabs li').removeClass('active');
collapseMessageForm();
}
});
$('#chat-tabs').click(function(event) {
if ($(this).has(event.target).length && $('#chat-pane').hasClass('collapsed-message-pane')) {
expandMessageForm();
}
});
$('#chatPopin').click(function() {
window.close();
});
});
<%namespace name='static' file='/static_content.html'/> <%namespace name='static' file='/static_content.html'/>
<html> <html>
<head> <head>
<link rel="stylesheet" href="${static.url('css/vendor/ui-lightness/jquery-ui-1.8.22.custom.css')}" />
## It'd be better to have this in a place like lms/css/vendor/candy, ## It'd be better to have this in a place like lms/css/vendor/candy,
## but the candy_res/ folder contains images and other junk, and it ## but the candy_res/ folder contains images and other junk, and it
## all needs to stay together for the Candy.js plugin to work. ## all needs to stay together for the Candy.js plugin to work.
<link rel="stylesheet" href="${static.url('candy_res/candy_full.css')}" /> <link rel="stylesheet" href="${static.url('candy_res/default.css')}" />
## Load in jQuery libs from standard edX locations. ## Load in jQuery from standard edX location.
<script type="text/javascript" src="${static.url('js/vendor/jquery.min.js')}"></script> <script type="text/javascript" src="${static.url('js/vendor/jquery.min.js')}"></script>
<script type="text/javascript" src="${static.url('js/vendor/jquery-ui.min.js')}"></script>
## Include the Candy.js libraries. Wooooo. ## Include the Candy.js libraries. Wooooo.
<script type="text/javascript" src="${static.url('js/vendor/candy_libs/libs.min.js')}"></script> <script type="text/javascript" src="${static.url('js/vendor/candy_libs/libs.min.js')}"></script>
<script type="text/javascript" src="${static.url('js/vendor/candy.min.js')}"></script> <script type="text/javascript" src="${static.url('js/vendor/candy.min.js')}"></script>
<script type="text/javascript" src="${static.url('js/vendor/candy_ui.js')}"></script>
## Include edX-specific Candy plugins
<script type="text/javascript" src="${static.url('js/candy_shop.js')}"></script>
</head> </head>
<body> <body>
## Candy.js renders itself in an element with #candy ## Candy.js renders itself in an element with #candy
...@@ -33,9 +26,6 @@ ...@@ -33,9 +26,6 @@
view: { resources: "${static.url('candy_res/')}"} view: { resources: "${static.url('candy_res/')}"}
}); });
## Initialize edX-specific Candy plugins
//CandyShop.EdX.init();
Candy.Core.connect("${username}", "${password}"); Candy.Core.connect("${username}", "${password}");
}); });
</script> </script>
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment