Added multiple language support,removed third party requests

This commit is contained in:
nipos 2018-08-04 15:52:34 +02:00
parent c653baa2d0
commit 0c82b1e64e
26 changed files with 2676 additions and 778 deletions

View File

@ -1,9 +1,6 @@
# Halcyon for Mastodon and Pleroma
A webclient for Mastodon and Pleroma which looks like Twitter
## DO NOT USE THE CURRENT MASTER!
The current version in master has been uploaded because an contributor offered help with working towards the next version. This is no complete version. Please get the latest stable release from the releases page.
>The original author of this genius piece of software was inactive for a while and then shut down his demo instance and deleted this repository. I love Halcyon, it's the thing which makes Mastodon the best social network in the world. I took the code from the Halcyon fork of cybre.space which still works but doesn't seem to get updates, too. I uploaded it here to make the original link work again and don't link into the big nothing. I'm working on much other stuff, too, therefore I won't use my whole free time to work on Halcyon. But I try to do as much as possible here.
<img src="https://halcyon.cybre.space/login/assets/images/preview0.png">
@ -24,7 +21,11 @@ These instances are publicly accessible and usable by everyone, no matter which
You have your own Halcyon instance and want it to be listed here? Create an issue with the link and we will add it to the list.
## Translate
[Help us translating Halcyon into many languages](https://translate.zanata.org/project/view/halcyon)
## Blog
- [Release of Version 2.0.0 - The biggest changes in detail](https://nikisoft.myblog.de/nikisoft/art/11636651/Halcyon-2-0-0-The-biggest-changes-in-detail)
- Release of Version 1.2.6 - Report toots supported,disable CW and NFSW,add privacy policy and imprint,move config files,read release notes for more
- Release of Version 1.2.5 - Copy links with one click,emojicodes now always detected,streaming in hashtag search,delete event now supported
- Release of Version 1.2.4 - Updated Twemoji,custom emojis in names and bios,links to profiles in pleroma now always work,pinned posts now supported
@ -50,6 +51,7 @@ You have your own Halcyon instance and want it to be listed here? Create an issu
- Twitter like UI, familiar interface.
- Able to use on all instances.
- No tracking, No ads.
- Supports multiple languages
## Requirement
- Apache/Nginx/Caddy/lighttpd

View File

@ -1322,7 +1322,7 @@ transition: 0.13s ease-out;
.textfield {
margin: 10px;
padding-left:5px;
width: 50%;
width: 75%;
font-size: 14px;
color: #66757F;
box-sizing: border-box;
@ -2446,3 +2446,60 @@ box-shadow: inset 0 0 0 4px #ffffff;
outline: none;
border-color: #189EFC;
}
.uploadbtn:before {
position:absolute;
left:0;
right:0;
text-align:center;
font-size:12px;
font-weight:600;
content:"Select file and upload";
}
.s-hidden {
display:none;
}
.select {
cursor:pointer;
display:inline-block;
position:relative;
width:calc(75% - 2px);
}
.styledselect {
width:100%;
margin:10px;
padding:0;
height:28px;
position:relative;
text-align:center;
font-weight:bold;
}
.styledselect.active {
border-bottom-left-radius:0;
border-bottom-right-radius:0;
}
.options {
display:none;
position:absolute;
top:100%;
right:0;
left:0;
z-index:999;
margin:-10px -12px 0 10px !important;
padding:0 0;
list-style:none;
border:1px solid #189EFC;
border-top-width:0;
background-color:white;
border-bottom-left-radius:4px;
border-bottom-right-radius:4px;
}
.options li {
text-align:center;
padding:5px;
transition:0.15s ease-out;
}
.options li:hover {
border:0 solid #189EFC;
border-left-width:5px;
border-right-width:5px;
}

View File

@ -187,15 +187,15 @@ container.append(wrapper);
appender.append(container);
this.append(appender);
if(settings.twemoji){
twemoji.parse(emojiPeopleContainer[0],{base:(location.protocol==="https:"?"https:":"http:")+"//cdn.staticfile.org/twemoji/2.2.5/"});
twemoji.parse(emojiNatureContainer[0],{base:(location.protocol==="https:"?"https:":"http:")+"//cdn.staticfile.org/twemoji/2.2.5/"});
twemoji.parse(emojiFoodsContainer[0],{base:(location.protocol==="https:"?"https:":"http:")+"//cdn.staticfile.org/twemoji/2.2.5/"});
twemoji.parse(emojiActivityContainer[0],{base:(location.protocol==="https:"?"https:":"http:")+"//cdn.staticfile.org/twemoji/2.2.5/"});
twemoji.parse(emojiPlacesContainer[0],{base:(location.protocol==="https:"?"https:":"http:")+"//cdn.staticfile.org/twemoji/2.2.5/"});
twemoji.parse(emojiObjectsContainer[0],{base:(location.protocol==="https:"?"https:":"http:")+"//cdn.staticfile.org/twemoji/2.2.5/"});
twemoji.parse(emojiSymbolsContainer[0],{base:(location.protocol==="https:"?"https:":"http:")+"//cdn.staticfile.org/twemoji/2.2.5/"});
twemoji.parse(emojiFlagsContainer[0],{base:(location.protocol==="https:"?"https:":"http:")+"//cdn.staticfile.org/twemoji/2.2.5/"});
twemoji.parse(tabs[0],{base:(location.protocol==="https:"?"https:":"http:")+"//cdn.staticfile.org/twemoji/2.2.5/"});
twemoji.parse(emojiPeopleContainer[0],{base:"https://"+current_instance,ext:".svg",folder:"/emoji"});
twemoji.parse(emojiNatureContainer[0],{base:"https://"+current_instance,ext:".svg",folder:"/emoji"});
twemoji.parse(emojiFoodsContainer[0],{base:"https://"+current_instance,ext:".svg",folder:"/emoji"});
twemoji.parse(emojiActivityContainer[0],{base:"https://"+current_instance,ext:".svg",folder:"/emoji"});
twemoji.parse(emojiPlacesContainer[0],{base:"https://"+current_instance,ext:".svg",folder:"/emoji"});
twemoji.parse(emojiObjectsContainer[0],{base:"https://"+current_instance,ext:".svg",folder:"/emoji"});
twemoji.parse(emojiSymbolsContainer[0],{base:"https://"+current_instance,ext:".svg",folder:"/emoji"});
twemoji.parse(emojiFlagsContainer[0],{base:"https://"+current_instance,ext:".svg",folder:"/emoji"});
twemoji.parse(tabs[0],{base:"https://"+current_instance,ext:".svg",folder:"/emoji"});
}
this.click(function(e){
e.preventDefault();
@ -255,4 +255,4 @@ container.append(emoticon);
}
}
}(jQuery, window));
}
}

View File

@ -1,8 +0,0 @@
The file halcyonTemplates.js had been edited by :
IP: 185.220.102.4
Time: 15.07.2018|11:54:33
This message had been generated by http://www.webftp.de
On abuse issues, please contact abuse@webftp.de

View File

@ -118,7 +118,7 @@ return value;
return new Date(value);
}
function getRelativeDatetime(current_time, posted_time) {
const calendar = ["Jan", "Feb", "Mar", "Apr", "May", "Jun", "Jul", "Aug", "Sep", "Oct", "Nov", "Dec"];
const calendar = [__("Jan"),__("Feb"),__("Mar"),__("Apr"),__("May"),__("Jun"),__("Jul"),__("Aug"),__("Sep"),__("Oct"),__("Nov"),__("Dec")];
var posted_time_original = posted_time,
posted_time = getConversionedDate(null, posted_time_original).getTime(),
elapsedTime = Math.ceil((current_time-posted_time)/1000);
@ -384,4 +384,4 @@ function checkEmojiSupport() {
var ctx = document.createElement("canvas").getContext("2d");
ctx.fillText("😗",-2,4);
return ctx.getImageData(0,0,1,1).data[3] > 0;
}
}

View File

@ -11,18 +11,21 @@ if(localStorage.setting_who_to_follow == "true") {
$("#setting_who_to_follow")[0].checked = true;
}
});
$(document).on('change',".language_wrap select[name='language']", function(e) {
$.cookie("language",$(this).val(),{path:'/',expires:3650});
});
$(document).on('change',".post_privacy_wrap input[name='post_privacy']:checked", function(e) {
localStorage.setItem("setting_post_privacy", $(this).val());
putMessage("Changed setting to "+$(this).val());
putMessage(__("Changed setting to")+" "+$(this).val());
});
$("#setting_post_sensitive").change(function() {
if(this.checked) {
localStorage.setItem("setting_post_sensitive","true");
putMessage("Mark as NSFW by default enabled");
putMessage(__("Mark as NSFW by default enabled"));
}
else {
localStorage.setItem("setting_post_sensitive","false");
putMessage("Mark as NSFW by default disabled");
putMessage(__("Mark as NSFW by default disabled"));
}
});
$(document).on('change',".local_instance_wrap input[name='local_instance']", function(e) {
@ -32,22 +35,57 @@ localStorage.setItem("setting_local_instance","https://"+$(this).val());
else {
localStorage.setItem("setting_local_instance","default");
}
putMessage("Changed setting to "+$(this).val());
putMessage(__("Changed setting to")+" "+$(this).val());
});
$(document).on('change',".search_filter_wrap input[name='search_filter']:checked", function(e) {
localStorage.setItem("setting_search_filter", $(this).val());
putMessage("Changed setting to "+$(this).val());
putMessage(__("Changed setting to")+" "+$(this).val());
});
$("#setting_who_to_follow").change(function() {
if(this.checked) {
localStorage.setItem("setting_who_to_follow","true");
putMessage("Who to follow enabled");
putMessage(__("Who to follow enabled"));
}
else {
localStorage.setItem("setting_who_to_follow","false");
putMessage("Who to follow disabled");
putMessage(__("Who to follow disabled"));
}
})
});
$('.selectbox').each(function() {
var $this = $(this),
numberOfOptions = $(this).children('option').length;
$this.addClass('s-hidden');
$this.wrap('<div class="select"></div>');
$this.after('<div class="halcyon_button styledselect"></div>');
var $styledSelect = $this.next('div.styledselect');
var $selectText = $("<span>").css("margin","auto").text($this.children('option[selected]').eq(0).text()+" ⏷");
$styledSelect.append($selectText);
var $list = $('<ul/>',{'class':'options'}).insertAfter($styledSelect);
for(var i=0;i<numberOfOptions;i++) {
$('<li/>',{text:$this.children('option').eq(i).text(),rel:$this.children('option').eq(i).val()}).appendTo($list);
}
var $listItems = $list.children('li');
$styledSelect.click(function(e) {
e.stopPropagation();
if($(this).hasClass("active")) {
xthis = $(this);
$(this).next('ul.options').slideUp(function() {xthis.removeClass('active')});
}
else {
$(this).addClass('active').next('ul.options').slideDown();
}
});
$listItems.click(function(e) {
e.stopPropagation();
$selectText.text($(this).text()+" ⏷");
$this.val($(this).attr('rel'));
$this.change();
$list.slideUp(function() {$styledSelect.removeClass('active')});
});
$(document).click(function() {
$list.slideUp(function() {$styledSelect.removeClass('active')});
});
});
}
else if(window.location.pathname == "/settings/profile") {
$('#js-settings_nav_profile').toggleClass('view');
@ -71,7 +109,7 @@ $("#savestate").removeClass("fa-check").addClass("fa-spin").addClass("fa-circle-
api.patch("accounts/update_credentials","display_name="+$(this).val(),function() {
$.removeCookie("session");
$("#savestate").removeClass("fa-spin").removeClass("fa-circle-o-notch").addClass("fa-check");
putMessage("Changed setting to "+$(this).val());
putMessage(__("Changed setting to")+" "+$(this).val());
});
});
$(document).on('change',".about_me_wrap textarea[name='about_me']", function(e) {
@ -79,7 +117,7 @@ $("#savestate").removeClass("fa-check").addClass("fa-spin").addClass("fa-circle-
api.patch("accounts/update_credentials","note="+$(this).val(),function() {
$.removeCookie("session");
$("#savestate").removeClass("fa-spin").removeClass("fa-circle-o-notch").addClass("fa-check");
putMessage("Changed about me setting");
putMessage(__("Changed about me setting"));
});
});
$("#setting_avatar").change(function() {
@ -90,7 +128,7 @@ formdata.append('avatar',$('#setting_avatar').prop('files')[0]);
api.patch("accounts/update_credentials",formdata,function() {
$.removeCookie("session");
$("#savestate").removeClass("fa-spin").removeClass("fa-circle-o-notch").addClass("fa-check");
putMessage("Uploaded new avatar");
putMessage(__("Uploaded new avatar"));
})
}
});
@ -102,7 +140,7 @@ formdata.append('header',$('#setting_header').prop('files')[0]);
api.patch("accounts/update_credentials",formdata,function() {
$.removeCookie("session");
$("#savestate").removeClass("fa-spin").removeClass("fa-circle-o-notch").addClass("fa-check");
putMessage("Uploaded new header");
putMessage(__("Uploaded new header"));
})
}
});
@ -112,14 +150,14 @@ if(this.checked) {
api.patch("accounts/update_credentials","locked=1",function() {
$.removeCookie("session");
$("#savestate").removeClass("fa-spin").removeClass("fa-circle-o-notch").addClass("fa-check");
putMessage("Account locked");
putMessage(__("Account locked"));
});
}
else {
api.patch("accounts/update_credentials","locked=0",function() {
$.removeCookie("session");
$("#savestate").removeClass("fa-spin").removeClass("fa-circle-o-notch").addClass("fa-check");
putMessage("Account unlocked");
putMessage(__("Account unlocked"));
});
}
})
@ -156,16 +194,16 @@ $("#setting_show_nsfw")[0].checked = true;
});
$(document).on('change',".post_streaming_wrap input[name='post_streaming']:checked", function(e) {
localStorage.setItem("setting_post_stream", $(this).val());
putMessage("Changed setting to "+$(this).val());
putMessage(__("Changed setting to")+" "+$(this).val());
});
$("#setting_link_previews").change(function() {
if(this.checked) {
localStorage.setItem("setting_link_previews","true");
putMessage("Link previews enabled");
putMessage(__("Link previews enabled"));
}
else {
localStorage.setItem("setting_link_previews","false");
putMessage("Link previews disabled");
putMessage(__("Link previews disabled"));
}
});
$("#setting_desktop_notifications").change(function() {
@ -176,55 +214,55 @@ Notification.requestPermission(function(p) {
if (p === 'denied') {
localStorage.setItem("setting_desktop_notifications","false");
$("#setting_desktop_notifications")[0].checked = false;
putMessage("You didn't allow notifications");
putMessage(__("You didn't allow notifications"));
}
else {
putMessage("Desktop notifications enabled");
putMessage(__("Desktop notifications enabled"));
}
});
}
else if(Notification.permission == "denied") {
localStorage.setItem("setting_desktop_notifications","false");
$("#setting_desktop_notifications")[0].checked = false;
putMessage("You didn't allow notifications");
putMessage(__("You didn't allow notifications"));
}
else {
putMessage("Desktop notifications enabled");
putMessage(__("Desktop notifications enabled"));
}
}
else {
localStorage.setItem("setting_desktop_notifications","false");
putMessage("Desktop notifications disabled");
putMessage(__("Desktop notifications disabled"));
}
});
$("#setting_show_replies").change(function() {
if(this.checked) {
localStorage.setItem("setting_show_replies","true");
putMessage("Replies shown");
putMessage(__("Replies shown"));
}
else {
localStorage.setItem("setting_show_replies","false");
putMessage("Replies hidden");
putMessage(__("Replies hidden"));
}
});
$("#setting_show_content_warning").change(function() {
if(this.checked) {
localStorage.setItem("setting_show_content_warning","true");
putMessage("CW content shown");
putMessage(__("CW content shown"));
}
else {
localStorage.setItem("setting_show_content_warning","false");
putMessage("CW content hidden");
putMessage(__("CW content hidden"));
}
});
$("#setting_show_nsfw").change(function() {
if(this.checked) {
localStorage.setItem("setting_show_nsfw","true");
putMessage("NSFW content shown");
putMessage(__("NSFW content shown"));
}
else {
localStorage.setItem("setting_show_nsfw","false");
putMessage("NSFW content hidden");
putMessage(__("NSFW content hidden"));
}
});
}
}

