Skip to content

Commit 5a22a24

Browse files
author
kusi
committed
initial
1 parent d91e6da commit 5a22a24

10 files changed

Lines changed: 433 additions & 1 deletion

File tree

.github/workflows/mega-linter.yml

Lines changed: 82 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,82 @@
1+
---
2+
# MegaLinter GitHub Action configuration file
3+
# More info at https://megalinter.github.io
4+
name: MegaLinter
5+
6+
on:
7+
# Trigger mega-linter at every push. Action will also be visible from Pull Requests to master
8+
push: # Comment this line to trigger action only on pull-requests (not recommended if you don't pay for GH Actions)
9+
pull_request:
10+
branches: [master, main]
11+
12+
env: # Comment env block if you do not want to apply fixes
13+
# Apply linter fixes configuration
14+
APPLY_FIXES: all # When active, APPLY_FIXES must also be defined as environment variable (in github/workflows/mega-linter.yml or other CI tool)
15+
APPLY_FIXES_EVENT: pull_request # Decide which event triggers application of fixes in a commit or a PR (pull_request, push, all)
16+
APPLY_FIXES_MODE: commit # If APPLY_FIXES is used, defines if the fixes are directly committed (commit) or posted in a PR (pull_request)
17+
18+
concurrency:
19+
group: ${{ github.ref }}-${{ github.workflow }}
20+
cancel-in-progress: true
21+
22+
jobs:
23+
build:
24+
name: MegaLinter
25+
runs-on: ubuntu-latest
26+
steps:
27+
# Git Checkout
28+
- name: Checkout Code
29+
uses: actions/checkout@v3
30+
with:
31+
token: ${{ secrets.PAT || secrets.GITHUB_TOKEN }}
32+
fetch-depth: 0
33+
34+
# MegaLinter
35+
- name: MegaLinter
36+
id: ml
37+
# You can override MegaLinter flavor used to have faster performances
38+
# More info at https://megalinter.io/latest/flavors/
39+
uses: oxsecurity/megalinter/flavors/documentation@v6.15.0
40+
env:
41+
# All available variables are described in documentation
42+
# https://megalinter.io/latest/configuration/
43+
VALIDATE_ALL_CODEBASE: true # Set ${{ github.event_name == 'push' && github.ref == 'refs/heads/main' }} to validate only diff with main branch
44+
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
45+
# ADD YOUR CUSTOM ENV VARIABLES HERE TO OVERRIDE VALUES OF .mega-linter.yml AT THE ROOT OF YOUR REPOSITORY
46+
47+
# Upload MegaLinter artifacts
48+
- name: Archive production artifacts
49+
if: ${{ success() }} || ${{ failure() }}
50+
uses: actions/upload-artifact@v2
51+
with:
52+
name: MegaLinter reports
53+
path: |
54+
report
55+
mega-linter.log
56+
57+
# Create pull request if applicable (for now works only on PR from same repository, not from forks)
58+
- name: Create Pull Request with applied fixes
59+
id: cpr
60+
if: steps.ml.outputs.has_updated_sources == 1 && (env.APPLY_FIXES_EVENT == 'all' || env.APPLY_FIXES_EVENT == github.event_name) && env.APPLY_FIXES_MODE == 'pull_request' && (github.event_name == 'push' || github.event.pull_request.head.repo.full_name == github.repository) && !contains(github.event.head_commit.message, 'skip fix')
61+
uses: peter-evans/create-pull-request@v4
62+
with:
63+
token: ${{ secrets.PAT || secrets.GITHUB_TOKEN }}
64+
commit-message: "[MegaLinter] Apply linters automatic fixes"
65+
title: "[MegaLinter] Apply linters automatic fixes"
66+
labels: bot
67+
- name: Create PR output
68+
if: steps.ml.outputs.has_updated_sources == 1 && (env.APPLY_FIXES_EVENT == 'all' || env.APPLY_FIXES_EVENT == github.event_name) && env.APPLY_FIXES_MODE == 'pull_request' && (github.event_name == 'push' || github.event.pull_request.head.repo.full_name == github.repository) && !contains(github.event.head_commit.message, 'skip fix')
69+
run: |
70+
echo "Pull Request Number - ${{ steps.cpr.outputs.pull-request-number }}"
71+
echo "Pull Request URL - ${{ steps.cpr.outputs.pull-request-url }}"
72+
73+
# Push new commit if applicable (for now works only on PR from same repository, not from forks)
74+
- name: Prepare commit
75+
if: steps.ml.outputs.has_updated_sources == 1 && (env.APPLY_FIXES_EVENT == 'all' || env.APPLY_FIXES_EVENT == github.event_name) && env.APPLY_FIXES_MODE == 'commit' && github.ref != 'refs/heads/main' && (github.event_name == 'push' || github.event.pull_request.head.repo.full_name == github.repository) && !contains(github.event.head_commit.message, 'skip fix')
76+
run: sudo chown -Rc $UID .git/
77+
- name: Commit and push applied linter fixes
78+
if: steps.ml.outputs.has_updated_sources == 1 && (env.APPLY_FIXES_EVENT == 'all' || env.APPLY_FIXES_EVENT == github.event_name) && env.APPLY_FIXES_MODE == 'commit' && github.ref != 'refs/heads/main' && (github.event_name == 'push' || github.event.pull_request.head.repo.full_name == github.repository) && !contains(github.event.head_commit.message, 'skip fix')
79+
uses: stefanzweifel/git-auto-commit-action@v4
80+
with:
81+
branch: ${{ github.event.pull_request.head.ref || github.head_ref || github.ref }}
82+
commit_message: "[MegaLinter] Apply linters fixes"

