Giter Site home page Giter Site logo

tk-it / web Goto Github PK

View Code? Open in Web Editor NEW
2.0 2.0 2.0 35.48 MB

TÅGEKAMMERETs hjemmeside i Django. Både offentlig og intern

Home Page: https://TAAGEKAMMERET.dk

License: Other

Python 75.67% HTML 11.24% CSS 1.01% JavaScript 6.70% Shell 0.19% TeX 0.48% Makefile 0.21% Dockerfile 0.02% TypeScript 3.35% Less 0.97% SCSS 0.18%

web's People

Contributors

anissen avatar barrenszeppelin avatar hogfeldt avatar kandevander avatar martinsand avatar mortal avatar neic avatar oehc avatar siadyhr avatar tskovlund avatar tyilo avatar

Stargazers

 avatar  avatar

Watchers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

Forkers

anissen siadyhr

web's Issues

Fix swipe

Swipe på image.html virker mere ikke efter jeg har ændret noget.

Test på

  • iPad 2, iOS 9.1
  • iPhone 4, iOS 9.1.
  • Samsung Galaxy J5. Android 5.1.1

Samme billede i flere album

Lige nu kan man ikke uploade det samme billede i flere albums da

slug = models.SlugField(unique=True) i Image klassen.

Der skal også være et andet check i models.py#L95

Ændringen i #23 kan også rulles tilbage.

jfu/bootstrap og admin interferens

Jquery-file-upload formen på album change_form ændre på knapper og styling fordi den hiver bootstrap ind. Alt efter viewport størrelsen er der er også nogle gange nogle <div> der ligger over admin formen, så man ikke kan interagere med elementerne der i.

Galleri lightbox

yoxview mangler. Er det overhovedet det lightbox framework vi skal bruge?

Public alternativ til PIL.Image._getexif()

Der må være et public alternativ til PIL.Image._getexif().

image._getexif() fejler på nogle input.

Den er taget fra denne SO-tråd.

Med G0016891.JPG, taget med GoPro, feljer den med:

ZeroDivisionError at /galleri/upload/
division by zero

Traceback:
File "/Users/neic/Documents/TK/tkweb/venv/lib/python3.5/site-packages/django/core/handlers/base.py" in get_response
  132.                     response = wrapped_callback(request, *callback_args, **callback_kwargs)
File "/Users/neic/Documents/TK/tkweb/venv/lib/python3.5/site-packages/django/views/decorators/http.py" in inner
  45.             return func(request, *args, **kwargs)
File "/Users/neic/Documents/TK/tkweb/venv/lib/python3.5/site-packages/django/contrib/auth/decorators.py" in _wrapped_view
  22.                 return view_func(request, *args, **kwargs)
File "/Users/neic/Documents/TK/tkweb/tkweb/apps/gallery/views.py" in upload
  29.     instance.save()
File "/Users/neic/Documents/TK/tkweb/tkweb/apps/gallery/models.py" in save
  61.         self.date = get_exif_date_or_now(self.image)
File "/Users/neic/Documents/TK/tkweb/tkweb/apps/gallery/models.py" in get_exif_date_or_now
  21.     info = image._getexif()
File "/Users/neic/Documents/TK/tkweb/venv/lib/python3.5/site-packages/PIL/JpegImagePlugin.py" in _getexif
  391.         return _getexif(self)
File "/Users/neic/Documents/TK/tkweb/venv/lib/python3.5/site-packages/PIL/JpegImagePlugin.py" in _getexif
  425.         exif.update(info)
File "/Users/neic/Documents/TK/tkweb/venv/lib/python3.5/site-packages/PIL/TiffImagePlugin.py" in __getitem__
  354.             self[tag] = handler(self, data, self.legacy_api)  # check type
File "/Users/neic/Documents/TK/tkweb/venv/lib/python3.5/site-packages/PIL/TiffImagePlugin.py" in load_rational
  484.                      for num, denom in zip(vals[::2], vals[1::2]))
