mirror of
https://github.com/MarshalX/telegram-crawler.git
synced 2024-11-28 19:23:11 +01:00
Update content of files
This commit is contained in:
parent
2179519dff
commit
1e09d51e1a
19 changed files with 0 additions and 14064 deletions
10
data/core.telegram.org/css/bootstrap.min.css
vendored
10
data/core.telegram.org/css/bootstrap.min.css
vendored
File diff suppressed because one or more lines are too long
|
@ -1,264 +0,0 @@
|
||||||
<!DOCTYPE html>
|
|
||||||
<html class="">
|
|
||||||
<head>
|
|
||||||
<meta charset="utf-8">
|
|
||||||
<title>Gaming Platform 1.0</title>
|
|
||||||
<meta name="viewport" content="width=device-width, initial-scale=1.0">
|
|
||||||
<meta property="og:title" content="Gaming Platform 1.0">
|
|
||||||
<meta property="og:image" content="https://telegram.org/file/811140945/2/thDPn9h1P6M.26237.gif/5420d79aaa35fd47af">
|
|
||||||
<meta property="og:site_name" content="Telegram">
|
|
||||||
<meta property="og:description" content="A major update to Telegram's Bot Platform! Bots can now offer rich HTML5 experiences, like games">
|
|
||||||
<meta property="article:published_time" content="2016-10-03T12:58:34+00:00"><meta name="twitter:card" content="summary_large_image" /><meta name="twitter:image" content="https://telegram.org/file/811140945/2/thDPn9h1P6M.26237.gif/5420d79aaa35fd47af" />
|
|
||||||
<meta property="fb:app_id" content="254098051407226">
|
|
||||||
<meta property="vk:app_id" content="3782569">
|
|
||||||
<meta name="apple-itunes-app" content="app-id=686449807">
|
|
||||||
<meta name="telegram:channel" content="@telegram">
|
|
||||||
<link rel="canonical" href="https://telegram.org/blog/games" />
|
|
||||||
<link rel="icon" type="image/svg+xml" href="/img/website_icon.svg?4">
|
|
||||||
<link rel="alternate icon" href="/favicon.ico?4" type="image/x-icon" />
|
|
||||||
<link href="/css/bootstrap.min.css?3" rel="stylesheet">
|
|
||||||
|
|
||||||
<link href="/css/telegram.css?212" rel="stylesheet" media="screen">
|
|
||||||
<style>
|
|
||||||
</style>
|
|
||||||
</head>
|
|
||||||
<body class="preload">
|
|
||||||
<div id="fb-root"></div>
|
|
||||||
<div class="tl_page_wrap">
|
|
||||||
<div class="tl_page_head navbar navbar-static-top navbar navbar-tg">
|
|
||||||
<div class="navbar-inner">
|
|
||||||
<div class="container clearfix">
|
|
||||||
<ul class="nav navbar-nav navbar-right"><li class="dropdown top_lang_select"><a class="dropdown-toggle" onclick="return dropdownClick(this, event)" href="#"><i class="dev_top_lang_icon"></i> <b class="minicaret"></b></a>
|
|
||||||
<ul class="dropdown-menu"><li class=""><a href="?setln=en">English</a></li><li class="long "><a href="?setln=id">Bahasa Indonesia</a></li><li class="long "><a href="?setln=ms">Bahasa Melayu</a></li><li class=""><a href="?setln=de">Deutsch</a></li><li class=""><a href="?setln=es">Español</a></li><li class=""><a href="?setln=fr">Français</a></li><li class=""><a href="?setln=it">Italiano</a></li><li class=""><a href="?setln=nl">Nederlands</a></li><li class=""><a href="?setln=uz">O‘zbek</a></li><li class=""><a href="?setln=pl">Polski</a></li><li class="long "><a href="?setln=pt-br">Português (Brasil)</a></li><li class=""><a href="?setln=tr">Türkçe</a></li><li class=""><a href="?setln=be">Беларуская</a></li><li class=""><a href="?setln=ru">Русский</a></li><li class=""><a href="?setln=uk">Українська</a></li><li class=""><a href="?setln=ar">العربية</a></li><li class=""><a href="?setln=fa">فارسی</a></li><li class=""><a href="?setln=ko">한국어</a></li></ul></li><li class="navbar-twitter hidden-xs"><a href="https://twitter.com/telegram" target="_blank" data-track="Follow/Twitter" onclick="trackDlClick(this, event)"><i class="icon icon-twitter"></i> Twitter</a></li></ul>
|
|
||||||
<ul class="nav navbar-nav">
|
|
||||||
<li class=""><a href="/">Home</a></li>
|
|
||||||
<li class=""><a href="/faq">FAQ</a></li>
|
|
||||||
<li class=""><a href="/apps">Apps</a></li>
|
|
||||||
<li class="hidden-xs "><a href="//core.telegram.org/api">API</a></li>
|
|
||||||
<li class="hidden-xs "><a href="//core.telegram.org/mtproto">Protocol</a></li>
|
|
||||||
</ul>
|
|
||||||
</div>
|
|
||||||
</div>
|
|
||||||
</div>
|
|
||||||
<div class="container clearfix tl_page_container ">
|
|
||||||
<div class="tl_page">
|
|
||||||
<div class="tl_contest_page_wrap">
|
|
||||||
<div class="tl_blog_side_blog"><div class="side_blog_wrap">
|
|
||||||
<div class="side_blog">
|
|
||||||
<a href="/blog" class="side_blog_header">Recent News</a>
|
|
||||||
<div class="side_blog_entries">
|
|
||||||
<a href="/blog/payments-2-0-scheduled-voice-chats" class="side_blog_entry">
|
|
||||||
<div class="side_blog_date">Apr 26</div>
|
|
||||||
<div class="side_blog_title">Payments 2.0, Scheduled Voice Chats, New Web Versions</div>
|
|
||||||
</a><a href="/blog/voice-chats-on-steroids" class="side_blog_entry">
|
|
||||||
<div class="side_blog_date">Mar 19</div>
|
|
||||||
<div class="side_blog_title">Voice Chats 2.0: Channels, Millions of Listeners, Recorded Chats, Admin Tools</div>
|
|
||||||
</a><a href="/blog/autodelete-inv2" class="side_blog_entry">
|
|
||||||
<div class="side_blog_date">Feb 23</div>
|
|
||||||
<div class="side_blog_title">Auto-Delete, Widgets and Expiring Invite Links</div>
|
|
||||||
</a><a href="/blog/move-history" class="side_blog_entry">
|
|
||||||
<div class="side_blog_date">Jan 28</div>
|
|
||||||
<div class="side_blog_title">Moving Chat History from Other Apps</div>
|
|
||||||
</a><a href="/blog/voice-chats" class="side_blog_entry">
|
|
||||||
<div class="side_blog_date">Dec 23</div>
|
|
||||||
<div class="side_blog_title">Voice Chats Done Right</div>
|
|
||||||
</a><a href="/blog/pinned-messages-locations-playlists" class="side_blog_entry">
|
|
||||||
<div class="side_blog_date">Oct 30</div>
|
|
||||||
<div class="side_blog_title">Pinned Messages 2.0, Improved Live Locations, Playlists and More</div>
|
|
||||||
</a><a href="/blog/filters-anonymous-admins-comments" class="side_blog_entry">
|
|
||||||
<div class="side_blog_date">Sep 30</div>
|
|
||||||
<div class="side_blog_title">Search Filters, Anonymous Admins, Channel Comments</div>
|
|
||||||
</a>
|
|
||||||
</div>
|
|
||||||
</div>
|
|
||||||
</div></div>
|
|
||||||
<div id="dev_page_content_wrap" class=" ">
|
|
||||||
<div class="dev_page_bread_crumbs"></div>
|
|
||||||
<h1 id="dev_page_title">Gaming Platform 1.0</h1>
|
|
||||||
|
|
||||||
<div id="dev_page_content"><div class="blog_side_image_wrap">
|
|
||||||
<img src="/file/811140945/2/thDPn9h1P6M.26237.gif/5420d79aaa35fd47af" class="blog_side_image"/>
|
|
||||||
</div>
|
|
||||||
|
|
||||||
<p>Last year we launched a <a href="https://core.telegram.org/bots">Bot Platform</a> for Telegram. Free, powerful, and open, it was an instant hit among users and developers. Today we are aiming to push the boundaries further by launching a bot-powered <strong>Gaming Platform</strong> on Telegram. That’s right: you can now use bots to play games in your chats, complete with graphics and sound.</p>
|
|
||||||
<div class="smartphone_video_player_wrap">
|
|
||||||
<div class="smartphone_video_player_iphone">
|
|
||||||
<video class="smartphone_video_player tl_blog_vid_autoplay" onclick="videoTogglePlay(this)" poster="ZZZ" autoplay loop controls muted>
|
|
||||||
<source src="/file/811140153/1/gB7wI2zjrj0.1410621.mp4/06df2101673aabbf29" type="video/mp4">
|
|
||||||
</video>
|
|
||||||
</div>
|
|
||||||
</div>
|
|
||||||
|
|
||||||
<h3><a class="anchor" name="ready-to-play" href="#ready-to-play"><i class="anchor-icon"></i></a>Ready to Play</h3>
|
|
||||||
<p>Hundreds of games are headed your way, but about 30 are ready to be played on Telegram now, most of them published by <a href="https://telegram.me/gamee">@gamee</a>. You can start a game by interacting with their bot directly, or by invoking it from <a href="https://telegram.org/blog/inline-bots">any of your chats</a>. To do that, try typing “@gamee “ in a group and choose a game to start playing with your friends:</p>
|
|
||||||
<div class="blog_image_wrap">
|
|
||||||
<a href="/file/811140576/1/-CuMDV4IrNE.105071/adab466b20e49a5758" target="_blank"><img src="/file/811140576/1/-CuMDV4IrNE.105071/adab466b20e49a5758" title="Select a game" /></a>
|
|
||||||
<p>Select a game</p>
|
|
||||||
</div>
|
|
||||||
|
|
||||||
<p>If you spot a great game on Telegram, you can challenge your friends from other chats by sharing the game with them. </p>
|
|
||||||
<div class="blog_image_wrap">
|
|
||||||
<a href="/file/811140035/2/cIULSr61vi4.78261/127282e0bbd66ce3a9" target="_blank"><img src="/file/811140035/2/cIULSr61vi4.78261/127282e0bbd66ce3a9" title="Challenge your friends" /></a>
|
|
||||||
<p>Challenge your friends</p>
|
|
||||||
</div>
|
|
||||||
|
|
||||||
<h3><a class="anchor" name="better-with-friends" href="#better-with-friends"><i class="anchor-icon"></i></a>Better with Friends</h3>
|
|
||||||
<p>The best part of the Telegram Gaming Platform is the competition across all your existing chats. We save <strong>high scores</strong> for every game played in every chat, and you can instantly check out how you and your friends are doing against each other. Every time there’s a new leader in the game, other playing members of the chat are notified that they need to step it up. </p>
|
|
||||||
<div class="blog_2images_wrap">
|
|
||||||
<div class="blog_image_wrap">
|
|
||||||
<a href="/file/811140426/1/ZCw3vu_v8s0.109692/04efd9e88644939a4f" target="_blank"><img src="/file/811140426/1/ZCw3vu_v8s0.109692/04efd9e88644939a4f" title="YYY"/></a>
|
|
||||||
<p>In-game high scores</p>
|
|
||||||
</div>
|
|
||||||
<div class="blog_image_wrap">
|
|
||||||
<a href="/file/811140306/1/dkciuEDbpxU.193188/8a0a21b6e9d111be4c" target="_blank"><img src="/file/811140306/1/dkciuEDbpxU.193188/8a0a21b6e9d111be4c" title="YYY"/></a>
|
|
||||||
<p>New high score in chat</p> </div>
|
|
||||||
</div>
|
|
||||||
|
|
||||||
<h3><a class="anchor" name="easy-to-build" href="#easy-to-build"><i class="anchor-icon"></i></a>Easy to Build</h3>
|
|
||||||
<p>Building games for Telegram is easy (check out the <a href="https://core.telegram.org/bots/api#games">API</a>). Here’s <strong>MathBattle</strong>, a game that took our developer only 3 hours to build. You can launch it from any chat by typing <a href="https://telegram.me/gamebot">@gamebot</a> and choosing Math Battle:</p>
|
|
||||||
<div class="smartphone_video_player_wrap">
|
|
||||||
<div class="smartphone_video_player_iphone">
|
|
||||||
<video class="smartphone_video_player tl_blog_vid_autoplay" onclick="videoTogglePlay(this)" poster="ZZZ" autoplay loop controls muted>
|
|
||||||
<source src="/file/811140234/1/18njZcUlq5M.357062.mp4/09572569b4738fe2d8" type="video/mp4">
|
|
||||||
</video>
|
|
||||||
</div>
|
|
||||||
</div>
|
|
||||||
|
|
||||||
<p>This is <strong>Corsairs</strong>, a demo game that took its dev just 5 hours to build and set up. That includes sound, graphics and animations:</p>
|
|
||||||
<div class="smartphone_video_player_wrap">
|
|
||||||
<div class="smartphone_video_player_iphone">
|
|
||||||
<video class="smartphone_video_player tl_blog_vid_autoplay" onclick="videoTogglePlay(this)" poster="ZZZ" autoplay loop controls muted>
|
|
||||||
<source src="/file/811140027/2/Hdhk2QEXGnA.611796.mp4/ecb907590f316596a8" type="video/mp4">
|
|
||||||
</video>
|
|
||||||
</div>
|
|
||||||
</div>
|
|
||||||
|
|
||||||
<p>While these demos look basic, Telegram games can be anything from simple arcades and puzzles to multiplayer 3D-shooters and real-time strategy games. The underlying technology is <strong>HTML5</strong>, so games are loaded on-demand as needed, just like ordinary webpages. Games will work on iPhones 4 and newer and on Android 4.4 devices and newer. Note that your friends will need <strong>Telegram 3.13</strong> or higher to play.</p>
|
|
||||||
<p>If you are a developer, take a look at our <a href="https://core.telegram.org/bots/games">Introduction to Games</a>. Also, feel free to subscribe to our official <a href="https://telegram.me/botnews">@BotNews</a> channel to stay up to date on platform news.</p>
|
|
||||||
<h3><a class="anchor" name="no-added-calories" href="#no-added-calories"><i class="anchor-icon"></i></a>No Added Calories</h3>
|
|
||||||
<p>We know you love Telegram because it’s lean and efficient. This is why the new Gaming Platform requires <strong>0 bytes</strong> of disk space and won’t add a single byte to the size of our apps. The only thing we're adding today is countless more fun moments in your chats.</p>
|
|
||||||
<div><br></div>
|
|
||||||
|
|
||||||
<p>And now let's see how high you can score.</p>
|
|
||||||
<div><br></div>
|
|
||||||
|
|
||||||
<p><em>October 3, 2016<br>The Telegram Team</em></p>
|
|
||||||
</div>
|
|
||||||
|
|
||||||
</div>
|
|
||||||
<div class="tl_main_share clearfix">
|
|
||||||
<a href="https://t.me/share/url?url=https%3A%2F%2Ftelegram.org%2Fblog%2Fgames&text=A%20major%20update%20to%20Telegram%27s%20Bot%20Platform%21%20Bots%20can%20now%20offer%20rich%20HTML5%20experiences%2C%20like%20games" class="tl_telegram_share_btn" id="tl_telegram_share_btn" data-text="A major update to Telegram's Bot Platform! Bots can now offer rich HTML5 experiences, like games" data-url="https://telegram.org/blog/games"><i class="tl_telegram_share_icon"></i><span class="tl_telegram_share_label" target="_blank">Forward</span></a>
|
|
||||||
<a href="https://twitter.com/share" class="tl_twitter_share_btn" id="tl_twitter_share_btn" data-text="A major update to Telegram's Bot Platform! Bots can now offer rich HTML5 experiences, like games" data-url="https://telegram.org/blog/games" data-via="Telegram">Tweet <span class="tl_twitter_share_cnt"></span></a>
|
|
||||||
</div>
|
|
||||||
|
|
||||||
</div>
|
|
||||||
<div class="tl_main_recent_news_wrap tlb_other_news_wrap tl_blog_list_page_wrap">
|
|
||||||
<h3 class="tl_main_recent_news_header">
|
|
||||||
<a href="/blog">Other News</a>
|
|
||||||
</h3>
|
|
||||||
<div class="tl_main_recent_news_cards clearfix">
|
|
||||||
<a class="dev_blog_card_link_wrap" href="/blog/payments-2-0-scheduled-voice-chats"><div class="dev_blog_card_wrap">
|
|
||||||
<img class="dev_blog_card_image" src="https://telegram.org/file/464001783/2/6Is-qGJkgX4.92603/d4d7fe3e0fc14ff3ba" />
|
|
||||||
<div class="dev_blog_card_alltext_wrap">
|
|
||||||
<h4 class="dev_blog_card_title">Payments 2.0, Scheduled Voice Chats, New Web Versions</h4>
|
|
||||||
<div class="dev_blog_card_lead">This update brings Payments 2.0 for all Telegram chats, Scheduling and Mini Profiles for Voice Chats, new versions of Telegram Web for…</div>
|
|
||||||
</div>
|
|
||||||
<div class="dev_blog_card_date">Apr 26, 2021</div>
|
|
||||||
</div></a><a class="dev_blog_card_link_wrap" href="/blog/voice-chats-on-steroids"><div class="dev_blog_card_wrap">
|
|
||||||
<img class="dev_blog_card_image" src="https://telegram.org/file/464001855/3/O31CcF_-a20.86962/cafa0c3d7dd2df1134" />
|
|
||||||
<div class="dev_blog_card_alltext_wrap">
|
|
||||||
<h4 class="dev_blog_card_title">Voice Chats 2.0: Channels, Millions of Listeners, Recorded Chats, Admin Tools</h4>
|
|
||||||
<div class="dev_blog_card_lead">Voice Chats first appeared in December, adding a new dimension of live talk to Telegram groups. Starting today, they become available in…</div>
|
|
||||||
</div>
|
|
||||||
<div class="dev_blog_card_date">Mar 19, 2021</div>
|
|
||||||
</div></a><a class="dev_blog_card_link_wrap" href="/blog/autodelete-inv2"><div class="dev_blog_card_wrap">
|
|
||||||
<img class="dev_blog_card_image" src="https://telegram.org/file/464001701/5/WvHD2TGPSzU.74913/648f3e17886f6c96f8" />
|
|
||||||
<div class="dev_blog_card_alltext_wrap">
|
|
||||||
<h4 class="dev_blog_card_title">Auto-Delete, Widgets and Expiring Invite Links</h4>
|
|
||||||
<div class="dev_blog_card_lead">This update brings an auto-delete timer for messages in any chat, as well as new flexible invite links and faster access to your chats…</div>
|
|
||||||
</div>
|
|
||||||
<div class="dev_blog_card_date">Feb 23, 2021</div>
|
|
||||||
</div></a><a class="dev_blog_card_link_wrap" href="/blog/move-history"><div class="dev_blog_card_wrap">
|
|
||||||
<img class="dev_blog_card_image" src="https://telegram.org/file/464001185/1/Z6LVvcYB03g.64305/e8ff8c87c4d656cbe1" />
|
|
||||||
<div class="dev_blog_card_alltext_wrap">
|
|
||||||
<h4 class="dev_blog_card_title">Moving Chat History from Other Apps</h4>
|
|
||||||
<div class="dev_blog_card_lead">Over 100 million new users joined Telegram this January, seeking more privacy and freedom. But what about the messages and memories that remain in older apps? Starting today, everyone…</div>
|
|
||||||
</div>
|
|
||||||
<div class="dev_blog_card_date">Jan 28, 2021</div>
|
|
||||||
</div></a>
|
|
||||||
</div>
|
|
||||||
</div>
|
|
||||||
|
|
||||||
</div>
|
|
||||||
</div>
|
|
||||||
</div>
|
|
||||||
<div class="footer_wrap">
|
|
||||||
<div class="footer_columns_wrap footer_desktop">
|
|
||||||
<div class="footer_column footer_column_telegram">
|
|
||||||
<h5>Telegram</h5>
|
|
||||||
<div class="footer_telegram_description"></div>
|
|
||||||
Telegram is a cloud-based mobile and desktop messaging app with a focus on security and speed.
|
|
||||||
</div>
|
|
||||||
|
|
||||||
<div class="footer_column">
|
|
||||||
<h5><a href="/faq">About</a></h5>
|
|
||||||
<ul>
|
|
||||||
<li><a href="/faq">FAQ</a></li>
|
|
||||||
<li><a href="/blog">Blog</a></li>
|
|
||||||
<li><a href="/jobs">Jobs</a></li>
|
|
||||||
</ul>
|
|
||||||
</div>
|
|
||||||
<div class="footer_column">
|
|
||||||
<h5><a href="/apps#mobile-apps">Mobile Apps</a></h5>
|
|
||||||
<ul>
|
|
||||||
<li><a href="/dl/ios">iPhone/iPad</a></li>
|
|
||||||
<li><a href="/dl/android">Android</a></li>
|
|
||||||
<li><a href="/dl/wp">Windows Phone</a></li>
|
|
||||||
</ul>
|
|
||||||
</div>
|
|
||||||
<div class="footer_column">
|
|
||||||
<h5><a href="/apps#desktop-apps">Desktop Apps</a></h5>
|
|
||||||
<ul>
|
|
||||||
<li><a href="//desktop.telegram.org/">PC/Mac/Linux</a></li>
|
|
||||||
<li><a href="//macos.telegram.org/">macOS</a></li>
|
|
||||||
<li><a href="/dl/web">Web-browser</a></li>
|
|
||||||
</ul>
|
|
||||||
</div>
|
|
||||||
<div class="footer_column footer_column_platform">
|
|
||||||
<h5><a href="//core.telegram.org/">Platform</a></h5>
|
|
||||||
<ul>
|
|
||||||
<li><a href="//core.telegram.org/api">API</a></li>
|
|
||||||
<li><a href="//translations.telegram.org/">Translations</a></li>
|
|
||||||
<li><a href="//instantview.telegram.org/">Instant View</a></li>
|
|
||||||
</ul>
|
|
||||||
</div>
|
|
||||||
</div>
|
|
||||||
<div class="footer_columns_wrap footer_mobile">
|
|
||||||
<div class="footer_column">
|
|
||||||
<h5><a href="/faq">About</a></h5>
|
|
||||||
</div>
|
|
||||||
<div class="footer_column">
|
|
||||||
<h5><a href="/blog">Blog</a></h5>
|
|
||||||
</div>
|
|
||||||
<div class="footer_column">
|
|
||||||
<h5><a href="/apps">Apps</a></h5>
|
|
||||||
</div>
|
|
||||||
<div class="footer_column">
|
|
||||||
<h5><a href="//core.telegram.org/">Platform</a></h5>
|
|
||||||
</div>
|
|
||||||
<div class="footer_column">
|
|
||||||
<h5><a href="https://twitter.com/telegram" target="_blank" data-track="Follow/Twitter" onclick="trackDlClick(this, event)">Twitter</a></h5>
|
|
||||||
</div>
|
|
||||||
</div>
|
|
||||||
</div>
|
|
||||||
<script src="/js/main.js?42"></script>
|
|
||||||
|
|
||||||
<script>initScrollVideos(true);
|
|
||||||
twitterCustomShareInit();
|
|
||||||
blogSideImageInit();
|
|
||||||
backToTopInit("Go up");
|
|
||||||
removePreloadInit();
|
|
||||||
</script>
|
|
||||||
</body>
|
|
||||||
</html>
|
|
||||||
|
|
|
@ -1,217 +0,0 @@
|
||||||
<!DOCTYPE html>
|
|
||||||
<html class="">
|
|
||||||
<head>
|
|
||||||
<meta charset="utf-8">
|
|
||||||
<title>Migrating Existing Group Chats to Telegram</title>
|
|
||||||
<meta name="viewport" content="width=device-width, initial-scale=1.0">
|
|
||||||
<meta property="og:title" content="Migrating Existing Group Chats to Telegram">
|
|
||||||
<meta property="og:image" content="https://telegram.org/file/811140591/1/q7zZHjgES6s/9d121a89ffb0015837">
|
|
||||||
<meta property="og:site_name" content="Telegram">
|
|
||||||
<meta property="og:description" content="Switching your existing group chats to Telegram with a link.">
|
|
||||||
<meta property="article:published_time" content="2015-04-30T17:35:57+00:00"><meta name="twitter:card" content="summary_large_image" /><meta name="twitter:image" content="https://telegram.org/file/811140591/1/q7zZHjgES6s/9d121a89ffb0015837" />
|
|
||||||
<meta property="fb:app_id" content="254098051407226">
|
|
||||||
<meta property="vk:app_id" content="3782569">
|
|
||||||
<meta name="apple-itunes-app" content="app-id=686449807">
|
|
||||||
<meta name="telegram:channel" content="@telegram">
|
|
||||||
<link rel="canonical" href="https://telegram.org/blog/invite-links" />
|
|
||||||
<link rel="icon" type="image/svg+xml" href="/img/website_icon.svg?4">
|
|
||||||
<link rel="alternate icon" href="/favicon.ico?4" type="image/x-icon" />
|
|
||||||
<link href="/css/bootstrap.min.css?3" rel="stylesheet">
|
|
||||||
|
|
||||||
<link href="/css/telegram.css?212" rel="stylesheet" media="screen">
|
|
||||||
<style>
|
|
||||||
</style>
|
|
||||||
</head>
|
|
||||||
<body class="preload">
|
|
||||||
<div id="fb-root"></div>
|
|
||||||
<div class="tl_page_wrap">
|
|
||||||
<div class="tl_page_head navbar navbar-static-top navbar navbar-tg">
|
|
||||||
<div class="navbar-inner">
|
|
||||||
<div class="container clearfix">
|
|
||||||
<ul class="nav navbar-nav navbar-right"><li class="dropdown top_lang_select"><a class="dropdown-toggle" onclick="return dropdownClick(this, event)" href="#"><i class="dev_top_lang_icon"></i> <b class="minicaret"></b></a>
|
|
||||||
<ul class="dropdown-menu"><li class=""><a href="?setln=en">English</a></li><li class="long "><a href="?setln=id">Bahasa Indonesia</a></li><li class="long "><a href="?setln=ms">Bahasa Melayu</a></li><li class=""><a href="?setln=de">Deutsch</a></li><li class=""><a href="?setln=es">Español</a></li><li class=""><a href="?setln=fr">Français</a></li><li class=""><a href="?setln=it">Italiano</a></li><li class=""><a href="?setln=nl">Nederlands</a></li><li class=""><a href="?setln=uz">O‘zbek</a></li><li class=""><a href="?setln=pl">Polski</a></li><li class="long "><a href="?setln=pt-br">Português (Brasil)</a></li><li class=""><a href="?setln=tr">Türkçe</a></li><li class=""><a href="?setln=be">Беларуская</a></li><li class=""><a href="?setln=ru">Русский</a></li><li class=""><a href="?setln=uk">Українська</a></li><li class=""><a href="?setln=ar">العربية</a></li><li class=""><a href="?setln=fa">فارسی</a></li><li class=""><a href="?setln=ko">한국어</a></li></ul></li><li class="navbar-twitter hidden-xs"><a href="https://twitter.com/telegram" target="_blank" data-track="Follow/Twitter" onclick="trackDlClick(this, event)"><i class="icon icon-twitter"></i> Twitter</a></li></ul>
|
|
||||||
<ul class="nav navbar-nav">
|
|
||||||
<li class=""><a href="/">Home</a></li>
|
|
||||||
<li class=""><a href="/faq">FAQ</a></li>
|
|
||||||
<li class=""><a href="/apps">Apps</a></li>
|
|
||||||
<li class="hidden-xs "><a href="//core.telegram.org/api">API</a></li>
|
|
||||||
<li class="hidden-xs "><a href="//core.telegram.org/mtproto">Protocol</a></li>
|
|
||||||
</ul>
|
|
||||||
</div>
|
|
||||||
</div>
|
|
||||||
</div>
|
|
||||||
<div class="container clearfix tl_page_container ">
|
|
||||||
<div class="tl_page">
|
|
||||||
<div class="tl_contest_page_wrap">
|
|
||||||
<div class="tl_blog_side_blog"><div class="side_blog_wrap">
|
|
||||||
<div class="side_blog">
|
|
||||||
<a href="/blog" class="side_blog_header">Recent News</a>
|
|
||||||
<div class="side_blog_entries">
|
|
||||||
<a href="/blog/payments-2-0-scheduled-voice-chats" class="side_blog_entry">
|
|
||||||
<div class="side_blog_date">Apr 26</div>
|
|
||||||
<div class="side_blog_title">Payments 2.0, Scheduled Voice Chats, New Web Versions</div>
|
|
||||||
</a><a href="/blog/voice-chats-on-steroids" class="side_blog_entry">
|
|
||||||
<div class="side_blog_date">Mar 19</div>
|
|
||||||
<div class="side_blog_title">Voice Chats 2.0: Channels, Millions of Listeners, Recorded Chats, Admin Tools</div>
|
|
||||||
</a><a href="/blog/autodelete-inv2" class="side_blog_entry">
|
|
||||||
<div class="side_blog_date">Feb 23</div>
|
|
||||||
<div class="side_blog_title">Auto-Delete, Widgets and Expiring Invite Links</div>
|
|
||||||
</a><a href="/blog/move-history" class="side_blog_entry">
|
|
||||||
<div class="side_blog_date">Jan 28</div>
|
|
||||||
<div class="side_blog_title">Moving Chat History from Other Apps</div>
|
|
||||||
</a><a href="/blog/voice-chats" class="side_blog_entry">
|
|
||||||
<div class="side_blog_date">Dec 23</div>
|
|
||||||
<div class="side_blog_title">Voice Chats Done Right</div>
|
|
||||||
</a><a href="/blog/pinned-messages-locations-playlists" class="side_blog_entry">
|
|
||||||
<div class="side_blog_date">Oct 30</div>
|
|
||||||
<div class="side_blog_title">Pinned Messages 2.0, Improved Live Locations, Playlists and More</div>
|
|
||||||
</a><a href="/blog/filters-anonymous-admins-comments" class="side_blog_entry">
|
|
||||||
<div class="side_blog_date">Sep 30</div>
|
|
||||||
<div class="side_blog_title">Search Filters, Anonymous Admins, Channel Comments</div>
|
|
||||||
</a>
|
|
||||||
</div>
|
|
||||||
</div>
|
|
||||||
</div></div>
|
|
||||||
<div id="dev_page_content_wrap" class=" ">
|
|
||||||
<div class="dev_page_bread_crumbs"></div>
|
|
||||||
<h1 id="dev_page_title">Migrating Existing Group Chats to Telegram</h1>
|
|
||||||
|
|
||||||
<div id="dev_page_content"><div class="blog_side_image_wrap">
|
|
||||||
<img src="/file/811140591/1/q7zZHjgES6s/9d121a89ffb0015837" class="blog_side_image"/>
|
|
||||||
</div>
|
|
||||||
|
|
||||||
<p>In addition to <a href="https://telegram.org/blog/captions-places">numerous great features</a> in today's update, we’re happy to introduce a new way to move your existing group chats to Telegram — <strong>invite links</strong> for admins. </p>
|
|
||||||
<p>Each passing month brings more reasons to switch to Telegram from older services. Persistent history, <a href="https://telegram.org/blog#instant-full-text-search">instant full-text search</a>, <a href="https://core.telegram.org/api">open platform</a>, <a href="https://telegram.org/blog/files-on-steroids">unlimited file sharing</a>, <a href="https://telegram.org/blog/link-preview">rich link previews</a>, <a href="https://telegram.org/blog/desktop-compact">native desktop apps</a>, <a href="https://telegram.org/blog/replies-mentions-hashtags">replies, mentions, hashtags</a> and much more.</p>
|
|
||||||
<p>And yet, if you‘ve ever tried moving your existing group chats from other apps to Telegram, you know it was not easy. There was simply too much work to do and too much friction — you had to collect everyone’s usernames or phone numbers and add them to your group one by one. We're glad to announce that these days are over. </p>
|
|
||||||
<h3><a class="anchor" name="invite-links" href="#invite-links"><i class="anchor-icon"></i></a>Invite Links</h3>
|
|
||||||
<p>With invite links for groups, all you have to do is send a link to your existing group chat in any messaging service that your friends might still be using. As soon as they get Telegram, they can instantly join your Telegram group just by following that link.</p>
|
|
||||||
<p>Where do you get the link? Once you've created a group on Telegram, head to the "Add participant…” section and tap “Invite to Group via Link”. Easy!</p>
|
|
||||||
<center><div>
|
|
||||||
<a href="/file/811140914/2/MfsEG6BRRyI/8e51dbe1da5404b005" target="_blank"><img src="/file/811140914/2/MfsEG6BRRyI/8e51dbe1da5404b005" title="Here's where you find the option" style="width: 195px; padding: 10px 5px" /></a>
|
|
||||||
|
|
||||||
<a href="/file/811140467/2/EZ7haFQCcEU/92f5babc93d0616535" target="_blank"><img src="/file/811140467/2/EZ7haFQCcEU/92f5babc93d0616535" title="Use this link to move your existing groups to Telegram" style="width: 195px; padding: 10px 5px" /></a>
|
|
||||||
<br>
|
|
||||||
</div></center>
|
|
||||||
|
|
||||||
<div><br><br></div>
|
|
||||||
|
|
||||||
<p><em>The Telegram Team,<br>April 30, 2015</em></p>
|
|
||||||
</div>
|
|
||||||
|
|
||||||
</div>
|
|
||||||
<div class="tl_main_share clearfix">
|
|
||||||
<a href="https://t.me/share/url?url=https%3A%2F%2Ftelegram.org%2Fblog%2Finvite-links&text=Switching%20your%20existing%20group%20chats%20to%20Telegram%20with%20a%20link." class="tl_telegram_share_btn" id="tl_telegram_share_btn" data-text="Switching your existing group chats to Telegram with a link." data-url="https://telegram.org/blog/invite-links"><i class="tl_telegram_share_icon"></i><span class="tl_telegram_share_label" target="_blank">Forward</span></a>
|
|
||||||
<a href="https://twitter.com/share" class="tl_twitter_share_btn" id="tl_twitter_share_btn" data-text="Switching your existing group chats to Telegram with a link." data-url="https://telegram.org/blog/invite-links" data-via="Telegram">Tweet <span class="tl_twitter_share_cnt"></span></a>
|
|
||||||
</div>
|
|
||||||
|
|
||||||
</div>
|
|
||||||
<div class="tl_main_recent_news_wrap tlb_other_news_wrap tl_blog_list_page_wrap">
|
|
||||||
<h3 class="tl_main_recent_news_header">
|
|
||||||
<a href="/blog">Other News</a>
|
|
||||||
</h3>
|
|
||||||
<div class="tl_main_recent_news_cards clearfix">
|
|
||||||
<a class="dev_blog_card_link_wrap" href="/blog/payments-2-0-scheduled-voice-chats"><div class="dev_blog_card_wrap">
|
|
||||||
<img class="dev_blog_card_image" src="https://telegram.org/file/464001783/2/6Is-qGJkgX4.92603/d4d7fe3e0fc14ff3ba" />
|
|
||||||
<div class="dev_blog_card_alltext_wrap">
|
|
||||||
<h4 class="dev_blog_card_title">Payments 2.0, Scheduled Voice Chats, New Web Versions</h4>
|
|
||||||
<div class="dev_blog_card_lead">This update brings Payments 2.0 for all Telegram chats, Scheduling and Mini Profiles for Voice Chats, new versions of Telegram Web for…</div>
|
|
||||||
</div>
|
|
||||||
<div class="dev_blog_card_date">Apr 26, 2021</div>
|
|
||||||
</div></a><a class="dev_blog_card_link_wrap" href="/blog/voice-chats-on-steroids"><div class="dev_blog_card_wrap">
|
|
||||||
<img class="dev_blog_card_image" src="https://telegram.org/file/464001855/3/O31CcF_-a20.86962/cafa0c3d7dd2df1134" />
|
|
||||||
<div class="dev_blog_card_alltext_wrap">
|
|
||||||
<h4 class="dev_blog_card_title">Voice Chats 2.0: Channels, Millions of Listeners, Recorded Chats, Admin Tools</h4>
|
|
||||||
<div class="dev_blog_card_lead">Voice Chats first appeared in December, adding a new dimension of live talk to Telegram groups. Starting today, they become available in…</div>
|
|
||||||
</div>
|
|
||||||
<div class="dev_blog_card_date">Mar 19, 2021</div>
|
|
||||||
</div></a><a class="dev_blog_card_link_wrap" href="/blog/autodelete-inv2"><div class="dev_blog_card_wrap">
|
|
||||||
<img class="dev_blog_card_image" src="https://telegram.org/file/464001701/5/WvHD2TGPSzU.74913/648f3e17886f6c96f8" />
|
|
||||||
<div class="dev_blog_card_alltext_wrap">
|
|
||||||
<h4 class="dev_blog_card_title">Auto-Delete, Widgets and Expiring Invite Links</h4>
|
|
||||||
<div class="dev_blog_card_lead">This update brings an auto-delete timer for messages in any chat, as well as new flexible invite links and faster access to your chats…</div>
|
|
||||||
</div>
|
|
||||||
<div class="dev_blog_card_date">Feb 23, 2021</div>
|
|
||||||
</div></a><a class="dev_blog_card_link_wrap" href="/blog/move-history"><div class="dev_blog_card_wrap">
|
|
||||||
<img class="dev_blog_card_image" src="https://telegram.org/file/464001185/1/Z6LVvcYB03g.64305/e8ff8c87c4d656cbe1" />
|
|
||||||
<div class="dev_blog_card_alltext_wrap">
|
|
||||||
<h4 class="dev_blog_card_title">Moving Chat History from Other Apps</h4>
|
|
||||||
<div class="dev_blog_card_lead">Over 100 million new users joined Telegram this January, seeking more privacy and freedom. But what about the messages and memories that remain in older apps? Starting today, everyone…</div>
|
|
||||||
</div>
|
|
||||||
<div class="dev_blog_card_date">Jan 28, 2021</div>
|
|
||||||
</div></a>
|
|
||||||
</div>
|
|
||||||
</div>
|
|
||||||
|
|
||||||
</div>
|
|
||||||
</div>
|
|
||||||
</div>
|
|
||||||
<div class="footer_wrap">
|
|
||||||
<div class="footer_columns_wrap footer_desktop">
|
|
||||||
<div class="footer_column footer_column_telegram">
|
|
||||||
<h5>Telegram</h5>
|
|
||||||
<div class="footer_telegram_description"></div>
|
|
||||||
Telegram is a cloud-based mobile and desktop messaging app with a focus on security and speed.
|
|
||||||
</div>
|
|
||||||
|
|
||||||
<div class="footer_column">
|
|
||||||
<h5><a href="/faq">About</a></h5>
|
|
||||||
<ul>
|
|
||||||
<li><a href="/faq">FAQ</a></li>
|
|
||||||
<li><a href="/blog">Blog</a></li>
|
|
||||||
<li><a href="/jobs">Jobs</a></li>
|
|
||||||
</ul>
|
|
||||||
</div>
|
|
||||||
<div class="footer_column">
|
|
||||||
<h5><a href="/apps#mobile-apps">Mobile Apps</a></h5>
|
|
||||||
<ul>
|
|
||||||
<li><a href="/dl/ios">iPhone/iPad</a></li>
|
|
||||||
<li><a href="/dl/android">Android</a></li>
|
|
||||||
<li><a href="/dl/wp">Windows Phone</a></li>
|
|
||||||
</ul>
|
|
||||||
</div>
|
|
||||||
<div class="footer_column">
|
|
||||||
<h5><a href="/apps#desktop-apps">Desktop Apps</a></h5>
|
|
||||||
<ul>
|
|
||||||
<li><a href="//desktop.telegram.org/">PC/Mac/Linux</a></li>
|
|
||||||
<li><a href="//macos.telegram.org/">macOS</a></li>
|
|
||||||
<li><a href="/dl/web">Web-browser</a></li>
|
|
||||||
</ul>
|
|
||||||
</div>
|
|
||||||
<div class="footer_column footer_column_platform">
|
|
||||||
<h5><a href="//core.telegram.org/">Platform</a></h5>
|
|
||||||
<ul>
|
|
||||||
<li><a href="//core.telegram.org/api">API</a></li>
|
|
||||||
<li><a href="//translations.telegram.org/">Translations</a></li>
|
|
||||||
<li><a href="//instantview.telegram.org/">Instant View</a></li>
|
|
||||||
</ul>
|
|
||||||
</div>
|
|
||||||
</div>
|
|
||||||
<div class="footer_columns_wrap footer_mobile">
|
|
||||||
<div class="footer_column">
|
|
||||||
<h5><a href="/faq">About</a></h5>
|
|
||||||
</div>
|
|
||||||
<div class="footer_column">
|
|
||||||
<h5><a href="/blog">Blog</a></h5>
|
|
||||||
</div>
|
|
||||||
<div class="footer_column">
|
|
||||||
<h5><a href="/apps">Apps</a></h5>
|
|
||||||
</div>
|
|
||||||
<div class="footer_column">
|
|
||||||
<h5><a href="//core.telegram.org/">Platform</a></h5>
|
|
||||||
</div>
|
|
||||||
<div class="footer_column">
|
|
||||||
<h5><a href="https://twitter.com/telegram" target="_blank" data-track="Follow/Twitter" onclick="trackDlClick(this, event)">Twitter</a></h5>
|
|
||||||
</div>
|
|
||||||
</div>
|
|
||||||
</div>
|
|
||||||
<script src="/js/main.js?42"></script>
|
|
||||||
|
|
||||||
<script>initScrollVideos(true);
|
|
||||||
twitterCustomShareInit();
|
|
||||||
blogSideImageInit();
|
|
||||||
backToTopInit("Go up");
|
|
||||||
removePreloadInit();
|
|
||||||
</script>
|
|
||||||
</body>
|
|
||||||
</html>
|
|
||||||
|
|
|
@ -1,319 +0,0 @@
|
||||||
<!DOCTYPE html>
|
|
||||||
<html class="">
|
|
||||||
<head>
|
|
||||||
<meta charset="utf-8">
|
|
||||||
<title>Payments 2.0, Scheduled Voice Chats, New Web Versions</title>
|
|
||||||
<meta name="viewport" content="width=device-width, initial-scale=1.0">
|
|
||||||
<meta property="og:title" content="Payments 2.0, Scheduled Voice Chats, New Web Versions">
|
|
||||||
<meta property="og:image" content="https://telegram.org/file/464001783/2/6Is-qGJkgX4.92603/d4d7fe3e0fc14ff3ba">
|
|
||||||
<meta property="og:site_name" content="Telegram">
|
|
||||||
<meta property="og:description" content="This update brings Payments 2.0 for all Telegram chats, Scheduling and Mini Profiles for Voice Chats, new versions of Telegram Web for your browser, and more.">
|
|
||||||
<meta property="article:published_time" content="2021-04-26T12:40:20+00:00"><meta name="twitter:card" content="summary_large_image" /><meta name="twitter:image" content="https://telegram.org/file/464001783/2/6Is-qGJkgX4.92603/d4d7fe3e0fc14ff3ba" />
|
|
||||||
<meta property="fb:app_id" content="254098051407226">
|
|
||||||
<meta property="vk:app_id" content="3782569">
|
|
||||||
<meta name="apple-itunes-app" content="app-id=686449807">
|
|
||||||
<meta name="telegram:channel" content="@telegram">
|
|
||||||
<link rel="canonical" href="https://telegram.org/blog/payments-2-0-scheduled-voice-chats" />
|
|
||||||
<link rel="icon" type="image/svg+xml" href="/img/website_icon.svg?4">
|
|
||||||
<link rel="alternate icon" href="/favicon.ico?4" type="image/x-icon" />
|
|
||||||
<link href="/css/bootstrap.min.css?3" rel="stylesheet">
|
|
||||||
|
|
||||||
<link href="/css/telegram.css?212" rel="stylesheet" media="screen">
|
|
||||||
<style>
|
|
||||||
</style>
|
|
||||||
</head>
|
|
||||||
<body class="preload">
|
|
||||||
<div id="fb-root"></div>
|
|
||||||
<div class="tl_page_wrap">
|
|
||||||
<div class="tl_page_head navbar navbar-static-top navbar navbar-tg">
|
|
||||||
<div class="navbar-inner">
|
|
||||||
<div class="container clearfix">
|
|
||||||
<ul class="nav navbar-nav navbar-right"><li class="dropdown top_lang_select"><a class="dropdown-toggle" onclick="return dropdownClick(this, event)" href="#"><i class="dev_top_lang_icon"></i> <b class="minicaret"></b></a>
|
|
||||||
<ul class="dropdown-menu"><li class=""><a href="?setln=en">English</a></li><li class="long "><a href="?setln=id">Bahasa Indonesia</a></li><li class="long "><a href="?setln=ms">Bahasa Melayu</a></li><li class=""><a href="?setln=de">Deutsch</a></li><li class=""><a href="?setln=es">Español</a></li><li class=""><a href="?setln=fr">Français</a></li><li class=""><a href="?setln=it">Italiano</a></li><li class=""><a href="?setln=nl">Nederlands</a></li><li class=""><a href="?setln=uz">O‘zbek</a></li><li class=""><a href="?setln=pl">Polski</a></li><li class="long "><a href="?setln=pt-br">Português (Brasil)</a></li><li class=""><a href="?setln=tr">Türkçe</a></li><li class=""><a href="?setln=be">Беларуская</a></li><li class=""><a href="?setln=ru">Русский</a></li><li class=""><a href="?setln=uk">Українська</a></li><li class=""><a href="?setln=ar">العربية</a></li><li class=""><a href="?setln=fa">فارسی</a></li><li class=""><a href="?setln=ko">한국어</a></li></ul></li><li class="navbar-twitter hidden-xs"><a href="https://twitter.com/telegram" target="_blank" data-track="Follow/Twitter" onclick="trackDlClick(this, event)"><i class="icon icon-twitter"></i> Twitter</a></li></ul>
|
|
||||||
<ul class="nav navbar-nav">
|
|
||||||
<li class=""><a href="/">Home</a></li>
|
|
||||||
<li class=""><a href="/faq">FAQ</a></li>
|
|
||||||
<li class=""><a href="/apps">Apps</a></li>
|
|
||||||
<li class="hidden-xs "><a href="//core.telegram.org/api">API</a></li>
|
|
||||||
<li class="hidden-xs "><a href="//core.telegram.org/mtproto">Protocol</a></li>
|
|
||||||
</ul>
|
|
||||||
</div>
|
|
||||||
</div>
|
|
||||||
</div>
|
|
||||||
<div class="container clearfix tl_page_container ">
|
|
||||||
<div class="tl_page">
|
|
||||||
<div class="tl_contest_page_wrap">
|
|
||||||
<div class="tl_blog_side_blog"><div class="side_blog_wrap">
|
|
||||||
<div class="side_blog">
|
|
||||||
<a href="/blog" class="side_blog_header">Recent News</a>
|
|
||||||
<div class="side_blog_entries">
|
|
||||||
<a href="/blog/payments-2-0-scheduled-voice-chats" class="side_blog_entry">
|
|
||||||
<div class="side_blog_date">Apr 26</div>
|
|
||||||
<div class="side_blog_title">Payments 2.0, Scheduled Voice Chats, New Web Versions</div>
|
|
||||||
</a><a href="/blog/voice-chats-on-steroids" class="side_blog_entry">
|
|
||||||
<div class="side_blog_date">Mar 19</div>
|
|
||||||
<div class="side_blog_title">Voice Chats 2.0: Channels, Millions of Listeners, Recorded Chats, Admin Tools</div>
|
|
||||||
</a><a href="/blog/autodelete-inv2" class="side_blog_entry">
|
|
||||||
<div class="side_blog_date">Feb 23</div>
|
|
||||||
<div class="side_blog_title">Auto-Delete, Widgets and Expiring Invite Links</div>
|
|
||||||
</a><a href="/blog/move-history" class="side_blog_entry">
|
|
||||||
<div class="side_blog_date">Jan 28</div>
|
|
||||||
<div class="side_blog_title">Moving Chat History from Other Apps</div>
|
|
||||||
</a><a href="/blog/voice-chats" class="side_blog_entry">
|
|
||||||
<div class="side_blog_date">Dec 23</div>
|
|
||||||
<div class="side_blog_title">Voice Chats Done Right</div>
|
|
||||||
</a><a href="/blog/pinned-messages-locations-playlists" class="side_blog_entry">
|
|
||||||
<div class="side_blog_date">Oct 30</div>
|
|
||||||
<div class="side_blog_title">Pinned Messages 2.0, Improved Live Locations, Playlists and More</div>
|
|
||||||
</a><a href="/blog/filters-anonymous-admins-comments" class="side_blog_entry">
|
|
||||||
<div class="side_blog_date">Sep 30</div>
|
|
||||||
<div class="side_blog_title">Search Filters, Anonymous Admins, Channel Comments</div>
|
|
||||||
</a>
|
|
||||||
</div>
|
|
||||||
</div>
|
|
||||||
</div></div>
|
|
||||||
<div id="dev_page_content_wrap" class=" ">
|
|
||||||
<div class="dev_page_bread_crumbs"></div>
|
|
||||||
<h1 id="dev_page_title">Payments 2.0, Scheduled Voice Chats, New Web Versions</h1>
|
|
||||||
|
|
||||||
<div id="dev_page_content"><div class="blog_side_image_wrap">
|
|
||||||
<picture class="dev_page_tgsticker blog_side_image js-tgsticker_image" style="width:160px;"><div style="padding-top:100%"></div><source type="application/x-tgsticker" srcset="/file/464001796/2/hhx2H4VU8Mc.10570/cd94e7c2bc1bb42174"><img src="/file/464001796/3/RuL3KG9PxoQ.32309.png/9492993f15dad7ef3c" /></picture>
|
|
||||||
</div>
|
|
||||||
|
|
||||||
<div class="blog_wide_image">
|
|
||||||
<a href="/file/464001036/3/9ZnITFnkib4.283442/5dc5b1f30fa97ec631" target="_blank"><img src="/file/464001783/2/6Is-qGJkgX4.92603/d4d7fe3e0fc14ff3ba" srcset="/file/464001036/3/9ZnITFnkib4.283442/5dc5b1f30fa97ec631, 1200w" title="Things in this picture you can't buy: Time Machine, Town Hall, Telegram, Doge's smile.
|
|
||||||
" alt="Payments 2.0, Scheduled Voice Chats, New Web Versions and More"/></a>
|
|
||||||
</div>
|
|
||||||
|
|
||||||
<p>This update brings <a href="#payments-2-0">Payments 2.0</a> for all Telegram chats, <a href="#scheduled-voice-chats">Scheduling</a> and <a href="#mini-profiles-for-voice-chats">Mini Profiles</a> for <strong>Voice Chats</strong>, <a href="#new-web-versions">new Telegram apps</a> for your browser, and more.</p>
|
|
||||||
<h3><a class="anchor" name="payments-2-0" href="#payments-2-0"><i class="anchor-icon"></i></a>Payments 2.0</h3>
|
|
||||||
<p>We first added support for payments <a href="https://telegram.org/evolution#may-2017">in 2017</a>. <strong>Payment bots</strong> allowed users to securely pay for goods and services without leaving the app – anything from ordering a pizza to hailing a taxi, to replacing winter tires when you're tired of winter.</p>
|
|
||||||
<p>Starting today, merchants can natively accept credit card payments in <strong>any chat</strong>, relying on <strong>9</strong> <a href="https://core.telegram.org/bots/payments#supported-payment-providers">integrated third-party payment providers</a> such as <strong>Stripe</strong>.</p>
|
|
||||||
<p>Buyers can <strong>add a tip</strong> whenever they make a purchase to show some extra love to their favorite artists, stores, or delivery drivers. Payments can now be made from any app – including <a href="https://telegram.org/apps">desktop apps</a>.</p>
|
|
||||||
<div class="blog_video_player_wrap" style="max-width: 400px; margin: 20px auto 20px;">
|
|
||||||
<video class="blog_video_player tl_blog_vid_autoplay" onclick="videoTogglePlay(this)" autoplay loop controls muted poster="/file/464001377/1/0o3vSvY22g8.123356/deb4ed6951d780f7b7" style="max-width: 400px;" title="If your pizza place can't deliver a clone army, you're buying pizza from the wrong shop." alt="Video: Ordering a pizza through a Telegram channel">
|
|
||||||
<source src="/file/464001705/2/Hg-klQnZ_n4.4889245.mp4/d324511ffdab7b4668" type="video/mp4">
|
|
||||||
</video>
|
|
||||||
</div>
|
|
||||||
|
|
||||||
<p>This is a free and privacy-conscious platform – Telegram takes <strong>no commission</strong>, and <strong>stores no payment information</strong>. Credit card information is sent directly to the payment provider and shipping information is shared with the merchant so they can send you your goods. </p>
|
|
||||||
<blockquote>
|
|
||||||
<p>We've created a <a href="https://t.me/TestStore/2">demo channel</a> with the most exotic imaginary goods and services no money can buy, so you can <strong>test how this works</strong> without spending a penny.</p>
|
|
||||||
</blockquote>
|
|
||||||
<p>Any merchant can start using the <strong>Payments API</strong> without getting additional approvals from Telegram. Developers interested in integrating payments can find all the details in the <a href="https://core.telegram.org/bots/payments">Payments Manual</a>.</p>
|
|
||||||
<h3><a class="anchor" name="scheduled-voice-chats" href="#scheduled-voice-chats"><i class="anchor-icon"></i></a>Scheduled Voice Chats</h3>
|
|
||||||
<p>Voice Chats give users the option to catch up with a few friends or tune in to <a href="https://telegram.org/blog/voice-chats-on-steroids">massive broadcasts</a> with millions of listeners.</p>
|
|
||||||
<p>Admins of groups and channels can now <strong>schedule a Voice Chat</strong> for a <strong>particular date and time</strong> instead of creating one right away. This gives community members time to let their friends know and get the popcorn ready.</p>
|
|
||||||
<div class="blog_video_player_wrap" style="max-width: 400px; margin: 20px auto 20px;">
|
|
||||||
<video class="blog_video_player tl_blog_vid_autoplay" onclick="videoTogglePlay(this)" autoplay loop controls muted poster="/file/464001090/3/-evCuN9k1S8.75906/99c32204ebac3350b6" style="max-width: 400px;" title="A voice chat is never early, nor is it late. It arrives precisely when the admins press the Start Chat button." alt="Video: Schedulling a voice chat">
|
|
||||||
<source src="/file/464001976/2/jOceTgALY6s.4484550.mp4/1621ab6e361ebdd04f" type="video/mp4">
|
|
||||||
</video>
|
|
||||||
</div>
|
|
||||||
|
|
||||||
<p>Users will see a colorful <strong>countdown</strong> at the top of the chat. Those too busy to watch the countdown can opt to receive a <strong>notification</strong> when the voice chat starts.</p>
|
|
||||||
<div class="blog_video_player_wrap" style="max-width: 400px; margin: 20px auto 20px;">
|
|
||||||
<video class="blog_video_player tl_blog_vid_autoplay" onclick="videoTogglePlay(this)" autoplay loop controls muted poster="/file/464001033/3/mG6sW0ZhJnE.228053/45beea8197fbe8d8a5" style="max-width: 400px;" title="It's like time travel, but without the Butterfly Effect" alt="Video: countdown to a voice chat and setting a reminder">
|
|
||||||
<source src="/file/464001526/4/vc1VNWWtB_E.4107154.mp4/cb32f323bf5ba16ef3" type="video/mp4">
|
|
||||||
</video>
|
|
||||||
</div>
|
|
||||||
|
|
||||||
<blockquote>
|
|
||||||
<p>Admins can schedule a Voice Chat from their Group or Channel's profile page. On <strong>Android</strong>, <em>tap ⋮ > Start Voice chat > Schedule Voice Chat</em>. On <strong>iOS</strong>, tap the Voice Chat button and select <em>Schedule Voice Chat</em>.</p>
|
|
||||||
<p>Don't worry, the chat won't start automatically when the countdown reaches zero – only when an admin presses the <em>Start Now</em> button.</p>
|
|
||||||
</blockquote>
|
|
||||||
<h3><a class="anchor" name="mini-profiles-for-voice-chats" href="#mini-profiles-for-voice-chats"><i class="anchor-icon"></i></a>Mini Profiles for Voice Chats</h3>
|
|
||||||
<p>You can now <strong>expand profile pictures</strong> and <strong>bios</strong> to get a better idea of who you're chatting with – without leaving the voice chat window.</p>
|
|
||||||
<div class="blog_video_player_wrap" style="max-width: 400px; margin: 20px auto 20px;">
|
|
||||||
<video class="blog_video_player tl_blog_vid_autoplay" onclick="videoTogglePlay(this)" autoplay loop controls muted poster="/file/464001039/2/c9GQ0w-7enI.149639/f76f58da838ae2ff4a" style="max-width: 400px;" title="You can be whoever you want – even your real self." alt="Video: Viewing and editing profile info without leaving the voice chat">
|
|
||||||
<source src="/file/464001472/2/alqsffHuL_I.3726188.mp4/e459439d51ca579096" type="video/mp4">
|
|
||||||
</video>
|
|
||||||
</div>
|
|
||||||
|
|
||||||
<p>You can also <strong>change your profile picture</strong> and <strong>edit your bio</strong> without leaving the chat – like changing from Shirley to Grognak the Barbarian as you meet for Dungeons and Dragons.</p>
|
|
||||||
<h3><a class="anchor" name="new-web-versions" href="#new-web-versions"><i class="anchor-icon"></i></a>New Web Versions</h3>
|
|
||||||
<p>Telegram's first Web Version was launched in <strong><a href="https://telegram.org/evolution#february-2014">2014</a></strong>. Ever since, our pet demon of internal competition kept whispering: 'Why have one web version when you can have two?'</p>
|
|
||||||
<p>Today we're adding <strong>two</strong> new, fully-featured Telegram web apps – both supporting <strong>animated stickers</strong>, <strong>dark mode</strong>, <strong>chat folders</strong> and <strong>more</strong>.</p>
|
|
||||||
<div class="blog_video_player_wrap" style="max-width: 600px; margin: 20px auto 20px;">
|
|
||||||
<video class="blog_video_player tl_blog_vid_autoplay" onclick="videoTogglePlay(this)" autoplay loop controls muted poster="/file/464001927/1/-CYVE7QWvfI.21607/2395c52714f2aa4e3c" style="max-width: 600px;" title="Spiderman uses Telegram Web – and so should you!" alt="Video: New Telegram Web">
|
|
||||||
<source src="/file/464001465/2/ARh7OuWtU08.4791438.mp4/102f0d2a1adba4ab2e" type="video/mp4">
|
|
||||||
</video>
|
|
||||||
</div>
|
|
||||||
|
|
||||||
<p>With the new web versions you can get instant access to your chats on any device – <strong>desktop</strong> or <strong>mobile</strong>. These apps are incredibly efficient, requiring only a <strong>400 KB</strong> download (that's like two photos of a medium-sized cat) and <strong>no installation</strong>.</p>
|
|
||||||
<p>Take them for a test drive, and see which one you like best:</p>
|
|
||||||
<ul>
|
|
||||||
<li><a href="https://webk.telegram.org">Telegram Web K</a></li>
|
|
||||||
<li><a href="https://webz.telegram.org">Telegram Web Z</a></li>
|
|
||||||
</ul>
|
|
||||||
<p>Like other <a href="https://telegram.org/apps">Telegram apps</a>, all our web versions are <strong>standalone</strong>: once you've logged in, you <strong>do not</strong> need to keep your phone nearby or connected to the internet. </p>
|
|
||||||
<blockquote>
|
|
||||||
<p>If you find an issue with either of the new apps, let us know using our <a href="https://bugs.telegram.org/c/4002">Suggestions Platform</a>.</p>
|
|
||||||
</blockquote>
|
|
||||||
<h3><a class="anchor" name="direct-download-for-android" href="#direct-download-for-android"><i class="anchor-icon"></i></a>Direct Download for Android</h3>
|
|
||||||
<p>In case you're more of an app person, you can now also download Telegram for Android <strong>directly</strong> from <a href="https://telegram.org/android">telegram.org</a>. Apps installed from the website will <strong>automatically update</strong> to the latest version. You are likely to get new versions several <strong>days</strong> or <strong>weeks faster</strong> this way because you won't have to wait for updates to be reviewed by the store.</p>
|
|
||||||
<!--
|
|
||||||
you can also download our Android app directly from [telegram.org](https://telegram.org/android). Apps installed from the website will **automatically update** to the latest version. You are likely to get new versions **faster** this way because you won't have to wait for updates to be reviewed by the store.
|
|
||||||
-->
|
|
||||||
|
|
||||||
<div class="blog_video_player_wrap" style="max-width: 400px; margin: 20px auto 20px;">
|
|
||||||
<video class="blog_video_player tl_blog_vid_autoplay" onclick="videoTogglePlay(this)" autoplay loop controls muted poster="/file/464001530/4/3B7bJtho4lE.137943/5cc65eb685af85e168" style="max-width: 400px;" title="'Farm to table' reinvented for the 21st century" alt="Video: How to install Telegram for Android on your device">
|
|
||||||
<source src="/file/464001495/2/qWwWkXg2lBg.2882672.mp4/182145776274e3bcfd" type="video/mp4">
|
|
||||||
</video>
|
|
||||||
</div>
|
|
||||||
|
|
||||||
<blockquote>
|
|
||||||
<p>Telegram supports <a href="https://core.telegram.org/reproducible-builds">reproducible builds</a>, so you can always be sure that the app you have on your device was built from the <strong>exact same open source code</strong> that is <a href="https://telegram.org/apps#source-code">published on GitHub</a>.</p>
|
|
||||||
</blockquote>
|
|
||||||
<h3><a class="anchor" name="pinch-to-zoom" href="#pinch-to-zoom"><i class="anchor-icon"></i></a>Pinch to zoom</h3>
|
|
||||||
<p>Photos and videos can now be <strong>expanded</strong> directly from the chat – simply pinch to zoom in right away, without tapping to open the media viewer.</p>
|
|
||||||
<div class="blog_video_player_wrap" style="max-width: 400px; margin: 20px auto 20px;">
|
|
||||||
<video class="blog_video_player tl_blog_vid_autoplay" onclick="videoTogglePlay(this)" autoplay loop controls muted poster="/file/464001300/3/0gZ3ZvEF7vs.228667/4e40851684ad7ffd64" style="max-width: 400px;" title="There's no good word for the opposite of pinching. Trust me, I spent the last decade asking ancient monks in every mountain range." alt="Video: Using a pinch-like gesture to zoom into photos and videos in a chat without opening them">
|
|
||||||
<source src="/file/464001954/2/yxBLVrUzcok.3997163.mp4/32eca55e3c7848e1ea" type="video/mp4">
|
|
||||||
</video>
|
|
||||||
</div>
|
|
||||||
|
|
||||||
<h3><a class="anchor" name="improved-video-player" href="#improved-video-player"><i class="anchor-icon"></i></a>Improved Video Player</h3>
|
|
||||||
<p>When watching a video from the media player on iOS, <strong>press and hold</strong> the + or - 15s buttons to <strong>fast-forward</strong> and <strong>rewind</strong>. On Android press and hold on the right or left side of the screen to do the same, and <strong>double-tap</strong> to jump 10 seconds in either direction. </p>
|
|
||||||
<div class="blog_video_player_wrap" style="max-width: 400px; margin: 20px auto 20px;">
|
|
||||||
<video class="blog_video_player tl_blog_vid_autoplay" onclick="videoTogglePlay(this)" autoplay loop controls muted poster="/file/464001059/1/qGVj6UNxCks.213988/e47d40a917b88136cd" style="max-width: 400px;" title="Legends mention a secret tap-combo that changes any video into a rickroll." alt="Video: rewinding, fast-forwarding and jumping forward and back in a video">
|
|
||||||
<source src="/file/464001276/2/FZzFP_FUXhk.2913084.mp4/926e5e4565d072b495" type="video/mp4">
|
|
||||||
</video>
|
|
||||||
</div>
|
|
||||||
|
|
||||||
<h3><a class="anchor" name="tips-and-new-android-animations" href="#tips-and-new-android-animations"><i class="anchor-icon"></i></a>Tips and New Android Animations</h3>
|
|
||||||
<p>The Android app gets <strong>smoother</strong> and <strong>more dynamic</strong> with each update – check out the new animations when opening the side menu or swiping back to the chat list from a chat.</p>
|
|
||||||
<div class="blog_video_player_wrap" style="max-width: 400px; margin: 20px auto 20px;">
|
|
||||||
<video class="blog_video_player tl_blog_vid_autoplay" onclick="videoTogglePlay(this)" autoplay loop controls muted poster="/file/464001596/5/ehpumV4wKB0.150589/76af3a0e755a3fbded" style="max-width: 400px;" title="Like butter – only smoother" alt="Video: New animations on Android when opening the side menu and swiping back from a chat">
|
|
||||||
<source src="/file/464001978/4/F_14rk76i2o.1164999.mp4/8c6903bb14d4b03601" type="video/mp4">
|
|
||||||
</video>
|
|
||||||
</div>
|
|
||||||
|
|
||||||
<blockquote>
|
|
||||||
<p>To learn more about what Telegram can do, tap <strong>Telegram Features</strong> from the side menu or visit the <a href="https://t.me/TelegramTips/233">@TelegramTips</a> channel.</p>
|
|
||||||
</blockquote>
|
|
||||||
<h3><a class="anchor" name="telegram-jobs" href="#telegram-jobs"><i class="anchor-icon"></i></a>Telegram Jobs</h3>
|
|
||||||
<p>That's it for today. We are already working on the next update — and if you just thought <em>'Wow, that's the spirit!'</em> rather than <em>'Poor people, have some rest'</em>, check out our list of <strong><a href="https://telegram.org/jobs">open positions</a></strong>.</p>
|
|
||||||
<div><br></div>
|
|
||||||
|
|
||||||
<p><em>April 26, 2021<br>The Telegram Team</em></p>
|
|
||||||
</div>
|
|
||||||
|
|
||||||
</div>
|
|
||||||
<div class="tl_main_share clearfix">
|
|
||||||
<a href="https://t.me/share/url?url=https%3A%2F%2Ftelegram.org%2Fblog%2Fpayments-2-0-scheduled-voice-chats&text=Introducing%20Payments%202.0%2C%20Scheduled%20Voice%20Chats%2C%20New%20Telegram%20Web%20and%20more." class="tl_telegram_share_btn" id="tl_telegram_share_btn" data-text="Introducing Payments 2.0, Scheduled Voice Chats, New Telegram Web and more." data-url="https://telegram.org/blog/payments-2-0-scheduled-voice-chats"><i class="tl_telegram_share_icon"></i><span class="tl_telegram_share_label" target="_blank">Forward</span></a>
|
|
||||||
<a href="https://twitter.com/share" class="tl_twitter_share_btn" id="tl_twitter_share_btn" data-text="Introducing Payments 2.0, Scheduled Voice Chats, New Telegram Web and more." data-url="https://telegram.org/blog/payments-2-0-scheduled-voice-chats" data-via="Telegram">Tweet <span class="tl_twitter_share_cnt"></span></a>
|
|
||||||
</div>
|
|
||||||
|
|
||||||
</div>
|
|
||||||
<div class="tl_main_recent_news_wrap tlb_other_news_wrap tl_blog_list_page_wrap">
|
|
||||||
<h3 class="tl_main_recent_news_header">
|
|
||||||
<a href="/blog">Other News</a>
|
|
||||||
</h3>
|
|
||||||
<div class="tl_main_recent_news_cards clearfix">
|
|
||||||
<a class="dev_blog_card_link_wrap" href="/blog/voice-chats-on-steroids"><div class="dev_blog_card_wrap">
|
|
||||||
<img class="dev_blog_card_image" src="https://telegram.org/file/464001855/3/O31CcF_-a20.86962/cafa0c3d7dd2df1134" />
|
|
||||||
<div class="dev_blog_card_alltext_wrap">
|
|
||||||
<h4 class="dev_blog_card_title">Voice Chats 2.0: Channels, Millions of Listeners, Recorded Chats, Admin Tools</h4>
|
|
||||||
<div class="dev_blog_card_lead">Voice Chats first appeared in December, adding a new dimension of live talk to Telegram groups. Starting today, they become available in…</div>
|
|
||||||
</div>
|
|
||||||
<div class="dev_blog_card_date">Mar 19, 2021</div>
|
|
||||||
</div></a><a class="dev_blog_card_link_wrap" href="/blog/autodelete-inv2"><div class="dev_blog_card_wrap">
|
|
||||||
<img class="dev_blog_card_image" src="https://telegram.org/file/464001701/5/WvHD2TGPSzU.74913/648f3e17886f6c96f8" />
|
|
||||||
<div class="dev_blog_card_alltext_wrap">
|
|
||||||
<h4 class="dev_blog_card_title">Auto-Delete, Widgets and Expiring Invite Links</h4>
|
|
||||||
<div class="dev_blog_card_lead">This update brings an auto-delete timer for messages in any chat, as well as new flexible invite links and faster access to your chats…</div>
|
|
||||||
</div>
|
|
||||||
<div class="dev_blog_card_date">Feb 23, 2021</div>
|
|
||||||
</div></a><a class="dev_blog_card_link_wrap" href="/blog/move-history"><div class="dev_blog_card_wrap">
|
|
||||||
<img class="dev_blog_card_image" src="https://telegram.org/file/464001185/1/Z6LVvcYB03g.64305/e8ff8c87c4d656cbe1" />
|
|
||||||
<div class="dev_blog_card_alltext_wrap">
|
|
||||||
<h4 class="dev_blog_card_title">Moving Chat History from Other Apps</h4>
|
|
||||||
<div class="dev_blog_card_lead">Over 100 million new users joined Telegram this January, seeking more privacy and freedom. But what about the messages and memories that remain in older apps? Starting today, everyone…</div>
|
|
||||||
</div>
|
|
||||||
<div class="dev_blog_card_date">Jan 28, 2021</div>
|
|
||||||
</div></a><a class="dev_blog_card_link_wrap" href="/blog/voice-chats"><div class="dev_blog_card_wrap">
|
|
||||||
<img class="dev_blog_card_image" src="https://telegram.org/file/464001202/4/Mo4VjRb1ndM.81564/729451f158ff1f6267" />
|
|
||||||
<div class="dev_blog_card_alltext_wrap">
|
|
||||||
<h4 class="dev_blog_card_title">Voice Chats Done Right</h4>
|
|
||||||
<div class="dev_blog_card_lead">Today, Telegram groups get an entire new dimension with Voice Chats – persistent conference calls that members can join and leave as they please. Our 12th update in 2020 brings them…</div>
|
|
||||||
</div>
|
|
||||||
<div class="dev_blog_card_date">Dec 23, 2020</div>
|
|
||||||
</div></a>
|
|
||||||
</div>
|
|
||||||
</div>
|
|
||||||
|
|
||||||
</div>
|
|
||||||
</div>
|
|
||||||
</div>
|
|
||||||
<div class="footer_wrap">
|
|
||||||
<div class="footer_columns_wrap footer_desktop">
|
|
||||||
<div class="footer_column footer_column_telegram">
|
|
||||||
<h5>Telegram</h5>
|
|
||||||
<div class="footer_telegram_description"></div>
|
|
||||||
Telegram is a cloud-based mobile and desktop messaging app with a focus on security and speed.
|
|
||||||
</div>
|
|
||||||
|
|
||||||
<div class="footer_column">
|
|
||||||
<h5><a href="/faq">About</a></h5>
|
|
||||||
<ul>
|
|
||||||
<li><a href="/faq">FAQ</a></li>
|
|
||||||
<li><a href="/blog">Blog</a></li>
|
|
||||||
<li><a href="/jobs">Jobs</a></li>
|
|
||||||
</ul>
|
|
||||||
</div>
|
|
||||||
<div class="footer_column">
|
|
||||||
<h5><a href="/apps#mobile-apps">Mobile Apps</a></h5>
|
|
||||||
<ul>
|
|
||||||
<li><a href="/dl/ios">iPhone/iPad</a></li>
|
|
||||||
<li><a href="/dl/android">Android</a></li>
|
|
||||||
<li><a href="/dl/wp">Windows Phone</a></li>
|
|
||||||
</ul>
|
|
||||||
</div>
|
|
||||||
<div class="footer_column">
|
|
||||||
<h5><a href="/apps#desktop-apps">Desktop Apps</a></h5>
|
|
||||||
<ul>
|
|
||||||
<li><a href="//desktop.telegram.org/">PC/Mac/Linux</a></li>
|
|
||||||
<li><a href="//macos.telegram.org/">macOS</a></li>
|
|
||||||
<li><a href="/dl/web">Web-browser</a></li>
|
|
||||||
</ul>
|
|
||||||
</div>
|
|
||||||
<div class="footer_column footer_column_platform">
|
|
||||||
<h5><a href="//core.telegram.org/">Platform</a></h5>
|
|
||||||
<ul>
|
|
||||||
<li><a href="//core.telegram.org/api">API</a></li>
|
|
||||||
<li><a href="//translations.telegram.org/">Translations</a></li>
|
|
||||||
<li><a href="//instantview.telegram.org/">Instant View</a></li>
|
|
||||||
</ul>
|
|
||||||
</div>
|
|
||||||
</div>
|
|
||||||
<div class="footer_columns_wrap footer_mobile">
|
|
||||||
<div class="footer_column">
|
|
||||||
<h5><a href="/faq">About</a></h5>
|
|
||||||
</div>
|
|
||||||
<div class="footer_column">
|
|
||||||
<h5><a href="/blog">Blog</a></h5>
|
|
||||||
</div>
|
|
||||||
<div class="footer_column">
|
|
||||||
<h5><a href="/apps">Apps</a></h5>
|
|
||||||
</div>
|
|
||||||
<div class="footer_column">
|
|
||||||
<h5><a href="//core.telegram.org/">Platform</a></h5>
|
|
||||||
</div>
|
|
||||||
<div class="footer_column">
|
|
||||||
<h5><a href="https://twitter.com/telegram" target="_blank" data-track="Follow/Twitter" onclick="trackDlClick(this, event)">Twitter</a></h5>
|
|
||||||
</div>
|
|
||||||
</div>
|
|
||||||
</div>
|
|
||||||
<script src="/js/main.js?42"></script>
|
|
||||||
<script src="/js/tgsticker.js?24"></script>
|
|
||||||
|
|
||||||
<script>mainInitTgStickers({"maxDeviceRatio":2,"cachingModulo":4});
|
|
||||||
initScrollVideos(true);
|
|
||||||
twitterCustomShareInit();
|
|
||||||
blogSideImageInit();
|
|
||||||
backToTopInit("Go up");
|
|
||||||
removePreloadInit();
|
|
||||||
</script>
|
|
||||||
</body>
|
|
||||||
</html>
|
|
||||||
|
|
|
@ -1,225 +0,0 @@
|
||||||
<!DOCTYPE html>
|
|
||||||
<html class="">
|
|
||||||
<head>
|
|
||||||
<meta charset="utf-8">
|
|
||||||
<title>Stickers Done Right</title>
|
|
||||||
<meta name="viewport" content="width=device-width, initial-scale=1.0">
|
|
||||||
<meta property="og:title" content="Stickers Done Right">
|
|
||||||
<meta property="og:image" content="https://telegram.org/file/811140496/1/V_B_W6uSP9o/8dc57ec0c8efe81a4d">
|
|
||||||
<meta property="og:site_name" content="Telegram">
|
|
||||||
<meta property="og:description" content="#Telegram launches free emoji-based stickers platform for artists and users.">
|
|
||||||
<meta property="article:published_time" content="2015-01-02T23:20:56+00:00"><meta name="twitter:card" content="summary_large_image" /><meta name="twitter:image" content="https://telegram.org/file/811140496/1/V_B_W6uSP9o/8dc57ec0c8efe81a4d" />
|
|
||||||
<meta property="fb:app_id" content="254098051407226">
|
|
||||||
<meta property="vk:app_id" content="3782569">
|
|
||||||
<meta name="apple-itunes-app" content="app-id=686449807">
|
|
||||||
<meta name="telegram:channel" content="@telegram">
|
|
||||||
<link rel="canonical" href="https://telegram.org/blog/stickers" />
|
|
||||||
<link rel="icon" type="image/svg+xml" href="/img/website_icon.svg?4">
|
|
||||||
<link rel="alternate icon" href="/favicon.ico?4" type="image/x-icon" />
|
|
||||||
<link href="/css/bootstrap.min.css?3" rel="stylesheet">
|
|
||||||
|
|
||||||
<link href="/css/telegram.css?212" rel="stylesheet" media="screen">
|
|
||||||
<style>
|
|
||||||
</style>
|
|
||||||
</head>
|
|
||||||
<body class="preload">
|
|
||||||
<div id="fb-root"></div>
|
|
||||||
<div class="tl_page_wrap">
|
|
||||||
<div class="tl_page_head navbar navbar-static-top navbar navbar-tg">
|
|
||||||
<div class="navbar-inner">
|
|
||||||
<div class="container clearfix">
|
|
||||||
<ul class="nav navbar-nav navbar-right"><li class="dropdown top_lang_select"><a class="dropdown-toggle" onclick="return dropdownClick(this, event)" href="#"><i class="dev_top_lang_icon"></i> <b class="minicaret"></b></a>
|
|
||||||
<ul class="dropdown-menu"><li class=""><a href="?setln=en">English</a></li><li class="long "><a href="?setln=id">Bahasa Indonesia</a></li><li class="long "><a href="?setln=ms">Bahasa Melayu</a></li><li class=""><a href="?setln=de">Deutsch</a></li><li class=""><a href="?setln=es">Español</a></li><li class=""><a href="?setln=fr">Français</a></li><li class=""><a href="?setln=it">Italiano</a></li><li class=""><a href="?setln=nl">Nederlands</a></li><li class=""><a href="?setln=uz">O‘zbek</a></li><li class=""><a href="?setln=pl">Polski</a></li><li class="long "><a href="?setln=pt-br">Português (Brasil)</a></li><li class=""><a href="?setln=tr">Türkçe</a></li><li class=""><a href="?setln=be">Беларуская</a></li><li class=""><a href="?setln=ru">Русский</a></li><li class=""><a href="?setln=uk">Українська</a></li><li class=""><a href="?setln=ar">العربية</a></li><li class=""><a href="?setln=fa">فارسی</a></li><li class=""><a href="?setln=ko">한국어</a></li></ul></li><li class="navbar-twitter hidden-xs"><a href="https://twitter.com/telegram" target="_blank" data-track="Follow/Twitter" onclick="trackDlClick(this, event)"><i class="icon icon-twitter"></i> Twitter</a></li></ul>
|
|
||||||
<ul class="nav navbar-nav">
|
|
||||||
<li class=""><a href="/">Home</a></li>
|
|
||||||
<li class=""><a href="/faq">FAQ</a></li>
|
|
||||||
<li class=""><a href="/apps">Apps</a></li>
|
|
||||||
<li class="hidden-xs "><a href="//core.telegram.org/api">API</a></li>
|
|
||||||
<li class="hidden-xs "><a href="//core.telegram.org/mtproto">Protocol</a></li>
|
|
||||||
</ul>
|
|
||||||
</div>
|
|
||||||
</div>
|
|
||||||
</div>
|
|
||||||
<div class="container clearfix tl_page_container ">
|
|
||||||
<div class="tl_page">
|
|
||||||
<div class="tl_contest_page_wrap">
|
|
||||||
<div class="tl_blog_side_blog"><div class="side_blog_wrap">
|
|
||||||
<div class="side_blog">
|
|
||||||
<a href="/blog" class="side_blog_header">Recent News</a>
|
|
||||||
<div class="side_blog_entries">
|
|
||||||
<a href="/blog/payments-2-0-scheduled-voice-chats" class="side_blog_entry">
|
|
||||||
<div class="side_blog_date">Apr 26</div>
|
|
||||||
<div class="side_blog_title">Payments 2.0, Scheduled Voice Chats, New Web Versions</div>
|
|
||||||
</a><a href="/blog/voice-chats-on-steroids" class="side_blog_entry">
|
|
||||||
<div class="side_blog_date">Mar 19</div>
|
|
||||||
<div class="side_blog_title">Voice Chats 2.0: Channels, Millions of Listeners, Recorded Chats, Admin Tools</div>
|
|
||||||
</a><a href="/blog/autodelete-inv2" class="side_blog_entry">
|
|
||||||
<div class="side_blog_date">Feb 23</div>
|
|
||||||
<div class="side_blog_title">Auto-Delete, Widgets and Expiring Invite Links</div>
|
|
||||||
</a><a href="/blog/move-history" class="side_blog_entry">
|
|
||||||
<div class="side_blog_date">Jan 28</div>
|
|
||||||
<div class="side_blog_title">Moving Chat History from Other Apps</div>
|
|
||||||
</a><a href="/blog/voice-chats" class="side_blog_entry">
|
|
||||||
<div class="side_blog_date">Dec 23</div>
|
|
||||||
<div class="side_blog_title">Voice Chats Done Right</div>
|
|
||||||
</a><a href="/blog/pinned-messages-locations-playlists" class="side_blog_entry">
|
|
||||||
<div class="side_blog_date">Oct 30</div>
|
|
||||||
<div class="side_blog_title">Pinned Messages 2.0, Improved Live Locations, Playlists and More</div>
|
|
||||||
</a><a href="/blog/filters-anonymous-admins-comments" class="side_blog_entry">
|
|
||||||
<div class="side_blog_date">Sep 30</div>
|
|
||||||
<div class="side_blog_title">Search Filters, Anonymous Admins, Channel Comments</div>
|
|
||||||
</a>
|
|
||||||
</div>
|
|
||||||
</div>
|
|
||||||
</div></div>
|
|
||||||
<div id="dev_page_content_wrap" class=" ">
|
|
||||||
<div class="dev_page_bread_crumbs"></div>
|
|
||||||
<h1 id="dev_page_title">Stickers Done Right</h1>
|
|
||||||
|
|
||||||
<div id="dev_page_content"><div class="blog_side_image_wrap">
|
|
||||||
<img src="/file/811140496/1/V_B_W6uSP9o/8dc57ec0c8efe81a4d" class="blog_side_image"/>
|
|
||||||
</div>
|
|
||||||
|
|
||||||
<blockquote>
|
|
||||||
<p>This January 2015 post has some outdated info.<br>Check out our <a href="https://telegram.org/blog/stickers-revolution">custom sticker sets</a> announcement instead.</p>
|
|
||||||
</blockquote>
|
|
||||||
<p>At Telegram, we try to reinvent the ordinary tools. The concept of stickers is not an exception. We've always felt that stickers in messaging apps sucked, because they typically provided a limited and paid experience in a walled-garden environment.</p>
|
|
||||||
<p>Today's update to Telegram for <a href="https://telegram.org/dl/android"><strong>Android</strong></a>, <a href="https://telegram.org/dl/ios"><strong>iOS</strong></a>, <a href="https://telegram.org/dl/wp"><strong>Windows Phone</strong></a> and <a href="https://desktop.telegram.org"><strong>Desktops</strong></a> introduces a <strong>new</strong> kind of stickers – a free platform for <strong>artists</strong> and <strong>users</strong> willing to share emotions, built using an efficient and open technology. </p>
|
|
||||||
<div><center>
|
|
||||||
<a href="/file/811140073/1/IP83JaSL9H8/4f056c95a1cd5f0fec" target="_blank"><img src="/file/811140073/1/IP83JaSL9H8/4f056c95a1cd5f0fec" title="Tap on sticker to send" style="padding: 10px 5px; width: 195px" /></a>
|
|
||||||
|
|
||||||
<a href="/file/811140179/1/mPAcltA20lU/707824572ed4fd27ce" target="_blank"><img src="/file/811140179/1/mPAcltA20lU/707824572ed4fd27ce" title="Sticker sent" style="padding: 10px 5px; width: 195px" /></a>
|
|
||||||
|
|
||||||
<a href="/file/811140702/1/BVF7Ub1LvpQ/7774d9e6e144006908" target="_blank"><img src="/file/811140702/1/BVF7Ub1LvpQ/7774d9e6e144006908" title="Emoji with multiple relevant stickers" style="padding: 10px 5px; width: 195px" /></a>
|
|
||||||
</center></div>
|
|
||||||
|
|
||||||
<p>Telegram stickers are grouped around emotions, not characters. They do not clutter the interface, but are shown only when they are relevant – you will see a list of emotionally corresponding stickers whenever you <strong>start a message with an emoji</strong>. All our stickers are and will be completely <strong>free</strong>, and you can always create and share your own stickers.</p>
|
|
||||||
<p>You can find the initial <strong>14</strong> stickers in <a href="/blog/stickers-meet-art-and-history">this post</a>.<br>And dozens more will soon follow.</p>
|
|
||||||
<h4><a class="anchor" name="sharing-your-own-stickers" href="#sharing-your-own-stickers"><i class="anchor-icon"></i></a>Sharing your own stickers</h4>
|
|
||||||
<p>To share stickers of your own, just save your sticker in WebP format with a transparency layer and send it to your friend as a document in Telegram (e.g. via <a href="https://desktop.telegram.org">Telegram Desktop</a>). It will be shown as a sticker. Thanks to the WebP file format, Stickers on Telegram are displayed <strong>5x</strong> faster compared to the other formats usually used in messaging apps.</p>
|
|
||||||
<h4><a class="anchor" name="creating-new-stickers" href="#creating-new-stickers"><i class="anchor-icon"></i></a>Creating new stickers</h4>
|
|
||||||
<p>Telegram is focused on people who like to create content. If you want your sticker to be seen by all Telegram users in the context menu corresponding to one of the emojis, you are welcome to submit it via a chat with our Stickers bot – <a href="https://telegram.me/stickers"><strong>telegram.me/stickers</strong></a>.</p>
|
|
||||||
<p>Freelancers can also sell us their work – we normally pay <strong>$100</strong> for the exclusive use of a <strong>512x512px</strong> sticker. Note that we accept only high-quality stickers that meet our criteria. Please study the stickers that we have <a href="/blog/stickers-meet-art-and-history">designed in-house</a> for the launch.</p>
|
|
||||||
<div><a href="/file/811140183/1/CUZcEgoz428/ece4d02f9a12a03fde" target="_blank"><img src="/file/811140183/1/CUZcEgoz428/ece4d02f9a12a03fde" title="Lincoln approves" class="dev_page_image" style="height:256px" /></a>
|
|
||||||
</div>
|
|
||||||
|
|
||||||
<p><em>January 2, 2015<br>The Telegram Team</em></p>
|
|
||||||
</div>
|
|
||||||
|
|
||||||
</div>
|
|
||||||
<div class="tl_main_share clearfix">
|
|
||||||
<a href="https://t.me/share/url?url=https%3A%2F%2Ftelegram.org%2Fblog%2Fstickers&text=%23Telegram%20launches%20free%20emoji-based%20stickers%20platform%20for%20artists%20and%20users." class="tl_telegram_share_btn" id="tl_telegram_share_btn" data-text="#Telegram launches free emoji-based stickers platform for artists and users." data-url="https://telegram.org/blog/stickers"><i class="tl_telegram_share_icon"></i><span class="tl_telegram_share_label" target="_blank">Forward</span></a>
|
|
||||||
<a href="https://twitter.com/share" class="tl_twitter_share_btn" id="tl_twitter_share_btn" data-text="#Telegram launches free emoji-based stickers platform for artists and users." data-url="https://telegram.org/blog/stickers" data-via="Telegram">Tweet <span class="tl_twitter_share_cnt"></span></a>
|
|
||||||
</div>
|
|
||||||
|
|
||||||
</div>
|
|
||||||
<div class="tl_main_recent_news_wrap tlb_other_news_wrap tl_blog_list_page_wrap">
|
|
||||||
<h3 class="tl_main_recent_news_header">
|
|
||||||
<a href="/blog">Other News</a>
|
|
||||||
</h3>
|
|
||||||
<div class="tl_main_recent_news_cards clearfix">
|
|
||||||
<a class="dev_blog_card_link_wrap" href="/blog/payments-2-0-scheduled-voice-chats"><div class="dev_blog_card_wrap">
|
|
||||||
<img class="dev_blog_card_image" src="https://telegram.org/file/464001783/2/6Is-qGJkgX4.92603/d4d7fe3e0fc14ff3ba" />
|
|
||||||
<div class="dev_blog_card_alltext_wrap">
|
|
||||||
<h4 class="dev_blog_card_title">Payments 2.0, Scheduled Voice Chats, New Web Versions</h4>
|
|
||||||
<div class="dev_blog_card_lead">This update brings Payments 2.0 for all Telegram chats, Scheduling and Mini Profiles for Voice Chats, new versions of Telegram Web for…</div>
|
|
||||||
</div>
|
|
||||||
<div class="dev_blog_card_date">Apr 26, 2021</div>
|
|
||||||
</div></a><a class="dev_blog_card_link_wrap" href="/blog/voice-chats-on-steroids"><div class="dev_blog_card_wrap">
|
|
||||||
<img class="dev_blog_card_image" src="https://telegram.org/file/464001855/3/O31CcF_-a20.86962/cafa0c3d7dd2df1134" />
|
|
||||||
<div class="dev_blog_card_alltext_wrap">
|
|
||||||
<h4 class="dev_blog_card_title">Voice Chats 2.0: Channels, Millions of Listeners, Recorded Chats, Admin Tools</h4>
|
|
||||||
<div class="dev_blog_card_lead">Voice Chats first appeared in December, adding a new dimension of live talk to Telegram groups. Starting today, they become available in…</div>
|
|
||||||
</div>
|
|
||||||
<div class="dev_blog_card_date">Mar 19, 2021</div>
|
|
||||||
</div></a><a class="dev_blog_card_link_wrap" href="/blog/autodelete-inv2"><div class="dev_blog_card_wrap">
|
|
||||||
<img class="dev_blog_card_image" src="https://telegram.org/file/464001701/5/WvHD2TGPSzU.74913/648f3e17886f6c96f8" />
|
|
||||||
<div class="dev_blog_card_alltext_wrap">
|
|
||||||
<h4 class="dev_blog_card_title">Auto-Delete, Widgets and Expiring Invite Links</h4>
|
|
||||||
<div class="dev_blog_card_lead">This update brings an auto-delete timer for messages in any chat, as well as new flexible invite links and faster access to your chats…</div>
|
|
||||||
</div>
|
|
||||||
<div class="dev_blog_card_date">Feb 23, 2021</div>
|
|
||||||
</div></a><a class="dev_blog_card_link_wrap" href="/blog/move-history"><div class="dev_blog_card_wrap">
|
|
||||||
<img class="dev_blog_card_image" src="https://telegram.org/file/464001185/1/Z6LVvcYB03g.64305/e8ff8c87c4d656cbe1" />
|
|
||||||
<div class="dev_blog_card_alltext_wrap">
|
|
||||||
<h4 class="dev_blog_card_title">Moving Chat History from Other Apps</h4>
|
|
||||||
<div class="dev_blog_card_lead">Over 100 million new users joined Telegram this January, seeking more privacy and freedom. But what about the messages and memories that remain in older apps? Starting today, everyone…</div>
|
|
||||||
</div>
|
|
||||||
<div class="dev_blog_card_date">Jan 28, 2021</div>
|
|
||||||
</div></a>
|
|
||||||
</div>
|
|
||||||
</div>
|
|
||||||
|
|
||||||
</div>
|
|
||||||
</div>
|
|
||||||
</div>
|
|
||||||
<div class="footer_wrap">
|
|
||||||
<div class="footer_columns_wrap footer_desktop">
|
|
||||||
<div class="footer_column footer_column_telegram">
|
|
||||||
<h5>Telegram</h5>
|
|
||||||
<div class="footer_telegram_description"></div>
|
|
||||||
Telegram is a cloud-based mobile and desktop messaging app with a focus on security and speed.
|
|
||||||
</div>
|
|
||||||
|
|
||||||
<div class="footer_column">
|
|
||||||
<h5><a href="/faq">About</a></h5>
|
|
||||||
<ul>
|
|
||||||
<li><a href="/faq">FAQ</a></li>
|
|
||||||
<li><a href="/blog">Blog</a></li>
|
|
||||||
<li><a href="/jobs">Jobs</a></li>
|
|
||||||
</ul>
|
|
||||||
</div>
|
|
||||||
<div class="footer_column">
|
|
||||||
<h5><a href="/apps#mobile-apps">Mobile Apps</a></h5>
|
|
||||||
<ul>
|
|
||||||
<li><a href="/dl/ios">iPhone/iPad</a></li>
|
|
||||||
<li><a href="/dl/android">Android</a></li>
|
|
||||||
<li><a href="/dl/wp">Windows Phone</a></li>
|
|
||||||
</ul>
|
|
||||||
</div>
|
|
||||||
<div class="footer_column">
|
|
||||||
<h5><a href="/apps#desktop-apps">Desktop Apps</a></h5>
|
|
||||||
<ul>
|
|
||||||
<li><a href="//desktop.telegram.org/">PC/Mac/Linux</a></li>
|
|
||||||
<li><a href="//macos.telegram.org/">macOS</a></li>
|
|
||||||
<li><a href="/dl/web">Web-browser</a></li>
|
|
||||||
</ul>
|
|
||||||
</div>
|
|
||||||
<div class="footer_column footer_column_platform">
|
|
||||||
<h5><a href="//core.telegram.org/">Platform</a></h5>
|
|
||||||
<ul>
|
|
||||||
<li><a href="//core.telegram.org/api">API</a></li>
|
|
||||||
<li><a href="//translations.telegram.org/">Translations</a></li>
|
|
||||||
<li><a href="//instantview.telegram.org/">Instant View</a></li>
|
|
||||||
</ul>
|
|
||||||
</div>
|
|
||||||
</div>
|
|
||||||
<div class="footer_columns_wrap footer_mobile">
|
|
||||||
<div class="footer_column">
|
|
||||||
<h5><a href="/faq">About</a></h5>
|
|
||||||
</div>
|
|
||||||
<div class="footer_column">
|
|
||||||
<h5><a href="/blog">Blog</a></h5>
|
|
||||||
</div>
|
|
||||||
<div class="footer_column">
|
|
||||||
<h5><a href="/apps">Apps</a></h5>
|
|
||||||
</div>
|
|
||||||
<div class="footer_column">
|
|
||||||
<h5><a href="//core.telegram.org/">Platform</a></h5>
|
|
||||||
</div>
|
|
||||||
<div class="footer_column">
|
|
||||||
<h5><a href="https://twitter.com/telegram" target="_blank" data-track="Follow/Twitter" onclick="trackDlClick(this, event)">Twitter</a></h5>
|
|
||||||
</div>
|
|
||||||
</div>
|
|
||||||
</div>
|
|
||||||
<script src="/js/main.js?42"></script>
|
|
||||||
|
|
||||||
<script>initScrollVideos(true);
|
|
||||||
twitterCustomShareInit();
|
|
||||||
blogSideImageInit();
|
|
||||||
backToTopInit("Go up");
|
|
||||||
removePreloadInit();
|
|
||||||
</script>
|
|
||||||
</body>
|
|
||||||
</html>
|
|
||||||
|
|
|
@ -1,247 +0,0 @@
|
||||||
<!DOCTYPE html>
|
|
||||||
<html class="">
|
|
||||||
<head>
|
|
||||||
<meta charset="utf-8">
|
|
||||||
<title>Themes, Multiple Accounts and More</title>
|
|
||||||
<meta name="viewport" content="width=device-width, initial-scale=1.0">
|
|
||||||
<meta property="og:title" content="Themes, Multiple Accounts and More">
|
|
||||||
<meta property="og:image" content="https://telegram.org/file/811140613/1e87/qfPu-Wj9Ao4.179802/59c66a0298a1f50341">
|
|
||||||
<meta property="og:site_name" content="Telegram">
|
|
||||||
<meta property="og:description" content="Telegram 4.7 brings themes and night mode to iOS, support for multiple accounts and quick replies to Android ">
|
|
||||||
<meta property="article:published_time" content="2017-12-30T20:38:34+00:00"><meta name="twitter:card" content="summary_large_image" /><meta name="twitter:image" content="https://telegram.org/file/811140613/1e87/qfPu-Wj9Ao4.179802/59c66a0298a1f50341" />
|
|
||||||
<meta property="fb:app_id" content="254098051407226">
|
|
||||||
<meta property="vk:app_id" content="3782569">
|
|
||||||
<meta name="apple-itunes-app" content="app-id=686449807">
|
|
||||||
<meta name="telegram:channel" content="@telegram">
|
|
||||||
<link rel="canonical" href="https://telegram.org/blog/themes-accounts" />
|
|
||||||
<link rel="icon" type="image/svg+xml" href="/img/website_icon.svg?4">
|
|
||||||
<link rel="alternate icon" href="/favicon.ico?4" type="image/x-icon" />
|
|
||||||
<link href="/css/bootstrap.min.css?3" rel="stylesheet">
|
|
||||||
|
|
||||||
<link href="/css/telegram.css?212" rel="stylesheet" media="screen">
|
|
||||||
<style>
|
|
||||||
</style>
|
|
||||||
</head>
|
|
||||||
<body class="preload">
|
|
||||||
<div id="fb-root"></div>
|
|
||||||
<div class="tl_page_wrap">
|
|
||||||
<div class="tl_page_head navbar navbar-static-top navbar navbar-tg">
|
|
||||||
<div class="navbar-inner">
|
|
||||||
<div class="container clearfix">
|
|
||||||
<ul class="nav navbar-nav navbar-right"><li class="dropdown top_lang_select"><a class="dropdown-toggle" onclick="return dropdownClick(this, event)" href="#"><i class="dev_top_lang_icon"></i> <b class="minicaret"></b></a>
|
|
||||||
<ul class="dropdown-menu"><li class=""><a href="?setln=en">English</a></li><li class="long "><a href="?setln=id">Bahasa Indonesia</a></li><li class="long "><a href="?setln=ms">Bahasa Melayu</a></li><li class=""><a href="?setln=de">Deutsch</a></li><li class=""><a href="?setln=es">Español</a></li><li class=""><a href="?setln=fr">Français</a></li><li class=""><a href="?setln=it">Italiano</a></li><li class=""><a href="?setln=nl">Nederlands</a></li><li class=""><a href="?setln=uz">O‘zbek</a></li><li class=""><a href="?setln=pl">Polski</a></li><li class="long "><a href="?setln=pt-br">Português (Brasil)</a></li><li class=""><a href="?setln=tr">Türkçe</a></li><li class=""><a href="?setln=be">Беларуская</a></li><li class=""><a href="?setln=ru">Русский</a></li><li class=""><a href="?setln=uk">Українська</a></li><li class=""><a href="?setln=ar">العربية</a></li><li class=""><a href="?setln=fa">فارسی</a></li><li class=""><a href="?setln=ko">한국어</a></li></ul></li><li class="navbar-twitter hidden-xs"><a href="https://twitter.com/telegram" target="_blank" data-track="Follow/Twitter" onclick="trackDlClick(this, event)"><i class="icon icon-twitter"></i> Twitter</a></li></ul>
|
|
||||||
<ul class="nav navbar-nav">
|
|
||||||
<li class=""><a href="/">Home</a></li>
|
|
||||||
<li class=""><a href="/faq">FAQ</a></li>
|
|
||||||
<li class=""><a href="/apps">Apps</a></li>
|
|
||||||
<li class="hidden-xs "><a href="//core.telegram.org/api">API</a></li>
|
|
||||||
<li class="hidden-xs "><a href="//core.telegram.org/mtproto">Protocol</a></li>
|
|
||||||
</ul>
|
|
||||||
</div>
|
|
||||||
</div>
|
|
||||||
</div>
|
|
||||||
<div class="container clearfix tl_page_container ">
|
|
||||||
<div class="tl_page">
|
|
||||||
<div class="tl_contest_page_wrap">
|
|
||||||
<div class="tl_blog_side_blog"><div class="side_blog_wrap">
|
|
||||||
<div class="side_blog">
|
|
||||||
<a href="/blog" class="side_blog_header">Recent News</a>
|
|
||||||
<div class="side_blog_entries">
|
|
||||||
<a href="/blog/payments-2-0-scheduled-voice-chats" class="side_blog_entry">
|
|
||||||
<div class="side_blog_date">Apr 26</div>
|
|
||||||
<div class="side_blog_title">Payments 2.0, Scheduled Voice Chats, New Web Versions</div>
|
|
||||||
</a><a href="/blog/voice-chats-on-steroids" class="side_blog_entry">
|
|
||||||
<div class="side_blog_date">Mar 19</div>
|
|
||||||
<div class="side_blog_title">Voice Chats 2.0: Channels, Millions of Listeners, Recorded Chats, Admin Tools</div>
|
|
||||||
</a><a href="/blog/autodelete-inv2" class="side_blog_entry">
|
|
||||||
<div class="side_blog_date">Feb 23</div>
|
|
||||||
<div class="side_blog_title">Auto-Delete, Widgets and Expiring Invite Links</div>
|
|
||||||
</a><a href="/blog/move-history" class="side_blog_entry">
|
|
||||||
<div class="side_blog_date">Jan 28</div>
|
|
||||||
<div class="side_blog_title">Moving Chat History from Other Apps</div>
|
|
||||||
</a><a href="/blog/voice-chats" class="side_blog_entry">
|
|
||||||
<div class="side_blog_date">Dec 23</div>
|
|
||||||
<div class="side_blog_title">Voice Chats Done Right</div>
|
|
||||||
</a><a href="/blog/pinned-messages-locations-playlists" class="side_blog_entry">
|
|
||||||
<div class="side_blog_date">Oct 30</div>
|
|
||||||
<div class="side_blog_title">Pinned Messages 2.0, Improved Live Locations, Playlists and More</div>
|
|
||||||
</a><a href="/blog/filters-anonymous-admins-comments" class="side_blog_entry">
|
|
||||||
<div class="side_blog_date">Sep 30</div>
|
|
||||||
<div class="side_blog_title">Search Filters, Anonymous Admins, Channel Comments</div>
|
|
||||||
</a>
|
|
||||||
</div>
|
|
||||||
</div>
|
|
||||||
</div></div>
|
|
||||||
<div id="dev_page_content_wrap" class=" ">
|
|
||||||
<div class="dev_page_bread_crumbs"></div>
|
|
||||||
<h1 id="dev_page_title">Themes, Multiple Accounts and More</h1>
|
|
||||||
|
|
||||||
<div id="dev_page_content"><div class="blog_side_image_wrap">
|
|
||||||
<img src="/file/811140392/1ae6/niAFkQ7L6hs.52233.gif/8dc83215ac976cb4e4" class="blog_side_image"/>
|
|
||||||
</div>
|
|
||||||
|
|
||||||
<div class="blog_wide_image">
|
|
||||||
<a href="/file/811140613/1e87/qfPu-Wj9Ao4.179802/59c66a0298a1f50341" target="_blank"><img src="/file/811140613/1e87/qfPu-Wj9Ao4.179802/59c66a0298a1f50341" title="Introducing Multiple Accounts on Android and Themes on iOS in Version 4.7!"/></a>
|
|
||||||
</div>
|
|
||||||
|
|
||||||
<p>Happy winter holidays, everyone! To reinforce the festive mood, we‘re updating Telegram for the second time this December, adding features you’ve been asking for.</p>
|
|
||||||
<p>With version <strong>4.7</strong> for <a href="https://telegram.org/dl/ios">iOS</a>, you can change what your Telegram looks like in the new Appearance settings. Choose between four different themes, including a minimalistic one (“Day”) and two dark themes (“Night” and “Night Blue”). The “Day” theme also allows you to pick an accent color for the entire app, like pink or purple.</p>
|
|
||||||
<div class="blog_video_player_wrap" style="max-width: 640px; margin: 20px auto 20px;">
|
|
||||||
<video class="blog_video_player tl_blog_vid_autoplay" onclick="videoTogglePlay(this)" autoplay loop controls muted poster="/file/811140970/1b28/EzfDvBDliJU.45817/3bf1c849441366dd4a">
|
|
||||||
<source src="/file/811140675/173d/LwGDwC-UFl0.4207767.mp4/a9c323d14cafa6289a" type="video/mp4">
|
|
||||||
</video>
|
|
||||||
</div>
|
|
||||||
|
|
||||||
<h3><a class="anchor" name="multiple-accounts" href="#multiple-accounts"><i class="anchor-icon"></i></a>Multiple accounts</h3>
|
|
||||||
<p>The <a href="https://telegram.org/dl/android">Android app</a> already supported <a href="https://telegram.org/blog/android-themes">multiple themes</a>, so it had to go further with <strong>4.7</strong> by supporting <strong>multiple accounts</strong>. You can add up to three accounts with different phone numbers to your Telegram app, and then quickly switch between them from the side menu. Notifications will keep coming from all accounts, unless you change this in the Notification settings.</p>
|
|
||||||
<div class="blog_video_player_wrap" style="max-width: 640px; margin: 20px auto 20px;">
|
|
||||||
<video class="blog_video_player tl_blog_vid_autoplay" onclick="videoTogglePlay(this)" autoplay loop controls muted poster="/file/811140540/17b2/Jc-DZ5pd5XY.37306/425ba8758e90f1f365">
|
|
||||||
<source src="/file/811140278/1bb7/uhFjnxh3tw4.4847973.mp4/530102d1aadfeb724a" type="video/mp4">
|
|
||||||
</video>
|
|
||||||
</div>
|
|
||||||
|
|
||||||
<h3><a class="anchor" name="quick-replies" href="#quick-replies"><i class="anchor-icon"></i></a>Quick replies</h3>
|
|
||||||
<p>Telegram now supports <strong>quick replies</strong> on both mobile platforms. To use them, just <strong>swipe left</strong> on any message in a chat. </p>
|
|
||||||
<div class="smartphone_video_player_wrap">
|
|
||||||
<div class="smartphone_video_player_iphone">
|
|
||||||
<video class="smartphone_video_player tl_blog_vid_autoplay" onclick="videoTogglePlay(this)" poster="/file/811140933/15fe/dSmFi0B3V1U.30322/aaeccb20c9bcb4bb76" autoplay loop controls muted>
|
|
||||||
<source src="/file/811140985/1539/linDszp0IYo.535082.mp4/ce7acf5aa0c4ffbb47" type="video/mp4">
|
|
||||||
</video>
|
|
||||||
</div>
|
|
||||||
</div>
|
|
||||||
|
|
||||||
<h3><a class="anchor" name="in-case-you-missed-it" href="#in-case-you-missed-it"><i class="anchor-icon"></i></a>In case you missed it…</h3>
|
|
||||||
<p>Telegram <strong>4.6</strong>, released earlier this month, introduced new granular settings for auto-downloading media, better link previews, <a href="https://telegram.org/blog/albums-saved-messages">albums</a> in Secret Chats, improved security, and embeds for messages from public groups and channels. Here’s what an embed of a Telegram message looks like when included on a web page:</p>
|
|
||||||
<div><br>
|
|
||||||
<script async src="https://telegram.org/js/telegram-widget.js?1" data-telegram-post="durov/68" data-width="100%"></script>
|
|
||||||
<br><br>
|
|
||||||
</div>
|
|
||||||
|
|
||||||
<p>To get the HTML-code for embedding a message, open its t.me link in a web browser:</p>
|
|
||||||
<div>
|
|
||||||
<a href="/file/811140747/166d/MNEJA3BlETo.107862/6fe98d36f382b03091" target="_blank"><img src="/file/811140747/166d/MNEJA3BlETo.107862/6fe98d36f382b03091" title="code.jpg, 105.33Kb" class="dev_page_image" style="max-width:70%"/></a><br>
|
|
||||||
</div>
|
|
||||||
|
|
||||||
<p>Have a happy new year – and stay tuned for the product updates we are going to announce in January.</p>
|
|
||||||
<div><br></div>
|
|
||||||
|
|
||||||
<p><em>The Telegram Team,<br>December 30, 2017</em></p>
|
|
||||||
</div>
|
|
||||||
|
|
||||||
</div>
|
|
||||||
<div class="tl_main_share clearfix">
|
|
||||||
<a href="https://t.me/share/url?url=https%3A%2F%2Ftelegram.org%2Fblog%2Fthemes-accounts&text=Telegram%204.7%20brings%20themes%20and%20night%20mode%20to%20iOS%2C%20support%20for%20multiple%20accounts%20and%20quick%20replies%20to%20Android" class="tl_telegram_share_btn" id="tl_telegram_share_btn" data-text="Telegram 4.7 brings themes and night mode to iOS, support for multiple accounts and quick replies to Android" data-url="https://telegram.org/blog/themes-accounts"><i class="tl_telegram_share_icon"></i><span class="tl_telegram_share_label" target="_blank">Forward</span></a>
|
|
||||||
<a href="https://twitter.com/share" class="tl_twitter_share_btn" id="tl_twitter_share_btn" data-text="Telegram 4.7 brings themes and night mode to iOS, support for multiple accounts and quick replies to Android" data-url="https://telegram.org/blog/themes-accounts" data-via="Telegram">Tweet <span class="tl_twitter_share_cnt"></span></a>
|
|
||||||
</div>
|
|
||||||
|
|
||||||
</div>
|
|
||||||
<div class="tl_main_recent_news_wrap tlb_other_news_wrap tl_blog_list_page_wrap">
|
|
||||||
<h3 class="tl_main_recent_news_header">
|
|
||||||
<a href="/blog">Other News</a>
|
|
||||||
</h3>
|
|
||||||
<div class="tl_main_recent_news_cards clearfix">
|
|
||||||
<a class="dev_blog_card_link_wrap" href="/blog/payments-2-0-scheduled-voice-chats"><div class="dev_blog_card_wrap">
|
|
||||||
<img class="dev_blog_card_image" src="https://telegram.org/file/464001783/2/6Is-qGJkgX4.92603/d4d7fe3e0fc14ff3ba" />
|
|
||||||
<div class="dev_blog_card_alltext_wrap">
|
|
||||||
<h4 class="dev_blog_card_title">Payments 2.0, Scheduled Voice Chats, New Web Versions</h4>
|
|
||||||
<div class="dev_blog_card_lead">This update brings Payments 2.0 for all Telegram chats, Scheduling and Mini Profiles for Voice Chats, new versions of Telegram Web for…</div>
|
|
||||||
</div>
|
|
||||||
<div class="dev_blog_card_date">Apr 26, 2021</div>
|
|
||||||
</div></a><a class="dev_blog_card_link_wrap" href="/blog/voice-chats-on-steroids"><div class="dev_blog_card_wrap">
|
|
||||||
<img class="dev_blog_card_image" src="https://telegram.org/file/464001855/3/O31CcF_-a20.86962/cafa0c3d7dd2df1134" />
|
|
||||||
<div class="dev_blog_card_alltext_wrap">
|
|
||||||
<h4 class="dev_blog_card_title">Voice Chats 2.0: Channels, Millions of Listeners, Recorded Chats, Admin Tools</h4>
|
|
||||||
<div class="dev_blog_card_lead">Voice Chats first appeared in December, adding a new dimension of live talk to Telegram groups. Starting today, they become available in…</div>
|
|
||||||
</div>
|
|
||||||
<div class="dev_blog_card_date">Mar 19, 2021</div>
|
|
||||||
</div></a><a class="dev_blog_card_link_wrap" href="/blog/autodelete-inv2"><div class="dev_blog_card_wrap">
|
|
||||||
<img class="dev_blog_card_image" src="https://telegram.org/file/464001701/5/WvHD2TGPSzU.74913/648f3e17886f6c96f8" />
|
|
||||||
<div class="dev_blog_card_alltext_wrap">
|
|
||||||
<h4 class="dev_blog_card_title">Auto-Delete, Widgets and Expiring Invite Links</h4>
|
|
||||||
<div class="dev_blog_card_lead">This update brings an auto-delete timer for messages in any chat, as well as new flexible invite links and faster access to your chats…</div>
|
|
||||||
</div>
|
|
||||||
<div class="dev_blog_card_date">Feb 23, 2021</div>
|
|
||||||
</div></a><a class="dev_blog_card_link_wrap" href="/blog/move-history"><div class="dev_blog_card_wrap">
|
|
||||||
<img class="dev_blog_card_image" src="https://telegram.org/file/464001185/1/Z6LVvcYB03g.64305/e8ff8c87c4d656cbe1" />
|
|
||||||
<div class="dev_blog_card_alltext_wrap">
|
|
||||||
<h4 class="dev_blog_card_title">Moving Chat History from Other Apps</h4>
|
|
||||||
<div class="dev_blog_card_lead">Over 100 million new users joined Telegram this January, seeking more privacy and freedom. But what about the messages and memories that remain in older apps? Starting today, everyone…</div>
|
|
||||||
</div>
|
|
||||||
<div class="dev_blog_card_date">Jan 28, 2021</div>
|
|
||||||
</div></a>
|
|
||||||
</div>
|
|
||||||
</div>
|
|
||||||
|
|
||||||
</div>
|
|
||||||
</div>
|
|
||||||
</div>
|
|
||||||
<div class="footer_wrap">
|
|
||||||
<div class="footer_columns_wrap footer_desktop">
|
|
||||||
<div class="footer_column footer_column_telegram">
|
|
||||||
<h5>Telegram</h5>
|
|
||||||
<div class="footer_telegram_description"></div>
|
|
||||||
Telegram is a cloud-based mobile and desktop messaging app with a focus on security and speed.
|
|
||||||
</div>
|
|
||||||
|
|
||||||
<div class="footer_column">
|
|
||||||
<h5><a href="/faq">About</a></h5>
|
|
||||||
<ul>
|
|
||||||
<li><a href="/faq">FAQ</a></li>
|
|
||||||
<li><a href="/blog">Blog</a></li>
|
|
||||||
<li><a href="/jobs">Jobs</a></li>
|
|
||||||
</ul>
|
|
||||||
</div>
|
|
||||||
<div class="footer_column">
|
|
||||||
<h5><a href="/apps#mobile-apps">Mobile Apps</a></h5>
|
|
||||||
<ul>
|
|
||||||
<li><a href="/dl/ios">iPhone/iPad</a></li>
|
|
||||||
<li><a href="/dl/android">Android</a></li>
|
|
||||||
<li><a href="/dl/wp">Windows Phone</a></li>
|
|
||||||
</ul>
|
|
||||||
</div>
|
|
||||||
<div class="footer_column">
|
|
||||||
<h5><a href="/apps#desktop-apps">Desktop Apps</a></h5>
|
|
||||||
<ul>
|
|
||||||
<li><a href="//desktop.telegram.org/">PC/Mac/Linux</a></li>
|
|
||||||
<li><a href="//macos.telegram.org/">macOS</a></li>
|
|
||||||
<li><a href="/dl/web">Web-browser</a></li>
|
|
||||||
</ul>
|
|
||||||
</div>
|
|
||||||
<div class="footer_column footer_column_platform">
|
|
||||||
<h5><a href="//core.telegram.org/">Platform</a></h5>
|
|
||||||
<ul>
|
|
||||||
<li><a href="//core.telegram.org/api">API</a></li>
|
|
||||||
<li><a href="//translations.telegram.org/">Translations</a></li>
|
|
||||||
<li><a href="//instantview.telegram.org/">Instant View</a></li>
|
|
||||||
</ul>
|
|
||||||
</div>
|
|
||||||
</div>
|
|
||||||
<div class="footer_columns_wrap footer_mobile">
|
|
||||||
<div class="footer_column">
|
|
||||||
<h5><a href="/faq">About</a></h5>
|
|
||||||
</div>
|
|
||||||
<div class="footer_column">
|
|
||||||
<h5><a href="/blog">Blog</a></h5>
|
|
||||||
</div>
|
|
||||||
<div class="footer_column">
|
|
||||||
<h5><a href="/apps">Apps</a></h5>
|
|
||||||
</div>
|
|
||||||
<div class="footer_column">
|
|
||||||
<h5><a href="//core.telegram.org/">Platform</a></h5>
|
|
||||||
</div>
|
|
||||||
<div class="footer_column">
|
|
||||||
<h5><a href="https://twitter.com/telegram" target="_blank" data-track="Follow/Twitter" onclick="trackDlClick(this, event)">Twitter</a></h5>
|
|
||||||
</div>
|
|
||||||
</div>
|
|
||||||
</div>
|
|
||||||
<script src="/js/main.js?42"></script>
|
|
||||||
|
|
||||||
<script>initScrollVideos(true);
|
|
||||||
twitterCustomShareInit();
|
|
||||||
blogSideImageInit();
|
|
||||||
backToTopInit("Go up");
|
|
||||||
removePreloadInit();
|
|
||||||
</script>
|
|
||||||
</body>
|
|
||||||
</html>
|
|
||||||
|
|
|
@ -1,392 +0,0 @@
|
||||||
<!DOCTYPE html>
|
|
||||||
<html class="">
|
|
||||||
<head>
|
|
||||||
<meta charset="utf-8">
|
|
||||||
<title>Verifiable Builds, New Theme Editor, Send When Online and So Much More</title>
|
|
||||||
<meta name="viewport" content="width=device-width, initial-scale=1.0">
|
|
||||||
<meta property="og:title" content="Verifiable Builds, New Theme Editor, Send When Online and So Much More">
|
|
||||||
<meta property="og:image" content="https://telegram.org/file/464001694/2/wCAe0modrjo.85877/43810d6ac184ec8c7e">
|
|
||||||
<meta property="og:site_name" content="Telegram">
|
|
||||||
<meta property="og:description" content="Introducing Reproducible Apps, Theme Editor 2.0, Send When Online and So Much More">
|
|
||||||
<meta property="article:published_time" content="2020-01-01T00:28:10+00:00"><meta name="twitter:card" content="summary_large_image" /><meta name="twitter:image" content="https://telegram.org/file/464001694/2/wCAe0modrjo.85877/43810d6ac184ec8c7e" />
|
|
||||||
<meta property="fb:app_id" content="254098051407226">
|
|
||||||
<meta property="vk:app_id" content="3782569">
|
|
||||||
<meta name="apple-itunes-app" content="app-id=686449807">
|
|
||||||
<meta name="telegram:channel" content="@telegram">
|
|
||||||
<link rel="canonical" href="https://telegram.org/blog/verifiable-apps-and-more" />
|
|
||||||
<link rel="icon" type="image/svg+xml" href="/img/website_icon.svg?4">
|
|
||||||
<link rel="alternate icon" href="/favicon.ico?4" type="image/x-icon" />
|
|
||||||
<link href="/css/bootstrap.min.css?3" rel="stylesheet">
|
|
||||||
|
|
||||||
<link href="/css/telegram.css?212" rel="stylesheet" media="screen">
|
|
||||||
<style>
|
|
||||||
</style>
|
|
||||||
</head>
|
|
||||||
<body class="preload">
|
|
||||||
<div id="fb-root"></div>
|
|
||||||
<div class="tl_page_wrap">
|
|
||||||
<div class="tl_page_head navbar navbar-static-top navbar navbar-tg">
|
|
||||||
<div class="navbar-inner">
|
|
||||||
<div class="container clearfix">
|
|
||||||
<ul class="nav navbar-nav navbar-right"><li class="dropdown top_lang_select"><a class="dropdown-toggle" onclick="return dropdownClick(this, event)" href="#"><i class="dev_top_lang_icon"></i> <b class="minicaret"></b></a>
|
|
||||||
<ul class="dropdown-menu"><li class=""><a href="?setln=en">English</a></li><li class="long "><a href="?setln=id">Bahasa Indonesia</a></li><li class="long "><a href="?setln=ms">Bahasa Melayu</a></li><li class=""><a href="?setln=de">Deutsch</a></li><li class=""><a href="?setln=es">Español</a></li><li class=""><a href="?setln=fr">Français</a></li><li class=""><a href="?setln=it">Italiano</a></li><li class=""><a href="?setln=nl">Nederlands</a></li><li class=""><a href="?setln=uz">O‘zbek</a></li><li class=""><a href="?setln=pl">Polski</a></li><li class="long "><a href="?setln=pt-br">Português (Brasil)</a></li><li class=""><a href="?setln=tr">Türkçe</a></li><li class=""><a href="?setln=be">Беларуская</a></li><li class=""><a href="?setln=ru">Русский</a></li><li class=""><a href="?setln=uk">Українська</a></li><li class=""><a href="?setln=ar">العربية</a></li><li class=""><a href="?setln=fa">فارسی</a></li><li class=""><a href="?setln=ko">한국어</a></li></ul></li><li class="navbar-twitter hidden-xs"><a href="https://twitter.com/telegram" target="_blank" data-track="Follow/Twitter" onclick="trackDlClick(this, event)"><i class="icon icon-twitter"></i> Twitter</a></li></ul>
|
|
||||||
<ul class="nav navbar-nav">
|
|
||||||
<li class=""><a href="/">Home</a></li>
|
|
||||||
<li class=""><a href="/faq">FAQ</a></li>
|
|
||||||
<li class=""><a href="/apps">Apps</a></li>
|
|
||||||
<li class="hidden-xs "><a href="//core.telegram.org/api">API</a></li>
|
|
||||||
<li class="hidden-xs "><a href="//core.telegram.org/mtproto">Protocol</a></li>
|
|
||||||
</ul>
|
|
||||||
</div>
|
|
||||||
</div>
|
|
||||||
</div>
|
|
||||||
<div class="container clearfix tl_page_container ">
|
|
||||||
<div class="tl_page">
|
|
||||||
<div class="tl_contest_page_wrap">
|
|
||||||
<div class="tl_blog_side_blog"><div class="side_blog_wrap">
|
|
||||||
<div class="side_blog">
|
|
||||||
<a href="/blog" class="side_blog_header">Recent News</a>
|
|
||||||
<div class="side_blog_entries">
|
|
||||||
<a href="/blog/payments-2-0-scheduled-voice-chats" class="side_blog_entry">
|
|
||||||
<div class="side_blog_date">Apr 26</div>
|
|
||||||
<div class="side_blog_title">Payments 2.0, Scheduled Voice Chats, New Web Versions</div>
|
|
||||||
</a><a href="/blog/voice-chats-on-steroids" class="side_blog_entry">
|
|
||||||
<div class="side_blog_date">Mar 19</div>
|
|
||||||
<div class="side_blog_title">Voice Chats 2.0: Channels, Millions of Listeners, Recorded Chats, Admin Tools</div>
|
|
||||||
</a><a href="/blog/autodelete-inv2" class="side_blog_entry">
|
|
||||||
<div class="side_blog_date">Feb 23</div>
|
|
||||||
<div class="side_blog_title">Auto-Delete, Widgets and Expiring Invite Links</div>
|
|
||||||
</a><a href="/blog/move-history" class="side_blog_entry">
|
|
||||||
<div class="side_blog_date">Jan 28</div>
|
|
||||||
<div class="side_blog_title">Moving Chat History from Other Apps</div>
|
|
||||||
</a><a href="/blog/voice-chats" class="side_blog_entry">
|
|
||||||
<div class="side_blog_date">Dec 23</div>
|
|
||||||
<div class="side_blog_title">Voice Chats Done Right</div>
|
|
||||||
</a><a href="/blog/pinned-messages-locations-playlists" class="side_blog_entry">
|
|
||||||
<div class="side_blog_date">Oct 30</div>
|
|
||||||
<div class="side_blog_title">Pinned Messages 2.0, Improved Live Locations, Playlists and More</div>
|
|
||||||
</a><a href="/blog/filters-anonymous-admins-comments" class="side_blog_entry">
|
|
||||||
<div class="side_blog_date">Sep 30</div>
|
|
||||||
<div class="side_blog_title">Search Filters, Anonymous Admins, Channel Comments</div>
|
|
||||||
</a>
|
|
||||||
</div>
|
|
||||||
</div>
|
|
||||||
</div></div>
|
|
||||||
<div id="dev_page_content_wrap" class=" ">
|
|
||||||
<div class="dev_page_bread_crumbs"></div>
|
|
||||||
<h1 id="dev_page_title">Verifiable Builds, New Theme Editor, Send When Online and So Much More</h1>
|
|
||||||
|
|
||||||
<div id="dev_page_content"><div class="blog_side_image_wrap">
|
|
||||||
<img src="/file/811140595/1a00/Wx4FDuEvl0Q.27470.gif/144463428fd20fe032" class="blog_side_image"/>
|
|
||||||
</div>
|
|
||||||
|
|
||||||
<div class="blog_wide_image">
|
|
||||||
<a href="/file/464001783/1/Um24SzL9-jE.246587/154c24d4347be5febf" target="_blank"><img src="/file/464001365/1/haQ8RgmXkb0.85877/d12b8a89839d6950c7" srcset="/file/464001783/1/Um24SzL9-jE.246587/154c24d4347be5febf, 1200w" title="These are not the holo-calls you're looking for. Move along." alt="Dude in a jacket inspecting the hologram of a mechanical dog to verify it's built according to the blueprints provided."/></a>
|
|
||||||
</div>
|
|
||||||
|
|
||||||
<!-- For those prowling deep in the shadows of the pillars supporting this page, here's a bonus non-winter themed version of the image: /file/464001695/1/nxVa_f-qKS8.216020/9da7686ded6f1e7bef -->
|
|
||||||
|
|
||||||
<p>Telegram is the only mass market messaging app with <a href="https://telegram.org/apps/#source-code">open source</a> apps. Since <strong>2013</strong>, this not only allows independent researchers to <strong>verify the integrity</strong> of end-to-end encryption, but also helps look for vulnerabilities (or <a href="https://t.me/durov/109">backdoors</a> <img class="emoji" src="//telegram.org/img/emoji/40/F09F9888.png" width="20" height="20" alt="😈" />).</p>
|
|
||||||
<p>As of this update, Telegram becomes the first messaging app to allow you to <strong>independently verify</strong> that the code on GitHub is the <strong>exact same code</strong> that was used to build the app you downloaded from <strong>App Store</strong> or <strong>Google Play</strong>. Security researchers are welcome to check out our <a href="https://core.telegram.org/reproducible-builds">Guide to Reproducible Builds for iOS and Android</a>.</p>
|
|
||||||
<p>But we know security isn't the only reason you love Telegram – so we've also added <strong>dozens of new features</strong> and improvements. Gather round, this blog post is a long one.</p>
|
|
||||||
<h4><a class="anchor" name="theme-editor-2-0" href="#theme-editor-2-0"><i class="anchor-icon"></i></a>Theme Editor 2.0</h4>
|
|
||||||
<p>Using the <strong>new theme editor</strong> in Chat Settings (or <em>Appearance Settings</em> on iOS), you can quickly tweak the style of elements in Telegram chats and add <strong>awesome gradients</strong> to both your messages and your background. Switch between tabs (Main Color, Background, My Messages) to see how deep this rabbit hole goes:</p>
|
|
||||||
<div class="blog_video_player_wrap" style="max-width: 400px; margin: 20px auto 20px;">
|
|
||||||
<video class="blog_video_player tl_blog_vid_autoplay" onclick="videoTogglePlay(this)" autoplay loop controls muted poster="/file/464001901/1/VR5l86UqaBI.47366/3a8b96e6ff0760c95e" style="max-width: 400px;" title="Could all these gradients be a complex allegory for there being no good or evil, only a spectrum between? Nah." alt="Video demonstrating the new gradient tool in the updated in-app theme editor.">
|
|
||||||
<source src="/file/464001940/3/78UcwEnPEuo.4799153.mp4/e4262626f9e88a0e4f" type="video/mp4">
|
|
||||||
</video>
|
|
||||||
</div>
|
|
||||||
|
|
||||||
<p>Once you're done editing, you can quickly <strong>share the result</strong> of your work with friends so that they can continue tuning your theme. </p>
|
|
||||||
<p>By the way, this update includes dozens of new <strong>cool patterns</strong> you can apply to your background. Our favorites are the <em>Math</em> and <em>Parisian</em> motifs, but there's also one we made especially for New Year's Eve.</p>
|
|
||||||
<div class="blog_wide_image">
|
|
||||||
<a href="/file/464001326/1/eHuBKzF9Lh4.288899/1f135a074a169f90e5" target="_blank"><img src="/file/464001098/2/aw1iikW0b4I.78035/2083cd76dcb5f4fda4" title="Guess which one I tattoed on my back." alt="Screenshot demonstrating some of the new background patterns." srcset="/file/464001326/1/eHuBKzF9Lh4.288899/1f135a074a169f90e5 , 2x" /></a>
|
|
||||||
</div>
|
|
||||||
|
|
||||||
<p>There are new patterns with cats as well. And space. And cats <em>in</em> space. No time to explain, go check them all out.</p>
|
|
||||||
<!--Hardcore theme builders may also like the [Online Theme Editor](http://themes.telegram.org), which allows editing themes for Telegram apps across all platforms – down to the tiniest details.-->
|
|
||||||
|
|
||||||
<h4><a class="anchor" name="new-predefined-colors" href="#new-predefined-colors"><i class="anchor-icon"></i></a>New Predefined Colors</h4>
|
|
||||||
<p>Not in a creative mood? Not a problem – we've added a boatload of new <strong>predefined color schemes</strong> for Telegram's default themes. The theme of your dreams may be just a few taps away, try the new options under Classic, Night, Day, etc.</p>
|
|
||||||
<div class="blog_video_player_wrap" style="max-width: 400px; margin: 20px auto 20px;">
|
|
||||||
<video class="blog_video_player tl_blog_vid_autoplay" onclick="videoTogglePlay(this)" autoplay loop controls muted poster="/file/464001646/1/Up0xQ5gYxHo.115103/55b454d4a092bc269c" style="max-width: 400px;" title="Beep. Beep. The outrageously funny alt description for this video is temporarily unavailble." alt="Video demonstrating the interface for selecting different flavors for various themes.">
|
|
||||||
<source src="/file/464001778/1/TPP15fpcrKI.4256659.mp4/54316060947da7a345" type="video/mp4">
|
|
||||||
</video>
|
|
||||||
</div>
|
|
||||||
|
|
||||||
<h4><a class="anchor" name="send-when-online" href="#send-when-online"><i class="anchor-icon"></i></a>Send When Online</h4>
|
|
||||||
<p>Some things are best served fresh, like sushi and today's hot memes. For messages that have to be delivered at the perfect moment, we've added the option to <a href="https://telegram.org/blog/scheduled-reminders-themes">schedule messages</a> to be sent when your recipient <strong>comes online</strong>.</p>
|
|
||||||
<p>Now you can slide your message in with the morning post – or time a funky <a href="http://t.me/addstickers/FunkyGoose">duck sticker</a> for the exact moment a meeting gets boring.</p>
|
|
||||||
<div class="blog_video_player_wrap" style="max-width: 400px; margin: 20px auto 20px;">
|
|
||||||
<video class="blog_video_player tl_blog_vid_autoplay" onclick="videoTogglePlay(this)" autoplay loop controls muted poster="/file/464001964/1/IM2V7yQkHe0.61235/2b707f5f0ef477a9ab" style="max-width: 400px;" title="Warning: it's only a nice surprise if you have something in your fridge besides mold and sauces." alt="Video demonstrating a message scheduled to be sent when the recipient comes online.">
|
|
||||||
<source src="/file/464001827/1/DZuyKitefxE.1593030.mp4/4bfc00ee5ff633eec8" type="video/mp4">
|
|
||||||
</video>
|
|
||||||
</div>
|
|
||||||
|
|
||||||
<p>Note that this option is only available if you are allowed to see your recipient's <strong>online status</strong>. You can still sneak out of bed without anyone noticing.</p>
|
|
||||||
<h4><a class="anchor" name="improved-venue-sharing" href="#improved-venue-sharing"><i class="anchor-icon"></i></a>Improved Venue Sharing</h4>
|
|
||||||
<p>Location sharing has been updated to make finding <strong>venues</strong> easier. You can now tap a place directly on the map to select it, rather than scrolling through a list of all the power converter purveyors in Tosche Station.</p>
|
|
||||||
<div class="blog_video_player_wrap" style="max-width: 400px; margin: 20px auto 20px;">
|
|
||||||
<video class="blog_video_player tl_blog_vid_autoplay" onclick="videoTogglePlay(this)" autoplay loop controls muted poster="/file/464001545/3/09ABP2qHDXM.49775/b20106955a29bd00b3" style="max-width: 400px;" title="Take a left here, a right there and then just go home and order pizza." alt="Video demonstrating the new interfaces for selecting venues when sharing your location.">
|
|
||||||
<source src="/file/464001001/2/kK42x966ldI.2546166.mp4/b0b6867e919a6af532" type="video/mp4">
|
|
||||||
</video>
|
|
||||||
</div>
|
|
||||||
|
|
||||||
|
|
||||||
<h4><a class="anchor" name="view-search-results-as-a-list" href="#view-search-results-as-a-list"><i class="anchor-icon"></i></a>View Search Results as a List</h4>
|
|
||||||
<p>The <strong>Search</strong> function allows you to easily jump between messages containing a keyword – or sent by a particular person, or even from a certain day. Tapping the bottom bar will now switch to <strong>list view</strong> in case you want to see all the results on one page.</p>
|
|
||||||
<div class="blog_video_player_wrap" style="max-width: 400px; margin: 20px auto 20px;">
|
|
||||||
<video class="blog_video_player tl_blog_vid_autoplay" onclick="videoTogglePlay(this)" autoplay loop controls muted poster="/file/464001383/1/EBFGSSKs2Tw.64079/4546de30337d261dee" style="max-width: 400px;" title="Find the message you're looking for in less than 80 days." alt="Video showcasing the new list view in Search Mode on mobile apps.">
|
|
||||||
<source src="/file/464001736/4/yJh_JSGIvXE.2070301.mp4/6c6491f73de700ed02" type="video/mp4">
|
|
||||||
</video>
|
|
||||||
</div>
|
|
||||||
|
|
||||||
<p>On iOS, you can also <strong>select several messages</strong> without leaving Search Mode. (Before you ask, this feature was already available on Android.)</p>
|
|
||||||
<div class="blog_image_wrap blog_medium_image_wrap">
|
|
||||||
<a href="/file/464001535/1/99wTv6AlGEg.197772/9e25366591a945adef" target="_blank"><img src="/file/464001370/1/Jevee8922FI.44850/639b8d8af12f50f8b0" title="This would have really helped out in that one movie with Ellen Degeneres and the fish. What was it called again?" alt="Screenshot showing several messages selected in a chat on iOS – without leaving the Search Mode." srcset="/file/464001535/1/99wTv6AlGEg.197772/9e25366591a945adef , 2x" /></a>
|
|
||||||
</div>
|
|
||||||
|
|
||||||
|
|
||||||
<h4><a class="anchor" name="podcast-and-audiobook-support" href="#podcast-and-audiobook-support"><i class="anchor-icon"></i></a>Podcast and Audiobook Support</h4>
|
|
||||||
<p>You've always been able to <a href="https://telegram.org/blog/6-years#january-2014">share files</a> of up to <strong>1,5 GB</strong>, but podcasts and audiobooks now get special treatment. Telegram apps will <strong>remember</strong> your last position when resuming playback of audio files longer than <strong>20 minutes</strong>.</p>
|
|
||||||
<p>If you'd like to make podcasts get to the point a little faster, try the new <strong>2x button</strong> (which you already know from <a href="https://telegram.org/blog/unread-replace-2x#double-time-playback-for-voice-and-video-messages">voice messages</a>). We've eliminated voice chipmunking in <strong>96.8%</strong> of cases.</p>
|
|
||||||
<div class="blog_image_wrap blog_medium_image_wrap">
|
|
||||||
<a href="/file/464001799/1/H0-d1_YTmjM.38870/4e71d3de0a3d815312" target="_blank"><img src="/file/464001102/3/iTTm_lt_S74.10358/919a285f00c125fb26" title="1x playback tests show that the remaining 3.2% were using helium in the original recordings." alt="Screenshot showing the location of the 2x playback button for long audio files." srcset="/file/464001799/1/H0-d1_YTmjM.38870/4e71d3de0a3d815312 , 2x" /></a>
|
|
||||||
</div>
|
|
||||||
|
|
||||||
<p>On iOS, you can skip forward and back with <strong>high-precision scrubbing</strong>: just hold on the progress bar and slide your finger down, then left or right.</p>
|
|
||||||
<h3><a class="anchor" name="new-on-android" href="#new-on-android"><i class="anchor-icon"></i></a>New On Android</h3>
|
|
||||||
<h4><a class="anchor" name="switch-to-night-mode-faster" href="#switch-to-night-mode-faster"><i class="anchor-icon"></i></a>Switch to Night Mode Faster</h4>
|
|
||||||
<p>Telegram has shielded your eyes in dark places with <strong>Night Mode</strong> <a href="https://telegram.org/blog/android-themes">since 2017</a>. The power of the sun and moon are now even easier to control, with the <strong>Night Mode Switch</strong> at the top of the menu. Tap the moon icon and watch the sun rise and fall at your whim. </p>
|
|
||||||
<div class="blog_video_player_wrap" style="max-width: 400px; margin: 20px auto 20px;">
|
|
||||||
<video class="blog_video_player tl_blog_vid_autoplay" onclick="videoTogglePlay(this)" autoplay loop controls muted poster="/file/464001699/2/FMAg2HRGVws.25082/0c3df7e5a71655e205" style="max-width: 400px;" title="You merely adopted the Night Mode. I was born in it – molded by it." alt="The new night mode switch in the side menu on Android.">
|
|
||||||
<source src="/file/464001202/2/zlwQac9YpVM.1707120.mp4/4a6d4d270aec062b02" type="video/mp4">
|
|
||||||
</video>
|
|
||||||
</div>
|
|
||||||
|
|
||||||
<p><strong>Maps</strong> have also joined the <strong>dark side</strong> in Night Mode, so you don't accidentally burn yourself while browsing locations late in the evening. Ve do as the count vills. (•,..,•)</p>
|
|
||||||
<div class="blog_image_wrap blog_medium_image_wrap">
|
|
||||||
<a href="/file/464001940/2/K7sbpHahUvY.106003/90092e1ef67983967a" target="_blank"><img src="/file/464001529/1/KemhvWvc7kg.28653/0bfbdcb2b30cf1185a" title="Ver is ze nearest blood bank?" alt="A shared location on a map in Night Mode on Telegram for Android." srcset="/file/464001940/2/K7sbpHahUvY.106003/90092e1ef67983967a , 2x" /></a>
|
|
||||||
</div>
|
|
||||||
|
|
||||||
<p>On iOS, dark maps turn on and off with the <strong>system dark mode</strong>. Speaking of which, we recently added the option to <strong>sync</strong> your Telegram theme with system dark mode on <strong>iOS 13</strong>.</p>
|
|
||||||
<!-- <div class="blog_image_wrap blog_medium_image_wrap">
|
|
||||||
<a href="/file/464001557/2/PWaY5cGWElA.75272/a9aa4e0eaecf9c3237" target="_blank"><img src="/file/464001147/1/V3TENnQbBMw.18931/bc88c7922913f858a6" title="TITLE" alt="TITLE" srcset="/file/464001557/2/PWaY5cGWElA.75272/a9aa4e0eaecf9c3237 , 2x" /></a>
|
|
||||||
</div>-->
|
|
||||||
|
|
||||||
<h4><a class="anchor" name="sleek-new-animations" href="#sleek-new-animations"><i class="anchor-icon"></i></a>Sleek New Animations</h4>
|
|
||||||
<p>We've peppered the interface with little ripple animations when you press on things to help you get more joy out of buttons. Snappy new animations await when jumping between messages in a chat, opening global search or pulling out the archive folder. To get a closer look at a user's profile picture, drag down on their profile page.</p>
|
|
||||||
<div class="blog_video_player_wrap" style="max-width: 400px; margin: 20px auto 20px;">
|
|
||||||
<video class="blog_video_player tl_blog_vid_autoplay" onclick="videoTogglePlay(this)" autoplay loop controls muted poster="/file/464001758/1/GMGyChzyzY8.34928/34bac72677de28c88f" style="max-width: 400px;" title="A whole minute on Telegram and not a single message sent? Maybe these animations are too distracting." alt="Video showcasing the new animations described above.">
|
|
||||||
<source src="/file/464001947/1/8bR1gGf42tU.3527798.mp4/58cef6401052b430ae" type="video/mp4">
|
|
||||||
</video>
|
|
||||||
</div>
|
|
||||||
|
|
||||||
<h4><a class="anchor" name="select-parts-of-messages" href="#select-parts-of-messages"><i class="anchor-icon"></i></a>Select Parts of Messages</h4>
|
|
||||||
<p>Following in the <a href="https://telegram.org/blog/scheduled-reminders-themes#redesigned-message-options">footsteps</a> of the iOS app, Android now also lets you <strong>select a portion</strong> of the message text to copy or share, instead of only the full text. Sometimes you only want a slice, rather than the whole pie.</p>
|
|
||||||
<div class="blog_video_player_wrap" style="max-width: 400px; margin: 20px auto 20px;">
|
|
||||||
<video class="blog_video_player tl_blog_vid_autoplay" onclick="videoTogglePlay(this)" autoplay loop controls muted poster="/file/464001946/1/eMBgeO6JUV0.47066/3ffd7e806c79010f51" style="max-width: 400px;" title="If you find a gold bar in trash bag, will you take the whole trash can or just the gold bar?" alt="Selecting a part of the message text on Telegram for Android">
|
|
||||||
<source src="/file/464001263/1/FmNcpmmEUdI.1670740.mp4/4ed03c0402e1b972e7" type="video/mp4">
|
|
||||||
</video>
|
|
||||||
</div>
|
|
||||||
|
|
||||||
<h4><a class="anchor" name="multi-sharing-from-other-apps" href="#multi-sharing-from-other-apps"><i class="anchor-icon"></i></a>Multi-sharing from Other Apps</h4>
|
|
||||||
<p>Sharing is caring, so we've made it easier than ever to <strong>share</strong> content <strong>from other apps</strong> with your friends. You can now tap and hold to select <strong>multiple recipients</strong> – and even add a <strong>comment</strong> in case your savage subtweet needs some context.</p>
|
|
||||||
<div class="blog_video_player_wrap" style="max-width: 400px; margin: 20px auto 20px;">
|
|
||||||
<video class="blog_video_player tl_blog_vid_autoplay" onclick="videoTogglePlay(this)" autoplay loop controls muted poster="/file/464001000/3/fS-99LFh0Qw.72702/e185f283a2b73f331e" style="max-width: 400px;" title="You get a cat pic, you get a cat pic, EVERYONE gets a cat pic!" alt="Sharing a picture from another app to several Telegram contacts at once with a comment.">
|
|
||||||
<source src="/file/464001398/2/_wn4pijwOo0.1405179.mp4/24625a2b2c34094109" type="video/mp4">
|
|
||||||
</video>
|
|
||||||
</div>
|
|
||||||
|
|
||||||
<h4><a class="anchor" name="mark-archive-as-read" href="#mark-archive-as-read"><i class="anchor-icon"></i></a>Mark Archive as Read</h4>
|
|
||||||
<p>A cluttered chat list reflects a cluttered mind. Clear up those extra unread message counters in your <strong>archive</strong> by tapping and holding the archive folder and marking them all <strong>read</strong>. (Not to be confused with marking it red, that's a job for themes.)</p>
|
|
||||||
<div class="blog_image_wrap blog_medium_image_wrap">
|
|
||||||
<a href="/file/464001273/2/WGCY0NYAC9Y.36622/6e6ff6ebc87edfe36d" target="_blank"><img src="/file/464001046/3/eef62caOcAI.10275/6ed3c830cac14dcf25" title="A vast trove of knowledge, news updates from all over the world, spiciest memes? Eh, you'll get to them one day." alt="Mark all messages as read in the Archive on Android." srcset="/file/464001273/2/WGCY0NYAC9Y.36622/6e6ff6ebc87edfe36d , 2x" /></a>
|
|
||||||
</div>
|
|
||||||
|
|
||||||
<h4><a class="anchor" name="and-other-android-goodies" href="#and-other-android-goodies"><i class="anchor-icon"></i></a>And Other Android Goodies</h4>
|
|
||||||
<p>You can сhoose <strong>video quality</strong> in a more intuitive way when sending videos.</p>
|
|
||||||
<div class="blog_image_wrap blog_medium_image_wrap">
|
|
||||||
<a href="/file/464001957/1/_MFxEGvlB9g.101264/0711e002071f6abba8" target="_blank"><img src="/file/464001700/1/Ej0KTSHPkos.19309/a9a2935e38344fa30f" title="Gradients, light and dark themes, the balance between higher quality and smaller size — we dedicate this update to metaphors that cut deep." alt="New button for selecting video quality when sending a video." srcset="/file/464001957/1/_MFxEGvlB9g.101264/0711e002071f6abba8 , 2x" /></a>
|
|
||||||
</div>
|
|
||||||
|
|
||||||
<p><strong>Sending contacts</strong> now uses a simple, card-style interface that won't take up your whole screen (unless you pull up to expand it).</p>
|
|
||||||
<div class="blog_image_wrap blog_medium_image_wrap">
|
|
||||||
<a href="/file/464001464/3/0sVcVfRB8jE.88417/ec79bd9ee0b58de9d3" target="_blank"><img src="/file/464001945/1/VafYKldrQfk.22336/1b2f37597decaf3ee6" title="Search for a name to skip the wild goose chase." alt="New contact sharing screen." srcset="/file/464001330/3/3DArjzUAOr4.88417/e9905cf1bb8dfa06f4 , 2x" /></a>
|
|
||||||
</div>
|
|
||||||
|
|
||||||
<p>When you're done listening to a voice message with your phone up to your ear, Telegram automatically records a reply - but now you can disable that by turning off <a href="https://telegram.org/blog/voice-2-secret-3">Raise to Speak</a> in your Chat Settings. </p>
|
|
||||||
<p>We found <strong>31</strong> other shiny bugs to fix and improvements to make on Android, just in time for your Telegram advent calendar. See if you can find them all.</p>
|
|
||||||
<h3><a class="anchor" name="new-on-ios" href="#new-on-ios"><i class="anchor-icon"></i></a>New on iOS</h3>
|
|
||||||
<h4><a class="anchor" name="text-size-all-the-way" href="#text-size-all-the-way"><i class="anchor-icon"></i></a>Text Size, All the Way</h4>
|
|
||||||
<p>You've been able to adjust the size of message text on Telegram from the beginning, but now you can scale the font size <strong>throughout the app</strong>. I'm not sure if Grandma reads this blog regularly, so you may have to tell her yourself.</p>
|
|
||||||
<div class="blog_image_wrap blog_medium_image_wrap">
|
|
||||||
<a href="/file/464001385/1/VQCWzMGRVe0.99269/cad5fb874870247178" target="_blank"><img src="/file/464001953/1/-jN0wJsndOo.24145/7dfc99dfec095c62ee" title="VLADISLAV: I've managed to find a woman up, watching television. And, uh, she seems like she'd be a good victim. I'm just going to use hypnosis on her... See me... See me... She can't, she can't see me from that angle." alt="Telegram for iOS with enlarged font." srcset="/file/464001385/1/VQCWzMGRVe0.99269/cad5fb874870247178 , 2x" /></a>
|
|
||||||
</div>
|
|
||||||
|
|
||||||
<h4><a class="anchor" name="choose-your-browser" href="#choose-your-browser"><i class="anchor-icon"></i></a>Choose Your Browser</h4>
|
|
||||||
<p><strong>External browsers</strong> are now supported for opening <a href="https://www.youtube.com/watch?v=dQw4w9WgXcQ">links</a> – you can select your preferred app in <em>Settings > Data and Storage > Other</em>.</p>
|
|
||||||
<div class="blog_image_wrap blog_medium_image_wrap">
|
|
||||||
<a href="/file/464001174/2/ONVx9TTdnRk.74522/7b2b3bf545d016d3d3" target="_blank"><img src="/file/464001848/2/KesoNZi-8Cs.16964/c8340c31f1b75e0ea7" title="Did you click the link? That never gets old." alt="Browser settings screen." srcset="/file/464001174/2/ONVx9TTdnRk.74522/7b2b3bf545d016d3d3 , 2x" /></a>
|
|
||||||
</div>
|
|
||||||
|
|
||||||
<h4><a class="anchor" name="share-sheet-settings" href="#share-sheet-settings"><i class="anchor-icon"></i></a>Share Sheet Settings</h4>
|
|
||||||
<p>Your most popular Telegram chats were recently added to the <strong>iOS Share Sheet</strong>. In case you'd like to control what can (or can't <img class="emoji" src="//telegram.org/img/emoji/40/F09F9889.png" width="20" height="20" alt="😉" />) appear there, you can use the new toggles under <em>Settings > Data and Storage > Other > Share Sheet</em>.</p>
|
|
||||||
<div class="blog_image_wrap blog_medium_image_wrap">
|
|
||||||
<a href="/file/464001300/2/jCLqUKbXnzQ.125832/40b9d6908d21c9c557" target="_blank"><img src="/file/464001413/1/_LpKEoSDAfY.29917/c2409ea008ac06d8be" title="For those who want to keep their sheet to themselves." alt="Share Sheet settings screen." srcset="/file/464001300/2/jCLqUKbXnzQ.125832/40b9d6908d21c9c557 , 2x" /></a>
|
|
||||||
</div>
|
|
||||||
|
|
||||||
<h4><a class="anchor" name="switch-accounts-faster" href="#switch-accounts-faster"><i class="anchor-icon"></i></a>Switch Accounts Faster</h4>
|
|
||||||
<p>Superman has had a hard time finding phone booths lately, so we added a way to swiftly <strong>switch accounts</strong> right from your home screen on <strong>iOS 13</strong>. Simply hold down on the app icon any time you need to change costumes.</p>
|
|
||||||
<div class="blog_image_wrap blog_medium_image_wrap">
|
|
||||||
<a href="/file/464001881/1/6NU71RU0VsU.107754/a718acc69b1aa37c16" target="_blank"><img src="/file/464001017/1/bezOkiLLD1M.27407/5b797083df20d4392f" title="Never mind the red button that photobombed this screenshot." alt="App menu on an iOS 13 home screen, featuring a 'Switch Account' button" srcset="/file/464001881/1/6NU71RU0VsU.107754/a718acc69b1aa37c16 , 2x" /></a>
|
|
||||||
</div>
|
|
||||||
|
|
||||||
<p>Remember that you can use Telegram with <a href="https://telegram.org/blog/autoplay#multiple-account-support">multiple accounts</a>, switching between up to <strong>3 phone numbers</strong> without logging out.</p>
|
|
||||||
<h4><a class="anchor" name="storage-usage-at-a-glance" href="#storage-usage-at-a-glance"><i class="anchor-icon"></i></a>Storage Usage At a Glance</h4>
|
|
||||||
<p>The <strong>Storage Usage</strong> page has been <strong>redesigned</strong> to more quickly find the settings you're looking for. It also shows your device's storage status, and how much space all those other pesky apps are using compared to Telegram. Bigger, after all, is not always better.</p>
|
|
||||||
<p>You did know that with Telegram there's <a href="https://telegram.org/blog/cache-and-stickers">no need to store every silly meme</a> people ever sent you on your precious device, right?</p>
|
|
||||||
<div class="blog_image_wrap blog_medium_image_wrap">
|
|
||||||
<a href="/file/464001820/2/iidrvjT67vk.157694/f4e05ac3ec85afc079" target="_blank"><img src="/file/464001531/1/wvaiRo0IYgQ.37499/cb2ceba1a7b12c02a5" title="If only I could clean my apartment this easily." alt="Storage Usage settings screen." srcset="/file/464001820/2/iidrvjT67vk.157694/f4e05ac3ec85afc079 , 2x" /></a>
|
|
||||||
</div>
|
|
||||||
|
|
||||||
<h4><a class="anchor" name="cache-clearing-shortcuts" href="#cache-clearing-shortcuts"><i class="anchor-icon"></i></a>Cache-Clearing Shortcuts</h4>
|
|
||||||
<p>Selecting multiple messages in a group or channel gives you the option to <strong>clear</strong> the chat's <strong>cache</strong>. Like we said, no need to store what you don't need – but also no need to delete actual messages. Just keep things in the cloud, like the cool kids.</p>
|
|
||||||
<div class="blog_image_wrap blog_medium_image_wrap">
|
|
||||||
<a href="/file/464001962/1/doS3JNVYB14.52695/f70ab713546e4acd50" target="_blank"><img src="/file/464001969/1/pBqeoVW9zGU.13664/f89e74ac5d552d6ca8" title="Never put actual cats in a dustbin like that. If you absolutely must, try a cardboard box." alt="Clear Cache button in a channel." srcset="/file/464001962/1/doS3JNVYB14.52695/f70ab713546e4acd50 , 2x" /></a>
|
|
||||||
</div>
|
|
||||||
|
|
||||||
<p>Check out <em>Settings > Data and Storage > Storage Usage</em> for more options.</p>
|
|
||||||
<h4><a class="anchor" name="member-lists-the-shorter-scrolls" href="#member-lists-the-shorter-scrolls"><i class="anchor-icon"></i></a>Member Lists: The Shorter Scrolls</h4>
|
|
||||||
<p>In case you're looking to leave some large groups and start fresh in the new decade, long member lists will <strong>collapse</strong>, so you can get to the <em>'Leave Group'</em> button without scrolling.</p>
|
|
||||||
<p>By the way, swiping on a group or channel from the chat list and selecting <em>'Delete'</em> is still the shortest way out, but now there is more than one way to leave the New Year's party early.</p>
|
|
||||||
<div class="blog_image_wrap blog_medium_image_wrap">
|
|
||||||
<a href="/file/464001403/1/2PHYFnL-W28.112804/60092177967f5a5a7d" target="_blank"><img src="/file/464001168/1/GORhgkrcCWI.26709/7bebdc02eab48e273a" title="Another way of leaving a group chat quickly is to tell the admins you don't like Baby Yoda." alt="Group members screen with a collapsed member list." srcset="/file/464001403/1/2PHYFnL-W28.112804/60092177967f5a5a7d , 2x" /></a>
|
|
||||||
</div>
|
|
||||||
|
|
||||||
<p>And that's all for today. <strong>Happy New Year!</strong></p>
|
|
||||||
<p><strong>2020</strong> is going to be <em>fun</em>. Enjoy winter while we get back to our little warm R&D bunker deep deep underground.</p>
|
|
||||||
<div><br></div>
|
|
||||||
|
|
||||||
<p><em>December 31, 2019,<br>The Telegram Team</em></p>
|
|
||||||
<div><br></div>
|
|
||||||
|
|
||||||
<!-- **P.S.** If you don't want to miss any reindeer-themed chain emails this season, you should definitely try our [**Gmail Bot**](https://t.me/GmailBot), which allows you to access your **Gmail** account right from Telegram. We worked with Google to make sure our Gmail bot is secure and officially endorsed by the Christmas elves.--></div>
|
|
||||||
|
|
||||||
</div>
|
|
||||||
<div class="tl_main_share clearfix">
|
|
||||||
<a href="https://t.me/share/url?url=https%3A%2F%2Ftelegram.org%2Fblog%2Fverifiable-apps-and-more&text=Introducing%20Reproducible%20Apps%2C%20Theme%20Editor%202.0%2C%20Send%20When%20Online%20and%20So%20Much%20More" class="tl_telegram_share_btn" id="tl_telegram_share_btn" data-text="Introducing Reproducible Apps, Theme Editor 2.0, Send When Online and So Much More" data-url="https://telegram.org/blog/verifiable-apps-and-more"><i class="tl_telegram_share_icon"></i><span class="tl_telegram_share_label" target="_blank">Forward</span></a>
|
|
||||||
<a href="https://twitter.com/share" class="tl_twitter_share_btn" id="tl_twitter_share_btn" data-text="Introducing Reproducible Apps, Theme Editor 2.0, Send When Online and So Much More" data-url="https://telegram.org/blog/verifiable-apps-and-more" data-via="Telegram">Tweet <span class="tl_twitter_share_cnt"></span></a>
|
|
||||||
</div>
|
|
||||||
|
|
||||||
</div>
|
|
||||||
<div class="tl_main_recent_news_wrap tlb_other_news_wrap tl_blog_list_page_wrap">
|
|
||||||
<h3 class="tl_main_recent_news_header">
|
|
||||||
<a href="/blog">Other News</a>
|
|
||||||
</h3>
|
|
||||||
<div class="tl_main_recent_news_cards clearfix">
|
|
||||||
<a class="dev_blog_card_link_wrap" href="/blog/payments-2-0-scheduled-voice-chats"><div class="dev_blog_card_wrap">
|
|
||||||
<img class="dev_blog_card_image" src="https://telegram.org/file/464001783/2/6Is-qGJkgX4.92603/d4d7fe3e0fc14ff3ba" />
|
|
||||||
<div class="dev_blog_card_alltext_wrap">
|
|
||||||
<h4 class="dev_blog_card_title">Payments 2.0, Scheduled Voice Chats, New Web Versions</h4>
|
|
||||||
<div class="dev_blog_card_lead">This update brings Payments 2.0 for all Telegram chats, Scheduling and Mini Profiles for Voice Chats, new versions of Telegram Web for…</div>
|
|
||||||
</div>
|
|
||||||
<div class="dev_blog_card_date">Apr 26, 2021</div>
|
|
||||||
</div></a><a class="dev_blog_card_link_wrap" href="/blog/voice-chats-on-steroids"><div class="dev_blog_card_wrap">
|
|
||||||
<img class="dev_blog_card_image" src="https://telegram.org/file/464001855/3/O31CcF_-a20.86962/cafa0c3d7dd2df1134" />
|
|
||||||
<div class="dev_blog_card_alltext_wrap">
|
|
||||||
<h4 class="dev_blog_card_title">Voice Chats 2.0: Channels, Millions of Listeners, Recorded Chats, Admin Tools</h4>
|
|
||||||
<div class="dev_blog_card_lead">Voice Chats first appeared in December, adding a new dimension of live talk to Telegram groups. Starting today, they become available in…</div>
|
|
||||||
</div>
|
|
||||||
<div class="dev_blog_card_date">Mar 19, 2021</div>
|
|
||||||
</div></a><a class="dev_blog_card_link_wrap" href="/blog/autodelete-inv2"><div class="dev_blog_card_wrap">
|
|
||||||
<img class="dev_blog_card_image" src="https://telegram.org/file/464001701/5/WvHD2TGPSzU.74913/648f3e17886f6c96f8" />
|
|
||||||
<div class="dev_blog_card_alltext_wrap">
|
|
||||||
<h4 class="dev_blog_card_title">Auto-Delete, Widgets and Expiring Invite Links</h4>
|
|
||||||
<div class="dev_blog_card_lead">This update brings an auto-delete timer for messages in any chat, as well as new flexible invite links and faster access to your chats…</div>
|
|
||||||
</div>
|
|
||||||
<div class="dev_blog_card_date">Feb 23, 2021</div>
|
|
||||||
</div></a><a class="dev_blog_card_link_wrap" href="/blog/move-history"><div class="dev_blog_card_wrap">
|
|
||||||
<img class="dev_blog_card_image" src="https://telegram.org/file/464001185/1/Z6LVvcYB03g.64305/e8ff8c87c4d656cbe1" />
|
|
||||||
<div class="dev_blog_card_alltext_wrap">
|
|
||||||
<h4 class="dev_blog_card_title">Moving Chat History from Other Apps</h4>
|
|
||||||
<div class="dev_blog_card_lead">Over 100 million new users joined Telegram this January, seeking more privacy and freedom. But what about the messages and memories that remain in older apps? Starting today, everyone…</div>
|
|
||||||
</div>
|
|
||||||
<div class="dev_blog_card_date">Jan 28, 2021</div>
|
|
||||||
</div></a>
|
|
||||||
</div>
|
|
||||||
</div>
|
|
||||||
|
|
||||||
</div>
|
|
||||||
</div>
|
|
||||||
</div>
|
|
||||||
<div class="footer_wrap">
|
|
||||||
<div class="footer_columns_wrap footer_desktop">
|
|
||||||
<div class="footer_column footer_column_telegram">
|
|
||||||
<h5>Telegram</h5>
|
|
||||||
<div class="footer_telegram_description"></div>
|
|
||||||
Telegram is a cloud-based mobile and desktop messaging app with a focus on security and speed.
|
|
||||||
</div>
|
|
||||||
|
|
||||||
<div class="footer_column">
|
|
||||||
<h5><a href="/faq">About</a></h5>
|
|
||||||
<ul>
|
|
||||||
<li><a href="/faq">FAQ</a></li>
|
|
||||||
<li><a href="/blog">Blog</a></li>
|
|
||||||
<li><a href="/jobs">Jobs</a></li>
|
|
||||||
</ul>
|
|
||||||
</div>
|
|
||||||
<div class="footer_column">
|
|
||||||
<h5><a href="/apps#mobile-apps">Mobile Apps</a></h5>
|
|
||||||
<ul>
|
|
||||||
<li><a href="/dl/ios">iPhone/iPad</a></li>
|
|
||||||
<li><a href="/dl/android">Android</a></li>
|
|
||||||
<li><a href="/dl/wp">Windows Phone</a></li>
|
|
||||||
</ul>
|
|
||||||
</div>
|
|
||||||
<div class="footer_column">
|
|
||||||
<h5><a href="/apps#desktop-apps">Desktop Apps</a></h5>
|
|
||||||
<ul>
|
|
||||||
<li><a href="//desktop.telegram.org/">PC/Mac/Linux</a></li>
|
|
||||||
<li><a href="//macos.telegram.org/">macOS</a></li>
|
|
||||||
<li><a href="/dl/web">Web-browser</a></li>
|
|
||||||
</ul>
|
|
||||||
</div>
|
|
||||||
<div class="footer_column footer_column_platform">
|
|
||||||
<h5><a href="//core.telegram.org/">Platform</a></h5>
|
|
||||||
<ul>
|
|
||||||
<li><a href="//core.telegram.org/api">API</a></li>
|
|
||||||
<li><a href="//translations.telegram.org/">Translations</a></li>
|
|
||||||
<li><a href="//instantview.telegram.org/">Instant View</a></li>
|
|
||||||
</ul>
|
|
||||||
</div>
|
|
||||||
</div>
|
|
||||||
<div class="footer_columns_wrap footer_mobile">
|
|
||||||
<div class="footer_column">
|
|
||||||
<h5><a href="/faq">About</a></h5>
|
|
||||||
</div>
|
|
||||||
<div class="footer_column">
|
|
||||||
<h5><a href="/blog">Blog</a></h5>
|
|
||||||
</div>
|
|
||||||
<div class="footer_column">
|
|
||||||
<h5><a href="/apps">Apps</a></h5>
|
|
||||||
</div>
|
|
||||||
<div class="footer_column">
|
|
||||||
<h5><a href="//core.telegram.org/">Platform</a></h5>
|
|
||||||
</div>
|
|
||||||
<div class="footer_column">
|
|
||||||
<h5><a href="https://twitter.com/telegram" target="_blank" data-track="Follow/Twitter" onclick="trackDlClick(this, event)">Twitter</a></h5>
|
|
||||||
</div>
|
|
||||||
</div>
|
|
||||||
</div>
|
|
||||||
<script src="/js/main.js?42"></script>
|
|
||||||
|
|
||||||
<script>initScrollVideos(true);
|
|
||||||
twitterCustomShareInit();
|
|
||||||
blogSideImageInit();
|
|
||||||
backToTopInit("Go up");
|
|
||||||
removePreloadInit();
|
|
||||||
</script>
|
|
||||||
</body>
|
|
||||||
</html>
|
|
||||||
|
|
|
@ -1,162 +0,0 @@
|
||||||
<!DOCTYPE html>
|
|
||||||
<html>
|
|
||||||
<head>
|
|
||||||
<meta charset="utf-8">
|
|
||||||
<title>Telegram Themes</title>
|
|
||||||
<meta name="viewport" content="width=device-width, initial-scale=1.0, minimum-scale=1.0, maximum-scale=1.0, user-scalable=no" />
|
|
||||||
<meta name="format-detection" content="telephone=no" />
|
|
||||||
<meta http-equiv="X-UA-Compatible" content="IE=edge" />
|
|
||||||
<meta name="MobileOptimized" content="176" />
|
|
||||||
<meta name="HandheldFriendly" content="True" />
|
|
||||||
<link rel="icon" type="image/svg+xml" href="/img/website_icon.svg?4">
|
|
||||||
<link rel="alternate icon" href="/favicon.ico?4" type="image/x-icon" />
|
|
||||||
<script>document.cookie="stel_dt="+encodeURIComponent((new Date).getTimezoneOffset())+";path=/;max-age=31536000;samesite=None;secure"</script>
|
|
||||||
|
|
||||||
<link href="https://fonts.googleapis.com/css?family=Roboto:400,500,700" rel="stylesheet" type="text/css">
|
|
||||||
<link href="/css/bootstrap.min.css?3" rel="stylesheet">
|
|
||||||
<link href="/css/bootstrap-extra.css?2" rel="stylesheet">
|
|
||||||
<link href="/css/telegram.css?212" rel="stylesheet">
|
|
||||||
<link href="/css/themes.css?7" rel="stylesheet">
|
|
||||||
<link href="/css/jquery-ui.min.css" rel="stylesheet">
|
|
||||||
|
|
||||||
</head>
|
|
||||||
<body class="emoji_image no-transition">
|
|
||||||
|
|
||||||
<div id="aj_progress" class="progress-bar"></div>
|
|
||||||
|
|
||||||
<div id="aj_content"><a class="th-dl-button" href="//telegram.org/dl">
|
|
||||||
Don't have <b>Telegram</b> yet? <span class="th-dl-button-try">Try it now</span>
|
|
||||||
</a>
|
|
||||||
<section class="th-main">
|
|
||||||
<div class="th-main-content">
|
|
||||||
<div class="th-main-icon"></div>
|
|
||||||
<h1>Telegram Theme Editor</h1>
|
|
||||||
<p>The online theme editor allows you to create and modify your existing cloud themes for every platform. Any changes will appear in the apps immediately after you save them.</p>
|
|
||||||
<a href="/auth" class="th-login-editor-btn need-auth">Log in to Theme Editor</a>
|
|
||||||
</div>
|
|
||||||
</section><div class="popup-container login-popup-container hide" id="login-popup-container">
|
|
||||||
<div class="popup">
|
|
||||||
<div class="popup-body">
|
|
||||||
<section>
|
|
||||||
<h2>Log In</h2>
|
|
||||||
<p>Log in here to modify your cloud themes on the fly. Please enter your <b>phone number</b> in the <a target="_blank" rel="noopener" href="https://telegram.org/faq#login-and-sms">international format</a> and we will send a confirmation message to your account via Telegram.</p>
|
|
||||||
|
|
||||||
<form id="send-form" class="login-form">
|
|
||||||
<div class="form-group">
|
|
||||||
<input type="tel" class="form-control th-form-control input-lg" id="login-phone" placeholder="+12223334455" autocomplete="off"/>
|
|
||||||
</div>
|
|
||||||
<div class="popup-buttons">
|
|
||||||
<a class="btn btn-link btn-lg login-cancel-btn">Cancel</a><button type="submit" class="btn btn-link btn-lg">Next</button>
|
|
||||||
</div>
|
|
||||||
</form>
|
|
||||||
|
|
||||||
<div id="login-form" class="hide">
|
|
||||||
<div class="form-group">
|
|
||||||
<span class="form-control th-form-control input input-lg input-disabled"><strong id="login-phone-field"></strong> (<a class="login-back" href="/auth">Incorrect?</a>)</span>
|
|
||||||
<p class="help-block dots-animated">We've just sent you a message.<br/>Please confirm access via Telegram</p>
|
|
||||||
</div>
|
|
||||||
<div class="popup-buttons">
|
|
||||||
<a class="btn btn-link btn-lg login-cancel-btn">Cancel</a><a class="btn btn-link btn-lg login-back">Back</a>
|
|
||||||
</div>
|
|
||||||
</div>
|
|
||||||
</section>
|
|
||||||
</div>
|
|
||||||
</div>
|
|
||||||
</div></div>
|
|
||||||
<script src="/js/jquery.min.js?1"></script>
|
|
||||||
<script src="/js/bootstrap.min.js"></script>
|
|
||||||
<script src="/js/main-aj.js?51"></script>
|
|
||||||
<script src="/js/themes.js?6"></script>
|
|
||||||
<script src="/js/jquery-ui.min.js?1"></script>
|
|
||||||
|
|
||||||
<script>ajInit({"version":283,"apiUrl":"\/api?hash=telegram-crawler","unauth":true});</script>
|
|
||||||
<script id="aj_script">Aj.onLoad(function(state) {
|
|
||||||
function requestConfirmation(event) {
|
|
||||||
event && event.preventDefault();
|
|
||||||
var phone = $('#login-phone').val();
|
|
||||||
$.ajax({
|
|
||||||
type: 'POST',
|
|
||||||
url: '/auth/request',
|
|
||||||
data: {
|
|
||||||
phone: phone
|
|
||||||
},
|
|
||||||
success: function(result) {
|
|
||||||
$('#login-phone-field').text(phone);
|
|
||||||
$('#send-form').addClass('hide');
|
|
||||||
$('#login-form').removeClass('hide');
|
|
||||||
checkAuth(result.temp_session);
|
|
||||||
},
|
|
||||||
error: function(xhr) {
|
|
||||||
showAlert(xhr.responseText || 'Server error');
|
|
||||||
},
|
|
||||||
dataType: 'json'
|
|
||||||
});
|
|
||||||
return false;
|
|
||||||
}
|
|
||||||
function cancelConfirmation(event) {
|
|
||||||
event && event.preventDefault();
|
|
||||||
$('#login-phone-field').text('');
|
|
||||||
$('#send-form').removeClass('hide');
|
|
||||||
$('#login-form').addClass('hide');
|
|
||||||
$('#login-phone').focus();
|
|
||||||
clearTimeout(window.authTimeout);
|
|
||||||
return false;
|
|
||||||
}
|
|
||||||
function checkAuth(temp_session) {
|
|
||||||
clearTimeout(window.authTimeout);
|
|
||||||
window.authTimeout = setTimeout(function doCheckAuth() {
|
|
||||||
$.ajax({
|
|
||||||
type: 'POST',
|
|
||||||
url: '/auth/login',
|
|
||||||
data: {
|
|
||||||
temp_session: temp_session
|
|
||||||
},
|
|
||||||
success: function(result) {
|
|
||||||
if (result) {
|
|
||||||
location.reload();
|
|
||||||
} else {
|
|
||||||
checkAuth(temp_session);
|
|
||||||
}
|
|
||||||
},
|
|
||||||
error: function (xhr) {
|
|
||||||
showAlert(xhr.responseText || 'Server error');
|
|
||||||
},
|
|
||||||
dataType: 'json'
|
|
||||||
});
|
|
||||||
}, 700);
|
|
||||||
}
|
|
||||||
$('#login-popup-container').on('popup:open', function() {
|
|
||||||
$('#login-phone').focus();
|
|
||||||
});
|
|
||||||
$('#login-popup-container').on('popup:close', function() {
|
|
||||||
cancelConfirmation();
|
|
||||||
if (location.pathname == '/auth') {
|
|
||||||
window.history && history.replaceState(null, null, '/');
|
|
||||||
}
|
|
||||||
});
|
|
||||||
$('#login-popup-container #send-form').on('submit', requestConfirmation);
|
|
||||||
$('#login-popup-container .login-cancel-btn').on('click', function(e) {
|
|
||||||
e.preventDefault();
|
|
||||||
closePopup('#login-popup-container');
|
|
||||||
});
|
|
||||||
$('#login-popup-container .login-back').on('click', cancelConfirmation);
|
|
||||||
$('header .login-link').on('click', function(e) {
|
|
||||||
e.stopImmediatePropagation();
|
|
||||||
e.preventDefault();
|
|
||||||
openPopup('#login-popup-container');
|
|
||||||
});
|
|
||||||
});
|
|
||||||
Aj.onUnload(function(state) {
|
|
||||||
$('#login-popup-container').off('popup:open');
|
|
||||||
$('#login-popup-container').off('popup:close');
|
|
||||||
$('#login-popup-container #send-form').off('submit');
|
|
||||||
$('#login-popup-container .login-cancel-btn').off('click');
|
|
||||||
$('#login-popup-container .login-back').off('click');
|
|
||||||
$('header .login-link').off('click');
|
|
||||||
});
|
|
||||||
</script>
|
|
||||||
<script>Aj.pageLoaded();</script>
|
|
||||||
|
|
||||||
</body>
|
|
||||||
</html>
|
|
||||||
|
|
|
@ -1,163 +0,0 @@
|
||||||
<!DOCTYPE html>
|
|
||||||
<html>
|
|
||||||
<head>
|
|
||||||
<meta charset="utf-8">
|
|
||||||
<title>Telegram Themes</title>
|
|
||||||
<meta name="viewport" content="width=device-width, initial-scale=1.0, minimum-scale=1.0, maximum-scale=1.0, user-scalable=no" />
|
|
||||||
<meta name="format-detection" content="telephone=no" />
|
|
||||||
<meta http-equiv="X-UA-Compatible" content="IE=edge" />
|
|
||||||
<meta name="MobileOptimized" content="176" />
|
|
||||||
<meta name="HandheldFriendly" content="True" />
|
|
||||||
<link rel="icon" type="image/svg+xml" href="/img/website_icon.svg?4">
|
|
||||||
<link rel="alternate icon" href="/favicon.ico?4" type="image/x-icon" />
|
|
||||||
<script>document.cookie="stel_dt="+encodeURIComponent((new Date).getTimezoneOffset())+";path=/;max-age=31536000;samesite=None;secure"</script>
|
|
||||||
|
|
||||||
<link href="https://fonts.googleapis.com/css?family=Roboto:400,500,700" rel="stylesheet" type="text/css">
|
|
||||||
<link href="/css/bootstrap.min.css?3" rel="stylesheet">
|
|
||||||
<link href="/css/bootstrap-extra.css?2" rel="stylesheet">
|
|
||||||
<link href="/css/telegram.css?212" rel="stylesheet">
|
|
||||||
<link href="/css/themes.css?7" rel="stylesheet">
|
|
||||||
<link href="/css/jquery-ui.min.css" rel="stylesheet">
|
|
||||||
|
|
||||||
</head>
|
|
||||||
<body class="emoji_image no-transition">
|
|
||||||
|
|
||||||
<div id="aj_progress" class="progress-bar"></div>
|
|
||||||
|
|
||||||
<div id="aj_content"><a class="th-dl-button" href="//telegram.org/dl">
|
|
||||||
Don't have <b>Telegram</b> yet? <span class="th-dl-button-try">Try it now</span>
|
|
||||||
</a>
|
|
||||||
<section class="th-main">
|
|
||||||
<div class="th-main-content">
|
|
||||||
<div class="th-main-icon"></div>
|
|
||||||
<h1>Telegram Theme Editor</h1>
|
|
||||||
<p>The online theme editor allows you to create and modify your existing cloud themes for every platform. Any changes will appear in the apps immediately after you save them.</p>
|
|
||||||
<a href="/auth" class="th-login-editor-btn need-auth">Log in to Theme Editor</a>
|
|
||||||
</div>
|
|
||||||
</section><div class="popup-container login-popup-container hide" id="login-popup-container">
|
|
||||||
<div class="popup">
|
|
||||||
<div class="popup-body">
|
|
||||||
<section>
|
|
||||||
<h2>Log In</h2>
|
|
||||||
<p>Log in here to modify your cloud themes on the fly. Please enter your <b>phone number</b> in the <a target="_blank" rel="noopener" href="https://telegram.org/faq#login-and-sms">international format</a> and we will send a confirmation message to your account via Telegram.</p>
|
|
||||||
|
|
||||||
<form id="send-form" class="login-form">
|
|
||||||
<div class="form-group">
|
|
||||||
<input type="tel" class="form-control th-form-control input-lg" id="login-phone" placeholder="+12223334455" autocomplete="off"/>
|
|
||||||
</div>
|
|
||||||
<div class="popup-buttons">
|
|
||||||
<a class="btn btn-link btn-lg login-cancel-btn">Cancel</a><button type="submit" class="btn btn-link btn-lg">Next</button>
|
|
||||||
</div>
|
|
||||||
</form>
|
|
||||||
|
|
||||||
<div id="login-form" class="hide">
|
|
||||||
<div class="form-group">
|
|
||||||
<span class="form-control th-form-control input input-lg input-disabled"><strong id="login-phone-field"></strong> (<a class="login-back" href="/auth">Incorrect?</a>)</span>
|
|
||||||
<p class="help-block dots-animated">We've just sent you a message.<br/>Please confirm access via Telegram</p>
|
|
||||||
</div>
|
|
||||||
<div class="popup-buttons">
|
|
||||||
<a class="btn btn-link btn-lg login-cancel-btn">Cancel</a><a class="btn btn-link btn-lg login-back">Back</a>
|
|
||||||
</div>
|
|
||||||
</div>
|
|
||||||
</section>
|
|
||||||
</div>
|
|
||||||
</div>
|
|
||||||
</div></div>
|
|
||||||
<script src="/js/jquery.min.js?1"></script>
|
|
||||||
<script src="/js/bootstrap.min.js"></script>
|
|
||||||
<script src="/js/main-aj.js?51"></script>
|
|
||||||
<script src="/js/themes.js?6"></script>
|
|
||||||
<script src="/js/jquery-ui.min.js?1"></script>
|
|
||||||
|
|
||||||
<script>ajInit({"version":283,"apiUrl":"\/api?hash=telegram-crawler","unauth":true});</script>
|
|
||||||
<script id="aj_script">openPopup('#login-popup-container');
|
|
||||||
Aj.onLoad(function(state) {
|
|
||||||
function requestConfirmation(event) {
|
|
||||||
event && event.preventDefault();
|
|
||||||
var phone = $('#login-phone').val();
|
|
||||||
$.ajax({
|
|
||||||
type: 'POST',
|
|
||||||
url: '/auth/request',
|
|
||||||
data: {
|
|
||||||
phone: phone
|
|
||||||
},
|
|
||||||
success: function(result) {
|
|
||||||
$('#login-phone-field').text(phone);
|
|
||||||
$('#send-form').addClass('hide');
|
|
||||||
$('#login-form').removeClass('hide');
|
|
||||||
checkAuth(result.temp_session);
|
|
||||||
},
|
|
||||||
error: function(xhr) {
|
|
||||||
showAlert(xhr.responseText || 'Server error');
|
|
||||||
},
|
|
||||||
dataType: 'json'
|
|
||||||
});
|
|
||||||
return false;
|
|
||||||
}
|
|
||||||
function cancelConfirmation(event) {
|
|
||||||
event && event.preventDefault();
|
|
||||||
$('#login-phone-field').text('');
|
|
||||||
$('#send-form').removeClass('hide');
|
|
||||||
$('#login-form').addClass('hide');
|
|
||||||
$('#login-phone').focus();
|
|
||||||
clearTimeout(window.authTimeout);
|
|
||||||
return false;
|
|
||||||
}
|
|
||||||
function checkAuth(temp_session) {
|
|
||||||
clearTimeout(window.authTimeout);
|
|
||||||
window.authTimeout = setTimeout(function doCheckAuth() {
|
|
||||||
$.ajax({
|
|
||||||
type: 'POST',
|
|
||||||
url: '/auth/login',
|
|
||||||
data: {
|
|
||||||
temp_session: temp_session
|
|
||||||
},
|
|
||||||
success: function(result) {
|
|
||||||
if (result) {
|
|
||||||
location.reload();
|
|
||||||
} else {
|
|
||||||
checkAuth(temp_session);
|
|
||||||
}
|
|
||||||
},
|
|
||||||
error: function (xhr) {
|
|
||||||
showAlert(xhr.responseText || 'Server error');
|
|
||||||
},
|
|
||||||
dataType: 'json'
|
|
||||||
});
|
|
||||||
}, 700);
|
|
||||||
}
|
|
||||||
$('#login-popup-container').on('popup:open', function() {
|
|
||||||
$('#login-phone').focus();
|
|
||||||
});
|
|
||||||
$('#login-popup-container').on('popup:close', function() {
|
|
||||||
cancelConfirmation();
|
|
||||||
if (location.pathname == '/auth') {
|
|
||||||
window.history && history.replaceState(null, null, '/');
|
|
||||||
}
|
|
||||||
});
|
|
||||||
$('#login-popup-container #send-form').on('submit', requestConfirmation);
|
|
||||||
$('#login-popup-container .login-cancel-btn').on('click', function(e) {
|
|
||||||
e.preventDefault();
|
|
||||||
closePopup('#login-popup-container');
|
|
||||||
});
|
|
||||||
$('#login-popup-container .login-back').on('click', cancelConfirmation);
|
|
||||||
$('header .login-link').on('click', function(e) {
|
|
||||||
e.stopImmediatePropagation();
|
|
||||||
e.preventDefault();
|
|
||||||
openPopup('#login-popup-container');
|
|
||||||
});
|
|
||||||
});
|
|
||||||
Aj.onUnload(function(state) {
|
|
||||||
$('#login-popup-container').off('popup:open');
|
|
||||||
$('#login-popup-container').off('popup:close');
|
|
||||||
$('#login-popup-container #send-form').off('submit');
|
|
||||||
$('#login-popup-container .login-cancel-btn').off('click');
|
|
||||||
$('#login-popup-container .login-back').off('click');
|
|
||||||
$('header .login-link').off('click');
|
|
||||||
});
|
|
||||||
</script>
|
|
||||||
<script>Aj.pageLoaded();</script>
|
|
||||||
|
|
||||||
</body>
|
|
||||||
</html>
|
|
||||||
|
|
3274
data/themes.telegram.org/css/bootstrap-extra.css
vendored
3274
data/themes.telegram.org/css/bootstrap-extra.css
vendored
File diff suppressed because it is too large
Load diff
10
data/themes.telegram.org/css/bootstrap.min.css
vendored
10
data/themes.telegram.org/css/bootstrap.min.css
vendored
File diff suppressed because one or more lines are too long
|
@ -1,6 +0,0 @@
|
||||||
/*! jQuery UI - v1.12.0 - 2016-09-10
|
|
||||||
* http://jqueryui.com
|
|
||||||
* Includes: draggable.css, core.css, resizable.css
|
|
||||||
* Copyright jQuery Foundation and other contributors; Licensed MIT */
|
|
||||||
|
|
||||||
.ui-draggable-handle{-ms-touch-action:none;touch-action:none}.ui-helper-hidden{display:none}.ui-helper-hidden-accessible{border:0;clip:rect(0 0 0 0);height:1px;margin:-1px;overflow:hidden;padding:0;position:absolute;width:1px}.ui-helper-reset{margin:0;padding:0;border:0;outline:0;line-height:1.3;text-decoration:none;font-size:100%;list-style:none}.ui-helper-clearfix:before,.ui-helper-clearfix:after{content:"";display:table;border-collapse:collapse}.ui-helper-clearfix:after{clear:both}.ui-helper-zfix{width:100%;height:100%;top:0;left:0;position:absolute;opacity:0;filter:Alpha(Opacity=0)}.ui-front{z-index:100}.ui-state-disabled{cursor:default!important;pointer-events:none}.ui-icon{display:inline-block;vertical-align:middle;margin-top:-.25em;position:relative;text-indent:-99999px;overflow:hidden;background-repeat:no-repeat}.ui-widget-icon-block{left:50%;margin-left:-8px;display:block}.ui-widget-overlay{position:fixed;top:0;left:0;width:100%;height:100%}.ui-resizable{position:relative}.ui-resizable-handle{position:absolute;font-size:0.1px;display:block;-ms-touch-action:none;touch-action:none}.ui-resizable-disabled .ui-resizable-handle,.ui-resizable-autohide .ui-resizable-handle{display:none}.ui-resizable-n{cursor:n-resize;height:7px;width:100%;top:-5px;left:0}.ui-resizable-s{cursor:s-resize;height:7px;width:100%;bottom:-5px;left:0}.ui-resizable-e{cursor:e-resize;width:7px;right:-5px;top:0;height:100%}.ui-resizable-w{cursor:w-resize;width:7px;left:-5px;top:0;height:100%}.ui-resizable-se{cursor:se-resize;width:12px;height:12px;right:1px;bottom:1px}.ui-resizable-sw{cursor:sw-resize;width:9px;height:9px;left:-5px;bottom:-5px}.ui-resizable-nw{cursor:nw-resize;width:9px;height:9px;left:-5px;top:-5px}.ui-resizable-ne{cursor:ne-resize;width:9px;height:9px;right:-5px;top:-5px}
|
|
File diff suppressed because it is too large
Load diff
File diff suppressed because it is too large
Load diff
11
data/themes.telegram.org/js/bootstrap.min.js
vendored
11
data/themes.telegram.org/js/bootstrap.min.js
vendored
File diff suppressed because one or more lines are too long
9
data/themes.telegram.org/js/jquery-ui.min.js
vendored
9
data/themes.telegram.org/js/jquery-ui.min.js
vendored
File diff suppressed because one or more lines are too long
4
data/themes.telegram.org/js/jquery.min.js
vendored
4
data/themes.telegram.org/js/jquery.min.js
vendored
File diff suppressed because one or more lines are too long
File diff suppressed because it is too large
Load diff
|
@ -1,805 +0,0 @@
|
||||||
(function($) {
|
|
||||||
$.fn.redraw = function() {
|
|
||||||
return this.map(function(){ this.offsetTop; return this; });
|
|
||||||
};
|
|
||||||
$.fn.prepareSlideX = function(callback) {
|
|
||||||
return this.map(function(){
|
|
||||||
$(this).css({width: this.scrollWidth, overflow: 'hidden'});
|
|
||||||
return this;
|
|
||||||
}).one('transitionend', function(){
|
|
||||||
$(this).css({width: '', overflow: ''});
|
|
||||||
callback && callback.call(this);
|
|
||||||
}).redraw();
|
|
||||||
};
|
|
||||||
$.fn.prepareSlideY = function(callback) {
|
|
||||||
return this.map(function(){
|
|
||||||
$(this).css({height: this.scrollHeight, overflow: 'hidden'});
|
|
||||||
return this;
|
|
||||||
}).one('transitionend', function(){
|
|
||||||
$(this).css({height: '', overflow: ''});
|
|
||||||
callback && callback.call(this);
|
|
||||||
}).redraw();
|
|
||||||
};
|
|
||||||
$.fn.animOff = function(this_el) {
|
|
||||||
if (this_el) {
|
|
||||||
return this.css('transition', 'none').redraw();
|
|
||||||
}
|
|
||||||
return this.addClass('no-transition').redraw();
|
|
||||||
};
|
|
||||||
$.fn.animOn = function(this_el) {
|
|
||||||
if (this_el) {
|
|
||||||
return this.redraw().css('transition', '');
|
|
||||||
}
|
|
||||||
return this.redraw().removeClass('no-transition');
|
|
||||||
};
|
|
||||||
$.fn.fadeShow = function() {
|
|
||||||
return this.removeClass('ohide');
|
|
||||||
};
|
|
||||||
$.fn.fadeHide = function() {
|
|
||||||
return this.addClass('ohide');
|
|
||||||
};
|
|
||||||
$.fn.isFadeHidden = function() {
|
|
||||||
return this.hasClass('ohide');
|
|
||||||
};
|
|
||||||
$.fn.isFixed = function() {
|
|
||||||
return this.parents().map(function(){ return $(this).css('position'); }).get().indexOf('fixed') != -1;
|
|
||||||
};
|
|
||||||
$.fn.focusAndSelectAll = function() {
|
|
||||||
var range = document.createRange(), field, sel;
|
|
||||||
if (field = this.get(0)) {
|
|
||||||
field.focus();
|
|
||||||
range.selectNodeContents(field);
|
|
||||||
sel = window.getSelection();
|
|
||||||
sel.removeAllRanges();
|
|
||||||
sel.addRange(range);
|
|
||||||
}
|
|
||||||
return this;
|
|
||||||
};
|
|
||||||
$.fn.fadeToggle = function(state) {
|
|
||||||
if (state === true || state === false) {
|
|
||||||
state = !state;
|
|
||||||
}
|
|
||||||
return this.toggleClass('ohide', state);
|
|
||||||
};
|
|
||||||
$.fn.slideShow = function(callback) {
|
|
||||||
return this.prepareSlideY(callback).removeClass('shide');
|
|
||||||
};
|
|
||||||
$.fn.slideHide = function(callback) {
|
|
||||||
if (callback == 'remove') {
|
|
||||||
callback = function(){ $(this).remove(); };
|
|
||||||
}
|
|
||||||
return this.prepareSlideY(callback).addClass('shide');
|
|
||||||
};
|
|
||||||
$.fn.slideXShow = function(callback) {
|
|
||||||
return this.prepareSlideX(callback).removeClass('sxhide');
|
|
||||||
};
|
|
||||||
$.fn.slideXHide = function(callback) {
|
|
||||||
if (callback == 'remove') {
|
|
||||||
callback = function(){ $(this).remove(); };
|
|
||||||
}
|
|
||||||
return this.prepareSlideX(callback).addClass('sxhide');
|
|
||||||
};
|
|
||||||
$.fn.isSlideHidden = function() {
|
|
||||||
return this.hasClass('shide');
|
|
||||||
};
|
|
||||||
$.fn.slideToggle = function(state, callback) {
|
|
||||||
if (state === true || state === false) {
|
|
||||||
state = !state;
|
|
||||||
}
|
|
||||||
return this.prepareSlideY(callback).toggleClass('shide', state);
|
|
||||||
};
|
|
||||||
$.fn.highlight = function(delay) {
|
|
||||||
var $this = this;
|
|
||||||
$this.addClass('highlight');
|
|
||||||
setTimeout(function() { $this.removeClass('highlight'); }, delay);
|
|
||||||
return $this;
|
|
||||||
};
|
|
||||||
$.fn.hasField = function(name) {
|
|
||||||
return this.first().map(function() {
|
|
||||||
if (this.tagName == 'FORM') {
|
|
||||||
if (this[name]) {
|
|
||||||
return true;
|
|
||||||
}
|
|
||||||
return $('.input[data-name]', this).filter(function() {
|
|
||||||
return ($(this).attr('data-name') == name);
|
|
||||||
}).size() > 0;
|
|
||||||
}
|
|
||||||
return false;
|
|
||||||
}).get(0) || false;
|
|
||||||
};
|
|
||||||
$.fn.field = function(name) {
|
|
||||||
return this.first().map(function() {
|
|
||||||
if (this.tagName == 'FORM') {
|
|
||||||
if (this[name]) {
|
|
||||||
return this[name];
|
|
||||||
}
|
|
||||||
return $('.input[data-name]', this).filter(function() {
|
|
||||||
return ($(this).attr('data-name') == name);
|
|
||||||
}).get(0);
|
|
||||||
}
|
|
||||||
});
|
|
||||||
};
|
|
||||||
$.fn.reset = function(val) {
|
|
||||||
return this.each(function() {
|
|
||||||
if (this.tagName == 'FORM') {
|
|
||||||
this.reset();
|
|
||||||
$('.input[data-name]', this).each(function() {
|
|
||||||
$(this).text($(this).attr('data-value')).trigger('input');
|
|
||||||
});
|
|
||||||
}
|
|
||||||
});
|
|
||||||
};
|
|
||||||
$.fn.defaultValue = function(val) {
|
|
||||||
if (typeof val !== 'undefined') {
|
|
||||||
return this.each(function() {
|
|
||||||
if (this.tagName == 'TEXTAREA' || this.tagName == 'INPUT') {
|
|
||||||
this.defaultValue = val;
|
|
||||||
} else {
|
|
||||||
$(this).attr('data-value', val);
|
|
||||||
}
|
|
||||||
});
|
|
||||||
}
|
|
||||||
return this.first().map(function() {
|
|
||||||
if (this.tagName == 'TEXTAREA' || this.tagName == 'INPUT') {
|
|
||||||
return this.defaultValue || '';
|
|
||||||
} else {
|
|
||||||
return $(this).attr('data-value') || '';
|
|
||||||
}
|
|
||||||
}).get(0) || '';
|
|
||||||
};
|
|
||||||
$.fn.value = function(val) {
|
|
||||||
if (typeof val !== 'undefined') {
|
|
||||||
return this.each(function() {
|
|
||||||
if (this.tagName == 'TEXTAREA' || this.tagName == 'INPUT') {
|
|
||||||
this.value = val;
|
|
||||||
} else {
|
|
||||||
$(this).text(val).trigger('input');
|
|
||||||
}
|
|
||||||
});
|
|
||||||
}
|
|
||||||
return this.first().map(function() {
|
|
||||||
if (this.tagName == 'TEXTAREA' || this.tagName == 'INPUT') {
|
|
||||||
return this.value || '';
|
|
||||||
} else {
|
|
||||||
return $(this).text() || '';
|
|
||||||
}
|
|
||||||
}).get(0) || '';
|
|
||||||
};
|
|
||||||
$.fn.values = function(val) {
|
|
||||||
if (typeof val !== 'undefined') {
|
|
||||||
return this.value(val);
|
|
||||||
}
|
|
||||||
return this.map(function() {
|
|
||||||
if (this.tagName == 'TEXTAREA' || this.tagName == 'INPUT') {
|
|
||||||
return this.value || '';
|
|
||||||
} else {
|
|
||||||
return $(this).text() || '';
|
|
||||||
}
|
|
||||||
}).get() || [];
|
|
||||||
};
|
|
||||||
|
|
||||||
})(jQuery);
|
|
||||||
|
|
||||||
function getBR() {
|
|
||||||
if (window._brHTML) return window._brHTML;
|
|
||||||
return window._brHTML = $('<div><br/></div>').html();
|
|
||||||
}
|
|
||||||
function cleanHTML(value) {
|
|
||||||
return value.replace(/&/g, '&').replace(/</g, '<').replace(/>/g, '>').replace(/"/g, '"').replace(/\n/g, getBR());
|
|
||||||
}
|
|
||||||
function cleanRE(value) {
|
|
||||||
return value.replace(/[|\\{}()[\]^$+*?.]/g, "\\$&");
|
|
||||||
}
|
|
||||||
|
|
||||||
function wrapHighlight(value, highlight, wrap_tag, prefix_only) {
|
|
||||||
value = cleanHTML(value);
|
|
||||||
if (highlight) {
|
|
||||||
var pattern = cleanRE(cleanHTML(highlight));
|
|
||||||
if (prefix_only) {
|
|
||||||
pattern = '^' + pattern;
|
|
||||||
}
|
|
||||||
value = value.replace(new RegExp(pattern, 'gi'), '<strong>$&<\/strong>');
|
|
||||||
}
|
|
||||||
if (wrap_tag) {
|
|
||||||
value = value.replace(TOKEN_REGEX, '<mark>$&</mark>');
|
|
||||||
}
|
|
||||||
return value;
|
|
||||||
}
|
|
||||||
function wrapSize(size) {
|
|
||||||
if (size < 1024) {
|
|
||||||
return size + ' B';
|
|
||||||
} else if (size < 1048576) {
|
|
||||||
return (Math.round(size * 10 / 1024.0) / 10) + ' KB';
|
|
||||||
} else if (size < 1073741824) {
|
|
||||||
return (Math.round(size * 10 / 1048576.0) / 10) + ' MB';
|
|
||||||
} else {
|
|
||||||
return (Math.round(size * 10 / 1073741824.0) / 10) + ' GB';
|
|
||||||
}
|
|
||||||
}
|
|
||||||
function dataUrlToBlob(url) {
|
|
||||||
try {
|
|
||||||
var match = null;
|
|
||||||
if (match = url.match(/^data:(image\/gif|image\/jpe?g|image\/png|video\/mp4);base64,(.*)$/)) {
|
|
||||||
var type = match[1], b64 = match[2];
|
|
||||||
var binary = atob(b64);
|
|
||||||
var array = [];
|
|
||||||
for(var i = 0; i < binary.length; i++) {
|
|
||||||
array.push(binary.charCodeAt(i));
|
|
||||||
}
|
|
||||||
return new Blob([new Uint8Array(array)], {type: type});
|
|
||||||
}
|
|
||||||
} catch (e) {}
|
|
||||||
return false;
|
|
||||||
}
|
|
||||||
function urlToDataUrl(url, callback) {
|
|
||||||
var img = new Image();
|
|
||||||
img.crossOrigin = 'anonymous';
|
|
||||||
img.onload = function() {
|
|
||||||
try {
|
|
||||||
var canvas = document.createElement('canvas');
|
|
||||||
canvas.width = this.naturalWidth;
|
|
||||||
canvas.height = this.naturalHeight;
|
|
||||||
canvas.getContext('2d').drawImage(this, 0, 0);
|
|
||||||
callback(canvas.toDataURL());
|
|
||||||
} catch (e) {
|
|
||||||
callback(false);
|
|
||||||
}
|
|
||||||
};
|
|
||||||
img.onerror = function() {
|
|
||||||
callback(false);
|
|
||||||
};
|
|
||||||
img.src = url;
|
|
||||||
}
|
|
||||||
function parseStr(value) {
|
|
||||||
var arr = value.split('&'), kv, str, result = {};
|
|
||||||
for (var i = 0; i < arr.length; i++) {
|
|
||||||
kv = arr[i].split('=');
|
|
||||||
result[decodeURIComponent(kv[0])] = decodeURIComponent(kv[1]);
|
|
||||||
}
|
|
||||||
return result;
|
|
||||||
}
|
|
||||||
function validateSlug(value) {
|
|
||||||
if (value.match(/[A-Za-z0-9\-_=]{16,32}/)) {
|
|
||||||
return true;
|
|
||||||
}
|
|
||||||
return false;
|
|
||||||
}
|
|
||||||
|
|
||||||
function stopImmediatePropagation(e) {
|
|
||||||
e.stopImmediatePropagation();
|
|
||||||
}
|
|
||||||
function preventDefault(e) {
|
|
||||||
e.preventDefault();
|
|
||||||
}
|
|
||||||
|
|
||||||
var Editor = {
|
|
||||||
init: function(options) {
|
|
||||||
Aj.onLoad(function(state) {
|
|
||||||
state.fileContent = options.content;
|
|
||||||
state.thumbKeys = options.thumb_keys || {};
|
|
||||||
state.builtinSlug = options.builtin_slug || '';
|
|
||||||
state.canEdit = options.can_edit || false;
|
|
||||||
state.options = options;
|
|
||||||
var mac = /Mac/.test(navigator.platform) ||
|
|
||||||
/AppleWebKit/.test(navigator.userAgent) &&
|
|
||||||
/Mobile\/\w+/.test(navigator.userAgent);
|
|
||||||
$source_code = $('.th-theme-source-code');
|
|
||||||
state.editor = CodeMirror.fromTextArea($source_code.get(0), {
|
|
||||||
tabSize: 2,
|
|
||||||
lineWrapping: true,
|
|
||||||
styleActiveLine: {nonEmpty: true},
|
|
||||||
viewportMargin: Infinity,
|
|
||||||
readOnly: !state.canEdit,
|
|
||||||
cursorBlinkRate: state.canEdit ? 530 : -1,
|
|
||||||
colorpicker: {
|
|
||||||
mode: state.canEdit ? 'edit' : 'view',
|
|
||||||
hideDelay: 5000,
|
|
||||||
outputFormat: 'hex',
|
|
||||||
included_token: ['valcol', 'val'],
|
|
||||||
colorSets: [
|
|
||||||
{ name : 'Custom', edit: true, colors: options.colorset },
|
|
||||||
]
|
|
||||||
},
|
|
||||||
extraKeys: mac ? {
|
|
||||||
'Cmd-S': Editor.cmSave,
|
|
||||||
'Tab': Editor.cmTab,
|
|
||||||
'Shift-Tab': Editor.cmShiftTab
|
|
||||||
} : {
|
|
||||||
'Ctrl-S': Editor.cmSave,
|
|
||||||
'Tab': Editor.cmTab,
|
|
||||||
'Shift-Tab': Editor.cmShiftTab
|
|
||||||
}
|
|
||||||
});
|
|
||||||
state.editor.setValue(options.content);
|
|
||||||
state.editor.on('changes', Editor.onContentChange);
|
|
||||||
$('.th-theme-source-code-wrap').fadeShow();
|
|
||||||
$('.th-theme-save-btn').on('click', Editor.eSaveTheme);
|
|
||||||
$('.th-theme-create-btn').on('click', Editor.eCreateThemeFormat);
|
|
||||||
$(document).on('click.curPage', '.th-theme-import-btn', Editor.eImportFile);
|
|
||||||
$(document).on('click.curPage', '.file-upload', stopImmediatePropagation);
|
|
||||||
$(document).on('change.curPage', '.file-upload', Editor.eSelectImportFile);
|
|
||||||
Aj.onBeforeUnload(function (e) {
|
|
||||||
if (!Aj.state.editor) return false;
|
|
||||||
var fileContent = Aj.state.editor.getValue();
|
|
||||||
if (Aj.state.fileContent !== false &&
|
|
||||||
Aj.state.fileContent != fileContent) {
|
|
||||||
return 'You have unsaved changes, you really want to leave this page?';
|
|
||||||
}
|
|
||||||
return false;
|
|
||||||
});
|
|
||||||
Editor.onContentChange();
|
|
||||||
$(window).on('scroll', Editor.onScroll);
|
|
||||||
});
|
|
||||||
Aj.onUnload(function(state) {
|
|
||||||
state.editor.off('changes', Editor.onContentChange);
|
|
||||||
$('.th-theme-save-btn').off('click', Editor.eSaveTheme);
|
|
||||||
$('.th-theme-create-btn').off('click', Editor.eCreateThemeFormat);
|
|
||||||
$(window).off('scroll', Editor.onScroll);
|
|
||||||
});
|
|
||||||
},
|
|
||||||
cmSave: function(cm) {
|
|
||||||
Editor.saveTheme();
|
|
||||||
},
|
|
||||||
cmTab: function(cm) {
|
|
||||||
var cursor = cm.getCursor('to'), line = cursor.line, ch = cursor.ch;
|
|
||||||
var looped = false;
|
|
||||||
while (true) {
|
|
||||||
var str = cm.getLine(line).split('//')[0];
|
|
||||||
var match = /:(\s*)(.*\S|)\s*$/.exec(str), val_index = null, val_len = 0;
|
|
||||||
if (match) {
|
|
||||||
val_index = match.index + 1 + match[1].length;
|
|
||||||
val_len = match[2].length;
|
|
||||||
if (ch < val_index || ch == val_index && val_len > 0) {
|
|
||||||
cm.doc.setSelection({line: line, ch: val_index + val_len}, {line: line, ch: val_index});
|
|
||||||
if (Aj.state.canEdit) {
|
|
||||||
var val = match[2], col_val = Editor.parseColor(val);
|
|
||||||
if (col_val) {
|
|
||||||
cm.state.colorpicker.popup_color_picker();
|
|
||||||
} else {
|
|
||||||
cm.state.colorpicker.close_color_picker();
|
|
||||||
}
|
|
||||||
}
|
|
||||||
break;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
++line; ch = 0;
|
|
||||||
if (line >= cm.lineCount()) {
|
|
||||||
if (looped) break;
|
|
||||||
looped = true;
|
|
||||||
line = 0;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
},
|
|
||||||
cmShiftTab: function(cm) {
|
|
||||||
var cursor = cm.getCursor('from'), line = cursor.line, ch = cursor.ch;
|
|
||||||
var looped = false;
|
|
||||||
while (true) {
|
|
||||||
var str = cm.getLine(line).split('//')[0];
|
|
||||||
var match = /:(\s*)(.*\S|)\s*$/.exec(str), val_index = null, val_len = 0;
|
|
||||||
if (match) {
|
|
||||||
val_index = match.index + 1 + match[1].length;
|
|
||||||
val_len = match[2].length;
|
|
||||||
if (ch > val_index + val_len || ch == val_index + val_len && val_len > 0) {
|
|
||||||
cm.doc.setSelection({line: line, ch: val_index + val_len}, {line: line, ch: val_index});
|
|
||||||
if (Aj.state.canEdit) {
|
|
||||||
var val = match[2], col_val = Editor.parseColor(val);
|
|
||||||
if (col_val) {
|
|
||||||
cm.state.colorpicker.popup_color_picker();
|
|
||||||
} else {
|
|
||||||
cm.state.colorpicker.close_color_picker();
|
|
||||||
}
|
|
||||||
}
|
|
||||||
break;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
--line; ch = Infinity;
|
|
||||||
if (line < 0) {
|
|
||||||
if (looped) break;
|
|
||||||
looped = true;
|
|
||||||
line = cm.lineCount() - 1;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
},
|
|
||||||
onScroll: function() {
|
|
||||||
var scrollTop = $(window).scrollTop();
|
|
||||||
$('body').toggleClass('header-btn-oshow', scrollTop > 50);
|
|
||||||
},
|
|
||||||
onContentChange: function() {
|
|
||||||
Editor.redrawThumb($('.th-theme-thumb'));
|
|
||||||
Editor.updateColumns();
|
|
||||||
},
|
|
||||||
updateColumns: function() {
|
|
||||||
var key_max_len = 30, key_max_el = null;
|
|
||||||
$('.cm-keycol').each(function() {
|
|
||||||
var key_len = $(this).text().length;
|
|
||||||
if (key_len > key_max_len) {
|
|
||||||
key_max_len = key_len;
|
|
||||||
key_max_el = this;
|
|
||||||
}
|
|
||||||
});
|
|
||||||
if (key_max_el) {
|
|
||||||
key_max_el.style.minWidth = '0px';
|
|
||||||
key_max_width = key_max_el.offsetWidth;
|
|
||||||
key_max_el.style.minWidth = '';
|
|
||||||
} else {
|
|
||||||
key_max_width = 230;
|
|
||||||
}
|
|
||||||
var old_style = $('#th-content-style').html();
|
|
||||||
var new_style = '.cm-keycol{min-width:' + key_max_width + 'px}';
|
|
||||||
if (new_style != old_style) {
|
|
||||||
$('#th-content-style').html(new_style);
|
|
||||||
}
|
|
||||||
},
|
|
||||||
parseColor: function(color_value) {
|
|
||||||
if ($.isArray(color_value)) {
|
|
||||||
return color_value;
|
|
||||||
}
|
|
||||||
var color_val = $.trim(color_value), match, r, g, b, a = 1;
|
|
||||||
if (match = color_val.match(/^(rgba?)\(\s*(\d+)\s*,\s*(\d+)\s*\s*,\s*(\d+)\s*(?:,\s*((?:0?\.)?\d+)\s*)?\)/)) {
|
|
||||||
r = parseInt(match[2]);
|
|
||||||
g = parseInt(match[3]);
|
|
||||||
b = parseInt(match[4]);
|
|
||||||
if (match[1] == 'rgba' && match[5]) {
|
|
||||||
a = parseFloat(match[5]);
|
|
||||||
}
|
|
||||||
return [r, g, b, a, match[0]];
|
|
||||||
} else if (match = color_val.match(/^#?([0-9a-f]{3,8})(?::((?:0?\.)?\d+))?/i)) {
|
|
||||||
var val = match[1], val_len = val.length, sr, sg, sb, sa;
|
|
||||||
if (val_len == 3 || val_len == 4) {
|
|
||||||
sr = val.substr(0, 1); r = parseInt(sr + sr, 16);
|
|
||||||
sg = val.substr(1, 1); g = parseInt(sg + sg, 16);
|
|
||||||
sb = val.substr(2, 1); b = parseInt(sb + sb, 16);
|
|
||||||
if (val_len == 4) {
|
|
||||||
sa = val.substr(3, 1); $a = parseInt(sa + sa, 16) / 255;
|
|
||||||
}
|
|
||||||
} else if (val_len == 6 || val_len == 8) {
|
|
||||||
sr = val.substr(0, 2); r = parseInt(sr, 16);
|
|
||||||
sg = val.substr(2, 2); g = parseInt(sg, 16);
|
|
||||||
sb = val.substr(4, 2); b = parseInt(sb, 16);
|
|
||||||
if (val_len == 8) {
|
|
||||||
sa = val.substr(6, 2); a = parseInt(sa, 16) / 255;
|
|
||||||
}
|
|
||||||
} else {
|
|
||||||
return false;
|
|
||||||
}
|
|
||||||
if ((val_len == 3 || val_len == 6) && match[2]) {
|
|
||||||
a = parseFloat(match[2]);
|
|
||||||
}
|
|
||||||
return [r, g, b, a, match[0]];
|
|
||||||
}
|
|
||||||
return false;
|
|
||||||
},
|
|
||||||
formatColor: function(color_value) {
|
|
||||||
var color_arr = Editor.parseColor(color_value);
|
|
||||||
if (!color_arr) {
|
|
||||||
return false;
|
|
||||||
}
|
|
||||||
if (color_arr[3] < 1) {
|
|
||||||
return 'rgba(' + color_arr[0] + ',' + color_arr[1] + ',' + color_arr[2] + ',' + color_arr[3] + ')';
|
|
||||||
}
|
|
||||||
var color_int = ((color_arr[0] & 255) << 16) | ((color_arr[1] & 255) << 8) | (color_arr[2] & 255);
|
|
||||||
return '#' + ('000000' + color_int.toString(16)).substr(-6);
|
|
||||||
},
|
|
||||||
parseWallpaperValue(value) {
|
|
||||||
var match, bg_slug, options, arr, result = {};
|
|
||||||
if (!value) {
|
|
||||||
return result;
|
|
||||||
}
|
|
||||||
if (value == 'builtin') {
|
|
||||||
result.slug = Aj.state.builtinSlug;
|
|
||||||
} else if (match = value.match(/^(?:https?:\/\/)?t\.me\/bg\/(\S+)/i)) {
|
|
||||||
arr = match[1].split('?');
|
|
||||||
if (match = arr[0].match(/^[0-9a-f]{6}-[0-9a-f]{6}$/i)) {
|
|
||||||
result.gradient = arr[0].split('-');
|
|
||||||
for (var k = 0; k < result.gradient.length; k++) {
|
|
||||||
result.gradient[k] = Editor.formatColor(result.gradient[k]);
|
|
||||||
}
|
|
||||||
options = arr[1] ? parseStr(arr[1]) : {};
|
|
||||||
if (options.rotation) {
|
|
||||||
var rot = parseInt(options.rotation);
|
|
||||||
if (rot && rot < 360 && !(rot % 45)) {
|
|
||||||
result.rotation = parseInt(options.rotation);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
else if (match = arr[0].match(/^[0-9a-f]{6}(~[0-9a-f]{6}){1,3}$/i)) {
|
|
||||||
result.gradient = arr[0].split('~');
|
|
||||||
for (var k = 0; k < result.gradient.length; k++) {
|
|
||||||
result.gradient[k] = Editor.formatColor(result.gradient[k]);
|
|
||||||
}
|
|
||||||
options = arr[1] ? parseStr(arr[1]) : {};
|
|
||||||
if (options.rotation) {
|
|
||||||
var rot = parseInt(options.rotation);
|
|
||||||
if (rot && rot < 360 && !(rot % 45)) {
|
|
||||||
result.rotation = parseInt(options.rotation);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
else if (validateSlug(arr[0])) {
|
|
||||||
result.slug = arr[0];
|
|
||||||
options = arr[1] ? parseStr(arr[1]) : {};
|
|
||||||
if (options.bg_color) {
|
|
||||||
if (match = options.bg_color.match(/^[0-9a-f]{6}-[0-9a-f]{6}$/i)) {
|
|
||||||
result.gradient = options.bg_color.split('-');
|
|
||||||
for (var k = 0; k < result.gradient.length; k++) {
|
|
||||||
result.gradient[k] = Editor.formatColor(result.gradient[k]);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
else if (match = options.bg_color.match(/^[0-9a-f]{6}(~[0-9a-f]{6}){1,3}$/i)) {
|
|
||||||
result.gradient = options.bg_color.split('~');
|
|
||||||
for (var k = 0; k < result.gradient.length; k++) {
|
|
||||||
result.gradient[k] = Editor.formatColor(result.gradient[k]);
|
|
||||||
}
|
|
||||||
} else {
|
|
||||||
result.color = Editor.formatColor(options.bg_color);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
if (options.intensity) {
|
|
||||||
result.intensity = parseInt(options.intensity);
|
|
||||||
}
|
|
||||||
if (options.rotation) {
|
|
||||||
var rot = parseInt(options.rotation);
|
|
||||||
if (rot && rot < 360 && !(rot % 45)) {
|
|
||||||
result.rotation = parseInt(options.rotation);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
if (options.mode) {
|
|
||||||
result.mode = options.mode;
|
|
||||||
}
|
|
||||||
} else if (arr[0]) {
|
|
||||||
result.color = Editor.formatColor(arr[0]);
|
|
||||||
}
|
|
||||||
} else {
|
|
||||||
result.color = Editor.formatColor(value);
|
|
||||||
}
|
|
||||||
return result;
|
|
||||||
},
|
|
||||||
formatWallpaperUrl(bg_slug) {
|
|
||||||
return bg_slug ? location.origin + '/bg/' + bg_slug : '';
|
|
||||||
},
|
|
||||||
getContentValue: function(content, key) {
|
|
||||||
if (!key) return null;
|
|
||||||
var re = new RegExp('\\b' + cleanRE(key) + '\\s*:\\s*(.*)(?:\n|$)', 'i');
|
|
||||||
var match = content.match(re);
|
|
||||||
return match && match[1] || null;
|
|
||||||
},
|
|
||||||
redrawThumb: function($parent, callback) {
|
|
||||||
var fileContent = Aj.state.editor.getValue();
|
|
||||||
var wallpaper = Editor.parseWallpaperValue(Editor.getContentValue(fileContent, Aj.state.thumbKeys.bg));
|
|
||||||
var bg_url = Editor.formatWallpaperUrl(wallpaper.slug);
|
|
||||||
var bg_color_val = Editor.formatColor(Editor.getContentValue(fileContent, Aj.state.thumbKeys.bg_color)) || '#6ea8f3';
|
|
||||||
var bubble_in_val = Editor.formatColor(Editor.getContentValue(fileContent, Aj.state.thumbKeys.bubble_in)) || '#fff';
|
|
||||||
var bubble_out_val = Editor.formatColor(Editor.getContentValue(fileContent, Aj.state.thumbKeys.bubble_out)) || '#d4f1ff';
|
|
||||||
if (wallpaper.color) {
|
|
||||||
bg_color_val = wallpaper.color;
|
|
||||||
} else if (wallpaper.gradient) {
|
|
||||||
var bg_grad = $('#bg_gradient', $parent).get(0);
|
|
||||||
if (bg_grad) {
|
|
||||||
bg_grad.setAttribute('gradientTransform', 'rotate(' + (wallpaper.rotation || 0) + ' 0.5 0.5)');
|
|
||||||
}
|
|
||||||
$('#bg_gradient_color1', $parent).attr('stop-color', wallpaper.gradient[0]);
|
|
||||||
$('#bg_gradient_color2', $parent).attr('stop-color', wallpaper.gradient[1]);
|
|
||||||
bg_color_val = "url('#bg_gradient')";
|
|
||||||
}
|
|
||||||
if (wallpaper.intensity) {
|
|
||||||
var opacity = Math.max(10, Math.min(wallpaper.intensity, 100));
|
|
||||||
$('#thumb_bg_image', $parent).attr('opacity', opacity / 100);
|
|
||||||
} else {
|
|
||||||
$('#thumb_bg_image', $parent).attr('opacity', 1);
|
|
||||||
}
|
|
||||||
if (/\bblur\b/i.test(wallpaper.mode || '')) {
|
|
||||||
$('#thumb_bg_image', $parent).attr('filter', 'url(\'#thumb_blur\')');
|
|
||||||
} else {
|
|
||||||
$('#thumb_bg_image', $parent).attr('filter', '');
|
|
||||||
}
|
|
||||||
$('#thumb_bg_image', $parent).attr('xlink:href', bg_url);
|
|
||||||
$('#thumb_bg_color', $parent).attr('fill', bg_color_val);
|
|
||||||
$('#thumb_bubble_in', $parent).attr('fill', bubble_in_val);
|
|
||||||
$('#thumb_bubble_out', $parent).attr('fill', bubble_out_val);
|
|
||||||
if (callback) {
|
|
||||||
urlToDataUrl(bg_url, function(bg_url) {
|
|
||||||
if (bg_url) {
|
|
||||||
$('#thumb_bg_image', $parent).attr('xlink:href', bg_url);
|
|
||||||
}
|
|
||||||
callback();
|
|
||||||
});
|
|
||||||
}
|
|
||||||
},
|
|
||||||
prepareThumb: function(callback) {
|
|
||||||
var $svg = $('<div><svg height="46" viewBox="0 0 74 46" width="74" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink"><filter id="thumb_blur"><feGaussianBlur stdDeviation="3" /></filter><defs><linearGradient id="bg_gradient" x1="0" y1="0" x2="0" y2="1"><stop offset="0%" id="bg_gradient_color1" /><stop offset="100%" id="bg_gradient_color2" /></linearGradient><pattern id="thumb_bg" patternUnits="userSpaceOnUse" width="74" height="46"><rect id="thumb_bg_color" fill="" width="100%" height="100%"/><image id="thumb_bg_image" xlink:href="" x="-5" y="-5" width="84" height="56" preserveAspectRatio="xMidYMid slice" /></pattern></defs><g fill="none" fill-rule="evenodd"><rect fill="url(\'#thumb_bg\')" height="46" width="74"/><rect id="thumb_bubble_in" fill="" height="12" rx="3" width="40" x="8" y="8"/><rect id="thumb_bubble_out" fill="" height="12" rx="3" width="40" x="26" y="26"/></g></svg></div>');
|
|
||||||
Editor.redrawThumb($svg, function() {
|
|
||||||
callback($svg.html());
|
|
||||||
});
|
|
||||||
},
|
|
||||||
generateThumb: function(callback) {
|
|
||||||
Editor.prepareThumb(function(svg) {
|
|
||||||
var image = document.createElement('img');
|
|
||||||
image.src = 'data:image/svg+xml,' + encodeURIComponent(svg);
|
|
||||||
image.addEventListener('load', function imgLoaded() {
|
|
||||||
image.removeEventListener('load', imgLoaded);
|
|
||||||
try {
|
|
||||||
var canvas = document.createElement('canvas'), blob;
|
|
||||||
canvas.width = 296;
|
|
||||||
canvas.height = 184;
|
|
||||||
var ctx = canvas.getContext('2d');
|
|
||||||
ctx.drawImage(image, 0, 0, canvas.width, canvas.height);
|
|
||||||
if (canvas.toBlob) {
|
|
||||||
canvas.toBlob(callback, 'image/jpeg', 0.92);
|
|
||||||
} else {
|
|
||||||
callback(dataUrlToBlob(canvas.toDataURL('image/jpeg', 0.92)));
|
|
||||||
}
|
|
||||||
} catch (e) {}
|
|
||||||
});
|
|
||||||
image.addEventListener('error', function imgFailed() {
|
|
||||||
callback(null);
|
|
||||||
});
|
|
||||||
});
|
|
||||||
},
|
|
||||||
eCreateThemeFormat: function(e) {
|
|
||||||
$('.th-container').removeClass('th-no-content');
|
|
||||||
},
|
|
||||||
eImportFile: function(e) {
|
|
||||||
if (!Aj.state.canEdit) return;
|
|
||||||
e && e.stopImmediatePropagation();
|
|
||||||
e && e.preventDefault();
|
|
||||||
$('<input type="file" class="file-upload hide">').appendTo(this).click();
|
|
||||||
},
|
|
||||||
eSelectImportFile: function(e) {
|
|
||||||
if (!Aj.state.canEdit) return;
|
|
||||||
var input = this;
|
|
||||||
var $import_btn = $('.th-theme-import-btn');
|
|
||||||
var theme_raw = $import_btn.attr('data-theme-raw');
|
|
||||||
var format = $import_btn.attr('data-format');
|
|
||||||
var data = new FormData();
|
|
||||||
var fileContent = Aj.state.editor.getValue();
|
|
||||||
var theme_name = Editor.getContentValue(fileContent, 'name') || '';
|
|
||||||
var theme_shortname = Editor.getContentValue(fileContent, 'shortname') || '';
|
|
||||||
data.append('method', 'importFile');
|
|
||||||
data.append('theme_name', theme_name);
|
|
||||||
data.append('theme_shortname', theme_shortname);
|
|
||||||
data.append('format', format);
|
|
||||||
data.append('file', input.files[0]);
|
|
||||||
$import_btn.prop('disabled', true);
|
|
||||||
$.ajax(Aj.apiUrl, {
|
|
||||||
type: 'POST',
|
|
||||||
enctype: 'multipart/form-data',
|
|
||||||
data: data,
|
|
||||||
processData: false,
|
|
||||||
contentType: false,
|
|
||||||
cache: false,
|
|
||||||
dataType: 'json',
|
|
||||||
xhrFields: {
|
|
||||||
withCredentials: true
|
|
||||||
},
|
|
||||||
success: function(result) {
|
|
||||||
$import_btn.prop('disabled', false);
|
|
||||||
if (result._dlog) {
|
|
||||||
$('#dlog').append(result._dlog);
|
|
||||||
}
|
|
||||||
if (result.error) {
|
|
||||||
return showAlert(result.error);
|
|
||||||
}
|
|
||||||
if (result.content) {
|
|
||||||
Aj.state.editor.setValue(result.content);
|
|
||||||
Editor.onContentChange();
|
|
||||||
$('.th-container').removeClass('th-no-content');
|
|
||||||
}
|
|
||||||
},
|
|
||||||
error: function(xhr) {
|
|
||||||
if (xhr.status == 401) {
|
|
||||||
location.href = '/auth';
|
|
||||||
} else {
|
|
||||||
location.reload();
|
|
||||||
}
|
|
||||||
}
|
|
||||||
});
|
|
||||||
},
|
|
||||||
eSaveTheme: function(e) {
|
|
||||||
e.preventDefault();
|
|
||||||
Editor.saveTheme();
|
|
||||||
},
|
|
||||||
saveTheme: function() {
|
|
||||||
var $save_btn = $('.th-theme-save-btn');
|
|
||||||
if (Aj.state.saving) {
|
|
||||||
return false;
|
|
||||||
}
|
|
||||||
var content = Aj.state.editor.getValue();
|
|
||||||
if (!content) {
|
|
||||||
Aj.state.editor.focus();
|
|
||||||
return false;
|
|
||||||
}
|
|
||||||
var file = new Blob([content], {type: 'text/plain'});
|
|
||||||
$save_btn.prop('disabled', true);
|
|
||||||
Aj.state.saving = true;
|
|
||||||
Aj.state.savingContent = content;
|
|
||||||
Editor.generateThumb(function (thumb) {
|
|
||||||
Editor.saveThemeRequest(file, thumb);
|
|
||||||
});
|
|
||||||
return false;
|
|
||||||
},
|
|
||||||
saveThemeRequest: function(file, thumb, payload) {
|
|
||||||
var $save_btn = $('.th-theme-save-btn');
|
|
||||||
var theme_raw = $save_btn.attr('data-theme-raw');
|
|
||||||
var format = $save_btn.attr('data-format');
|
|
||||||
var data = new FormData();
|
|
||||||
data.append('method', 'saveTheme');
|
|
||||||
data.append('theme_raw', theme_raw);
|
|
||||||
data.append('format', format);
|
|
||||||
data.append('content', file, 'content');
|
|
||||||
data.append('thumb', thumb, 'thumb');
|
|
||||||
if (payload) {
|
|
||||||
data.append('payload', payload);
|
|
||||||
}
|
|
||||||
$.ajax(Aj.apiUrl, {
|
|
||||||
type: 'POST',
|
|
||||||
enctype: 'multipart/form-data',
|
|
||||||
data: data,
|
|
||||||
processData: false,
|
|
||||||
contentType: false,
|
|
||||||
cache: false,
|
|
||||||
dataType: 'json',
|
|
||||||
xhrFields: {
|
|
||||||
withCredentials: true
|
|
||||||
},
|
|
||||||
success: function(result) {
|
|
||||||
if (result._dlog) {
|
|
||||||
$('#dlog').append(result._dlog);
|
|
||||||
}
|
|
||||||
if (result.need_pack) {
|
|
||||||
return Editor.packFile(result.need_pack, thumb, result.payload);
|
|
||||||
}
|
|
||||||
$save_btn.prop('disabled', false);
|
|
||||||
Aj.state.saving = false;
|
|
||||||
if (result.error) {
|
|
||||||
return showAlert(result.error);
|
|
||||||
}
|
|
||||||
Aj.state.fileContent = Aj.state.savingContent;
|
|
||||||
var cur_loc = Aj.location();
|
|
||||||
if (result.slug && cur_loc.pathname != '/theme/' + result.slug) {
|
|
||||||
cur_loc.pathname = '/theme/' + result.slug;
|
|
||||||
return Aj.location(cur_loc.href);
|
|
||||||
}
|
|
||||||
if (result.title) {
|
|
||||||
$('.js-theme-title').html(result.title);
|
|
||||||
}
|
|
||||||
},
|
|
||||||
error: function(xhr) {
|
|
||||||
if (xhr.status == 401) {
|
|
||||||
location.href = '/auth';
|
|
||||||
} else {
|
|
||||||
location.reload();
|
|
||||||
}
|
|
||||||
}
|
|
||||||
});
|
|
||||||
return false;
|
|
||||||
},
|
|
||||||
packFile: function(files, thumb, payload) {
|
|
||||||
for (var i = 0; i < files.length; i++) {
|
|
||||||
var file = files[i];
|
|
||||||
if (file.url) {
|
|
||||||
return JSZipUtils.getBinaryContent(file.url, function(err, data) {
|
|
||||||
if (err) {
|
|
||||||
$('.th-theme-save-btn').prop('disabled', false);
|
|
||||||
Aj.state.saving = false;
|
|
||||||
return showAlert('Can\'t fetch file');
|
|
||||||
}
|
|
||||||
file.content = data;
|
|
||||||
delete file.url;
|
|
||||||
Editor.packFile(files, thumb, payload);
|
|
||||||
});
|
|
||||||
}
|
|
||||||
}
|
|
||||||
var zip = new JSZip();
|
|
||||||
for (var i = 0; i < files.length; i++) {
|
|
||||||
var file = files[i];
|
|
||||||
zip.file(file.name, file.content, {binary: file.binary});
|
|
||||||
}
|
|
||||||
zip.generateAsync({
|
|
||||||
type: 'blob',
|
|
||||||
compression: 'DEFLATE'
|
|
||||||
}).then(function (zip_file) {
|
|
||||||
Editor.saveThemeRequest(zip_file, thumb, payload);
|
|
||||||
});
|
|
||||||
}
|
|
||||||
};
|
|
||||||
|
|
Loading…
Reference in a new issue