Compare commits

..

No commits in common. "master" and "2.4.8" have entirely different histories.

214 changed files with 27 additions and 1052 deletions

2
.gitignore vendored Executable file → Normal file
View File

@ -1,4 +1,4 @@
config.ini config.ini
.ftpconfig .ftpconfig
data/ data/
.htpasswd

0
.htaccess Executable file → Normal file
View File

0
404.php Executable file → Normal file
View File

0
Caddyfile Executable file → Normal file
View File

0
LICENSE Executable file → Normal file
View File

1
README.md Executable file → Normal file
View File

@ -28,7 +28,6 @@ We moved our instances list to our webpage: https://www.halcyon.social/instances
or read our new documentation pages to install it manually: https://www.halcyon.social/documentation.php?page=install or read our new documentation pages to install it manually: https://www.halcyon.social/documentation.php?page=install
## Blog ## Blog
- Release of Version 2.4.9 - View state of ongoing polls,Fix some links,fix search for urls,add Chinese translation,update media API
- Release of Version 2.4.8 - Add support for bookmarks,add support for announcements,add support for emoji reactions - Release of Version 2.4.8 - Add support for bookmarks,add support for announcements,add support for emoji reactions
- Release of Version 2.4.7 - Repair emoji autocomplete,repair YouPlay,improve Invidious embed,change Vinayaka instance,add Bibliogram and NoFB redirects - Release of Version 2.4.7 - Repair emoji autocomplete,repair YouPlay,improve Invidious embed,change Vinayaka instance,add Bibliogram and NoFB redirects
- Release of Version 2.4.6 - Replace some removed Mastodon APIs,fix Toot button not locking on CTRL+Enter,make navbar a bit more responsive - Release of Version 2.4.6 - Replace some removed Mastodon APIs,fix Toot button not locking on CTRL+Enter,make navbar a bit more responsive

0
assets/css/404.css Executable file → Normal file
View File

0
assets/css/cookieconsent.min.css vendored Executable file → Normal file
View File

0
assets/css/dark.css Executable file → Normal file
View File

0
assets/css/emojipicker.css Executable file → Normal file
View File

0
assets/css/fontawesome.min.css vendored Executable file → Normal file
View File

0
assets/css/sharebox.css Executable file → Normal file
View File

0
assets/css/sharebox_dark.css Executable file → Normal file
View File

0
assets/css/style.css Executable file → Normal file
View File

0
assets/fonts/MIT-LICENSE.txt Executable file → Normal file
View File

0
assets/fonts/SIL-OFL-LICENSE.txt Executable file → Normal file
View File

0
assets/fonts/fontawesome.eot Executable file → Normal file
View File

0
assets/fonts/fontawesome.svg Executable file → Normal file
View File

Before

Width:  |  Height:  |  Size: 434 KiB

After

Width:  |  Height:  |  Size: 434 KiB

0
assets/fonts/fontawesome.ttf Executable file → Normal file
View File

0
assets/fonts/fontawesome.woff Executable file → Normal file
View File

0
assets/fonts/fontawesome.woff2 Executable file → Normal file
View File

0
assets/images/favicon.ico Executable file → Normal file
View File

Before

Width:  |  Height:  |  Size: 361 KiB

After

Width:  |  Height:  |  Size: 361 KiB

0
assets/images/halcyon.png Executable file → Normal file
View File

Before

Width:  |  Height:  |  Size: 9.7 KiB

After

Width:  |  Height:  |  Size: 9.7 KiB

0
assets/images/halcyon_logo.png Executable file → Normal file
View File

Before

Width:  |  Height:  |  Size: 24 KiB

After

Width:  |  Height:  |  Size: 24 KiB

0
assets/images/halcyon_w.png Executable file → Normal file
View File

Before

Width:  |  Height:  |  Size: 11 KiB

After

Width:  |  Height:  |  Size: 11 KiB

0
assets/images/mastodon.png Executable file → Normal file
View File

Before

Width:  |  Height:  |  Size: 4.8 KiB

After

Width:  |  Height:  |  Size: 4.8 KiB

0
assets/images/mastodon.svg Executable file → Normal file
View File

Before

Width:  |  Height:  |  Size: 1.4 KiB

After

Width:  |  Height:  |  Size: 1.4 KiB

0
assets/images/missing.png Executable file → Normal file
View File

Before

Width:  |  Height:  |  Size: 70 B

After

Width:  |  Height:  |  Size: 70 B

0
assets/images/missing_header.png Executable file → Normal file
View File