File "/Users/neic/Documents/TK/tkweb/venv/lib/python3.5/site-packages/PIL/TiffImagePlugin.py" in <genexpr>
  484.                      for num, denom in zip(vals[::2], vals[1::2]))
File "/Users/neic/Documents/TK/tkweb/venv/lib/python3.5/site-packages/PIL/TiffImagePlugin.py" in <lambda>
  482.         combine = lambda a, b: (a, b) if legacy_api else a / b

500 error ved upload af duplicate image slugs

Hvis man uploader 2 billeder som har det samme slug (f.eks. det samme billede to gange), så får man en 500 error i stedet for en besked om at man nok har uploadet det samme billede flere gange til det samme album.
Relevant kode:

if len(Image.objects.all().filter(slug=slug)) > 0:
# XXX: This results in a 500 error
raise ValidationError('A file with this slug already exists')

Tilføj Galleri (meta)

  • Upload interface
  • #10 Lightbox alternativ
  • Overvej hvor små/store thumbs skal være - jeg foreslår 6 thunbs/row på pc, 4 på tablet-ish, 3 på mobil.
  • Centrer billedet på enkeltbillede-siden #36
  • Maximér størrelsen af enkeltbillede uden at nødvendiggøre scroll. #36
  • Fjern margins/padding på billede på mobilskærme.
  • Tilføj link til download af originalbilledet, da det nu ikke længere er trivielt at gætte url'en selv.
  • Skjul dato for albums, hvor vi ikke er sikre på arrangementsdatoen (det skal helst være korrekt, når vi viser sådan nogle ting på hjemmesiden)
  • Benyt samme opløsninger på thumbs rundt omkring, så vi undgår at skulle generere alt for mange forskellige - men næsten ens - skaleringer. Løses måske med #33
  • Fix swipe #44
  • Tilpas URL'en i galleriet til at afspejle hvilket gfår, der er vist. Se #21
  • Kun load de billeder vi skal bruge #35
  • Andre filtyper #34
  • Stop afspilning af lyd og video #45

Billede URL

I #9 er det blevet diskuteret om billederne skal identificeres med et hash, eller det originale filnavn. Jeg flytter diskussionen her til.

Stop afspilning af lyd og video

Når man starter afspilning af en lyd eller video og ændre billede med tkgal.js fotsætter afspilningen selvom man ikke kan se elementet.

img med srcset og src loader src uanset om det skal bruges eller ej

I Chrome 48 på OSX henter <img srcset="small.jpg 500w, large.jpg 1000w" src="fallback.jpg"> stadig fallback.jpg selvom den aldrig bliver brugt. Det betyder at image.html loader alle 720px thumbnails selvom de aldrig bliver vist. Jeg ved ikke om det er en bug i vores kode eller i browseren.

Migrations

Indtil vi går live, kan alle ændre i migrations så de ikke virker i følgende apps:

  • tkweb.apps.calendar
  • tkweb.apps.gallery
  • tkweb.apps.tkbrand

Det betyder at du ikke kan være sikker på at du kan manage.py migrate din lokale database.

Følgende migrations skal bibeholdes i følge @Mortal:

  • idm

Guide

Der mangler en guide til hvordan man får et dev environment op og kører og en requirements.txt.

Styling af admin interface

  • Ny app med subclass af AdminSite Doc
  • Verbose names på fields
  • tk-brand hjælp på flatpages #77
  • Tilføj css:
input[readonly=true] {
  color: #888;
}

Hash collision i Imageslug

Der er ca. 40000 billeder på hjemmesiden nu. Med et hash med 36^6=~2.1e9 muligheder giver det en risiko for en hashcollition på ~37%. Se wikipedia.

Med en SLUG_SIZE = 9 er risikoen istedet ~0,0008%

LESS support