View File

@ -12,8 +12,8 @@ media_views = `<div class='media_views' sid="${status.id}" media_length='${statu
else {
media_views = `<div class='media_views sensitive' media_length='${status.media_attachments.length}'>
<div class='sensitive_alart'>
<span class="text1">Sensitive content</span>
<span class="text2">Click to view</span>
<span class="text1">${__('Sensitive content')}</span>
<span class="text2">${__('Click to view')}</span>
</div>`;
}
if ( status.media_attachments[0].type === "video" | status.media_attachments[0].type === "gifv" ) {
@ -74,11 +74,11 @@ toot_reblogs_count= "",
toot_favourites_count = "",
media_views = "";
if(status.spoiler_text && localStorage.setting_show_content_warning == "false") {
alart_text = "<span>"+status.spoiler_text+"</span><button class='cw_button'>SHOW MORE</button>",
alart_text = "<span>"+status.spoiler_text+"</span><button class='cw_button'>"+__('SHOW MORE')+"</button>",
article_option = "content_warning";
}
else if(status.spoiler_text && localStorage.setting_show_content_warning == "true") {
alart_text = "<span>"+status.spoiler_text+"</span><button class='cw_button'>SHOW LESS</button>";
alart_text = "<span>"+status.spoiler_text+"</span><button class='cw_button'>"+__('SHOW LESS')+"</button>";
}
if (status.reblogs_count) {
toot_reblogs_count = status.reblogs_count;
@ -93,10 +93,10 @@ if(status.account.display_name.length == 0) {
status.account.display_name = status.account.username;
}
switch(status.visibility) {
case "public":toot_privacy_mode="Public";toot_privacy_icon="globe";break;
case "unlisted":toot_privacy_mode="Unlisted";toot_privacy_icon="unlock-alt";break;
case "private":toot_privacy_mode="Followers-only";toot_privacy_icon="lock";break;
case "direct":toot_privacy_mode="Direct";toot_privacy_icon="envelope";break;
case "public":toot_privacy_mode=__("Public");toot_privacy_icon="globe";break;
case "unlisted":toot_privacy_mode=__("Unlisted");toot_privacy_icon="unlock-alt";break;
case "private":toot_privacy_mode=__("Followers-only");toot_privacy_icon="lock";break;
case "direct":toot_privacy_mode=__("Direct");toot_privacy_icon="envelope";break;
}
if(toot_privacy_icon == "globe" || toot_privacy_icon == "unlock-alt") {
toot_footer_width = " style='width:320px'";
@ -113,18 +113,18 @@ toot_reblog_button = "";
}
var own_toot_buttons = "";
if(status.account.acct == current_acct) {
var own_toot_buttons = (`<li><a class="delete_button" tid="${status.id}">Delete Toot</a></li>`);
var own_toot_buttons = (`<li><a class="delete_button" tid="${status.id}">${__('Delete Toot')}</a></li>`);
if(status.pinned == true) {
own_toot_buttons += (`<li><a class="unpin_button" tid="${status.id}">Unpin Toot</a></li>`);
own_toot_buttons += (`<li><a class="unpin_button" tid="${status.id}">${__('Unpin Toot')}</a></li>`);
}
else {
own_toot_buttons += (`<li><a class="pin_button" tid="${status.id}">Pin Toot</a></li>`);
own_toot_buttons += (`<li><a class="pin_button" tid="${status.id}">${__('Pin Toot')}</a></li>`);
}
}
else {
var own_toot_buttons = (`<li><a class="mute_button" mid="${status.account.id}" sid="${status.id}">Mute @${status.account.username}</a></li>
<li><a class="block_button" mid="${status.account.id}" sid="${status.id}">Block @${status.account.username}</a></li>
<li><a class="report_button" mid="${status.account.id}" sid="${status.id}" display_name="${status.account.display_name}">Report this Toot</a></li>`);
var own_toot_buttons = (`<li><a class="mute_button" mid="${status.account.id}" sid="${status.id}">${__('Mute')} @${status.account.username}</a></li>
<li><a class="block_button" mid="${status.account.id}" sid="${status.id}">${__('Block')} @${status.account.username}</a></li>
<li><a class="report_button" mid="${status.account.id}" sid="${status.id}" display_name="${status.account.display_name}">${__('Report this Toot')}</a></li>`);
}
const html=(`
<li sid="${status.id}" class="toot_entry">
@ -153,11 +153,11 @@ ${status.account.display_name}
</button>
<div class="expand_menu invisible disallow_select">
<ul>
<li><a class="copylink_button" url="${status.url}">Copy link to Toot</a></li>
<li><a class="copylink_button" url="${status.url}">${__('Copy link to Toot')}</a></li>
${own_toot_buttons}
</ul>
<ul>
<li><a href="${status.url}" target="_blank">View original</a></li>
<li><a href="${status.url}" target="_blank">${__('View original')}</a></li>
</ul>
</div>
</div>
@ -215,11 +215,11 @@ toot_reblogs_count= "",
toot_favourites_count = "",
media_views = "";
if(status.reblog.spoiler_text && localStorage.setting_show_content_warning == "false") {
alart_text = "<span>"+status.reblog.spoiler_text+"</span><button class='cw_button'>SHOW MORE</button>",
alart_text = "<span>"+status.reblog.spoiler_text+"</span><button class='cw_button'>"+__('SHOW MORE')+"</button>",
article_option = "content_warning";
}
else if(status.reblog.spoiler_text && localStorage.setting_show_content_warning == "true") {
alart_text = "<span>"+status.reblog.spoiler_text+"</span><button class='cw_button'>SHOW LESS</button>";
alart_text = "<span>"+status.reblog.spoiler_text+"</span><button class='cw_button'>"+__('SHOW LESS')+"</button>";
}
if (status.reblog.reblogs_count) {
toot_reblogs_count = status.reblog.reblogs_count;
@ -237,29 +237,29 @@ if(status.reblog.account.display_name.length == 0) {
status.reblog.account.display_name = status.reblog.account.username;
}
switch(status.reblog.visibility) {
case "public":toot_privacy_mode="Public";toot_privacy_icon="globe";break;
case "unlisted":toot_privacy_mode="Unlisted";toot_privacy_icon="unlock-alt";break;
case "public":toot_privacy_mode=__("Public");toot_privacy_icon="globe";break;
case "unlisted":toot_privacy_mode=__("Unlisted");toot_privacy_icon="unlock-alt";break;
}
var own_toot_buttons = "";
if(status.reblog.account.acct == current_acct) {
var own_toot_buttons = (`<li><a class="delete_button" tid="${status.reblog.id}">Delete Toot</a></li>`);
var own_toot_buttons = (`<li><a class="delete_button" tid="${status.reblog.id}">${__('Delete Toot')}</a></li>`);
if(status.reblog.pinned == true) {
own_toot_buttons += (`<li><a class="unpin_button" tid="${status.reblog.id}">Unpin Toot</a></li>`);
own_toot_buttons += (`<li><a class="unpin_button" tid="${status.reblog.id}">${__('Unpin Toot')}</a></li>`);
}
else {
own_toot_buttons += (`<li><a class="pin_button" tid="${status.reblog.id}">Pin Toot</a></li>`);
own_toot_buttons += (`<li><a class="pin_button" tid="${status.reblog.id}">${__('Pin Toot')}</a></li>`);
}
}
else {
var own_toot_buttons = (`<li><a class="mute_button" mid="${status.reblog.account.id}" sid="${status.reblog.id}">Mute @${status.reblog.account.username}</a></li>
<li><a class="block_button" mid="${status.reblog.account.id}" sid="${status.reblog.id}">Block @${status.reblog.account.username}</a></li>
<li><a class="report_button" mid="${status.reblog.account.id}" sid="${status.reblog.id}" display_name="${status.reblog.account.display_name}">Report this Toot</a></li>`);
var own_toot_buttons = (`<li><a class="mute_button" mid="${status.reblog.account.id}" sid="${status.reblog.id}">${__('Mute')} @${status.reblog.account.username}</a></li>
<li><a class="block_button" mid="${status.reblog.account.id}" sid="${status.reblog.id}">${__('Block')} @${status.reblog.account.username}</a></li>
<li><a class="report_button" mid="${status.reblog.account.id}" sid="${status.reblog.id}" display_name="${status.reblog.account.display_name}">${__('Report this Toot')}</a></li>`);
}
const html = (`
<li sid="${status.id}" class="toot_entry">
<div class="boost_author_box">
<a href="${status_account_link}">
<span class="emoji_poss"><i class="fa fa-fw fa-retweet"></i>${status.account.display_name} Boosted</span>
<span class="emoji_poss"><i class="fa fa-fw fa-retweet"></i>${status.account.display_name} ${__('Boosted')}</span>
</a>
</div>
<div class="toot_entry_body">
@ -287,11 +287,11 @@ ${status.reblog.account.display_name}
</button>
<div class="expand_menu invisible disallow_select">
<ul>
<li><a class="copylink_button" url="${status.reblog.url}" >Copy link to Toot</a></li>
<li><a class="copylink_button" url="${status.reblog.url}" >${__('Copy link to Toot')}</a></li>
${own_toot_buttons}
</ul>
<ul>
<li><a href="${status.reblog.url}" target="_blank">View original</a></li>
<li><a href="${status.reblog.url}" target="_blank">${__('View original')}</a></li>
</ul>
</div>
</div>
@ -351,11 +351,11 @@ toot_reblogs_count= "",
toot_favourites_count = "",
media_views = "";
if(status.spoiler_text && localStorage.setting_show_content_warning == "false") {
alart_text = "<span>"+status.spoiler_text+"</span><button class='cw_button'>SHOW MORE</button>",
alart_text = "<span>"+status.spoiler_text+"</span><button class='cw_button'>"+__('SHOW MORE')+"</button>",
article_option = "content_warning";
}
else if(status.spoiler_text && localStorage.setting_show_content_warning == "true") {
alart_text = "<span>"+status.spoiler_text+"</span><button class='cw_button'>SHOW LESS</button>";
alart_text = "<span>"+status.spoiler_text+"</span><button class='cw_button'>"+__('SHOW LESS')+"</button>";
}
if (status.reblogs_count) {
toot_reblogs_count = status.reblogs_count;
@ -370,23 +370,23 @@ if(status.account.display_name.length == 0) {
status.account.display_name = status.account.username;
}
switch(status.visibility) {
case "public":toot_privacy_mode="Public";toot_privacy_icon="globe";break;
case "unlisted":toot_privacy_mode="Unlisted";toot_privacy_icon="unlock-alt";break;
case "public":toot_privacy_mode=__("Public");toot_privacy_icon="globe";break;
case "unlisted":toot_privacy_mode=__("Unlisted");toot_privacy_icon="unlock-alt";break;
}
var own_toot_buttons = "";
if(status.account.acct == current_acct) {
var own_toot_buttons = (`<li><a class="delete_button" tid="${status.id}">Delete Toot</a></li>
<li><a class="unpin_button" tid="${status.id}">Unpin Toot</a></li>`);
var own_toot_buttons = (`<li><a class="delete_button" tid="${status.id}">${__('Delete Toot')}</a></li>
<li><a class="unpin_button" tid="${status.id}">${__('Unpin Toot')}</a></li>`);
}
else {
var own_toot_buttons = (`<li><a class="mute_button" mid="${status.account.id}" sid="${status.id}">Mute @${status.account.username}</a></li>
<li><a class="block_button" mid="${status.account.id}" sid="${status.id}">Block @${status.account.username}</a></li>
<li><a class="report_button" mid="${status.account.id}" sid="${status.id}" display_name="${status.account.display_name}">Report this Toot</a></li>`);
var own_toot_buttons = (`<li><a class="mute_button" mid="${status.account.id}" sid="${status.id}">${__('Mute')} @${status.account.username}</a></li>
<li><a class="block_button" mid="${status.account.id}" sid="${status.id}">${__('Block')} @${status.account.username}</a></li>
<li><a class="report_button" mid="${status.account.id}" sid="${status.id}" display_name="${status.account.display_name}">${__('Report this Toot')}</a></li>`);
}
const html = (`
<li sid="${status.id}" class="toot_entry">
<div class="pinned_notice_box">
<i class="fa fa-fw fa-thumb-tack"></i>Pinned toot</span>
<i class="fa fa-fw fa-thumb-tack"></i>${__('Pinned Toot')}</span>
</div>
<div class="toot_entry_body">
<a href="${status_account_link}">
@ -413,11 +413,11 @@ ${status.account.display_name}
</button>
<div class="expand_menu invisible disallow_select">
<ul>
<li><a class="copylink_button" url="${status.url}" >Copy link to Toot</a></li>
<li><a class="copylink_button" url="${status.url}" >${__('Copy link to Toot')}</a></li>
${own_toot_buttons}
</ul>
<ul>
<li><a href="${status.url}" target="_blank">View original</a></li>
<li><a href="${status.url}" target="_blank">${__('View original')}</a></li>
</ul>
</div>
</div>
@ -490,7 +490,7 @@ const html = (`
</a>
<i class="fa fa-fw fa-star font-icon favourite"></i>
<a class="notice_author" href="${notice_author_link}">
<span class="emoji_poss">${NotificationObj.account.display_name}</span> favourited Your Toot
<span class="emoji_poss">${NotificationObj.account.display_name}</span> ${__('favourited Your Toot')}
</a>
</div>
<div class="notice_entry_body">
@ -534,7 +534,7 @@ html = (`
</a>
<i class="fa fa-fw fa-retweet font-icon boost"></i>
<a class="notice_author" href="${notice_author_link}">
<span class="emoji_poss" >${NotificationObj.account.display_name}</span> boosted Your Toot
<span class="emoji_poss" >${NotificationObj.account.display_name}</span> ${__('boosted Your Toot')}
</a>
</div>
<blockquote class="notice_entry_body">
@ -577,11 +577,11 @@ for(i=0;i<NotificationObj.status.account.emojis.length;i++) {
NotificationObj.status.account.display_name = NotificationObj.status.account.display_name.replace(new RegExp(":"+NotificationObj.status.account.emojis[i].shortcode+":","g"),"<img src='"+NotificationObj.status.account.emojis[i].url+"' class='emoji'>");
}
if(NotificationObj.status.spoiler_text && localStorage.setting_show_content_warning == "false") {
alart_text = "<span>"+NotificationObj.status.spoiler_text+"</span><button class='cw_button'>SHOW MORE</button>",
alart_text = "<span>"+NotificationObj.status.spoiler_text+"</span><button class='cw_button'>"+__('SHOW MORE')+"</button>",
article_option = "content_warning";
}
else if(NotificationObj.status.spoiler_text && localStorage.setting_show_content_warning == "true") {
alart_text = "<span>"+NotificationObj.status.spoiler_text+"</span><button class='cw_button'>SHOW LESS</button>";
alart_text = "<span>"+NotificationObj.status.spoiler_text+"</span><button class='cw_button'>"+__('SHOW LESS')+"</button>";
}
if (NotificationObj.status.reblogs_count) {
toot_reblogs_count = NotificationObj.status.reblogs_count;
@ -596,10 +596,10 @@ if(NotificationObj.status.account.display_name.length == 0) {
NotificationObj.status.account.display_name = NotificationObj.status.account.username;
}
switch(NotificationObj.status.visibility) {
case "public":toot_privacy_mode="Public";toot_privacy_icon="globe";break;
case "unlisted":toot_privacy_mode="Unlisted";toot_privacy_icon="unlock-alt";break;
case "private":toot_privacy_mode="Followers-only";toot_privacy_icon="lock";break;
case "direct":toot_privacy_mode="Direct";toot_privacy_icon="envelope";break;
case "public":toot_privacy_mode=__("Public");toot_privacy_icon="globe";break;
case "unlisted":toot_privacy_mode=__("Unlisted");toot_privacy_icon="unlock-alt";break;
case "private":toot_privacy_mode=__("Followers-only");toot_privacy_icon="lock";break;
case "direct":toot_privacy_mode=__("Direct");toot_privacy_icon="envelope";break;
}
if(toot_privacy_icon == "globe" || toot_privacy_icon == "unlock-alt") {
toot_footer_width = " style='width:320px'";
@ -616,18 +616,18 @@ toot_reblog_button = "";
}
var own_toot_buttons = "";
if(NotificationObj.status.account.acct == current_acct) {
var own_toot_buttons = (`<li><a class="delete_button" tid="${NotificationObj.status.id}">Delete Toot</a></li>`);
var own_toot_buttons = (`<li><a class="delete_button" tid="${NotificationObj.status.id}">${__('Delete Toot')}</a></li>`);
if(NotificationObj.status.pinned == true) {
own_toot_buttons += (`<li><a class="unpin_button" tid="${NotificationObj.status.id}">Unpin Toot</a></li>`);
own_toot_buttons += (`<li><a class="unpin_button" tid="${NotificationObj.status.id}">${__('Unpin Toot')}</a></li>`);
}
else {
own_toot_buttons += (`<li><a class="pin_button" tid="${NotificationObj.status.id}">Pin Toot</a></li>`);
own_toot_buttons += (`<li><a class="pin_button" tid="${NotificationObj.status.id}">${__('Pin Toot')}</a></li>`);
}
}
else {
var own_toot_buttons = (`<li><a class="mute_button" mid="${NotificationObj.status.account.id}" sid="${NotificationObj.status.id}">Mute @${NotificationObj.status.account.username}</a></li>
<li><a class="block_button" mid="${NotificationObj.status.account.id}" sid="${NotificationObj.status.id}">Block @${NotificationObj.status.account.username}</a></li>
<li><a class="report_button" mid="${NotificationObj.status.account.id}" sid="${NotificationObj.status.id}" display_name="${NotificationObj.account.display_name}">Report this Toot</a></li>`);
var own_toot_buttons = (`<li><a class="mute_button" mid="${NotificationObj.status.account.id}" sid="${NotificationObj.status.id}">${__('Mute')} @${NotificationObj.status.account.username}</a></li>
<li><a class="block_button" mid="${NotificationObj.status.account.id}" sid="${NotificationObj.status.id}">${__('Block')} @${NotificationObj.status.account.username}</a></li>
<li><a class="report_button" mid="${NotificationObj.status.account.id}" sid="${NotificationObj.status.id}" display_name="${NotificationObj.account.display_name}">${__('Report this Toot')}</a></li>`);
}
const html=(`
<li sid="${NotificationObj.status.id}" class="toot_entry">
@ -656,11 +656,11 @@ ${NotificationObj.status.account.display_name}
</button>
<div class="expand_menu invisible disallow_select">
<ul>
<li><a class="copylink_button" url="${status.url}" >Copy link to Toot</a></li>
<li><a class="copylink_button" url="${status.url}" >${__('Copy link to Toot')}</a></li>
${own_toot_buttons}
</ul>
<ul>
<li><a href="${NotificationObj.status.url}" target="_blank">View original</a></li>
<li><a href="${NotificationObj.status.url}" target="_blank">${__('View original')}</a></li>
</ul>
</div>
</div>
@ -707,7 +707,7 @@ const html=(`
</a>
<i class="fa fa-fw fa-user font-icon follow"></i>
<a class="notice_author" href="${notice_author_link}">
<span class="emoji_poss">${NotificationObj.account.display_name}</span> followed you
<span class="emoji_poss">${NotificationObj.account.display_name}</span> ${__('followed you')}
</a>
</div>
</li>`);
@ -734,7 +734,7 @@ var html = (`
</div>
<button class="follow_button action_button" mid="${AccountObj.id}">
<i class="fa fa-fw fa-user-plus"></i>
<span>Follow</span>
<span>${__('Follow')}</span>
</button>
<div class="follows_profile_name_box">
<a class="js_follows_profile_link emoji_poss" href="${profile_link}">
@ -772,11 +772,11 @@ for(i=0;i<status.account.emojis.length;i++) {
status.account.display_name = status.account.display_name.replace(new RegExp(":"+status.account.emojis[i].shortcode+":","g"),"<img src='"+status.account.emojis[i].url+"' class='emoji'>");
}
if(status.spoiler_text && localStorage.setting_show_content_warning == "false") {
alart_text = "<span>"+status.spoiler_text+"</span><button class='cw_button'>SHOW MORE</button>",
alart_text = "<span>"+status.spoiler_text+"</span><button class='cw_button'>"+__('SHOW MORE')+"</button>",
article_option = "content_warning";
}
else if(status.spoiler_text && localStorage.setting_show_content_warning == "true") {
alart_text = "<span>"+status.spoiler_text+"</span><button class='cw_button'>SHOW LESS</button>";
alart_text = "<span>"+status.spoiler_text+"</span><button class='cw_button'>"+__('SHOW LESS')+"</button>";
}
if (status.reblogs_count) {
toot_reblogs_count = status.reblogs_count;
@ -795,10 +795,10 @@ checked_unlisted = "";
checked_private = "";
checked_direct = "";
switch(status.visibility) {
case "public":toot_privacy_mode="Public";toot_privacy_icon="globe";checked_public=" checked";break;
case "unlisted":toot_privacy_mode="Unlisted";toot_privacy_icon="unlock-alt";checked_unlisted=" checked";break;
case "private":toot_privacy_mode="Followers-only";toot_privacy_icon="lock";checked_private=" checked";break;
case "direct":toot_privacy_mode="Direct";toot_privacy_icon="envelope";checked_direct=" checked";break;
case "public":toot_privacy_mode=__("Public");toot_privacy_icon="globe";checked_public=" checked";break;
case "unlisted":toot_privacy_mode=__("Unlisted");toot_privacy_icon="unlock-alt";checked_unlisted=" checked";break;
case "private":toot_privacy_mode=__("Followers-only");toot_privacy_icon="lock";checked_private=" checked";break;
case "direct":toot_privacy_mode=__("Direct");toot_privacy_icon="envelope";checked_direct=" checked";break;
}
if(toot_privacy_icon == "globe" || toot_privacy_icon == "unlock-alt") {
toot_footer_width = " style='width:320px'";
@ -815,18 +815,18 @@ toot_reblog_button = "";
}
var own_toot_buttons = "";
if(status.account.acct == current_acct) {
var own_toot_buttons = (`<li><a class="delete_button" tid="${status.id}">Delete Toot</a></li>`);
var own_toot_buttons = (`<li><a class="delete_button" tid="${status.id}">${__('Delete Toot')}</a></li>`);
if(status.pinned == true) {
own_toot_buttons += (`<li><a class="unpin_button" tid="${status.id}">Unpin Toot</a></li>`);
own_toot_buttons += (`<li><a class="unpin_button" tid="${status.id}">${__('Unpin Toot')}</a></li>`);
}
else {
own_toot_buttons += (`<li><a class="pin_button" tid="${status.id}">Pin Toot</a></li>`);
own_toot_buttons += (`<li><a class="pin_button" tid="${status.id}">${__('Pin Toot')}</a></li>`);
}
}
else {
var own_toot_buttons = (`<li><a class="mute_button" mid="${status.account.id}" sid="${status.id}">Mute @${status.account.username}</a></li>
<li><a class="block_button" mid="${status.account.id}" sid="${status.id}">Block @${status.account.username}</a></li>
<li><a class="report_button" mid="${status.account.id}" sid="${status.id}" display_name="${status.account.display_name}">Report this Toot</a></li>`);
var own_toot_buttons = (`<li><a class="mute_button" mid="${status.account.id}" sid="${status.id}">${__('Mute')} @${status.account.username}</a></li>
<li><a class="block_button" mid="${status.account.id}" sid="${status.id}">${__('Block')} @${status.account.username}</a></li>
<li><a class="report_button" mid="${status.account.id}" sid="${status.id}" display_name="${status.account.display_name}">${__('Report this Toot')}</a></li>`);
}
const html=(`
<div sid="${status.id}" class="toot_detail ${class_options}">
@ -849,11 +849,11 @@ ${status.account.display_name}
</button>
<div class="expand_menu invisible disallow_select">
<ul>
<li><a class="copylink_button" url="${status.url}" >Copy link to Toot</a></li>
<li><a class="copylink_button" url="${status.url}" >${__('Copy link to Toot')}</a></li>
${own_toot_buttons}
</ul>
<ul>
<li><a href="${status.url}" target="_blank">View original</a></li>
<li><a href="${status.url}" target="_blank">${__('View original')}</a></li>
</ul>
</div>
</div>
@ -892,7 +892,7 @@ ${toot_reblog_button}
</div>
<form id="reply_status_form" name="reply_status_form" class="status_form"sid="${status.id}" username="${status.account.acct}">
<div class="status_top">
<input class="status_spoiler invisible" name="status_spoiler" placeholder="Content warning" type="text"/>
<input class="status_spoiler invisible" name="status_spoiler" placeholder="${__('Content warning')}" type="text"/>
</div>
<div class="status_main">
<!-- current avatar -->
@ -901,7 +901,7 @@ ${toot_reblog_button}
</div>
<!-- text area -->
<div class="status_textarea">
<textarea class="emoji_poss" name="status_textarea" placeholder="Toot your reply"></textarea>
<textarea class="emoji_poss" name="status_textarea" placeholder="${__('Toot your reply')}"></textarea>
<div class="media_attachments_preview_area invisible"></div>
</div>
</div>
@ -925,16 +925,16 @@ ${toot_reblog_button}
<!-- Privacy options -->
<div class="expand_privacy_menu invisible">
<label for="reply_status_public" class="status_privacy select_privacy disallow_select" privacyicon="fa fa-globe">
<i class="fa fa-globe" aria-hidden="true"></i>Public
<i class="fa fa-globe" aria-hidden="true"></i>${__('Public')}
</label>
<label for="reply_status_unlisted" class="status_privacy select_privacy disallow_select" privacyicon="fa fa-unlock-alt">
<i class="fa fa-unlock-alt" aria-hidden="true"></i>Unlisted
<i class="fa fa-unlock-alt" aria-hidden="true"></i>${__('Unlisted')}
</label>
<label for="reply_status_fonly" class="status_privacy select_privacy disallow_select" privacyicon="fa fa-lock">
<i class="fa fa-lock" aria-hidden="true"></i>Followers-only
<i class="fa fa-lock" aria-hidden="true"></i>${__('Followers-only')}
</label>
<label for="reply_status_direct" class="status_privacy select_privacy disallow_select" privacyicon="fa fa-envelope">
<i class="fa fa-envelope" aria-hidden="true"></i>Direct
<i class="fa fa-envelope" aria-hidden="true"></i>${__('Direct')}
</label>
</div>
</div>
@ -957,7 +957,7 @@ ${current_instance_charlimit}
<label for="reply_status_form_submit" class="submit_status_label">
<div class="toot_button_label disallow_select">
<i class="fa fa-reply" aria-hidden="true"></i>
<span>Reply</span>
<span>${__('Reply')}</span>
</div>
</label>
</div>
@ -988,11 +988,11 @@ for(i=0;i<status.reblog.account.emojis.length;i++) {
status.reblog.account.display_name = status.reblog.account.display_name.replace(new RegExp(":"+status.reblog.account.emojis[i].shortcode+":","g"),"<img src='"+status.reblog.account.emojis[i].url+"' class='emoji'>");
}
if(status.reblog.spoiler_text && localStorage.setting_show_content_warning == "false") {
alart_text = "<span>"+status.reblog.spoiler_text+"</span><button class='cw_button'>SHOW MORE</button>",
alart_text = "<span>"+status.reblog.spoiler_text+"</span><button class='cw_button'>"+__('SHOW MORE')+"</button>",
article_option = "content_warning";
}
else if(status.reblog.spoiler_text && localStorage.setting_show_content_warning == "true") {
alart_text = "<span>"+status.reblog.spoiler_text+"</span><button class='cw_button'>SHOW LESS</button>";
alart_text = "<span>"+status.reblog.spoiler_text+"</span><button class='cw_button'>"+__('SHOW LESS')+"</button>";
}
if (status.reblog.reblogs_count) {
toot_reblogs_count = status.reblog.reblogs_count;
@ -1012,23 +1012,23 @@ status.reblog.account.display_name = status.reblog.account.username;
checked_public = "";
checked_unlisted = "";
switch(status.reblog.visibility) {
case "public":toot_privacy_mode="Public";toot_privacy_icon="globe";checked_public=" checked";break;
case "unlisted":toot_privacy_mode="Unlisted";toot_privacy_icon="unlock-alt";checked_unlisted=" checked";break;
case "public":toot_privacy_mode=__("Public");toot_privacy_icon="globe";checked_public=" checked";break;
case "unlisted":toot_privacy_mode=__("Unlisted");toot_privacy_icon="unlock-alt";checked_unlisted=" checked";break;
}
var own_toot_buttons = "";
if(status.reblog.account.acct == current_acct) {
var own_toot_buttons = (`<li><a class="delete_button" tid="${status.reblog.id}">Delete Toot</a></li>`);
var own_toot_buttons = (`<li><a class="delete_button" tid="${status.reblog.id}">${__('Delete Toot')}</a></li>`);
if(status.reblog.pinned == true) {
own_toot_buttons += (`<li><a class="unpin_button" tid="${status.reblog.id}">Unpin Toot</a></li>`);
own_toot_buttons += (`<li><a class="unpin_button" tid="${status.reblog.id}">${__('Unpin Toot')}</a></li>`);
}
else {
own_toot_buttons += (`<li><a class="pin_button" tid="${status.reblog.id}">Pin Toot</a></li>`);
own_toot_buttons += (`<li><a class="pin_button" tid="${status.reblog.id}">${__('Pin Toot')}</a></li>`);
}
}
else {
var own_toot_buttons = (`<li><a class="mute_button" mid="${status.reblog.account.id}" sid="${status.reblog.id}">Mute @${status.reblog.account.username}</a></li>
<li><a class="block_button" mid="${status.reblog.account.id}" sid="${status.reblog.id}">Block @${status.reblog.account.username}</a></li>
<li><a class="report_button" mid="${status.reblog.account.id}" sid="${status.reblog.id}" display_name="${status.reblog.account.display_name}">Report this Toot</a></li>`);
var own_toot_buttons = (`<li><a class="mute_button" mid="${status.reblog.account.id}" sid="${status.reblog.id}">${__('Mute')} @${status.reblog.account.username}</a></li>
<li><a class="block_button" mid="${status.reblog.account.id}" sid="${status.reblog.id}">${__('Block')} @${status.reblog.account.username}</a></li>
<li><a class="report_button" mid="${status.reblog.account.id}" sid="${status.reblog.id}" display_name="${status.reblog.account.display_name}">${__('Report this Toot')}</a></li>`);
}
const html=(`
<div sid="${status.reblog.id}" class="toot_detail ${class_options}">
@ -1051,11 +1051,11 @@ ${status.reblog.account.display_name}
</button>
<div class="expand_menu invisible disallow_select">
<ul>
<li><a class="copylink_button" url="${status.reblog.url}" >Copy link to Toot</a></li>
<li><a class="copylink_button" url="${status.reblog.url}" >${__('Copy link to Toot')}</a></li>
${own_toot_buttons}
</ul>
<ul>
<li><a href="${status.reblog.url}" target="_blank">View original</a></li>
<li><a href="${status.reblog.url}" target="_blank">${__('View original')}</a></li>
</ul>
</div>
</div>
@ -1099,7 +1099,7 @@ ${media_views}
</div>
<form id="reply_status_form" name="reply_status_form" class="status_form" sid="${status.reblog.id}" username="${status.reblog.account.acct}">
<div class="status_top">
<input class="status_spoiler invisible" name="status_spoiler" placeholder="Content warning" type="text"/>
<input class="status_spoiler invisible" name="status_spoiler" placeholder="${__('Content warning')}" type="text"/>
</div>
<div class="status_main">
<!-- current avatar -->
@ -1108,7 +1108,7 @@ ${media_views}
</div>
<!-- text area -->
<div class="status_textarea">
<textarea class="emoji_poss" name="status_textarea" placeholder="Toot your reply"></textarea>
<textarea class="emoji_poss" name="status_textarea" placeholder="${__('Toot your reply')}"></textarea>
<div class="media_attachments_preview_area invisible"></div>
</div>
</div>
@ -1132,16 +1132,16 @@ ${media_views}
<!-- Privacy options -->
<div class="expand_privacy_menu invisible">
<label for="reply_status_public" class="status_privacy select_privacy disallow_select" privacyicon="fa fa-globe">
<i class="fa fa-globe" aria-hidden="true"></i>Public
<i class="fa fa-globe" aria-hidden="true"></i>${__('Public')}
</label>
<label for="reply_status_unlisted" class="status_privacy select_privacy disallow_select" privacyicon="fa fa-unlock-alt">
<i class="fa fa-unlock-alt" aria-hidden="true"></i>Unlisted
<i class="fa fa-unlock-alt" aria-hidden="true"></i>${__('Unlisted')}
</label>
<label for="reply_status_fonly" class="status_privacy select_privacy disallow_select" privacyicon="fa fa-lock">
<i class="fa fa-lock" aria-hidden="true"></i>Followers-only
<i class="fa fa-lock" aria-hidden="true"></i>${__('Followers-only')}
</label>
<label for="reply_status_direct" class="status_privacy select_privacy disallow_select" privacyicon="fa fa-envelope">
<i class="fa fa-envelope" aria-hidden="true"></i>Direct
<i class="fa fa-envelope" aria-hidden="true"></i>${__('Direct')}
</label>
</div>
</div>
@ -1164,7 +1164,7 @@ ${current_instance_charlimit}
<label for="reply_status_form_submit" class="submit_status_label">
<div class="toot_button_label disallow_select">
<i class="fa fa-reply" aria-hidden="true"></i>
<span>Reply</span>
<span>${__('Reply')}</span>
</div>
</label>
</div>
@ -1217,11 +1217,11 @@ for(i=0;i<status.account.emojis.length;i++) {
status.account.display_name = status.account.display_name.replace(new RegExp(":"+status.account.emojis[i].shortcode+":","g"),"<img src='"+status.account.emojis[i].url+"' class='emoji'>");
}
if(status.spoiler_text && localStorage.setting_show_content_warning == "false") {
alart_text = "<span>"+status.spoiler_text+"</span><button class='cw_button'>SHOW MORE</button>",
alart_text = "<span>"+status.spoiler_text+"</span><button class='cw_button'>${__('SHOW MORE')}</button>",
article_option = "content_warning";
}
else if(status.spoiler_text && localStorage.setting_show_content_warning == "true") {
alart_text = "<span>"+status.spoiler_text+"</span><button class='cw_button'>SHOW LESS</button>";
alart_text = "<span>"+status.spoiler_text+"</span><button class='cw_button'>${__('SHOW LESS')}</button>";
}
if (status.reblogs_count) {
toot_reblogs_count = status.reblogs_count;
@ -1236,10 +1236,10 @@ if(status.account.display_name.length == 0) {
status.account.display_name = status.account.username;
}
switch(status.visibility) {
case "public":toot_privacy_mode="Public";toot_privacy_icon="globe";break;
case "unlisted":toot_privacy_mode="Unlisted";toot_privacy_icon="unlock-alt";break;
case "private":toot_privacy_mode="Followers-only";toot_privacy_icon="lock";break;
case "direct":toot_privacy_mode="Direct";toot_privacy_icon="envelope";break;
case "public":toot_privacy_mode=__("Public");toot_privacy_icon="globe";break;
case "unlisted":toot_privacy_mode=__("Unlisted");toot_privacy_icon="unlock-alt";break;
case "private":toot_privacy_mode=__("Followers-only");toot_privacy_icon="lock";break;
case "direct":toot_privacy_mode=__("Direct");toot_privacy_icon="envelope";break;
}
if(toot_privacy_icon == "globe" || toot_privacy_icon == "unlock-alt") {
toot_footer_width = " style='width:320px'";
@ -1256,18 +1256,18 @@ toot_reblog_button = "";
}
var own_toot_buttons = "";
if(status.account.acct == current_acct) {
var own_toot_buttons = (`<li><a class="delete_button" tid="${status.id}">Delete Toot</a></li>`);
var own_toot_buttons = (`<li><a class="delete_button" tid="${status.id}">${__('Delete Toot')}</a></li>`);
if(status.pinned == true) {
own_toot_buttons += (`<li><a class="unpin_button" tid="${status.id}">Unpin Toot</a></li>`);
own_toot_buttons += (`<li><a class="unpin_button" tid="${status.id}">${__('Unpin Toot')}</a></li>`);
}
else {
own_toot_buttons += (`<li><a class="pin_button" tid="${status.id}">Pin Toot</a></li>`);
own_toot_buttons += (`<li><a class="pin_button" tid="${status.id}">${__('Pin Toot')}</a></li>`);
}
}
else {
var own_toot_buttons = (`<li><a class="mute_button" mid="${status.account.id}" sid="${status.id}">Mute @${status.account.username}</a></li>
<li><a class="block_button" mid="${status.account.id}" sid="${status.id}">Block @${status.account.username}</a></li>
<li><a class="report_button" mid="${status.account.id}" sid="${status.id}" display_name="${status.account.display_name}">Report this Toot</a></li>`);
var own_toot_buttons = (`<li><a class="mute_button" mid="${status.account.id}" sid="${status.id}">${__('Mute')} @${status.account.username}</a></li>
<li><a class="block_button" mid="${status.account.id}" sid="${status.id}">${__('Block')} @${status.account.username}</a></li>
<li><a class="report_button" mid="${status.account.id}" sid="${status.id}" display_name="${status.account.display_name}">${__('Report this Toot')}</a></li>`);
}
const html=(`
<div sid="${status.id}" class="toot_entry ${class_options}">
@ -1292,11 +1292,11 @@ ${status.account.display_name}
</button>
<div class="expand_menu invisible disallow_select">
<ul>
<li><a class="copylink_button" url="" >Copy link to Toot</a></li>
<li><a class="copylink_button" url="" >${__('Copy link to Toot')}</a></li>
${own_toot_buttons}
</ul>
<ul>
<li><a href="${status.url}" target="_blank">View original</a></li>
<li><a href="${status.url}" target="_blank">${__('View original')}</a></li>
</ul>
</div>
</div>
@ -1354,11 +1354,11 @@ for(i=0;i<status.reblog.account.emojis.length;i++) {
status.reblog.account.display_name = status.reblog.account.display_name.replace(new RegExp(":"+status.reblog.account.emojis[i].shortcode+":","g"),"<img src='"+status.reblog.account.emojis[i].url+"' class='emoji'>");
}
if(status.reblog.spoiler_text && localStorage.setting_show_content_warning == "false") {
alart_text = "<span>"+status.reblog.spoiler_text+"</span><button class='cw_button'>SHOW MORE</button>",
alart_text = "<span>"+status.reblog.spoiler_text+"</span><button class='cw_button'>"+__('SHOW MORE')+"</button>",
article_option = "content_warning";
}
else if(status.reblog.spoiler_text && localStorage.setting_show_content_warning == "true") {
alart_text = "<span>"+status.reblog.spoiler_text+"</span><button class='cw_button'>SHOW LESS</button>";
alart_text = "<span>"+status.reblog.spoiler_text+"</span><button class='cw_button'>"+__('SHOW LESS')+"</button>";
}
if (status.reblog.reblogs_count) {
toot_reblogs_count = status.reblog.reblogs_count;
@ -1376,29 +1376,29 @@ if(status.reblog.account.display_name.length == 0) {
status.reblog.account.display_name = status.reblog.account.username;
}
switch(status.reblog.visibility) {
case "public":toot_privacy_mode="Public";toot_privacy_icon="globe";break;
case "unlisted":toot_privacy_mode="Unlisted";toot_privacy_icon="unlock-alt";break;
case "public":toot_privacy_mode=__("Public");toot_privacy_icon="globe";break;
case "unlisted":toot_privacy_mode=__("Unlisted");toot_privacy_icon="unlock-alt";break;
}
var own_toot_buttons = "";
if(status.reblog.account.acct == current_acct) {
var own_toot_buttons = (`<li><a class="delete_button" tid="${status.reblog.id}">Delete Toot</a></li>`);
var own_toot_buttons = (`<li><a class="delete_button" tid="${status.reblog.id}">${__('Delete Toot')}</a></li>`);
if(status.reblog.pinned == true) {
own_toot_buttons += (`<li><a class="unpin_button" tid="${status.reblog.id}">Unpin Toot</a></li>`);
own_toot_buttons += (`<li><a class="unpin_button" tid="${status.reblog.id}">${__('Unpin Toot')}</a></li>`);
}
else {
own_toot_buttons += (`<li><a class="pin_button" tid="${status.reblog.id}">Pin Toot</a></li>`);
own_toot_buttons += (`<li><a class="pin_button" tid="${status.reblog.id}">${__('Pin Toot')}</a></li>`);
}
}
else {
var own_toot_buttons = (`<li><a class="mute_button" mid="${status.reblog.account.id}" sid="${status.reblog.id}">Mute @${status.account.username}</a></li>
<li><a class="block_button" mid="${status.reblog.account.id}" sid="${status.reblog.id}">Block @${status.account.username}</a></li>
<li><a class="report_button" mid="${status.reblog.account.id}" sid="${status.reblog.id}" display_name="${status.reblog.account.display_name}">Report this Toot</a></li>`);
var own_toot_buttons = (`<li><a class="mute_button" mid="${status.reblog.account.id}" sid="${status.reblog.id}">${__('Mute')} @${status.account.username}</a></li>
<li><a class="block_button" mid="${status.reblog.account.id}" sid="${status.reblog.id}">${__('Block')} @${status.account.username}</a></li>
<li><a class="report_button" mid="${status.reblog.account.id}" sid="${status.reblog.id}" display_name="${status.reblog.account.display_name}">${__('Report this Toot')}</a></li>`);
}
const html=(`
<div sid="${status.id}" class="toot_entry ${class_options}">
<div class="boost_author_box">
<a href="${status_account_link}">
<span class="emoji_poss"><i class="fa fa-fw fa-retweet"></i>${status.account.display_name} Boosted</span>
<span class="emoji_poss"><i class="fa fa-fw fa-retweet"></i>${status.account.display_name} ${__('Boosted')}</span>
</a>
</div>
<div class="toot_entry_body">
@ -1422,11 +1422,11 @@ ${status.reblog.account.display_name}
</button>
<div class="expand_menu invisible disallow_select">
<ul>
<li><a class="copylink_button" url="" >Copy link to Toot</a></li>
<li><a class="copylink_button" url="" >${__('Copy link to Toot')}</a></li>
${own_toot_buttons}
</ul>
<ul>
<li><a href="${status.reblog.url}" target="_blank">View original</a></li>
<li><a href="${status.reblog.url}" target="_blank">${__('View original')}</a></li>
</ul>
</div>
</div>
@ -1468,4 +1468,4 @@ ${media_views}
</div>`);
return $(html)
}
}
}

View File

@ -19,7 +19,7 @@ api.post("follows", {uri:$(this).attr('data')}, function (data) {
}
$(this).toggleClass('follow_button');
$(this).toggleClass('following_button');
$(this).html('<span>Following</span>');
$(this).html('<span>'+__('Following')+'</span>');
return false;
});
$(document).on('click','.following_button', function(e) {
@ -30,7 +30,7 @@ api.post('accounts/'+$(this).attr('mid')+'/unfollow', function (data) {
}
$(this).toggleClass('following_button');
$(this).toggleClass('follow_button');
$(this).html('<i class="fa fa-fw fa-user-plus"></i><span>Follow</span>');
$(this).html('<i class="fa fa-fw fa-user-plus"></i><span>'+__('Follow')+'</span>');
return false;
});
$(document).on('click','.mute_button', function(e) {
@ -38,7 +38,7 @@ if ($(this).attr('mid') !== null) {
api.post('accounts/'+$(this).attr('mid')+'/mute', function (data) {
});
}
putMessage("You'll no longer receive notifications from this user");
putMessage(__("You'll no longer receive notifications from this user"));
return false;
});
$(document).on('click','.muting_button', function(e) {
@ -48,8 +48,8 @@ api.post('accounts/'+$(this).attr('mid')+'/unmute', function (data) {
}
$(this).toggleClass('muting_button');
$(this).toggleClass('follow_button');
$(this).html('<i class="fa fa-fw fa-user-plus"></i><span>Follow</span>');
putMessage("Unmuted this user");
$(this).html('<i class="fa fa-fw fa-user-plus"></i><span>'+__('Follow')+'</span>');
putMessage(__("Unmuted this user"));
return false;
});
$(document).on('click','.block_button', function(e) {
@ -57,7 +57,7 @@ if ($(this).attr('mid') !== null) {
api.post('accounts/'+$(this).attr('mid')+'/block', function (data) {
});
}
putMessage("This user has been blocked");
putMessage(__("This user has been blocked"));
return false;
});
$(document).on('click','.blocking_button', function(e) {
@ -68,8 +68,8 @@ api.post('accounts/'+$(this).attr('mid')+'/unblock', function (data) {
}
$(this).toggleClass('blocking_button');
$(this).toggleClass('follow_button');
$(this).html('<i class="fa fa-fw fa-user-plus"></i><span>Follow</span>');
putMessage("Unblocked this user");
$(this).html('<i class="fa fa-fw fa-user-plus"></i><span>'+__('Follow')+'</span>');
putMessage(__("Unblocked this user"));
return false;
});
$(document).on('click','.boost_button', function(e) {
@ -112,31 +112,31 @@ $(document).on('click','.delete_button', function(e) {
const sid = $(this).attr('tid');
api.delete("statuses/"+sid, function (data) {
$('.toot_entry[sid="'+sid+'"]').remove();
putMessage("Your Toot has been deleted");
putMessage(__("Your Toot has been deleted"));
});
});
$(document).on('click','.pin_button', function(e) {
const sid = $(this).attr('tid');
api.post("statuses/"+sid+"/pin", function (data) {
$('.toot_entry[sid="'+sid+'"] .pin_button').removeClass("pin_button").addClass("unpin_button").text("Unpin Toot");
putMessage("Your Toot has been pinned");
$('.toot_entry[sid="'+sid+'"] .pin_button').removeClass("pin_button").addClass("unpin_button").text(__("Unpin Toot"));
putMessage(__("Your Toot has been pinned"));
});
});
$(document).on('click','.unpin_button', function(e) {
const sid = $(this).attr('tid');
api.post("statuses/"+sid+"/unpin", function (data) {
$('.toot_entry[sid="'+sid+'"] .unpin_button').removeClass("unpin_button").addClass("pin_button").text("Pin Toot");
putMessage("Your Toot has been unpinned");
$('.toot_entry[sid="'+sid+'"] .unpin_button').removeClass("unpin_button").addClass("pin_button").text(__("Pin Toot"));
putMessage(__("Your Toot has been unpinned"));
});
});
$(document).on('click','.cw_button', function(e) {
e.stopPropagation();
const article = $(this).parent();
if ( article.hasClass('content_warning') ) {
$(this).text('SHOW LESS');
$(this).text(__('SHOW LESS'));
article.removeClass('content_warning');
} else {
$(this).text('SHOW MORE');
$(this).text(__('SHOW MORE'));
article.addClass('content_warning');
}
return false;
@ -454,7 +454,7 @@ if ( RelationshipsObj[i].following ) {
const button = $('#js-follows_profile .follow_button[mid="'+RelationshipsObj[i].id+'"]');
button.removeClass("follow_button");
button.addClass("following_button");
button.text('Following');
button.text(__('Following'));
}
}
});
@ -481,7 +481,7 @@ if ( RelationshipsObj[i].following ) {
const button = $('#js-follows_profile .follow_button[mid="'+RelationshipsObj[i].id+'"]');
button.removeClass("follow_button");
button.addClass("following_button");
button.text('Following');
button.text(__('Following'));
}
}
});
@ -528,12 +528,12 @@ console.log(current_id);
if( AccountObj.id == current_id ) {
$(`<a href="/settings/profile">
<button class="profile_edit_button relationship_button">
<span>Edit profile</span>
<span>${__('Edit profile')}</span>
</button
</a>`).appendTo('.profile_button_box');
$(`<a href="${current_favourites_link}">
<h2>FAVOURITES</h2>
<span>Show</span>
<h2>${__('FAVOURITES')}</h2>
<span>${__('Show')}</span>
</a>`).appendTo("#js-profile_nav_favourites");
} else {
api.get('accounts/relationships', [{name:'id', data:String(AccountObj.id)}], function(RelationshipObj) {
@ -542,25 +542,25 @@ $('#main .profile_username .profile_followed_by').removeClass('invisible');
}
if (RelationshipObj[0].blocking) {
$(`<button class="blocking_button relationship_button" mid="${AccountObj.id}">
<span>Blocking</span>
<span>${__('Blocking')}</span>
</button>`).appendTo('.profile_button_box');
} else if (RelationshipObj[0].muting) {
$(`<button class="muting_button relationship_button" mid="${AccountObj.id}">
<span>Muting</span>
<span>${__('Muting')}</span>
</button>`).appendTo('.profile_button_box');
} else if (RelationshipObj[0].requested) {
$(`<!-- wont work -->
<button class="requested_button relationship_button" mid="${AccountObj.id}">
<span>Requested</span>
<span>${__('Requested')}</span>
</button>`).appendTo('.profile_button_box');
} else if(RelationshipObj[0].following){
$(`<button class="following_button relationship_button" mid="${AccountObj.id}">
<span>Following</span>
<span>${__('Following')}</span>
</button>`).appendTo('.profile_button_box');
} else {
$(`<button class="follow_button relationship_button" mid="${AccountObj.id}">
<i class="fa fa-fw fa-user-plus"></i>
<span>Follow</span>
<span>${__('Follow')}</span>
</button>`).appendTo('.profile_button_box');
}
});
@ -570,7 +570,7 @@ replace_emoji();
function setRecentImages(mid) {
api.get("accounts/"+mid+"/statuses", [{name:'only_media',data:'true'},{name:'limit',data:'6'}], function(statuses) {
if ( statuses.length ) {
$('#js_profile_recent_images span').text(`${statuses[0].account.statuses_count} Photos and toots`);
$('#js_profile_recent_images span').text(`${statuses[0].account.statuses_count} ${__('Photos and toots')}`);
$('#js_profile_recent_images a').attr('href', $("#media_link").attr('href'));
for ( i in statuses ) {
$(`<div class="profile_recent_images_item media_attachment" otype="image" sid="${statuses[i].id}" url="${statuses[i].media_attachments[0].preview_url}">
@ -603,10 +603,10 @@ if(userstream.payload.account.display_name.length == 0) {
userstream.payload.account.display_name = userstream.payload.account.username;
}
switch(userstream.payload.type) {
case "favourite":pushNotification("New favourite",userstream.payload.account.display_name+" favourited your toot");break;
case "reblog":pushNotification("New boost",userstream.payload.account.display_name+" boosted your toot");break;
case "follow":pushNotification("New follower",userstream.payload.account.display_name+" followed you");$(".js_current_followers_count").html(++localStorage.current_followers_count);break;
case "mention":pushNotification("New mention",userstream.payload.account.display_name+" mentioned you");break;
case "favourite":pushNotification("New favourite",userstream.payload.account.display_name+" "+__("favourited your toot"));break;
case "reblog":pushNotification("New boost",userstream.payload.account.display_name+" "+__("boosted your toot"));break;
case "follow":pushNotification("New follower",userstream.payload.account.display_name+" "+__("followed you"));$(".js_current_followers_count").html(++localStorage.current_followers_count);break;
case "mention":pushNotification("New mention",userstream.payload.account.display_name+" "+__("mentioned you"));break;
}
}
});
@ -796,7 +796,7 @@ $('.overlay_status .submit_status_label').removeClass('active_submit_button');
$('.overlay_status').addClass('invisible');
$('#js-overlay_content_wrap').removeClass('view');
$('#js-overlay_content_wrap').removeClass('black_05');
putMessage('Your Toot was posted!');
putMessage(__('Your Toot was posted!'));
});
} else {
const dummy_form= $('<form></form>').append($('#overlay_status_media_atta')),
@ -831,7 +831,7 @@ autosize.destroy($('#overlay_status_form .status_textarea textarea'));
$('#overlay_status_emoji').lsxEmojiPicker("destroy");
$('#js-overlay_content_wrap').removeClass('view');
$('#js-overlay_content_wrap').removeClass('black_05');
putMessage('Your Toot was posted!');
putMessage(__('Your Toot was posted!'));
});
});
break;
@ -1105,7 +1105,7 @@ $('#reply_status_form .character_count').html(current_instance_charlimit);
$('.reply_status .submit_status_label').removeClass('active_submit_button');
context_template(data, 'descendants_status').appendTo("#js-overlay_content .temporary_object .toot_detail_wrap");
replace_emoji();
putMessage('Your Toot was posted!');
putMessage(__('Your Toot was posted!'));
});
} else {
const dummy_form = $('<form></form>').append($('#reply_status_media_atta')),
@ -1138,7 +1138,7 @@ $('#reply_status_form .character_count').html(current_instance_charlimit);
$('.reply_status .submit_status_label').removeClass('active_submit_button');
context_template(data, 'descendants_status').appendTo("#js-overlay_content .temporary_object .toot_detail_wrap");
replace_emoji();
putMessage('Your Toot was posted!');
putMessage(__('Your Toot was posted!'));
});
});
break;
@ -1184,7 +1184,7 @@ autosize($('#single_reply_status_form .status_textarea textarea'));
$('#single_reply_status_form input[name="privacy_option"]').val([privacy_mode]);
$('#single_reply_status_form .expand_privacy_menu_button > i').attr('class', "fa fa-" + picon);
$('#single_reply_status_form').attr('tid',sid);
$('.single_reply_status .single_reply_status_header span').addClass("emoji_poss").html("Reply to "+display_name);
$('.single_reply_status .single_reply_status_header span').addClass("emoji_poss").html(__("Reply to")+" "+display_name);
$('#single_reply_status_form textarea').val(acct+" ");
$('#single_reply_status_form .character_count').html(current_instance_charlimit);
$('#single_reply_status_emoji').lsxEmojiPicker({
@ -1286,7 +1286,7 @@ $('#single_reply_status_emoji').lsxEmojiPicker("destroy");
$('#js-overlay_content_wrap').removeClass('view');
$('#js-overlay_content_wrap').removeClass('black_05');
$("#js-overlay_content_wrap .single_reply_status .status_preview").empty();
putMessage('Your Reply was posted!');
putMessage(__('Your Reply was posted!'));
});
} else {
const dummy_form= $('<form></form>').append($('#single_reply_status_media_atta')),
@ -1323,7 +1323,7 @@ $('#single_reply_status_emoji').lsxEmojiPicker("destroy");
$('#js-overlay_content_wrap').removeClass('view');
$('#js-overlay_content_wrap').removeClass('black_05');
$("#js-overlay_content_wrap .single_reply_status .status_preview").empty();
putMessage('Your Reply to was posted!');
putMessage(__('Your Reply was posted!'));
});
});
break;
@ -1356,7 +1356,7 @@ $('#report_status_form .status_textarea textarea').focus();
autosize($('#single_reply_status_form .status_textarea textarea'));
$('#report_status_form').attr('tid',sid);
$('#report_status_form').attr('mid',mid);
$('.report_status .report_status_header span').addClass("emoji_poss").html("Report a Toot of "+display_name);
$('.report_status .report_status_header span').addClass("emoji_poss").html(__("Report a Toot of")+" "+display_name);
$('#report_status_form textarea').empty();
$('#report_status_form .character_count').html("1000");
replace_emoji();
@ -1405,7 +1405,7 @@ autosize.destroy($('#report_status_form .status_textarea textarea'));
$('#js-overlay_content_wrap').removeClass('view');
$('#js-overlay_content_wrap').removeClass('black_05');
$("#js-overlay_content_wrap .report_status .status_preview").empty();
putMessage('Toot reported successfully!');
putMessage(__('Toot reported successfully!'));
});
});
});
@ -1415,7 +1415,7 @@ if(ClipboardJS.isSupported()) {
var cbelem = $("<button>").attr("data-clipboard-text",$(this).attr("url"));
var clipboard = new ClipboardJS(cbelem[0]);
clipboard.on('success',function(e) {
putMessage("Link successfully copied!");
putMessage(__("Link successfully copied!"));
e.clearSelection();
});
clipboard.on('error',function(e) {
@ -1526,4 +1526,4 @@ location.href=current_favourites_link;
shortcut.add("esc",function() {
$("#js-overlay_content_wrap").click();
});
});
});

