Repository: openmeetings Updated Branches: refs/heads/4.0.x f25da38fb -> ae1b51a99
http://git-wip-us.apache.org/repos/asf/openmeetings/blob/ae1b51a9/openmeetings-web/src/main/java/org/apache/openmeetings/web/user/chat/Chat.java ---------------------------------------------------------------------- diff --git a/openmeetings-web/src/main/java/org/apache/openmeetings/web/user/chat/Chat.java b/openmeetings-web/src/main/java/org/apache/openmeetings/web/user/chat/Chat.java index d875a31..6b9c3fe 100644 --- a/openmeetings-web/src/main/java/org/apache/openmeetings/web/user/chat/Chat.java +++ b/openmeetings-web/src/main/java/org/apache/openmeetings/web/user/chat/Chat.java @@ -56,7 +56,6 @@ import org.apache.openmeetings.web.common.ConfirmableAjaxBorder; import org.apache.openmeetings.web.common.MainPanel; import org.apache.wicket.ajax.AbstractDefaultAjaxBehavior; import org.apache.wicket.ajax.AjaxRequestTarget; -import org.apache.wicket.markup.head.CssHeaderItem; import org.apache.wicket.markup.head.IHeaderResponse; import org.apache.wicket.markup.head.JavaScriptHeaderItem; import org.apache.wicket.markup.head.OnDomReadyHeaderItem; @@ -65,9 +64,7 @@ import org.apache.wicket.markup.html.form.Form; import org.apache.wicket.markup.html.form.HiddenField; import org.apache.wicket.markup.html.panel.Panel; import org.apache.wicket.model.Model; -import org.apache.wicket.request.resource.CssResourceReference; import org.apache.wicket.request.resource.JavaScriptResourceReference; -import org.apache.wicket.request.resource.ResourceReference; import org.red5.logging.Red5LoggerFactory; import org.slf4j.Logger; @@ -78,8 +75,6 @@ import com.googlecode.wicket.jquery.ui.plugins.wysiwyg.WysiwygEditor; public class Chat extends Panel { private static final long serialVersionUID = 1L; private static final Logger log = Red5LoggerFactory.getLogger(Chat.class, getWebAppRootKey()); - public static final ResourceReference EMOTIONS_JS_REFERENCE = new JavaScriptResourceReference(Chat.class, "cssemoticons.js"); - public static final ResourceReference EMOTIONS_CSS_REFERENCE = new CssResourceReference(Chat.class, "cssemoticons.css"); private static final String PARAM_MSG_ID = "msgid"; private static final String PARAM_ROOM_ID = "roomid"; private static final String PARAM_TYPE = "type"; @@ -156,9 +151,7 @@ public class Chat extends Panel { @Override public void renderHead(IHeaderResponse response) { super.renderHead(response); - response.render(new PriorityHeaderItem(JavaScriptHeaderItem.forReference(EMOTIONS_JS_REFERENCE))); response.render(new PriorityHeaderItem(JavaScriptHeaderItem.forReference(new JavaScriptResourceReference(Chat.class, "chat.js")))); - response.render(CssHeaderItem.forReference(EMOTIONS_CSS_REFERENCE)); response.render(new PriorityHeaderItem(getNamedFunction("chatActivity", chatActivity, explicit(PARAM_TYPE), explicit(PARAM_ROOM_ID), explicit(PARAM_MSG_ID)))); if (showDashboardChat) { http://git-wip-us.apache.org/repos/asf/openmeetings/blob/ae1b51a9/openmeetings-web/src/main/java/org/apache/openmeetings/web/user/chat/chat-base.js ---------------------------------------------------------------------- diff --git a/openmeetings-web/src/main/java/org/apache/openmeetings/web/user/chat/chat-base.js b/openmeetings-web/src/main/java/org/apache/openmeetings/web/user/chat/chat-base.js new file mode 100644 index 0000000..67665f4 --- /dev/null +++ b/openmeetings-web/src/main/java/org/apache/openmeetings/web/user/chat/chat-base.js @@ -0,0 +1,373 @@ +/* Licensed under the Apache License, Version 2.0 (the "License") http://www.apache.org/licenses/LICENSE-2.0 */ +var Chat = function() { + const align = Settings.isRtl ? 'align-right' : 'align-left' + , alignIco = Settings.isRtl ? 'align-left' : 'align-right' + , tabTemplate = "<li><a href='#{href}'>#{label}</a></li>" + , msgTemplate = "<div class='clear msg-row' id='chat-msg-id-#{id}'><img class='profile " + align + "' src='#{imgSrc}'/><span class='from " + align + "' data-user-id='#{userId}'>#{from}</span><span class='" + align + "'>#{msg}</span><span class='date " + alignIco + "'>#{sent}</span></div>" + , acceptTemplate = "<div class='tick om-icon " + alignIco + " clickable' data-msgid='#{msgid}' data-roomid='#{roomid}' onclick='const e=$(this);chatActivity('accept',e.data(\"roomid\"),e.data(\"msgid\"));e.parent().remove();'></div>" + , infoTemplate = "<div class='user om-icon " + alignIco + " clickable' data-user-id='#{userId}' onclick='const e=$(this);showUserInfo(e.data(\"userId\"));'></div>" + , addTemplate = "<div class='add om-icon " + alignIco + " clickable' data-user-id='#{userId}' onclick='const e=$(this);addContact(e.data(\"userId\"));'></div>" + , messageTemplate = "<div class='new-email om-icon " + alignIco + " clickable' data-user-id='#{userId}' onclick='const e=$(this);privateMessage(e.data(\"userId\"));'></div>" + , inviteTemplate = "<div class='invite om-icon " + alignIco + " clickable' data-user-id='#{userId}' onclick='const e=$(this);inviteUser(e.data(\"userId\"));'></div>" + , closeBlock = "<span class='ui-icon ui-icon-close' role='presentation'></span>" + , closedSize = 20 + , closedSizePx = closedSize + "px" + , emoticon = new CSSEmoticon() + , doneTypingInterval = 5000 //time in ms, 5 second for example + , iconOpen = 'ui-icon-caret-1-n' + , iconOpenRoom = 'ui-icon-caret-1-' + (Settings.isRtl ? 'e' : 'w') + , iconClose = 'ui-icon-caret-1-s' + , iconCloseRoom = 'ui-icon-caret-1-' + (Settings.isRtl ? 'w' : 'e') + ; + let p, pp, ctrl, icon, tabs, openedHeight = "345px", openedWidth = "300px", allPrefix = "All" + , roomPrefix = "Room ", typingTimer, audio, roomMode = false, globalWidth = 600 + , editor = $('#chatMessage .wysiwyg-editor') + ; + + try { + audio = new Audio('./public/chat_message.mp3'); + } catch (e) { + //not implemented in IE + audio = { + play: function() {} + }; + } + function _load() { + const s = Settings.load(); + if (typeof(s.chat) === 'undefined') { + s.chat = {}; + } + return s; + } + function _updateBtn(s, a) { + const muted = s.chat.muted === true; + a.removeClass('sound' + (muted ? '' : '-mute')).addClass('sound' + (muted ? '-mute' : '')) + .attr('title', a.data(muted ? 'sound-enabled' : 'sound-muted')); + } + function doneTyping () { + typingTimer = null; + chatActivity('typing_stop', $('.room.box').data('room-id')); + } + function initToolbar() { + const emtBtn = $('#emoticons'); + emtBtn.html(''); + emtBtn.append(' ' + emoticon.emoticonize(':)') + ' <b class="caret"></b>'); + const emots = [].concat.apply([], [emoticon.threeCharEmoticons, emoticon.twoCharEmoticons]); + for (let ei in emoticon.specialEmoticons) { + emots.push(ei); + } + const rowSize = 20, emotMenuList = $('#emotMenuList'); + emotMenuList.html(''); + let row = $('<tr></tr>'); + for (let i = 0; i < emots.length; ++i) { + row.append('<td><div class="emt" onclick="Chat.emtClick(\'' + emots[i] + '\');">' + + emoticon.emoticonize(emots[i]) + '</div></td>'); + if (i !== 0 && i % rowSize === 0) { + emotMenuList.append(row); + row = $('<tr></tr>'); + } + } + const a = $('#chat .audio'); + _updateBtn(_load(), a); + $('#chat .chat-btn').hover(function(){ $(this).addClass('ui-state-hover') }, function(){ $(this).removeClass('ui-state-hover') }); + a.off().click(function() { + const s = _load(); + s.chat.muted = !s.chat.muted; + _updateBtn(s, a); + Settings.save(s); + }); + } + function isClosed() { + return p.hasClass('closed'); + } + function activateTab(id) { + tabs.tabs("option", "active", tabs.find('a[href="#' + id + '"]').parent().index()); + } + function isInited() { + return !!$("#chatTabs").data("ui-tabs"); + } + function _reinit(_allPrefix, _roomPrefix) { + allPrefix = _allPrefix; + roomPrefix = _roomPrefix; + p = $('#chatPanel'); + pp = $('#chatPanel, #chatPopup'); + ctrl = $('#chatPopup .control.block'); + icon = $('#chatPopup .control.block .ui-icon'); + editor = $('#chatMessage .wysiwyg-editor'); + icon.removeClass(function(index, className) { + return (className.match (/(^|\s)ui-icon-caret-\S+/g) || []).join(' '); + }); + initToolbar(); + tabs = $("#chatTabs").tabs({ + activate: function(event, ui) { + $('#activeChatTab').val(ui.newPanel[0].id); + } + }); + // close icon: removing the tab on click + tabs.delegate("span.ui-icon-close", "click", function() { + const panelId = $(this).closest("li").remove().attr("aria-controls"); + $("#" + panelId).remove(); + tabs.tabs("refresh"); + }); + if (roomMode) { + icon.addClass(isClosed() ? iconOpenRoom : iconCloseRoom); + p.addClass('room').hover(_open, _close); + pp.width(closedSize); + _removeResize(); + } else { + ctrl.attr('title', ''); + icon.addClass(isClosed() ? iconOpen : iconClose); + ctrl.height(closedSize).width(globalWidth).off('click').click(Chat.toggle); + pp.width(globalWidth).height(closedSize); + p.removeClass('room opened').addClass('closed') + .off('mouseenter mouseleave') + .resizable({ + handles: 'n, ' + (Settings.isRtl ? 'w' : 'e') + , disabled: isClosed() + , alsoResize: "#chatPopup, #chat .ui-tabs .ui-tabs-panel.messageArea" + , minHeight: 195 + , minWidth: 260 + , stop: function(event, ui) { + p.css({'top': '', 'left': ''}); + openedHeight = ui.size.height + "px"; + globalWidth = ui.size.width; + } + }); + } + $('#chatMessage').off().on('input propertychange paste', function () { + const room = $('.room.box'); + if (room.length) { + if (!!typingTimer) { + clearTimeout(typingTimer); + } else { + chatActivity('typing_start', room.data('room-id')); + } + typingTimer = setTimeout(doneTyping, doneTypingInterval); + } + }); + } + function _removeTab(id) { + $('#chat li[aria-controls="' + id + '"]').remove(); + $('#' + id).remove(); + if (isInited()) { + tabs.tabs("refresh"); + } + } + function _addTab(id, label) { + if (!isInited()) { + _reinit(); + } + if ($('#chat').length < 1 || $('#' + id).length) { + return; + } + if (!label) { + label = id === "chatTab-all" ? allPrefix : roomPrefix + id.substr(9); + } + const li = $(tabTemplate.replace(/#\{href\}/g, "#" + id).replace(/#\{label\}/g, label)); + if (id.indexOf("chatTab-r") !== 0) { + li.append(closeBlock); + } + tabs.find(".ui-tabs-nav").append(li); + tabs.append("<div class='messageArea' id='" + id + "'></div>"); + tabs.tabs("refresh"); + activateTab(id); + } + function _addMessage(m) { + if ($('#chat').length > 0 && m && m.type === "chat") { + if (isClosed()) { + ctrl.addClass('ui-state-highlight'); + const s = _load(); + if (p.is(':visible') && s.chat.muted !== true) { + const playPromise = audio.play(); + + // In browsers that donât yet support this functionality, + // playPromise wonât be defined. + if (playPromise !== undefined) { + playPromise.then(function() { + // Automatic playback started! + }).catch(function() { + // Automatic playback failed. + }); + } + } + } + let msg, cm; + while (!!(cm = m.msg.pop())) { + let area = $('#' + cm.scope); + msg = $(msgTemplate.replace(/#\{id\}/g, cm.id) + .replace(/#\{userId\}/g, cm.from.id) + .replace(/#\{imgSrc\}/g, !!cm.from.img ? cm.from.img : './profile/' + cm.from.id + '?anticache=' + Date.now()) + .replace(/#\{from\}/g, cm.from.name) + .replace(/#\{sent\}/g, cm.sent) + .replace(/#\{msg\}/g, emoticon.emoticonize(!!cm.message ? cm.message : ""))); + const date = msg.children('.date'); + date.after(infoTemplate.replace(/#\{userId\}/g, cm.from.id)); + if ("full" === cm.actions) { + date.after(addTemplate.replace(/#\{userId\}/g, cm.from.id)); + date.after(messageTemplate.replace(/#\{userId\}/g, cm.from.id)); + date.after(inviteTemplate.replace(/#\{userId\}/g, cm.from.id)); + } + if (cm.needModeration) { + msg.append(acceptTemplate.replace(/#\{msgid\}/g, cm.id).replace(/#\{roomid\}/g, cm.scope.substring(9))); + } + if (!area.length) { + _addTab(cm.scope, cm.scopeName); + area = $('#' + cm.scope); + } + if (m.mode === "accept") { + $('#chat-msg-id-' + cm.id).remove(); + } + const btm = area.scrollTop() + area.innerHeight() >= area[0].scrollHeight; + area.append(msg); + if (btm) { + area.animate({ + scrollTop: area[0].scrollHeight + }, 300); + } + } + } + } + function _setOpened() { + p.addClass('opened').off('mouseenter mouseleave'); + p.resizable({ + handles: (Settings.isRtl ? 'e' : 'w') + , alsoResize: '#chatPopup' + , stop: function(event, ui) { + p.css({'left': ''}); + openedWidth = ui.size.width + 'px'; + } + }); + Room.setSize(); + } + function _removeResize() { + if (p.resizable('instance') !== undefined) { + p.resizable('destroy'); + } + } + function _open(handler) { + if (isClosed()) { + icon.removeClass(roomMode ? iconOpenRoom : iconOpen).addClass(roomMode ? iconCloseRoom : iconClose); + ctrl.removeClass('ui-state-highlight'); + let opts; + if (roomMode) { + opts = {width: openedWidth}; + ctrl.height(closedSize); + } else { + opts = {height: openedHeight}; + p.resizable("option", "disabled", false); + } + p.removeClass('closed'); + pp.animate(opts, 1000, function() { + p.removeClass('closed'); + $('#chat .ui-tabs .ui-tabs-panel.messageArea').height(p.height() - closedSize - $('#chat .ui-tabs-nav').height() - $('#chat form').height() - 5); + $('#chat .messageArea').each(function() { + $(this).scrollTop($(this)[0].scrollHeight); + }); + if (typeof(handler) === 'function') { + handler(); + } + if (roomMode) { + ctrl.off('click').click(function() { + if (p.hasClass('opened')) { + ctrl.attr('title', ctrl.data('ttl-dock')); + _close(Room.setSize); + p.removeClass('opened').hover(_open, _close); + _removeResize(); + } else { + ctrl.attr('title', ctrl.data('ttl-undock')); + _setOpened(); + } + }).attr('title', ctrl.data('ttl-dock')); + } + }); + } + } + function _close(handler) { + if (!isClosed()) { + icon.removeClass(roomMode ? iconCloseRoom : iconClose).addClass(roomMode ? iconOpenRoom : iconOpen); + let opts; + if (roomMode) { + opts = {width: closedSizePx}; + ctrl.off('click'); + } else { + opts = {height: closedSizePx}; + p.resizable("option", "disabled", true); + } + pp.animate(opts, 1000, function() { + p.addClass('closed'); + if (roomMode) { + ctrl.height(p.height()); + } + if (typeof(handler) === 'function') { + handler(); + } + }); + } + } + function _toggle() { + if (isClosed()) { + _open(); + } else { + _close(); + } + } + function _emtClick(emoticon) { + editor.html(editor.html() + ' ' + emoticon + ' ').trigger('change'); + } + function _clean() { + editor.html('').trigger('change'); + } + function _setRoomMode(_mode) { + roomMode = _mode; + _reinit(allPrefix, roomPrefix); + } + function _setHeight(h) { + pp.height(h); + if (isClosed()) { + ctrl.height(h); + } + } + + return { + reinit: _reinit + , removeTab: _removeTab + , addTab: _addTab + , addMessage: _addMessage + , open: _open + , setOpened: function() { + _open(function() { + _setOpened(); + }); + } + , close: _close + , toggle: _toggle + , emtClick: _emtClick + , setRoomMode: _setRoomMode + , setHeight: _setHeight + , clean: _clean + }; +}(); +$(function() { + Wicket.Event.subscribe("/websocket/message", function(jqEvent, msg) { + try { + if (msg instanceof Blob) { + return; //ping + } + const m = jQuery.parseJSON(msg); + if (m) { + switch(m.type) { + case "chat": + Chat.addMessage(m); + break; + case "typing": + if (typeof(typingActivity) === "function") { + typingActivity(m.uid, m.active); + } + break; + } + } + } catch (err) { + //no-op + } + }); +}); http://git-wip-us.apache.org/repos/asf/openmeetings/blob/ae1b51a9/openmeetings-web/src/main/java/org/apache/openmeetings/web/user/chat/chat.js ---------------------------------------------------------------------- diff --git a/openmeetings-web/src/main/java/org/apache/openmeetings/web/user/chat/chat.js b/openmeetings-web/src/main/java/org/apache/openmeetings/web/user/chat/chat.js deleted file mode 100644 index cc66752..0000000 --- a/openmeetings-web/src/main/java/org/apache/openmeetings/web/user/chat/chat.js +++ /dev/null @@ -1,374 +0,0 @@ -/* Licensed under the Apache License, Version 2.0 (the "License") http://www.apache.org/licenses/LICENSE-2.0 */ -var Chat = function() { - const align = Settings.isRtl ? 'align-right' : 'align-left' - , alignIco = Settings.isRtl ? 'align-left' : 'align-right' - , tabTemplate = "<li><a href='#{href}'>#{label}</a></li>" - , msgTemplate = "<div class='clear msg-row' id='chat-msg-id-#{id}'><img class='profile " + align + "' src='#{imgSrc}'/><span class='from " + align + "' data-user-id='#{userId}'>#{from}</span><span class='" + align + "'>#{msg}</span><span class='date " + alignIco + "'>#{sent}</span></div>" - , acceptTemplate = "<div class='tick om-icon " + alignIco + " clickable' data-msgid='#{msgid}' data-roomid='#{roomid}' onclick='const e=$(this);chatActivity('accept',e.data(\"roomid\"),e.data(\"msgid\"));e.parent().remove();'></div>" - , infoTemplate = "<div class='user om-icon " + alignIco + " clickable' data-user-id='#{userId}' onclick='const e=$(this);showUserInfo(e.data(\"userId\"));'></div>" - , addTemplate = "<div class='add om-icon " + alignIco + " clickable' data-user-id='#{userId}' onclick='const e=$(this);addContact(e.data(\"userId\"));'></div>" - , messageTemplate = "<div class='new-email om-icon " + alignIco + " clickable' data-user-id='#{userId}' onclick='const e=$(this);privateMessage(e.data(\"userId\"));'></div>" - , inviteTemplate = "<div class='invite om-icon " + alignIco + " clickable' data-user-id='#{userId}' onclick='const e=$(this);inviteUser(e.data(\"userId\"));'></div>" - , closeBlock = "<span class='ui-icon ui-icon-close' role='presentation'></span>" - , closedSize = 20 - , closedSizePx = closedSize + "px" - , emoticon = new CSSEmoticon() - , doneTypingInterval = 5000 //time in ms, 5 second for example - , iconOpen = 'ui-icon-caret-1-n' - , iconOpenRoom = 'ui-icon-caret-1-' + (Settings.isRtl ? 'e' : 'w') - , iconClose = 'ui-icon-caret-1-s' - , iconCloseRoom = 'ui-icon-caret-1-' + (Settings.isRtl ? 'w' : 'e') - ; - let p, pp, ctrl, icon, tabs, openedHeight = "345px", openedWidth = "300px", allPrefix = "All" - , roomPrefix = "Room ", typingTimer, audio, roomMode = false, globalWidth = 600 - , editor = $('#chatMessage .wysiwyg-editor') - ; - - try { - audio = new Audio('./public/chat_message.mp3'); - } catch (e) { - //not implemented in IE - audio = { - play: function() {} - }; - } - function _load() { - const s = Settings.load(); - if (typeof(s.chat) === 'undefined') { - s.chat = {}; - } - return s; - } - function _updateBtn(s, a) { - const muted = s.chat.muted === true; - a.removeClass('sound' + (muted ? '' : '-mute')).addClass('sound' + (muted ? '-mute' : '')) - .attr('title', a.data(muted ? 'sound-enabled' : 'sound-muted')); - } - function doneTyping () { - typingTimer = null; - chatActivity('typing_stop', $('.room.box').data('room-id')); - } - function initToolbar() { - const emtBtn = $('#emoticons'); - emtBtn.html(''); - emtBtn.append(' ' + emoticon.emoticonize(':)') + ' <b class="caret"></b>'); - const emots = [].concat.apply([], [emoticon.threeCharEmoticons, emoticon.twoCharEmoticons]); - for (let ei in emoticon.specialEmoticons) { - emots.push(ei); - } - const rowSize = 20, emotMenuList = $('#emotMenuList'); - emotMenuList.html(''); - let row = $('<tr></tr>'); - for (let i = 0; i < emots.length; ++i) { - row.append('<td><div class="emt" onclick="Chat.emtClick(\'' + emots[i] + '\');">' - + emoticon.emoticonize(emots[i]) + '</div></td>'); - if (i !== 0 && i % rowSize === 0) { - emotMenuList.append(row); - row = $('<tr></tr>'); - } - } - const a = $('#chat .audio'); - _updateBtn(_load(), a); - $('#chat .chat-btn').hover(function(){ $(this).addClass('ui-state-hover') }, function(){ $(this).removeClass('ui-state-hover') }); - a.off().click(function() { - const s = _load(); - s.chat.muted = !s.chat.muted; - _updateBtn(s, a); - Settings.save(s); - }); - } - function isClosed() { - return p.hasClass('closed'); - } - function activateTab(id) { - tabs.tabs("option", "active", tabs.find('a[href="#' + id + '"]').parent().index()); - } - function isInited() { - return !!$("#chatTabs").data("ui-tabs"); - } - function _reinit(_allPrefix, _roomPrefix) { - allPrefix = _allPrefix; - roomPrefix = _roomPrefix; - p = $('#chatPanel'); - pp = $('#chatPanel, #chatPopup'); - ctrl = $('#chatPopup .control.block'); - icon = $('#chatPopup .control.block .ui-icon'); - editor = $('#chatMessage .wysiwyg-editor'); - icon.removeClass(function(index, className) { - return (className.match (/(^|\s)ui-icon-caret-\S+/g) || []).join(' '); - }); - initToolbar(); - tabs = $("#chatTabs").tabs({ - activate: function(event, ui) { - $('#activeChatTab').val(ui.newPanel[0].id); - } - }); - // close icon: removing the tab on click - tabs.delegate("span.ui-icon-close", "click", function() { - const panelId = $(this).closest("li").remove().attr("aria-controls"); - $("#" + panelId).remove(); - tabs.tabs("refresh"); - }); - if (roomMode) { - icon.addClass(isClosed() ? iconOpenRoom : iconCloseRoom); - p.addClass('room').hover(_open, _close); - pp.width(closedSize); - _removeResize(); - } else { - ctrl.attr('title', ''); - icon.addClass(isClosed() ? iconOpen : iconClose); - ctrl.height(closedSize).width(globalWidth).off('click').click(Chat.toggle); - pp.width(globalWidth).height(closedSize); - p.removeClass('room opened').addClass('closed') - .off('mouseenter mouseleave') - .resizable({ - handles: 'n, ' + (Settings.isRtl ? 'w' : 'e') - , disabled: isClosed() - , alsoResize: "#chatPopup, #chat .ui-tabs .ui-tabs-panel.messageArea" - , minHeight: 195 - , minWidth: 260 - , stop: function(event, ui) { - p.css({'top': '', 'left': ''}); - openedHeight = ui.size.height + "px"; - globalWidth = ui.size.width; - } - }); - } - $('#chatMessage').off().on('input propertychange paste', function () { - const room = $('.room.box'); - if (room.length) { - if (!!typingTimer) { - clearTimeout(typingTimer); - } else { - chatActivity('typing_start', room.data('room-id')); - } - typingTimer = setTimeout(doneTyping, doneTypingInterval); - } - }); - } - function _removeTab(id) { - $('#chat li[aria-controls="' + id + '"]').remove(); - $('#' + id).remove(); - if (isInited()) { - tabs.tabs("refresh"); - } - } - function _addTab(id, label) { - if (!isInited()) { - _reinit(); - } - if ($('#chat').length < 1 || $('#' + id).length) { - return; - } - if (!label) { - label = id === "chatTab-all" ? allPrefix : roomPrefix + id.substr(9); - } - const li = $(tabTemplate.replace(/#\{href\}/g, "#" + id).replace(/#\{label\}/g, label)); - if (id.indexOf("chatTab-r") !== 0) { - li.append(closeBlock); - } - tabs.find(".ui-tabs-nav").append(li); - tabs.append("<div class='messageArea' id='" + id + "'></div>"); - tabs.tabs("refresh"); - activateTab(id); - } - function _addMessage(m) { - if ($('#chat').length > 0 && m && m.type === "chat") { - if (isClosed()) { - ctrl.addClass('ui-state-highlight'); - const s = _load(); - if (p.is(':visible') && s.chat.muted !== true) { - const playPromise = audio.play(); - - // In browsers that donât yet support this functionality, - // playPromise wonât be defined. - if (playPromise !== undefined) { - playPromise.then(function() { - // Automatic playback started! - }).catch(function() { - // Automatic playback failed. - }); - } - } - } - let msg, cm; - while (!!(cm = m.msg.pop())) { - let area = $('#' + cm.scope); - msg = $(msgTemplate.replace(/#\{id\}/g, cm.id) - .replace(/#\{userId\}/g, cm.from.id) - .replace(/#\{imgSrc\}/g, !!cm.from.img ? cm.from.img : './profile/' + cm.from.id + '?anticache=' + Date.now()) - .replace(/#\{from\}/g, cm.from.name) - .replace(/#\{sent\}/g, cm.sent) - .replace(/#\{msg\}/g, emoticon.emoticonize(!!cm.message ? cm.message : ""))); - const date = msg.children('.date'); - date.after(infoTemplate.replace(/#\{userId\}/g, cm.from.id)); - if ("full" === cm.actions) { - date.after(addTemplate.replace(/#\{userId\}/g, cm.from.id)); - date.after(messageTemplate.replace(/#\{userId\}/g, cm.from.id)); - date.after(inviteTemplate.replace(/#\{userId\}/g, cm.from.id)); - } - if (cm.needModeration) { - msg.append(acceptTemplate.replace(/#\{msgid\}/g, cm.id).replace(/#\{roomid\}/g, cm.scope.substring(9))); - } - if (!area.length) { - _addTab(cm.scope, cm.scopeName); - area = $('#' + cm.scope); - } - if (m.mode === "accept") { - $('#chat-msg-id-' + cm.id).remove(); - } - const btm = area.scrollTop() + area.innerHeight() >= area[0].scrollHeight; - area.append(msg); - if (btm) { - area.animate({ - scrollTop: area[0].scrollHeight - }, 300); - } - } - } - } - function _setOpened() { - p.addClass('opened').off('mouseenter mouseleave'); - p.resizable({ - handles: (Settings.isRtl ? 'e' : 'w') - , alsoResize: '#chatPopup' - , stop: function(event, ui) { - p.css({'left': ''}); - openedWidth = ui.size.width + 'px'; - } - }); - Room.setSize(); - } - function _removeResize() { - if (p.resizable('instance') !== undefined) { - p.resizable('destroy'); - } - } - function _open(handler) { - if (isClosed()) { - icon.removeClass(roomMode ? iconOpenRoom : iconOpen).addClass(roomMode ? iconCloseRoom : iconClose); - ctrl.removeClass('ui-state-highlight'); - let opts; - if (roomMode) { - opts = {width: openedWidth}; - ctrl.height(closedSize); - } else { - opts = {height: openedHeight}; - p.resizable("option", "disabled", false); - } - p.removeClass('closed'); - pp.animate(opts, 1000, function() { - p.removeClass('closed'); - $('#chat .ui-tabs .ui-tabs-panel.messageArea').height(p.height() - closedSize - $('#chat .ui-tabs-nav').height() - $('#chat form').height() - 5); - $('#chat .messageArea').each(function() { - $(this).scrollTop($(this)[0].scrollHeight); - }); - if (typeof(handler) === 'function') { - handler(); - } - if (roomMode) { - ctrl.off('click').click(function() { - if (p.hasClass('opened')) { - ctrl.attr('title', ctrl.data('ttl-dock')); - _close(Room.setSize); - p.removeClass('opened').hover(_open, _close); - _removeResize(); - } else { - ctrl.attr('title', ctrl.data('ttl-undock')); - _setOpened(); - } - }).attr('title', ctrl.data('ttl-dock')); - } - }); - } - } - function _close(handler) { - if (!isClosed()) { - icon.removeClass(roomMode ? iconCloseRoom : iconClose).addClass(roomMode ? iconOpenRoom : iconOpen); - let opts; - if (roomMode) { - opts = {width: closedSizePx}; - ctrl.off('click'); - } else { - opts = {height: closedSizePx}; - p.resizable("option", "disabled", true); - } - pp.animate(opts, 1000, function() { - p.addClass('closed'); - if (roomMode) { - ctrl.height(p.height()); - } - if (typeof(handler) === 'function') { - handler(); - } - }); - } - } - function _toggle() { - if (isClosed()) { - _open(); - } else { - _close(); - } - } - function _emtClick(emoticon) { - editor.html(editor.html() + ' ' + emoticon + ' ').trigger('change'); - } - function _clean() { - editor.html('').trigger('change'); - } - function _setRoomMode(_mode) { - roomMode = _mode; - _reinit(allPrefix, roomPrefix); - } - function _setHeight(h) { - pp.height(h); - if (isClosed()) { - ctrl.height(h); - } - } - - return { - reinit: _reinit - , removeTab: _removeTab - , addTab: _addTab - , addMessage: _addMessage - , open: _open - , setOpened: function() { - _open(function() { - _setOpened(); - }); - } - , close: _close - , toggle: _toggle - , emtClick: _emtClick - , setRoomMode: _setRoomMode - , setHeight: _setHeight - , clean: _clean - }; -}(); - -$(function() { - Wicket.Event.subscribe("/websocket/message", function(jqEvent, msg) { - try { - if (msg instanceof Blob) { - return; //ping - } - const m = jQuery.parseJSON(msg); - if (m) { - switch(m.type) { - case "chat": - Chat.addMessage(m); - break; - case "typing": - if (typeof(typingActivity) === "function") { - typingActivity(m.uid, m.active); - } - break; - } - } - } catch (err) { - //no-op - } - }); -}); http://git-wip-us.apache.org/repos/asf/openmeetings/blob/ae1b51a9/openmeetings-web/src/main/java/org/apache/openmeetings/web/user/chat/cssemoticons.css ---------------------------------------------------------------------- diff --git a/openmeetings-web/src/main/java/org/apache/openmeetings/web/user/chat/cssemoticons.css b/openmeetings-web/src/main/java/org/apache/openmeetings/web/user/chat/cssemoticons.css deleted file mode 100644 index c14765c..0000000 --- a/openmeetings-web/src/main/java/org/apache/openmeetings/web/user/chat/cssemoticons.css +++ /dev/null @@ -1,295 +0,0 @@ -/* - * jQuery CSSEmoticons plugin 0.2.9 - * - * Copyright (c) 2010 Steve Schwartz (JangoSteve) - * - * Dual licensed under the MIT and GPL licenses: - * http://www.opensource.org/licenses/mit-license.php - * http://www.gnu.org/licenses/gpl.html - * - * Date: Sun Oct 22 1:00:00 2010 -0500 - */ - - /* Basic styles for emoticons */ -span.css-emoticon { - font-family: "Trebuchet MS"; /* seems to give the best and most consistent emoticon appearance */ - font-size: 0.65em; - font-weight: bold; - color: #000000; - display: inline-block; - overflow: hidden; - vertical-align: middle; - transform: rotate(90deg); - -webkit-transform: rotate(90deg); - -moz-transform: rotate(90deg); - -o-transform: rotate(90deg); - width: 1.54em; /* note that this is a multiple of this span's font-size, not containing text font-size */ - height: 1.54em; /* so, relative to containing text, width and height are 0.9 x 1.6 = 1.44em */ - text-align: center; - padding: 0; - line-height: 1.34em; - -moz-border-radius: 1.54em; - -webkit-border-radius: 1.54em; - border-radius: 1.54em; - -moz-box-shadow: 1px -1px 2px rgba(0,0,0,0.5); - -webkit-box-shadow: 1px -1px 2px rgba(0,0,0,0.5); - box-shadow: 1px -1px 2px rgba(0,0,0,0.5); - border: 1px solid rgba(0,0,0,0.25); - background-color: #ffcc00; - background-image: -webkit-gradient( - linear, - right top, - left top, - color-stop(0.41, rgb(255,204,0)), - color-stop(0.56, rgb(255,221,85)), - color-stop(1, rgb(255,238,170)) - ); - background-image: -moz-linear-gradient( - center right, - rgb(255,204,0) 41%, - rgb(255,221,85) 56%, - rgb(255,238,170) 100% - ); - -webkit-transition-property:color, background, transform; - -webkit-transition-duration: 1s, 1s; - -webkit-transition-timing-function: linear, ease-in; -} - -/* Styles for two-character emoticons that need more letter-spacing for proportionality */ -span.css-emoticon.spaced-emoticon { - padding-left: 0.2em; - width: 1.34em; - letter-spacing: 0.2em; -} - -/* This is a dirty dirty hack, because webkit doesn't properly do the padding+width=total-width as it should - I think the width of the border may be throwing things off, because it's more noticable for small icons */ -@media screen and (-webkit-min-device-pixel-ratio:0) { - span.css-emoticon.spaced-emoticon { - width: 1.4em; - } -} - -/* Styles for emoticons that need to have smaller characters to fit inside the circle */ -span.css-emoticon.small-emoticon { - font-size: 0.55em; - width: 1.82em; - height: 1.82em; - line-height: 1.72em; - -moz-border-radius: 1.82em; - -webkit-border-radius: 1.82em; - border-radius: 1.82em; -} - -span.css-emoticon.small-emoticon.spaced-emoticon { - padding-left: 0; - width: 1.82em; - letter-spacing: 0.1em; -} - -/* Styles for additional colors */ -span.css-emoticon.red-emoticon { - background-color: #eb0542; - background-image: -webkit-gradient( - linear, - right top, - left top, - color-stop(0.41, rgb(235,5,66)), - color-stop(0.56, rgb(235,38,90)), - color-stop(1, rgb(250,55,110)) - ); - background-image: -moz-linear-gradient( - center right, - rgb(235,5,66) 41%, - rgb(235,38,90) 56%, - rgb(250,55,110) 100% - ); -} - -span.css-emoticon.pink-emoticon { - background-color: #ff8fd4; - background-image: -webkit-gradient( - linear, - right top, - left top, - color-stop(0.41, rgb(255,143,212)), - color-stop(0.56, rgb(255,153,216)), - color-stop(1, rgb(255,173,225)) - ); - background-image: -moz-linear-gradient( - center right, - rgb(255,143,212) 41%, - rgb(255,153,216) 56%, - rgb(255,173,225) 100% - ); -} - -/* styles for emoticons that need no rotation, like O_o */ -span.css-emoticon.no-rotate { - transform: rotate(0deg); - -webkit-transform: rotate(0deg); - -moz-transform: rotate(0deg); - -o-transform: rotate(0deg); - -moz-box-shadow: 1px 1px 2px rgba(0,0,0,0.5); - -webkit-box-shadow: 1px 1px 2px rgba(0,0,0,0.5); - box-shadow: 1px 1px 2px rgba(0,0,0,0.5); - font-size: 0.45em; - width: 2.2em; - height: 2.2em; - line-height: 1.9em; - -moz-border-radius: 2.2em; - -webkit-border-radius: 2.2em; - border-radius: 2.2em; - background-image: -webkit-gradient( - linear, - right bottom, - right top, - color-stop(0.41, rgb(255,204,0)), - color-stop(0.56, rgb(255,221,85)), - color-stop(1, rgb(255,238,170)) - ); - background-image: -moz-linear-gradient( - center bottom, - rgb(255,204,0) 41%, - rgb(255,221,85) 56%, - rgb(255,238,170) 100% - ); -} - -span.css-emoticon.no-rotate.red-emoticon { - background-image: -webkit-gradient( - linear, - right bottom, - right top, - color-stop(0.41, rgb(235,5,66)), - color-stop(0.56, rgb(235,38,90)), - color-stop(1, rgb(250,55,110)) - ); - background-image: -moz-linear-gradient( - center bottom, - rgb(235,5,66) 41%, - rgb(235,38,90) 56%, - rgb(250,55,110) 100% - ); -} - -span.css-emoticon.no-rotate.pink-emoticon { - background-image: -webkit-gradient( - linear, - right bottom, - right top, - color-stop(0.41, rgb(255,143,212)), - color-stop(0.56, rgb(255,153,216)), - color-stop(1, rgb(255,173,225)) - ); - background-image: -moz-linear-gradient( - center bottom, - rgb(255,143,212) 41%, - rgb(255,153,216) 56%, - rgb(255,173,225) 100% - ); -} - -/* Styles for emoticons that need to be rotated counter-clockwise, like <3 */ -span.css-emoticon.counter-rotated { - transform: rotate(-90deg); - -webkit-transform: rotate(-90deg); - -moz-transform: rotate(-90deg); - -o-transform: rotate(-90deg); - -moz-box-shadow: -1px 1px 2px rgba(0,0,0,0.5); - -webkit-box-shadow: -1px 1px 2px rgba(0,0,0,0.5); - box-shadow: -1px 1px 2px rgba(0,0,0,0.5); - background-image: -webkit-gradient( - linear, - left top, - right top, - color-stop(0.41, rgb(255,204,0)), - color-stop(0.56, rgb(255,221,85)), - color-stop(1, rgb(255,238,170)) - ); - background-image: -moz-linear-gradient( - center left, - rgb(255,204,0) 41%, - rgb(255,221,85) 56%, - rgb(255,238,170) 100% - ); -} - -span.css-emoticon.counter-rotated.red-emoticon { - background-image: -webkit-gradient( - linear, - left top, - right top, - color-stop(0.41, rgb(235,5,66)), - color-stop(0.56, rgb(235,38,90)), - color-stop(1, rgb(250,55,110)) - ); - background-image: -moz-linear-gradient( - center left, - rgb(235,5,66) 41%, - rgb(235,38,90) 56%, - rgb(250,55,110) 100% - ); -} - -span.css-emoticon.counter-rotated.pink-emoticon { - background-image: -webkit-gradient( - linear, - left top, - right top, - color-stop(0.41, rgb(255,143,212)), - color-stop(0.56, rgb(255,153,216)), - color-stop(1, rgb(255,173,225)) - ); - background-image: -moz-linear-gradient( - center left, - rgb(255,143,212) 41%, - rgb(255,153,216) 56%, - rgb(255,173,225) 100% - ); -} - -/* Styles for animated states */ -span.css-emoticon.un-transformed-emoticon, span.css-emoticon.animated-emoticon:hover { - /* font-size: inherit; - font-weight: inherit; - vertical-align: inherit; - line-height: inherit; - font-family: inherit; */ - letter-spacing: inherit; - color: inherit; - overflow: visible; - transform: rotate(0deg); - -webkit-transform: rotate(0deg); - -moz-transform: rotate(0deg); - -o-transform: rotate(0deg); - background: none; - background-image: none; - box-shadow: none; - -moz-box-shadow: none; - -webkit-box-shadow: none; - border-color: transparent; -} - -span.css-emoticon.nintendo-controller { - font-size: .8em; - height: 1.2em; - line-height: 1em; - width: 2.7em; - vertical-align: bottom; - border-radius: 0; - -webkit-border-radius: 0; - -moz-border-radius: 0; - background: -webkit-gradient( - linear, - left bottom, - left top, - color-stop(0.09, rgb(116,121,140)), - color-stop(0.55, rgb(165,170,189)) - ); - background: -moz-linear-gradient( - center bottom, - rgb(116,121,140) 9%, - rgb(165,170,189) 55% - ); -} \ No newline at end of file http://git-wip-us.apache.org/repos/asf/openmeetings/blob/ae1b51a9/openmeetings-web/src/main/java/org/apache/openmeetings/web/user/chat/cssemoticons.min.js ---------------------------------------------------------------------- diff --git a/openmeetings-web/src/main/java/org/apache/openmeetings/web/user/chat/cssemoticons.min.js b/openmeetings-web/src/main/java/org/apache/openmeetings/web/user/chat/cssemoticons.min.js deleted file mode 100644 index 006989f..0000000 --- a/openmeetings-web/src/main/java/org/apache/openmeetings/web/user/chat/cssemoticons.min.js +++ /dev/null @@ -1,2 +0,0 @@ -/* Dual licensed under the MIT and GPL licenses */ -var CSSEmoticon=function(){this.escapeCharacters=[")","(","*","[","]","{","}","|","^","<",">","\\","?","+","=","."];this.threeCharacterEmoticons=[":-)",":o)",":c)",":^)",":-D",":-(",":-9",";-)",":-P",":-p",":-Ã",":-b",":-O",":-/",":-X",":-#",":'(","B-)","8-)",";*(",":-*",":-\\","?-)"];this.threeCharEmoticons=this.threeCharacterEmoticons.slice();this.twoCharacterEmoticons=[":)",":]","=]","=)","8)",":}",":D",":(",":[",":{","=(",";)",";]",";D",":P",":p","=P","=p",":b",":Ã",":O",":/","=/",":S",":#",":X","B)",":|",":\\","=\\",":*",":>",":<"];this.twoCharEmoticons=this.twoCharacterEmoticons.slice();this.specialEmoticons={">:)":{cssClass:"red-emoticon small-emoticon spaced-emoticon"},">;)":{cssClass:"red-emoticon small-emoticon spaced-emoticon"},">:(":{cssClass:"red-emoticon small-emoticon spaced-emoticon"},">: )":{cssClass:"red-emoticon small-emoticon"},">; )":{cssClass:"red-emoticon small-emoticon"},">: (":{cssClass:"red-emoticon small-emoticon"},";(":{cssClass: "red-emoticon spaced-emoticon"},"<3":{cssClass:"pink-emoticon counter-rotated"},"O_O":{cssClass:"no-rotate"},"o_o":{cssClass:"no-rotate"},"0_o":{cssClass:"no-rotate"},"O_o":{cssClass:"no-rotate"},"T_T":{cssClass:"no-rotate"},"^_^":{cssClass:"no-rotate"},"O:)":{cssClass:"small-emoticon spaced-emoticon"},"O: )":{cssClass:"small-emoticon"},"8D":{cssClass:"small-emoticon spaced-emoticon"},"XD":{cssClass:"small-emoticon spaced-emoticon"},"xD":{cssClass:"small-emoticon spaced-emoticon"},"=D":{cssClass:"small-emoticon spaced-emoticon"},"8O":{cssClass:"small-emoticon spaced-emoticon"},"[+=..]":{cssClass:"no-rotate nintendo-controller"}};var a=new RegExp('(\\'+this.escapeCharacters.join('|\\')+')','g');var b='(^|[\\s\\0])';for(var c=this.threeCharacterEmoticons.length-1;c>=0;--c){this.threeCharacterEmoticons[c]=this.threeCharacterEmoticons[c].replace(a,'\\$1');this.threeCharacterEmoticons[c]=new RegExp(b+'('+this.threeCharacterEmoticons[c]+')','g');}for(var c=this.twoCharacterEmoticons.le ngth-1;c>=0;--c){this.twoCharacterEmoticons[c]=this.twoCharacterEmoticons[c].replace(a,'\\$1');this.twoCharacterEmoticons[c]=new RegExp(b+'('+this.twoCharacterEmoticons[c]+')','g');}for(var d in this.specialEmoticons){this.specialEmoticons[d].regexp=d.replace(a,'\\$1');this.specialEmoticons[d].regexp=new RegExp(b+'('+this.specialEmoticons[d].regexp+')','g');}this.defaults={animate:true,delay:500,exclude:'pre,code,.no-emoticons'};};CSSEmoticon.prototype.emoticonize=function(a,b){var c={};for(var d in this.defaults)c[d]=this.defaults[d];for(var d in b)c[d]=b[d];var e='span.css-emoticon';if(c.exclude)e+=','+c.exclude;var f=e.split(',');var g='css-emoticon';if(c.animate)g+=' un-transformed-emoticon animated-emoticon';for(var h in this.specialEmoticons){var i=g+" "+this.specialEmoticons[h].cssClass;a=a.replace(this.specialEmoticons[h].regexp,"$1<span class='"+i+"'>$2</span>");}for(var d in this.threeCharacterEmoticons){var j=this.threeCharacterEmoticons[d];a=a.replace(j,"$1<span class='" +g+"'>$2</span>");}for(var d in this.twoCharacterEmoticons){var j=this.twoCharacterEmoticons[d];a=a.replace(j,"$1<span class='"+g+" spaced-emoticon'>$2</span>");}if(c.animate)setTimeout(function(){var a=document.body.getElementsByClassName("un-transformed-emoticon");for(var b in a)if(typeof a[b]=="object")a[b].classList.remove("un-transformed-emoticon");},c.delay);return a;}; http://git-wip-us.apache.org/repos/asf/openmeetings/blob/ae1b51a9/openmeetings-web/src/main/java/org/apache/openmeetings/web/util/upload/fileinput.min.css ---------------------------------------------------------------------- diff --git a/openmeetings-web/src/main/java/org/apache/openmeetings/web/util/upload/fileinput.min.css b/openmeetings-web/src/main/java/org/apache/openmeetings/web/util/upload/fileinput.min.css deleted file mode 100644 index abdd62a..0000000 --- a/openmeetings-web/src/main/java/org/apache/openmeetings/web/util/upload/fileinput.min.css +++ /dev/null @@ -1,7 +0,0 @@ -/*! - * Jasny Bootstrap v3.1.0 (http://jasny.github.com/bootstrap) - * Copyright 2011-2014 Arnold Daniels. - * Licensed under the Apache License, Version 2.0 (the "License"); (https://github.com/jasny/bootstrap/blob/master/LICENSE) - */ - -.btn-labeled{padding-top:0;padding-bottom:0}.btn-label{position:relative;background:transparent;background:rgba(0,0,0,0.15);display:inline-block;padding:6px 12px;left:-12px;border-radius:3px 0 0 3px}.btn-label.btn-label-right{left:auto;right:-12px;border-radius:0 3px 3px 0}.btn-lg .btn-label{padding:10px 16px;left:-16px;border-radius:5px 0 0 5px}.btn-lg .btn-label.btn-label-right{left:auto;right:-16px;border-radius:0 5px 5px 0}.btn-sm .btn-label{padding:5px 10px;left:-10px;border-radius:2px 0 0 2px}.btn-sm .btn-label.btn-label-right{left:auto;right:-10px;border-radius:0 2px 2px 0}.btn-xs .btn-label{padding:1px 5px;left:-5px;border-radius:2px 0 0 2px}.btn-xs .btn-label.btn-label-right{left:auto;right:-5px;border-radius:0 2px 2px 0}.nav-tabs-bottom{border-bottom:0;border-top:1px solid #ddd}.nav-tabs-bottom>li{margin-bottom:0;margin-top:-1px}.nav-tabs-bottom>li>a{border-radius:0 0 4px 4px}.nav-tabs-bottom>li>a:hover,.nav-tabs-bottom>li>a:focus,.nav-tabs-bottom>li.active>a,.nav-tabs-bot tom>li.active>a:hover,.nav-tabs-bottom>li.active>a:focus{border:1px solid #ddd;border-top-color:transparent}.nav-tabs-left{border-bottom:0;border-right:1px solid #ddd}.nav-tabs-left>li{margin-bottom:0;margin-right:-1px;float:none}.nav-tabs-left>li>a{border-radius:4px 0 0 4px;margin-right:0;margin-bottom:2px}.nav-tabs-left>li>a:hover,.nav-tabs-left>li>a:focus,.nav-tabs-left>li.active>a,.nav-tabs-left>li.active>a:hover,.nav-tabs-left>li.active>a:focus{border:1px solid #ddd;border-right-color:transparent}.row>.nav-tabs-left{padding-right:0;padding-left:15px;margin-right:-1px;position:relative;z-index:1}.row>.nav-tabs-left+.tab-content{border-left:1px solid #ddd}.nav-tabs-right{border-bottom:0;border-left:1px solid #ddd}.nav-tabs-right>li{margin-bottom:0;margin-left:-1px;float:none}.nav-tabs-right>li>a{border-radius:0 4px 4px 0;margin-left:0;margin-bottom:2px}.nav-tabs-right>li>a:hover,.nav-tabs-right>li>a:focus,.nav-tabs-right>li.active>a,.nav-tabs-right>li.active>a:hover,.nav-tabs-rig ht>li.active>a:focus{border:1px solid #ddd;border-left-color:transparent}.row>.nav-tabs-right{padding-left:0;padding-right:15px}.btn-file{overflow:hidden;position:relative;vertical-align:middle}.btn-file>input{position:absolute;top:0;right:0;margin:0;opacity:0;filter:alpha(opacity=0);font-size:23px;height:100%;width:100%;direction:ltr;cursor:pointer}.fileinput{margin-bottom:9px;display:inline-block}.fileinput .form-control{padding-top:7px;padding-bottom:5px;display:inline-block;margin-bottom:0px;vertical-align:middle;cursor:text}.fileinput .thumbnail{overflow:hidden;display:inline-block;margin-bottom:5px;vertical-align:middle;text-align:center}.fileinput .thumbnail>img{max-height:100%}.fileinput .btn{vertical-align:middle}.fileinput-exists .fileinput-new,.fileinput-new .fileinput-exists{display:none}.fileinput-inline .fileinput-controls{display:inline}.fileinput-filename{vertical-align:middle;display:inline-block;overflow:hidden}.form-control .fileinput-filename{vertical-align:botto m}.fileinput.input-group{display:table}.fileinput.input-group>*{position:relative;z-index:2}.fileinput.input-group>.btn-file{z-index:1}.fileinput-new.input-group .btn-file,.fileinput-new .input-group .btn-file{border-radius:0 4px 4px 0}.fileinput-new.input-group .btn-file.btn-xs,.fileinput-new .input-group .btn-file.btn-xs,.fileinput-new.input-group .btn-file.btn-sm,.fileinput-new .input-group .btn-file.btn-sm{border-radius:0 3px 3px 0}.fileinput-new.input-group .btn-file.btn-lg,.fileinput-new .input-group .btn-file.btn-lg{border-radius:0 6px 6px 0}.form-group.has-warning .fileinput .fileinput-preview{color:#8a6d3b}.form-group.has-warning .fileinput .thumbnail{border-color:#faebcc}.form-group.has-error .fileinput .fileinput-preview{color:#a94442}.form-group.has-error .fileinput .thumbnail{border-color:#ebccd1}.form-group.has-success .fileinput .fileinput-preview{color:#3c763d}.form-group.has-success .fileinput .thumbnail{border-color:#d6e9c6}.input-group-addon:not(:first-child){bord er-left:0} http://git-wip-us.apache.org/repos/asf/openmeetings/blob/ae1b51a9/openmeetings-web/src/main/java/org/apache/openmeetings/web/util/upload/fileinput.min.js ---------------------------------------------------------------------- diff --git a/openmeetings-web/src/main/java/org/apache/openmeetings/web/util/upload/fileinput.min.js b/openmeetings-web/src/main/java/org/apache/openmeetings/web/util/upload/fileinput.min.js deleted file mode 100644 index 5815e25..0000000 --- a/openmeetings-web/src/main/java/org/apache/openmeetings/web/util/upload/fileinput.min.js +++ /dev/null @@ -1,7 +0,0 @@ -/*! - * Jasny Bootstrap v3.1.0 (http://jasny.github.com/bootstrap) - * Copyright 2011-2014 Arnold Daniels. - * Licensed under the Apache License, Version 2.0 (the "License"); (https://github.com/jasny/bootstrap/blob/master/LICENSE) - */ - -+function(a){"use strict";var b=window.navigator.appName=="Microsoft Internet Explorer",c=function(b,c){this.$element=a(b),this.$input=this.$element.find(":file");if(this.$input.length===0)return;this.name=this.$input.attr("name")||c.name,this.$hidden=this.$element.find('input[type=hidden][name="'+this.name+'"]'),this.$hidden.length===0&&(this.$hidden=a('<input type="hidden">').insertBefore(this.$input)),this.$preview=this.$element.find(".fileinput-preview");var d=this.$preview.css("height");this.$preview.css("display")!=="inline"&&d!=="0px"&&d!=="none"&&this.$preview.css("line-height",d),this.original={exists:this.$element.hasClass("fileinput-exists"),preview:this.$preview.html(),hiddenVal:this.$hidden.val()},this.listen()};c.prototype.listen=function(){this.$input.on("change.bs.fileinput",a.proxy(this.change,this)),a(this.$input[0].form).on("reset.bs.fileinput",a.proxy(this.reset,this)),this.$element.find('[data-trigger="fileinput"]').on("click.bs.fileinput",a.proxy(this.trigger,t his)),this.$element.find('[data-dismiss="fileinput"]').on("click.bs.fileinput",a.proxy(this.clear,this))},c.prototype.change=function(b){var c=b.target.files===undefined?b.target&&b.target.value?[{name:b.target.value.replace(/^.+\\/,"")}]:[]:b.target.files;b.stopPropagation();if(c.length===0){this.clear();return}this.$hidden.val(""),this.$hidden.attr("name",""),this.$input.attr("name",this.name);var d=c[0];if(this.$preview.length>0&&(typeof d.type!="undefined"?d.type.match(/^image\/(gif|png|jpeg)$/):d.name.match(/\.(gif|png|jpe?g)$/i))&&typeof FileReader!="undefined"){var e=new FileReader,f=this.$preview,g=this.$element;e.onload=function(b){var e=a("<img>");e[0].src=b.target.result,c[0].result=b.target.result,g.find(".fileinput-filename").text(d.name),f.css("max-height")!="none"&&e.css("max-height",parseInt(f.css("max-height"),10)-parseInt(f.css("padding-top"),10)-parseInt(f.css("padding-bottom"),10)-parseInt(f.css("border-top"),10)-parseInt(f.css("border-bottom"),10)),f.html(e),g.a ddClass("fileinput-exists").removeClass("fileinput-new"),g.trigger("change.bs.fileinput",c)},e.readAsDataURL(d)}else this.$element.find(".fileinput-filename").text(d.name),this.$preview.text(d.name),this.$element.addClass("fileinput-exists").removeClass("fileinput-new"),this.$element.trigger("change.bs.fileinput")},c.prototype.clear=function(a){a&&a.preventDefault(),this.$hidden.val(""),this.$hidden.attr("name",this.name),this.$input.attr("name","");if(b){var c=this.$input.clone(!0);this.$input.after(c),this.$input.remove(),this.$input=c}else this.$input.val("");this.$preview.html(""),this.$element.find(".fileinput-filename").text(""),this.$element.addClass("fileinput-new").removeClass("fileinput-exists"),a!==undefined&&(this.$input.trigger("change"),this.$element.trigger("clear.bs.fileinput"))},c.prototype.reset=function(){this.clear(),this.$hidden.val(this.original.hiddenVal),this.$preview.html(this.original.preview),this.$element.find(".fileinput-filename").text(""),this.original .exists?this.$element.addClass("fileinput-exists").removeClass("fileinput-new"):this.$element.addClass("fileinput-new").removeClass("fileinput-exists"),this.$element.trigger("reset.bs.fileinput")},c.prototype.trigger=function(a){this.$input.trigger("click"),a.preventDefault()};var d=a.fn.fileinput;a.fn.fileinput=function(b){return this.each(function(){var d=a(this),e=d.data("bs.fileinput");e||d.data("bs.fileinput",e=new c(this,b)),typeof b=="string"&&e[b]()})},a.fn.fileinput.Constructor=c,a.fn.fileinput.noConflict=function(){return a.fn.fileinput=d,this},a(document).on("click.fileinput.data-api",'[data-provides="fileinput"]',function(b){var c=a(this);if(c.data("bs.fileinput"))return;c.fileinput(c.data());var d=a(b.target).closest('[data-dismiss="fileinput"],[data-trigger="fileinput"]');d.length>0&&(b.preventDefault(),d.trigger("click.bs.fileinput"))})}(window.jQuery) http://git-wip-us.apache.org/repos/asf/openmeetings/blob/ae1b51a9/openmeetings-web/src/main/webapp/css/cssemoticons.css ---------------------------------------------------------------------- diff --git a/openmeetings-web/src/main/webapp/css/cssemoticons.css b/openmeetings-web/src/main/webapp/css/cssemoticons.css new file mode 100644 index 0000000..c14765c --- /dev/null +++ b/openmeetings-web/src/main/webapp/css/cssemoticons.css @@ -0,0 +1,295 @@ +/* + * jQuery CSSEmoticons plugin 0.2.9 + * + * Copyright (c) 2010 Steve Schwartz (JangoSteve) + * + * Dual licensed under the MIT and GPL licenses: + * http://www.opensource.org/licenses/mit-license.php + * http://www.gnu.org/licenses/gpl.html + * + * Date: Sun Oct 22 1:00:00 2010 -0500 + */ + + /* Basic styles for emoticons */ +span.css-emoticon { + font-family: "Trebuchet MS"; /* seems to give the best and most consistent emoticon appearance */ + font-size: 0.65em; + font-weight: bold; + color: #000000; + display: inline-block; + overflow: hidden; + vertical-align: middle; + transform: rotate(90deg); + -webkit-transform: rotate(90deg); + -moz-transform: rotate(90deg); + -o-transform: rotate(90deg); + width: 1.54em; /* note that this is a multiple of this span's font-size, not containing text font-size */ + height: 1.54em; /* so, relative to containing text, width and height are 0.9 x 1.6 = 1.44em */ + text-align: center; + padding: 0; + line-height: 1.34em; + -moz-border-radius: 1.54em; + -webkit-border-radius: 1.54em; + border-radius: 1.54em; + -moz-box-shadow: 1px -1px 2px rgba(0,0,0,0.5); + -webkit-box-shadow: 1px -1px 2px rgba(0,0,0,0.5); + box-shadow: 1px -1px 2px rgba(0,0,0,0.5); + border: 1px solid rgba(0,0,0,0.25); + background-color: #ffcc00; + background-image: -webkit-gradient( + linear, + right top, + left top, + color-stop(0.41, rgb(255,204,0)), + color-stop(0.56, rgb(255,221,85)), + color-stop(1, rgb(255,238,170)) + ); + background-image: -moz-linear-gradient( + center right, + rgb(255,204,0) 41%, + rgb(255,221,85) 56%, + rgb(255,238,170) 100% + ); + -webkit-transition-property:color, background, transform; + -webkit-transition-duration: 1s, 1s; + -webkit-transition-timing-function: linear, ease-in; +} + +/* Styles for two-character emoticons that need more letter-spacing for proportionality */ +span.css-emoticon.spaced-emoticon { + padding-left: 0.2em; + width: 1.34em; + letter-spacing: 0.2em; +} + +/* This is a dirty dirty hack, because webkit doesn't properly do the padding+width=total-width as it should + I think the width of the border may be throwing things off, because it's more noticable for small icons */ +@media screen and (-webkit-min-device-pixel-ratio:0) { + span.css-emoticon.spaced-emoticon { + width: 1.4em; + } +} + +/* Styles for emoticons that need to have smaller characters to fit inside the circle */ +span.css-emoticon.small-emoticon { + font-size: 0.55em; + width: 1.82em; + height: 1.82em; + line-height: 1.72em; + -moz-border-radius: 1.82em; + -webkit-border-radius: 1.82em; + border-radius: 1.82em; +} + +span.css-emoticon.small-emoticon.spaced-emoticon { + padding-left: 0; + width: 1.82em; + letter-spacing: 0.1em; +} + +/* Styles for additional colors */ +span.css-emoticon.red-emoticon { + background-color: #eb0542; + background-image: -webkit-gradient( + linear, + right top, + left top, + color-stop(0.41, rgb(235,5,66)), + color-stop(0.56, rgb(235,38,90)), + color-stop(1, rgb(250,55,110)) + ); + background-image: -moz-linear-gradient( + center right, + rgb(235,5,66) 41%, + rgb(235,38,90) 56%, + rgb(250,55,110) 100% + ); +} + +span.css-emoticon.pink-emoticon { + background-color: #ff8fd4; + background-image: -webkit-gradient( + linear, + right top, + left top, + color-stop(0.41, rgb(255,143,212)), + color-stop(0.56, rgb(255,153,216)), + color-stop(1, rgb(255,173,225)) + ); + background-image: -moz-linear-gradient( + center right, + rgb(255,143,212) 41%, + rgb(255,153,216) 56%, + rgb(255,173,225) 100% + ); +} + +/* styles for emoticons that need no rotation, like O_o */ +span.css-emoticon.no-rotate { + transform: rotate(0deg); + -webkit-transform: rotate(0deg); + -moz-transform: rotate(0deg); + -o-transform: rotate(0deg); + -moz-box-shadow: 1px 1px 2px rgba(0,0,0,0.5); + -webkit-box-shadow: 1px 1px 2px rgba(0,0,0,0.5); + box-shadow: 1px 1px 2px rgba(0,0,0,0.5); + font-size: 0.45em; + width: 2.2em; + height: 2.2em; + line-height: 1.9em; + -moz-border-radius: 2.2em; + -webkit-border-radius: 2.2em; + border-radius: 2.2em; + background-image: -webkit-gradient( + linear, + right bottom, + right top, + color-stop(0.41, rgb(255,204,0)), + color-stop(0.56, rgb(255,221,85)), + color-stop(1, rgb(255,238,170)) + ); + background-image: -moz-linear-gradient( + center bottom, + rgb(255,204,0) 41%, + rgb(255,221,85) 56%, + rgb(255,238,170) 100% + ); +} + +span.css-emoticon.no-rotate.red-emoticon { + background-image: -webkit-gradient( + linear, + right bottom, + right top, + color-stop(0.41, rgb(235,5,66)), + color-stop(0.56, rgb(235,38,90)), + color-stop(1, rgb(250,55,110)) + ); + background-image: -moz-linear-gradient( + center bottom, + rgb(235,5,66) 41%, + rgb(235,38,90) 56%, + rgb(250,55,110) 100% + ); +} + +span.css-emoticon.no-rotate.pink-emoticon { + background-image: -webkit-gradient( + linear, + right bottom, + right top, + color-stop(0.41, rgb(255,143,212)), + color-stop(0.56, rgb(255,153,216)), + color-stop(1, rgb(255,173,225)) + ); + background-image: -moz-linear-gradient( + center bottom, + rgb(255,143,212) 41%, + rgb(255,153,216) 56%, + rgb(255,173,225) 100% + ); +} + +/* Styles for emoticons that need to be rotated counter-clockwise, like <3 */ +span.css-emoticon.counter-rotated { + transform: rotate(-90deg); + -webkit-transform: rotate(-90deg); + -moz-transform: rotate(-90deg); + -o-transform: rotate(-90deg); + -moz-box-shadow: -1px 1px 2px rgba(0,0,0,0.5); + -webkit-box-shadow: -1px 1px 2px rgba(0,0,0,0.5); + box-shadow: -1px 1px 2px rgba(0,0,0,0.5); + background-image: -webkit-gradient( + linear, + left top, + right top, + color-stop(0.41, rgb(255,204,0)), + color-stop(0.56, rgb(255,221,85)), + color-stop(1, rgb(255,238,170)) + ); + background-image: -moz-linear-gradient( + center left, + rgb(255,204,0) 41%, + rgb(255,221,85) 56%, + rgb(255,238,170) 100% + ); +} + +span.css-emoticon.counter-rotated.red-emoticon { + background-image: -webkit-gradient( + linear, + left top, + right top, + color-stop(0.41, rgb(235,5,66)), + color-stop(0.56, rgb(235,38,90)), + color-stop(1, rgb(250,55,110)) + ); + background-image: -moz-linear-gradient( + center left, + rgb(235,5,66) 41%, + rgb(235,38,90) 56%, + rgb(250,55,110) 100% + ); +} + +span.css-emoticon.counter-rotated.pink-emoticon { + background-image: -webkit-gradient( + linear, + left top, + right top, + color-stop(0.41, rgb(255,143,212)), + color-stop(0.56, rgb(255,153,216)), + color-stop(1, rgb(255,173,225)) + ); + background-image: -moz-linear-gradient( + center left, + rgb(255,143,212) 41%, + rgb(255,153,216) 56%, + rgb(255,173,225) 100% + ); +} + +/* Styles for animated states */ +span.css-emoticon.un-transformed-emoticon, span.css-emoticon.animated-emoticon:hover { + /* font-size: inherit; + font-weight: inherit; + vertical-align: inherit; + line-height: inherit; + font-family: inherit; */ + letter-spacing: inherit; + color: inherit; + overflow: visible; + transform: rotate(0deg); + -webkit-transform: rotate(0deg); + -moz-transform: rotate(0deg); + -o-transform: rotate(0deg); + background: none; + background-image: none; + box-shadow: none; + -moz-box-shadow: none; + -webkit-box-shadow: none; + border-color: transparent; +} + +span.css-emoticon.nintendo-controller { + font-size: .8em; + height: 1.2em; + line-height: 1em; + width: 2.7em; + vertical-align: bottom; + border-radius: 0; + -webkit-border-radius: 0; + -moz-border-radius: 0; + background: -webkit-gradient( + linear, + left bottom, + left top, + color-stop(0.09, rgb(116,121,140)), + color-stop(0.55, rgb(165,170,189)) + ); + background: -moz-linear-gradient( + center bottom, + rgb(116,121,140) 9%, + rgb(165,170,189) 55% + ); +} \ No newline at end of file