Before

Width:  |  Height:  |  Size: 70 B

After

Width:  |  Height:  |  Size: 70 B

0
assets/images/robot.svg Executable file → Normal file
View File

Before

Width:  |  Height:  |  Size: 1.6 KiB

After

Width:  |  Height:  |  Size: 1.6 KiB

0
assets/images/self_auth.png Executable file → Normal file
View File

Before

Width:  |  Height:  |  Size: 13 KiB

After

Width:  |  Height:  |  Size: 13 KiB

0
assets/images/self_auth_min.png Executable file → Normal file
View File

Before

Width:  |  Height:  |  Size: 2.0 KiB

After

Width:  |  Height:  |  Size: 2.0 KiB

0
assets/js/autocomplete/license-textarea.txt Executable file → Normal file
View File

0
assets/js/autocomplete/search.js Executable file → Normal file
View File

0
assets/js/autocomplete/textarea.js Executable file → Normal file
View File

0
assets/js/autosize/LICENSE Executable file → Normal file
View File

0
assets/js/autosize/autosize.js Executable file → Normal file
View File

0
assets/js/blurhash.js Executable file → Normal file
View File

0
assets/js/clipboard.js/LICENSE Executable file → Normal file
View File

0
assets/js/clipboard.js/clipboard.min.js vendored Executable file → Normal file
View File

0
assets/js/cookieconsent/cookieconsent.min.js vendored Executable file → Normal file
View File

0
assets/js/cookieconsent/licence Executable file → Normal file
View File

0
assets/js/emojipicker/LICENSE Executable file → Normal file
View File

0
assets/js/emojipicker/emojidata.js Executable file → Normal file
View File

0
assets/js/emojipicker/emojipicker.js Executable file → Normal file
View File

10
assets/js/halcyon/halcyonFunctions.js Executable file → Normal file
View File

