From c0ff2530bb6ef4471f14746949a9e8702b2ce928 Mon Sep 17 00:00:00 2001 From: Igor Zhukov Date: Fri, 27 Jun 2014 18:14:54 +0400 Subject: [PATCH] Moved to newer Bootstrap, mobile improvements --- app/css/app.css | 224 +- app/css/app_mobile.css | 196 +- app/img/icons/MobileIcons_1x.png | Bin 0 -> 939 bytes app/img/icons/MobileIcons_2x.png | Bin 0 -> 1430 bytes app/index.html | 1 + app/js/app.js | 6 +- app/js/controllers.js | 20 +- app/js/directives.js | 43 +- app/js/lib/mtproto.js | 17 +- app/js/services.js | 2 +- app/partials/head.html | 11 + app/partials/im.html | 2 +- app/vendor/bootstrap/config.json | 71 +- app/vendor/bootstrap/css/bootstrap-theme.css | 167 +- .../bootstrap/css/bootstrap-theme.min.css | 7 +- app/vendor/bootstrap/css/bootstrap.css | 1951 +++++++---------- app/vendor/bootstrap/css/bootstrap.min.css | 7 +- .../fonts/glyphicons-halflings-regular.eot | Bin 20290 -> 0 bytes .../fonts/glyphicons-halflings-regular.svg | 229 -- .../fonts/glyphicons-halflings-regular.ttf | Bin 41236 -> 0 bytes .../fonts/glyphicons-halflings-regular.woff | Bin 23292 -> 0 bytes app/vendor/bootstrap/js/bootstrap.js | 625 ++++-- app/vendor/bootstrap/js/bootstrap.min.js | 8 +- app/vendor/fastclick/fastclick.js | 818 +++++++ app/webogram.appcache | 2 +- 25 files changed, 2533 insertions(+), 1874 deletions(-) create mode 100644 app/img/icons/MobileIcons_1x.png create mode 100644 app/img/icons/MobileIcons_2x.png delete mode 100755 app/vendor/bootstrap/fonts/glyphicons-halflings-regular.eot delete mode 100755 app/vendor/bootstrap/fonts/glyphicons-halflings-regular.svg delete mode 100755 app/vendor/bootstrap/fonts/glyphicons-halflings-regular.ttf delete mode 100755 app/vendor/bootstrap/fonts/glyphicons-halflings-regular.woff create mode 100644 app/vendor/fastclick/fastclick.js diff --git a/app/css/app.css b/app/css/app.css index 821ef27f..40b4567c 100644 --- a/app/css/app.css +++ b/app/css/app.css @@ -28,14 +28,7 @@ h1, h2, h3, h4, h5 { .non_osx h4 { font-size: 17px; } - a { - color: #3a6d99; -} -a:hover { - color: #3a6d99; -} -a:hover { cursor: pointer; } a.disabled { @@ -43,7 +36,6 @@ a.disabled { pointer-events: none; } .form-control { - color: #000; border: 1px solid #d9dbde; border-radius: 2px; -webkit-box-shadow: none; @@ -59,18 +51,6 @@ a.disabled { box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.075), 0 0 8px rgba(102, 175, 233, 0.6); } -.form-control:-moz-placeholder { - color: #9aa2ab; -} -.form-control::-moz-placeholder { - color: #9aa2ab; -} -.form-control:-ms-input-placeholder { - color: #9aa2ab; -} -.form-control::-webkit-input-placeholder { - color: #9aa2ab; -} input[type="number"]::-webkit-outer-spin-button, input[type="number"]::-webkit-inner-spin-button { -webkit-appearance: none; @@ -81,85 +61,10 @@ input[type="number"] { -moz-appearance:textfield; } - -.btn-success { - color: #ffffff; - background-color: #6AC065; - border-color: #6AC065; -} - -.btn-success:hover, -.btn-success:focus, -.btn-success:active, -.btn-success.active, -.open .dropdown-toggle.btn-success { - color: #ffffff; - background-color: #61b75b; - border-color: #61b75b; -} - -.btn-success:active, -.btn-success.active, -.open .dropdown-toggle.btn-success { - background: #5aaf54; - background-image: none; -} - - -.btn-danger { - color: #ffffff; - background-color: #c05f5a; - border-color: #c05f5a; -} -.btn-danger:hover, -.btn-danger:focus, -.btn-danger:active, -.btn-danger.active, -.open .dropdown-toggle.btn-danger { - color: #ffffff; - background-color: #ab5450; - border-color: #ab5450; -} -.btn-danger:active, -.btn-danger.active, -.open .dropdown-toggle.btn-danger { - background: #a24f4b; - background-image: none; -} - - -.btn-primary { - color: #ffffff; - background-color: #5d8db3; - border-color: #5d8db3; - border-radius: 3px; -} -.btn-primary:hover, -.btn-primary:focus, -.btn-primary:active, -.btn-primary.active, -.open .dropdown-toggle.btn-primary { - color: #ffffff; - background-color: #4a80a9; - border-color: #4a80a9; -} -.btn-primary:active, -.btn-primary.active, -.open .dropdown-toggle.btn-primary { - background: #41769e; - background-image: none; -} -.btn-primary[disabled], -.btn-primary.disabled { - background: #7999b3; - border-color: #7999b3; -} .btn-primary:focus { outline: none; } - - .btn-link { color: #3a6d99; text-decoration: none !important; @@ -173,9 +78,6 @@ input[type="number"] { background: none; } -.tg_page_head .navbar { - min-height: 44px; -} .tg_page_head .navbar-quick-nav, .tg_page_head .navbar-toggle { display: none; @@ -183,9 +85,13 @@ input[type="number"] { .tg_page_head .container { display: block; width: auto; + padding-left: 0; + padding-right: 0; +} +.tg_page_head .container .navbar-header { + margin: 0; } .tg_page_head .navbar-inverse { - background: #497495; border: 0; -webkit-box-shadow: 0px 1px 1px rgba(0, 0, 0, 0.11); @@ -207,25 +113,9 @@ input[type="number"] { line-height: 0; height: auto; } -.navbar_offline .navbar-header, -.navbar_offline .navbar-offline > li { - float: left; -} -.navbar-offline { - max-width: 250px; - margin: 0 auto; - float: none; -} -.navbar-offline-text { - padding: 12px 15px; - /*color: #FFF;*/ - color: #b9cfe3; - font-size: 13px; - display: block; - line-height: 20px; +.tg_page_head .navbar > .container .navbar-brand:hover { + opacity: 1; } - - .tg_head_logo { background: url(../img/Tlogo_2x.png) 0 0 no-repeat; background-size: 26px 26px; @@ -252,9 +142,34 @@ input[type="number"] { } -.tg_page_head .navbar > .container .navbar-brand:hover { - opacity: 1; + +.navbar_offline .navbar-header, +.navbar_offline .navbar-offline > li { + float: left; } +.navbar-offline { + max-width: 250px; + margin: 0 auto; + float: none; +} +.navbar-offline-text { + padding: 12px 15px; + color: #b9cfe3; + font-size: 13px; + display: block; + line-height: 20px; +} + +.navbar-peer-wrap { + display: none; +} +.navbar-toggle-wrap { + display: none; +} +.tg_page_head .navbar-menu .navbar-nav.navbar-right { + margin-right: 0; +} + .tg_page_head .navbar-inverse .navbar-nav > li > a { padding-top: 12px; @@ -884,6 +799,8 @@ a.tg_radio_on:hover i.icon-radio { .im_dialogs_col { margin-right: -7px; } + + .im_dialogs_col .nano > .pane { background : rgba(0,0,0,0.0); width : 12px; @@ -1024,10 +941,13 @@ a.tg_radio_on:hover i.icon-radio { border-radius: 2px; background: #f2f6fa; } +.im_dialogs_scrollable_wrap .im_dialog_wrap:active a.im_dialog, .im_dialogs_scrollable_wrap .active a.im_dialog { border-radius: 2px; background-color: #6490b1; } +.im_dialogs_scrollable_wrap .im_dialog_wrap:active a.im_dialog:hover, +.im_dialogs_scrollable_wrap .im_dialog_wrap:active a.im_dialog_selected, .im_dialogs_scrollable_wrap .active a.im_dialog:hover, .im_dialogs_scrollable_wrap .active a.im_dialog_selected { background-color: #6490b1; @@ -1054,6 +974,11 @@ a.im_dialog:hover .im_dialog_message_text, a.im_dialog_selected .im_dialog_message_text { color: #698192; } + +.im_dialog_wrap:active a.im_dialog .im_dialog_chat_from_wrap, +.im_dialog_wrap:active a.im_dialog .im_dialog_message_media, +.im_dialog_wrap:active a.im_dialog .im_dialog_message_service, +.im_dialog_wrap:active a.im_dialog .im_dialog_message_text, .active a.im_dialog .im_dialog_chat_from_wrap, .active a.im_dialog .im_dialog_message_media, .active a.im_dialog .im_dialog_message_service, @@ -1074,6 +999,7 @@ a.im_dialog_selected .im_dialog_message_text { margin-top: 2px; margin-bottom: 2px; } +.im_dialog_wrap:active .im_dialog_peer, .active .im_dialog_peer { color: #FFF; } @@ -1085,6 +1011,7 @@ a.im_dialog_selected .im_dialog_message_text { padding: 3px 4px; margin-top: 4px; } +.im_dialog_wrap:active .im_dialog_badge, .active .im_dialog_badge { color: #428bca; background-color: #fff; @@ -1108,6 +1035,7 @@ a.im_dialog:hover .im_dialog_unread, a.im_dialog_selected .im_dialog_unread { background: #a3c0d4; } +.im_dialog_wrap:active .im_dialog_unread, .active .im_dialog_unread { background-color: #a4c4dd; } @@ -1121,6 +1049,9 @@ a.im_dialog:hover .im_dialog_date, a.im_dialog_selected .im_dialog_date { color: #91a6ba; } +.im_dialog_wrap:active .im_dialog_date, +.im_dialog_wrap:active a.im_dialog:hover .im_dialog_date, +.im_dialog_wrap:active a.im_dialog_selected .im_dialog_date, .active .im_dialog_date, .active a.im_dialog:hover .im_dialog_date, .active a.im_dialog_selected .im_dialog_date { @@ -1333,51 +1264,6 @@ a.im_dialog_selected .im_dialog_date { padding: 0 77px 0 77px; } -/*.im_history_typing { - -webkit-transition:all swing .2s; - -moz-transition:all swing .2s; - -ms-transition:all swing .2s; - -o-transition:all swing .2s; - transition:all swing .2s; -} -.im_history_typing.ng-enter { - opacity: 0; -} -.im_history_typing.ng-enter.ng-enter-active { - opacity: 1; -} -.im_history_typing.ng-leave { - opacity: 1; -} -.im_history_typing.ng-leave.ng-leave-active { - opacity: 0; -} - - -.im_history_message_wrap { - -webkit-transition:all swing .2s; - -moz-transition:all swing .2s; - -ms-transition:all swing .2s; - -o-transition:all swing .2s; - transition:all swing .2s; -} -.im_history_message_wrap.ng-enter { - position: relative; - bottom: -100px; - overflow: hidden; - opacity: 0; -} -.im_history_message_wrap.ng-enter.ng-enter-active { - bottom: 0; - opacity: 1; -} -.im_history_message_wrap.ng-leave { - opacity: 1; -} -.im_history_message_wrap.ng-leave.ng-leave-active { - opacity: 0; -}*/ - .im_message_unread_split { background: #f4f4f4; color: #777; @@ -3102,7 +2988,12 @@ a.contacts_modal_contact:hover .contacts_modal_contact_status { max-width: 526px; padding: 0 15px; margin: 0 auto; - position: relative; + position: static; +} +@media (min-width: 901px) { + .im_message_wrap { + position: relative; + } } .im_content_message_select_area { display: none; @@ -3117,6 +3008,9 @@ a.contacts_modal_contact:hover .contacts_modal_contact_status { .im_content_message_select_area { display: block; } + .im_message_wrap { + position: relative; + } } .icon-select-tick { diff --git a/app/css/app_mobile.css b/app/css/app_mobile.css index 1a511cef..e1a799fe 100644 --- a/app/css/app_mobile.css +++ b/app/css/app_mobile.css @@ -21,15 +21,62 @@ html { float: none; display: block; margin: 0; + padding: 6px 10px; +} +.navbar_peer_not_selected .navbar-toggle-wrap .navbar-toggle { + padding: 9px 10px; +} +.navbar-toggle-wrap .navbar-toggle .icon-bar { + width: 4px; + height: 4px; + border-radius: 0; + margin-left: 6px; + margin-right: 6px; +} +.navbar_peer_not_selected .navbar-toggle-wrap .navbar-toggle .icon-bar { + width: 22px; + height: 2px; + border-radius: 1px; + margin-left: 0; + margin-right: 0; } .navbar-toggle .dropdown-toggle { display: block; } .navbar-toggle-wrap .dropdown-menu { margin-top: 4px; - right: 0; + right: -49px; left: auto; } +.navbar_peer_not_selected .navbar-toggle-wrap .dropdown-menu { + right: 0; +} + +.navbar-search-wrap { + display: none; + float: right; + margin: 5px 0 5px 5px; + padding: 5px 5px 1px; + border: 1px solid transparent; + border-radius: 4px; +} +.navbar-search-wrap:link, +.navbar-search-wrap:active { + background-color: rgba(255,255,255,0.1); +} +.icon-search { + display: inline-block; + width: 21px; + height: 21px; + background: url(../img/icons/MobileIcons_2x.png) 0 0 no-repeat; + background-size: 21px 52px; +} +.is_1x .icon-search { + background-image: url(../img/icons/MobileIcons_1x.png); +} +.tg_page_head .navbar_peer_not_selected .navbar-search-wrap { + display: block; +} .tg_page_head .navbar-quick-nav { display: block; @@ -55,7 +102,7 @@ html { .is_1x .icon-back { background-image: url(../img/icons/IconsetW_1x.png); } -.tg_page_head .navbar-quick-nav a:hover .icon-back { +.tg_page_head .navbar-quick-nav a:active .icon-back { opacity: 1; } @@ -75,6 +122,8 @@ html { } .tg_page_head .navbar-inverse .navbar-quick-nav > li > a:hover { color: #b9cfe3; +} +.tg_page_head .navbar-inverse .navbar-quick-nav > li > a:active { background-color: rgba(255,255,255,0.1); } .navbar-quick-nav .icon-back { @@ -120,6 +169,20 @@ html { display: none; } +.navbar-peer-wrap { + display: block; + float: right; + width: 44px; + height: 44px; +} +.navbar-peer-wrap img { + width: 44px; + height: 44px; +} +.navbar_peer_not_selected .navbar-peer-wrap { + display: none; +} + .login_form_wrap { border-radius: 0; @@ -145,14 +208,18 @@ html { display: none; } .im_history_panel_wrap { + display: none; margin: 0 15px; } .im_send_panel_wrap { - padding: 10px 10px; + padding: 10px 5px; } .icon-select-tick { margin: 10px 0 0 -24px } +.im_history { + position: static; +} .im_message_wrap { padding: 0 10px; } @@ -187,15 +254,6 @@ html { margin: 0 5px; padding-bottom: 18px; } - -.im_dialog_peer { - white-space: normal; - height: 2.84em; -} -.im_dialog_message { - display: none; -} - .im_history_col .nano > .pane { top: 3px; right: 3px; @@ -209,16 +267,28 @@ html { margin: 0; } + + +.im_dialogs_col_wrap { + border: 0; + padding-bottom: 0; +} +.im_dialogs_col_wrap, +.im_history_col_wrap { + float: none; + width: auto; + max-width: auto; + min-width: auto; +} + .im_dialogs_col_wrap, .im_page_peer_not_selected .im_history_col_wrap { display: none; } .im_page_peer_not_selected .im_dialogs_col_wrap { display: block; - border-right: 0; } - -.im_page_peer_not_selected .im_dialogs_col { +.im_dialogs_col { margin-right: 0; } .im_page_peer_not_selected .im_dialogs_col_wrap .pane { @@ -230,10 +300,15 @@ html { border-radius: 3px; margin: 0; } + .im_dialogs_panel { + display: none; padding-left: 9px; padding-right: 9px; } +.im_dialogs_panel_search.im_dialogs_panel { + display: block; +} .im_dialogs_panel_dropdown { display: none; } @@ -244,33 +319,51 @@ html { .im_dialogs_scrollable_wrap { padding: 0; } -.peer_select_modal_wrap .modal-body { - padding-left: 0; - padding-right: 0; -} -.im_dialogs_col_wrap, -.im_history_col_wrap { - float: none; - width: auto; - max-width: auto; - min-width: auto; +.im_dialogs_scrollable_wrap a.im_dialog { + border-bottom: 1px solid #e3e3e3; + border-top: 1px solid #e3e3e3; + margin-top: -1px; + border-radius: 0 !important; +} +.im_dialog_wrap:last-child a.im_dialog { + border-bottom: 0; +} +.im_dialog_photo { + width: 45px; + height: 45px; + margin-right: 12px; } -.im_dialogs_modal_col_wrap .im_dialog_peer, -.im_page_peer_not_selected .im_dialog_peer { - white-space: nowrap; - height: auto; +.im_dialog_peer, +.im_dialog_message { + font-size: 1.1em; } -.im_dialogs_modal_col_wrap .im_dialog_message, -.im_page_peer_not_selected .im_dialog_message { - display: block; +.im_dialog_peer { + margin-bottom: 5px; } -.im_history_panel_wrap { - display: none; +.im_dialogs_scrollable_wrap a.im_dialog:hover, +.im_dialogs_scrollable_wrap a.im_dialog_selected { + border-top-color: #D6DADE; + border-bottom-color: #D6DADE; +} +.im_dialogs_scrollable_wrap .im_dialog_wrap:active a.im_dialog, +.im_dialogs_scrollable_wrap .active a.im_dialog { + border-top-color: #6490b1; + border-bottom-color: #6490b1; +} +.im_dialogs_scrollable_wrap .active + li a.im_dialog, +.im_dialogs_scrollable_wrap li:hover + li a.im_dialog { + margin-top: 0; + border-top: 0; } +.peer_select_modal_wrap .modal-body { + padding-left: 0; + padding-right: 0; +} + .modal.page_modal { background: #FFF; } @@ -321,26 +414,39 @@ html { position: relative; } .im_send_field_wrap { - margin-right: 45px; + margin-right: 50px; + margin-left: 42px; } .im_media_attach, .im_attach { display: none; } .im_submit { - padding: 6px 0; + background: none; + border: 0; + color: #1877c3; + font-weight: bold; + font-size: 14px; + padding: 6px 6px; position: absolute; right: 0; top: 0; - width: 40px; + width: 45px; min-width: 0; line-height: 18px; } +.im_submit:hover { + color: #1877c3; + background: none; +} +.im_submit:active { + box-shadow: none; +} .im_emoji_btn { position: absolute; + left: 7px; top: -1px; - right: 50px; } .emoji-wysiwyg-editor { @@ -350,7 +456,7 @@ html { } .emoji-menu { - margin-left: -158px; + margin-left: -19px; margin-top: -257px; } @@ -377,24 +483,22 @@ html { .navbar_peer_not_selected .im_head_attach { display: none; } -.im_head_attach:hover, .im_head_attach:active { background-color: rgba(255,255,255,0.1); } .im_head_attach .icon-paperclip { display: inline-block; - width: 19px; - height: 23px; + width: 21px; + height: 22px; vertical-align: text-top; - background: url(../img/icons/IconsetW.png) -12px -672px no-repeat; - background-size: 42px 710px; opacity: 0.8; + background: url(../img/icons/MobileIcons_2x.png) 0 -30px no-repeat; + background-size: 21px 52px; } .is_1x .im_head_attach .icon-paperclip { - background-image: url(../img/icons/IconsetW_1x.png); + background-image: url(../img/icons/MobileIcons_1x.png); } -.im_head_attach:hover .icon-paperclip, .im_head_attach:active .icon-paperclip { opacity: 1; } diff --git a/app/img/icons/MobileIcons_1x.png b/app/img/icons/MobileIcons_1x.png new file mode 100644 index 0000000000000000000000000000000000000000..f36955586dbc0cdd2c009fe36835e7fc008d7a87 GIT binary patch literal 939 zcmV;c162HpP)}Ywf-Egi@)LVJZ2b z0u+Nh&;wdQJxG8y!>fp>Vms(g{V9*Z8E_7?()JN-u=M#0eY1}pZ-BXApsGs;G4OzG zw)qiV#>S^WhD(PW(8RVeH_<^H-YYQFYiM8$r=b}Pa1xF2$yO+rXcvEToJ5nnjs_4l+a{ev@AJAifM|@r_ne%6Fn9?%K-9-a zng~9FyCCf5r>prjFL}7t2yhF00}K5`)By_L0gFJUsuN!>1JBszDaiICD(nEi*s+ao zeg(Xt?JM}s>&sx6A5mc%*bg32;0uMXf`}hclQ8FZh)p<_xd|HqLeuao z+#6A=@HH^9FGLN?99Q?1s1OII&EN^y>`}cg{i6M%|E*}yaGV5=f-c6othE=x{C{2g zmVzY3Zi6G-6@JiG6;yNqcYzM>U%IXU+@$bwzoN4^%ua4Kc5P%GeGQ&~DPDpi($4j= zh_-QHHuDADb|c?*mz&^Nrk6b&zS#DFpX~e)SkC`}L}lUKNgp&%D3$8t`Qo<#0|5Fi5)K4n)7$_6 N002ovPDHLkV1gPww=@6% literal 0 HcmV?d00001 diff --git a/app/img/icons/MobileIcons_2x.png b/app/img/icons/MobileIcons_2x.png new file mode 100644 index 0000000000000000000000000000000000000000..efb199477b70ca9bd521ec51b3c86c3b951249d7 GIT binary patch literal 1430 zcmV;H1!?+;P)pT zhg_1ylPC!-UKJ+^5oIN=i-N2qbcjSE%A_9F#AjLEUGHmJp$q;@ch8&GzkZ)p)w60i z97YDV19Sj12igRh20a5k1>FVx3i=LoKk{t~v_fk@CqWN~a{C2zSWvfERRs=#ejnP~ zEzm9>psNbHeiC#Jbe#E4b?*6FdR$&o*C8-ESWCv!8J}w)w%{$T{u{QS`q+E{+Ta;f=^$xUqaK^U zRcgPsVqFD2j{MtY+-@W0o|QHN-KkysDGFoH5LWjaj6r9~&J)URYsXtnLDd$xM!WWB zKu~>1t+Q#-aoMEp4<~T!JlC#m2naf@9Y3{c(RL{Ovat(&OW$@7VI$_AVt;gsI1b->-j!51vq&5sYp0|~wz%CMK|d#TA9DfSNF0+D z&?XO%d(nRw*&?>EljHm;dGbYJ_)!L#6Zdi6S159x!2SU`VByw%Nm^3bS3YAV)h$<; z;4Blgh64N;bf+MEUcvChYq;D4onXFO23^C?WzE6Z2%0Cm4`)w6`;46*K?t$pkbqFh zizhx>R#Hd>eW!7(N==2>$8jjk7Nmm|Y~tGWMYbQe*m-mf=P(m8K*vT!2bY-bQTe+W z4i7pEJ|tVXb&|}NHoLU!IQ>zTirjj2eZml@a}IoP^D zN3bmhc0C7MC#Vr@-JoT#D){^BT>|A`m+}059Sgp6Q@D} z=N#+w3hD|uQj65l^$of}Zm{4`SC4B|ACP@!OvaAAlhakeb-`CN^N4o-GtT6kEcohL z7eC{QI&)kdM%Hqj^^%t47JPNyG5B|6=F;^kbMv_3L8$eFlPb3brTj5mOrz3o$(Td)FbDRn8*Vc}g zq_aL@W^QWH+T7-lN!L*ykX)IzaEx~gd|0EMNflTk6?ZHiMC5d6Wmtc~#mR7i zdy+s(THEXJ;VPCuN?p2G0Lj(Yt%{lUF#ER)q_>Br7e1(PGHQV=>iV<*vR~2KrVo^v zL0)Vy;$g*`*A4k5Nj57Dn3bb1hDcU+2sY{|`LXZrovZEwLm|(auRZ?aw zsqw-8*^4Opi~z(TAeF5a1a(EQ+ezTYL0X-DIAG&e{g28S#I?J_rx zg^*c@7Z_##%~RuVn|A&HlMo9fFABJ{qZca!Eqc3AWWgY-mZv3zy(XyVY)D9xL~aWw kRZh0ozU|&^s{aHS0A8R5&Rm=-0000007*qoM6N<$f^dw8$^ZZW literal 0 HcmV?d00001 diff --git a/app/index.html b/app/index.html index 50a55564..d917e317 100644 --- a/app/index.html +++ b/app/index.html @@ -42,6 +42,7 @@ + diff --git a/app/js/app.js b/app/js/app.js index 9f4e1448..eb09aec9 100644 --- a/app/js/app.js +++ b/app/js/app.js @@ -71,4 +71,8 @@ config(['$locationProvider', '$routeProvider', '$compileProvider', 'StorageProvi classes.push('ios_standalone'); } $(document.body).addClass(classes.join(' ')); -})(); \ No newline at end of file +})(); + +$(function() { + FastClick.attach(document.body); +}); \ No newline at end of file diff --git a/app/js/controllers.js b/app/js/controllers.js index 533093ee..089e9069 100644 --- a/app/js/controllers.js +++ b/app/js/controllers.js @@ -313,6 +313,10 @@ angular.module('myApp.controllers', []) $scope.$broadcast('history_media_toggle', mediaType); }; + $scope.toggleSearch = function () { + $scope.$broadcast('dialogs_search_toggle'); + }; + updateCurDialog(); var lastSearch = false; @@ -406,9 +410,6 @@ angular.module('myApp.controllers', []) var prevMessages = false; $scope.$watchCollection('search', function () { - if ($scope.search.messages && (!angular.isString($scope.search.query) || !$scope.search.query.length)) { - $scope.search.messages = false; - } if ($scope.search.messages != prevMessages) { prevMessages = $scope.search.messages; $scope.dialogs = []; @@ -431,6 +432,12 @@ angular.module('myApp.controllers', []) } }); + if (Config.Navigator.mobile) { + $scope.$watch('curDialog.peer', function () { + $scope.$broadcast('ui_dialogs_update') + }); + } + $scope.importPhonebook = function () { PhonebookContactsService.openPhonebookImport().result.then(function (foundContacts) { if (contactsShown && foundContacts.length) { @@ -439,6 +446,13 @@ angular.module('myApp.controllers', []) }) }; + $scope.searchClear = function () { + $scope.search.query = ''; + $scope.search.messages = false; + $scope.$broadcast('search_clear'); + } + $scope.$on('ui_dialogs_search_clear', $scope.searchClear); + var searchTimeoutPromise; function getDialogs(force) { var searchMessages = $scope.search.messages && $scope.search.query.length > 0, diff --git a/app/js/directives.js b/app/js/directives.js index 76d6d9dc..89365822 100644 --- a/app/js/directives.js +++ b/app/js/directives.js @@ -38,7 +38,7 @@ angular.module('myApp.directives', ['myApp.filters']) }; }) - .directive('myDialogs', function ($modalStack, $transition) { + .directive('myDialogs', function ($modalStack, $transition, $window, $timeout) { return { link: link @@ -49,6 +49,7 @@ angular.module('myApp.directives', ['myApp.filters']) var dialogsWrap = $('.im_dialogs_wrap', element)[0], scrollableWrap = $('.im_dialogs_scrollable_wrap', element)[0], searchField = $('.im_dialogs_search_field', element)[0], + panelWrap = $('.im_dialogs_panel', element)[0], tabsWrap = $('.im_dialogs_tabs_wrap', element)[0], searchFocused = false; @@ -58,9 +59,26 @@ angular.module('myApp.directives', ['myApp.filters']) if (!searchFocused) { $(scrollableWrap).find('.im_dialog_selected').removeClass('im_dialog_selected'); + if (!searchField.value) { + $scope.$emit('ui_dialogs_search_clear'); + } } }); + $scope.$on('dialogs_search_toggle', function () { + $(panelWrap).addClass('im_dialogs_panel_search'); + $scope.$broadcast('ui_dialogs_search'); + $($window).scrollTop(0); + $timeout(function () { + searchField.focus(); + }) + }); + + $scope.$on('search_clear', function () { + $(panelWrap).removeClass('im_dialogs_panel_search'); + $scope.$broadcast('ui_dialogs_search'); + }) + attrs.$observe('hasTabs', function (newValue) { newValue = newValue == 'true'; $(tabsWrap).toggle(newValue); @@ -73,7 +91,6 @@ angular.module('myApp.directives', ['myApp.filters']) $(document).off('keydown', onKeyDown); }); - function onKeyDown(e) { if (!searchFocused && $modalStack.getTop()) { return true; @@ -186,8 +203,10 @@ angular.module('myApp.directives', ['myApp.filters']) function link ($scope, element, attrs) { var dialogsWrap = $('.im_dialogs_wrap', element)[0], + dialogsColWrap = $('.im_dialogs_col_wrap')[0], scrollableWrap = $('.im_dialogs_scrollable_wrap', element)[0], headWrap = $('.tg_page_head')[0], + panelWrap = $('.im_dialogs_panel')[0], footer = $('.im_page_footer')[0], hasTabs = false, moreNotified = false; @@ -207,7 +226,9 @@ angular.module('myApp.directives', ['myApp.filters']) $scope.$on('ui_dialogs_tabs', function (e, newHasTabs) { hasTabs = newHasTabs; updateSizes(); - }) + }); + $scope.$on('ui_dialogs_search', updateSizes); + $scope.$on('ui_dialogs_update', updateSizes); $scope.$on('ui_dialogs_append', function () { @@ -258,8 +279,18 @@ angular.module('myApp.directives', ['myApp.filters']) if (!footer || !footer.offsetHeight) { footer = $('.im_page_footer')[0]; } + if (!panelWrap || !panelWrap.offsetHeight) { + panelWrap = $('.im_dialogs_panel')[0]; + } + if (!dialogsColWrap || !dialogsColWrap.offsetHeight) { + dialogsColWrap = $('.im_dialogs_col_wrap')[0]; + } $(element).css({ - height: $($window).height() - footer.offsetHeight - (headWrap ? headWrap.offsetHeight : 44) - (hasTabs ? 38 : 0) - 68 + height: $($window).height() - + footer.offsetHeight - + (headWrap ? headWrap.offsetHeight : 44) - + (panelWrap ? panelWrap.offsetHeight : 58) - + parseInt($(dialogsColWrap).css('paddingBottom') || 0) }); updateScroller(); @@ -361,8 +392,8 @@ angular.module('myApp.directives', ['myApp.filters']) onContentLoaded(function () { scrollableWrap.scrollTop = scrollableWrap.scrollHeight; - $(historyWrap).nanoScroller({preventPageScrolling: true, tabIndex: -1, iOSNativeScrolling: true}); }); + $(historyWrap).nanoScroller({preventPageScrolling: true, tabIndex: -1, iOSNativeScrolling: true}); var updateScroller = function (delay) { // console.trace('scroller update', delay); @@ -699,7 +730,7 @@ angular.module('myApp.directives', ['myApp.filters']) }); - $(submitBtn).on('mousedown', function (e) { + $(submitBtn).on('mousedown touchstart', function (e) { $(element).trigger('submit'); $(element).trigger('message_send'); resetAfterSubmit(); diff --git a/app/js/lib/mtproto.js b/app/js/lib/mtproto.js index 99f9d62a..a68074c5 100644 --- a/app/js/lib/mtproto.js +++ b/app/js/lib/mtproto.js @@ -1000,12 +1000,14 @@ angular.module('izhukov.mtproto', ['izhukov.utils']) } if (this.pendingResends.length) { - var resendMsgIDs = []; + var resendMsgIDs = [], + resendOpts = {noShedule: true, notContentRelated: true}; for (var i = 0; i < this.pendingResends.length; i++) { resendMsgIDs.push(this.pendingResends[i]); } // console.log('resendReq messages', resendMsgIDs); - this.wrapMtpMessage({_: 'msg_resend_req', msg_ids: resendMsgIDs}, {noShedule: true}); + this.wrapMtpMessage({_: 'msg_resend_req', msg_ids: resendMsgIDs}, resendOpts); + this.lastResendReq = {req_msg_id: resendOpts.messageID, resend_msg_ids: resendMsgIDs}; } var messages = [], @@ -1471,6 +1473,17 @@ angular.module('izhukov.mtproto', ['izhukov.utils']) break; case 'msgs_state_info': + this.ackMessage(message.answer_msg_id); + if (this.lastResendReq && this.lastResendReq.req_msg_id == message.req_msg_id && this.pendingResends.length) { + var i, badMsgID, pos; + for (i = 0; i < this.lastResendReq.resend_msg_ids.length; i++) { + badMsgID = this.lastResendReq.resend_msg_ids[i]; + pos = this.pendingResends.indexOf(badMsgID); + if (pos != -1) { + this.pendingResends.splice(pos, 1); + } + } + } break; case 'rpc_result': diff --git a/app/js/services.js b/app/js/services.js index 68c1e54b..3d47c6ba 100644 --- a/app/js/services.js +++ b/app/js/services.js @@ -2889,7 +2889,7 @@ angular.module('myApp.services', []) } return false; } else { - console.log(dT(), 'Seq apply', seqStart); + // console.log(dT(), 'Seq apply', seqStart); } curState.seq = seq; diff --git a/app/partials/head.html b/app/partials/head.html index 037e6f44..952970f1 100644 --- a/app/partials/head.html +++ b/app/partials/head.html @@ -2,6 +2,13 @@