Browse Source

Improved mobile layout

Refactor styles
Remove unused mobile styles
Added new modals for mobile
master
Igor Zhukov 10 years ago
parent
commit
8849072e93
  1. 775
      app/css/app.css
  2. 605
      app/css/desktop.css
  3. 72
      app/css/mobile.css
  4. 22
      app/js/controllers.js
  5. 2
      app/js/directives.js
  6. 35
      app/js/services.js
  7. 10
      app/partials/desktop/im.html
  8. 1
      app/partials/desktop/message.html
  9. 2
      app/partials/mobile/changelog_modal.html
  10. 41
      app/partials/mobile/chat_create_modal.html
  11. 41
      app/partials/mobile/chat_edit_modal.html
  12. 5
      app/partials/mobile/contacts_modal.html
  13. 45
      app/partials/mobile/edit_contact_modal.html
  14. 47
      app/partials/mobile/im.html
  15. 46
      app/partials/mobile/import_contact_modal.html
  16. 8
      app/partials/mobile/message.html
  17. 3
      app/partials/mobile/message_attach_audio.html
  18. 4
      app/partials/mobile/message_attach_document.html
  19. 20
      app/partials/mobile/message_attach_video.html
  20. 47
      app/partials/mobile/profile_edit_modal.html
  21. 1
      app/vendor/jquery.emojiarea/jquery.emojiarea.js

775
app/css/app.css

File diff suppressed because it is too large Load Diff

605
app/css/desktop.css

