From: Olivier Matz Date: Thu, 8 Jul 2021 16:50:40 +0000 (+0200) Subject: first version of the new website X-Git-Url: http://git.droids-corp.org/?p=markerbeacon.git;a=commitdiff_plain;h=5b6e1f86d097cb362496af487d616420d233d8b3 first version of the new website --- diff --git a/.gitignore b/.gitignore new file mode 100644 index 0000000..e19ad4c --- /dev/null +++ b/.gitignore @@ -0,0 +1,7 @@ +__pycache__/ +*.py[cod] +.Python +venv/ +env/ +output/ +*~ diff --git a/README b/README new file mode 100644 index 0000000..b3710cc --- /dev/null +++ b/README @@ -0,0 +1,10 @@ +Build the site with: + +virtualenv venv +source venv/bin/activate +pip3 install pelican +make html + +Serve locally: + +make devserver diff --git a/content/20130220-new-website.rst b/content/20130220-new-website.rst new file mode 100644 index 0000000..7f5ce4c --- /dev/null +++ b/content/20130220-new-website.rst @@ -0,0 +1,16 @@ +The new website is online ! +########################### + +:date: 2013-02-20 +:tags: news +:category: News +:slug: new-website +:authors: Marker Beacon + +Opened 7 years ago, the old site http://marker.beacon.free.fr will be +closed soon. The new one, available at http://www.markerbeacon.org has a +darker graphical design, and is based on more modern technologies. + +This new website contains some recent pictures and audio/video streams, +it is also ready for the short-comming release of the first album of +Marker Beacon: "Dead Frequencies". diff --git a/content/20130222-setlist.rst b/content/20130222-setlist.rst new file mode 100644 index 0000000..8396a6d --- /dev/null +++ b/content/20130222-setlist.rst @@ -0,0 +1,28 @@ +The setlist of “Dead Frequencies” is available +############################################## + +:date: 2013-02-22 +:tags: news +:category: News +:slug: setlist-dead-frequencies +:authors: Marker Beacon + +The setlist of the first album of Marker Beacon is now available:: + + 01 Near Death Experience + 02 Time To Time + 03 Need You + 04 Despair + 05 New Shell + 06 Blaster + 07 Persian Tales + 08 Free + 09 Rain In Brain + 10 Drug Day + 11 Final Nightmare + 12 Slaughter + 13 Where Is My Savior + 14 I Still Call Your Name + 15 Megahertz + +The album is coming soon, be patient! diff --git a/content/20130405-masters-ready.rst b/content/20130405-masters-ready.rst new file mode 100644 index 0000000..59912e2 --- /dev/null +++ b/content/20130405-masters-ready.rst @@ -0,0 +1,17 @@ +“Dead Frequencies” masters are ready +#################################### + +:date: 2013-04-05 +:tags: news +:category: News +:slug: masters-ready +:authors: Marker Beacon + +We received yesterday the master CD of our coming album **Dead +Frequencies**. Thanks to Ephrem from `THD studio `_ for +his work (mix and mastering). + +The next steps for us are to finish the CD cover and send it with the +master to the factory for printing and pressing. + +See you soon for more good news ! diff --git a/content/20130410-sacem.rst b/content/20130410-sacem.rst new file mode 100644 index 0000000..a7f8b85 --- /dev/null +++ b/content/20130410-sacem.rst @@ -0,0 +1,18 @@ +The pressing of “Dead Frequencies” is authorized by the SACEM +############################################################# + +:date: 2013-04-10 +:tags: news +:category: News +:slug: sacem +:authors: Marker Beacon + +We received yesterday the authorization from the SACEM/SDRM (french +authors guild) for the replication of our CD **Dead Frequencies**. This +authorization is mandatory before sending the pressing request to the +factory. + +This authorization is free for us as we are the composers and authors of +the music and because we are not members of the SACEM. It was done +through their web interface +`http://opo.sacem.fr `_. diff --git a/content/20130425-front-cover.rst b/content/20130425-front-cover.rst new file mode 100644 index 0000000..1cb6b41 --- /dev/null +++ b/content/20130425-front-cover.rst @@ -0,0 +1,21 @@ +The front cover of “Dead Frequencies” +##################################### + +:date: 2013-04-25 +:tags: news +:category: News +:slug: front-cover +:authors: Marker Beacon + +The release of our upcoming album is getting closer! If everything goes +well, we should be able to release it in may. The release date will be +officially announced on this website. But for the impatient fans... you +can already discover the front image of **Dead Frequencies** below. + +It was designed by our friend Aurélia. We would like to thank her again +for her hard work and we hope that she enjoyed to work on this project. + +.. image:: ../images/Marker_Beacon-Dead_Frequencies-Front_Cover.jpg + :align: center + :alt: Marker_Beacon-Dead_Frequencies-Front_Cover + diff --git a/content/20130429-social-media.rst b/content/20130429-social-media.rst new file mode 100644 index 0000000..c818e4b --- /dev/null +++ b/content/20130429-social-media.rst @@ -0,0 +1,18 @@ +Follow us on social networks +############################ + +:date: 2013-04-29 +:tags: news +:category: News +:slug: social-media +:authors: Marker Beacon + +Keep connected with us and be notified of all latest events on `Marker +Beacon Facebook +page `_. + +Follow us, share and comment our news with your friends ! + +.. image:: ../images/like.png + :align: center + :alt: Like us on facebook diff --git a/content/20130520-cd-production.rst b/content/20130520-cd-production.rst new file mode 100644 index 0000000..60259c0 --- /dev/null +++ b/content/20130520-cd-production.rst @@ -0,0 +1,22 @@ +The production of the CD will start soon +######################################## + +:date: 2013-05-20 +:tags: news +:category: News +:slug: cd-production +:authors: Marker Beacon + +We received last friday some fresh news from `Hurricane +Entertainment `_, the company +which is the intermediary between the pressing factory (`OK +Media `_) and us. The factory has finished the +"final proof" for the cover and the CD, which is the last step before +starting the production. + +They should be able to communicate us a delivery date in the coming +days, and as a result we will soon be able to announce the release date +of ***Dead Frequencies**, the first album of Marker Beacon. + +We would like to thank all our friends and fans for their support and +their patience! diff --git a/content/20130526-release-date.rst b/content/20130526-release-date.rst new file mode 100644 index 0000000..fdc5778 --- /dev/null +++ b/content/20130526-release-date.rst @@ -0,0 +1,14 @@ +Release date of Dead Frequencies +################################ + +:date: 2013-05-26 +:tags: news +:category: News +:slug: release-date +:authors: Marker Beacon + +Hi everybody! Once again, here are some news of our upcoming album +**Dead Frequencies**. The production of the CDs started last week and we +are now able to announce an official release date for the album: + +**Be prepared, june 8, 2013** diff --git a/content/20130603-dead-frequencies-available.rst b/content/20130603-dead-frequencies-available.rst new file mode 100644 index 0000000..82be7e6 --- /dev/null +++ b/content/20130603-dead-frequencies-available.rst @@ -0,0 +1,19 @@ +Dead Frequencies is available +############################# + +:date: 2013-06-03 +:tags: news +:category: News +:slug: dead-frequencies-available +:authors: Marker Beacon + +We received the CDs sooner than expected, so there’s no reason to wait +anymore! You can listen to it and download it from the +`audio <{filename}pages/audio.rst>`_ section, and you can buy it from the `online +shop <{filename}pages/shop.rst>`_. + +.. image:: ../images/P1040484_v1.jpg + :align: center + :alt: Dead Frequencies CD + :width: 50% + :target: ../images/P1040484_v1.jpg diff --git a/content/20130630-they-talk-about-marker-beacon.rst b/content/20130630-they-talk-about-marker-beacon.rst new file mode 100644 index 0000000..450afa5 --- /dev/null +++ b/content/20130630-they-talk-about-marker-beacon.rst @@ -0,0 +1,35 @@ +They talk about Marker Beacon +############################# + +:date: 2013-06-30 +:tags: news +:category: News +:slug: they-talk-about-marker-beacon +:authors: Marker Beacon + +Following the release of **Dead Frequencies**, Marker Beacon was quoted +in several blogs or podcasts this month: + +- `Frederic Bezies’ + blog `_ (fr) +- `Open Metalcast + #75 `_ + (en) +- `Metal + Garrasia `_ + (eus) +- `Metal-Libre Facebook Page `_ + (es) +- `Free Metal + Albums `_ + (en) + +Many thanks to them for talking about us! By the way, Marker Beacon is +also registered on many music sites: + +- `SoundCloud `_ +- `Bandcamp `_ +- `Jamendo `_ +- `Soun-Music `_ + +Don’t hesitate to drop us a message on these platform or on our website! diff --git a/content/20130730-la-grosse-radio.rst b/content/20130730-la-grosse-radio.rst new file mode 100644 index 0000000..f704716 --- /dev/null +++ b/content/20130730-la-grosse-radio.rst @@ -0,0 +1,20 @@ +Marker Beacon is supported by “La Grosse Radio” +############################################### + +:date: 2013-07-30 +:tags: news +:category: News +:slug: la-grosse-radio +:authors: Marker Beacon + +`La Grosse Radio `_ is a french webradio (in fact, +3 webradios: metal, rock and reggae) that broadcasts famous bands but also +supports independant bands like us. We’re really happy to be selected by one the +most famous webradio in France and would like to thank them here! + +The track we proposed is “Where Is My Savior”. + +.. image:: images/artiste-soutenu.png + :align: center + :target: http://www.lagrosseradio.com + :alt: La Grosse Radio diff --git a/content/20130921-september-news.rst b/content/20130921-september-news.rst new file mode 100644 index 0000000..29e4855 --- /dev/null +++ b/content/20130921-september-news.rst @@ -0,0 +1,32 @@ +September News +############## + +:date: 2013-09-21 +:tags: news +:category: News +:slug: september-news +:authors: Marker Beacon + +Hello There! + +A small post to give you some statistics (since june): + +- the web site has about 500 unique visitors every month +- an average of 20GB of music download per month +- about 1500 listens per month +- we sold about 50 CDs, it represents about 20% of the money we spent + +And some news: + +- We will appear on the next `Pavillon666 compilation + `_ +- Pavillon666 wrote an `article about Dead Frequencies + `_ +- Marker Beacon is now on `opsound `_ +- Marker Beacon will be on `max2son `_ +- Many people use our music on `youtube + `_ +- Another of our music (Time To Time) is broadcasted on `La Grosse Radio Metal + `_ +- We will be broadcasted on `Metal Heart Webradio + `_ diff --git a/content/20140202-first-web-review.rst b/content/20140202-first-web-review.rst new file mode 100644 index 0000000..10b0755 --- /dev/null +++ b/content/20140202-first-web-review.rst @@ -0,0 +1,31 @@ +First 2014 web review +##################### + +:date: 2014-02-02 +:tags: news +:category: News +:slug: first-2014-web-review +:authors: Marker Beacon + +First, Happy New Year to all of you and best wishes from Marker Beacon! + +Let’s check the news from the web: + +- We are on `Alter Musique `_ +- We are on `EasyZic `_ +- We are part the `Emergences `_ +- We are on `Grooveshark `_ +- We are (again) broadcasted by `La Grosse Radio `_ +- We are broadcasted by `RockRadio.com `_ +- We are on `darkport.org `_ +- We are on `ListenerFeedback `_ +- We are on `ReverbNation `_ +- We are on `Archive.org `_ +- We hope to be soon on `Aimsalibre `_ +- We hope to be soon on `Magnatune `_ +- We are even on some download/torrents forums… easy to find them from google + +Thank you to all these web sites and thank you to all of our listeners. Remember +that our album Dead Frequencies is also available as a physical CD. Buying the +CD would really help us to reimburse our expenses and prepare the future next +album! diff --git a/content/20210704-new-website.rst b/content/20210704-new-website.rst new file mode 100644 index 0000000..3ff89c1 --- /dev/null +++ b/content/20210704-new-website.rst @@ -0,0 +1,24 @@ +New website +########### + +:date: 2021-07-04 +:tags: news +:category: News +:slug: new-website2 +:authors: Marker Beacon + +After 7 years (!) without news, here is a quick update about the web +site. The previous one was based on `Wordpress +`_, and its maintenance was taking too much time +(keeping it up to date to avoid security flaws, manage spams on +comments, ...). Also, it was very very slow. + +The new one is powered by `Pelican `_, and is +statically generated (so, much faster and more secured). Most of the +previous content was imported into the new site. + +Unfortunately, this update does not foreshadow any other news on music +side. But we still all hope to work on another album, one day or +another... + +See you in less than 7 years this time ;) diff --git a/content/images/Marker_Beacon-Dead_Frequencies-Front_Cover.jpg b/content/images/Marker_Beacon-Dead_Frequencies-Front_Cover.jpg new file mode 100755 index 0000000..fbcfd3d Binary files /dev/null and b/content/images/Marker_Beacon-Dead_Frequencies-Front_Cover.jpg differ diff --git a/content/images/P1040484_v1.jpg b/content/images/P1040484_v1.jpg new file mode 100644 index 0000000..1116330 Binary files /dev/null and b/content/images/P1040484_v1.jpg differ diff --git a/content/images/artiste-soutenu.png b/content/images/artiste-soutenu.png new file mode 100644 index 0000000..131b1d5 Binary files /dev/null and b/content/images/artiste-soutenu.png differ diff --git a/content/images/cc-by-sa.png b/content/images/cc-by-sa.png new file mode 100644 index 0000000..f0a944e Binary files /dev/null and b/content/images/cc-by-sa.png differ diff --git a/content/images/concert_maroquinerie_17_12_06_sm__19-300x199.jpg b/content/images/concert_maroquinerie_17_12_06_sm__19-300x199.jpg new file mode 100644 index 0000000..e92dd54 Binary files /dev/null and b/content/images/concert_maroquinerie_17_12_06_sm__19-300x199.jpg differ diff --git a/content/images/gallery/band/concert_fallenfest_21_01_07__001.jpg b/content/images/gallery/band/concert_fallenfest_21_01_07__001.jpg new file mode 100755 index 0000000..f2e234a Binary files /dev/null and b/content/images/gallery/band/concert_fallenfest_21_01_07__001.jpg differ diff --git a/content/images/gallery/band/concert_klub_18_11_07__036.jpg b/content/images/gallery/band/concert_klub_18_11_07__036.jpg new file mode 100755 index 0000000..28ff9b2 Binary files /dev/null and b/content/images/gallery/band/concert_klub_18_11_07__036.jpg differ diff --git a/content/images/gallery/band/concert_klub_18_11_07__071.jpg b/content/images/gallery/band/concert_klub_18_11_07__071.jpg new file mode 100755 index 0000000..f5dc924 Binary files /dev/null and b/content/images/gallery/band/concert_klub_18_11_07__071.jpg differ diff --git a/content/images/gallery/band/concert_klub_18_11_07__077.jpg b/content/images/gallery/band/concert_klub_18_11_07__077.jpg new file mode 100755 index 0000000..27ea2ec Binary files /dev/null and b/content/images/gallery/band/concert_klub_18_11_07__077.jpg differ diff --git a/content/images/gallery/band/concert_maroquinerie_17_12_06_sm__10.jpg b/content/images/gallery/band/concert_maroquinerie_17_12_06_sm__10.jpg new file mode 100755 index 0000000..8bafe8a Binary files /dev/null and b/content/images/gallery/band/concert_maroquinerie_17_12_06_sm__10.jpg differ diff --git a/content/images/gallery/band/concert_maroquinerie_17_12_06_sm__11.jpg b/content/images/gallery/band/concert_maroquinerie_17_12_06_sm__11.jpg new file mode 100755 index 0000000..8a431ee Binary files /dev/null and b/content/images/gallery/band/concert_maroquinerie_17_12_06_sm__11.jpg differ diff --git a/content/images/gallery/band/concert_maroquinerie_17_12_06_sm__12.jpg b/content/images/gallery/band/concert_maroquinerie_17_12_06_sm__12.jpg new file mode 100755 index 0000000..cbf3854 Binary files /dev/null and b/content/images/gallery/band/concert_maroquinerie_17_12_06_sm__12.jpg differ diff --git a/content/images/gallery/band/concert_maroquinerie_17_12_06_sm__13.jpg b/content/images/gallery/band/concert_maroquinerie_17_12_06_sm__13.jpg new file mode 100755 index 0000000..0ba25e4 Binary files /dev/null and b/content/images/gallery/band/concert_maroquinerie_17_12_06_sm__13.jpg differ diff --git a/content/images/gallery/band/concert_maroquinerie_17_12_06_sm__14.jpg b/content/images/gallery/band/concert_maroquinerie_17_12_06_sm__14.jpg new file mode 100755 index 0000000..682e830 Binary files /dev/null and b/content/images/gallery/band/concert_maroquinerie_17_12_06_sm__14.jpg differ diff --git a/content/images/gallery/band/concert_maroquinerie_17_12_06_sm__15.jpg b/content/images/gallery/band/concert_maroquinerie_17_12_06_sm__15.jpg new file mode 100755 index 0000000..0c5ede1 Binary files /dev/null and b/content/images/gallery/band/concert_maroquinerie_17_12_06_sm__15.jpg differ diff --git a/content/images/gallery/band/concert_maroquinerie_17_12_06_sm__17.jpg b/content/images/gallery/band/concert_maroquinerie_17_12_06_sm__17.jpg new file mode 100755 index 0000000..2f93c02 Binary files /dev/null and b/content/images/gallery/band/concert_maroquinerie_17_12_06_sm__17.jpg differ diff --git a/content/images/gallery/band/concert_maroquinerie_17_12_06_sm__19.jpg b/content/images/gallery/band/concert_maroquinerie_17_12_06_sm__19.jpg new file mode 100755 index 0000000..389648b Binary files /dev/null and b/content/images/gallery/band/concert_maroquinerie_17_12_06_sm__19.jpg differ diff --git a/content/images/gallery/band/concert_maroquinerie_17_12_06_sm__191.jpg b/content/images/gallery/band/concert_maroquinerie_17_12_06_sm__191.jpg new file mode 100755 index 0000000..389648b Binary files /dev/null and b/content/images/gallery/band/concert_maroquinerie_17_12_06_sm__191.jpg differ diff --git a/content/images/gallery/band/concert_maroquinerie_17_12_06_sm__2.jpg b/content/images/gallery/band/concert_maroquinerie_17_12_06_sm__2.jpg new file mode 100755 index 0000000..b16b7c3 Binary files /dev/null and b/content/images/gallery/band/concert_maroquinerie_17_12_06_sm__2.jpg differ diff --git a/content/images/gallery/band/concert_maroquinerie_17_12_06_sm__21.jpg b/content/images/gallery/band/concert_maroquinerie_17_12_06_sm__21.jpg new file mode 100755 index 0000000..5ca93cc Binary files /dev/null and b/content/images/gallery/band/concert_maroquinerie_17_12_06_sm__21.jpg differ diff --git a/content/images/gallery/band/concert_maroquinerie_17_12_06_sm__3.jpg b/content/images/gallery/band/concert_maroquinerie_17_12_06_sm__3.jpg new file mode 100755 index 0000000..f031153 Binary files /dev/null and b/content/images/gallery/band/concert_maroquinerie_17_12_06_sm__3.jpg differ diff --git a/content/images/gallery/band/concert_maroquinerie_17_12_06_sm__4.jpg b/content/images/gallery/band/concert_maroquinerie_17_12_06_sm__4.jpg new file mode 100755 index 0000000..27efdb8 Binary files /dev/null and b/content/images/gallery/band/concert_maroquinerie_17_12_06_sm__4.jpg differ diff --git a/content/images/gallery/band/concert_maroquinerie_17_12_06_sm__5.jpg b/content/images/gallery/band/concert_maroquinerie_17_12_06_sm__5.jpg new file mode 100755 index 0000000..f2ad27c Binary files /dev/null and b/content/images/gallery/band/concert_maroquinerie_17_12_06_sm__5.jpg differ diff --git a/content/images/gallery/band/concert_maroquinerie_17_12_06_sm__7.jpg b/content/images/gallery/band/concert_maroquinerie_17_12_06_sm__7.jpg new file mode 100755 index 0000000..be4ee63 Binary files /dev/null and b/content/images/gallery/band/concert_maroquinerie_17_12_06_sm__7.jpg differ diff --git a/content/images/like.png b/content/images/like.png new file mode 100644 index 0000000..3beb8ba Binary files /dev/null and b/content/images/like.png differ diff --git a/content/pages/about-marker-beacon.rst b/content/pages/about-marker-beacon.rst new file mode 100644 index 0000000..35bf8ab --- /dev/null +++ b/content/pages/about-marker-beacon.rst @@ -0,0 +1,22 @@ +About Marker Beacon +################### + +Marker Beacon is a melodic heavy/thrash metal band created in 2000. Between 2004 +and 2006, the group plays in several concert halls in Paris (La Maroquinerie, +The New Morning, The Gibus, …) and releases a demo. + +After a quite long period, the band meets again in 2011 to record a new +album. Marker Beacon becomes a non-profit association in 2012. After two years +of recording, in 2013, the album is available in audio-CD format and is freely +downloadable from the website. + +.. image:: ../images/concert_maroquinerie_17_12_06_sm__19-300x199.jpg + :align: center + :alt: Marker Beacon - Live Maroquinerie 2006 + +Marker Beacon is composed of: + +- Bruno Creuzet: guitar, vocals +- Miguel Diaz: drums +- Oliver Matz: guitar, backing vocals in concert +- Jerome Thiebaut: bass diff --git a/content/pages/articles.rst b/content/pages/articles.rst new file mode 100644 index 0000000..5ffe74a --- /dev/null +++ b/content/pages/articles.rst @@ -0,0 +1,162 @@ +Articles of the organization +############################ + +As we are a french organization, the articles are written in french. The +most important says: + + The goal of the association is the creation and recording of music as + well as the promotion and distribution of it. + +Here are the full articles in french: + +ARTICLE PREMIER – NOM +--------------------- + +Il est fondé entre les adhérents aux présents statuts une association +régie par la loi du 1er juillet 1901 et le décret du 16 août 1901, ayant +pour titre MARKER BEACON. + +ARTICLE 2 – BUT OBJET +--------------------- + +Cette association a pour objet la création et l’enregistrement de +musique ainsi que la promotion et la distribution de celle-ci. + +ARTICLE 3 – SIEGE SOCIAL +------------------------ + +Le siège social est fixé chez Olivier MATZ (adresse masquée). Il pourra +être transféré par simple décision du bureau ; + +Article 4 – DUREE +----------------- + +La durée de l’association est illimitée. + +ARTICLE 5 – COMPOSITION +----------------------- + +L’association se compose de : + +– Membres fondateurs : sont membres fondateurs les personnes physiques +qui ont créé et porté le projet associatif : Bruno CREUZET et Olivier +MATZ + +– Membres actifs : sont membres actifs les personnes physiques qui +s’impliquent dans l’association et contribuent à son essor. + +ARTICLE 6 – ADMISSION +--------------------- + +Pour faire partie de l’association, il faut être agréé par le bureau, +qui statue, lors de chacune de ses réunions, sur les demandes +d’admission présentées. + +ARTICLE 7 – MEMBRES – COTISATIONS +--------------------------------- + +Les membres fondateurs et membres actifs prennent l’engagement de verser +annuellement une somme dont le montant est précisé dans le règlement +intérieur. Cette somme est initialement fixée à 0 euros. + +Toute cotisation pourra être rachetée moyennant le paiement d’une somme +minima égale à dix fois son montant annuel, sans que la somme globale +puisse excéder 16 €. + +ARTICLE 8. – RADIATIONS +----------------------- + +La qualité de membre se perd par : – La démission; – Le décès; – La +radiation prononcée par le bureau pour non-paiement de la cotisation ou +pour motif grave, l’intéressé ayant été invité par lettre recommandée à +fournir des explications devant le bureau et/ou par écrit. + +ARTICLE 10. – RESSOURCES +------------------------ + +Les ressources de l’association comprennent : – Le montant des droits +d’entrée et des cotisations; – Les subventions de l’Etat, des +départements et des communes. – Toutes les ressources autorisées par +les lois et règlements en vigueur, par exemple la vente des musiques +produites ou les bénéfices réalisés par l’organisation de concert. + +ARTICLE 11 – ASSEMBLEE GENERALE ORDINAIRE +----------------------------------------- + +L’assemblée générale ordinaire comprend tous les membres de +l’association à quelque titre qu’ils soient. + +Elle se réunit au moins une fois par an. + +Quinze jours au moins avant la date fixée, les membres de l’association +sont convoqués par les soins du président. L’ordre du jour figure sur +les convocations. Le président, assisté des membres du bureau, préside +l’assemblée et expose la situation morale ou l’activité de +l’association. Le trésorier rend compte de sa gestion et soumet les +comptes annuels (bilan, compte de résultat et annexe) à l’approbation de +l’assemblée. L’assemblée générale fixe le montant des cotisations +annuelles et du droit d’entrée à verser par les différentes catégories +de membres. Ne peuvent être abordés que les points inscrits à l’ordre +du jour. + +Les décisions sont prises à la majorité des voix des membres présents ou +représentés. Il est procédé, après épuisement de l’ordre du jour, au +renouvellement des membres sortants du bureau. + +Toutes les délibérations sont prises à main levée. + +Les décisions des assemblées générales s’imposent à tous les membres, y +compris absents ou représentés. + +ARTICLE 12 – ASSEMBLEE GENERALE EXTRAORDINAIRE +---------------------------------------------- + +Si besoin est, ou sur la demande de la moitié plus un des membres +inscrits, le président peut convoquer une assemblée générale +extraordinaire, suivant les modalités prévues aux présents statuts et +uniquement pour modification des statuts ou la dissolution ou pour des +actes portant sur des immeubles. Les modalités de convocation sont les +mêmes que pour l’assemblée générale ordinaire. Les délibérations sont +prises à la majorité des membres présents ou représentés. + +ARTICLE 13 – LE BUREAU +---------------------- + +L’association est dirigée par un bureau de 2 membres: – Un président; – +Un trésorier. + +Le bureau est élu pour 1 année par l’assemblée générale. Les membres +sont rééligibles. + +Les décisions du bureau sont prises à l’unanimité. + +ARTICLE 14 – INDEMNITES +----------------------- + +Toutes les fonctions, y compris celles des membres du bureau, sont +gratuites et bénévoles. Seuls les frais occasionnés par +l’accomplissement de leur mandat sont remboursés sur justificatifs. Le +rapport financier présenté à l’assemblée générale ordinaire présente, +par bénéficiaire, les remboursements de frais de mission, de déplacement +ou de représentation. + +ARTICLE 15 – REGLEMENT INTERIEUR +-------------------------------- + +Un règlement intérieur peut être établi par le bureau, qui le fait alors +approuver par l’assemblée générale. + +Ce règlement éventuel est destiné à fixer les divers points non prévus +par les présents statuts, notamment ceux qui ont trait à +l’administration interne de l’association. + +ARTICLE – 16 – DISSOLUTION +-------------------------- + +En cas de dissolution prononcée selon les modalités prévues à l’article +12, un ou plusieurs liquidateurs sont nommés, et l’actif, s’il y a lieu, +est dévolu conformément aux décisions de l’assemblée générale +extraordinaire qui statue sur la dissolution ou à une association ayant +des buts similaires. + +Fait à Ris Orangis, le 4 août 2012 diff --git a/content/pages/audio.rst b/content/pages/audio.rst new file mode 100644 index 0000000..05fa2ef --- /dev/null +++ b/content/pages/audio.rst @@ -0,0 +1,41 @@ +Audio +##### + +You can download and distribute our music freely (see the +`license page <{filename}license.rst>`_ for details). If you like our music, +you can buy our CD in the `online shop` and make a donation to support us. + +.. image:: ../images/cc-by-sa.png + :align: center + :alt: CC-BY-SA + :target: http://creativecommons.org/licenses/by-sa/3.0/ + +Streaming +--------- + +Listen directly from the website: + +.. youtube:: 0qpfw2tKq-o?listType=playlist&list=PLfIJnRMV_i9mhGL9wTxWo-3fBDdbBry08&rel=0 + +Download +-------- + +Download Dead Frequencies: + +.. |cover| image:: ../images/Marker_Beacon-Dead_Frequencies-Front_Cover.jpg + :width: 80% + :alt: Marker_Beacon-Dead_Frequencies-Front_Cover + +.. table:: + + ===================== ======================================================= + |cover| - `zip archive containing mp3 (320 kbit/s) + `_ + - `zip archive containing ogg (Vorbis 320 kbit/s) + `_ + - `zip archive containing flac (lossless + compression format) + `_ + - `zip archive containing wav (raw audio) + `_ + ===================== ======================================================= diff --git a/content/pages/faq.rst b/content/pages/faq.rst new file mode 100644 index 0000000..41540c4 --- /dev/null +++ b/content/pages/faq.rst @@ -0,0 +1,160 @@ +FAQ +### + +Your music is distributed under the terms of the Creative Commons BY-SA 3.0, what does that mean? +------------------------------------------------------------------------------------------------- + +In two words, you have the right to: + +- **Freely download and listen to our music** +- Copy and distribute our music as soon as you credit us for this work +- Make derivative works, provided that you cite the author and release + your work under the same license. + +You can get to the `Creative Commons Website +`_ for more details. + +So you are just doing free music? +--------------------------------- + +Yes and No. The term “free music” in english is a bit ambiguous because +it may mean “zero price” or “with little restrictions” (see the +`license <{filename}license.rst>`_). Refer to the `Wikipedia +article `_ for more details. + +I would like to use your music in a video, am I allowed to do it? +----------------------------------------------------------------- + +If the license of your video is CC-BY-SA, you can. + +Else, you need to ask us first. Don’t hesitate to contact us! + +Why not selling your music like everyone else? +---------------------------------------------- + +We want everyone to have access to our music (and not just a small piece +in degraded quality). We want to give the opportunity to those who come +on the website to listen to what Marker Beacon produces in the best +conditions, as often as they want. + +By **respecting people who like our music**, we believe that we +encourage them to support our project. + +In addition to all of this, we think that access to culture should not +necessarily be traded. Open source projects like Wikipedia and Linux +show that alternate approaches are also possible! + +“Marker Beacon is a non-profit organization”: what does that mean? +------------------------------------------------------------------ + +Being an non-profit organization (in french: association loi 1901) +guaranties that the revenues of the association will only be used to +serve the goals of the association, which are: compose, record, +distribute our music. (refer to the `articles of the +organization <{filename}articles.rst>`_ for more +details), and not to serve the interests of the members of the band (for +instance buy us golden toilets). + +Who funded the production of your CD? +------------------------------------- + +All costs incurred for the production of CD are contributions made by +the members of the band. These contributions are called “apport” in +french: in the legal sense of the term, it is somehow comparable to a 0% +loan made by members of the band to the association. + +We hope that the association will recover funds through the sale of CDs, +so we will be able to reimburse the contributions to the members. After +that, the rest of funds serve the interests of the association (see the +`articles <{filename}articles.rst>`_), in other words +recording a new album! + +How do you define the price of your CD? +--------------------------------------- + +Despite downloading our music is free, the CD is paying for the simple +reason that it has manufacturing cost. But more than the price of the +item itself, **the purchase of our CD is seen as a symbolic act, +supporting Marker Beacon**. + +The price of our CD is 9.90 euros. If we substract the cost of the +delivery and the margin of paypal, it means we would have to sell about +700 units to reimburse all costs. However we give our listeners the +opportunity to give more: for reference, a commercial album costs about +15-20 euros. If you want to help us to fund a second album, take a look +to the account page, and decide by yourself what amount would be the +best! + +When will the next album be released? +------------------------------------- + +The composition of new music already started! As recording will be done +in our home studio, it does not cost us anything. But for anything that +requires an access to a professional studio we have to wait that the +organization have enough money for that… in short, as soon as we sell +enough CD and receive enough donations, we can do it! + +What will you do if you sell millions of CD? +-------------------------------------------- + +If you read the other answers of the FAQ above, you know that: + +- It is very unlikely 😉 +- The money would only serve the goals of the association: the creation + and recording of music as well as its distribution. +- We would support other projects in accordance with the articles of + the organization +- Probably we would also become masters of the world + +How did you record your music? +------------------------------ + +The recording has been made by us in our home studio. Most guitars go +through an ENGL amp Powerball, others were made on a Marsall JMP1 and +ADA MP2. The bass goes to the console (Tascam DM24) through a DI and a +distortion (Ibanez DS7). For the vocals, we used a Shure SM7A in +directly plugged to the console. The drums are initially performed by a +free software (`hydrogen `_) but +reworked by the studio. The synthesizers are done with +`rosegarden `_, +`fluidsynth `_ and +`zynaddsubfx `_. + +All these tracks have been then exported to +`ardour `_, a great (and free) multitrack audio +sequencer. Some tracks have been slightly reworked, cleaned, and +pre-mixed by us. Then all was exported again and sent to the `THD +studio `_ for mix + mastering. Ephrem +Charmois did a really great job! + +Who designed the cover of “Dead Frequencies”? +--------------------------------------------- + +All graphical design of “Dead Frequencies” is done by Aurélia Trutet. +Thank you very much to her! + +Who took the pictures? +---------------------- + +The pictures for “Dead Frequencies” are done by Sylvain Mary (2006-2007) +and Pascal Bally. We would like to thank them here. + +Are you a member of the SACEM or another authors guild? +------------------------------------------------------- + +No: there is no benefit for us to be a member of the SACEM. + +For how long Marker Beacon have been existing? +---------------------------------------------- + +The band have been existing in its current formation since 2000. + +What are your influences? +------------------------- + +We define ourselves as a melodic heavy/thrash metal band. + +Our influences are diverse, they range from the Rock (Foo Fighters +Smashing Pumpkins, Joe Satriani) to Black Metal (Dimmu Borgir, Immortal) +through Heavy Metal (Metallica, Iron Maiden) or Melodic Death (In +Flames, Soilwork). diff --git a/content/pages/gallery.rst b/content/pages/gallery.rst new file mode 100644 index 0000000..05c7c10 --- /dev/null +++ b/content/pages/gallery.rst @@ -0,0 +1,7 @@ +Gallery +####### + +:gallery: band +:template: gallery + +Some photos of our concerts at La Maroquinerie, Le Klub, and Fallenfest. diff --git a/content/pages/license.rst b/content/pages/license.rst new file mode 100644 index 0000000..effc025 --- /dev/null +++ b/content/pages/license.rst @@ -0,0 +1,22 @@ +License +####### + +Our music is released under the terms of the Creative Commons BY-SA 3.0 +(Attribution-ShareAlike). + +.. image:: ../images/cc-by-sa.png + :align: center + :alt: CC-BY-SA + :target: http://creativecommons.org/licenses/by-sa/3.0/ + +This license lets others remix, tweak, and build upon your work even for +commercial purposes, as long as they credit us and license their new +creations under the identical terms. This license is often compared to +“copyleft” free and open source software licenses. All new works based +on ours will carry the same license, so any derivatives will also allow +commercial use. This is the license used by Wikipedia, and is +recommended for materials that would benefit from incorporating content +from Wikipedia and similarly licensed projects. + +You can get to the `Creative Commons Website +`_ for more details. diff --git a/content/pages/shop.rst b/content/pages/shop.rst new file mode 100644 index 0000000..3e214b5 --- /dev/null +++ b/content/pages/shop.rst @@ -0,0 +1,85 @@ +Shop +#### + +Buy the CD +---------- + +Our music is freely available on the `audio page +<{filename}audio.rst>`_, but if you like it and if you want to support +the band, you can purchase the CD. Marker Beacon is a non-profit +organization, and all the money we get is only used to fund the band +(production of albums, concerts). + +.. image:: ../images/Marker_Beacon-Dead_Frequencies-Front_Cover.jpg + :align: center + :alt: Marker_Beacon-Dead_Frequencies-Front_Cover + + +The starting price of our album “Dead Frequencies” is 9.90 euros, but +you can make an additional donation if you want! + +.. raw:: html + +
+ + + + + + + + + + + + + + + + + +
+ + Choose item (delivery to France included) +
+ +
+ + Message to the band (optional) +
+ +
+ + + +
+
+ + + + +
+ +If you are not in France, please `contact us +`_ first. + +Donate +------ + +If you already have the CD, or if you prefer the digital version, you +can make a donation to the organization: + +.. raw:: html + +
+ + + + +
diff --git a/pelicanconf.py b/pelicanconf.py index ee00085..2193df2 100644 --- a/pelicanconf.py +++ b/pelicanconf.py @@ -6,9 +6,9 @@ SITENAME = 'Marker Beacon' SITEURL = '' PATH = 'content' +THEME = 'themes/markerbeacon' TIMEZONE = 'Europe/Paris' - DEFAULT_LANG = 'en' # Feed generation is usually not desired when developing @@ -18,17 +18,38 @@ TRANSLATION_FEED_ATOM = None AUTHOR_FEED_ATOM = None AUTHOR_FEED_RSS = None +STATIC_PATHS = ['images', 'download'] + +DISPLAY_PAGES_ON_MENU = False +DISPLAY_CATEGORIES_ON_MENU = False +MENUITEMS = (('News', '/category/news.html'), + ('About', '/pages/about-marker-beacon.html'), + ('Audio', '/pages/audio.html'), + ('Gallery', '/pages/gallery.html'), + ('Shop', '/pages/shop.html'), + ('FAQ', '/pages/faq.html'),) + # Blogroll -LINKS = (('Pelican', 'https://getpelican.com/'), - ('Python.org', 'https://www.python.org/'), - ('Jinja2', 'https://palletsprojects.com/p/jinja/'), - ('You can modify those links in your config file', '#'),) +LINKS = (('Contact us: band@markerbeacon.org', 'mailto:band@markerbeacon.org'), + ('Music License: Creative Commons BY-SA 3.0', '/pages/license.html'),) # Social widget -SOCIAL = (('You can add links in your config file', '#'), - ('Another social link', '#'),) +SOCIAL = (('Facebook', 'https://www.facebook.com/MARKER-BEACON-120062054749024'), + ('Youtube', 'https://www.youtube.com/user/artemis92400/videos'),) DEFAULT_PAGINATION = 5 +PLUGIN_PATHS = ['plugins'] +PLUGINS = [ + 'pelican_youtube', + 'gallery', + 'thumbnailer', +] + +# thumbnailer config +IMAGE_PATH = 'images' +THUMBNAIL_KEEP_NAME = True +THUMBNAIL_KEEP_TREE = True + # Uncomment following line if you want document-relative URLs when developing -#RELATIVE_URLS = True \ No newline at end of file +#RELATIVE_URLS = True diff --git a/plugins/gallery/README.md b/plugins/gallery/README.md new file mode 100644 index 0000000..69d66db --- /dev/null +++ b/plugins/gallery/README.md @@ -0,0 +1,91 @@ +Gallery +================== + +* Allows an article to contain an album of pictures. +* All albums can also be syndicated into a central gallery page. + +## How to Use + +1. Group images into folders, with each folder representing an album. +2. Place all album folders within a folder, which should reside under content. +3. Insert `GALLERY_PATH` to your `pelicanconf.py` and set a path to that folder. By default it is `images/gallery`. + + ./content/images/gallery/{your albums} + +### Articles + +Attach an album to an article/post by placing a gallery metadata tag with the name of the album. + + gallery:album_name + +The template has access to the album name. + + article.album + +And the filename of images within an album. + + article.albumimages + +### Gallery Page + +Create a page and a gallery template (named gallery.html). And inform pelican to use the gallery template for the page. + + template:gallery + +The template has access to a dictionary of lists. +The dictionary key is the name of the album and the lists contain the filenames. + + page.gallery + +## Examples + +### article.html + +