@ -234,10 +234,10 @@ api.get("instance",function(data) {
if(!data.max_toot_chars) data.max_toot_chars = 500; if(!data.max_toot_chars) data.max_toot_chars = 500;
if(!data.poll_limits) { if(!data.poll_limits) {
data.poll_limits = new Object(); data.poll_limits = new Object();
data.poll_limits.max_options = 4; data.poll_limits.max_options = 4;
data.poll_limits.max_option_chars = 25; data.poll_limits.max_option_chars = 25;
data.poll_limits.min_expiration = 300; data.poll_limits.min_expiration = 300;
data.poll_limits.max_expiration = 2629746; data.poll_limits.max_expiration = 2629746;
} }
localStorage.setItem("current_instance_charlimit",data.max_toot_chars); localStorage.setItem("current_instance_charlimit",data.max_toot_chars);
current_instance_charlimit = data.max_toot_chars; current_instance_charlimit = data.max_toot_chars;
@ -460,7 +460,7 @@ ctx.fillText("😗",-2,4);
return ctx.getImageData(0,0,1,1).data[3] > 0; return ctx.getImageData(0,0,1,1).data[3] > 0;
} }
function openStatus(link) { function openStatus(link) {
api.search("q="+encodeURIComponent(link)+"&resolve=true",function(response) { api.search("q="+encodeURIComponent(link),function(response) {
if(response.statuses.length > 0) { if(response.statuses.length > 0) {
var data = response.statuses[0]; var data = response.statuses[0];
if(data.account.acct.indexOf("@") == -1) { if(data.account.acct.indexOf("@") == -1) {

0
assets/js/halcyon/halcyonLists.js Executable file → Normal file
View File

0
assets/js/halcyon/halcyonSettings.js Executable file → Normal file
View File

0
assets/js/halcyon/halcyonSharebox.js Executable file → Normal file
View File

21
assets/js/halcyon/halcyonTemplates.js Executable file → Normal file
View File

@ -131,9 +131,8 @@ else if(expires_at.getUTCMinutes() == 1) expires_string = "1 "+__("minute");
else if(expires_at.getUTCMinutes() > 1) expires_string = expires_at.getUTCMinutes()+" "+__("minutes"); else if(expires_at.getUTCMinutes() > 1) expires_string = expires_at.getUTCMinutes()+" "+__("minutes");
else if(expires_at.getUTCSeconds() == 1) expires_string = "1 "+__("second"); else if(expires_at.getUTCSeconds() == 1) expires_string = "1 "+__("second");
else expires_string = expires_at.getUTCSeconds()+" "+__("seconds"); else expires_string = expires_at.getUTCSeconds()+" "+__("seconds");
const poll_random = Math.round(Math.random()*1000); if(poll.voted || poll.expired) {
if(poll.voted || poll.expired || poll.seeresult) { poll_html = (`<div class="poll_box">`);
poll_html = (`<div class="poll_box poll_${poll.id}" data-poll="${poll.id}" data-random="${poll_random}" id="poll_${poll.id}_${poll_random}">`);
optionsort = [...poll.options]; optionsort = [...poll.options];
optionsort.sort(function(a,b) {return a.votes_count - b.votes_count}); optionsort.sort(function(a,b) {return a.votes_count - b.votes_count});
optionsort.reverse(); optionsort.reverse();
@ -144,11 +143,11 @@ if(poll.options[i].winner) winner = " poll_winner";
poll_html += (`<div class="poll_result_option"><span class="poll_bar${winner}" style="width:${poll.options[i].votes_count/poll.votes_count*100}%"></div> poll_html += (`<div class="poll_result_option"><span class="poll_bar${winner}" style="width:${poll.options[i].votes_count/poll.votes_count*100}%"></div>
<label class="poll_result_label"><strong>${Math.round(poll.options[i].votes_count/poll.votes_count*100) || 0}%</strong> <span class="emoji_poss">${poll.options[i].title}</span></label>`); <label class="poll_result_label"><strong>${Math.round(poll.options[i].votes_count/poll.votes_count*100) || 0}%</strong> <span class="emoji_poss">${poll.options[i].title}</span></label>`);
} }
if(poll.expired) poll_html += (`<br/><span class="poll_footer">${poll.votes_count} ${__("votes")} &bull; ${__("Final results")} &bull; <a href="javascript:void(0)" class="poll_refresh">${__("Refresh")}</a></span></span>`); if(poll.expired) poll_html += (`<br/><span class="poll_footer">${poll.votes_count} ${__("votes")} &bull; ${__("Final results")}</span>`);
else if(poll.seeresult) poll_html += (`<br/><span class="poll_footer">${poll.votes_count} ${__("votes")} &bull; ${expires_string} ${__("left")} &bull; <a href="javascript:void(0)" class="poll_refresh">${__("Back")}</a></span>`); else poll_html += (`<br/><span class="poll_footer">${poll.votes_count} ${__("votes")} &bull; ${expires_string} ${__("left")}</span>`);
else poll_html += (`<br/><span class="poll_footer">${poll.votes_count} ${__("votes")} &bull; ${expires_string} ${__("left")} &bull; <a href="javascript:void(0)" class="poll_refresh">${__("Refresh")}</a></span>`);
} }
else { else {
const poll_random = Math.round(Math.random()*1000);
poll_html = (`<div class="poll_box poll_box_form poll_${poll.id}" data-poll="${poll.id}" data-random="${poll_random}" id="poll_${poll.id}_${poll_random}">`); poll_html = (`<div class="poll_box poll_box_form poll_${poll.id}" data-poll="${poll.id}" data-random="${poll_random}" id="poll_${poll.id}_${poll_random}">`);
for(var i=0;i<poll.options.length;i++) { for(var i=0;i<poll.options.length;i++) {
if(poll.multiple) { if(poll.multiple) {
@ -161,7 +160,7 @@ poll_html += (`<div class="radiobox"><input type="radio" id="poll_${poll.id}_${p
} }
} }
poll_html += (`<button class="halcyon_button poll_vote"><span>${__("Vote")}</span></button> poll_html += (`<button class="halcyon_button poll_vote"><span>${__("Vote")}</span></button>
${poll.votes_count} ${__("votes")} &bull; ${expires_string} ${__("left")} &bull; <a href="javascript:void(0)" class="poll_show_result">${__("Show results")}</a>`); ${poll.votes_count} ${__("votes")} &bull; ${expires_string} ${__("left")}`);
} }
poll_html += (`</div>`); poll_html += (`</div>`);
return poll_html; return poll_html;
@ -290,7 +289,7 @@ const html = (`
<section class="toot_content"> <section class="toot_content">
<header class="toot_header"> <header class="toot_header">
<div class="text_ellipsis"> <div class="text_ellipsis">
<a href="${NotificationObj.status.halcyon.account_link}"> <a href="${NotificationObj.status.halcyon.author_link}">
<span class="displayname emoji_poss"> <span class="displayname emoji_poss">
${NotificationObj.status.account.display_name} ${NotificationObj.status.account.display_name}
</span> </span>
@ -328,7 +327,7 @@ html = (`
<section class="toot_content"> <section class="toot_content">
<header class="toot_header"> <header class="toot_header">
<div class="text_ellipsis"> <div class="text_ellipsis">
<a href="${NotificationObj.status.halcyon.account_link}"> <a href="${NotificationObj.status.halcyon.author_link}">
<span class="displayname emoji_poss"> <span class="displayname emoji_poss">
${NotificationObj.status.account.display_name} ${NotificationObj.status.account.display_name}
</span> </span>
@ -367,7 +366,7 @@ const html = (`
<section class="toot_content"> <section class="toot_content">
<header class="toot_header"> <header class="toot_header">
<div class="text_ellipsis"> <div class="text_ellipsis">
<a href="${NotificationObj.status.halcyon.account_link}"> <a href="${NotificationObj.status.halcyon.author_link}">
<span class="displayname emoji_poss"> <span class="displayname emoji_poss">
${NotificationObj.status.account.display_name} ${NotificationObj.status.account.display_name}
</span> </span>
@ -475,7 +474,7 @@ html.find(".toot_article").append(NotificationObj.status.halcyon.poll_object);
return html; return html;
} else if(NotificationObj.type === 'follow') { } else if(NotificationObj.type === 'follow') {
const html=(` const html=(`
<li class="notice_entry fol toot_entry"> <li sid="${NotificationObj.id}" class="notice_entry fol toot_entry">
<div class="notice_author_box"> <div class="notice_author_box">
<a href="${notice_author_link}"> <a href="${notice_author_link}">
<div class="icon_box"> <div class="icon_box">

25
assets/js/halcyon/halcyonUI.js Executable file → Normal file
View File

@ -1316,7 +1316,7 @@ $(document).on('click','.player',function(e) {
e.stopPropagation(); e.stopPropagation();
}); });
$(document).on('click','.toot_entry', function(e) { $(document).on('click','.toot_entry', function(e) {
if($(this).attr('sid')) setOverlayStatus($(this).attr('sid')); setOverlayStatus($(this).attr('sid'));
}); });
}) })
function setOverlayMedia(sid,mediacount) { function setOverlayMedia(sid,mediacount) {
@ -2298,29 +2298,6 @@ $(".poll_"+poll_id).remove();
} }
return false; return false;
}); });
$(document).on('click','.poll_show_result',function(e) {
var poll_id = $(this).parent().data('poll');
var poll_random = $(this).parent().data('random');
if(poll_id !== null && poll_random !== null) {
api.get('polls/'+poll_id,function(data) {
data.seeresult = true;
$("#poll_"+poll_id+"_"+poll_random).after(poll_template(data));
$("#poll_"+poll_id+"_"+poll_random).remove();
});
}
return false;
});
$(document).on('click','.poll_refresh',function(e) {
var poll_id = $(this).parent().parent().data('poll');
var poll_random = $(this).parent().parent().data('random');
if(poll_id !== null && poll_random !== null) {
api.get('polls/'+poll_id,function(data) {
$("#poll_"+poll_id+"_"+poll_random).after(poll_template(data));
$("#poll_"+poll_id+"_"+poll_random).remove();
});
}
return false;
});
$(document).on('click','.link_preview',function(e) { $(document).on('click','.link_preview',function(e) {
e.stopPropagation(); e.stopPropagation();
const ytcom = $(this).data("url").match(/https?:\/\/(www\.)?youtube\.com\/watch\?v=([a-zA-Z\d_-]+)/); const ytcom = $(this).data("url").match(/https?:\/\/(www\.)?youtube\.com\/watch\?v=([a-zA-Z\d_-]+)/);

0
assets/js/halcyon/halcyonWorker.js Executable file → Normal file
View File

0
assets/js/jquery-cookie/MIT-LICENSE.txt Executable file → Normal file
View File

0
assets/js/jquery-cookie/src/jquery.cookie.js Executable file → Normal file
View File

0
assets/js/jquery/LICENSE.txt Executable file → Normal file
View File

0
assets/js/jquery/jquery.min.js vendored Executable file → Normal file
View File

0
assets/js/mastodon.js/LICENSE Executable file → Normal file
View File

4
assets/js/mastodon.js/mastodon.js Executable file → Normal file
View File

@ -218,14 +218,14 @@ postData = arguments[1];
callback = arguments[2]; callback = arguments[2];
} }
$.ajax({ $.ajax({
url: config.instance + "/api/v2/" + endpoint, url: apiBase + endpoint,
type: "POST", type: "POST",
data: postData, data: postData,
contentType: false, contentType: false,
processData: false, processData: false,
headers: {"Authorization": "Bearer " + config.api_user_token}, headers: {"Authorization": "Bearer " + config.api_user_token},
success: function(data, textStatus) { success: function(data, textStatus) {
console.log("Successful POST API request to " +config.instance + "/api/v2/"+endpoint); console.log("Successful POST API request to " +apiBase+endpoint);
callback(data,textStatus) callback(data,textStatus)
}, },
error: function(xhr, textStatus, errorThrown) { error: function(xhr, textStatus, errorThrown) {

0
assets/js/player/LICENSE-audio.txt Executable file → Normal file
View File

0
assets/js/player/LICENSE-soundmanager.txt Executable file → Normal file
View File

0
assets/js/player/LICENSE-youplay.txt Executable file → Normal file
View File

0
assets/js/player/audio.js Executable file → Normal file
View File

0
assets/js/player/soundmanager.js Executable file → Normal file
View File

0
assets/js/player/youplay.js Executable file → Normal file
View File

0
assets/js/pomo/LICENSE.txt Executable file → Normal file
View File

0
assets/js/pomo/pomo.js Executable file → Normal file
View File

0
assets/js/replace_emoji.js Executable file → Normal file
View File

0
assets/js/shortcut.js Executable file → Normal file
View File

0
assets/js/twemoji/LICENSE Executable file → Normal file
View File

0
assets/js/twemoji/twemoji.min.js vendored Executable file → Normal file
View File

0
authorize/.htaccess Executable file → Normal file
View File

0
authorize/mastodon-api/LICENSE Executable file → Normal file
View File

0
authorize/mastodon-api/mastodon.php Executable file → Normal file
View File

0
authorize/mastodon.php Executable file → Normal file
View File

0
bookmarks.php Executable file → Normal file
View File

12
config/config.ini.sample Executable file → Normal file
View File

@ -19,15 +19,15 @@ url_unshortener = true
youplay = true youplay = true
vimeo = true vimeo = true
youplay_fallback = true youplay_fallback = true
invidious = invidious.snopyta.org invidious = invidiou.sh
nitter = nitter.13ad.de nitter = nitter.13ad.de
bibliogram = bibliogram.ggc-project.de bibliogram = bibliogram.dsrev.ru
; The proxy can be used optionally to resolve data for privacy-friendly media embeds on the server side - It is not used for Mastodon API requests on login ; The proxy can be used optionally to resolve data for privacy-friendly media embeds on the server side - It is not used for Mastodon API requests on login
; Proxy type can be set to none, socks5, socks4, http or https ; Proxy type can be set to none, socks5, socks4, http or https - Example settings for locally installed Tor client
[Proxy] [Proxy]
type = none type = socks5
domain = domain = 127.0.0.1
port = port = 9050
username = username =
password = password =

0
config/footerlinks.txt.sample Executable file → Normal file
View File

0
config/imprint.txt.sample Executable file → Normal file
View File

0
config/privacy.txt Executable file → Normal file
View File

0
config/terms.txt Executable file → Normal file
View File

0
data/.htaccess Executable file → Normal file
View File

0
direct.php Executable file → Normal file
View File

0
docker/.dockerignore Executable file → Normal file
View File

0
docker/.gitignore vendored Executable file → Normal file
View File

0
docker/Dockerfile Executable file → Normal file
View File

0
docker/README.md Executable file → Normal file
View File

0
docker/etc/supervisord.conf Executable file → Normal file
View File

0
docker/locale/default Executable file → Normal file
View File

0
docker/locale/locale.gen Executable file → Normal file
View File

0
docker/usr/local/etc/php-fpm.d/50-clear-env.conf Executable file → Normal file
View File

0
docker/usr/local/etc/php-fpm.d/50-no-access-log.conf Executable file → Normal file
View File

0
docker/usr/local/etc/php-fpm.d/50-socket.conf Executable file → Normal file
View File

0
docker/usr/local/etc/php/conf.d/00-best-practices.ini Executable file → Normal file
View File

0
docker/usr/local/etc/php/conf.d/00-performance.ini Executable file → Normal file
View File

0
docker/usr/local/etc/php/conf.d/00-security.ini Executable file → Normal file
View File

0
federated.php Executable file → Normal file
View File

0
footer.php Executable file → Normal file
View File

0
header.php Executable file → Normal file
View File

0
home.php Executable file → Normal file
View File

0
index.php Executable file → Normal file
View File

Some files were not shown because too many files have changed in this diff Show More