@ -136,10 +136,6 @@ @@ -136,10 +136,6 @@
-moz-border-radius : 0;
-webkit-border-radius : 0;
border-radius : 0;
/*-webkit-transition : .2s;
-moz-transition : .2s;
-o-transition : .2s;
transition : .2s;*/
-webkit-transition : none;
-moz-transition : none;
-o-transition : none;
@ -164,10 +160,6 @@ @@ -164,10 +160,6 @@
width : 9px;
right: 0;
top: 0;
/*-webkit-transition : .2s;
-moz-transition : .2s;
-o-transition : .2s;
transition : .2s;*/
-moz-border-radius : 2px;
-webkit-border-radius : 2px;
border-radius : 2px;
@ -211,6 +203,103 @@ @@ -211,6 +203,103 @@
}
.im_history_panel_wrap {
margin: 0 23px 0 15px;
cursor: pointer;
position: relative;
-webkit-box-shadow: 0px 1px 0px rgba(0, 0, 0, 0.12);
-moz-box-shadow: 0px 1px 0px rgba(0, 0, 0, 0.12);
box-shadow: 0px 1px 0px rgba(0, 0, 0, 0.12);
position: relative;
z-index: 2;
min-height: 44px;
}
.im_history_panel {
padding: 10px 4px 0;
}
.im_history_panel_title h4 {
font-size: 17px;
line-height: 20px;
white-space: nowrap;
text-overflow: ellipsis;
overflow: hidden;
margin: 8px 0 6px;
}
.im_history_panel_title h4 small {
color: #999;
font-size: 13px;
margin-left: 5px;
}
.im_history_panel_info_link,
.im_history_panel_edit_link,
.im_history_panel_return_link,
.im_history_panel_media_dropdown .dropdown-toggle {
font-size: 13px;
font-weight: normal;
padding-top: 5px;
line-height: 1;
}
.im_history_panel_media_dropdown {
padding-top: 2px;
}
.im_history_panel_edit_link,
.im_history_panel_return_link,
.im_history_panel_media_dropdown {
font-size: 13px;
margin-right: 20px;
}
.im_history_panel_media_dropdown,
.im_history_panel_return_count {
margin-left: 5px;
}
.im_history_panel_media_dropdown .dropdown-menu {
border-radius: 2px;
right: auto;
left: -15px;
margin-top: 11px;
padding: 0;
-webkit-box-shadow: 0 1px 3px rgba(0, 0, 0, 0.175);
box-shadow: 0 1px 3px rgba(0, 0, 0, 0.175);
}
.im_history_no_dialogs_wrap {
margin: 122px 170px 60px;
text-align: center;
}
.im_history_appending {
-webkit-transition: all ease-in-out 0.2s;
-moz-transition: all ease-in-out 0.2s;
-ms-transition: all ease-in-out 0.2s;
-o-transition: all ease-in-out 0.2s;
transition: all ease-in-out 0.2s;
}
/* Contacts modal */
.contacts_modal_window .modal-dialog {
max-width: 456px;
}
.contacts_modal_header {
padding: 6px 0 18px;
}
.contacts_modal_edit_wrap {
position: absolute;
margin-top: -1px;
}
.contacts_modal_edit_link {
font-size: 14px;
padding: 5px 7px;
}
.contacts_modal_title {
font-size: 14px;
margin: 0;
text-align: center;
font-weight: bold;
}
.icon-message-status {
background: #43A4DB;
border: 0;
@ -229,7 +318,9 @@ @@ -229,7 +318,9 @@
.im_message_pending .icon-message-status {
opacity: 0.5;
}
.im_message_error_btn {
display: none;
}
.im_message_error .im_message_error_btn {
display: inline;
}
@ -241,6 +332,27 @@ @@ -241,6 +332,27 @@
opacity: 1;
}
.im_edit_flush_link,
.im_edit_cancel_link {
display: block;
padding: 6px 17px;
border-radius: 2px;
overflow: hidden;
margin: 6px 6px;
}
.im_edit_cancel_link {
float: left;
}
.im_edit_flush_link {
float: right;
}
.im_edit_flush_link:hover,
.im_edit_cancel_link:hover {
background: #f2f6fa;
text-decoration: none;
}
.im_submit {
padding: 6px 13px;
font-size: 13px;
@ -248,6 +360,59 @@ @@ -248,6 +360,59 @@
min-width: 60px;
}
.im_message_selected .im_message_date,
.im_message_selected .im_message_document_size,
.im_message_selected .im_message_audio_duration,
.im_message_selected .im_message_audio_size,
.im_message_selected .im_message_fwd_date,
.im_history_selectable .im_message_outer_wrap:hover .im_message_date,
.im_history_selectable .im_message_outer_wrap:hover .im_message_document_size,
.im_history_selectable .im_message_outer_wrap:hover .im_message_audio_duration,
.im_history_selectable .im_message_outer_wrap:hover .im_message_audio_size,
.im_history_selectable .im_message_outer_wrap:hover .im_message_fwd_date {
color: #68839c;
}
.im_content_message_select_area {
display: none;
cursor: pointer;
position: absolute;
width: 112px;
height: 52px;
margin: -8px 0 0 -112px;
-webkit-user-select: text;
}
@media (min-width: 1024px) {
.im_content_message_select_area {
display: block;
}
.im_message_wrap {
position: relative;
}
}
.im_history_selectable .icon-select-tick,
.im_content_message_select_area:hover .icon-select-tick {
display: inline-block;
}
.im_message_selected .icon-select-tick,
.im_history_selectable .im_message_outer_wrap:hover .icon-select-tick,
.im_content_message_select_area:hover .icon-select-tick {
background-position: -9px -481px;
opacity: 0.5;
}
.im_message_selected .icon-select-tick {
opacity: 1 !important;
}
/* Dialogs modal */
.peer_select_window .modal-dialog {
max-width: 506px;
}
.peer_select_modal_wrap .modal-body {
padding: 0 2px 14px;
}
@media (max-width: 900px) {
@ -282,4 +447,426 @@ @@ -282,4 +447,426 @@
.im_message_date {
padding: 0;
}
}
.im_message_fwd .im_message_fwd_author_wrap,
.im_message_fwd .im_message_text,
.im_message_fwd .im_message_media {
margin-left: 42px;
}
.im_send_panel_wrap {
max-width: 526px;
}
.im_send_form {
max-width: 389px;
left: 62px;
right: 62px;
}
.im_panel_peer_photo,
.im_panel_own_photo {
width: 50px;
height: 50px;
border-radius: 3px;
overflow: hidden;
}
div.im_panel_peer_photo {
cursor: pointer;
margin-left: 12px;
height: 55px;
}
div.im_panel_own_photo {
margin-right: 12px;
}
.im_panel_peer_online {
background: #6DBF69;
border: 1px solid #FFF;
display: block;
width: 11px;
height: 11px;
border-radius: 6px;
overflow: hidden;
position: absolute;
margin-top: -7px;
margin-left: 43px;
}
/* Peer modals */
.user_modal_window .modal-dialog {
max-width: 506px;
}
.user_modal_photo_profile_wrap {
padding: 13px 12px;
margin-bottom: 15px;
}
.user_modal_image_wrap {
display: block;
width: 100px;
margin-right: 22px;
overflow: hidden;
border-radius: 3px;
}
.user_modal_image {
width: 100px;
height: 100px;
}
.user_modal_header {
font-weight: bold;
margin: 2px 0 7px;
}
.user_modal_status {
color: #999;
margin-bottom: 16px;
}
.user_modal_main_btn {
border: 0;
font-size: 12px;
padding-left: 16px;
padding-right: 16px;
margin: 8px 10px 0 0;
float: left;
}
.user_modal_other_btn {
margin: 8px 0 0 0;
float: left;
}
.user_modal_other_btn .dropdown-toggle {
border: 0;
font-size: 12px;
}
.user_modal_other_btn .dropdown-menu {
margin-left: -3px;
}
.user_modal_settings_wrap {
margin-top: 25px;
}
.user_modal_notifications {
font-weight: bold;
}
.user_modal_clear {
margin-top: 20px;
}
.chat_modal_window .modal-dialog {
max-width: 506px;
}
.chat_modal_header {
font-weight: bold;
margin: 0 0 10px;
}
.chat_modal_members_count {
color: #999;
margin-bottom: 16px;
}
.chat_modal_actions_wrap {
position: relative;
}
.chat_modal_main_btn {
border: 0;
font-size: 12px;
padding-left: 16px;
padding-right: 16px;
float: left;
position: relative;
overflow: hidden;
margin-right: 10px;
margin-top: 8px;
}
.chat_modal_invite_btn {
border: 0;
font-size: 12px;
padding-left: 16px;
padding-right: 16px;
float: left;
position: relative;
margin-right: 10px;
margin-top: 8px;
}
.chat_modal_delete_btn {
border: 0;
font-size: 12px;
padding-left: 16px;
padding-right: 16px;
float: left;
margin-right: 10px;
margin-top: 8px;
}
.chat_modal_other_btn {
margin-top: 8px;
float: left;
}
.chat_modal_other_btn .dropdown-toggle {
border: 0;
font-size: 12px;
}
.chat_modal_other_btn .dropdown-menu {
margin-left: -3px;
}
.chat_modal_photo_update_link {
display: block;
padding: 5px 14px;
clear: both;
font-weight: normal;
line-height: 1.428571429;
color: #333333;
white-space: nowrap;
font-size: 13px;
overflow: hidden;
position: relative;
}
.chat_modal_photo_update_link:hover {
text-decoration: none;
color: #262626;
background-color: #f5f5f5;
}
.chat_modal_settings_wrap {
margin-top: 10px;
}
.chat_modal_participant_wrap {
padding: 8px 0;
border-top: 1px solid #F0F0F0;
}
.chat_modal_participant_wrap:first-child {
border-top: 0;
}
.chat_modal_participant_kick {
padding: 11px 0;
display: block;
}
.chat_modal_participant_name {
display: block;
color: #3C6E97;
font-weight: bold;
margin: 1px 0 2px;
}
.non_osx .chat_modal_participant_name {
font-size: 12px;
}
.chat_modal_participant_status {
color: #999;
}
a.chat_modal_participant_photo {
width: 40px;
height: 40px;
margin-right: 10px;
border-radius: 2px;
overflow: hidden;
}
img.chat_modal_participant_photo {
width: 40px;
height: 40px;
}
.chat_modal_members_forbidden {
color: #999;
}
.settings_modal_window .modal-dialog {
max-width: 482px;
}
.settings_modal_settings {
padding: 4px 0;
margin: 0;
}
.settings_modal_wrap .user_modal_main_btn {
position: relative;
overflow: hidden;
}
.settings_profile_edit_form {
margin-bottom: 15px;
}
.settings_profile_image_wrap {
float: left;
width: 120px;
margin-right: 22px;
}
.settings_profile_first_name,
.settings_profile_last_name {
width: 180px;
float: left;
margin-bottom: 0;
}
.settings_profile_first_name label,
.settings_profile_last_name label {
margin-bottom: 3px;
}
.settings_profile_first_name {
margin-right: 22px;
margin-bottom: 10px;
}
.settings_profile_last_name {
margin-right: 10px;
margin-bottom: 15px;
}
.settings_profile_save {
padding-top: 21px;
float: left;
}
.settings_profile_save_btn {
width: 50px;
}
.settings_profile_edit_form {
margin-bottom: 0;
}
.settings_profile_edit_form input {
font-size: 12px;
line-height: normal;
background: #F2F2F2;
border: 1px solid #F2F2F2;
border-radius: 0;
padding: 6px 6px 6px 6px;
margin-bottom: 0;
margin: 0;
}
.settings_profile_edit_form input:focus,
.settings_profile_edit_form input:active {
background-color: #FFF;
}
.settings_send_choose_form input {
margin-top: 2px;
}
.settings_send_choose_form {
margin-bottom: 20px;
}
.settings_user_phone,
.settings_version {
color: #999;
}
.icon-volume-outer {
display: inline-block;
background: #c7c7c7;
border-radius: 10px;
overflow: hidden;
height: 18px;
padding: 5px 8px;
margin: 0 9px 0 0;
width: 32px;
}
.icon-volume-inner {
display: block;
background: #fff;
float: left;
width: 2px;
vertical-align: bottom;
margin: 0 1px 0;
height: 8px;
}
.icon-volume-inner1 {
height: 2px;
margin-top: 6px;
}
.icon-volume-inner2 {
height: 4px;
margin-top: 4px;
}
.icon-volume-inner3 {
height: 6px;
margin-top: 2px;
}
.icon-volume-outer1 .icon-volume-inner2,
.icon-volume-outer1 .icon-volume-inner3,
.icon-volume-outer1 .icon-volume-inner4,
.icon-volume-outer2 .icon-volume-inner3,
.icon-volume-outer2 .icon-volume-inner4,
.icon-volume-outer3 .icon-volume-inner4 {
display: none;
}
.im_message_selected .im_message_outer_wrap,
.im_message_focus .im_message_outer_wrap {
background: #f2f6fa;
}
.im_history_selectable .im_message_outer_wrap {
cursor: pointer;
}
.im_history_selectable .im_message_outer_wrap:hover {
background: #f2f6fa;
}
.im_message_wrap {
max-width: 526px;
padding: 0 15px;
margin: 0 auto;
}
.im_message_wrap {
position: static;
}
@media (min-width: 901px) {
.im_message_wrap {
position: relative;
}
}
.tooltip-inner {
background: rgba(0,0,0, 0.8);
}
.tooltip-arrow {
opacity: 0.8;
}
.im_dialogs_panel_dropdown {
margin-left: 8px;
}
.im_dialogs_panel_dropdown .dropdown-toggle {
background: #F2F2F2;
display: block;
border-radius: 2px;
overflow: hidden;
padding: 11px 12px;
width: 38px;
height: 34px;
}
.im_dialogs_panel_dropdown .dropdown-toggle .icon-bar {
background: #b3b3b3;
display: block;
height: 2px;
margin-bottom: 3px;
}
.im_dialogs_panel_dropdown .dropdown-toggle .icon-bar:last-child {
margin-bottom: 0;
}
.im_dialogs_panel_dropdown.open .dropdown-toggle {
background: #6690b0;
}
.im_dialogs_panel_dropdown.open .dropdown-toggle .icon-bar {
background: #fff;
}
/* Import contact modal */
.import_contact_modal_window .modal-dialog {
max-width: 480px;
}
.modal-content-animated {
-webkit-transition: margin-top linear 0.2s;
transition: margin-top linear 0.2s;
}
.countries_modal_col {
max-height: 350px;
}
.changelog_modal_window .modal-dialog {
max-width: 506px;
}