{{ article.album }}

+
    + {% for image in article.galleryimages %} +
  • + {% endfor %} +
+ +### gallery.html + + {% for album, images in page.gallery.iteritems() %} +

{{ album }}

+
    + {% for image in images %} +
  • + {% endfor %} +
+ {% endfor %} + +### posts/foo.md + + title:Foo + gallery:albumname + +### pages/gallery.md + + title:All Images + template:gallery + +## Reasoning + +The album name and filenames are returned as opposed to the direct path to the images, +to allow flexibility of different thumbnail sizes to be used it different locations of a website. + + href="{{ SITEURL }}/static/images/gallery/{{album}}/{{ image }}" + href="{{ SITEURL }}/static/images/gallery200x200/{{album}}/{{ image }}" + +It also allows a thumbnail to link to the full image, +as well as the filename extension to be stripped and the title of an image to be displayed along side the title of an album. + +## Recommendation + +It is recommended to use this extension along with the thumbnailer plugin. + + RESIZE = [ + ('gallery', False, 200,200), + ] + +You may also wish to use this along with a gallery plugin such as [Colorbox](http://www.jacklmoore.com/colorbox/). diff --git a/plugins/gallery/__init__.py b/plugins/gallery/__init__.py new file mode 100644 index 0000000..c605999 --- /dev/null +++ b/plugins/gallery/__init__.py @@ -0,0 +1 @@ +from .gallery import * diff --git a/plugins/gallery/gallery.py b/plugins/gallery/gallery.py new file mode 100644 index 0000000..3c56c81 --- /dev/null +++ b/plugins/gallery/gallery.py @@ -0,0 +1,75 @@ +import os +from pelican import signals + + +def get_content_path(pelican): + return pelican.settings.get('PATH') + + +def get_gallery_path(pelican): + gallery_path = pelican.settings.get('GALLERY_PATH', 'images/gallery') + content_path = get_content_path(pelican) + + return os.path.join(content_path, gallery_path) + + +def add_gallery_post(generator): + gallerycontentpath = get_gallery_path(generator) + + for article in generator.articles: + if 'gallery' in article.metadata.keys(): + album = article.metadata.get('gallery') + galleryimages = [] + + articlegallerypath=os.path.join(gallerycontentpath, album) + + if(os.path.isdir(articlegallerypath)): + for i in os.listdir(articlegallerypath): + if not i.startswith('.') and os.path.isfile(os.path.join(os.path.join(gallerycontentpath, album), i)): + galleryimages.append(i) + + article.album = album + article.galleryimages = sorted(galleryimages) + + +def add_gallery_page(generator): + gallerycontentpath = get_gallery_path(generator) + + for page in generator.pages: + if 'gallery' in page.metadata.keys(): + album = page.metadata.get('gallery') + galleryimages = [] + + pagegallerypath=os.path.join(gallerycontentpath, album) + + if(os.path.isdir(pagegallerypath)): + for i in os.listdir(pagegallerypath): + if not i.startswith('.') and os.path.isfile(os.path.join(os.path.join(gallerycontentpath, album), i)): + galleryimages.append(i) + + page.album = album + page.galleryimages = sorted(galleryimages) + + +def generate_gallery_page(generator): + gallerycontentpath = get_gallery_path(generator) + + for page in generator.pages: + if page.metadata.get('template') == 'gallery': + gallery = dict() + + for a in os.listdir(gallerycontentpath): + if not a.startswith('.') and os.path.isdir(os.path.join(gallerycontentpath, a)): + + for i in os.listdir(os.path.join(gallerycontentpath, a)): + if not a.startswith('.') and os.path.isfile(os.path.join(os.path.join(gallerycontentpath, a), i)): + gallery.setdefault(a, []).append(i) + gallery[a].sort() + + page.gallery=gallery + + +def register(): + signals.article_generator_finalized.connect(add_gallery_post) + signals.page_generator_finalized.connect(generate_gallery_page) + signals.page_generator_finalized.connect(add_gallery_page) diff --git a/plugins/pelican_youtube/__init__.py b/plugins/pelican_youtube/__init__.py new file mode 100644 index 0000000..495707a --- /dev/null +++ b/plugins/pelican_youtube/__init__.py @@ -0,0 +1,31 @@ +# Copyright (c) 2013 Kura +# Permission is hereby granted, free of charge, to any person obtaining a copy +# of this software and associated documentation files (the "Software"), to deal +# in the Software without restriction, including without limitation the rights +# to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +# copies of the Software, and to permit persons to whom the Software is +# furnished to do so, subject to the following conditions: + +# The above copyright notice and this permission notice shall be included in +# all copies or substantial portions of the Software. + +# THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +# IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY +# FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +# AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +# LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +# OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE +# SOFTWARE. + +# -*- coding: utf-8 -*- +__title__ = 'pelican-youtube' +__version__ = '0.2.0' +__author__ = 'Kura' +__credits__ = ["Kura", "Peter Bittner"] +__maintainer__ = "Kura" +__email__ = "kura@kura.io" +__status__ = "Stable" +__license__ = 'MIT' +__copyright__ = 'Copyright 2013' + +from pelican_youtube.youtube import register diff --git a/plugins/pelican_youtube/youtube.py b/plugins/pelican_youtube/youtube.py new file mode 100644 index 0000000..a79f55a --- /dev/null +++ b/plugins/pelican_youtube/youtube.py @@ -0,0 +1,100 @@ +# -*- coding: utf-8 -*- + +# Copyright (c) 2013 Kura +# Permission is hereby granted, free of charge, to any person obtaining a copy +# of this software and associated documentation files (the "Software"), to deal +# in the Software without restriction, including without limitation the rights +# to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +# copies of the Software, and to permit persons to whom the Software is +# furnished to do so, subject to the following conditions: + +# The above copyright notice and this permission notice shall be included in +# all copies or substantial portions of the Software. + +# THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +# IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY +# FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +# AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +# LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +# OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE +# SOFTWARE. + +from __future__ import unicode_literals + +from docutils import nodes +from docutils.parsers.rst import directives, Directive + + +class YouTube(Directive): + """ Embed YouTube video in posts. + + Based on the YouTube directive by Brian Hsu: + https://gist.github.com/1422773 + + VIDEO_ID is required, other arguments are optional + + Usage: + .. youtube:: VIDEO_ID + """ + + def boolean(argument): + """Conversion function for yes/no True/False.""" + value = directives.choice(argument, ('yes', 'True', 'no', 'False')) + return value in ('yes', 'True') + + required_arguments = 1 + optional_arguments = 5 + option_spec = { + 'class': directives.unchanged, + 'width': directives.positive_int, + 'height': directives.positive_int, + 'allowfullscreen': boolean, + 'seamless': boolean, + } + + final_argument_whitespace = False + has_content = False + + def run(self): + videoID = self.arguments[0].strip() + url = 'https://www.youtube.com/embed/{}'.format(videoID) + + width = self.options['width'] if 'width' in self.options else None + height = self.options['height'] if 'height' in self.options else None + fullscreen = self.options['allowfullscreen'] \ + if 'allowfullscreen' in self.options else True + seamless = self.options['seamless'] \ + if 'seamless' in self.options else True + + css_classes = 'youtube' + if 'class' in self.options: + css_classes += ' {}'.format(self.options['class']) + elif height is None: + # use responsive design with 16:9 aspect ratio by default + css_classes += ' {}'.format('youtube-16x9') + # no additional classes if dimensions (height/width) are specified + + iframe_arguments = [ + (width, 'width="{}"'), + (height, 'height="{}"'), + (fullscreen, 'allowfullscreen'), + (seamless, 'seamless frameBorder="0"'), + ] + + div_block = '
'.format(css_classes) + embed_block = '' + + return [ + nodes.raw('', div_block, format='html'), + nodes.raw('', embed_block, format='html'), + nodes.raw('', '
', format='html'), + ] + + +def register(): + directives.register_directive('youtube', YouTube) diff --git a/plugins/thumbnailer/Readme.md b/plugins/thumbnailer/Readme.md new file mode 100644 index 0000000..c4297ed --- /dev/null +++ b/plugins/thumbnailer/Readme.md @@ -0,0 +1,37 @@ +Thumbnail Creation of images +============================ + +**NOTE:** [This plugin has been moved to its own repository](https://github.com/pelican-plugins/thumbnailer). Please file any issues/PRs there. Once all plugins have been migrated to the [new Pelican Plugins organization](https://github.com/pelican-plugins), this monolithic repository will be archived. + +------------------------------------------------------------------------------- + +This plugin creates thumbnails for all of the images found under a specific directory, in various thumbnail sizes. +It requires `PIL` to function properly since `PIL` is used to resize the images, and the thumbnail will only be re-built +if it doesn't already exist (to save processing time). + +Installation +------------- + +Set up like any other plugin, making sure to set `PLUGIN_PATH` and add `thumbnailer` to the `PLUGINS` list. + +[PIL](http://www.pythonware.com/products/pil/) or [Pillow](http://pillow.readthedocs.org/en/latest/installation.html#) +is required. If you choose Pillow, you need to install some additional +[external libraries](http://www.pythonware.com/products/pil/) to add support for image types like `jpg`. + +Configuration +------------- + +* `IMAGE_PATH` is the path to the image directory. It should reside inside your content directory, and defaults to "pictures". +* `THUMBNAIL_DIR` is the path to the output sub-directory where the thumbnails are generated. +* `THUMBNAIL_SIZES` is a dictionary mapping size name to size specifications. + The generated filename will be `originalname_thumbnailname.ext` unless `THUMBNAIL_KEEP_NAME` is set. +* `THUMBNAIL_KEEP_NAME` is a Boolean that, if set, puts the file with the original name in a thumbnailname folder, named like the key in `THUMBNAIL_SIZES`. +* `THUMBNAIL_KEEP_TREE` is a Boolean that, if set, saves the image directory tree. +* `THUMBNAIL_INCLUDE_REGEX` is an optional string that is used as regular expression to restrict thumbnailing to matching files. By default all files not starting with a dot are respected. + +Sizes can be specified using any of the following formats: + +* wxh will resize to exactly wxh cropping as necessary to get that size +* wx? will resize so that the width is the specified size, and the height will scale to retain aspect ratio +* ?xh same as wx? but will height being a set size +* s is a shorthand for wxh where w=h diff --git a/plugins/thumbnailer/__init__.py b/plugins/thumbnailer/__init__.py new file mode 100644 index 0000000..20797b1 --- /dev/null +++ b/plugins/thumbnailer/__init__.py @@ -0,0 +1 @@ +from .thumbnailer import * \ No newline at end of file diff --git a/plugins/thumbnailer/test_data/expected_exact.jpg b/plugins/thumbnailer/test_data/expected_exact.jpg new file mode 100644 index 0000000..5819792 Binary files /dev/null and b/plugins/thumbnailer/test_data/expected_exact.jpg differ diff --git a/plugins/thumbnailer/test_data/expected_height.jpg b/plugins/thumbnailer/test_data/expected_height.jpg new file mode 100644 index 0000000..6459410 Binary files /dev/null and b/plugins/thumbnailer/test_data/expected_height.jpg differ diff --git a/plugins/thumbnailer/test_data/expected_square.jpg b/plugins/thumbnailer/test_data/expected_square.jpg new file mode 100644 index 0000000..de99e5b Binary files /dev/null and b/plugins/thumbnailer/test_data/expected_square.jpg differ diff --git a/plugins/thumbnailer/test_data/expected_width.jpg b/plugins/thumbnailer/test_data/expected_width.jpg new file mode 100644 index 0000000..9c2efc6 Binary files /dev/null and b/plugins/thumbnailer/test_data/expected_width.jpg differ diff --git a/plugins/thumbnailer/test_data/sample_image.jpg b/plugins/thumbnailer/test_data/sample_image.jpg new file mode 100644 index 0000000..cc83880 Binary files /dev/null and b/plugins/thumbnailer/test_data/sample_image.jpg differ diff --git a/plugins/thumbnailer/test_data/subdir/sample_image.jpg b/plugins/thumbnailer/test_data/subdir/sample_image.jpg new file mode 100644 index 0000000..cc83880 Binary files /dev/null and b/plugins/thumbnailer/test_data/subdir/sample_image.jpg differ diff --git a/plugins/thumbnailer/test_thumbnails.py b/plugins/thumbnailer/test_thumbnails.py new file mode 100644 index 0000000..090036e --- /dev/null +++ b/plugins/thumbnailer/test_thumbnails.py @@ -0,0 +1,61 @@ +from thumbnailer import Resizer +from unittest import TestCase, main +import os +from PIL import Image + +class ThumbnailerTests(TestCase): + + def path(self, filename): + return os.path.join(self.img_path, filename) + + def setUp(self): + self.img_path = os.path.join(os.path.dirname(__file__), "test_data") + self.img = Image.open(self.path("sample_image.jpg")) + + def testSquare(self): + r = Resizer('square', '100', self.img_path) + output = r.resize(self.img) + self.assertEqual((100, 100), output.size) + + def testExact(self): + r = Resizer('exact', '250x100', self.img_path) + output = r.resize(self.img) + self.assertEqual((250, 100), output.size) + + def testWidth(self): + r = Resizer('aspect', '250x?', self.img_path) + output = r.resize(self.img) + self.assertEqual((250, 166), output.size) + + def testHeight(self): + r = Resizer('aspect', '?x250', self.img_path) + output = r.resize(self.img) + self.assertEqual((376, 250), output.size) + +class ThumbnailerFilenameTest(TestCase): + + def path(self, *parts): + return os.path.join(self.img_path, *parts) + + def setUp(self): + self.img_path = os.path.join(os.path.dirname(__file__), "test_data") + + def testRoot(self): + """Test a file that is in the root of img_path.""" + r = Resizer('square', '100', self.img_path) + new_name = r.get_thumbnail_name(self.path('sample_image.jpg')) + self.assertEqual('sample_image_square.jpg', new_name) + + def testRootWithSlash(self): + r = Resizer('square', '100', self.img_path + '/') + new_name = r.get_thumbnail_name(self.path('sample_image.jpg')) + self.assertEqual('sample_image_square.jpg', new_name) + + def testSubdir(self): + """Test a file that is in a sub-directory of img_path.""" + r = Resizer('square', '100', self.img_path) + new_name = r.get_thumbnail_name(self.path('subdir', 'sample_image.jpg')) + self.assertEqual('subdir/sample_image_square.jpg', new_name) + +if __name__=="__main__": + main() diff --git a/plugins/thumbnailer/thumbnailer.py b/plugins/thumbnailer/thumbnailer.py new file mode 100644 index 0000000..5925c54 --- /dev/null +++ b/plugins/thumbnailer/thumbnailer.py @@ -0,0 +1,210 @@ +import os +import os.path as path +import re +from pelican import signals + +import logging +logger = logging.getLogger(__name__) + +try: + from PIL import Image, ImageOps + enabled = True +except ImportError: + logger.warning("Unable to load PIL, disabling thumbnailer") + enabled = False + +DEFAULT_IMAGE_DIR = "pictures" +DEFAULT_THUMBNAIL_DIR = "thumbnails" +DEFAULT_THUMBNAIL_SIZES = { + 'thumbnail_square': '150', + 'thumbnail_wide': '150x?', + 'thumbnail_tall': '?x150', +} +DEFAULT_TEMPLATE = """{filename}""" +DEFAULT_GALLERY_THUMB = "thumbnail_square" + +class Resizer(object): + """ Resizes based on a text specification, see readme """ + + REGEX = re.compile(r'(\d+|\?)x(\d+|\?)') + + def __init__(self, name, spec, root): + self._name = name + self._spec = spec + # The location of input images from _image_path. + self._root = root + + def _null_resize(self, w, h, image): + return image + + def _exact_resize(self, w, h, image): + retval = ImageOps.fit(image, (w,h), Image.BICUBIC) + return retval + + def _aspect_resize(self, w, h, image): + retval = image.copy() + retval.thumbnail((w, h), Image.ANTIALIAS) + + return retval + + def resize(self, image): + resizer = self._null_resize + + # Square resize and crop + if 'x' not in self._spec: + resizer = self._exact_resize + targetw = int(self._spec) + targeth = targetw + else: + matches = self.REGEX.search(self._spec) + tmpw = matches.group(1) + tmph = matches.group(2) + + # Full Size + if tmpw == '?' and tmph == '?': + targetw = image.size[0] + targeth = image.size[1] + resizer = self._null_resize + + # Set Height Size + if tmpw == '?': + targetw = image.size[0] + targeth = int(tmph) + resizer = self._aspect_resize + + # Set Width Size + elif tmph == '?': + targetw = int(tmpw) + targeth = image.size[1] + resizer = self._aspect_resize + + # Scale and Crop + else: + targetw = int(tmpw) + targeth = int(tmph) + resizer = self._exact_resize + + logger.debug("Using resizer {0}".format(resizer.__name__)) + return resizer(targetw, targeth, image) + + def get_thumbnail_name(self, in_path): + # Find the partial path + filename beyond the input image directory. + prefix = path.commonprefix([in_path, self._root]) + new_filename = in_path[len(prefix):] + if new_filename.startswith('/'): + new_filename = new_filename[1:] + + # Generate the new filename. + (basename, ext) = path.splitext(new_filename) + return "{0}_{1}{2}".format(basename, self._name, ext) + + def resize_file_to(self, in_path, out_path, keep_filename=False): + """ Given a filename, resize and save the image per the specification into out_path + + :param in_path: path to image file to save. Must be supported by PIL + :param out_path: path to the directory root for the outputted thumbnails to be stored + :return: None + """ + if keep_filename: + filename = path.join(out_path, path.basename(in_path)) + else: + filename = path.join(out_path, self.get_thumbnail_name(in_path)) + out_path = path.dirname(filename) + if not path.exists(out_path): + os.makedirs(out_path) + if not path.exists(filename): + try: + image = Image.open(in_path) + thumbnail = self.resize(image) + thumbnail.save(filename) + logger.info("Generated Thumbnail {0}".format(path.basename(filename))) + except IOError: + logger.info("Generating Thumbnail for {0} skipped".format(path.basename(filename))) + + +def resize_thumbnails(pelican): + """ Resize a directory tree full of images into thumbnails + + :param pelican: The pelican instance + :return: None + """ + global enabled + if not enabled: + return + + in_path = _image_path(pelican) + + include_regex = pelican.settings.get('THUMBNAIL_INCLUDE_REGEX') + if include_regex: + pattern = re.compile(include_regex) + is_included = lambda name: pattern.match(name) + else: + is_included = lambda name: not name.startswith('.') + + sizes = pelican.settings.get('THUMBNAIL_SIZES', DEFAULT_THUMBNAIL_SIZES) + resizers = dict((k, Resizer(k, v, in_path)) for k,v in sizes.items()) + logger.debug("Thumbnailer Started") + for dirpath, _, filenames in os.walk(in_path): + for filename in filenames: + if is_included(filename): + for name, resizer in resizers.items(): + in_filename = path.join(dirpath, filename) + out_path = get_out_path(pelican, in_path, in_filename, name) + resizer.resize_file_to( + in_filename, + out_path, pelican.settings.get('THUMBNAIL_KEEP_NAME')) + + +def get_out_path(pelican, in_path, in_filename, name): + base_out_path = path.join(pelican.settings['OUTPUT_PATH'], + pelican.settings.get('THUMBNAIL_DIR', DEFAULT_THUMBNAIL_DIR)) + logger.debug("Processing thumbnail {0}=>{1}".format(in_filename, name)) + if pelican.settings.get('THUMBNAIL_KEEP_NAME', False): + if pelican.settings.get('THUMBNAIL_KEEP_TREE', False): + return path.join(base_out_path, name, path.dirname(path.relpath(in_filename, in_path))) + else: + return path.join(base_out_path, name) + else: + return base_out_path + + +def _image_path(pelican): + return path.join(pelican.settings['PATH'], + pelican.settings.get("IMAGE_PATH", DEFAULT_IMAGE_DIR)).rstrip('/') + + +def expand_gallery(generator, metadata): + """ Expand a gallery tag to include all of the files in a specific directory under IMAGE_PATH + + :param pelican: The pelican instance + :return: None + """ + if "gallery" not in metadata or metadata['gallery'] is None: + return # If no gallery specified, we do nothing + + lines = [ ] + base_path = _image_path(generator) + in_path = path.join(base_path, metadata['gallery']) + template = generator.settings.get('GALLERY_TEMPLATE', DEFAULT_TEMPLATE) + thumbnail_name = generator.settings.get("GALLERY_THUMBNAIL", DEFAULT_GALLERY_THUMB) + thumbnail_prefix = generator.settings.get("") + resizer = Resizer(thumbnail_name, '?x?', base_path) + for dirpath, _, filenames in os.walk(in_path): + for filename in filenames: + if not filename.startswith('.'): + url = path.join(dirpath, filename).replace(base_path, "")[1:] + url = path.join('/static', generator.settings.get('IMAGE_PATH', DEFAULT_IMAGE_DIR), url).replace('\\', '/') + logger.debug("GALLERY: {0}".format(url)) + thumbnail = resizer.get_thumbnail_name(filename) + thumbnail = path.join('/', generator.settings.get('THUMBNAIL_DIR', DEFAULT_THUMBNAIL_DIR), thumbnail).replace('\\', '/') + lines.append(template.format( + filename=filename, + url=url, + thumbnail=thumbnail, + )) + metadata['gallery_content'] = "\n".join(lines) + + +def register(): + signals.finalized.connect(resize_thumbnails) + signals.article_generator_context.connect(expand_gallery) diff --git a/themes/markerbeacon/static/css/fonts.css b/themes/markerbeacon/static/css/fonts.css new file mode 100644 index 0000000..5601507 --- /dev/null +++ b/themes/markerbeacon/static/css/fonts.css @@ -0,0 +1,12 @@ +@font-face { + font-family: 'Yanone Kaffeesatz'; + font-style: normal; + font-weight: 400; + src: + local('Yanone Kaffeesatz Regular'), + local('YanoneKaffeesatz-Regular'), + /* from https://fonts.gstatic.com/s/yanonekaffeesatz/v8/YDAoLskQQ5MOAgvHUQCcLRTHiN2BPBirwIkMLKUspj4.woff */ + url('../fonts/Yanone_Kaffeesatz_400.woff') format('woff'), + /* from https://fonts.gstatic.com/s/yanonekaffeesatz/v8/YDAoLskQQ5MOAgvHUQCcLfGwxTS8d1Q9KiDNCMKLFUM.woff2 */ + url('../fonts/Yanone_Kaffeesatz_400.woff2') format('woff2'); +} diff --git a/themes/markerbeacon/static/css/main.css b/themes/markerbeacon/static/css/main.css new file mode 100644 index 0000000..1e9b06f --- /dev/null +++ b/themes/markerbeacon/static/css/main.css @@ -0,0 +1,814 @@ +/* + Name: Smashing HTML5 + Date: July 2009 + Description: Sample layout for HTML5 and CSS3 goodness. + Version: 1.0 + License: MIT + Licensed by: Smashing Media GmbH + Original author: Enrique Ramírez +*/ + +/* Imports */ +@import url("reset.css"); +@import url("pygment.css"); +@import url("typogrify.css"); +@import url("fonts.css"); + +/***** Global *****/ +/* Body */ +body { + background: #F5F4EF; + color: #000305; + font-family: 'Trebuchet MS', Trebuchet, 'Lucida Sans Unicode', 'Lucida Grande', 'Lucida Sans', Arial, sans-serif; + line-height: 1.429; + margin: 0; + padding: 0; + text-align: left; +} + +/* Headings */ +h1 {font-size: 2em } +h2 {font-size: 1.571em} /* 22px */ +h3 {font-size: 1.429em} /* 20px */ +h4 {font-size: 1.286em} /* 18px */ +h5 {font-size: 1.143em} /* 16px */ +h6 {font-size: 1em} /* 14px */ + +h1, h2, h3, h4, h5, h6 { + font-weight: 400; + line-height: 1.1; + margin-bottom: .8em; + font-family: 'Yanone Kaffeesatz', arial, serif; +} + +h3, h4, h5, h6 { margin-top: .8em; } + +hr { border: 2px solid #EEEEEE; } + +/* Anchors */ +a {outline: 0;} +a img {border: 0px; text-decoration: none;} +a:link, a:visited { + color: #C74350; + text-decoration: none; +} +a:hover, a:active { + background-color: #C74350; + color: #fff; + text-decoration: none; + text-shadow: 1px 1px 1px #333; +} + +h1 a:hover { + background-color: inherit +} + +/* Paragraphs */ +div.line-block, +p { margin-top: 1em; + margin-bottom: 1em;} + +strong, b {font-weight: bold;} +em, i {font-style: italic;} + +/* Lists */ +ul { + list-style: outside disc; + margin: 0em 0 0 1.5em; +} + +ol { + list-style: outside decimal; + margin: 0em 0 0 1.5em; +} + +li { margin-top: 0.5em; + margin-bottom: 1em; } + +.post-info { + float:right; + margin:10px; + padding:5px; +} + +.post-info p{ + margin-top: 1px; + margin-bottom: 1px; +} + +.readmore { float: right } + +dl {margin: 0 0 1.5em 0;} +dt {font-weight: bold;} +dd {margin-left: 1.5em;} + +pre{background-color: rgb(238, 238, 238); padding: 10px; margin: 10px; overflow: auto;} + +/* Quotes */ +blockquote { + margin: 20px; + font-style: italic; +} +cite {} + +q {} + +div.note { + float: right; + margin: 5px; + font-size: 85%; + max-width: 300px; +} + +/* Tables */ +table {margin: .5em auto 1.5em auto; width: 98%;} + + /* Thead */ + thead th {padding: .5em .4em; text-align: left;} + thead td {} + + /* Tbody */ + tbody td {padding: .5em .4em;} + tbody th {} + + tbody .alt td {} + tbody .alt th {} + + /* Tfoot */ + tfoot th {} + tfoot td {} + +/* HTML5 tags */ +header, section, footer, +aside, nav, article, figure { + display: block; +} + +/***** Layout *****/ +.body {clear: both; margin: 0 auto; width: 800px;} +img.right, figure.right, div.figure.align-right { + float: right; + margin: 0 0 2em 2em; +} +img.left, figure.left, div.figure.align-left { + float: left; + margin: 0 2em 2em 0; +} + +.align-center { + display: block; + margin-left: auto; + margin-right: auto; +} + +/* .rst support */ +div.figure img, figure img { /* to fill figure exactly */ + width: 100%; +} +div.figure p.caption, figure p.caption { /* margin provided by figure */ + margin-top: 0; + margin-bottom: 0; +} + +/* + Header +*****************/ +#banner { + margin: 0 auto; + padding: 2.5em 0 0 0; +} + +/* Banner */ +#banner h1 {font-size: 0; line-height: 0;} +#banner h1 a:link, #banner h1 a:visited { + color: #000305; + display: block; + font-weight: bold; + text-decoration: none; +} +#banner h1 a:hover, #banner h1 a:active { + background: none; + color: #C74350; + text-shadow: none; +} + +#banner h1 strong {font-size: 0.36em; font-weight: normal;} + +/* Main Nav */ +#banner nav { + background: #000305; + font-size: 1.143em; + height: 40px; + line-height: 30px; + margin: 0 auto 2em auto; + padding: 0; + text-align: center; + width: 800px; + + border-radius: 5px; + -moz-border-radius: 5px; + -webkit-border-radius: 5px; +} + +#banner nav ul {list-style: none; margin: 0 auto; width: 800px;} +#banner nav li {float: left; display: inline; margin: 0;} + +#banner nav a:link, #banner nav a:visited { + color: #fff; + display: inline-block; + height: 30px; + padding: 5px 1.5em; + text-decoration: none; +} +#banner nav a:hover, #banner nav a:active, +#banner nav .active a:link, #banner nav .active a:visited { + background: #C74451; + color: #fff; + text-shadow: none !important; +} + +#banner nav li:first-child a { + border-top-left-radius: 5px; + -moz-border-radius-topleft: 5px; + -webkit-border-top-left-radius: 5px; + + border-bottom-left-radius: 5px; + -moz-border-radius-bottomleft: 5px; + -webkit-border-bottom-left-radius: 5px; +} + +/* + Featured +*****************/ +#featured { + background: #fff; + margin-bottom: 2em; + overflow: hidden; + padding: 20px; + width: 760px; + + border-radius: 10px; + -moz-border-radius: 10px; + -webkit-border-radius: 10px; +} + +#featured figure { + border: 2px solid #eee; + float: right; + margin: 0.786em 2em 0 5em; + width: 248px; +} +#featured figure img {display: block; float: right;} + +#featured h2 {color: #C74451} +#featured h3 {font-size: 1.429em; margin-bottom: .5em;} + +#featured h3 a:link, #featured h3 a:visited {color: #000305; text-decoration: none;} +#featured h3 a:hover, #featured h3 a:active {color: #fff;} + +/* + Body +*****************/ +#content { + background: #fff; + margin-bottom: 2em; + overflow: hidden; + padding: 20px 20px; + width: 760px; + + border-radius: 10px; + -moz-border-radius: 10px; + -webkit-border-radius: 10px; +} + +#content h2 {color: #C74350} +#content h3 {font-size: 1.429em; margin-bottom: .5em;} + +#content h3 a:link, #content h3 a:visited {color: #000305; text-decoration: none;} +#content h3 a:hover, #content h3 a:active {color: #fff;} + +/* + Extras +*****************/ +#extras {margin: 0 auto 3em auto; overflow: hidden;} + +#extras ul {list-style: none; margin: 0;} +#extras li {border-bottom: 1px solid #fff;} +#extras h2 { + color: #C74350; + font-size: 1.429em; + margin-bottom: .25em; + padding: 0 3px; +} + +#extras a:link, #extras a:visited { + color: #444; + display: block; + border-bottom: 1px solid #F4E3E3; + text-decoration: none; + padding: .3em .25em; +} + +#extras a:hover, #extras a:active {color: #fff;} + +/* Blogroll */ +#extras .blogroll { + float: left; + width: 615px; +} + +#extras .blogroll li {float: left; margin: 0 20px 0 0; width: 185px;} + +/* Social */ +#extras .social { + float: right; + width: 175px; +} + +#extras div[class='social'] a { + background-repeat: no-repeat; + background-position: 3px 6px; + padding-left: 25px; +} + +/* Icons */ +.social a[href*='about.me'] {background-image: url('../images/icons/aboutme.png');} +.social a[href*='bitbucket.org'] {background-image: url('../images/icons/bitbucket.png');} +.social a[href*='delicious.com'] {background-image: url('../images/icons/delicious.png');} +.social a[href*='facebook.com'] {background-image: url('../images/icons/facebook.png');} +.social a[href*='gitorious.org'] {background-image: url('../images/icons/gitorious.png');} +.social a[href*='github.com'], +.social a[href*='git.io'] { + background-image: url('../images/icons/github.png'); + background-size: 16px 16px; +} +.social a[href*='gittip.com'] {background-image: url('../images/icons/gittip.png');} +.social a[href*='plus.google.com'] {background-image: url('../images/icons/google-plus.png');} +.social a[href*='groups.google.com'] {background-image: url('../images/icons/google-groups.png');} +.social a[href*='news.ycombinator.com'], +.social a[href*='hackernewsers.com'] {background-image: url('../images/icons/hackernews.png');} +.social a[href*='last.fm'], .social a[href*='lastfm.'] {background-image: url('../images/icons/lastfm.png');} +.social a[href*='linkedin.com'] {background-image: url('../images/icons/linkedin.png');} +.social a[href*='reddit.com'] {background-image: url('../images/icons/reddit.png');} +.social a[type$='atom+xml'], .social a[type$='rss+xml'] {background-image: url('../images/icons/rss.png');} +.social a[href*='slideshare.net'] {background-image: url('../images/icons/slideshare.png');} +.social a[href*='speakerdeck.com'] {background-image: url('../images/icons/speakerdeck.png');} +.social a[href*='stackoverflow.com'] {background-image: url('../images/icons/stackoverflow.png');} +.social a[href*='twitter.com'] {background-image: url('../images/icons/twitter.png');} +.social a[href*='vimeo.com'] {background-image: url('../images/icons/vimeo.png');} +.social a[href*='youtube.com'] {background-image: url('../images/icons/youtube.png');} + +/* + About +*****************/ +#about { + background: #fff; + font-style: normal; + margin-bottom: 2em; + overflow: hidden; + padding: 20px; + text-align: left; + width: 760px; + + border-radius: 10px; + -moz-border-radius: 10px; + -webkit-border-radius: 10px; +} + +#about .primary {float: left; width: 165px;} +#about .primary strong {color: #C64350; display: block; font-size: 1.286em;} +#about .photo {float: left; margin: 5px 20px;} + +#about .url:link, #about .url:visited {text-decoration: none;} + +#about .bio {float: right; width: 500px;} + +/* + Footer +*****************/ +#contentinfo {padding-bottom: 2em; text-align: right;} + +/***** Sections *****/ +/* Blog */ +.hentry { + display: block; + clear: both; + border-bottom: 1px solid #eee; + padding: 1.5em 0; +} +li:last-child .hentry, #content > .hentry {border: 0; margin: 0;} +#content > .hentry {padding: 1em 0;} +.hentry img{display : none ;} +.entry-title {font-size: 3em; margin-bottom: 10px; margin-top: 0;} +.entry-title a:link, .entry-title a:visited {text-decoration: none; color: #333;} +.entry-title a:visited {background-color: #fff;} + +.hentry .post-info * {font-style: normal;} + +/* Content */ +.hentry footer {margin-bottom: 2em;} +.hentry footer address {display: inline;} +#posts-list footer address {display: block;} + +/* Blog Index */ +#posts-list {list-style: none; margin: 0;} +#posts-list .hentry {padding-left: 10px; position: relative;} + +#posts-list footer { + left: 10px; + position: relative; +float: left; + top: 0.5em; + width: 190px; +} + +/* About the Author */ +#about-author { + background: #f9f9f9; + clear: both; + font-style: normal; + margin: 2em 0; + padding: 10px 20px 15px 20px; + + border-radius: 5px; + -moz-border-radius: 5px; + -webkit-border-radius: 5px; +} + +#about-author strong { + color: #C64350; + clear: both; + display: block; + font-size: 1.429em; +} + +#about-author .photo {border: 1px solid #ddd; float: left; margin: 5px 1em 0 0;} + +/* Comments */ +#comments-list {list-style: none; margin: 0 1em;} +#comments-list blockquote { + background: #f8f8f8; + clear: both; + font-style: normal; + margin: 0; + padding: 15px 20px; + + border-radius: 5px; + -moz-border-radius: 5px; + -webkit-border-radius: 5px; +} +#comments-list footer {color: #888; padding: .5em 1em 0 0; text-align: right;} + +#comments-list li:nth-child(2n) blockquote {background: #F5f5f5;} + +/* Add a Comment */ +#add-comment label {clear: left; float: left; text-align: left; width: 150px;} +#add-comment input[type='text'], +#add-comment input[type='email'], +#add-comment input[type='url'] {float: left; width: 200px;} + +#add-comment textarea {float: left; height: 150px; width: 495px;} + +#add-comment p.req {clear: both; margin: 0 .5em 1em 0; text-align: right;} + +#add-comment input[type='submit'] {float: right; margin: 0 .5em;} +#add-comment * {margin-bottom: .5em;} + + +/*********** Dark mode */ + +html, body, input, textarea, select, button { + background-color: #181a1b; +} +html, body, input, textarea, select, button { + border-color: #736b5e; + color: #e8e6e3; +} +table { + border-color: #545b5e; +} +::placeholder { + color: #b2aba1; +} +input:-webkit-autofill, +textarea:-webkit-autofill, +select:-webkit-autofill { + background-color: #555b00 !important; + color: #e8e6e3 !important; +} +::-webkit-scrollbar { + background-color: #202324; + color: #aba499; +} +::-webkit-scrollbar-thumb { + background-color: #454a4d; +} +::-webkit-scrollbar-thumb:hover { + background-color: #575e62; +} +::-webkit-scrollbar-thumb:active { + background-color: #484e51; +} +::-webkit-scrollbar-corner { + background-color: #181a1b; +} +* { + scrollbar-color: #454a4d #202324; +} +::selection { + background-color: #004daa !important; + color: #e8e6e3 !important; +} +::-moz-selection { + background-color: #004daa !important; + color: #e8e6e3 !important; +} + +/* Modified CSS */ +html, +body, +div, +span, +applet, +object, +iframe, +h1, +h2, +h3, +h4, +h5, +h6, +p, +blockquote, +pre, +a, +abbr, +acronym, +address, +big, +cite, +code, +del, +dfn, +em, +font, +img, +ins, +kbd, +q, +s, +samp, +small, +strike, +strong, +sub, +sup, +tt, +var, +b, +u, +i, +center, +dl, +dt, +dd, +ol, +ul, +li, +fieldset, +form, +label, +legend, +table, +caption, +tbody, +tfoot, +thead, +tr, +th, +td { + background-color: transparent; + background-image: none; + border-color: currentcolor; + outline-color: currentcolor; +} +ol, +ul { + list-style-image: none; +} +body { + color: rgb(230, 228, 225); +} +hr { + border-color: rgb(53, 57, 59); +} +a { + outline-color: currentcolor; +} +a img { + border-color: currentcolor; + text-decoration-color: currentcolor; +} +a:link, +a:visited { + color: rgb(204, 84, 96); + text-decoration-color: currentcolor; +} +a:hover, +a:active { + background-color: rgb(152, 45, 56); + color: rgb(232, 230, 227); + text-decoration-color: currentcolor; + text-shadow: rgb(38, 42, 43) 1px 1px 1px; +} +h1 a:hover { + background-color: inherit; +} +ul { + list-style-image: none; +} +ol { + list-style-image: none; +} +pre { + background-color: rgb(34, 36, 38); +} +#banner h1 a:link, +#banner h1 a:visited { + background-image: url('../images/title.jpg'); + color: rgb(230, 228, 225); + text-decoration-color: currentcolor; +} +#banner h1 a:hover, +#banner h1 a:active { + background-color: rgba(0, 0, 0, 0); + background-image: none; + color: rgb(204, 84, 96); + text-shadow: none; +} +#banner nav { + background-color: rgb(0, 2, 4); + background-image: none; +} +#banner nav ul { + list-style-image: none; +} +#banner nav a:link, +#banner nav a:visited { + color: rgb(232, 230, 227); + text-decoration-color: currentcolor; +} +#banner nav a:hover, +#banner nav a:active, +#banner nav .active a:link, +#banner nav .active a:visited { + background-color: rgb(151, 45, 56); + background-image: none; + color: rgb(232, 230, 227); + text-shadow: none !important; +} +#featured { + background-color: #30303080; +} +#featured figure { + border-color: rgb(53, 57, 59); +} +#featured h2 { + color: rgb(204, 85, 97); +} +#featured h3 a:link, +#featured h3 a:visited { + color: rgb(230, 228, 225); + text-decoration-color: currentcolor; +} +#featured h3 a:hover, +#featured h3 a:active { + color: rgb(232, 230, 227); +} +#content { + background-color: #30303080; + background-image: none; +} +#extras ul { + list-style-image: none; +} +#extras li { + border-bottom-color: rgb(48, 52, 54); +} +#extras h2 { + color: rgb(204, 84, 96); +} +#extras a:link, +#extras a:visited { + color: rgb(189, 183, 175); + border-bottom-color: rgb(82, 32, 32); + text-decoration-color: currentcolor; +} +#extras a:hover, +#extras a:active { + color: rgb(232, 230, 227); +} +#about { + background: transparent; + background-image: none; + color: rgb(111, 111, 111); +} +#about .primary strong { + color: rgb(203, 84, 96); +} +#about a:link, +#about a:visited { + color: rgb(120, 60, 60); + text-decoration-color: currentcolor; +} +#about a:hover, +#about a:active { + color: rgb(150, 140, 140); +} +#about .url:link, +#about .url:visited { + text-decoration-color: currentcolor; +} +.hentry { + border-bottom-color: rgb(53, 57, 59); +} +li:last-child .hentry, +#content > .hentry { + border-color: currentcolor; +} +.entry-title a:link, +.entry-title a:visited { + text-decoration-color: currentcolor; + color: rgb(200, 195, 188); +} +.entry-title a:visited { + background-color: #30303080; +} +#posts-list { + list-style-image: none; +} +#about-author { + background-color: rgb(27, 30, 31); + background-image: none; +} +#about-author strong { + color: rgb(203, 84, 96); +} +#about-author .photo { + border-color: rgb(58, 62, 65); +} +#comments-list { + list-style-image: none; +} +#comments-list blockquote { + background-color: rgb(28, 30, 31); + background-image: none; +} +#comments-list footer { + color: rgb(157, 148, 136); +} +#comments-list li:nth-child(2n) blockquote { + background-color: rgb(30, 32, 33); + background-image: none; +} +html { + background-color: rgb(19, 21, 22) !important; +} +html, +body, +input, +textarea, +select, +button { + border-color: rgb(106, 98, 87); + color: rgb(216, 212, 207); + background-color: rgb(15, 15, 15); +} +a { + color: rgb(61, 165, 255); +} +table { + border-color: rgb(111, 103, 91); +} +body { + background-image: url('../images/mb_logo_bkgnd2.jpg'); + background-attachment: fixed; + background-repeat: no-repeat; + background-position: center; +} +img { + vertical-align: top; +} +::placeholder { + color: rgb(178, 171, 161); +} +::-webkit-scrollbar { + background-color: rgb(26, 28, 29); + color: rgb(173, 166, 156); +} +::-webkit-scrollbar-thumb { + background-color: rgb(55, 60, 62); +} +::-webkit-scrollbar-corner { + background-color: rgb(19, 21, 22); +} diff --git a/themes/markerbeacon/static/css/pygment.css b/themes/markerbeacon/static/css/pygment.css new file mode 100644 index 0000000..fdd056f --- /dev/null +++ b/themes/markerbeacon/static/css/pygment.css @@ -0,0 +1,205 @@ +.hll { +background-color:#eee; +} +.c { +color:#408090; +font-style:italic; +} +.err { +border:1px solid #FF0000; +} +.k { +color:#007020; +font-weight:bold; +} +.o { +color:#666666; +} +.cm { +color:#408090; +font-style:italic; +} +.cp { +color:#007020; +} +.c1 { +color:#408090; +font-style:italic; +} +.cs { +background-color:#FFF0F0; +color:#408090; +} +.gd { +color:#A00000; +} +.ge { +font-style:italic; +} +.gr { +color:#FF0000; +} +.gh { +color:#000080; +font-weight:bold; +} +.gi { +color:#00A000; +} +.go { +color:#303030; +} +.gp { +color:#C65D09; +font-weight:bold; +} +.gs { +font-weight:bold; +} +.gu { +color:#800080; +font-weight:bold; +} +.gt { +color:#0040D0; +} +.kc { +color:#007020; +font-weight:bold; +} +.kd { +color:#007020; +font-weight:bold; +} +.kn { +color:#007020; +font-weight:bold; +} +.kp { +color:#007020; +} +.kr { +color:#007020; +font-weight:bold; +} +.kt { +color:#902000; +} +.m { +color:#208050; +} +.s { +color:#4070A0; +} +.na { +color:#4070A0; +} +.nb { +color:#007020; +} +.nc { +color:#0E84B5; +font-weight:bold; +} +.no { +color:#60ADD5; +} +.nd { +color:#555555; +font-weight:bold; +} +.ni { +color:#D55537; +font-weight:bold; +} +.ne { +color:#007020; +} +.nf { +color:#06287E; +} +.nl { +color:#002070; +font-weight:bold; +} +.nn { +color:#0E84B5; +font-weight:bold; +} +.nt { +color:#062873; +font-weight:bold; +} +.nv { +color:#BB60D5; +} +.ow { +color:#007020; +font-weight:bold; +} +.w { +color:#BBBBBB; +} +.mf { +color:#208050; +} +.mh { +color:#208050; +} +.mi { +color:#208050; +} +.mo { +color:#208050; +} +.sb { +color:#4070A0; +} +.sc { +color:#4070A0; +} +.sd { +color:#4070A0; +font-style:italic; +} +.s2 { +color:#4070A0; +} +.se { +color:#4070A0; +font-weight:bold; +} +.sh { +color:#4070A0; +} +.si { +color:#70A0D0; +font-style:italic; +} +.sx { +color:#C65D09; +} +.sr { +color:#235388; +} +.s1 { +color:#4070A0; +} +.ss { +color:#517918; +} +.bp { +color:#007020; +} +.vc { +color:#BB60D5; +} +.vg { +color:#BB60D5; +} +.vi { +color:#BB60D5; +} +.il { +color:#208050; +} diff --git a/themes/markerbeacon/static/css/reset.css b/themes/markerbeacon/static/css/reset.css new file mode 100644 index 0000000..c88e619 --- /dev/null +++ b/themes/markerbeacon/static/css/reset.css @@ -0,0 +1,52 @@ +/* + Name: Reset Stylesheet + Description: Resets browser's default CSS + Author: Eric Meyer + Author URI: https://meyerweb.com/eric/tools/css/reset/ +*/ + +/* v1.0 | 20080212 */ +html, body, div, span, applet, object, iframe, +h1, h2, h3, h4, h5, h6, p, blockquote, pre, +a, abbr, acronym, address, big, cite, code, +del, dfn, em, font, img, ins, kbd, q, s, samp, +small, strike, strong, sub, sup, tt, var, +b, u, i, center, +dl, dt, dd, ol, ul, li, +fieldset, form, label, legend, +table, caption, tbody, tfoot, thead, tr, th, td { + background: transparent; + border: 0; + font-size: 100%; + margin: 0; + outline: 0; + padding: 0; + vertical-align: baseline; +} + +body {line-height: 1;} + +ol, ul {list-style: none;} + +blockquote, q {quotes: none;} + +blockquote:before, blockquote:after, +q:before, q:after { + content: ''; + content: none; +} + +/* remember to define focus styles! */ +:focus { + outline: 0; +} + +/* remember to highlight inserts somehow! */ +ins {text-decoration: none;} +del {text-decoration: line-through;} + +/* tables still need 'cellspacing="0"' in the markup */ +table { + border-collapse: collapse; + border-spacing: 0; +} \ No newline at end of file diff --git a/themes/markerbeacon/static/css/typogrify.css b/themes/markerbeacon/static/css/typogrify.css new file mode 100644 index 0000000..3bae497 --- /dev/null +++ b/themes/markerbeacon/static/css/typogrify.css @@ -0,0 +1,3 @@ +.caps {font-size:.92em;} +.amp {color:#666; font-size:1.05em;font-family:"Warnock Pro", "Goudy Old Style","Palatino","Book Antiqua",serif; font-style:italic;} +.dquo {margin-left:-.38em;} diff --git a/themes/markerbeacon/static/css/wide.css b/themes/markerbeacon/static/css/wide.css new file mode 100644 index 0000000..88fd59c --- /dev/null +++ b/themes/markerbeacon/static/css/wide.css @@ -0,0 +1,48 @@ +@import url("main.css"); + +body { + font:1.3em/1.3 "Hoefler Text","Georgia",Georgia,serif,sans-serif; +} + +.post-info{ + display: none; +} + +#banner nav { + display: none; + -moz-border-radius: 0px; + margin-bottom: 20px; + overflow: hidden; + font-size: 1em; + background: #F5F4EF; +} + +#banner nav ul{ + padding-right: 50px; +} + +#banner nav li{ + float: right; + color: #000; +} + +#banner nav li a { + color: #000; +} + +#banner h1 { + margin-bottom: -18px; +} + +#featured, #extras { + padding: 50px; +} + +#featured { + padding-top: 20px; +} + +#extras { + padding-top: 0px; + padding-bottom: 0px; +} diff --git a/themes/markerbeacon/static/fonts/Yanone_Kaffeesatz_400.eot b/themes/markerbeacon/static/fonts/Yanone_Kaffeesatz_400.eot new file mode 100644 index 0000000..b3b90db Binary files /dev/null and b/themes/markerbeacon/static/fonts/Yanone_Kaffeesatz_400.eot differ diff --git a/themes/markerbeacon/static/fonts/Yanone_Kaffeesatz_400.svg b/themes/markerbeacon/static/fonts/Yanone_Kaffeesatz_400.svg new file mode 100644 index 0000000..a69669b --- /dev/null +++ b/themes/markerbeacon/static/fonts/Yanone_Kaffeesatz_400.svg @@ -0,0 +1,407 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/themes/markerbeacon/static/fonts/Yanone_Kaffeesatz_400.ttf b/themes/markerbeacon/static/fonts/Yanone_Kaffeesatz_400.ttf new file mode 100644 index 0000000..6f4feb0 Binary files /dev/null and b/themes/markerbeacon/static/fonts/Yanone_Kaffeesatz_400.ttf differ diff --git a/themes/markerbeacon/static/fonts/Yanone_Kaffeesatz_400.woff b/themes/markerbeacon/static/fonts/Yanone_Kaffeesatz_400.woff new file mode 100644 index 0000000..ddccf76 Binary files /dev/null and b/themes/markerbeacon/static/fonts/Yanone_Kaffeesatz_400.woff differ diff --git a/themes/markerbeacon/static/fonts/Yanone_Kaffeesatz_400.woff2 b/themes/markerbeacon/static/fonts/Yanone_Kaffeesatz_400.woff2 new file mode 100644 index 0000000..7b18f7e Binary files /dev/null and b/themes/markerbeacon/static/fonts/Yanone_Kaffeesatz_400.woff2 differ diff --git a/themes/markerbeacon/static/fonts/font.css b/themes/markerbeacon/static/fonts/font.css new file mode 100644 index 0000000..a9eb87e --- /dev/null +++ b/themes/markerbeacon/static/fonts/font.css @@ -0,0 +1,12 @@ +@font-face { + font-family: 'Yanone Kaffeesatz'; + font-style: normal; + font-weight: 400; + src: + local('Yanone Kaffeesatz Regular'), + local('YanoneKaffeesatz-Regular'), + /* from https://fonts.gstatic.com/s/yanonekaffeesatz/v8/YDAoLskQQ5MOAgvHUQCcLRTHiN2BPBirwIkMLKUspj4.woff */ + url('Yanone_Kaffeesatz_400.woff') format('woff'), + /* from https://fonts.gstatic.com/s/yanonekaffeesatz/v8/YDAoLskQQ5MOAgvHUQCcLfGwxTS8d1Q9KiDNCMKLFUM.woff2 */ + url('Yanone_Kaffeesatz_400.woff2') format('woff2'); +} diff --git a/themes/markerbeacon/static/images/icons/aboutme.png b/themes/markerbeacon/static/images/icons/aboutme.png new file mode 100644 index 0000000..600110f Binary files /dev/null and b/themes/markerbeacon/static/images/icons/aboutme.png differ diff --git a/themes/markerbeacon/static/images/icons/bitbucket.png b/themes/markerbeacon/static/images/icons/bitbucket.png new file mode 100644 index 0000000..277a7df Binary files /dev/null and b/themes/markerbeacon/static/images/icons/bitbucket.png differ diff --git a/themes/markerbeacon/static/images/icons/delicious.png b/themes/markerbeacon/static/images/icons/delicious.png new file mode 100644 index 0000000..34868c5 Binary files /dev/null and b/themes/markerbeacon/static/images/icons/delicious.png differ diff --git a/themes/markerbeacon/static/images/icons/facebook.png b/themes/markerbeacon/static/images/icons/facebook.png new file mode 100644 index 0000000..1d8a432 Binary files /dev/null and b/themes/markerbeacon/static/images/icons/facebook.png differ diff --git a/themes/markerbeacon/static/images/icons/github.png b/themes/markerbeacon/static/images/icons/github.png new file mode 100644 index 0000000..5d9109d Binary files /dev/null and b/themes/markerbeacon/static/images/icons/github.png differ diff --git a/themes/markerbeacon/static/images/icons/gitorious.png b/themes/markerbeacon/static/images/icons/gitorious.png new file mode 100644 index 0000000..a6705d0 Binary files /dev/null and b/themes/markerbeacon/static/images/icons/gitorious.png differ diff --git a/themes/markerbeacon/static/images/icons/gittip.png b/themes/markerbeacon/static/images/icons/gittip.png new file mode 100644 index 0000000..b9f67aa Binary files /dev/null and b/themes/markerbeacon/static/images/icons/gittip.png differ diff --git a/themes/markerbeacon/static/images/icons/google-groups.png b/themes/markerbeacon/static/images/icons/google-groups.png new file mode 100644 index 0000000..bbd0a0f Binary files /dev/null and b/themes/markerbeacon/static/images/icons/google-groups.png differ diff --git a/themes/markerbeacon/static/images/icons/google-plus.png b/themes/markerbeacon/static/images/icons/google-plus.png new file mode 100644 index 0000000..f8553d4 Binary files /dev/null and b/themes/markerbeacon/static/images/icons/google-plus.png differ diff --git a/themes/markerbeacon/static/images/icons/hackernews.png b/themes/markerbeacon/static/images/icons/hackernews.png new file mode 100644 index 0000000..8e05e3e Binary files /dev/null and b/themes/markerbeacon/static/images/icons/hackernews.png differ diff --git a/themes/markerbeacon/static/images/icons/lastfm.png b/themes/markerbeacon/static/images/icons/lastfm.png new file mode 100644 index 0000000..2eedd2d Binary files /dev/null and b/themes/markerbeacon/static/images/icons/lastfm.png differ diff --git a/themes/markerbeacon/static/images/icons/linkedin.png b/themes/markerbeacon/static/images/icons/linkedin.png new file mode 100644 index 0000000..06a8801 Binary files /dev/null and b/themes/markerbeacon/static/images/icons/linkedin.png differ diff --git a/themes/markerbeacon/static/images/icons/reddit.png b/themes/markerbeacon/static/images/icons/reddit.png new file mode 100644 index 0000000..d826d3e Binary files /dev/null and b/themes/markerbeacon/static/images/icons/reddit.png differ diff --git a/themes/markerbeacon/static/images/icons/rss.png b/themes/markerbeacon/static/images/icons/rss.png new file mode 100644 index 0000000..12448f5 Binary files /dev/null and b/themes/markerbeacon/static/images/icons/rss.png differ diff --git a/themes/markerbeacon/static/images/icons/slideshare.png b/themes/markerbeacon/static/images/icons/slideshare.png new file mode 100644 index 0000000..9cbe858 Binary files /dev/null and b/themes/markerbeacon/static/images/icons/slideshare.png differ diff --git a/themes/markerbeacon/static/images/icons/speakerdeck.png b/themes/markerbeacon/static/images/icons/speakerdeck.png new file mode 100644 index 0000000..7281ec4 Binary files /dev/null and b/themes/markerbeacon/static/images/icons/speakerdeck.png differ diff --git a/themes/markerbeacon/static/images/icons/stackoverflow.png b/themes/markerbeacon/static/images/icons/stackoverflow.png new file mode 100644 index 0000000..3c6862e Binary files /dev/null and b/themes/markerbeacon/static/images/icons/stackoverflow.png differ diff --git a/themes/markerbeacon/static/images/icons/twitter.png b/themes/markerbeacon/static/images/icons/twitter.png new file mode 100644 index 0000000..cef1cef Binary files /dev/null and b/themes/markerbeacon/static/images/icons/twitter.png differ diff --git a/themes/markerbeacon/static/images/icons/vimeo.png b/themes/markerbeacon/static/images/icons/vimeo.png new file mode 100644 index 0000000..4b9d721 Binary files /dev/null and b/themes/markerbeacon/static/images/icons/vimeo.png differ diff --git a/themes/markerbeacon/static/images/icons/youtube.png b/themes/markerbeacon/static/images/icons/youtube.png new file mode 100644 index 0000000..e334e68 Binary files /dev/null and b/themes/markerbeacon/static/images/icons/youtube.png differ diff --git a/themes/markerbeacon/static/images/mb_logo_bkgnd2.jpg b/themes/markerbeacon/static/images/mb_logo_bkgnd2.jpg new file mode 100755 index 0000000..f1f61df Binary files /dev/null and b/themes/markerbeacon/static/images/mb_logo_bkgnd2.jpg differ diff --git a/themes/markerbeacon/static/images/title.jpg b/themes/markerbeacon/static/images/title.jpg new file mode 100755 index 0000000..f63c426 Binary files /dev/null and b/themes/markerbeacon/static/images/title.jpg differ diff --git a/themes/markerbeacon/templates/analytics.html b/themes/markerbeacon/templates/analytics.html new file mode 100644 index 0000000..071c77f --- /dev/null +++ b/themes/markerbeacon/templates/analytics.html @@ -0,0 +1,26 @@ +{% if GOOGLE_ANALYTICS %} + +{% endif %} +{% if GAUGES %} + +{% endif %} diff --git a/themes/markerbeacon/templates/archives.html b/themes/markerbeacon/templates/archives.html new file mode 100644 index 0000000..f678494 --- /dev/null +++ b/themes/markerbeacon/templates/archives.html @@ -0,0 +1,13 @@ +{% extends "base.html" %} +{% block content %} +
+

Archives for {{ SITENAME }}

+ +
+{% for article in dates %} +
{{ article.locale_date }}
+
{{ article.title }}
+{% endfor %} +
+
+{% endblock %} diff --git a/themes/markerbeacon/templates/article.html b/themes/markerbeacon/templates/article.html new file mode 100644 index 0000000..6abcb09 --- /dev/null +++ b/themes/markerbeacon/templates/article.html @@ -0,0 +1,53 @@ +{% extends "base.html" %} +{% block html_lang %}{{ article.lang }}{% endblock %} +{% block head -%} + {{ super() -}} + {% if article.summary %} + + {% endif %} +{% endblock %} + +{% block title %}{{ article.title|striptags }}{% endblock %} + +{% block extra_head %} +{% import 'translations.html' as translations with context %} +{% if translations.entry_hreflang(article) %} + {{ translations.entry_hreflang(article) }} +{% endif %} +{% endblock %} + +{% block content %} +
+
+
+

+ {{ article.title }}

+ {% include 'twitter.html' %} +
+ +
+ {% include 'article_infos.html' %} + {{ article.content }} +
+ {% if DISQUS_SITENAME and SITEURL and article.status != "draft" %} +
+

Comments !

+
+ + +
+ {% endif %} + +
+
+{% endblock %} diff --git a/themes/markerbeacon/templates/article_infos.html b/themes/markerbeacon/templates/article_infos.html new file mode 100644 index 0000000..172ad85 --- /dev/null +++ b/themes/markerbeacon/templates/article_infos.html @@ -0,0 +1,23 @@ +
+ + Published: {{ article.locale_date }} + + {% if article.modified %} +
+ + Updated: {{ article.locale_modified }} + + {% endif %} + + {% if article.authors %} +
+ By {% for author in article.authors %} + {{ author }} + {% endfor %} +
+ {% endif %} +

In {{ article.category }}.

+{% include 'taglist.html' %} +{% import 'translations.html' as translations with context %} +{{ translations.translations_for(article) }} +
diff --git a/themes/markerbeacon/templates/author.html b/themes/markerbeacon/templates/author.html new file mode 100644 index 0000000..0b37290 --- /dev/null +++ b/themes/markerbeacon/templates/author.html @@ -0,0 +1,2 @@ +{% extends "index.html" %} +{% block title %}{{ SITENAME }} - {{ author }}{% endblock %} diff --git a/themes/markerbeacon/templates/authors.html b/themes/markerbeacon/templates/authors.html new file mode 100644 index 0000000..e61a332 --- /dev/null +++ b/themes/markerbeacon/templates/authors.html @@ -0,0 +1,16 @@ +{% extends "base.html" %} + +{% block title %}{{ SITENAME }} - Authors{% endblock %} + +{% block content %} + +
+

Authors on {{ SITENAME }}

+
    + {% for author, articles in authors|sort %} +
  • {{ author }} ({{ articles|count }})
  • + {% endfor %} +
+
+ +{% endblock %} diff --git a/themes/markerbeacon/templates/base.html b/themes/markerbeacon/templates/base.html new file mode 100644 index 0000000..5bbca64 --- /dev/null +++ b/themes/markerbeacon/templates/base.html @@ -0,0 +1,80 @@ + + + + {% block head %} + + + {% block title %}{{ SITENAME }}{%endblock%} + + {% if FEED_ALL_ATOM %} + + {% endif %} + {% if FEED_ALL_RSS %} + + {% endif %} + {% block extra_head %}{% endblock extra_head %} + {% endblock head %} + + + +{% include 'github.html' %} + + {% block content %} + {% endblock %} +
+ {% if LINKS %} +
+

{{ LINKS_WIDGET_NAME | default('links') }}

+
    + {% for name, link in LINKS %} +
  • {{ name }}
  • + {% endfor %} +
+
+ {% endif %} + {% if SOCIAL or FEED_ALL_ATOM or FEED_ALL_RSS %} + + {% endif %} +
+ + + +{% include 'analytics.html' %} +{% include 'disqus_script.html' %} + + diff --git a/themes/markerbeacon/templates/category.html b/themes/markerbeacon/templates/category.html new file mode 100644 index 0000000..56f8e93 --- /dev/null +++ b/themes/markerbeacon/templates/category.html @@ -0,0 +1,2 @@ +{% extends "index.html" %} +{% block title %}{{ SITENAME }} - {{ category }}{% endblock %} diff --git a/themes/markerbeacon/templates/comments.html b/themes/markerbeacon/templates/comments.html new file mode 100644 index 0000000..bb033c0 --- /dev/null +++ b/themes/markerbeacon/templates/comments.html @@ -0,0 +1 @@ +{% if DISQUS_SITENAME %}

There are comments.

{% endif %} diff --git a/themes/markerbeacon/templates/disqus_script.html b/themes/markerbeacon/templates/disqus_script.html new file mode 100644 index 0000000..23ec532 --- /dev/null +++ b/themes/markerbeacon/templates/disqus_script.html @@ -0,0 +1,11 @@ +{% if DISQUS_SITENAME %} + +{% endif %} diff --git a/themes/markerbeacon/templates/gallery.html b/themes/markerbeacon/templates/gallery.html new file mode 100644 index 0000000..0af22ba --- /dev/null +++ b/themes/markerbeacon/templates/gallery.html @@ -0,0 +1,28 @@ +{% extends "base.html" %} +{% block html_lang %}{{ page.lang }}{% endblock %} +{% block title %}{{ page.title }}{% endblock %} + +{% block extra_head %} +{% import 'translations.html' as translations with context %} +{% if translations.entry_hreflang(page) %} + {{ translations.entry_hreflang(page) }} +{% endif %} +{% endblock %} + +{% block content %} +
+

{{ page.title }}

+ {% import 'translations.html' as translations with context %} + {{ translations.translations_for(page) }} + {{ page.content }} + +{% for album, images in page.gallery.items() %} + {% for image in images %} + + + {% endfor %} +{% endfor %} + +
+{% endblock %} diff --git a/themes/markerbeacon/templates/github.html b/themes/markerbeacon/templates/github.html new file mode 100644 index 0000000..ccc401f --- /dev/null +++ b/themes/markerbeacon/templates/github.html @@ -0,0 +1,9 @@ +{% if GITHUB_URL %} + +{% if GITHUB_POSITION != "left" %} +Fork me on GitHub +{% else %} +Fork me on GitHub +{% endif %} + +{% endif %} diff --git a/themes/markerbeacon/templates/index.html b/themes/markerbeacon/templates/index.html new file mode 100644 index 0000000..14e9c14 --- /dev/null +++ b/themes/markerbeacon/templates/index.html @@ -0,0 +1,65 @@ +{% extends "base.html" %} +{% block content_title %}{% endblock %} +{% block content %} +{% if articles %} + {% for article in articles_page.object_list %} + + {# First item #} + {% if loop.first and not articles_page.has_previous() %} + + {% if loop.length > 1 %} +
+

Other articles

+
+
    + {% endif %} + {# other items #} + {% else %} + {% if loop.first %} +
    +
      + {% endif %} +
    1. +
      +

      {{ article.title }}

      +
      + +
      + {% include 'article_infos.html' %} + {{ article.summary }} + read more + {% include 'comments.html' %} +
      +
    2. + {% endif %} + {% if loop.last %} + {% if loop.length > 1 or articles_page.has_other_pages() %} +
    + {% if articles_page.has_other_pages() %} + {% include 'pagination.html' %} + {% endif %} +
    + {% endif %} + {% endif %} + {% endfor %} +{% else %} +
    + {% if pages %} +

    Pages

    + + {% else %} +

    This site currently has no content.

    + {% endif %} +
    +{% endif %} +{% endblock content %} diff --git a/themes/markerbeacon/templates/page.html b/themes/markerbeacon/templates/page.html new file mode 100644 index 0000000..7e50c1f --- /dev/null +++ b/themes/markerbeacon/templates/page.html @@ -0,0 +1,19 @@ +{% extends "base.html" %} +{% block html_lang %}{{ page.lang }}{% endblock %} +{% block title %}{{ page.title }}{% endblock %} + +{% block extra_head %} +{% import 'translations.html' as translations with context %} +{% if translations.entry_hreflang(page) %} + {{ translations.entry_hreflang(page) }} +{% endif %} +{% endblock %} + +{% block content %} +
    +

    {{ page.title }}

    + {% import 'translations.html' as translations with context %} + {{ translations.translations_for(page) }} + {{ page.content }} +
    +{% endblock %} diff --git a/themes/markerbeacon/templates/period_archives.html b/themes/markerbeacon/templates/period_archives.html new file mode 100644 index 0000000..252e002 --- /dev/null +++ b/themes/markerbeacon/templates/period_archives.html @@ -0,0 +1,13 @@ +{% extends "base.html" %} +{% block content %} +
    +

    Archives for {{ period | reverse | join(' ') }}

    + +
    +{% for article in dates %} +
    {{ article.locale_date }}
    +
    {{ article.title }}
    +{% endfor %} +
    +
    +{% endblock %} diff --git a/themes/markerbeacon/templates/tag.html b/themes/markerbeacon/templates/tag.html new file mode 100644 index 0000000..68cdcba --- /dev/null +++ b/themes/markerbeacon/templates/tag.html @@ -0,0 +1,2 @@ +{% extends "index.html" %} +{% block title %}{{ SITENAME }} - {{ tag }}{% endblock %} diff --git a/themes/markerbeacon/templates/taglist.html b/themes/markerbeacon/templates/taglist.html new file mode 100644 index 0000000..58f3557 --- /dev/null +++ b/themes/markerbeacon/templates/taglist.html @@ -0,0 +1 @@ +{% if article.tags %}

    tags: {% for tag in article.tags %}{{ tag | escape }} {% endfor %}

    {% endif %} diff --git a/themes/markerbeacon/templates/tags.html b/themes/markerbeacon/templates/tags.html new file mode 100644 index 0000000..fb09955 --- /dev/null +++ b/themes/markerbeacon/templates/tags.html @@ -0,0 +1,16 @@ +{% extends "base.html" %} + +{% block title %}{{ SITENAME }} - Tags{% endblock %} + +{% block content %} + +
    +

    Tags for {{ SITENAME }}

    +
      + {% for tag, articles in tags|sort %} +
    • {{ tag }} ({{ articles|count }})
    • + {% endfor %} +
    +
    + +{% endblock %} diff --git a/themes/markerbeacon/templates/translations.html b/themes/markerbeacon/templates/translations.html new file mode 100644 index 0000000..1eec7c4 --- /dev/null +++ b/themes/markerbeacon/templates/translations.html @@ -0,0 +1,16 @@ +{% macro translations_for(article) %} +{% if article.translations %} +Translations: + {% for translation in article.translations %} + {{ translation.lang }} + {% endfor %} +{% endif %} +{% endmacro %} + +{% macro entry_hreflang(entry) %} +{% if entry.translations %} + {% for translation in entry.translations %} + + {% endfor %} +{% endif %} +{% endmacro %} diff --git a/themes/markerbeacon/templates/twitter.html b/themes/markerbeacon/templates/twitter.html new file mode 100644 index 0000000..bf78c32 --- /dev/null +++ b/themes/markerbeacon/templates/twitter.html @@ -0,0 +1,3 @@ +{% if TWITTER_USERNAME %} + +{% endif %} diff --git a/themes/notmyidea/static/css/fonts.css b/themes/notmyidea/static/css/fonts.css new file mode 100644 index 0000000..5601507 --- /dev/null +++ b/themes/notmyidea/static/css/fonts.css @@ -0,0 +1,12 @@ +@font-face { + font-family: 'Yanone Kaffeesatz'; + font-style: normal; + font-weight: 400; + src: + local('Yanone Kaffeesatz Regular'), + local('YanoneKaffeesatz-Regular'), + /* from https://fonts.gstatic.com/s/yanonekaffeesatz/v8/YDAoLskQQ5MOAgvHUQCcLRTHiN2BPBirwIkMLKUspj4.woff */ + url('../fonts/Yanone_Kaffeesatz_400.woff') format('woff'), + /* from https://fonts.gstatic.com/s/yanonekaffeesatz/v8/YDAoLskQQ5MOAgvHUQCcLfGwxTS8d1Q9KiDNCMKLFUM.woff2 */ + url('../fonts/Yanone_Kaffeesatz_400.woff2') format('woff2'); +} diff --git a/themes/notmyidea/static/css/main.css b/themes/notmyidea/static/css/main.css new file mode 100644 index 0000000..63f5adc --- /dev/null +++ b/themes/notmyidea/static/css/main.css @@ -0,0 +1,466 @@ +/* + Name: Smashing HTML5 + Date: July 2009 + Description: Sample layout for HTML5 and CSS3 goodness. + Version: 1.0 + License: MIT + Licensed by: Smashing Media GmbH + Original author: Enrique Ramírez +*/ + +/* Imports */ +@import url("reset.css"); +@import url("pygment.css"); +@import url("typogrify.css"); +@import url("fonts.css"); + +/***** Global *****/ +/* Body */ +body { + background: #F5F4EF; + color: #000305; + font-size: 87.5%; /* Base font size: 14px */ + font-family: 'Trebuchet MS', Trebuchet, 'Lucida Sans Unicode', 'Lucida Grande', 'Lucida Sans', Arial, sans-serif; + line-height: 1.429; + margin: 0; + padding: 0; + text-align: left; +} + +/* Headings */ +h1 {font-size: 2em } +h2 {font-size: 1.571em} /* 22px */ +h3 {font-size: 1.429em} /* 20px */ +h4 {font-size: 1.286em} /* 18px */ +h5 {font-size: 1.143em} /* 16px */ +h6 {font-size: 1em} /* 14px */ + +h1, h2, h3, h4, h5, h6 { + font-weight: 400; + line-height: 1.1; + margin-bottom: .8em; + font-family: 'Yanone Kaffeesatz', arial, serif; +} + +h3, h4, h5, h6 { margin-top: .8em; } + +hr { border: 2px solid #EEEEEE; } + +/* Anchors */ +a {outline: 0;} +a img {border: 0px; text-decoration: none;} +a:link, a:visited { + color: #C74350; + padding: 0 1px; + text-decoration: underline; +} +a:hover, a:active { + background-color: #C74350; + color: #fff; + text-decoration: none; + text-shadow: 1px 1px 1px #333; +} + +h1 a:hover { + background-color: inherit +} + +/* Paragraphs */ +div.line-block, +p { margin-top: 1em; + margin-bottom: 1em;} + +strong, b {font-weight: bold;} +em, i {font-style: italic;} + +/* Lists */ +ul { + list-style: outside disc; + margin: 0em 0 0 1.5em; +} + +ol { + list-style: outside decimal; + margin: 0em 0 0 1.5em; +} + +li { margin-top: 0.5em; + margin-bottom: 1em; } + +.post-info { + float:right; + margin:10px; + padding:5px; +} + +.post-info p{ + margin-top: 1px; + margin-bottom: 1px; +} + +.readmore { float: right } + +dl {margin: 0 0 1.5em 0;} +dt {font-weight: bold;} +dd {margin-left: 1.5em;} + +pre{background-color: rgb(238, 238, 238); padding: 10px; margin: 10px; overflow: auto;} + +/* Quotes */ +blockquote { + margin: 20px; + font-style: italic; +} +cite {} + +q {} + +div.note { + float: right; + margin: 5px; + font-size: 85%; + max-width: 300px; +} + +/* Tables */ +table {margin: .5em auto 1.5em auto; width: 98%;} + + /* Thead */ + thead th {padding: .5em .4em; text-align: left;} + thead td {} + + /* Tbody */ + tbody td {padding: .5em .4em;} + tbody th {} + + tbody .alt td {} + tbody .alt th {} + + /* Tfoot */ + tfoot th {} + tfoot td {} + +/* HTML5 tags */ +header, section, footer, +aside, nav, article, figure { + display: block; +} + +/***** Layout *****/ +.body {clear: both; margin: 0 auto; width: 800px;} +img.right, figure.right, div.figure.align-right { + float: right; + margin: 0 0 2em 2em; +} +img.left, figure.left, div.figure.align-left { + float: left; + margin: 0 2em 2em 0; +} + +/* .rst support */ +div.figure img, figure img { /* to fill figure exactly */ + width: 100%; +} +div.figure p.caption, figure p.caption { /* margin provided by figure */ + margin-top: 0; + margin-bottom: 0; +} + +/* + Header +*****************/ +#banner { + margin: 0 auto; + padding: 2.5em 0 0 0; +} + + /* Banner */ + #banner h1 {font-size: 3.571em; line-height: 0;} + #banner h1 a:link, #banner h1 a:visited { + color: #000305; + display: block; + font-weight: bold; + margin: 0 0 .6em .2em; + text-decoration: none; + } + #banner h1 a:hover, #banner h1 a:active { + background: none; + color: #C74350; + text-shadow: none; + } + + #banner h1 strong {font-size: 0.36em; font-weight: normal;} + + /* Main Nav */ + #banner nav { + background: #000305; + font-size: 1.143em; + height: 40px; + line-height: 30px; + margin: 0 auto 2em auto; + padding: 0; + text-align: center; + width: 800px; + + border-radius: 5px; + -moz-border-radius: 5px; + -webkit-border-radius: 5px; + } + + #banner nav ul {list-style: none; margin: 0 auto; width: 800px;} + #banner nav li {float: left; display: inline; margin: 0;} + + #banner nav a:link, #banner nav a:visited { + color: #fff; + display: inline-block; + height: 30px; + padding: 5px 1.5em; + text-decoration: none; + } + #banner nav a:hover, #banner nav a:active, + #banner nav .active a:link, #banner nav .active a:visited { + background: #C74451; + color: #fff; + text-shadow: none !important; + } + + #banner nav li:first-child a { + border-top-left-radius: 5px; + -moz-border-radius-topleft: 5px; + -webkit-border-top-left-radius: 5px; + + border-bottom-left-radius: 5px; + -moz-border-radius-bottomleft: 5px; + -webkit-border-bottom-left-radius: 5px; + } + +/* + Featured +*****************/ +#featured { + background: #fff; + margin-bottom: 2em; + overflow: hidden; + padding: 20px; + width: 760px; + + border-radius: 10px; + -moz-border-radius: 10px; + -webkit-border-radius: 10px; +} + +#featured figure { + border: 2px solid #eee; + float: right; + margin: 0.786em 2em 0 5em; + width: 248px; +} +#featured figure img {display: block; float: right;} + +#featured h2 {color: #C74451; font-size: 1.714em; margin-bottom: 0.333em;} +#featured h3 {font-size: 1.429em; margin-bottom: .5em;} + +#featured h3 a:link, #featured h3 a:visited {color: #000305; text-decoration: none;} +#featured h3 a:hover, #featured h3 a:active {color: #fff;} + +/* + Body +*****************/ +#content { + background: #fff; + margin-bottom: 2em; + overflow: hidden; + padding: 20px 20px; + width: 760px; + + border-radius: 10px; + -moz-border-radius: 10px; + -webkit-border-radius: 10px; +} + +/* + Extras +*****************/ +#extras {margin: 0 auto 3em auto; overflow: hidden;} + +#extras ul {list-style: none; margin: 0;} +#extras li {border-bottom: 1px solid #fff;} +#extras h2 { + color: #C74350; + font-size: 1.429em; + margin-bottom: .25em; + padding: 0 3px; +} + +#extras a:link, #extras a:visited { + color: #444; + display: block; + border-bottom: 1px solid #F4E3E3; + text-decoration: none; + padding: .3em .25em; +} + +#extras a:hover, #extras a:active {color: #fff;} + + /* Blogroll */ + #extras .blogroll { + float: left; + width: 615px; + } + + #extras .blogroll li {float: left; margin: 0 20px 0 0; width: 185px;} + + /* Social */ + #extras .social { + float: right; + width: 175px; + } + + #extras div[class='social'] a { + background-repeat: no-repeat; + background-position: 3px 6px; + padding-left: 25px; + } + + /* Icons */ + .social a[href*='about.me'] {background-image: url('../images/icons/aboutme.png');} + .social a[href*='bitbucket.org'] {background-image: url('../images/icons/bitbucket.png');} + .social a[href*='delicious.com'] {background-image: url('../images/icons/delicious.png');} + .social a[href*='facebook.com'] {background-image: url('../images/icons/facebook.png');} + .social a[href*='gitorious.org'] {background-image: url('../images/icons/gitorious.png');} + .social a[href*='github.com'], + .social a[href*='git.io'] { + background-image: url('../images/icons/github.png'); + background-size: 16px 16px; + } + .social a[href*='gittip.com'] {background-image: url('../images/icons/gittip.png');} + .social a[href*='plus.google.com'] {background-image: url('../images/icons/google-plus.png');} + .social a[href*='groups.google.com'] {background-image: url('../images/icons/google-groups.png');} + .social a[href*='news.ycombinator.com'], + .social a[href*='hackernewsers.com'] {background-image: url('../images/icons/hackernews.png');} + .social a[href*='last.fm'], .social a[href*='lastfm.'] {background-image: url('../images/icons/lastfm.png');} + .social a[href*='linkedin.com'] {background-image: url('../images/icons/linkedin.png');} + .social a[href*='reddit.com'] {background-image: url('../images/icons/reddit.png');} + .social a[type$='atom+xml'], .social a[type$='rss+xml'] {background-image: url('../images/icons/rss.png');} + .social a[href*='slideshare.net'] {background-image: url('../images/icons/slideshare.png');} + .social a[href*='speakerdeck.com'] {background-image: url('../images/icons/speakerdeck.png');} + .social a[href*='stackoverflow.com'] {background-image: url('../images/icons/stackoverflow.png');} + .social a[href*='twitter.com'] {background-image: url('../images/icons/twitter.png');} + .social a[href*='vimeo.com'] {background-image: url('../images/icons/vimeo.png');} + .social a[href*='youtube.com'] {background-image: url('../images/icons/youtube.png');} + +/* + About +*****************/ +#about { + background: #fff; + font-style: normal; + margin-bottom: 2em; + overflow: hidden; + padding: 20px; + text-align: left; + width: 760px; + + border-radius: 10px; + -moz-border-radius: 10px; + -webkit-border-radius: 10px; +} + +#about .primary {float: left; width: 165px;} +#about .primary strong {color: #C64350; display: block; font-size: 1.286em;} +#about .photo {float: left; margin: 5px 20px;} + +#about .url:link, #about .url:visited {text-decoration: none;} + +#about .bio {float: right; width: 500px;} + +/* + Footer +*****************/ +#contentinfo {padding-bottom: 2em; text-align: right;} + +/***** Sections *****/ +/* Blog */ +.hentry { + display: block; + clear: both; + border-bottom: 1px solid #eee; + padding: 1.5em 0; +} +li:last-child .hentry, #content > .hentry {border: 0; margin: 0;} +#content > .hentry {padding: 1em 0;} +.hentry img{display : none ;} +.entry-title {font-size: 3em; margin-bottom: 10px; margin-top: 0;} +.entry-title a:link, .entry-title a:visited {text-decoration: none; color: #333;} +.entry-title a:visited {background-color: #fff;} + +.hentry .post-info * {font-style: normal;} + + /* Content */ + .hentry footer {margin-bottom: 2em;} + .hentry footer address {display: inline;} + #posts-list footer address {display: block;} + + /* Blog Index */ + #posts-list {list-style: none; margin: 0;} + #posts-list .hentry {padding-left: 10px; position: relative;} + + #posts-list footer { + left: 10px; + position: relative; + float: left; + top: 0.5em; + width: 190px; + } + + /* About the Author */ + #about-author { + background: #f9f9f9; + clear: both; + font-style: normal; + margin: 2em 0; + padding: 10px 20px 15px 20px; + + border-radius: 5px; + -moz-border-radius: 5px; + -webkit-border-radius: 5px; + } + + #about-author strong { + color: #C64350; + clear: both; + display: block; + font-size: 1.429em; + } + + #about-author .photo {border: 1px solid #ddd; float: left; margin: 5px 1em 0 0;} + + /* Comments */ + #comments-list {list-style: none; margin: 0 1em;} + #comments-list blockquote { + background: #f8f8f8; + clear: both; + font-style: normal; + margin: 0; + padding: 15px 20px; + + border-radius: 5px; + -moz-border-radius: 5px; + -webkit-border-radius: 5px; + } + #comments-list footer {color: #888; padding: .5em 1em 0 0; text-align: right;} + + #comments-list li:nth-child(2n) blockquote {background: #F5f5f5;} + + /* Add a Comment */ + #add-comment label {clear: left; float: left; text-align: left; width: 150px;} + #add-comment input[type='text'], + #add-comment input[type='email'], + #add-comment input[type='url'] {float: left; width: 200px;} + + #add-comment textarea {float: left; height: 150px; width: 495px;} + + #add-comment p.req {clear: both; margin: 0 .5em 1em 0; text-align: right;} + + #add-comment input[type='submit'] {float: right; margin: 0 .5em;} + #add-comment * {margin-bottom: .5em;} diff --git a/themes/notmyidea/static/css/pygment.css b/themes/notmyidea/static/css/pygment.css new file mode 100644 index 0000000..fdd056f --- /dev/null +++ b/themes/notmyidea/static/css/pygment.css @@ -0,0 +1,205 @@ +.hll { +background-color:#eee; +} +.c { +color:#408090; +font-style:italic; +} +.err { +border:1px solid #FF0000; +} +.k { +color:#007020; +font-weight:bold; +} +.o { +color:#666666; +} +.cm { +color:#408090; +font-style:italic; +} +.cp { +color:#007020; +} +.c1 { +color:#408090; +font-style:italic; +} +.cs { +background-color:#FFF0F0; +color:#408090; +} +.gd { +color:#A00000; +} +.ge { +font-style:italic; +} +.gr { +color:#FF0000; +} +.gh { +color:#000080; +font-weight:bold; +} +.gi { +color:#00A000; +} +.go { +color:#303030; +} +.gp { +color:#C65D09; +font-weight:bold; +} +.gs { +font-weight:bold; +} +.gu { +color:#800080; +font-weight:bold; +} +.gt { +color:#0040D0; +} +.kc { +color:#007020; +font-weight:bold; +} +.kd { +color:#007020; +font-weight:bold; +} +.kn { +color:#007020; +font-weight:bold; +} +.kp { +color:#007020; +} +.kr { +color:#007020; +font-weight:bold; +} +.kt { +color:#902000; +} +.m { +color:#208050; +} +.s { +color:#4070A0; +} +.na { +color:#4070A0; +} +.nb { +color:#007020; +} +.nc { +color:#0E84B5; +font-weight:bold; +} +.no { +color:#60ADD5; +} +.nd { +color:#555555; +font-weight:bold; +} +.ni { +color:#D55537; +font-weight:bold; +} +.ne { +color:#007020; +} +.nf { +color:#06287E; +} +.nl { +color:#002070; +font-weight:bold; +} +.nn { +color:#0E84B5; +font-weight:bold; +} +.nt { +color:#062873; +font-weight:bold; +} +.nv { +color:#BB60D5; +} +.ow { +color:#007020; +font-weight:bold; +} +.w { +color:#BBBBBB; +} +.mf { +color:#208050; +} +.mh { +color:#208050; +} +.mi { +color:#208050; +} +.mo { +color:#208050; +} +.sb { +color:#4070A0; +} +.sc { +color:#4070A0; +} +.sd { +color:#4070A0; +font-style:italic; +} +.s2 { +color:#4070A0; +} +.se { +color:#4070A0; +font-weight:bold; +} +.sh { +color:#4070A0; +} +.si { +color:#70A0D0; +font-style:italic; +} +.sx { +color:#C65D09; +} +.sr { +color:#235388; +} +.s1 { +color:#4070A0; +} +.ss { +color:#517918; +} +.bp { +color:#007020; +} +.vc { +color:#BB60D5; +} +.vg { +color:#BB60D5; +} +.vi { +color:#BB60D5; +} +.il { +color:#208050; +} diff --git a/themes/notmyidea/static/css/reset.css b/themes/notmyidea/static/css/reset.css new file mode 100644 index 0000000..c88e619 --- /dev/null +++ b/themes/notmyidea/static/css/reset.css @@ -0,0 +1,52 @@ +/* + Name: Reset Stylesheet + Description: Resets browser's default CSS + Author: Eric Meyer + Author URI: https://meyerweb.com/eric/tools/css/reset/ +*/ + +/* v1.0 | 20080212 */ +html, body, div, span, applet, object, iframe, +h1, h2, h3, h4, h5, h6, p, blockquote, pre, +a, abbr, acronym, address, big, cite, code, +del, dfn, em, font, img, ins, kbd, q, s, samp, +small, strike, strong, sub, sup, tt, var, +b, u, i, center, +dl, dt, dd, ol, ul, li, +fieldset, form, label, legend, +table, caption, tbody, tfoot, thead, tr, th, td { + background: transparent; + border: 0; + font-size: 100%; + margin: 0; + outline: 0; + padding: 0; + vertical-align: baseline; +} + +body {line-height: 1;} + +ol, ul {list-style: none;} + +blockquote, q {quotes: none;} + +blockquote:before, blockquote:after, +q:before, q:after { + content: ''; + content: none; +} + +/* remember to define focus styles! */ +:focus { + outline: 0; +} + +/* remember to highlight inserts somehow! */ +ins {text-decoration: none;} +del {text-decoration: line-through;} + +/* tables still need 'cellspacing="0"' in the markup */ +table { + border-collapse: collapse; + border-spacing: 0; +} \ No newline at end of file diff --git a/themes/notmyidea/static/css/typogrify.css b/themes/notmyidea/static/css/typogrify.css new file mode 100644 index 0000000..3bae497 --- /dev/null +++ b/themes/notmyidea/static/css/typogrify.css @@ -0,0 +1,3 @@ +.caps {font-size:.92em;} +.amp {color:#666; font-size:1.05em;font-family:"Warnock Pro", "Goudy Old Style","Palatino","Book Antiqua",serif; font-style:italic;} +.dquo {margin-left:-.38em;} diff --git a/themes/notmyidea/static/css/wide.css b/themes/notmyidea/static/css/wide.css new file mode 100644 index 0000000..88fd59c --- /dev/null +++ b/themes/notmyidea/static/css/wide.css @@ -0,0 +1,48 @@ +@import url("main.css"); + +body { + font:1.3em/1.3 "Hoefler Text","Georgia",Georgia,serif,sans-serif; +} + +.post-info{ + display: none; +} + +#banner nav { + display: none; + -moz-border-radius: 0px; + margin-bottom: 20px; + overflow: hidden; + font-size: 1em; + background: #F5F4EF; +} + +#banner nav ul{ + padding-right: 50px; +} + +#banner nav li{ + float: right; + color: #000; +} + +#banner nav li a { + color: #000; +} + +#banner h1 { + margin-bottom: -18px; +} + +#featured, #extras { + padding: 50px; +} + +#featured { + padding-top: 20px; +} + +#extras { + padding-top: 0px; + padding-bottom: 0px; +} diff --git a/themes/notmyidea/static/fonts/Yanone_Kaffeesatz_400.eot b/themes/notmyidea/static/fonts/Yanone_Kaffeesatz_400.eot new file mode 100644 index 0000000..b3b90db Binary files /dev/null and b/themes/notmyidea/static/fonts/Yanone_Kaffeesatz_400.eot differ diff --git a/themes/notmyidea/static/fonts/Yanone_Kaffeesatz_400.svg b/themes/notmyidea/static/fonts/Yanone_Kaffeesatz_400.svg new file mode 100644 index 0000000..a69669b --- /dev/null +++ b/themes/notmyidea/static/fonts/Yanone_Kaffeesatz_400.svg @@ -0,0 +1,407 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/themes/notmyidea/static/fonts/Yanone_Kaffeesatz_400.ttf b/themes/notmyidea/static/fonts/Yanone_Kaffeesatz_400.ttf new file mode 100644 index 0000000..6f4feb0 Binary files /dev/null and b/themes/notmyidea/static/fonts/Yanone_Kaffeesatz_400.ttf differ diff --git a/themes/notmyidea/static/fonts/Yanone_Kaffeesatz_400.woff b/themes/notmyidea/static/fonts/Yanone_Kaffeesatz_400.woff new file mode 100644 index 0000000..ddccf76 Binary files /dev/null and b/themes/notmyidea/static/fonts/Yanone_Kaffeesatz_400.woff differ diff --git a/themes/notmyidea/static/fonts/Yanone_Kaffeesatz_400.woff2 b/themes/notmyidea/static/fonts/Yanone_Kaffeesatz_400.woff2 new file mode 100644 index 0000000..7b18f7e Binary files /dev/null and b/themes/notmyidea/static/fonts/Yanone_Kaffeesatz_400.woff2 differ diff --git a/themes/notmyidea/static/fonts/font.css b/themes/notmyidea/static/fonts/font.css new file mode 100644 index 0000000..a9eb87e --- /dev/null +++ b/themes/notmyidea/static/fonts/font.css @@ -0,0 +1,12 @@ +@font-face { + font-family: 'Yanone Kaffeesatz'; + font-style: normal; + font-weight: 400; + src: + local('Yanone Kaffeesatz Regular'), + local('YanoneKaffeesatz-Regular'), + /* from https://fonts.gstatic.com/s/yanonekaffeesatz/v8/YDAoLskQQ5MOAgvHUQCcLRTHiN2BPBirwIkMLKUspj4.woff */ + url('Yanone_Kaffeesatz_400.woff') format('woff'), + /* from https://fonts.gstatic.com/s/yanonekaffeesatz/v8/YDAoLskQQ5MOAgvHUQCcLfGwxTS8d1Q9KiDNCMKLFUM.woff2 */ + url('Yanone_Kaffeesatz_400.woff2') format('woff2'); +} diff --git a/themes/notmyidea/static/images/icons/aboutme.png b/themes/notmyidea/static/images/icons/aboutme.png new file mode 100644 index 0000000..600110f Binary files /dev/null and b/themes/notmyidea/static/images/icons/aboutme.png differ diff --git a/themes/notmyidea/static/images/icons/bitbucket.png b/themes/notmyidea/static/images/icons/bitbucket.png new file mode 100644 index 0000000..277a7df Binary files /dev/null and b/themes/notmyidea/static/images/icons/bitbucket.png differ diff --git a/themes/notmyidea/static/images/icons/delicious.png b/themes/notmyidea/static/images/icons/delicious.png new file mode 100644 index 0000000..34868c5 Binary files /dev/null and b/themes/notmyidea/static/images/icons/delicious.png differ diff --git a/themes/notmyidea/static/images/icons/facebook.png b/themes/notmyidea/static/images/icons/facebook.png new file mode 100644 index 0000000..1d8a432 Binary files /dev/null and b/themes/notmyidea/static/images/icons/facebook.png differ diff --git a/themes/notmyidea/static/images/icons/github.png b/themes/notmyidea/static/images/icons/github.png new file mode 100644 index 0000000..5d9109d Binary files /dev/null and b/themes/notmyidea/static/images/icons/github.png differ diff --git a/themes/notmyidea/static/images/icons/gitorious.png b/themes/notmyidea/static/images/icons/gitorious.png new file mode 100644 index 0000000..a6705d0 Binary files /dev/null and b/themes/notmyidea/static/images/icons/gitorious.png differ diff --git a/themes/notmyidea/static/images/icons/gittip.png b/themes/notmyidea/static/images/icons/gittip.png new file mode 100644 index 0000000..b9f67aa Binary files /dev/null and b/themes/notmyidea/static/images/icons/gittip.png differ diff --git a/themes/notmyidea/static/images/icons/google-groups.png b/themes/notmyidea/static/images/icons/google-groups.png new file mode 100644 index 0000000..bbd0a0f Binary files /dev/null and b/themes/notmyidea/static/images/icons/google-groups.png differ diff --git a/themes/notmyidea/static/images/icons/google-plus.png b/themes/notmyidea/static/images/icons/google-plus.png new file mode 100644 index 0000000..f8553d4 Binary files /dev/null and b/themes/notmyidea/static/images/icons/google-plus.png differ diff --git a/themes/notmyidea/static/images/icons/hackernews.png b/themes/notmyidea/static/images/icons/hackernews.png new file mode 100644 index 0000000..8e05e3e Binary files /dev/null and b/themes/notmyidea/static/images/icons/hackernews.png differ diff --git a/themes/notmyidea/static/images/icons/lastfm.png b/themes/notmyidea/static/images/icons/lastfm.png new file mode 100644 index 0000000..2eedd2d Binary files /dev/null and b/themes/notmyidea/static/images/icons/lastfm.png differ diff --git a/themes/notmyidea/static/images/icons/linkedin.png b/themes/notmyidea/static/images/icons/linkedin.png new file mode 100644 index 0000000..06a8801 Binary files /dev/null and b/themes/notmyidea/static/images/icons/linkedin.png differ diff --git a/themes/notmyidea/static/images/icons/reddit.png b/themes/notmyidea/static/images/icons/reddit.png new file mode 100644 index 0000000..d826d3e Binary files /dev/null and b/themes/notmyidea/static/images/icons/reddit.png differ diff --git a/themes/notmyidea/static/images/icons/rss.png b/themes/notmyidea/static/images/icons/rss.png new file mode 100644 index 0000000..12448f5 Binary files /dev/null and b/themes/notmyidea/static/images/icons/rss.png differ diff --git a/themes/notmyidea/static/images/icons/slideshare.png b/themes/notmyidea/static/images/icons/slideshare.png new file mode 100644 index 0000000..9cbe858 Binary files /dev/null and b/themes/notmyidea/static/images/icons/slideshare.png differ diff --git a/themes/notmyidea/static/images/icons/speakerdeck.png b/themes/notmyidea/static/images/icons/speakerdeck.png new file mode 100644 index 0000000..7281ec4 Binary files /dev/null and b/themes/notmyidea/static/images/icons/speakerdeck.png differ diff --git a/themes/notmyidea/static/images/icons/stackoverflow.png b/themes/notmyidea/static/images/icons/stackoverflow.png new file mode 100644 index 0000000..3c6862e Binary files /dev/null and b/themes/notmyidea/static/images/icons/stackoverflow.png differ diff --git a/themes/notmyidea/static/images/icons/twitter.png b/themes/notmyidea/static/images/icons/twitter.png new file mode 100644 index 0000000..cef1cef Binary files /dev/null and b/themes/notmyidea/static/images/icons/twitter.png differ diff --git a/themes/notmyidea/static/images/icons/vimeo.png b/themes/notmyidea/static/images/icons/vimeo.png new file mode 100644 index 0000000..4b9d721 Binary files /dev/null and b/themes/notmyidea/static/images/icons/vimeo.png differ diff --git a/themes/notmyidea/static/images/icons/youtube.png b/themes/notmyidea/static/images/icons/youtube.png new file mode 100644 index 0000000..e334e68 Binary files /dev/null and b/themes/notmyidea/static/images/icons/youtube.png differ diff --git a/themes/notmyidea/templates/analytics.html b/themes/notmyidea/templates/analytics.html new file mode 100644 index 0000000..071c77f --- /dev/null +++ b/themes/notmyidea/templates/analytics.html @@ -0,0 +1,26 @@ +{% if GOOGLE_ANALYTICS %} + +{% endif %} +{% if GAUGES %} + +{% endif %} diff --git a/themes/notmyidea/templates/archives.html b/themes/notmyidea/templates/archives.html new file mode 100644 index 0000000..f678494 --- /dev/null +++ b/themes/notmyidea/templates/archives.html @@ -0,0 +1,13 @@ +{% extends "base.html" %} +{% block content %} +
    +

    Archives for {{ SITENAME }}

    + +
    +{% for article in dates %} +
    {{ article.locale_date }}
    +
    {{ article.title }}
    +{% endfor %} +
    +
    +{% endblock %} diff --git a/themes/notmyidea/templates/article.html b/themes/notmyidea/templates/article.html new file mode 100644 index 0000000..6abcb09 --- /dev/null +++ b/themes/notmyidea/templates/article.html @@ -0,0 +1,53 @@ +{% extends "base.html" %} +{% block html_lang %}{{ article.lang }}{% endblock %} +{% block head -%} + {{ super() -}} + {% if article.summary %} + + {% endif %} +{% endblock %} + +{% block title %}{{ article.title|striptags }}{% endblock %} + +{% block extra_head %} +{% import 'translations.html' as translations with context %} +{% if translations.entry_hreflang(article) %} + {{ translations.entry_hreflang(article) }} +{% endif %} +{% endblock %} + +{% block content %} +
    +
    +
    +

    + {{ article.title }}

    + {% include 'twitter.html' %} +
    + +
    + {% include 'article_infos.html' %} + {{ article.content }} +
    + {% if DISQUS_SITENAME and SITEURL and article.status != "draft" %} +
    +

    Comments !

    +
    + + +
    + {% endif %} + +
    +
    +{% endblock %} diff --git a/themes/notmyidea/templates/article_infos.html b/themes/notmyidea/templates/article_infos.html new file mode 100644 index 0000000..172ad85 --- /dev/null +++ b/themes/notmyidea/templates/article_infos.html @@ -0,0 +1,23 @@ +
    + + Published: {{ article.locale_date }} + + {% if article.modified %} +
    + + Updated: {{ article.locale_modified }} + + {% endif %} + + {% if article.authors %} +
    + By {% for author in article.authors %} + {{ author }} + {% endfor %} +
    + {% endif %} +

    In {{ article.category }}.

    +{% include 'taglist.html' %} +{% import 'translations.html' as translations with context %} +{{ translations.translations_for(article) }} +
    diff --git a/themes/notmyidea/templates/author.html b/themes/notmyidea/templates/author.html new file mode 100644 index 0000000..0b37290 --- /dev/null +++ b/themes/notmyidea/templates/author.html @@ -0,0 +1,2 @@ +{% extends "index.html" %} +{% block title %}{{ SITENAME }} - {{ author }}{% endblock %} diff --git a/themes/notmyidea/templates/authors.html b/themes/notmyidea/templates/authors.html new file mode 100644 index 0000000..e61a332 --- /dev/null +++ b/themes/notmyidea/templates/authors.html @@ -0,0 +1,16 @@ +{% extends "base.html" %} + +{% block title %}{{ SITENAME }} - Authors{% endblock %} + +{% block content %} + +
    +

    Authors on {{ SITENAME }}

    +
      + {% for author, articles in authors|sort %} +
    • {{ author }} ({{ articles|count }})
    • + {% endfor %} +
    +
    + +{% endblock %} diff --git a/themes/notmyidea/templates/base.html b/themes/notmyidea/templates/base.html new file mode 100644 index 0000000..6be5f1d --- /dev/null +++ b/themes/notmyidea/templates/base.html @@ -0,0 +1,82 @@ + + + + {% block head %} + + + {% block title %}{{ SITENAME }}{%endblock%} + + {% if FEED_ALL_ATOM %} + + {% endif %} + {% if FEED_ALL_RSS %} + + {% endif %} + {% block extra_head %}{% endblock extra_head %} + {% endblock head %} + + + +{% include 'github.html' %} + + {% block content %} + {% endblock %} +
    + {% if LINKS %} +
    +

    {{ LINKS_WIDGET_NAME | default('links') }}

    +
      + {% for name, link in LINKS %} +
    • {{ name }}
    • + {% endfor %} +
    +
    + {% endif %} + {% if SOCIAL or FEED_ALL_ATOM or FEED_ALL_RSS %} + + {% endif %} +
    + + + +{% include 'analytics.html' %} +{% include 'disqus_script.html' %} + + diff --git a/themes/notmyidea/templates/category.html b/themes/notmyidea/templates/category.html new file mode 100644 index 0000000..56f8e93 --- /dev/null +++ b/themes/notmyidea/templates/category.html @@ -0,0 +1,2 @@ +{% extends "index.html" %} +{% block title %}{{ SITENAME }} - {{ category }}{% endblock %} diff --git a/themes/notmyidea/templates/comments.html b/themes/notmyidea/templates/comments.html new file mode 100644 index 0000000..bb033c0 --- /dev/null +++ b/themes/notmyidea/templates/comments.html @@ -0,0 +1 @@ +{% if DISQUS_SITENAME %}

    There are comments.

    {% endif %} diff --git a/themes/notmyidea/templates/disqus_script.html b/themes/notmyidea/templates/disqus_script.html new file mode 100644 index 0000000..23ec532 --- /dev/null +++ b/themes/notmyidea/templates/disqus_script.html @@ -0,0 +1,11 @@ +{% if DISQUS_SITENAME %} + +{% endif %} diff --git a/themes/notmyidea/templates/github.html b/themes/notmyidea/templates/github.html new file mode 100644 index 0000000..ccc401f --- /dev/null +++ b/themes/notmyidea/templates/github.html @@ -0,0 +1,9 @@ +{% if GITHUB_URL %} + +{% if GITHUB_POSITION != "left" %} +Fork me on GitHub +{% else %} +Fork me on GitHub +{% endif %} + +{% endif %} diff --git a/themes/notmyidea/templates/index.html b/themes/notmyidea/templates/index.html new file mode 100644 index 0000000..14e9c14 --- /dev/null +++ b/themes/notmyidea/templates/index.html @@ -0,0 +1,65 @@ +{% extends "base.html" %} +{% block content_title %}{% endblock %} +{% block content %} +{% if articles %} + {% for article in articles_page.object_list %} + + {# First item #} + {% if loop.first and not articles_page.has_previous() %} + + {% if loop.length > 1 %} +
    +

    Other articles

    +
    +
      + {% endif %} + {# other items #} + {% else %} + {% if loop.first %} +
      +
        + {% endif %} +
      1. +
        +

        {{ article.title }}

        +
        + +
        + {% include 'article_infos.html' %} + {{ article.summary }} + read more + {% include 'comments.html' %} +
        +
      2. + {% endif %} + {% if loop.last %} + {% if loop.length > 1 or articles_page.has_other_pages() %} +
      + {% if articles_page.has_other_pages() %} + {% include 'pagination.html' %} + {% endif %} +
      + {% endif %} + {% endif %} + {% endfor %} +{% else %} +
      + {% if pages %} +

      Pages

      + + {% else %} +

      This site currently has no content.

      + {% endif %} +
      +{% endif %} +{% endblock content %} diff --git a/themes/notmyidea/templates/page.html b/themes/notmyidea/templates/page.html new file mode 100644 index 0000000..7e50c1f --- /dev/null +++ b/themes/notmyidea/templates/page.html @@ -0,0 +1,19 @@ +{% extends "base.html" %} +{% block html_lang %}{{ page.lang }}{% endblock %} +{% block title %}{{ page.title }}{% endblock %} + +{% block extra_head %} +{% import 'translations.html' as translations with context %} +{% if translations.entry_hreflang(page) %} + {{ translations.entry_hreflang(page) }} +{% endif %} +{% endblock %} + +{% block content %} +
      +

      {{ page.title }}

      + {% import 'translations.html' as translations with context %} + {{ translations.translations_for(page) }} + {{ page.content }} +
      +{% endblock %} diff --git a/themes/notmyidea/templates/period_archives.html b/themes/notmyidea/templates/period_archives.html new file mode 100644 index 0000000..252e002 --- /dev/null +++ b/themes/notmyidea/templates/period_archives.html @@ -0,0 +1,13 @@ +{% extends "base.html" %} +{% block content %} +
      +

      Archives for {{ period | reverse | join(' ') }}

      + +
      +{% for article in dates %} +
      {{ article.locale_date }}
      +
      {{ article.title }}
      +{% endfor %} +
      +
      +{% endblock %} diff --git a/themes/notmyidea/templates/tag.html b/themes/notmyidea/templates/tag.html new file mode 100644 index 0000000..68cdcba --- /dev/null +++ b/themes/notmyidea/templates/tag.html @@ -0,0 +1,2 @@ +{% extends "index.html" %} +{% block title %}{{ SITENAME }} - {{ tag }}{% endblock %} diff --git a/themes/notmyidea/templates/taglist.html b/themes/notmyidea/templates/taglist.html new file mode 100644 index 0000000..58f3557 --- /dev/null +++ b/themes/notmyidea/templates/taglist.html @@ -0,0 +1 @@ +{% if article.tags %}

      tags: {% for tag in article.tags %}{{ tag | escape }} {% endfor %}

      {% endif %} diff --git a/themes/notmyidea/templates/tags.html b/themes/notmyidea/templates/tags.html new file mode 100644 index 0000000..fb09955 --- /dev/null +++ b/themes/notmyidea/templates/tags.html @@ -0,0 +1,16 @@ +{% extends "base.html" %} + +{% block title %}{{ SITENAME }} - Tags{% endblock %} + +{% block content %} + +
      +

      Tags for {{ SITENAME }}

      +
        + {% for tag, articles in tags|sort %} +
      • {{ tag }} ({{ articles|count }})
      • + {% endfor %} +
      +
      + +{% endblock %} diff --git a/themes/notmyidea/templates/translations.html b/themes/notmyidea/templates/translations.html new file mode 100644 index 0000000..1eec7c4 --- /dev/null +++ b/themes/notmyidea/templates/translations.html @@ -0,0 +1,16 @@ +{% macro translations_for(article) %} +{% if article.translations %} +Translations: + {% for translation in article.translations %} + {{ translation.lang }} + {% endfor %} +{% endif %} +{% endmacro %} + +{% macro entry_hreflang(entry) %} +{% if entry.translations %} + {% for translation in entry.translations %} + + {% endfor %} +{% endif %} +{% endmacro %} diff --git a/themes/notmyidea/templates/twitter.html b/themes/notmyidea/templates/twitter.html new file mode 100644 index 0000000..bf78c32 --- /dev/null +++ b/themes/notmyidea/templates/twitter.html @@ -0,0 +1,3 @@ +{% if TWITTER_USERNAME %} + +{% endif %}