663
assets/js/pomo/pomo.js Normal file
View File

@ -0,0 +1,663 @@
(function (ctx)
{
var noop = function () {}, instance;
if (!String.prototype.trim) {
String.prototype.trim = function () {
return this.replace(/^\s+|\s+$/g, '');
};
}
var sprintf = (function () {
function get_type(variable) {
return Object.prototype.toString.call(variable).slice(8, -1).toLowerCase();
}
function str_repeat(input, multiplier) {
for (var output = []; multiplier > 0; output[--multiplier] = input) {
}
return output.join('');
}
var str_format = function () {
if (!str_format.cache.hasOwnProperty(arguments[0])) {
str_format.cache[arguments[0]] = str_format.parse(arguments[0]);
}
return str_format.format.call(null, str_format.cache[arguments[0]], arguments);
};
str_format.format = function (parse_tree, argv) {
var cursor = 1, tree_length = parse_tree.length, node_type = '', arg, output = [], i, k, match, pad, pad_character, pad_length;
for (i = 0; i < tree_length; i++) {
node_type = get_type(parse_tree[i]);
if (node_type === 'string') {
output.push(parse_tree[i]);
} else if (node_type === 'array') {
match = parse_tree[i];
if (match[2]) {
arg = argv[cursor];
for (k = 0; k < match[2].length; k++) {
if (!arg.hasOwnProperty(match[2][k])) {
throw (sprintf('[sprintf] property "%s" does not exist', match[2][k]));
}
arg = arg[match[2][k]];
}
} else if (match[1]) {
arg = argv[match[1]];
} else {
arg = argv[cursor++];
}
if (/[^s]/.test(match[8]) && (get_type(arg) != 'number')) {
throw (sprintf('[sprintf] expecting number but found %s', get_type(arg)));
}
switch (match[8]) {
case 'b':
arg = arg.toString(2);
break;
case 'c':
arg = String.fromCharCode(arg);
break;
case 'd':
arg = arg >> 0;
break;
case 'e':
arg = match[7] ? arg.toExponential(match[7]) : arg.toExponential();
break;
case 'f':
arg = match[7] ? parseFloat(arg).toFixed(match[7]) : parseFloat(arg);
break;
case 'o':
arg = arg.toString(8);
break;
case 's':
arg = (( arg = String(arg)) && match[7] ? arg.substring(0, match[7]) : arg);
break;
case 'u':
arg = Math.abs(arg);
break;
case 'x':
arg = arg.toString(16);
break;
case 'X':
arg = arg.toString(16).toUpperCase();
break;
}
arg = (/[def]/.test(match[8]) && match[3] && arg >= 0 ? '+' + arg : arg);
pad_character = match[4] ? match[4] === '0' ? '0' : match[4].charAt(1) : ' ';
pad_length = match[6] - String(arg).length;
pad = match[6] ? str_repeat(pad_character, pad_length) : '';
output.push(match[5] ? arg + pad : pad + arg);
}
}
return output.join('');
};
str_format.cache = {};
str_format.parse = function (fmt) {
var _fmt = fmt, match = [], parse_tree = [], arg_names = 0;
while (_fmt) {
if (( match = /^[^\x25]+/.exec(_fmt)) !== null) {
parse_tree.push(match[0]);
} else if (( match = /^\x25{2}/.exec(_fmt)) !== null) {
parse_tree.push('%');
} else if (( match = /^\x25(?:([1-9]\d*)\$|\(([^\)]+)\))?(\+)?(0|'[^$])?(-)?(\d+)?(?:\.(\d+))?([b-fosuxX])/.exec(_fmt)) !== null) {
if (match[2]) {
arg_names |= 1;
var field_list = [], replacement_field = match[2], field_match = [];
if (( field_match = /^([a-z_][a-z_\d]*)/i.exec(replacement_field)) !== null) {
field_list.push(field_match[1]);
while (( replacement_field = replacement_field.substring(field_match[0].length)) !== '') {
if (( field_match = /^\.([a-z_][a-z_\d]*)/i.exec(replacement_field)) !== null) {
field_list.push(field_match[1]);
} else if (( field_match = /^\[(\d+)\]/.exec(replacement_field)) !== null) {
field_list.push(field_match[1]);
} else {
throw ('[sprintf] huh?');
}
}
} else {
throw ('[sprintf] huh?');
}
match[2] = field_list;
} else {
arg_names |= 2;
}
if (arg_names === 3) {
throw ('[sprintf] mixing positional and named placeholders is not (yet) supported');
}
parse_tree.push(match);
} else {
throw ('[sprintf] huh?');
}
_fmt = _fmt.substring(match[0].length);
}
return parse_tree;
};
return str_format;
})();
var vsprintf = function (fmt, argv) {
argv.unshift(fmt);
return sprintf.apply(null, argv);
};
var isBrowser = function () {
return (typeof(window) !== 'undefined' && !!document && !!document.getElementsByTagName);
};
var escapeString = function (val) {
var return_value;
if (val.constructor != String()) {
return_value = val;
}
if (val.replace) {
return_value = val
.replace(/[\"]/g, '\\"')
.replace(/[\\]/g, '\\')
.replace(/[\/]/g, '\/')
.replace(/[\b]/g, '\\b')
.replace(/[\f]/g, '\\f')
.replace(/[\n]/g, '\\n')
.replace(/[\r]/g, '\\r')
.replace(/[\t]/g, '\\t');
}
return return_value;
};
var unescapeString = function (val) {
var return_value;
if (!!val && !!val.replace) {
return_value = val
.replace("\\n", '\n')
.replace("\\r", '\r')
.replace("\\t", '\t')
.replace("\\f", '\f')
.replace("\\b", '\b')
.replace("\\r", '\r');
}
return return_value;
};
var waitUntilReady = function (callback) {
var itv = setInterval(function () {
if (!!instance && !instance.waiting) {
clearInterval(itv);
callback.call(callback);
}
}, 4);
};
var extend = function(protoProps, staticProps) {
var parent = this;
var child, has = Object.prototype.hasOwnProperty;
if (protoProps && has.call(protoProps, 'constructor')) {
child = protoProps.constructor;
}
else {
child = function(){ return parent.apply(this, arguments); };
}
if(staticProps)
for(var static_prop in staticProps){
child[static_prop] = staticProps[static_prop];
}
var Surrogate = function(){ this.constructor = child; };
Surrogate.prototype = parent.prototype;
child.prototype = new Surrogate;
if (protoProps)
for(var proto_prop in protoProps){
child.prototype[proto_prop] = protoProps[proto_prop];
}
child.extend = extend;
child.__super__ = parent.prototype;
return child;
};
entryExists = function (hash, domain, escaped) {
return !!hash && !!hash.contents && !!hash.contents[domain] && !!hash.contents[domain][escaped];
};
var Errors = {};
Errors.Base = extend.call(Error, {
toString: function(){
return (this.name + ': ' + this.message);
}
});
Errors.CustomError = Errors.Base.extend({
constructor: function (message) {
this.name = 'CustomError';
this.message = message;
this.stack = (new Error()).stack;
}
});
Errors.CustomError.extend = extend;
Errors.UnknownAcquisitionModeError = Errors.CustomError.extend({
constructor: function (mode) {
var message;
mode = !mode ? 'None provided' : mode;
message = 'PO files acquisition mode: "' + mode + '" is not valid.';
Errors.CustomError.call(this, message);
this.name = 'UnknownAcquisitionModeError';
}
});
var Parser = {};
Parser.Object = function (msg) {
var me = this, phrase_count = 1;
//singular by default
for (var key in msg) {
this[key] = msg[key];
}
this.setCount = function (amount) {
phrase_count = amount >> 0;
};
this.toString = function () {
var return_value, canGetPluralIndex;
canGetPluralIndex = !this.isPlural && this.plural_forms && this.plural_forms.push && !!Parser.Object.calculatePluralIndex;
if (canGetPluralIndex) {
var idx = Parser.Object.calculatePluralIndex(phrase_count);
return_value = this.plural_forms[idx];
} else {
return_value = this.translation;
}
return return_value;
}
};
Parser.POFiles = {
parse: function (text, translation_domain) {
text = !text? '' : text;
var getTelltale, extractHeaderInfo, isMultilinePlural, multilineExtract;
getTelltale = function (str) {
return str.substring(0, 12).split(' ')[0].trim();
};
isMultilinePlural = function (line) {
return (!!line && line.match(/msgstr\[[0-9]\]/));
};
extractHeaderInfo = function (header) {
var header_lines = header.split("\n");
for (var i = 0, j = header_lines.length; i < j; i++) {
var header_line = header_lines[i];
if (header_line.indexOf('"Plural-Forms: nplurals') === 0) {
var plural_form = header_line.substring(14).slice(0, -1);
Parser.Object.calculatePluralIndex = function (phrase_count) {
eval(unescapeString(plural_form));
if (typeof(plural) === 'undefined') {
plural = 0;
}
return plural;
}
}
}
};
multilineExtract = function (part_lines) {
var buffer = [], possible;
while (possible = part_lines.shift()) {
possible = possible.trim();
if (possible.indexOf('"') === 0) {
buffer.push(possible.substring(1).slice(0, -1));
}
else {
part_lines.unshift(possible);
break;
}
}
return buffer.join("");
};
var parsed = {},
has_header_info,
header_info,
part,
domain = ( typeof (translation_domain) === 'undefined') ? 'messages' : translation_domain,
counter = 0,
text = text.replace(/\r\n|\r/g, "\n"),
parts;
parsed[domain] = {};
parts = text.split(/\n\n/);
header_info = parts.shift();
has_header_info = extractHeaderInfo(header_info);
if (!has_header_info) {
parts.unshift(header_info);
}
else {
Parser.header_info = extractHeaderInfo(has_header_info);
}
while (part = parts.shift()) {
var message = {},
part_lines = !!part ? part.split(/\n/) : [],
line = '',
escaped;
while (line = part_lines.shift()) {
line = line.trim();
var next_line = part_lines.slice(0, -1)[0],
line_telltale = getTelltale(line),
next_line_telltale = next_line ? getTelltale(next_line) : false;
switch (line_telltale) {
case 'msgctxt':
message.context = line.substring(9).slice(0, -1);
break;
case 'msgid_plural':
message.isPlural = true;
message.plural_id = line.substring(14).slice(0, -1);
break;
case 'msgid':
if (line.indexOf('msgid ""') === 0) {
var possible = next_line.trim();
if (possible.indexOf('"') === 0) {//multiline
message.id = multilineExtract(part_lines)
}
}
else {
if (next_line_telltale = 'msgstr') {
message.id = line.substr(7).slice(0, -1);
}
}
continue;
case 'msgstr':
if (line.indexOf('msgstr ""') === 0) {
possible = next_line.trim();
if (possible.indexOf('"') === 0) {
message.translation = multilineExtract(part_lines);
}
}
else {
message.translation = line.substr(8).slice(0, -1);
}
break;
case '#:':
case '#.':
case '#':
continue;
case '#,':
break;
default:
if (isMultilinePlural(line)) {
var cases = [];
while (isMultilinePlural(line)) {
cases.push(line.substring(10).slice(0, -1));
line = part_lines.shift();
}
message.plural_forms = cases;
message.translation = cases[0];
}
continue;
}
}
if (!!message.id && !!message.translation) {
message = new Parser.Object(message);
escaped = escapeString(message.id);
if (!parsed[domain][message.id]) {
parsed[domain][escaped] = [message];
} else {
parsed[domain][escaped].push(message);
}
}
counter++;
}
return parsed;
},
generate: function () {
throw "Feature unimplemented";
}
};
var Providers = {};
Providers.Base = function (domain) {
var me = this, consumer_callback = [], has = Object.prototype.hasOwnProperty;
me.domain = domain;
me.waiting = true;
me.notifyConsumers = function(data){
for(var pos in consumer_callback){
if(has.call(consumer_callback,pos)){
consumer_callback[pos].call(consumer_callback[pos], data);
}
}
me.waiting = true;
}
me.done = function (callback) {
consumer_callback.push(callback);
var itv = setInterval(function () {
if (!me.waiting) {
me.notifyConsumers(me.parsed);
clearInterval(itv);
}
}, 4);
}
};
Providers.Base.prototype = {
toString: function () {
return '[object Adapter]'
},
getContents: function(){}
};
Providers.Base.extend = extend;
Providers.String = Providers.Base.extend({
constructor: function (literal_string, domain) {
Providers.Base.call(this, domain);
this.parsed = null;
this.unparsed = '' + literal_string;
},
getContents: function () {
var me = this, parsed;
parsed = Parser.POFiles.parse(this.unparsed, this.domain);
if(!parsed){
throw new Errors.ParsingError(this.unparsed);
}
me.parsed = parsed;
me.notifyConsumers(me.parsed);
}
});
if (!isBrowser()) {
Providers.File = Providers.Base.extend({
constructor: function (path_to_file, domain) {
Providers.Base.call(this, domain);
this.path = '' + path_to_file;
},
getContents: function () {
var me = this;
instance.waiting = true;
me.waiting = true;
require('fs').readFile(this.path, 'utf-8', function (err, data) {
if (!err) {
me.parsed = Parser.POFiles.parse(data, me.domain);
me.waiting = false;
}
else {
throw new Errors.FileReaderError(err.path);
}
});
}
});
}
else{
console.log('wat');
}
if (isBrowser()) {
Providers.Ajax = Providers.Base.extend({
constructor: function (url, domain) {
Providers.Base.call(this, domain);
this.url = url;
},
doRequest: function (url, success, error) {
var request = new XMLHttpRequest(), noop = function(){};
request.open('GET', url, true);
success = !success ? noop : success;
error = !error ? noop : error;
try {
request.onreadystatechange = function () {
var data = {error: true};
if (this.readyState === 4) {
if (this.status >= 200 && this.status < 400) {
data = this.responseText;
success.call(success, data);
}
else {
error.call(error, data);
}
}
};
request.send();
}
catch (Whatever) {
error.call(error, {error: true});
}
request = null;
},
/**
* Read all <link> elements with a type="text/x-gettext-translation" into the dictionary
* @param domain
* @constructor
*/
getContents: function () {
var domain = this.domain, me = this;
me.waiting = true;
this.doRequest(this.url, function (result) {
var adapter = new Providers.String(result, domain);
adapter.done(function(data){
me.parsed = data;
me.notifyConsumers(data);
});
adapter.getContents();
});
}
});
}
if (isBrowser()) {
Providers.Links = Providers.Ajax.extend({
constructor: function(domain){
Providers.Ajax.call(this,domain);
this.domain = domain;
},
getContents: function () {
var links = document.getElementsByTagName('link'), link, Ajax = Providers.Ajax, me = this;
me.waiting = true;
for (var i = 0, j = links.length; i < j; i++) {
link = links[i];
if (
!!link
&& !!link.getAttribute('type')
&& !!link.getAttribute('href')
&& link.getAttribute('type') === 'text/x-gettext-translation'
) {
me.waiting = true;
this.doRequest(link.href, function (result) {
var adapter = new Providers.String(result, me.domain);
adapter.done(function(data){
me.parsed = data;
me.notifyConsumers(data);
});
adapter.getContents();
});
}
}
}
});
}
var Pomo = function () {
var me = this, ready_callback;
me.storage = {};
me.waiting = true;
me.VERSION = '0.1.3';
me.domain = 'messages';
me.returnStrings = false;
me.unescapeStrings = false;
me.ready = function (callback) {
ready_callback = callback;
var itv = setInterval(function () {
if (!me.waiting) {
clearInterval(itv);
ready_callback.call(ready_callback);
}
}, 2);
};
me.wipe = function(){
me.storage = {};
me.waiting = true;
};
me.load = function (resource, options) {
options = !options ? {} : options;
me.waiting = true;
var mode = !!options.mode ? options.mode : false,
translation_domain = !!options.translation_domain ? options.translation_domain : 'messages',
provider;
switch (mode) {
case 'literal':
provider = new Providers.String(resource, translation_domain);
break;
case 'file':
provider = new Providers.File(resource, translation_domain);
break;
case 'link':
provider = new Providers.Links(translation_domain);
break;
case 'ajax':
provider = new Providers.Ajax(resource, translation_domain);
break;
default:
throw new Errors.UnknownAcquisitionModeError(mode);
break;
}
provider.done(function (data) {
me.storage.contents = data;
me.waiting = false;
});
provider.getContents();
return this;
};
me.getText = function (msg_id, options) {
msg_id = msg_id.split(/\n/).join('');
options = !options ? {} : options;
var variables = !!options.variables ? options.variables : [],
context = !!options.context ? options.context : false,
domain = !!options.domain ? options.domain : 'messages',
count = !!options.count ? options.count : false,
error_callback = !options.error? noop : options.error,
escaped = escapeString(msg_id);
if (!domain && !me.domain) {
domain = me.domain = 'messages';
}
else if (domain && !me.domain) {
me.domain = domain;
}
else {
me.domain = domain;
}
if (entryExists(me.storage, domain, escaped)) {
var entry = me.storage.contents[domain][escaped];
if (!!context) {
for (var i = 0, j = entry.length; i < j; i++) {
if (entry[i].context && entry[i].context === context) {
entry = entry[i];
break;
}
}
}
if (entry.unshift) {
entry = entry[0];
}
if (!!count) {
entry.setCount(count);
}
var translation = entry,
is_bare_string = (entry.constructor === String());
if (me.returnStrings) {
translation = entry.toString();
}
if (!!variables) {
var bare_string = is_bare_string ? translation : translation.translation,
translated = vsprintf(bare_string, variables);
if (!is_bare_string) {
translation.translation = translated;
}
else {
translation = translated;
}
}
if (is_bare_string && me.unescapeStrings) {
translation = unescapeString(translation);
}
else if (me.unescapeStrings && !is_bare_string) {
translation.translation = unescapeString(translation.translation);
}
return translation;
}
else {
if(error_callback === noop){
return escaped;
}
else{
error_callback(error_callback, msg_id, domain, me.storage.contents);
}
}
};
};
instance = new Pomo();
if (typeof (module) !== 'undefined') {
module.exports = instance;
}
else {
window['Pomo'] = instance;
}
})(this);

File diff suppressed because one or more lines are too long

View File

@ -11,6 +11,7 @@ include("language.php");
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>Halcyon</title>
<link rel="shortcut icon" href="/assets/images/favicon.ico">
<link rel="gettext" type="text/x-gettext-translation" href="/locale/<?=$locale?>/LC_MESSAGES/messages.po">
<link rel="stylesheet" href="/assets/css/style.css" media="all">
<link rel="stylesheet" href="/assets/css/fontawesome.min.css" media="all">
<link rel="stylesheet" href="/assets/css/emojipicker.css" media="all">
@ -25,10 +26,14 @@ include("language.php");
<script src="/assets/js/emojipicker/emojipicker.js"></script>
<script src="/assets/js/halcyon/halcyonTemplates.js"></script>
<script src="/assets/js/halcyon/halcyonUI.js"></script>
<script src="/assets/js/pomo/pomo.min.js"></script>
<script src="/assets/js/pomo/pomo.js"></script>
<script src="/assets/js/twemoji/twemoji.min.js"></script>
<script src="/assets/js/clipboard.js/clipboard.min.js"></script>
<script>
if(!localStorage.getItem("current_id") | !localStorage.getItem("current_instance") | !localStorage.getItem("current_authtoken")) {
location.href = "/login";
}
else {
Pomo.domain = 'messages';
Pomo.returnStrings = true;
Pomo.unescapeStrings = true;
@ -37,10 +42,15 @@ format:'po',
mode:'link',
translation_domain:'messages'
});
if(!localStorage.getItem("current_id") | !localStorage.getItem("current_instance") | !localStorage.getItem("current_authtoken")) {
location.href = "/login";
var __ = (function(){
var _ = !!window.Pomo? window.Pomo : (!!window.__Pomo? window.__Pomo: false);
var gettext_wrap = function(word, options){return _.getText(word, options)};
gettext_wrap = !!_? gettext_wrap: false;
if(!gettext_wrap){
throw new "Pomo can't be found";
}
else {
return gettext_wrap;
})();
if($.cookie("session") === "true") {
refreshApp();
}
@ -85,13 +95,6 @@ resetApp();
</li>
</ul>
</nav>
<div class="header_center_box">
<h1 class="header_nav_item mastodon_logo logo_box">
<a href="/">
<img src="/assets/images/mastodon.svg" alt="Halcyon for Mastodon">
</a>
</h1>
</div>
<nav class="header_right_box">
<ul class="header_nav_list">
<li class="header_nav_item serch_form_wrap">

View File

@ -1,27 +1,30 @@
<?php
$config = parse_ini_file(__DIR__.'/config/config.ini',true);
$locale = '';
if(isset($_COOKIE['lang'])) $locale = $_COOKIE['lang'];
else $locale = Locale::acceptFromHttp($_SERVER['HTTP_ACCEPT_LANGUAGE']);
if(!file_exists(__DIR__.'/locale/'.$locale)) {
$locale = $config['App']['default_language'];
if(isset($_COOKIE['language'])) $locale = $_COOKIE['language'];
else {
$langcode = Locale::acceptFromHttp($_SERVER['HTTP_ACCEPT_LANGUAGE']);
if(file_exists(__DIR__.'/locale/'.$langcode)) $locale = langcode;
else if(file_exists(__DIR__.'/locale/'.explode("_",$langcode)[0])) $locale = explode("_",$langcode)[0];
else $locale = $config['App']['default_language'];
}
if(function_exists("putenv")) {
putenv('LC_ALL='.$locale);
}
if(!setlocale(LC_ALL,$locale)) setlocale(LC_ALL,'0');
if(!setlocale(LC_ALL,$locale)) {
if(!setlocale(LC_ALL,$locale.".UTF-8")) setlocale(LC_ALL,0);
}
bindtextdomain('messages',__DIR__.'/locale');
bind_textdomain_codeset('messages','UTF-8');
textdomain('messages');
if(!function_exists('gettext')) {
function gettext($context,$msgid) {
if(!function_exists('pgettext')) {
function pgettext($context,$msgid) {
$contextString = "{$context}\004{$msgid}";
$translation = _($contextString);
if($translation == $contextString) return $msgid;
else return $translation;
}
}
$lang = explode('_',$locale);
if(count($lang)==2) $lang = $lang[0];
else $lang = 'en';
if(strstr($locale,"_")) $lang = explode('_',$locale)[0];
else $lang = $locale;
?>

BIN
locale/de_DE/messages.mo Normal file

Binary file not shown.

540
locale/de_DE/messages.po Normal file
View File

@ -0,0 +1,540 @@
# Niklas Poslovski <ni.pos@yandex.com>, 2018. #zanata
msgid ""
msgstr ""
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
"Project-Id-Version: \n"
"POT-Creation-Date: \n"
"MIME-Version: 1.0\n"
"PO-Revision-Date: 2018-08-03 01:06+0000\n"
"Last-Translator: YouDont Havetoknow <raizpapa@gmail.com>\n"
"Language-Team: German\n"
"Language: de\n"
"X-Generator: Zanata 4.5.0\n"
"Plural-Forms: nplurals=2; plural=(n != 1)\n"
msgid "Language"
msgstr "Sprache"
msgid "Language_en_US"
msgstr "Englisch"
msgid "Language_de_DE"
msgstr "Deutsch"
msgid "Language_ja_JP"
msgstr "Japanisch"
msgid "Language_ko_KR"
msgstr "Koreanisch"
msgid "Language_pt_BR"
msgstr "Portugiesisch"
msgid "Sensitive content"
msgstr "Sensitiver Inhalt"
msgid "Click to view"
msgstr "Klicken zum Anzeigen"
msgid "SHOW MORE"
msgstr "ZEIGE MEHR"
msgid "SHOW LESS"
msgstr "ZEIGE WENIGER"
msgid "Public"
msgstr "Öffentlich"
msgid "Unlisted"
msgstr "Ungelistet"
msgid "Followers-only"
msgstr "Nur für Follower"
msgid "Direct"
msgstr "Direkt"
msgid "Delete Toot"
msgstr "Toot löschen"
msgid "Unpin Toot"
msgstr "Toot unpinnen"
msgid "Pin Toot"
msgstr "Toot anpinnen"
msgid "Mute"
msgstr "Stummschalten"
msgid "Block"
msgstr "Blocken"
msgid "Report this Toot"
msgstr "Toot melden"
msgid "Copy link to Toot"
msgstr "Link zum Toot kopieren"
msgid "View original"
msgstr "Original anzeigen"
msgid "Boosted"
msgstr "Geteilt"
msgid "Pinned Toot"
msgstr "Angepinnter Toot"
msgid "favourited Your Toot"
msgstr "hat deinen Toot favorisiert"
msgid "boosted Your Toot"
msgstr "hat deinen Toot geteilt"
msgid "followed you"
msgstr "folgt dir jetzt"
msgid "Follow"
msgstr "Folgen"
msgid "Toot your reply"
msgstr "Toote deine Antwort"
msgid "Reply"
msgstr "Antwort"
msgid "Content warning"
msgstr "Inhalts-Warnung"
msgid "Jan"
msgstr "Jan."
msgid "Feb"
msgstr "Feb."
msgid "Mar"
msgstr "Mär."
msgid "Apr"
msgstr "Apr."
msgid "May"
msgstr "Mai"
msgid "Jun"
msgstr "Jun."
msgid "Jul"
msgstr "Jul."
msgid "Aug"
msgstr "Aug."
msgid "Sep"
msgstr "Sep."
msgid "Oct"
msgstr "Okt."
msgid "Nov"
msgstr "Nov."
msgid "Dec"
msgstr "Dez."
msgid "Changed setting to"
msgstr "Einstellung geändert zu"
msgid "Mark as NSFW by default enabled"
msgstr "Standardmäßig als NSFW markieren an"
msgid "Mark as NSFW by default disabled"
msgstr "Standardmäßig als NSFW markieren aus"
msgid "Who to follow enabled"
msgstr "Wem könnte ich folgen aktivieren"
msgid "Who to follow disabled"
msgstr "Wem könnte ich folgen deaktivieren"
msgid "Changed about me setting"
msgstr "Über mich-Einstellung geändert"
msgid "Uploaded new avatar"
msgstr "Neuen Avatar hochgeladen"
msgid "Uploaded new header"
msgstr "Neuen Header hochgeladen"
msgid "Account locked"
msgstr "Account gesperrt"
msgid "Account unlocked"
msgstr "Account entsperrt"
msgid "Link previews enabled"
msgstr "Link-Vorschauen aktiviert"
msgid "Link previews disabled"
msgstr "Link-Vorschauen deaktiviert"
msgid "You didn't allow notifications"
msgstr "Du hast Benachrichtigungen nicht erlaubt"
msgid "Desktop notifications enabled"
msgstr "Desktop-Benachrichtigungen aktiviert"
msgid "Desktop notifications disabled"
msgstr "Desktop-Benachrichtigungen deaktiviert"
msgid "Replies shown"
msgstr "Antworten werden angezeigt"
msgid "Replies hidden"
msgstr "Antworten versteckt"
msgid "CW content shown"
msgstr "CW Inhalte angezeigt"
msgid "CW content hidden"
msgstr "CW Inhalte verborgen"
msgid "NSFW content shown"
msgstr "NSFW-Inhalte werden angezeigt"
msgid "NSFW content hidden"
msgstr "NSFW-Inhalte versteckt"
msgid "Reply to"
msgstr "Antwort an"
msgid "Report"
msgstr "Melden"
msgid "Report a Toot of"
msgstr "Melde einen Toot von"
msgid "What's happening?"
msgstr "Was ist los?"
msgid "Toot"
msgstr "Toot"
msgid "Compose new Toot"
msgstr "Neuen Toot schreiben"
msgid "Please describe what the problem with the Toot is."
msgstr "Bitte beschreibe, was das Problem an dem Toot ist."
msgid "TOOTS"
msgstr "TOOTS"
msgid "PEOPLE"
msgstr "LEUTE"
msgid "Settings"
msgstr "Einstellungen"
msgid "GENERAL"
msgstr "ALLGEMEIN"
msgid "PROFILE"
msgstr "PROFIL"
msgid "APPEARANCE"
msgstr "AUSSEHEN"
msgid "Change instance"
msgstr "Instanz wechseln"
msgid "Blank for default"
msgstr "Leer lassen für Standardeinstellung"
msgid "FOLLOWING"
msgstr "FOLGT"
msgid "Interesting accounts of devs"
msgstr "Interessante Accounts von Entwickler_innen"
msgid "Halcyon for"
msgstr "Halcyon für"
msgid "About"
msgstr "Über"
msgid "Terms"
msgstr "Benutzungsbedingungen"
msgid "Apps"
msgstr "Apps"
msgid "Source code"
msgstr "Quellcode"
msgid "Other instances"
msgstr "Andere Instanzen"
msgid "Privacy policy"
msgstr "Datenschutzerklärung"
msgid "Version"
msgstr "Version"
msgid "Who to follow"
msgstr "Wem könnte ich folgen"
msgid "Enable who to follow"
msgstr "Wem könnte ich folgen aktivieren"
msgid ""
"Halcyon needs to connect to an external server to get a list of users which "
"have similar interests as you. If you want to use this feature, please opt-"
"in."
msgstr ""
"Halcyon muss sich mit einem anderen Server verbinden, um eine Liste von "
"User_innen mit ähnlichen Interessen zu erhalten. Wenn du diese Funktion "
"verwenden willst, aktiviere sie bitte."
msgid "MORE"
msgstr "MEHR"
msgid "FOLLOWERS"
msgstr "FOLGENDE"
msgid "Following"
msgstr "Folgt"
msgid "You'll no longer receive notifications from this user"
msgstr "Du wirst von diesem Account keine Benachrichtigungen mehr erhalten."
msgid "Unmuted this user"
msgstr "Account nicht mehr stummgeschalten"
msgid "This user has been blocked"
msgstr "Dieser Account wurde geblockt"
msgid "Unblocked this user"
msgstr "Account nicht mehr geblockt"
msgid "Your Toot has been deleted"
msgstr "Dein Toot wurde gelöscht"
msgid "Your Toot has been pinned"
msgstr "Dein Toot wurde angepinnt"
msgid "Your Toot has been unpinned"
msgstr "Dein Toot wurde ungepinnt."
msgid "Edit profile"
msgstr "Profil bearbeiten"
msgid "FAVOURITES"
msgstr "FAVORITEN"
msgid "Show"
msgstr "Anzeigen"
msgid "Blocking"
msgstr "Blockiert"
msgid "Muting"
msgstr "Stummgeschaltet"
msgid "Requested"
msgstr "Angefragt"
msgid "Photos and toots"
msgstr "Fotos und Toots"
msgid "favourited your toot"
msgstr "hat deinen Toot favorisiert"
msgid "boosted your toot"
msgstr "hat deinen Toot geteilt"
msgid "mentioned you"
msgstr "hat dich erwähnt"
msgid "Your Toot was posted!"
msgstr "Dein Toot wurde gepostet!"
msgid "News"
msgstr "Neuigkeiten"
msgid "Source"
msgstr "Quellcode"
msgid "Privacy"
msgstr "Privatsphäre"
msgid "Imprint"
msgstr "Impressum"
msgid "Contact"
msgstr "Kontakt"
msgid "Login"
msgstr "Anmelden"
msgid "Login to Halcyon"
msgstr "Bei Halcyon anmelden"
msgid "create an account"
msgstr "Account erstellen"
msgid "or"
msgstr "oder"
msgid "I agree with the"
msgstr "Ich bin einverstanden mit den"
msgid "What is Halcyon"
msgstr "Was ist Halcyon"
msgid ""
"which aims to recreate the simple and beautiful user interface of Twitter "
"while keeping all advantages of decentral networks in focus."
msgstr ""
"dessen Ziel es ist, die einfache und schöne Oberfläche von Twitter "
"nachzubauen, während es all die Vorteile dezentraler Netzwerke im Blick "
"behält."
msgid "Halcyon is a webclient for"
msgstr "Halcyon ist eine Webanwendung für"
msgid "Contact / Feedback"
msgstr "Kontakt / Feedback"
msgid "Use my contact form"
msgstr "Verwende mein Kontaktformular"
msgid "Help us"
msgstr "Hilf uns"
msgid "Halcyon Terms of Use"
msgstr "Nutzungsbedingungen für Halcyon"
msgid ""
"This terms of use agreement is for the users of web service Halcyon for "
"Mastodon and Pleroma (Halcyon for short) hosted at"
msgstr ""
"Diese Nutzungsbedingungen sind für die Benutzer des Webdienstes Halcyon für "
"Mastodon und Pleroma (Kurz Halcyon) gehostet bei"
msgid "Your Reply was posted!"
msgstr "Deine Antwort wurde gesendet!"
msgid "Toot reported successfully!"
msgstr "Toot erfolgreich gemeldet!"
msgid "Link successfully copied!"
msgstr "Link kopiert!"
msgid "Home"
msgstr "Startseite"
msgid "Local"
msgstr "Lokal"
msgid "Federated"
msgstr "Föderiert"
msgid "Notifications"
msgstr "Benachrichtigungen"
msgid "Search Mastodon"
msgstr "Durchsuche Mastodon"
msgid "View profile"
msgstr "Profil ansehen"
msgid "Log out"
msgstr "Ausloggen"
msgid "All"
msgstr "Alle"
msgid "new notitification"
msgstr "neue Benachrichtigung"
msgid "Show all NSFW content"
msgstr "NSFW Inhalte automatisch anzeigen"
msgid "Show all CW content"
msgstr "CW Inhalte automatisch anzeigen"
msgid "Show replies"
msgstr "Antworten anzeigen"
msgid "Desktop notifications"
msgstr "Desktopbenachrichtigungen"
msgid "Enable link previews"
msgstr "Link Vorschau aktivieren"
msgid "Auto update"
msgstr "Automatisch laden"
msgid "Manual update"
msgstr "Manuell laden"
msgid "Appearance settings"
msgstr "Anzeige-Einstellungen"
msgid "New posts streaming"
msgstr "Neue Posts"
msgid "replies"
msgstr "Antworten"
msgid "General settings"
msgstr "Allgemeine Einstellungen"
msgid "Default post privacy"
msgstr "Standard Beitragssichtbarkeit"
msgid "Mark as NSFW by default"
msgstr "Standardmäßig als NSFW markieren"
msgid "Media"
msgstr "Medien"
msgid "FOLLOWS YOU"
msgstr "FOLGT DIR"
msgid "Local instance"
msgstr "Lokale Instanz"
msgid "Hashtag search filter"
msgstr "Hashtag Suchfilter"
msgid "All instances"
msgstr "Alle Instanzen"
msgid "Local only"
msgstr "Nur lokal"
msgid "Lock account"
msgstr "Account sperren"
msgid "Header"
msgstr "Header"
msgid "Avatar"
msgstr "Avatar"
msgid "About me"
msgstr "Über mich"
msgid "Display name"
msgstr "Anzeigename"
msgid "Profile settings"
msgstr "Profileinstellungen"
msgid "Toots"