72
app/css/mobile.css

@ -232,7 +232,6 @@ html { @@ -232,7 +232,6 @@ html {
margin-right: 0;
}
.navbar_offline .navbar-quick-nav li > a > .navbar-quick-back-title,
.navbar_offline .im_head_attach,
.navbar_offline .navbar-search-wrap,
.navbar_offline .navbar-history-edit {
display: none;
@ -326,15 +325,6 @@ html { @@ -326,15 +325,6 @@ html {
border: 0;
overflow: hidden;
}
.im_page_footer {
display: none;
}
.im_panel_own_photo,
.im_panel_peer_photo {
display: none;
}
.im_history_selectable .im_message_outer_wrap:hover,
.im_message_selected {
background: #e1e9f0;
@ -453,10 +443,6 @@ html { @@ -453,10 +443,6 @@ html {
width: auto;
float: none;
}
.im_message_audio_actions,
.im_message_document_actions {
display: none;
}
.im_message_audio_player_wrap {
height: 38px;
line-height: 38px;
@ -514,9 +500,6 @@ img.im_message_video_thumb, @@ -514,9 +500,6 @@ img.im_message_video_thumb,
-ms-filter: none;
filter: none;
}
.im_message_video .im_message_document_info {
display: none;
}
.im_message_document_thumb_wrap {
position: absolute;
@ -612,6 +595,7 @@ img.im_message_video_thumb, @@ -612,6 +595,7 @@ img.im_message_video_thumb,
}
.im_message_date {
font-size: 12px;
padding-left: 4px;
}
.im_message_out .im_message_meta {
right: auto;
@ -735,20 +719,10 @@ a.im_message_from_photo { @@ -735,20 +719,10 @@ a.im_message_from_photo {
}
.form-control {
.im_dialogs_search_field,
.contacts_modal_search_field {
font-size: 1.2em;
}
.im_history_typing_wrap {
display: none;
}
.im_history_panel_info_link {
display: none;
}
.im_edit_flush_link,
.im_edit_cancel_link {
display: none;
}
.im_edit_delete_btn,
.im_edit_forward_btn {
background: none !important;
@ -768,10 +742,6 @@ a.im_message_from_photo { @@ -768,10 +742,6 @@ a.im_message_from_photo {
.im_edit_forward_btn strong {
font-weight: normal;
}
.im_edit_panel_border {
display: none;
}
.im_edit_panel_wrap {
padding: 5px 0;
margin: 0;
@ -797,10 +767,6 @@ a.im_message_from_photo { @@ -797,10 +767,6 @@ a.im_message_from_photo {
.im_page_peer_not_selected .im_dialogs_col_wrap {
display: block;
}
.im_dialogs_col {
}
.im_dialogs_scrollable_wrap {
}
.im_dialogs_panel {
display: none;
@ -810,9 +776,6 @@ a.im_message_from_photo { @@ -810,9 +776,6 @@ a.im_message_from_photo {
.im_dialogs_panel_search.im_dialogs_panel {
display: block;
}
.im_dialogs_panel_dropdown {
display: none;
}
.im_page_split .im_dialogs_search {
margin-right: 0;
}
@ -872,7 +835,9 @@ a.im_dialog:hover .im_dialog_message_text, @@ -872,7 +835,9 @@ a.im_dialog:hover .im_dialog_message_text,
a.im_dialog_selected .im_dialog_message_text {
color: #8f8f8f;
}
.im_message_fwd_title {
display: none;
}
.im_grouped_fwd_start .im_message_fwd_title {
display: block;
color: #8a8a8a;
@ -911,12 +876,6 @@ a.im_message_fwd_author { @@ -911,12 +876,6 @@ a.im_message_fwd_author {
margin-left: 50px;
}
.im_grouped_fwd_short .im_message_fwd.im_message_out .im_message_fwd_author_wrap,
.im_grouped_fwd_short .im_message_fwd.im_message_out .im_message_text,
.im_grouped_fwd_short .im_message_fwd.im_message_out .im_message_media {
/*margin-left: 0;*/
}
.im_dialogs_scrollable_wrap a.im_dialog:hover,
@ -928,29 +887,29 @@ a.im_message_fwd_author { @@ -928,29 +887,29 @@ a.im_message_fwd_author {
background-color: #f4f4f4;
}
.modal.page_modal {
.modal.mobile_modal {
background: #FFF;
padding: 0;
}
.page_modal .modal-content {
.mobile_modal .modal-content {
border-radius: 0;
box-shadow: none;
}
.page_modal .modal-dialog {
.mobile_modal .modal-dialog {
margin: 0;
}
.page_modal .modal-content .modal-body {
.mobile_modal .modal-content .modal-body {
padding-left: 0;
padding-right: 0;
}
.page_modal .modal-footer {
.mobile_modal .modal-footer {
padding-left: 0;
padding-right: 0;
padding-bottom: 9px;
}
.mobile_modal_body,
.page_modal .modal-content .mobile_modal_body {
.mobile_modal .modal-content .mobile_modal_body {
padding: 9px;
}
@ -1101,9 +1060,6 @@ a.mobile_modal_action .tg_checkbox_label { @@ -1101,9 +1060,6 @@ a.mobile_modal_action .tg_checkbox_label {
.is_1x .im_submit {
background-image: url(../img/icons/IconsetW_1x.png);
}
.im_submit_text {
display: none;
}
.im_attach {
position: absolute;
@ -1133,7 +1089,6 @@ a.mobile_modal_action .tg_checkbox_label { @@ -1133,7 +1089,6 @@ a.mobile_modal_action .tg_checkbox_label {
opacity: 1;
}
.im_media_attach,
.im_attach,
.im_send_form_empty .im_submit {
display: none;
@ -1250,7 +1205,6 @@ a.mobile_modal_action .tg_checkbox_label { @@ -1250,7 +1205,6 @@ a.mobile_modal_action .tg_checkbox_label {
}
.countries_modal_col {
margin: 0 -9px;
max-height: none;
}
.countries_modal_members_list {
padding: 0 12px 0 12px;

22
app/js/controllers.js

@ -43,15 +43,10 @@ angular.module('myApp.controllers', []) @@ -43,15 +43,10 @@ angular.module('myApp.controllers', [])
$scope.callPending = {};
$scope.chooseCountry = function () {
var className = 'countries_modal_window page_modal';
if (Config.Mobile) {
className += ' mobile_modal';
}
var modal = $modal.open({
templateUrl: templateUrl('country_select_modal'),
controller: 'CountrySelectModalController',
windowClass: className
windowClass: 'countries_modal_window mobile_modal'
});
modal.result.then(selectCountry);
@ -332,15 +327,10 @@ angular.module('myApp.controllers', []) @@ -332,15 +327,10 @@ angular.module('myApp.controllers', [])
$scope.historyState = {selectActions: false, typing: []};
$scope.openSettings = function () {
var className = 'settings_modal_window page_modal';
if (Config.Mobile) {
className += ' mobile_modal';
}
$modal.open({
templateUrl: templateUrl('settings_modal'),
controller: 'SettingsModalController',
windowClass: className
windowClass: 'settings_modal_window mobile_modal'
});
}
@ -363,7 +353,7 @@ angular.module('myApp.controllers', []) @@ -363,7 +353,7 @@ angular.module('myApp.controllers', [])
templateUrl: templateUrl('chat_create_modal'),
controller: 'ChatCreateModalController',
scope: scope,
windowClass: 'group_edit_modal_window'
windowClass: 'group_edit_modal_window mobile_modal'
});
}
@ -1821,7 +1811,7 @@ angular.module('myApp.controllers', []) @@ -1821,7 +1811,7 @@ angular.module('myApp.controllers', [])
$modal.open({
templateUrl: templateUrl(edit ? 'edit_contact_modal' : 'import_contact_modal'),
controller: 'ImportContactModalController',
windowClass: 'import_contact_modal_window page_modal',
windowClass: 'import_contact_modal_window mobile_modal',
scope: scope
}).result.then(function (foundUserID) {
if ($scope.userID == foundUserID) {
@ -2015,7 +2005,7 @@ angular.module('myApp.controllers', []) @@ -2015,7 +2005,7 @@ angular.module('myApp.controllers', [])
templateUrl: templateUrl('chat_edit_modal'),
controller: 'ChatEditModalController',
scope: scope,
windowClass: 'group_edit_modal_window'
windowClass: 'group_edit_modal_window mobile_modal'
});
}
@ -2107,7 +2097,7 @@ angular.module('myApp.controllers', []) @@ -2107,7 +2097,7 @@ angular.module('myApp.controllers', [])
$modal.open({
templateUrl: templateUrl('profile_edit_modal'),
controller: 'ProfileEditModalController',
windowClass: 'profile_edit_modal_window page_modal'
windowClass: 'profile_edit_modal_window mobile_modal'
});
};

2
app/js/directives.js

@ -1650,7 +1650,7 @@ angular.module('myApp.directives', ['myApp.filters']) @@ -1650,7 +1650,7 @@ angular.module('myApp.directives', ['myApp.filters'])
var updateMargin = function () {
if (Config.Mobile &&
$(element[0].parentNode.parentNode.parentNode).hasClass('page_modal')) {
$(element[0].parentNode.parentNode.parentNode).hasClass('mobile_modal')) {
return;
}
var height = element[0].parentNode.offsetHeight,

35
app/js/services.js

@ -188,16 +188,11 @@ angular.module('myApp.services', []) @@ -188,16 +188,11 @@ angular.module('myApp.services', [])
var scope = $rootScope.$new();
scope.userID = userID;
var className = 'user_modal_window page_modal';
if (Config.Mobile) {
className += ' mobile_modal';
}
var modalInstance = $modal.open({
templateUrl: templateUrl('user_modal'),
controller: 'UserModalController',
scope: scope,
windowClass: className
windowClass: 'user_modal_window mobile_modal'
});
};
$rootScope.openUser = openUser;
@ -291,7 +286,7 @@ angular.module('myApp.services', []) @@ -291,7 +286,7 @@ angular.module('myApp.services', [])
return $modal.open({
templateUrl: templateUrl('import_contact_modal'),
controller: 'ImportContactModalController',
windowClass: 'import_contact_modal_window'
windowClass: 'import_contact_modal_window mobile_modal'
}).result.then(function (foundUserID) {
if (!foundUserID) {
return $q.reject();
@ -381,7 +376,7 @@ angular.module('myApp.services', []) @@ -381,7 +376,7 @@ angular.module('myApp.services', [])
return $modal.open({
templateUrl: templateUrl('phonebook_modal'),
controller: 'PhonebookModalController',
windowClass: 'phonebook_modal_window page_modal mobile_modal'
windowClass: 'phonebook_modal_window mobile_modal'
});
}
@ -524,16 +519,11 @@ angular.module('myApp.services', []) @@ -524,16 +519,11 @@ angular.module('myApp.services', [])
var scope = $rootScope.$new();
scope.chatID = chatID;
var className = 'chat_modal_window page_modal';
if (Config.Mobile) {
className += ' mobile_modal';
}
var modalInstance = $modal.open({
templateUrl: templateUrl('chat_modal'),
controller: 'ChatModalController',
scope: scope,
windowClass: className
windowClass: 'chat_modal_window mobile_modal'
});
}
@ -3846,17 +3836,11 @@ angular.module('myApp.services', []) @@ -3846,17 +3836,11 @@ angular.module('myApp.services', [])
angular.extend(scope, options);
}
var className = 'peer_select_window page_modal';
if (Config.Mobile) {
className += ' mobile_modal';
}
return $modal.open({
templateUrl: templateUrl('peer_select'),
controller: 'PeerSelectController',
scope: scope,
windowClass: className
windowClass: 'peer_select_window mobile_modal'
}).result;
}
@ -3879,16 +3863,11 @@ angular.module('myApp.services', []) @@ -3879,16 +3863,11 @@ angular.module('myApp.services', [])
scope.action = 'select';
}
var className = 'contacts_modal_window page_modal';
if (Config.Mobile) {
className += ' mobile_modal';
}
return $modal.open({
templateUrl: templateUrl('contacts_modal'),
controller: 'ContactsModalController',
scope: scope,
windowClass: className
windowClass: 'contacts_modal_window mobile_modal'
}).result;
}
@ -3958,7 +3937,7 @@ angular.module('myApp.services', []) @@ -3958,7 +3937,7 @@ angular.module('myApp.services', [])
$modal.open({
templateUrl: templateUrl('changelog_modal'),
scope: $scope,
windowClass: 'changelog_modal_window page_modal'
windowClass: 'changelog_modal_window mobile_modal'
});
}

10
app/partials/desktop/im.html

@ -83,16 +83,6 @@ @@ -83,16 +83,6 @@
</div>
<div class="im_history_col_wrap" ng-controller="AppImHistoryController">
<div ng-show="state.notSelected" ng-switch="isEmpty.contacts &amp;&amp; isEmpty.dialogs">
<div ng-switch-when="true" class="im_history_no_dialogs_wrap">
<h3 class="im_dialogs_empty_header">Get started</h3>
<p class="im_dialogs_empty_lead">Welcome to Telegram Web. You can always set your profile photo and change your name in Settings.</p>
<button type="button" class="btn btn-primary btn-sm" ng-click="openSettings()">Open Settings</button>
</div>
<div ng-switch-default class="im_history_not_selected" my-vertical-position="0.35" padding="true">
Please select a chat to start messaging
</div>
</div>
<div ng-show="!state.notSelected &amp;&amp; !state.loaded" class="im_history_not_selected" my-vertical-position="0.35" padding="true">
Loading history<span my-loading-dots></span>
</div>

1
app/partials/desktop/message.html

@ -42,7 +42,6 @@ @@ -42,7 +42,6 @@
<a class="im_message_author" my-user-link="historyMessage.from_id" short="!historyMessage.to_id.chat_id" color="historyMessage.to_id.chat_id > 0"></a>
<div ng-if="::historyMessage._ == 'messageForwarded' || false" class="im_message_fwd_from">
<div class="im_message_fwd_title" ng-if="::historyMessage.grouped == 'im_grouped_fwd_start'">Forwarded message</div>
<a class="im_message_fwd_photo pull-left" my-user-photolink="historyMessage.fwd_from_id" img-class="im_message_fwd_photo"></a>
<div class="im_message_fwd_author_wrap">
<a class="im_message_fwd_author" my-user-link="historyMessage.fwd_from_id" short="true"></a><span class="im_message_fwd_date" ng-bind="historyMessage.fwd_date | dateOrTime"></span>

2
app/partials/mobile/changelog_modal.html

@ -1,4 +1,4 @@ @@ -1,4 +1,4 @@
<div class="changelog_modal_wrap" my-modal-position>
<div class="changelog_modal_wrap">
<a class="modal-close-button" ng-click="$close()"><i></i></a>

41
app/partials/mobile/chat_create_modal.html

@ -1,24 +1,43 @@ @@ -1,24 +1,43 @@
<div class="contacts_modal_wrap" my-modal-position>
<div class="contacts_modal_wrap">
<div class="tg_page_head tg_modal_head">
<div class="navbar navbar-static-top navbar-inverse">
<div class="container">
<div class="navbar-header">
<ul class="nav navbar-nav navbar-quick-nav">
<li class="navbar-quick-right">
<a ng-class="{disabled: group.creating}" ng-click="createGroup()" ng-bind="group.creating ? 'Creating...' : 'OK'" ng-disabled="group.creating"></a>
</li>
<li>
<a ng-click="$dismiss()" class="navbar-quick-media-back">
<i class="icon icon-back"></i>
<div class="navbar-quick-back-title">
<h4>
Create Group
</h4>
</div>
</a>
</li>
</ul>
</div>
<a class="modal-close-button" ng-click="$dismiss()"><i></i></a>
</div>
</div>
</div>
<div class="modal-body">
<form class="modal_simple_form" ng-submit="createGroup()">
<h4>Create Group</h4>
<form class="modal_simple_form" ng-submit="createGroup()" my-vertical-position="0.25">
<div class="form-group">
<input class="form-control input-sm" my-focused type="text" placeholder="Group name" ng-model="group.name"/>
<input class="form-control input-lg" my-focused type="text" placeholder="Group name" ng-model="group.name"/>
</div>
</form>
</div>
<div class="modal-footer">
<a class="btn btn-link" ng-click="$dismiss()">Cancel</a>
<button class="btn btn-primary" ng-class="{disabled: group.creating}" ng-click="createGroup()" ng-bind="group.creating ? 'Creating...' : 'Create Group'" ng-disabled="group.creating"></button>
</div>
</div>

41
app/partials/mobile/chat_edit_modal.html

@ -1,24 +1,43 @@ @@ -1,24 +1,43 @@
<div class="contacts_modal_wrap" my-modal-position>
<div class="contacts_modal_wrap">
<div class="tg_page_head tg_modal_head">
<div class="navbar navbar-static-top navbar-inverse">
<div class="container">
<div class="navbar-header">
<ul class="nav navbar-nav navbar-quick-nav">
<li class="navbar-quick-right">
<a ng-class="{disabled: group.updating}" ng-click="updateGroup()" ng-bind="group.updating ? 'Saving...' : 'Save'" ng-disabled="group.updating"></a>
</li>
<li>
<a ng-click="$dismiss()" class="navbar-quick-media-back">
<i class="icon icon-back"></i>
<div class="navbar-quick-back-title">
<h4>
Edit Group
</h4>
</div>
</a>
</li>
</ul>
</div>
<a class="modal-close-button" ng-click="$dismiss()"><i></i></a>
</div>
</div>
</div>
<div class="modal-body">
<form class="modal_simple_form" ng-submit="updateGroup()">
<h4>Edit Group</h4>
<form class="modal_simple_form" ng-submit="updateGroup()" my-vertical-position="0.25">
<div class="form-group">
<input class="form-control input-sm" my-focused type="text" placeholder="Group name" ng-model="group.name"/>
<input class="form-control input-lg" my-focused type="text" placeholder="Group name" ng-model="group.name"/>
</div>
</form>
</div>
<div class="modal-footer">
<a class="btn btn-link" ng-click="$dismiss()">Cancel</a>
<button class="btn btn-primary" ng-class="{disabled: group.updating}" ng-click="updateGroup()" ng-bind="group.updating ? 'Saving...' : 'Save'" ng-disabled="group.updating"></button>
</div>
</div>

5
app/partials/mobile/contacts_modal.html

@ -36,6 +36,11 @@ @@ -36,6 +36,11 @@
</div>
<ul ng-switch-default class="nav navbar-nav navbar-quick-nav">
<li ng-if="action == 'select' || action == 'new_group'" class="navbar-quick-right">
<a ng-class="{disabled: !selectedCount}" ng-disabled="!selectedCount" ng-click="submitSelected()">
Next
</a>
</li>
<li>
<a ng-click="$dismiss()" class="navbar-quick-media-back">
<i class="icon icon-back"></i>

45
app/partials/mobile/edit_contact_modal.html

@ -1,30 +1,49 @@ @@ -1,30 +1,49 @@
<div class="import_modal_wrap" my-modal-position>
<div class="import_modal_wrap">
<div class="tg_page_head tg_modal_head">
<div class="navbar navbar-static-top navbar-inverse">
<div class="container">
<div class="navbar-header">
<ul class="nav navbar-nav navbar-quick-nav">
<li class="navbar-quick-right">
<a ng-class="{disabled: progress.enabled}" ng-click="doImport()" ng-bind="progress.enabled ? 'Saving...' : 'Save'" ng-disabled="progress.enabled"></a>
</li>
<li>
<a ng-click="$dismiss()" class="navbar-quick-media-back">
<i class="icon icon-back"></i>
<div class="navbar-quick-back-title">
<h4>
Edit contact
</h4>
</div>
</a>
</li>
</ul>
</div>
<a class="modal-close-button" ng-click="$dismiss()"><i></i></a>
</div>
</div>
</div>
<div class="modal-body">
<form class="modal_simple_form" ng-submit="doImport()">
<h4>Edit contact</h4>
<form class="modal_simple_form" ng-submit="doImport()" my-vertical-position="0.3">
<div class="form-group">
<span class="form-control uneditable-input input-sm disabled" disabled ng-bind="importContact.phone | phoneNumber"></span>
<span class="form-control uneditable_input input-lg disabled" disabled my-focused type="text" ng-bind="importContact.phone | phoneNumber"></span>
</div>
<div class="form-group">
<input class="form-control input-sm" my-focused type="text" placeholder="First name" ng-model="importContact.first_name"/>
<input class="form-control input-lg" type="text" placeholder="First name" ng-model="importContact.first_name"/>
</div>
<div class="form-group">
<input class="form-control input-sm" type="text" placeholder="Last name" ng-model="importContact.last_name"/>
<input class="form-control input-lg" type="text" placeholder="Last name" ng-model="importContact.last_name"/>
</div>
</form>
</div>
<div class="modal-footer">
<a class="btn btn-link" ng-click="$dismiss()">Cancel</a>
<button class="btn btn-primary" ng-class="{disabled: progress.enabled}" ng-click="doImport()" ng-bind="progress.enabled ? 'Saving...' : 'Save'" ng-disabled="progress.enabled"></button>
</div>
</div>

47
app/partials/mobile/im.html

@ -93,21 +93,6 @@ @@ -93,21 +93,6 @@
</div>
<div class="im_history_typing_wrap">
<div class="im_history_typing" ng-show="historyState.typing.length > 0 &amp;&amp; !historyFilter.mediaType" ng-switch="historyState.typing.length">
<span ng-switch-when="1">
<a class="im_history_typing_author" my-user-link="historyState.typing[0]"></a> is typing<span my-loading-dots></span>
</span>
<span ng-switch-when="2">
<a class="im_history_typing_author" my-user-link="historyState.typing[0]"></a> and <a class="im_history_typing_author" my-user-link="historyState.typing[1]"></a> are typing<span my-loading-dots></span>
</span>
<span ng-switch-default>
<a class="im_history_typing_author" my-user-link="historyState.typing[0]"></a>, <a class="im_history_typing_author" my-user-link="historyState.typing[1]"></a> and {{historyState.typing.length - 2}} more are typing<span my-loading-dots></span>
</span>
</div>
</div>
</div>
</div>
@ -115,12 +100,6 @@ @@ -115,12 +100,6 @@
<div class="im_bottom_panel_wrap">
<div class="im_edit_panel_wrap clearfix" ng-show="historyState.selectActions">
<div class="im_edit_panel_border"></div>
<a class="im_edit_flush_link" ng-click="selectedFlush()" ng-switch="historyPeer.id > 0">
<span ng-switch-when="true">Delete Chat</span>
<span ng-switch-default>Clear History</span>
</a>
<a class="im_edit_cancel_link" ng-click="selectedCancel()">Cancel</a>
<div class="im_edit_selected_actions">
<a class="btn btn-primary im_edit_forward_btn" ng-click="selectedForward()" ng-class="{disabled: !selectedCount}" ng-disabled="!selectedCount">
Forward <strong class="im_selected_count" ng-show="selectedCount > 0" ng-bind="selectedCount"></strong>
@ -135,23 +114,6 @@ @@ -135,23 +114,6 @@
<div class="im_send_form_wrap1">
<div class="im_send_form_wrap clearfix" ng-controller="AppImSendController">
<div class="pull-right im_panel_peer_photo" ng-click="showPeerInfo()">
<img
class="im_panel_peer_photo"
my-load-thumb
watch="true"
thumb="historyPeer.photo"
/>
<i class="icon im_panel_peer_online" ng-show="historyPeer.id > 0 &amp;&amp; historyPeer.data.status._ == 'userStatusOnline'"></i>
</div>
<div class="pull-left im_panel_own_photo">
<img
class="im_panel_own_photo"
my-load-thumb
watch="true"
thumb="ownPhoto"
/>
</div>
<form my-send-form draft-message="draftMessage" class="im_send_form" ng-class="{im_send_form_empty: !draftMessage.text.length}" ng-submit="sendMessage($event)">
<div class="im_send_field_wrap">
@ -159,11 +121,6 @@ @@ -159,11 +121,6 @@
<textarea ng-model="draftMessage.text" placeholder="Write a message..." class="form-control im_message_field no_outline"></textarea>
</div>
<div class="im_media_attach pull-right">
<input type="file" class="im_media_attach_input" size="28" multiple="true" accept="image/*, video/*, audio/*" title="Send media"/>
<i class="icon icon-camera"></i>
</div>
<div class="im_attach pull-right">
<input type="file" class="im_attach_input" size="28" multiple="true" title="Send file" />
<i class="icon icon-paperclip"></i>
@ -173,9 +130,7 @@ @@ -173,9 +130,7 @@
<i class="icon icon-emoji"></i>
</div>
<button type="submit" class="btn btn-success im_submit">
<span class="im_submit_text">Send</span>
</button>
<button type="submit" class="btn btn-success im_submit"></button>
</form>
</div>

46
app/partials/mobile/import_contact_modal.html

@ -1,31 +1,53 @@ @@ -1,31 +1,53 @@
<div class="import_modal_wrap" my-modal-position>
<div class="import_modal_wrap">
<div class="tg_page_head tg_modal_head">
<div class="navbar navbar-static-top navbar-inverse">
<div class="container">
<div class="navbar-header">
<ul class="nav navbar-nav navbar-quick-nav">
<li class="navbar-quick-right">
<a ng-class="{disabled: progress.enabled}" ng-click="doImport()" ng-bind="progress.enabled ? 'Importing...' : 'Save'" ng-disabled="progress.enabled"></a>
</li>
<li>
<a ng-click="$dismiss()" class="navbar-quick-media-back">
<i class="icon icon-back"></i>
<div class="navbar-quick-back-title">
<h4>
Add new contact
</h4>
</div>
</a>
</li>
</ul>
</div>
<a class="modal-close-button" ng-click="$dismiss()"><i></i></a>
</div>
</div>
</div>
<div class="modal-body">
<form class="modal_simple_form" ng-submit="doImport()">
<h4>Add new contact</h4>
<form class="modal_simple_form" ng-submit="doImport()" my-vertical-position="0.3">
<div class="form-group">
<input class="form-control input-sm" my-focused type="text" placeholder="Phone number" ng-model="importContact.phone"/>
<input class="form-control input-lg" my-focused type="text" placeholder="Phone number" ng-model="importContact.phone"/>
</div>
<div class="form-group">
<input class="form-control input-sm" type="text" placeholder="First name" ng-model="importContact.first_name"/>
<input class="form-control input-lg" type="text" placeholder="First name" ng-model="importContact.first_name"/>
</div>
<div class="form-group">
<input class="form-control input-sm" type="text" placeholder="Last name" ng-model="importContact.last_name"/>
<input class="form-control input-lg" type="text" placeholder="Last name" ng-model="importContact.last_name"/>
</div>
</form>
</div>
<div class="modal-footer">
<a class="btn btn-link pull-left" ng-if="phonebookAvailable" ng-click="importPhonebook()">Phonebook</a>
<a class="btn btn-link" ng-click="$dismiss()">Cancel</a>
<button class="btn btn-primary" ng-class="{disabled: progress.enabled}" ng-click="doImport()" ng-bind="progress.enabled ? 'Importing...' : 'Save'" ng-disabled="progress.enabled"></button>
<div class="modal-footer" ng-if="phonebookAvailable">
<a class="btn btn-link" ng-click="importPhonebook()">Phonebook</a>
</div>
</div>

8
app/partials/mobile/message.html

@ -20,14 +20,6 @@ @@ -20,14 +20,6 @@
</div>
<div ng-if="::historyMessage._ != 'messageService'" class="im_content_message_wrap" ng-class="::[historyMessage.out ? 'im_message_out' : 'im_message_in', historyMessage._ == 'messageForwarded' ? 'im_message_fwd' : '']">
<div class="im_content_message_select_area">
<i class="icon icon-select-tick"></i>
</div>
<a class="im_message_error_btn" ng-if="::historyMessage.pending || historyMessage.error || false" ng-click="historyMessage.send()">
<i class="icon-message-status" tooltip="Try again"></i>
</a>
<i ng-if="::historyMessage.unread || historyMessage.pending || false" class="icon-message-status" ng-class="{'icon-message-status-unread': historyMessage.unread, 'icon-message-status-pending': historyMessage.pending}" ng-show="!historyMessage.error"></i>
<a class="im_message_from_photo pull-left" my-user-photolink="historyMessage.from_id" img-class="im_message_from_photo"></a>

3
app/partials/mobile/message_attach_audio.html

@ -12,9 +12,6 @@ @@ -12,9 +12,6 @@
<span class="im_message_audio_duration" ng-if="!historyMessage.media.audio.progress.enabled" ng-bind="::historyMessage.media.audio.duration | duration"></span>
<span class="im_message_audio_size" ng-if="historyMessage.media.audio.progress.enabled" ng-bind="historyMessage.media.audio.progress | formatSizeProgress"></span>
</div>
<div class="im_message_audio_actions" ng-if="!historyMessage.media.audio.progress.enabled &amp;&amp; !historyMessage.media.audio.url">
<a href="" ng-click="openAudio(historyMessage.media.audio.id)">Play</a>
</div>
<div class="clearfix cancelable_progress_wrap" ng-if="historyMessage.media.audio.progress.enabled">
<a class="im_message_media_progress_cancel pull-right" ng-click="historyMessage.media.audio.progress.cancel()">Cancel</a>
<div class="im_message_download_progress_wrap">

4
app/partials/mobile/message_attach_document.html

@ -21,10 +21,6 @@ @@ -21,10 +21,6 @@
<span class="im_message_document_size" ng-if="!historyMessage.media.document.progress.enabled" ng-bind="::historyMessage.media.document.size | formatSize"></span>
<span class="im_message_document_size" ng-if="historyMessage.media.document.progress.enabled" ng-bind="historyMessage.media.document.progress | formatSizeProgress"></span>
</div>
<div class="im_message_document_actions" ng-if="!historyMessage.media.document.progress.enabled">
<a href="" ng-click="downloadDoc(historyMessage.media.document.id)">Download</a>
<a href="" ng-click="downloadDoc(historyMessage.media.document.id, 1)" ng-if="::historyMessage.media.document.withPreview">Open</a>
</div>
<div class="clearfix cancelable_progress_wrap" ng-if="historyMessage.media.document.progress.enabled">
<a class="im_message_media_progress_cancel pull-right" ng-click="historyMessage.media.document.progress.cancel()">Cancel</a>
<div class="im_message_download_progress_wrap">

20
app/partials/mobile/message_attach_video.html

@ -8,24 +8,4 @@ @@ -8,24 +8,4 @@
thumb="historyMessage.media.video.thumb"
/>
</a>
<div class="im_message_document_info">
<div class="im_message_document_name_wrap">
<span class="im_message_document_name">Video</span>
<span class="im_message_document_size" ng-if="!historyMessage.media.video.progress.enabled" ng-bind="::historyMessage.media.video.size | formatSize"></span>
<span class="im_message_document_size" ng-if="historyMessage.media.video.progress.enabled" ng-bind="historyMessage.media.video.progress | formatSizeProgress"></span>
</div>
<div class="im_message_document_actions" ng-if="!historyMessage.media.video.progress.enabled">
<a href="" ng-click="downloadVideo(historyMessage.media.video.id)">Download</a>
<a href="" ng-click="openVideo(historyMessage.media.video.id, historyMessage.id)">Play video</a>
</div>
<div class="clearfix cancelable_progress_wrap" ng-if="historyMessage.media.video.progress.enabled">
<a class="im_message_media_progress_cancel pull-right" ng-click="historyMessage.media.video.progress.cancel()">Cancel</a>
<div class="im_message_download_progress_wrap">
<div class="progress tg_down_progress">
<div class="progress-bar progress-bar-success" ng-style="{width: historyMessage.media.video.progress.percent + '%'}"></div>
</div>
</div>
</div>
</div>
</div>

47
app/partials/mobile/profile_edit_modal.html

@ -1,27 +1,46 @@ @@ -1,27 +1,46 @@
<div class="profile_edit_modal_wrap" my-modal-position>
<div class="profile_edit_modal_wrap">
<div class="tg_page_head tg_modal_head">
<div class="navbar navbar-static-top navbar-inverse">
<div class="container">
<div class="navbar-header">
<ul class="nav navbar-nav navbar-quick-nav">
<li class="navbar-quick-right">
<a ng-class="{disabled: profile.updating}" ng-click="updateProfile()" ng-bind="profile.updating ? 'Saving...' : 'Save'" ng-disabled="profile.updating"></a>
</li>
<li>
<a ng-click="$dismiss()" class="navbar-quick-media-back">
<i class="icon icon-back"></i>
<div class="navbar-quick-back-title">
<h4>
Edit Profile
</h4>
</div>
</a>
</li>
</ul>
</div>
<a class="modal-close-button" ng-click="$dismiss()"><i></i></a>
</div>
</div>
</div>
<div class="modal-body">
<form class="modal_simple_form" ng-submit="updateProfile()">
<h4>Edit Profile</h4>
<form class="modal_simple_form" ng-submit="updateProfile()" my-vertical-position="0.3">
<div class="form-group import_modal_field_wrap" ng-class="{'has-error': error.field == 'first_name'}">
<input class="form-control input-sm" my-focused type="text" placeholder="First name" ng-model="profile.first_name" name="first_name"/>
<div class="form-group" ng-class="{'has-error': error.field == 'first_name'}">
<input class="form-control input-lg" my-focused type="text" placeholder="First name" ng-model="profile.first_name" name="first_name"/>
</div>
<div class="form-group import_modal_field_wrap" ng-class="{'has-error': error.field == 'last_name'}">
<input class="form-control input-sm" type="text" placeholder="Last name" ng-model="profile.last_name"/>
<div class="form-group" ng-class="{'has-error': error.field == 'last_name'}">
<input class="form-control input-lg" type="text" placeholder="Last name" ng-model="profile.last_name"/>
</div>
</form>
</div>
<div class="modal-footer">
<a class="btn btn-link" ng-click="$dismiss()">Cancel</a>
<button class="btn btn-primary" ng-class="{disabled: profile.updating}" ng-click="updateProfile()" ng-bind="profile.updating ? 'Saving...' : 'Save'" ng-disabled="profile.updating"></button>
</div>
</div>

1
app/vendor/jquery.emojiarea/jquery.emojiarea.js vendored

@ -486,7 +486,6 @@ @@ -486,7 +486,6 @@
'</tr></table>').appendTo(this.$itemsTailWrap);
this.$itemsWrap = $('<div class="emoji-items-wrap nano mobile_scrollable_wrap"></div>').appendTo(this.$itemsTailWrap);
this.$items = $('<div class="emoji-items nano-content">').appendTo(this.$itemsWrap);
$('<div class="emoji-menu-tail">').appendTo(this.$menu);
/*! MODIFICATION END */
$body.append(this.$menu);

Loading…
Cancel
Save