.htmlhintrc

Lines changed: 25 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,25 @@
1+
{
2+
"tagname-lowercase": true,
3+
"attr-lowercase": true,
4+
"attr-value-double-quotes": true,
5+
"attr-value-not-empty": false,
6+
"attr-no-duplication": true,
7+
"doctype-first": false,
8+
"tag-pair": true,
9+
"tag-self-close": false,
10+
"spec-char-escape": true,
11+
"id-unique": true,
12+
"src-not-empty": true,
13+
"title-require": true,
14+
"alt-require": true,
15+
"doctype-html5": true,
16+
"id-class-value": "dash",
17+
"style-disabled": false,
18+
"inline-style-disabled": false,
19+
"inline-script-disabled": false,
20+
"space-tab-mixed-disabled": "space",
21+
"id-class-ad-disabled": false,
22+
"href-abs-or-rel": false,
23+
"attr-unsafe-chars": true,
24+
"head-script-disabled": true
25+
}

.jscpd.json

Lines changed: 15 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,15 @@
1+
{
2+
"threshold": 0,
3+
"reporters": ["html", "markdown"],
4+
"ignore": [
5+
"**/node_modules/**",
6+
"**/.git/**",
7+
"**/.rbenv/**",
8+
"**/.venv/**",
9+
"**/*cache*/**",
10+
"**/.github/**",
11+
"**/.idea/**",
12+
"**/report/**",
13+
"**/*.svg"
14+
]
15+
}

.markdown-link-check.json

Lines changed: 16 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,16 @@
1+
{
2+
"ignorePatterns": [
3+
{
4+
"pattern": "https://pigallery2.onrender.com/"
5+
},
6+
{
7+
"pattern": "https://demo.photofield.dev/"
8+
},
9+
{
10+
"pattern": "https://demo.memories.gallery/apps/memories/"
11+
},
12+
{
13+
"pattern": "https://demo.snapcrescent.app"
14+
}
15+
]
16+
}

.mega-linter.yml

Lines changed: 26 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,26 @@
1+
# Configuration file for MegaLinter
2+
# See all available variables at https://megalinter.io/latest/configuration/ and in linters documentation
3+
4+
APPLY_FIXES: all # all, none, or list of linter keys
5+
# ENABLE: # If you use ENABLE variable, all other languages/formats/tooling-formats will be disabled by default
6+
# ENABLE_LINTERS: # If you use ENABLE_LINTERS variable, all other linters will be disabled by default
7+
DISABLE:
8+
# - COPYPASTE # Uncomment to disable checks of excessive copy-pastes
9+
- SPELL # Comment to enable checks of spelling mistakes
10+
DISABLE_LINTERS:
11+
- CSS_STYLELINT # We would need to enable support for the custom postcss-scss syntax https://www.npmjs.com/package/postcss-scss
12+
SHOW_ELAPSED_TIME: true
13+
FILEIO_REPORTER: false
14+
# DISABLE_ERRORS: true # Uncomment if you want MegaLinter to detect errors but not block CI to pass
15+
CSS_SCSS_LINT_PRE_COMMANDS:
16+
# Remove Jekyll Front Matter https://jekyllrb.com/docs/front-matter/
17+
- command: "sed --in-place '1{/^---$/{:a N;/---$/!ba;d}}' assets/css/*.scss"
18+
continue_if_failed: false
19+
cwd: workspace
20+
# Remove injected variables
21+
- command: 'sed --in-place ''s/^.*{{ site\.theme }}.*$//'' assets/css/*.scss'
22+
continue_if_failed: false
23+
cwd: workspace
24+
MARKDOWN_MARKDOWNLINT_ARGUMENTS:
25+
- --disable
26+
- MD013 # Disable line length lint https://github.com/DavidAnson/markdownlint/blob/main/doc/Rules.md#md013

LICENSE

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
MIT License
22

3-
Copyright (c) 2025 Markus Leuthold
3+
Copyright (c) 2022 MeIchthys
44

55
Permission is hereby granted, free of charge, to any person obtaining a copy
66
of this software and associated documentation files (the "Software"), to deal

_includes/head-custom.html