Til hackdayen blev vi enige om at LESS var smart, men at vi ikke ville hente node.js osv. ind som dependency på serveren. Vi blev enige om at løsningen var at vi havde både .less-filerne og en compilede .css-version i git. Man skal så selv sørge for at compile inden man committer noget nyt.

Det skal gøres og dokumenters.

Andre type filer i gallery

Der er en del andre typer filer i det nuværende filsystem. Vi skal have en måde bibeholde dem på.

Et hurtigt bud er at vi skal håndtere: mp3, mov, ram, avi, gif, txt, pdf, mp4/m4v

  • Afspilles i browseren
    • mp3 (konverteret ram)
    • mp4 (konverteret mov, avi, m4v) Se også #5.
    • gif
  • Link
    • txt
    • pdf
egrep -vi "jpe?g|png|thumbs" filesnames.txt | sort 
./04-0001/99-Blandet/asr.mp3
./06-0203/20-Cykeltur_til_Kaloe_Slotsruin/Originale/L1000352.mov
./06-0203/20-Cykeltur_til_Kaloe_Slotsruin/Originale/L1000356.mov
./07-0304/99-Blandet/P1-kronometer-16-11-03.mp3
./07-0304/99-Blandet/P1-kronometer-16-11-03.ram
./07-0304/99-Blandet/TV2-nyhederne22-19-11-03.ram
./08-0405/99-Lydfiler/CERM_i_Eksperimentet-6.1MB.mp3
./08-0405/99-Lydfiler/Eksperimentet-79.9MB.mp3
./10-0607/17-Hest-Julefrokost/Originale/frafiltrerede/MVI_6105.avi
./10-0607/18-KASS_i_KASS_og_NFs_hyldest_til_FORM/Originale/MVI_6012.avi
./10-0607/18-KASS_i_KASS_og_NFs_hyldest_til_FORM/Originale/MVI_6015.avi
./10-0607/34-Majfest/Originale/galleryStyle.css
./10-0607/34-Majfest/Originale/home.gif
./11-0708/14-BODYCRASHING/Originale/bodycrashing.zip
./11-0708/38-Griiillaften_og_UAHB/Originale/DSCF9743.AVI
./11-0708/98-Referater/01-HSTR.txt
./11-0708/98-Referater/02-BODYCRASHING.txt
./11-0708/98-Referater/03-OElforedrag.txt
./11-0708/98-Referater/04-Crazy_Christmas_Cabaret.txt
./11-0708/98-Referater/06-VKF.txt
./11-0708/98-Referater/07-Tur_i_Botanisk_have.txt
./11-0708/98-Referater/08-Hatten_Rundt.txt
./11-0708/98-Referater/09-Takt_og_Tone_Foredrag.txt
./11-0708/98-Referater/10-Kaloetur.txt
./12-0809/38-Sommergrill/Originale/DSCF0700.avi
./12-0809/90-Aarets_gang_paa_TK/Billede
./12-0809/92-Loebesedler/Originale/Originale-crop/crop.sh
./12-0809/92-Loebesedler/Originale/Originale-crop/crop.sh~
./12-0809/Div_ekstra/IMGP1566.MOV
./13-0910/21-LPT-Julefrokost/Originale/billede
./13-0910/21-LPT-Julefrokost/billede
./14-1011/90-AArets_gang_paa_TK/Originale/Brev til Marianne.pdf
./14-1011/90-AArets_gang_paa_TK/Originale/Brev til marianne 2.pdf
./14-1011/99-Video/GKA$$.AVI
./14-1011/99-Video/Latterforedrag1.AVI
./14-1011/99-Video/Latterforedrag2.AVI
./14-1011/99-Video/Latterforedrag3.AVI
./15-1112/07-HSTR/burde-slettes/test/oversigt.txt
./15-1112/07-HSTR/burde-slettes/test/oversigt.txt~
./15-1112/99-Video_og_lyd/BODYCRASHING.mp3
./15-1112/99-Video_og_lyd/ChrisMacDonald.MOV
./15-1112/99-Video_og_lyd/Happeninghappening.MOV
./15-1112/99-Video_og_lyd/J-dag-happening.AVI
./15-1112/99-Video_og_lyd/Kapsejlads.MOV
./15-1112/99-Video_og_lyd/KapsejladsHappening.MOV
./15-1112/99-Video_og_lyd/RathsackHappening.MOV
./17-1314/04-Forloev/originale/renaming.txt
./17-1314/12-HSTR/.swp
./17-1314/12-HSTR/renaming.sh
./17-1314/12-HSTR/renaming.txt
./17-1314/15-Stiftelsesfest/originale/MVI_5322.MOV
./17-1314/15-Stiftelsesfest/originale/MVI_5434.MOV
./17-1314/18-Skabsbundningstur_v5/.swp
./17-1314/18-Skabsbundningstur_v5/DSC_3060.m4v
./17-1314/38-KDRUK_MGP/Originale/kdruk-tropaaosto.mp4
./17-1314/files.txt

