mirror of
https://github.com/alesimula/Murine-launcher.git
synced 2026-10-28 09:43:42 +00:00
WEBPAGE - first upload
This commit is contained in:
1 parent
c6ea685b05
commit
e01dd28029
14 files changed
+1702
No files matched your search
@@ -0,0 +1,6 @@
|
||||
_site/
|
||||
.jekyll-cache/
|
||||
.jekyll-metadata/
|
||||
.sass-cache/
|
||||
vendor/
|
||||
Gemfile.lock
|
||||
@@ -0,0 +1,8 @@
|
||||
source 'https://rubygems.org'
|
||||
|
||||
gem 'github-pages', group: :jekyll_plugins
|
||||
|
||||
group :jekyll_plugins do
|
||||
gem 'jekyll-seo-tag'
|
||||
gem 'jekyll-sitemap'
|
||||
end
|
||||
@@ -0,0 +1,27 @@
|
||||
title: Murine Launcher
|
||||
description: >-
|
||||
A modern, lightweight FOSS Launcher3 fork delivering an enhanced stock Android
|
||||
experience with essential customization and zero bloat.
|
||||
url: "https://alesimula.github.io"
|
||||
baseurl: ""
|
||||
|
||||
github_repo: "alesimula/Murine-launcher"
|
||||
icon_url: "https://raw.githubusercontent.com/alesimula/Murine-launcher/refs/heads/main/image/app_icon/icon_browser_fullsize.svg"
|
||||
screenshots_api: "https://api.github.com/repos/alesimula/Murine-launcher/contents/fastlane/metadata/android/en-US/images/phoneScreenshots"
|
||||
releases_api: "https://api.github.com/repos/alesimula/Murine-launcher/releases"
|
||||
|
||||
permalink: pretty
|
||||
|
||||
markdown: kramdown
|
||||
kramdown:
|
||||
input: GFM
|
||||
|
||||
plugins:
|
||||
- jekyll-seo-tag
|
||||
- jekyll-sitemap
|
||||
|
||||
exclude:
|
||||
- Gemfile
|
||||
- Gemfile.lock
|
||||
- node_modules
|
||||
- vendor
|
||||
@@ -0,0 +1,24 @@
|
||||
<footer class="site-footer">
|
||||
<div class="footer-inner">
|
||||
<div class="footer-brand">
|
||||
<img src="{{ site.icon_url }}" alt="Murine Launcher" class="footer-icon">
|
||||
<div>
|
||||
<div class="footer-name">Murine Launcher</div>
|
||||
<div class="footer-tagline">{{ site.description }}</div>
|
||||
</div>
|
||||
</div>
|
||||
<div class="footer-links">
|
||||
<a href="https://github.com/{{ site.github_repo }}" class="footer-link" target="_blank" rel="noopener">
|
||||
<svg width="20" height="20" viewBox="0 0 24 24" fill="currentColor"><path d="M12 0C5.37 0 0 5.37 0 12c0 5.31 3.435 9.795 8.205 11.385.6.105.825-.255.825-.57 0-.285-.015-1.23-.015-2.235-3.015.555-3.795-.735-4.035-1.41-.135-.345-.72-1.41-1.23-1.695-.42-.225-1.02-.78-.015-.795.945-.015 1.62.87 1.845 1.23 1.08 1.815 2.805 1.305 3.495.99.105-.78.42-1.305.765-1.605-2.67-.3-5.46-1.335-5.46-5.925 0-1.305.465-2.385 1.23-3.225-.12-.3-.54-1.53.12-3.18 0 0 1.005-.315 3.3 1.23.96-.27 1.98-.405 3-.405s2.04.135 3 .405c2.295-1.56 3.3-1.23 3.3-1.23.66 1.65.24 2.88.12 3.18.765.84 1.23 1.905 1.23 3.225 0 4.605-2.805 5.625-5.475 5.925.435.375.81 1.095.81 2.22 0 1.605-.015 2.895-.015 3.3 0 .315.225.69.825.57A12.02 12.02 0 0024 12c0-6.63-5.37-12-12-12z"/></svg>
|
||||
GitHub
|
||||
</a>
|
||||
<a href="https://www.paypal.com/donate/?hosted_button_id=3HRAWU9KVYKKS" class="footer-link" target="_blank" rel="noopener">
|
||||
<span class="material-symbols-outlined" style="font-size:20px">favorite</span>
|
||||
Donate
|
||||
</a>
|
||||
</div>
|
||||
<div class="footer-copy">
|
||||
© {{ 'now' | date: "%Y" }} Murine Launcher · Licensed under Apache 2.0
|
||||
</div>
|
||||
</div>
|
||||
</footer>
|
||||
@@ -0,0 +1,22 @@
|
||||
<nav class="top-nav" id="topNav">
|
||||
<div class="nav-inner">
|
||||
<a href="{{ '/' | relative_url }}" class="nav-brand">
|
||||
<img src="{{ site.icon_url }}" alt="Murine Launcher" class="nav-icon">
|
||||
<span class="nav-title">Murine Launcher</span>
|
||||
</a>
|
||||
|
||||
<div class="nav-actions">
|
||||
<a href="{{ '/' | relative_url }}" class="nav-link {% if page.url == '/' or page.url == '/index.html' %}active{% endif %}">
|
||||
<span class="material-symbols-outlined">home</span>
|
||||
<span class="nav-link-label">Home</span>
|
||||
</a>
|
||||
<a href="{{ '/download' | relative_url }}" class="nav-pill {% if page.url contains 'download' %}active{% endif %}">
|
||||
<span class="material-symbols-outlined">download</span>
|
||||
<span class="nav-link-label">Download</span>
|
||||
</a>
|
||||
<button class="nav-icon-btn" id="themeToggle" aria-label="Toggle theme">
|
||||
<span class="material-symbols-outlined" id="themeIcon">dark_mode</span>
|
||||
</button>
|
||||
</div>
|
||||
</div>
|
||||
</nav>
|
||||
@@ -0,0 +1,33 @@
|
||||
<!DOCTYPE html>
|
||||
<html lang="en" data-theme="light">
|
||||
<head>
|
||||
<meta charset="UTF-8">
|
||||
<meta name="viewport" content="width=device-width, initial-scale=1.0">
|
||||
<title>{% if page.title %}{{ page.title }} - {{ site.title }}{% else %}{{ site.title }}{% endif %}</title>
|
||||
<meta name="description" content="{{ page.description | default: site.description }}">
|
||||
|
||||
<!-- Google Fonts -->
|
||||
<link rel="preconnect" href="https://fonts.googleapis.com">
|
||||
<link rel="preconnect" href="https://fonts.gstatic.com" crossorigin>
|
||||
<link href="https://fonts.googleapis.com/css2?family=Inter:wght@400;500;600;700&family=Noto+Sans:wght@400;500;600;700&display=swap" rel="stylesheet">
|
||||
<!-- Material Symbols -->
|
||||
<link rel="stylesheet" href="https://fonts.googleapis.com/css2?family=Material+Symbols+Outlined:opsz,wght,FILL,GRAD@20..48,100..700,0..1,-50..200&display=swap">
|
||||
|
||||
<link rel="icon" type="image/svg+xml" href="{{ site.icon_url }}">
|
||||
<link rel="stylesheet" href="{{ '/assets/css/style.css' | relative_url }}">
|
||||
|
||||
{% seo %}
|
||||
</head>
|
||||
<body>
|
||||
{% include nav.html %}
|
||||
|
||||
<main class="main-content">
|
||||
{{ content }}
|
||||
</main>
|
||||
|
||||
{% include footer.html %}
|
||||
|
||||
<script src="{{ '/assets/js/theme.js' | relative_url }}"></script>
|
||||
<script src="{{ '/assets/js/github-api.js' | relative_url }}"></script>
|
||||
</body>
|
||||
</html>
|
||||
@@ -0,0 +1,18 @@
|
||||
---
|
||||
layout: default
|
||||
---
|
||||
|
||||
<div class="page-container">
|
||||
{% if page.title %}
|
||||
<div class="page-header">
|
||||
<h1>{{ page.title }}</h1>
|
||||
{% if page.subtitle %}
|
||||
<p class="subtitle">{{ page.subtitle }}</p>
|
||||
{% endif %}
|
||||
</div>
|
||||
{% endif %}
|
||||
|
||||
<div class="page-body">
|
||||
{{ content }}
|
||||
</div>
|
||||
</div>
|
||||
File diff suppressed because it is too large.
Load diff
@@ -0,0 +1,26 @@
|
||||
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 1024 1024" fill="currentColor">
|
||||
<g
|
||||
id="#group1"
|
||||
transform="matrix(3.7200795,0,0,3.7200795,-25.223728,233.21009)">
|
||||
<path
|
||||
d="M 0,0 H 1.64 L 1.65,0.78 C 1.23,0.82 0.41,0.9 0,0.93 Z"
|
||||
id="path1"/>
|
||||
<path
|
||||
d="m 24.43,15.6 c 3.89,-0.37 8.9,-1.27 11.7,2.19 2.23,2.48 2.46,5.99 2.48,9.16 0.05,14.34 -0.03,28.69 0.02,43.04 0.07,7.15 1.85,15.04 7.45,19.94 3.83,3.49 9.51,3.38 14.25,2.29 7.81,-3.29 10.44,-12.47 10.89,-20.21 0.3,-15.68 0.05,-31.36 0.18,-47.04 -0.15,-3.96 1.92,-8.39 6.02,-9.43 3.75,-0.45 8.16,-0.91 11.27,1.7 2.27,1.84 3.02,4.93 3.08,7.73 0.11,13.67 -0.06,27.35 0.01,41.02 C 92,76 90.8,86.27 86.53,95.43 83.2,102.94 77.52,109.61 70.07,113.25 59.92,118.71 46.89,118.02 37.28,111.7 24.6,103.83 19.14,88.28 18.65,73.98 18.42,57.66 18.52,41.32 18.52,25 c -0.16,-3.96 1.85,-8.3 5.91,-9.4 z"
|
||||
id="path2"/>
|
||||
<path
|
||||
d="m 202.43,15.58 c 3.72,-0.43 8.21,-1.09 11.23,1.69 2.54,2.08 2.92,5.61 2.95,8.67 0.1,15.02 -0.06,30.05 0.12,45.06 0.34,7.21 2.27,15.38 8.52,19.77 3.47,2.75 8.26,2.2 12.36,1.66 8.28,-2.91 11.41,-12.38 11.62,-20.41 0.38,-15.98 -0.08,-31.97 0.25,-47.95 0.01,-4.12 2.95,-8.86 7.48,-8.73 3.24,0 7.21,-0.74 9.66,1.95 2.4,2.17 3.09,5.54 3.05,8.65 -0.01,15.04 0.04,30.08 -0.01,45.12 -0.2,12.46 -3.28,25.39 -11.64,34.98 -6.65,7.04 -16.34,11.31 -26.08,10.76 -10.56,0.14 -20.11,-6.23 -26.32,-14.39 -6.13,-9.22 -9.3,-20.3 -9.28,-31.36 0.04,-15.36 -0.17,-30.72 0.01,-46.08 -0.2,-4.01 2.06,-8.26 6.08,-9.39 z"
|
||||
id="path3"/>
|
||||
<path
|
||||
d="m 101.32,53.29 c 3.81,-3.66 12.24,-5.16 14.7,0.69 4.07,9.49 6.61,19.57 10.09,29.27 2.77,-5.69 3.87,-12.02 6.11,-17.93 1.72,-4.58 2.22,-10.5 6.78,-13.28 4.84,-3.16 12.17,-0.5 14,4.93 3.2,8.6 5.74,17.44 8.48,26.2 2.61,-4.44 3.38,-9.68 5.28,-14.44 1.95,-5.09 3.27,-10.43 5.66,-15.35 2.91,-5.15 10.56,-3.55 14.27,-0.12 3.95,3.15 3.14,8.78 1.53,12.95 -5.04,14.19 -9.93,28.44 -15.62,42.38 -1.15,2.88 -2.9,5.76 -5.78,7.16 -4.23,1.89 -9.94,1.16 -12.64,-2.92 -3.93,-5.84 -5.37,-12.86 -7.59,-19.44 -0.95,-2.42 -1.01,-5.3 -2.75,-7.34 -1.36,5.08 -3.19,10.01 -4.7,15.04 -1.35,4.11 -2.53,8.42 -5.15,11.94 -4.08,5.84 -14.36,4.58 -17.07,-1.98 C 110.5,96.67 105.49,81.69 100.18,66.87 98.61,62.56 97.13,56.65 101.32,53.29 Z"
|
||||
id="path4"/>
|
||||
</g>
|
||||
<path
|
||||
d="m 912.79574,697.97157 c 29.20263,-1.04162 58.03324,10.23022 80.68853,28.30981 16.18233,12.94588 26.71023,34.22473 22.91573,55.16878 -3.9433,20.01403 -18.34003,36.56838 -35.4152,47.059 -24.51532,16.29395 -55.35478,17.26117 -83.81339,15.95915 -31.95548,-1.52524 -64.58058,-16.81476 -81.13493,-45.08737 -11.97866,-18.6004 -8.22138,-43.78533 4.7617,-60.8605 20.68364,-28.79341 58.21924,-39.02363 91.99756,-40.54887 z"
|
||||
id="path7"
|
||||
style="opacity:0.4" />
|
||||
<path
|
||||
d="m 77.395982,704.44742 c 33.555118,-7.62616 70.793108,-3.01326 100.330548,15.14073 19.15841,12.57387 36.64278,32.8111 35.82436,57.02882 -0.52081,23.02729 -17.37277,41.92529 -35.74996,53.94115 -25.37094,17.18677 -57.54963,18.33999 -87.124264,16.40555 C 63.25968,845.14083 36.884316,832.26936 18.693127,811.66012 1.3203566,792.42731 1.059951,760.47182 17.465501,740.5694 32.457422,721.9318 54.629095,710.58556 77.395982,704.44742 Z"
|
||||
id="path8"
|
||||
style="opacity:0.4" />
|
||||
</svg>
|
||||
|
After Width: | Height: | Size: 3.2 KiB |
@@ -0,0 +1,6 @@
|
||||
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 1024 1024" fill="currentColor">
|
||||
<path
|
||||
d="m 547.52918,728.17397 a 117.70956,117.70956 0 0 1 -158.96317,49.41452 117.70956,117.70956 0 0 1 -49.4145,-158.96317 l 38.34203,-72.93218 a 35.312869,35.312869 0 0 1 47.68894,-14.82435 35.312869,35.312869 0 0 1 14.82435,47.68895 l -38.34203,72.93218 a 47.083825,47.083825 0 0 0 19.76581,63.58526 47.083825,47.083825 0 0 0 63.58526,-19.7658 L 564.11,544.8607 c -30.12298,-30.73062 -40.16538,-75.37364 -21.10391,-111.63135 24.10071,-45.84309 85.495,-61.44135 137.58942,-34.05419 52.09442,27.38717 74.05118,86.80488 49.95049,132.64797 -19.06147,36.25772 -61.53026,53.29447 -103.92269,45.90217 L 547.52918,728.17397 M 430.54228,267.71678 c 52.09443,27.38716 74.0512,86.80487 49.9505,132.64796 -19.06146,36.25773 -61.53024,53.29449 -103.92269,45.90217 L 259.13393,669.64779 a 153.02244,153.02244 0 0 0 64.23886,206.65211 153.02244,153.02244 0 0 0 206.65212,-64.23886 l 76.68406,-145.86438 a 35.312869,35.312869 0 0 1 47.68896,-14.82435 35.312869,35.312869 0 0 1 14.82435,47.68894 L 592.53822,844.92563 A 223.64817,223.64817 0 0 1 290.5082,938.8132 223.64817,223.64817 0 0 1 196.62063,636.78318 L 314.05679,413.40232 c -30.123,-30.73062 -40.16538,-75.37365 -21.1039,-111.63137 24.10069,-45.84308 85.49499,-61.44133 137.58939,-34.05417 M 546.9462,229.44013 497.03752,280.86525 C 484.77069,262.71363 467.81236,247.415 446.97459,236.46013 409.04985,216.52227 366.52877,215.44561 332.10697,230.32957 l -30.29188,-63.79966 c 43.78337,-19.5373 95.86368,-22.47811 145.45286,-6.51485 l 1.31458,-2.50054 A 176.56434,176.56434 0 0 1 687.02728,83.392755 176.56434,176.56434 0 0 1 761.14905,321.83751 l -1.31458,2.50053 c 41.26348,31.79996 68.3667,76.36925 77.0945,123.51282 l -69.72941,11.21631 c -7.25373,-36.7937 -32.24703,-71.2108 -70.17175,-91.14866 -20.83778,-10.95486 -43.05444,-16.25137 -64.96156,-16.06574 l 14.06773,-70.26746 c 16.60118,1.81238 34.45265,4.28207 51.18718,9.88813 l 1.31458,-2.50052 C 726.02292,236.8785 706.25712,173.29323 654.16269,145.90606 602.06827,118.5189 538.483,138.28471 511.09584,190.37912 l -1.31459,2.50053 c 14.10537,10.60714 26.2603,23.91245 37.16495,36.56048 m 106.26215,221.82945 c -22.92156,-12.05034 -49.12485,-7.74005 -58.10784,9.34693 -8.98298,17.08697 2.32168,41.11602 25.24324,53.16638 22.92154,12.05035 49.12485,7.74005 58.10783,-9.34692 8.98299,-17.08698 -2.3217,-41.11603 -25.24323,-53.16639 M 403.15512,319.8112 c -22.92154,-12.05035 -49.12484,-7.74005 -58.10783,9.34691 -8.98298,17.08698 2.32169,41.11604 25.24324,53.16639 22.92155,12.05035 49.12485,7.74006 58.10783,-9.34692 8.98299,-17.08697 -2.32168,-41.11604 -25.24324,-53.16638 z"
|
||||
id="path1"
|
||||
style="stroke-width:1.10352" />
|
||||
</svg>
|
||||
|
After Width: | Height: | Size: 2.7 KiB |
@@ -0,0 +1,199 @@
|
||||
// GitHub API - Dynamic release info & screenshots
|
||||
(function () {
|
||||
'use strict';
|
||||
|
||||
var REPO = 'alesimula/Murine-launcher';
|
||||
var API = 'https://api.github.com/repos/' + REPO;
|
||||
|
||||
// --- Markdown to HTML (lightweight) ---
|
||||
function mdToHtml(md) {
|
||||
if (!md) return '';
|
||||
var html = md
|
||||
// code blocks
|
||||
.replace(/```(\w*)\n([\s\S]*?)```/g, '<pre><code>$2</code></pre>')
|
||||
// inline code
|
||||
.replace(/`([^`]+)`/g, '<code>$1</code>')
|
||||
// headings
|
||||
.replace(/^### (.+)$/gm, '<h3>$1</h3>')
|
||||
.replace(/^## (.+)$/gm, '<h2>$1</h2>')
|
||||
.replace(/^# (.+)$/gm, '<h1>$1</h1>')
|
||||
// bold + italic
|
||||
.replace(/\*\*\*(.+?)\*\*\*/g, '<strong><em>$1</em></strong>')
|
||||
.replace(/\*\*(.+?)\*\*/g, '<strong>$1</strong>')
|
||||
.replace(/\*(.+?)\*/g, '<em>$1</em>')
|
||||
// images
|
||||
.replace(/!\[([^\]]*)\]\(([^)]+)\)/g, '<img alt="$1" src="$2">')
|
||||
// links
|
||||
.replace(/\[([^\]]+)\]\(([^)]+)\)/g, '<a href="$2" target="_blank" rel="noopener">$1</a>')
|
||||
// unordered lists
|
||||
.replace(/^\s*[-*] (.+)$/gm, '<li>$1</li>')
|
||||
// blockquote
|
||||
.replace(/^> (.+)$/gm, '<blockquote>$1</blockquote>')
|
||||
// horizontal rules
|
||||
.replace(/^---+$/gm, '<hr>')
|
||||
// paragraphs (double newline)
|
||||
.replace(/\n\n+/g, '</p><p>')
|
||||
// single newlines to <br>
|
||||
.replace(/\n/g, '<br>');
|
||||
|
||||
// wrap consecutive <li> in <ul>
|
||||
html = html.replace(/((?:<li>.*?<\/li><br>?)+)/g, function (match) {
|
||||
return '<ul>' + match.replace(/<br>/g, '') + '</ul>';
|
||||
});
|
||||
|
||||
return '<p>' + html + '</p>';
|
||||
}
|
||||
|
||||
function formatBytes(bytes) {
|
||||
if (!bytes) return '';
|
||||
var sizes = ['B', 'KB', 'MB', 'GB'];
|
||||
var i = Math.floor(Math.log(bytes) / Math.log(1024));
|
||||
return (bytes / Math.pow(1024, i)).toFixed(1) + ' ' + sizes[i];
|
||||
}
|
||||
|
||||
function formatDate(dateStr) {
|
||||
var d = new Date(dateStr);
|
||||
return d.toLocaleDateString('en-US', { year: 'numeric', month: 'short', day: 'numeric' });
|
||||
}
|
||||
|
||||
// --- Latest Release ---
|
||||
function loadLatestRelease() {
|
||||
var container = document.getElementById('latestRelease');
|
||||
if (!container) return;
|
||||
|
||||
fetch(API + '/releases/latest')
|
||||
.then(function (res) {
|
||||
if (!res.ok) throw new Error('HTTP ' + res.status);
|
||||
return res.json();
|
||||
})
|
||||
.then(function (release) {
|
||||
renderRelease(release, container);
|
||||
// Update hero version
|
||||
var badge = document.getElementById('versionBadge');
|
||||
if (badge) badge.textContent = release.tag_name;
|
||||
var heroDesc = document.getElementById('releaseDate');
|
||||
if (heroDesc) heroDesc.textContent = 'Released ' + formatDate(release.published_at);
|
||||
})
|
||||
.catch(function (err) {
|
||||
console.error('Failed to load release:', err);
|
||||
container.innerHTML =
|
||||
'<div class="error-state">' +
|
||||
'<span class="material-symbols-outlined">cloud_off</span>' +
|
||||
'<p>Could not load release info.</p>' +
|
||||
'<p style="font-size:0.8125rem">Check the <a href="https://github.com/' + REPO + '/releases" target="_blank">releases page</a> directly.</p>' +
|
||||
'</div>';
|
||||
});
|
||||
}
|
||||
|
||||
function renderRelease(release, container) {
|
||||
var apkAssets = release.assets.filter(function (a) {
|
||||
return a.name.endsWith('.apk');
|
||||
});
|
||||
var otherAssets = release.assets.filter(function (a) {
|
||||
return !a.name.endsWith('.apk');
|
||||
});
|
||||
|
||||
var assetsHtml = '';
|
||||
if (apkAssets.length > 0 || otherAssets.length > 0) {
|
||||
assetsHtml = '<div class="release-assets"><h3>Assets</h3><div class="asset-list">';
|
||||
|
||||
apkAssets.forEach(function (asset) {
|
||||
assetsHtml +=
|
||||
'<a href="' + asset.browser_download_url + '" class="asset-item">' +
|
||||
'<div class="asset-info"><span class="material-symbols-outlined">android</span>' +
|
||||
'<span class="asset-name">' + asset.name + '</span></div>' +
|
||||
'<span class="asset-size">' + formatBytes(asset.size) + '</span></a>';
|
||||
});
|
||||
|
||||
otherAssets.forEach(function (asset) {
|
||||
assetsHtml +=
|
||||
'<a href="' + asset.browser_download_url + '" class="asset-item">' +
|
||||
'<div class="asset-info"><span class="material-symbols-outlined">description</span>' +
|
||||
'<span class="asset-name">' + asset.name + '</span></div>' +
|
||||
'<span class="asset-size">' + formatBytes(asset.size) + '</span></a>';
|
||||
});
|
||||
|
||||
assetsHtml += '</div></div>';
|
||||
}
|
||||
|
||||
container.innerHTML =
|
||||
'<div class="release-card">' +
|
||||
'<div class="release-card-header">' +
|
||||
'<h2><span class="material-symbols-outlined">new_releases</span>' + (release.name || release.tag_name) + '</h2>' +
|
||||
'<div class="release-meta">' +
|
||||
'<span><span class="material-symbols-outlined">calendar_today</span>' + formatDate(release.published_at) + '</span>' +
|
||||
'<span><span class="material-symbols-outlined">sell</span>' + release.tag_name + '</span>' +
|
||||
'</div></div>' +
|
||||
'<div class="release-body"><div class="release-notes">' + mdToHtml(release.body) + '</div></div>' +
|
||||
assetsHtml +
|
||||
'<div class="release-footer">' +
|
||||
'<a href="https://github.com/' + REPO + '/releases" class="btn-text" target="_blank" rel="noopener">' +
|
||||
'<span class="material-symbols-outlined">history</span>View all releases</a>' +
|
||||
'</div></div>';
|
||||
|
||||
// Also update download button href
|
||||
if (apkAssets.length > 0) {
|
||||
var dlBtn = document.getElementById('downloadBtn');
|
||||
if (dlBtn) dlBtn.href = apkAssets[0].browser_download_url;
|
||||
}
|
||||
}
|
||||
|
||||
// --- Screenshots ---
|
||||
function loadScreenshots() {
|
||||
var container = document.getElementById('screenshotGallery');
|
||||
if (!container) return;
|
||||
|
||||
// Fetch directory listing from GitHub API
|
||||
fetch(API + '/contents/fastlane/metadata/android/en-US/images/phoneScreenshots')
|
||||
.then(function (res) {
|
||||
if (!res.ok) throw new Error('HTTP ' + res.status);
|
||||
return res.json();
|
||||
})
|
||||
.then(function (files) {
|
||||
// Filter to image files and sort
|
||||
var images = files
|
||||
.filter(function (f) {
|
||||
return /\.(png|jpg|jpeg|webp)$/i.test(f.name);
|
||||
})
|
||||
.sort(function (a, b) {
|
||||
return a.name.localeCompare(b.name, undefined, { numeric: true });
|
||||
});
|
||||
|
||||
if (images.length === 0) {
|
||||
container.innerHTML = '<div class="error-state"><p>No screenshots found.</p></div>';
|
||||
return;
|
||||
}
|
||||
|
||||
var html = '<div class="screenshot-scroll">';
|
||||
images.forEach(function (img) {
|
||||
var rawUrl = 'https://raw.githubusercontent.com/' + REPO + '/main/fastlane/metadata/android/en-US/images/phoneScreenshots/' + img.name;
|
||||
html +=
|
||||
'<div class="screenshot-item">' +
|
||||
'<img src="' + rawUrl + '" alt="Screenshot ' + img.name + '" loading="lazy">' +
|
||||
'</div>';
|
||||
});
|
||||
html += '</div>';
|
||||
container.innerHTML = html;
|
||||
})
|
||||
.catch(function (err) {
|
||||
console.error('Failed to load screenshots:', err);
|
||||
// Fallback: use known screenshot names
|
||||
var html = '<div class="screenshot-scroll">';
|
||||
for (var i = 1; i <= 7; i++) {
|
||||
var rawUrl = 'https://raw.githubusercontent.com/' + REPO + '/main/fastlane/metadata/android/en-US/images/phoneScreenshots/' + i + '.png';
|
||||
html +=
|
||||
'<div class="screenshot-item">' +
|
||||
'<img src="' + rawUrl + '" alt="Screenshot ' + i + '" loading="lazy">' +
|
||||
'</div>';
|
||||
}
|
||||
html += '</div>';
|
||||
container.innerHTML = html;
|
||||
});
|
||||
}
|
||||
|
||||
// --- Init ---
|
||||
document.addEventListener('DOMContentLoaded', function () {
|
||||
loadLatestRelease();
|
||||
loadScreenshots();
|
||||
});
|
||||
})();
|
||||
@@ -0,0 +1,47 @@
|
||||
// Material Expressive - Theme Toggle & Nav Scroll
|
||||
(function () {
|
||||
'use strict';
|
||||
|
||||
// --- Theme ---
|
||||
const STORAGE_KEY = 'murine-theme';
|
||||
|
||||
function getPreferred() {
|
||||
const stored = localStorage.getItem(STORAGE_KEY);
|
||||
if (stored) return stored;
|
||||
return window.matchMedia('(prefers-color-scheme: dark)').matches ? 'dark' : 'light';
|
||||
}
|
||||
|
||||
function applyTheme(theme) {
|
||||
document.documentElement.setAttribute('data-theme', theme);
|
||||
const icon = document.getElementById('themeIcon');
|
||||
if (icon) icon.textContent = theme === 'dark' ? 'light_mode' : 'dark_mode';
|
||||
}
|
||||
|
||||
applyTheme(getPreferred());
|
||||
|
||||
document.addEventListener('DOMContentLoaded', function () {
|
||||
applyTheme(getPreferred());
|
||||
|
||||
var toggle = document.getElementById('themeToggle');
|
||||
if (toggle) {
|
||||
toggle.addEventListener('click', function () {
|
||||
var current = document.documentElement.getAttribute('data-theme') || 'light';
|
||||
var next = current === 'dark' ? 'light' : 'dark';
|
||||
localStorage.setItem(STORAGE_KEY, next);
|
||||
applyTheme(next);
|
||||
});
|
||||
}
|
||||
|
||||
// --- Nav scroll shadow ---
|
||||
var nav = document.getElementById('topNav');
|
||||
if (nav) {
|
||||
window.addEventListener('scroll', function () {
|
||||
if (window.scrollY > 8) {
|
||||
nav.classList.add('scrolled');
|
||||
} else {
|
||||
nav.classList.remove('scrolled');
|
||||
}
|
||||
}, { passive: true });
|
||||
}
|
||||
});
|
||||
})();
|
||||
@@ -0,0 +1,38 @@
|
||||
---
|
||||
layout: default
|
||||
title: Download
|
||||
---
|
||||
|
||||
<!-- Download Hero -->
|
||||
<section class="download-hero">
|
||||
<img src="https://raw.githubusercontent.com/alesimula/Murine-launcher/refs/heads/main/image/app_icon/icon_browser_fullsize.svg" alt="Murine Launcher" class="app-icon">
|
||||
<h1>Murine Launcher</h1>
|
||||
<div class="version-badge" id="versionBadge">Loading…</div>
|
||||
<p class="download-desc" id="releaseDate">Checking for latest release…</p>
|
||||
<div class="download-actions">
|
||||
<a href="https://github.com/alesimula/Murine-launcher/releases/latest" id="downloadBtn" class="btn-filled" target="_blank" rel="noopener">
|
||||
<span class="material-symbols-outlined">download</span>
|
||||
Download APK
|
||||
</a>
|
||||
<a href="https://github.com/alesimula/Murine-launcher/releases" class="btn-outlined" target="_blank" rel="noopener">
|
||||
<span class="material-symbols-outlined">history</span>
|
||||
All Releases
|
||||
</a>
|
||||
</div>
|
||||
</section>
|
||||
|
||||
<!-- Latest Release Details -->
|
||||
<section class="release-section" id="latestRelease">
|
||||
<div class="release-card">
|
||||
<div class="release-card-header">
|
||||
<div class="skeleton skeleton-title"></div>
|
||||
</div>
|
||||
<div class="release-body">
|
||||
<div class="skeleton skeleton-text w80"></div>
|
||||
<div class="skeleton skeleton-text w60"></div>
|
||||
<div class="skeleton skeleton-text w80"></div>
|
||||
<div class="skeleton skeleton-text w40"></div>
|
||||
<div class="skeleton skeleton-block" style="margin-top:16px"></div>
|
||||
</div>
|
||||
</div>
|
||||
</section>
|
||||
+114
@@ -0,0 +1,114 @@
|
||||
---
|
||||
layout: default
|
||||
title: Home
|
||||
---
|
||||
|
||||
<!-- Hero -->
|
||||
<section class="hero">
|
||||
<div class="hero-inner">
|
||||
<div class="hero-text">
|
||||
<h1>Android launcher,<br><span class="accent">plain and simple.</span></h1>
|
||||
<p class="hero-desc">
|
||||
A modern, lightweight FOSS Launcher3 fork delivering an enhanced stock Android experience,
|
||||
providing a familiar AOSP feel out of the box, with some sprinkles on top :3 <br/><br/>
|
||||
Offers a minimalistic yet polished interface with essential customization options, with zero bloat.
|
||||
</p>
|
||||
<div class="hero-actions">
|
||||
<a href="{{ '/download' | relative_url }}" class="btn-filled">
|
||||
<span class="material-symbols-outlined">download</span>
|
||||
Download
|
||||
</a>
|
||||
<a href="https://github.com/alesimula/Murine-launcher" class="btn-outlined" target="_blank" rel="noopener">
|
||||
<span class="material-symbols-outlined">code</span>
|
||||
Source Code
|
||||
</a>
|
||||
</div>
|
||||
</div>
|
||||
<div class="hero-visual">
|
||||
<div class="hero-icon-wrapper">
|
||||
<img src="https://raw.githubusercontent.com/alesimula/Murine-launcher/refs/heads/main/image/app_icon/icon_browser_fullsize.svg" alt="Murine Launcher icon">
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</section>
|
||||
|
||||
<!-- Features -->
|
||||
<section class="features-section">
|
||||
<div class="section-header">
|
||||
<h2>What it has to offer</h2>
|
||||
<p>Built on AOSP Launcher3, Murine keeps things clean while adding a little touches here and there.</p>
|
||||
</div>
|
||||
<div class="features-grid">
|
||||
<div class="feature-card">
|
||||
<div class="feature-icon">
|
||||
<span class="material-symbols-outlined">palette</span>
|
||||
</div>
|
||||
<h3>Modern UI</h3>
|
||||
<p>Built on the foundations of modern Launcher3, and enhanced with AOSP Material Expressive settings ported from LineageOS</p>
|
||||
</div>
|
||||
<div class="feature-card">
|
||||
<div class="feature-icon">
|
||||
<span class="material-symbols-outlined">blur_on</span>
|
||||
</div>
|
||||
<h3>Blur Effects</h3>
|
||||
<p>Frosted glass and MICA-style translucency effects on the app drawer and search bar. Supported on Android 12+ with compatible OEM/ROMs.</p>
|
||||
</div>
|
||||
<div class="feature-card">
|
||||
<div class="feature-icon">
|
||||
<span class="material-symbols-outlined">search</span>
|
||||
</div>
|
||||
<h3>Customised QuickSearchBox</h3>
|
||||
<p>Can look great without needing Google; disable the Lens button, choose your preferred search engine, or disable it alltogether if it's not your thing.</p>
|
||||
</div>
|
||||
<div class="feature-card">
|
||||
<div class="feature-icon">
|
||||
<span class="material-symbols-outlined">speed</span>
|
||||
</div>
|
||||
<h3>Lightweight</h3>
|
||||
<p>Very close to its AOSP source, with some enhancements but no bloat. Very tiny, very light, very demure.</p>
|
||||
</div>
|
||||
<div class="feature-card">
|
||||
<div class="feature-icon">
|
||||
<span class="custom-icon" style="--icon-url: url('{{ '/assets/img/ic_bestfeature.svg' | relative_url }}')"></span>
|
||||
</div>
|
||||
<h3>Designed by a mouse</h3>
|
||||
<p>Are you tired of apps designed by humans? This one was built by a mouse, no (excessive) desire for money, will not sell out or sell you out, mice only deal in cheese and crumbs.</p>
|
||||
</div>
|
||||
<div class="feature-card">
|
||||
<div class="feature-icon">
|
||||
<span class="custom-icon" style="--icon-url: url('{{ '/assets/img/ic_clippy.svg' | relative_url }}')"></span>
|
||||
</div>
|
||||
<h3>Free & Open Source</h3>
|
||||
<p>Fully open source, licensed under the Apache 2.0 license. No tracking, no ads, no data collection, no internet access.</p>
|
||||
</div>
|
||||
</div>
|
||||
</section>
|
||||
|
||||
<!-- Screenshots -->
|
||||
<section class="screenshots-section">
|
||||
<div class="section-header">
|
||||
<h2>See how it looks</h2>
|
||||
<p>Screenshots from the latest release. Scroll to explore.</p>
|
||||
</div>
|
||||
<div id="screenshotGallery">
|
||||
<div class="screenshot-loading">
|
||||
<span class="material-symbols-outlined">hourglass_top</span>
|
||||
Loading screenshots…
|
||||
</div>
|
||||
</div>
|
||||
</section>
|
||||
|
||||
<!-- Compatibility -->
|
||||
<section class="compat-section">
|
||||
<div class="compat-card">
|
||||
<div class="compat-icon">
|
||||
<span class="material-symbols-outlined">smartphone</span>
|
||||
</div>
|
||||
<div class="compat-details">
|
||||
<h3>Compatibility</h3>
|
||||
<p>Murine Launcher supports <strong>Android 8 (Oreo)</strong> and above.</p>
|
||||
<p>Blur effects require <strong>Android 12+</strong>. Some OEMs or ROMs may hide or disable window-level blurs - check for an "Allow window-level blurs" option in Display or Developer Options.</p>
|
||||
<p>On rooted devices, you can try enabling the <a href="https://github.com/Magisk-Modules-Alt-Repo/enable-blurs" target="_blank" rel="noopener">enable-blurs Magisk module</a>.</p>
|
||||
</div>
|
||||
</div>
|
||||
</section>
|
||||
Reference in new issue
Block a user