Lines changed: 27 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,27 @@
1+
<!-- start custom head snippets, customize with your own _includes/head-custom.html file -->
2+
3+
<!-- Setup Google Analytics -->
4+
{% include head-custom-google-analytics.html %}
5+
6+
<!-- You can set your favicon here -->
7+
<!-- link rel="shortcut icon" type="image/x-icon" href="{{ '/favicon.ico' | relative_url }}" -->
8+
<script>
9+
function toggleWidth() {
10+
if (document.querySelector("div.container-lg").style["max-width"]) {
11+
document.querySelector("div.container-lg").style.maxWidth = null;
12+
document.querySelector("button[name='toggle-table-width']").textContent = "Expand table";
13+
} else {
14+
document.querySelector("div.container-lg").style.maxWidth = "100%";
15+
document.querySelector("button[name='toggle-table-width']").textContent = "Collapse table";
16+
}
17+
}
18+
document.addEventListener("DOMContentLoaded", function(event) {
19+
var el = document.querySelector('table');
20+
var wrapper = document.createElement('div');
21+
wrapper.setAttribute("class", "table-wrapper");
22+
el.parentNode.insertBefore(wrapper, el);
23+
wrapper.appendChild(el);
24+
wrapper.insertAdjacentHTML( 'beforebegin', '<button name="toggle-table-width" onclick="toggleWidth()">Expand table</button>' );
25+
});
26+
</script>
27+
<!-- end custom head snippets -->

assets/css/style.scss

Lines changed: 40 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,40 @@
1+
---
2+
---
3+
4+
@import "{{ site.theme }}";
5+
6+
$background-color: #fff;
7+
8+
.table-wrapper {
9+
max-height: 75vh;
10+
overflow: auto;
11+
12+
> table {
13+
display: table;
14+
position: relative;
15+
text-align: left;
16+
}
17+
}
18+
19+
th {
20+
background: $background-color;
21+
position: sticky;
22+
top: 0;
23+
z-index: 2;
24+
}
25+
26+
th:first-child {
27+
left: 0;
28+
z-index: 3;
29+
}
30+
31+
td:first-child {
32+
background: $background-color;
33+
left: 0;
34+
position: sticky;
35+
z-index: 1;
36+
}
37+
38+
.container-lg > h1:nth-child(1) {
39+
display: none;
40+
}

features.md

Lines changed: 123 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,123 @@
1+
# Photo Library Features
2+
3+
To clarify the definitions/meanings of the features that are included in the comparison, the below definitions are currently used:
4+
5+
## Github Stars
6+
7+
The number of stars on the primary github (or other) source code repository.
8+
9+
## Contributors
10+
11+
The number of contributors that have contributed to the project.
12+
13+
## Last Commit
14+
15+
The date of the last git commit to the project.
16+
17+
## Source Language
18+
19+
The primary language used in the repository's source code.
20+
21+
## License
22+
23+
The software license listed on the code repository.
24+
25+
## Demo
26+
27+
Does the project provide a demo instance
28+
29+
## Freeness
30+
31+
Is the project completely and forever 'Free', or does it have a subscription plan or support model?
32+
33+
## Automatic Mobile Upload
34+
35+
Is there a method to automatically upload images from a mobile device?
36+
37+
## Web App
38+
39+
Is a web interface provided?
40+
41+
## Android App
42+
43+
Is an Android app provided?
44+
45+
## iOS App
46+
47+
Is an ios app provided?
48+
49+
## Desktop App
50+
51+
Is a desktop app provided?
52+
53+
## LivePhotos
54+
55+
Are Live Photos supported? We currently don't differentiate between the different types of Live Photos (Apple, Google, Samsung, etc).
56+
57+
## Video
58+
59+
Are videos supported?
60+
61+
## Geolocation/Map
62+
63+
Can photos be geolocated on a map?
64+
65+
## Discovery
66+
67+
Does the project have a mechanism to aid the user in re-discovering photos. This can include automatic album generation, 'year in review', etc.
68+
69+
## Existing Folders
70+
71+
Are existing photo directory structures preserved and browsable?
72+
73+
## Albums
74+
75+
Can albums be created and organized?
76+
77+
## Slideshow
78+
79+
Is it possible to view photos in an automated slideshow?
80+
81+
## Timeline
82+
83+
Is there a way to view the photos chronologically?
84+
85+
## Sharing
86+
87+
Can photos be shared with other users or non-users?
88+
89+
## Search
90+
91+
Is there a search for the photos? Does it support semantic search, filtering, or other searching methods?
92+
93+
## Duplicate Handling
94+
95+
Is there any functionality to manage duplicates?
96+
97+
## User Defined Tags
98+
99+
Can photos have user-defined (not AI) tags applied, and be filtered by those tags?
100+
101+
## Docker Installation
102+
103+
Does the project provide a docker image? Are there example docker-compose deployments?
104+
105+
## Object/Face Recognition
106+
107+
Is there object or face detection included? [We currently do not differentiate between objects and faces](https://github.com/meichthys/foss_photo_libraries/issues/16).
108+
109+
## Basic Editing
110+
111+
Can photos be edited (i.e. Crop, rotate, simple touch-up, etc).
112+
113+
## EXIF Data
114+
115+
Can EXIF data be viewed or better yet edited?
116+
117+
## Multiple User Support
118+
119+
Can there be multiple libraries for different users?
120+
121+
## Authentication Providers
122+
123+
Are alternative authentication providers supported? (OAuth, LDAP, etc.)

0 commit comments

Comments
 (0)