Album order

Lav albummodellen om:

  • Fjern order
  • Tilføj date
  • Tilføj 'Årets gang'

ShowPicture.php-emulator

Det skulle være rimelig nemt at emulere ShowPicture.php, så gamle links virker.

Ved at gemme et billedes gamle sti i Image modellen, kan ShowPicture.php-emulatoren finde den og lave en redirect.

Swipe i galleri

@furt11 skriver i #10

Galleriet kører nu. Der kunne godt tilføjes lidt javascript(jquery) registrering af horisontalt swipe. Det vil være meget brugbart på mobiler!

jQuery mobile har swipe events; https://api.jquerymobile.com/swipeleft/ f.eks. Men så skal vi loade endnu et javascript framework udover jquery.

Slettede billeder

Der bliver, af forskellige grunde, nogle gange slettet billeder fra den offentlige side. Vi bruger dog også hjemmesiden som det eneste arkiv vi har af billeder. Istedet for at slette billederne kan vi gøre dem ikke-offentlige med et BooleanField.

Det løser også halvdelen af #9.

Meningsfyldte unikke slugs for ulbums og images

Et unikt slug for hvert album til brug i URL'er (/galleri/gfyear/unik album-slug) bør tilføjes modellen. For at holde dem unikke kunne man tilføje '-årstal' til sluggen, hvis et tidligere album har samme navn. Hvis album med samme navn i samme år findes, bør albummet ikke kunne oprettes.

Ligeledes vil der kunne bruges unikke slugs til visning af billeder. Jeg forestiller mig /galleri/gfyear/album slug/billed-slug, hvor billed-slug'et kunne udgøres af timestamp for billedet ala den gamle hjemmeside. Disse timestamp-slugs ville således også kunne bruges til at ordne billederne i de enkelte gallerier.

Billede datetime fra exif

For at billederne bliver sorteret rigtigt burde vi sortere efter Exif.Image.DateTimeOriginal med fallback til Exif.Image.DateTime.

Vi kan også bruge datane til at lave slugs. Se #14.

TabularInline og model nedarvning

Med den nye BaseMedia som model= for InlineBaseMediaAdmin (tidligere InlineImageAdmin), bliver admin_thumbnail kaldt på BaseMedia, ikke på den nedarvede klasse, Image.

Det betyder at thumbnailet ikke bliver vist på admin siden.

Licens

Til hackday var der enighed om at Beerware er en passende licens

------------------------------------------------------------------------------
"THE BEER-WARE LICENSE" (Revision 42):
<[email protected]> wrote these files. As long as you retain this notice
you can do whatever you want with this stuff. If we meet some day, and you
think this stuff is worth it, you can buy us some beer in return. TÅGEKAMMERET
------------------------------------------------------------------------------

Jeg, @Mortal og @furt11 har tilkendegivet at det er ok. Er @tyilo også med?

