diff --git a/data/web/corefork.telegram.org/api/gifs.html b/data/web/corefork.telegram.org/api/gifs.html index a8c5417d3a..7f90d1b421 100644 --- a/data/web/corefork.telegram.org/api/gifs.html +++ b/data/web/corefork.telegram.org/api/gifs.html @@ -39,7 +39,7 @@
- +

Working with GIFs

diff --git a/data/web/fragment.com/js/auction.js b/data/web/fragment.com/js/auction.js index ff18605a58..dd5664eda0 100644 --- a/data/web/fragment.com/js/auction.js +++ b/data/web/fragment.com/js/auction.js @@ -33,9 +33,12 @@ var Main = { state.$mainSearchForm.field('query').on('input', Main.eMainSearchInput); state.mainSearchCache = {}; $('.js-form-clear', state.$mainSearchForm).on('click', Main.eMainSearchClear); + $('.js-x-scrollable').on('scroll', Main.eXScrollableUpdate); + $(window).on('resize', Main.eXScrollablesUpdate); Main.updateTime(); Main.initViewport(); Main.initLogo(); + Main.eXScrollablesUpdate(); }); Aj.onUnload(function(state) { clearTimeout(Aj.state.searchTimeout); @@ -46,6 +49,8 @@ var Main = { state.$mainSearchForm.off('submit', Main.eMainSearchSubmit); state.$mainSearchForm.field('query').off('input', Main.eMainSearchInput); $('.js-form-clear', state.$mainSearchForm).off('click', Main.eMainSearchClear); + $('.js-x-scrollable').off('scroll', Main.eXScrollableUpdate); + $(window).off('resize', Main.eXScrollablesUpdate); }); }, initForm: function(form) { @@ -237,6 +242,15 @@ var Main = { e.preventDefault(); closePopup(Aj.state.$headerMenu); }, + eXScrollableUpdate: function() { + $(this).toggleClass('leftscroll', this.scrollLeft > 0); + $(this).toggleClass('rightscroll', this.scrollLeft < this.scrollWidth - this.clientWidth); + }, + eXScrollablesUpdate: function() { + $('.js-x-scrollable').each(function() { + Main.eXScrollableUpdate.apply(this); + }); + }, openSimplePopup: function($popup) { var onEnterPress = function(e) { if (e.keyCode == Keys.RETURN) { @@ -1909,7 +1923,7 @@ var Premium = { var $field = Aj.state.$premiumSearchField; var $btn = Aj.state.$giftPremiumBtn; $form.field('recipient').value(''); - $form.field('query').value('').prop('disabled', false); + $form.field('query').value('').prop('disabled', false).focus(); $form.removeClass('myself'); $btn.prop('disabled', true); $field.removeClass('found'); @@ -2196,7 +2210,7 @@ var PremiumGiveaway = { var $field = Aj.state.$premiumSearchField; var $btn = Aj.state.$giveawayPremiumBtn; $form.field('recipient').value(''); - $form.field('query').value('').prop('disabled', false); + $form.field('query').value('').prop('disabled', false).focus(); $btn.prop('disabled', true); $field.removeClass('found'); $('.js-search-field-error').html(''); @@ -2647,6 +2661,351 @@ var Ads = { }; var Stars = { + init: function() { + Aj.onLoad(function(state) { + var cont = Aj.ajContainer; + $(cont).on('click.curPage', '.js-myself-link', Stars.eBuyForMyself); + $(cont).on('click.curPage', '.js-more-stars-btn', Stars.eBuyMoreStats); + $(cont).on('click.curPage', '.js-stars-buy-btn', Stars.eBuyStars); + $(cont).on('click.curPage', '.js-more-options', Stars.eShowMoreOptions); + state.$starsBuyPopup = $('.js-buy-stars-popup'); + $(cont).on('submit.curPage', '.js-buy-stars-form', Stars.eBuyStarsSubmit); + state.$starsBuyForm = $('.js-buy-stars-form'); + state.$starsSearchField = $('.js-stars-search-field'); + state.$starsSearchForm = $('.js-stars-form'); + state.$starsSearchForm.on('submit', Stars.eSearchSubmit); + state.$starsSearchForm.field('query').on('input', Stars.eSearchInput); + state.$starsSearchForm.field('query').on('change', Stars.eSearchChange); + $('.js-form-clear', state.$starsSearchForm).on('click', Stars.eSearchClear); + state.$starsQuantityField = $('.js-stars-quantity-field'); + $(cont).on('click.curPage', '.js-quantity-clear', Stars.eQuantityClear); + state.$starsSearchForm.field('quantity').on('change', Stars.eQuantityChanged); + state.$starsSearchForm.on('change', '.js-stars-options input.radio', Stars.eRadioChanged); + state.$starsBuyForm.on('change', 'input.checkbox', Stars.eCheckboxChanged); + state.$starsBuyBtn = $('.js-stars-buy-btn'); + state.curQuantity = state.$starsSearchForm.field('quantity').value(); + state.curStars = state.$starsSearchForm.field('stars').value(); + state.updLastReq = +Date.now(); + if (state.needUpdate) { + state.updStateTo = setTimeout(Stars.updateState, Main.UPDATE_PERIOD); + } + $(cont).on('click.curPage', '.js-preview-sticker', function() { + RLottie.playUntilEnd(this); + }); + $('.js-preview-sticker').each(function() { + RLottie.init(this, {playUntilEnd: true}); + }); + RLottie.init(); + }); + Aj.onUnload(function(state) { + clearTimeout(state.updStateTo); + state.needUpdate = false; + Main.destroyForm(state.$starsSearchForm); + state.$starsSearchForm.off('submit', Stars.eSearchSubmit); + state.$starsSearchForm.field('query').off('input', Stars.eSearchInput); + state.$starsSearchForm.field('query').off('change', Stars.eSearchChange); + $('.js-form-clear', state.$starsSearchForm).off('click', Stars.eSearchClear); + state.$starsSearchForm.field('quantity').off('change', Stars.eQuantityChanged); + state.$starsSearchForm.off('change', '.js-stars-options input.radio', Stars.eRadioChanged); + state.$starsBuyForm.off('change', 'input.checkbox', Stars.eCheckboxChanged); + $('.js-preview-sticker').each(function() { + RLottie.destroy(this); + }); + }); + }, + updateState: function(force) { + var now = +Date.now(); + if (document.hasFocus() || force || + Aj.state.updLastReq && (now - Aj.state.updLastReq) > Main.FORCE_UPDATE_PERIOD) { + Aj.state.updLastReq = now; + Aj.apiRequest('updateStarsBuyState', { + mode: Aj.state.mode, + lv: Aj.state.lastVer, + dh: Aj.state.lastDh + }, function(result) { + if (result.mode) { + Aj.state.mode = result.mode; + } + if (result.html) { + Stars.updateContent(result.html); + } else { + if (result.history_html) { + Stars.updateHistory(result.history_html); + } + if (result.options_html) { + Stars.updateOptions(result.options_html); + } + } + if (result.lv) { + Aj.state.lastVer = result.lv; + if (Aj.state.$sentPopup) { + closePopup(Aj.state.$sentPopup); + } + } + if (result.dh) { + Aj.state.lastDh = result.dh; + } + if (Aj.state.needUpdate && result.need_update) { + Aj.state.updStateTo = setTimeout(Stars.updateState, Main.UPDATE_PERIOD); + } + }); + } else { + if (Aj.state.needUpdate) { + Aj.state.updStateTo = setTimeout(Stars.updateState, Main.CHECK_PERIOD); + } + } + }, + eSearchInput: function(e) { + var $field = Aj.state.$starsSearchForm; + $('.js-search-field-error').html(''); + $field.removeClass('error'); + }, + eSearchChange: function(e) { + Stars.searchSubmit(); + }, + eSearchClear: function(e) { + var $form = Aj.state.$starsSearchForm; + var $field = Aj.state.$starsSearchField; + var $btn = Aj.state.$starsBuyBtn; + $form.field('recipient').value(''); + $form.field('query').value('').prop('disabled', false).focus(); + $form.removeClass('myself'); + $btn.prop('disabled', true); + $field.removeClass('found'); + $('.js-search-field-error').html(''); + $field.removeClass('error'); + Stars.updateUrl(); + }, + eQuantityClear: function() { + Stars.clearQuantity(true); + }, + clearQuantity: function(need_focus) { + var $form = Aj.state.$starsSearchForm; + var $field = $form.field('quantity'); + $field.value(''); + if (need_focus) { + $field.focus(); + } + Aj.state.curQuantity = 0; + $('.js-quantity-field-error').html(''); + $('.js-cur-price').html(''); + Stars.updateButton(); + Stars.updateUrl(); + }, + eQuantityChanged: function() { + var $form = Aj.state.$starsSearchForm; + var stars = +$form.field('stars').value(); + var quantity = +$form.field('quantity').value(); + $('.js-cur-price').html(''); + Aj.state.$starsQuantityField.addClass('loading').removeClass('play').redraw().addClass('play'); + Aj.apiRequest('updateStarsPrices', { + stars: stars, + quantity: quantity + }, function(result) { + if (result.error) { + $('.js-quantity-field-error').html(result.error); + quantity = 0; + } else { + $('.js-quantity-field-error').html(''); + } + $('.js-cur-price').html(result.cur_price); + if (result.options_html) { + Stars.updateOptions(result.options_html); + } + if (result.dh) { + Aj.state.lastDh = result.dh; + } + Aj.state.curQuantity = quantity; + Aj.state.$starsQuantityField.removeClass('loading'); + Aj.state.curStars = 0; + $('.js-stars-options input.radio:checked').prop('checked', false); + Stars.updateButton(); + Stars.updateUrl(); + }); + }, + eBuyForMyself: function(e) { + e.preventDefault(); + Stars.updateResult(Aj.state.myselfResult); + }, + eShowMoreOptions: function(e) { + e.preventDefault(); + Stars.toggleOptions(true); + }, + toggleOptions: function(expand) { + Aj.state.$starsSearchForm.toggleClass('options-expanded', expand).toggleClass('options-collapsed', !expand); + }, + eRadioChanged: function() { + Stars.clearQuantity(); + Aj.state.curStars = this.value; + Stars.updateButton(); + Stars.updateUrl(); + }, + eCheckboxChanged: function() { + var $form = Aj.state.$starsBuyForm; + var show_sender = $form.field('show_sender').prop('checked'); + Aj.state.$starsBuyPopup.toggleClass('show-sender', show_sender); + }, + updateButton: function() { + var $form = Aj.state.$starsSearchForm; + var quantity = Aj.state.curQuantity || Aj.state.curStars; + var btn_label = l('WEB_BUY_N_TELEGRAM_STARS_BUTTON', {n: quantity || 0, __format_number: true}); + $('.js-stars-btn-label').html(btn_label); + Aj.state.$starsBuyBtn.prop('disabled', !quantity || !$form.field('recipient').value()); + }, + eSearchSubmit: function(e) { + e.preventDefault(); + Stars.searchSubmit(); + }, + searchSubmit: function() { + var $form = Aj.state.$starsSearchForm; + var recipient = $form.field('recipient').value(); + var quantity = $form.field('quantity').value(); + var query = $form.field('query').value(); + if (!query.length) { + $form.field('query').focus(); + return; + } + Aj.state.$starsSearchField.addClass('loading').removeClass('play').redraw().addClass('play'); + Aj.showProgress(); + Aj.apiRequest('searchStarsRecipient', { + query: recipient || query, + quantity: quantity + }, function(result) { + Aj.hideProgress(); + Stars.updateResult(result); + Aj.state.$starsSearchField.removeClass('loading'); + }); + }, + updateResult: function(result) { + var $form = Aj.state.$starsSearchForm; + var $field = Aj.state.$starsSearchField; + var $btn = Aj.state.$starsBuyBtn; + if (result.error) { + $('.js-search-field-error').html(result.error); + $field.addClass('error').removeClass('found'); + $form.field('query').prop('disabled', false); + } else { + $('.js-search-field-error').html(''); + $field.removeClass('error'); + if (result.found) { + if (result.found.photo) { + $('.js-stars-search-photo', $field).html(result.found.photo); + } + if (result.found.name) { + var $form = Aj.state.$starsSearchForm; + $form.field('query').value(uncleanHTML(result.found.name)); + } + $form.toggleClass('myself', result.found.myself); + $form.field('recipient').value(result.found.recipient); + $field.addClass('found'); + $form.field('query').prop('disabled', true); + } else { + $form.removeClass('myself'); + $form.field('recipient').value(''); + $field.removeClass('found'); + $form.field('query').prop('disabled', false); + } + Stars.updateButton(); + } + Stars.updateUrl(); + }, + updateUrl: function() { + var new_url = ''; + var $form = Aj.state.$starsSearchForm; + var recipient = $form.field('recipient').value(); + var stars = $form.field('stars').value(); + var quantity = Aj.state.curQuantity || stars; + if (recipient) { + new_url += '&recipient=' + encodeURIComponent(recipient); + } + if (quantity) { + new_url += '&quantity=' + encodeURIComponent(quantity); + } + if (new_url) { + new_url = '?' + new_url.substr(1); + } + var loc = Aj.location(), path = loc.pathname + loc.search; + Aj.setLocation(new_url, path != '/stars'); + }, + updateOptions: function(html) { + var $form = Aj.state.$starsSearchForm; + var stars = $form.field('stars').value(); + $('.js-premium-options').replaceWith(html); + $form.field('stars').value(stars); + }, + eBuyStars: function(e) { + e.stopImmediatePropagation(); + e.preventDefault(); + var $form = Aj.state.$starsSearchForm; + var recipient = $form.field('recipient').value(); + var quantity = $form.field('quantity').value(); + var stars = $form.field('stars').value(); + Aj.apiRequest('initBuyStarsRequest', { + recipient: recipient, + quantity: quantity || stars + }, function(result) { + if (result.error) { + return showAlert(result.error); + } + $('.js-buy-stars-content', Aj.state.$starsBuyPopup).html(result.content); + $('.js-buy-stars-button', Aj.state.$starsBuyPopup).html(result.button); + Aj.state.$starsBuyPopup.toggleClass('iam-sender', result.myself); + Aj.state.starsPrice = result.amount; + Aj.state.itemTitle = result.item_title; + Aj.state.$starsBuyForm.field('id').value(result.req_id); + RLottie.WORKERS_LIMIT = 1; + openPopup(Aj.state.$starsBuyPopup, { + onOpen: function() { + $('.js-preview-sticker').each(function() { + RLottie.init(this, {playUntilEnd: true}); + }); + }, + onClose: function() { + $('.js-preview-sticker').each(function() { + RLottie.destroy(this); + }); + } + }); + }); + }, + eBuyStarsSubmit: function(e) { + e.preventDefault(); + var $form = $(this); + var item_title = Aj.state.itemTitle; + var req_id = $form.field('id').value(); + var show_sender = $form.field('show_sender').prop('checked'); + closePopup(Aj.state.$starsBuyPopup); + Wallet.sendTransaction({ + request: { + method: 'getBuyStarsLink', + params: { + id: req_id, + show_sender: show_sender ? 1 : 0 + } + }, + title: l('WEB_POPUP_QR_STARS_HEADER'), + description: l('WEB_POPUP_QR_STARS_TEXT', { + amount: '' + Aj.state.starsPrice + '' + }), + qr_label: item_title, + tk_label: l('WEB_POPUP_QR_STARS_TK_BUTTON'), + terms_label: l('WEB_POPUP_QR_PROCEED_TERMS'), + onConfirm: function(by_server) { + Stars.updateState(true); + } + }); + Aj.state.needUpdate = true; + }, + eBuyMoreStats: function(e) { + e.preventDefault(); + e.stopImmediatePropagation(); + Aj.apiRequest('repeatStars', {}, function(result) { + if (result.error) { + return showAlert(result.error); + } + Aj.location('/stars'); + }); + }, initWithdraw: function() { Aj.onLoad(function(state) { var cont = Aj.ajContainer;