Manglende statisk indhold

Følgende statisk indhold mangler:

/tk40/jubi40_histnew.php
/tk40/tk40new.php
/tk40/*.jpg
/J50Resume/J50-Jubiskrift.pdf
/J50Resume/J50-Sangbog.pdf
/J50Resume/*.jpg
/J50Resume.php
/J60/index.html
/J60/j60brev.pdf
/j60/*
/vedtaegter.pdf
/Grafik/TKlogo.jpg (skal erstattes af vektor)

Fix style på tk-brand

Efter 703b6be og 60418de er stylen på .tk-brand måske blevet bedere på Windows, men på OSX er det en tilbagegang. Det hele er desuden blevet bold.

Ser font-family: "Courier New", Courier, monospace; ikke acceptabelt up på Windows og Linux?

På OSX ser det lækkert ud på en HiDPI skærm, men er lidt gnidret på en skærm med 1x DPI. Det er specielt "AMME". Jeg kan ændre kerningen lidt.

OSX:
tket courier osx 2xdpi Courier 2xDPI
tket courier osx 1xdpi Courier 1xDPI
tket pt mono osx 1xdpi PT Mono 1xDPI
tket pt mono b osx 1xdpi PT Mono Bold 1xDPI

Generelt design (inden vi går live)

Som siden ser ud nu er bare et simpelt funktionelt design. Det er ikke noget jeg har tænkt nærmere over og det har altid været ment som en placeholder indtil nogen fandt på noget bedere.

Jeg mener at vi skal fokusere på at få erstattet den nuværende side først og fremmest. Vi kan i fremtiden forbedre designet, men det design vi går live med skal være mindst lige så godt som det gamle.

Er der nogen der har nogle indsigelser for at vi går live med det nuværende design?

Python 2-support

Eftersom Apache-serveren på prodekanus og på pulerau kun kan have enten mod_python med Python 2 eller mod_python med Python 3, kører vi indtil videre med Python 2 i production, da det er det nemmeste (og fra mit synspunkt det mest stabile) at sætte op.

Derfor bør hjemmesiden være Python 2+3-kompatibel. Heldigvis gør Django det nemt at være, hvis man er opmærksom på det.

Thumbnail generation er langsom

En lille test på min MBP med 32 billeder på i alt ~150 MiB viser at det tager det ~30 sekunder at generere alle thumbnails til album.html og ~2 minutter at generere til image.html. Det er selvfølge kun første load, men den første der besøger siden efter et nyt album er uploadet vil se det. Desuden vil det første upload på >100GB sikkert give problemer.

En mulighed er https://github.com/chhantyal/sorl-thumbnail-async

Mappestruktur til billeder

file_name i gallery/models.py er halv-arbitrær. Den burde istedet gemme dem som noget der ligner gfyearPP(gfyear) + "/" + arrangement + "/" + originalt_filnavn. Selfølgelig websafe.

Diskussionen startede i #9.

Se også download link originalt billede i #4 (comment)

Redigere eksisterende album

Når album oprettes fungerer form-valideringen efter hensigten og forhindrer at gemme albummet, hvis slug er identisk med et andet albums.

Men når et album redigeres, bør valideringen ikke advare, når der er et album i databasen med samme slug, hvis dét er selv samme album der redigeres.

Jeg havde regnet med at 'exclude' i linje 27 i tkweb\apps\gallery\admin.py ville tillade at ændre et album uden at ændre slug;
ln 27: "qs = Album.objects.filter(slug=potentialslug).exclude(id=cleaned_data.get('id'))"

Nogen der kan gennemskue, hvad jeg gør forkert? Får et ændret album et nyt id og kan jeg derved ikke udelukke den på den måde?

/FURT

Hent BEST/FU fra database

Lige nu er bestfu siden statisk. Engang når vi får lavet en backend til alt persondata skal dataene hentes derfra.

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.