@ -0,0 +1,6 @@ |
|||||||
|
<article class="error"> |
||||||
|
<h1> |
||||||
|
This is not the page you were looking for |
||||||
|
</h1> |
||||||
|
</article> |
||||||
|
|
@ -0,0 +1,17 @@ |
|||||||
|
Copyright (c) 2020 Igor Laborie, Özcan Oğuz |
||||||
|
|
||||||
|
GNU AFFERO GENERAL PUBLIC LICENSE |
||||||
|
Version 3, 19 November 2007 |
||||||
|
|
||||||
|
This program is free software: you can redistribute it and/or modify |
||||||
|
it under the terms of the GNU Affero General Public License as published |
||||||
|
by the Free Software Foundation, either version 3 of the License, or |
||||||
|
(at your option) any later version. |
||||||
|
|
||||||
|
This program is distributed in the hope that it will be useful, |
||||||
|
but WITHOUT ANY WARRANTY; without even the implied warranty of |
||||||
|
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the |
||||||
|
GNU Affero General Public License for more details. |
||||||
|
|
||||||
|
You should have received a copy of the GNU Affero General Public License |
||||||
|
along with this program. If not, see <http://www.gnu.org/licenses/>. |
@ -0,0 +1,9 @@ |
|||||||
|
--- |
||||||
|
title: "{{ replace .TranslationBaseName "-" " " | title }}" |
||||||
|
date: {{ .Date }} |
||||||
|
image: "a header image" |
||||||
|
brief: "A short brief" |
||||||
|
draft: true |
||||||
|
--- |
||||||
|
|
||||||
|
TODO |
@ -0,0 +1,6 @@ |
|||||||
|
--- |
||||||
|
title: "{{ replace .TranslationBaseName "-" " " | title }}" |
||||||
|
--- |
||||||
|
|
||||||
|
{{< hero >}} |
||||||
|
{{< /hero >}} |
@ -0,0 +1,15 @@ |
|||||||
|
--- |
||||||
|
title: "{{ replace .TranslationBaseName "-" " " | title }}" |
||||||
|
date: {{ .Date }} |
||||||
|
type: partner |
||||||
|
category: platinium |
||||||
|
website: 'https://www.airbus.com/' |
||||||
|
logo: /images/partners/logo-airbus.png |
||||||
|
socials: |
||||||
|
- name: twitter |
||||||
|
url: 'https://twitter.com/airbus' |
||||||
|
- name: linkedin |
||||||
|
url: 'https://www.linkedin.com/in/airbus' |
||||||
|
--- |
||||||
|
|
||||||
|
TODO Description |
@ -0,0 +1,15 @@ |
|||||||
|
--- |
||||||
|
id: XXX |
||||||
|
title: lorem ipsum |
||||||
|
language: Français |
||||||
|
complexity: Débutant |
||||||
|
talkType: Conférence |
||||||
|
speakers: |
||||||
|
- guillaume_membre |
||||||
|
tags: |
||||||
|
- IOT |
||||||
|
presentation: http://slideshare..... |
||||||
|
videoId: Youtube Id |
||||||
|
--- |
||||||
|
|
||||||
|
Full description |
@ -0,0 +1,17 @@ |
|||||||
|
--- |
||||||
|
id: "{{ .TranslationBaseName | title }}" |
||||||
|
name: "{{ replace .TranslationBaseName "-" " " | title }}" |
||||||
|
company: XXX Corp |
||||||
|
featured: false |
||||||
|
photo: /images/speakers/alexandre_delattre.jpg |
||||||
|
socials: |
||||||
|
- icon: twitter |
||||||
|
link: 'https://twitter.com/XXX' |
||||||
|
name: '@XXX' |
||||||
|
shortBio: lorem ipsum ... |
||||||
|
companyLogo: /images/speakers/company/YYY.jpg |
||||||
|
country: 'Toulouse, France' |
||||||
|
|
||||||
|
--- |
||||||
|
|
||||||
|
Full bio |
@ -0,0 +1,14 @@ |
|||||||
|
--- |
||||||
|
title: XXX |
||||||
|
type: core |
||||||
|
subtitle: XXX |
||||||
|
photo: /images/people/kevin_davin.png |
||||||
|
socials: |
||||||
|
- link: 'https://twitter.com/XXX' |
||||||
|
name: Twitter |
||||||
|
- link: 'https://github.com/XXX' |
||||||
|
name: Github |
||||||
|
- link: www.linkedin.com/in/XXX |
||||||
|
name: LinkedIn |
||||||
|
--- |
||||||
|
|
@ -0,0 +1,78 @@ |
|||||||
|
########## |
||||||
|
# Header # |
||||||
|
########## |
||||||
|
|
||||||
|
[language_switch] |
||||||
|
other = "Dil değiştirmek için" |
||||||
|
|
||||||
|
######## |
||||||
|
# Home # |
||||||
|
######## |
||||||
|
|
||||||
|
[home_tickets_action] |
||||||
|
other = "Buy Ticket" |
||||||
|
|
||||||
|
[home_tickets_soldout] |
||||||
|
other = "Sold Out" |
||||||
|
|
||||||
|
[home_tickets_close] |
||||||
|
other = "Not available" |
||||||
|
|
||||||
|
[home_location_direction] |
||||||
|
other = "Direction" |
||||||
|
|
||||||
|
########## |
||||||
|
# Footer # |
||||||
|
########## |
||||||
|
|
||||||
|
[footer_share] |
||||||
|
other = "Share" |
||||||
|
|
||||||
|
[facebook_share_label] |
||||||
|
other = "Share on Facebook" |
||||||
|
|
||||||
|
[twitter_share_text] |
||||||
|
other = "#ÖzgürKon2020 will be held on May 16-17 online with @oydorgtr! Follow on @OzgurKonorg, for details: ozgurkon.org" |
||||||
|
|
||||||
|
[twitter_share_label] |
||||||
|
other = "Share on Twitter" |
||||||
|
|
||||||
|
[footer_follow_blog] |
||||||
|
other = "Follow our" |
||||||
|
|
||||||
|
[footer_follow_blog_blog] |
||||||
|
other = "blog" |
||||||
|
|
||||||
|
[footer_follow_us] |
||||||
|
other = "Follow us" |
||||||
|
|
||||||
|
[footer_about] |
||||||
|
other = "About" |
||||||
|
|
||||||
|
[footer_previous_edition] |
||||||
|
other = "Previous edition" |
||||||
|
|
||||||
|
[footer_become_partners] |
||||||
|
other = "Become partner" |
||||||
|
|
||||||
|
[footer_become_partners_label] |
||||||
|
other = "Partnership Proposition" |
||||||
|
|
||||||
|
[footer_coc] |
||||||
|
other = "Code of Conduct" |
||||||
|
|
||||||
|
|
||||||
|
################ |
||||||
|
# Subscription # |
||||||
|
################ |
||||||
|
[newsletter] |
||||||
|
other = "Newsletter" |
||||||
|
|
||||||
|
[subscribe_notice] |
||||||
|
other = "No spam, only the latest news and updates!" |
||||||
|
|
||||||
|
[subscribe_action] |
||||||
|
other = "Subscribe" |
||||||
|
|
||||||
|
[impressum] |
||||||
|
other = "Data Protection Policy" |
@ -0,0 +1,77 @@ |
|||||||
|
########## |
||||||
|
# Header # |
||||||
|
########## |
||||||
|
|
||||||
|
[language_switch] |
||||||
|
other = "Switch to" |
||||||
|
|
||||||
|
######## |
||||||
|
# Home # |
||||||
|
######## |
||||||
|
|
||||||
|
[home_tickets_action] |
||||||
|
other = "Biletler" |
||||||
|
|
||||||
|
[home_tickets_soldout] |
||||||
|
other = "Tükendi!" |
||||||
|
|
||||||
|
[home_tickets_close] |
||||||
|
other = "Kapandı" |
||||||
|
|
||||||
|
[home_location_direction] |
||||||
|
other = "Yol tarifi" |
||||||
|
|
||||||
|
########## |
||||||
|
# Footer # |
||||||
|
########## |
||||||
|
|
||||||
|
[footer_share] |
||||||
|
other = "Paylaş" |
||||||
|
|
||||||
|
[facebook_share_label] |
||||||
|
other = "Facebook'ta paylaş" |
||||||
|
|
||||||
|
[twitter_share_text] |
||||||
|
other = "#ÖzgürKon2020 16-17 Mayıs 2020'de @oydorgtr tarafından çevrimiçi olarak düzenleniyor! Duyurular için: @OzgurKonorg detaylar için: ozgurkon.org" |
||||||
|
|
||||||
|
[twitter_share_label] |
||||||
|
other = "Twitter'da paylaş" |
||||||
|
|
||||||
|
[footer_follow_blog] |
||||||
|
other = " " |
||||||
|
|
||||||
|
[footer_follow_blog_blog] |
||||||
|
other = "blog" |
||||||
|
|
||||||
|
[footer_follow_us] |
||||||
|
other = "Bizi takip edin" |
||||||
|
|
||||||
|
[footer_about] |
||||||
|
other = "Hakkında" |
||||||
|
|
||||||
|
[footer_previous_edition] |
||||||
|
other = "Önceki etkinlikler" |
||||||
|
|
||||||
|
[footer_become_partners] |
||||||
|
other = "Sponsor olun" |
||||||
|
|
||||||
|
[footer_become_partners_label] |
||||||
|
other = "Sponsor olmayı düşünür müsünüz?" |
||||||
|
|
||||||
|
[footer_coc] |
||||||
|
other = "Kaynaşma yönergeleri (CoC)" |
||||||
|
|
||||||
|
################ |
||||||
|
# Subscription # |
||||||
|
################ |
||||||
|
[newsletter] |
||||||
|
other = "Bülten" |
||||||
|
|
||||||
|
[subscribe_notice] |
||||||
|
other = "Etkinlik hakkındaki gelişmeler için, spam atmayacağız!" |
||||||
|
|
||||||
|
[subscribe_action] |
||||||
|
other = "Abone ol" |
||||||
|
|
||||||
|
[impressum] |
||||||
|
other = "Veri Koruma Politikası" |
@ -0,0 +1,30 @@ |
|||||||
|
const {readFileSync, writeFileSync} = require('fs'); |
||||||
|
const {sync: glob} = require('glob'); |
||||||
|
const {Logger, LogLevel} = require('plop-logger'); |
||||||
|
const {colorEmojiConfig} = require('plop-logger/lib/extra/colorEmojiConfig'); |
||||||
|
|
||||||
|
Logger.config = colorEmojiConfig; |
||||||
|
const logger = Logger.getLogger('icons'); |
||||||
|
logger.level = LogLevel.All; |
||||||
|
|
||||||
|
let svgFiles = `src/icons/*.svg`; |
||||||
|
logger.info('SVG aggregation of', svgFiles); |
||||||
|
|
||||||
|
const data = glob(svgFiles) |
||||||
|
.map(file => { |
||||||
|
const parts = file.split('/'); |
||||||
|
const id = parts[parts.length - 1].split('.')[0]; |
||||||
|
logger.debug('handle', id); |
||||||
|
return readFileSync(file, 'utf8') |
||||||
|
.replace(`<svg xmlns="http://www.w3.org/2000/svg"`, `\t<symbol id="${id}"`) |
||||||
|
.replace(`</svg>`, `\t</symbol>`); |
||||||
|
} |
||||||
|
); |
||||||
|
|
||||||
|
const svg = `<svg xmlns="http://www.w3.org/2000/svg" width="0" height="0" class="visually-hidden">
|
||||||
|
${data.join('\n')} |
||||||
|
</svg>`; |
||||||
|
|
||||||
|
const file = 'static/icons.svg'; |
||||||
|
logger.info('Generate', file); |
||||||
|
writeFileSync(file, svg, {flag: 'w'}); |
After Width: | Height: | Size: 1.1 MiB |
After Width: | Height: | Size: 12 KiB |
After Width: | Height: | Size: 392 KiB |
After Width: | Height: | Size: 12 KiB |
After Width: | Height: | Size: 20 KiB |
After Width: | Height: | Size: 14 KiB |
After Width: | Height: | Size: 1.4 MiB |
After Width: | Height: | Size: 9.7 KiB |
After Width: | Height: | Size: 638 KiB |
@ -0,0 +1,3 @@ |
|||||||
|
{{ define "main"}} |
||||||
|
<h1 class="error">Oops!, page {{ .Permalink }} not found !</h1> |
||||||
|
{{ end }} |
@ -0,0 +1,29 @@ |
|||||||
|
<!DOCTYPE html> |
||||||
|
<html lang="{{ $.Site.LanguageCode | default " en" }}"> |
||||||
|
{{ partial "head.html" . }} |
||||||
|
|
||||||
|
<body class="{{ .Kind }} {{ anchorize .URL }} {{ .Section }}"> |
||||||
|
|
||||||
|
{{ readFile "themes/devfest-theme-hugo/static/icons.svg" | safeHTML }} |
||||||
|
|
||||||
|
{{ block "header" . }} |
||||||
|
{{ partial "header.html" . }} |
||||||
|
{{ end }} |
||||||
|
|
||||||
|
<main> |
||||||
|
{{ block "main" . }} |
||||||
|
<!-- Missing main block --> |
||||||
|
{{ end }} |
||||||
|
</main> |
||||||
|
|
||||||
|
{{ block "footer.html" . }} |
||||||
|
{{ partial "footer.html" . }} |
||||||
|
{{ end }} |
||||||
|
|
||||||
|
<script src="/theme.js?v=2" async></script> |
||||||
|
{{ block "scripts" . }} |
||||||
|
<!-- No extra scripts --> |
||||||
|
{{ end }} |
||||||
|
</body> |
||||||
|
|
||||||
|
</html> |
@ -0,0 +1,15 @@ |
|||||||
|
{{ define "main" }} |
||||||
|
|
||||||
|
{{ .Content }} |
||||||
|
|
||||||
|
<hr> |
||||||
|
|
||||||
|
<ul class="pages"> |
||||||
|
{{ range .Pages }} |
||||||
|
<li> |
||||||
|
<a href="{{ .URL }}"> {{ .Title }}</a> |
||||||
|
</li> |
||||||
|
{{ end }} |
||||||
|
</ul> |
||||||
|
|
||||||
|
{{ end }} |
@ -0,0 +1,14 @@ |
|||||||
|
{{ define "main" }} |
||||||
|
|
||||||
|
<div class="hero"> |
||||||
|
<h1>{{ .Title }}</h1> |
||||||
|
<div class="description"> |
||||||
|
{{ .TableOfContents }} |
||||||
|
</div> |
||||||
|
</div> |
||||||
|
|
||||||
|
<section class="content"> |
||||||
|
{{ .Content }} |
||||||
|
</section> |
||||||
|
|
||||||
|
{{ end }} |
@ -0,0 +1,31 @@ |
|||||||
|
{{ define "main" }} |
||||||
|
|
||||||
|
{{ $lang := $.Page.Language.Lang }} |
||||||
|
|
||||||
|
<div class="hero"> |
||||||
|
<h1>{{ $.Page.Params.Title }}</h1> |
||||||
|
<div class="description"> |
||||||
|
{{ .Content }} |
||||||
|
</div> |
||||||
|
</div> |
||||||
|
|
||||||
|
<section class="blogs"> |
||||||
|
{{ range .Pages }} |
||||||
|
<article> |
||||||
|
<a class="visually-hidden" aria-hidden="true" href="{{ .Permalink }}">{{ .Title }}</a> |
||||||
|
<a class="blog" href="{{ .Permalink }}"> |
||||||
|
<div class="img" style="background-image: url({{ .Params.image }});"></div> |
||||||
|
<div class="info"> |
||||||
|
<div class="date">{{ partial "date-short.html" (dict "time" .Date "lang" $lang) }}</div> |
||||||
|
<h2>{{ .Title }}</h2> |
||||||
|
<span class="brief">{{ .Params.brief }}</span> |
||||||
|
<!-- <div class="reading">{{ .ReadingTime }}</div> --> |
||||||
|
<p>{{ .Summary }} ...</p> |
||||||
|
</div> |
||||||
|
</a> |
||||||
|
</article> |
||||||
|
{{ end }} |
||||||
|
</section> |
||||||
|
|
||||||
|
|
||||||
|
{{ end }} |
@ -0,0 +1,22 @@ |
|||||||
|
{{ define "main" }} |
||||||
|
|
||||||
|
<div class="hero" > |
||||||
|
<div class="img" style="color: {{ .Params.color | default "#fff" }};background-image: url({{ .Params.image }})"></div> |
||||||
|
|
||||||
|
<div class="description"> |
||||||
|
<h1> |
||||||
|
<span>{{ .Title }}</span> |
||||||
|
<small>{{ .Params.brief }}</small> |
||||||
|
</h1> |
||||||
|
<!-- |
||||||
|
<hr> |
||||||
|
{{ .TableOfContents }} --> |
||||||
|
</div> |
||||||
|
</div> |
||||||
|
|
||||||
|
<section class="content"> |
||||||
|
|
||||||
|
{{ .Content }} |
||||||
|
</section> |
||||||
|
|
||||||
|
{{ end }} |
@ -0,0 +1,6 @@ |
|||||||
|
{{ define "main" }} |
||||||
|
|
||||||
|
{{ .Content }} |
||||||
|
|
||||||
|
{{ end }} |
||||||
|
|
@ -0,0 +1,5 @@ |
|||||||
|
{{- $monthFr := (slice "janvier" "février" "march" "avril" "mai" "juin" "juillet" "août" "septembre" "octobre" "novembre" "décembre")}} |
||||||
|
{{- $time := time (index . "time") }} |
||||||
|
{{- $lang := index . "lang" }} |
||||||
|
{{ $time.Day }} |
||||||
|
{{ if eq $lang "fr" }}{{ index $monthFr (sub $time.Month 1) }}{{- else }} {{ dateFormat "January" $time}}{{ end }} |
@ -0,0 +1,13 @@ |
|||||||
|
{{ $monthFr := (slice "jan." "fév." "mar." "avr." "mai" "juin" "juil." "aoû." "sep." "oct." "nov." "déc.")}} |
||||||
|
|
||||||
|
{{ $time := time (index . "time") }} |
||||||
|
{{ $lang := index . "lang" }} |
||||||
|
|
||||||
|
{{ $time.Day }} |
||||||
|
{{ if eq $lang "fr" }} |
||||||
|
{{ index $monthFr (sub $time.Month 1)}} |
||||||
|
{{ else }} |
||||||
|
{{ dateFormat "Jan." $time}} |
||||||
|
{{ end }} |
||||||
|
{{ $time.Year }} |
||||||
|
|
@ -0,0 +1,87 @@ |
|||||||
|
<footer> |
||||||
|
<div class="bottom-content"> |
||||||
|
|
||||||
|
<div class="footer-header"> |
||||||
|
<div class="share"> |
||||||
|
<header>{{ i18n "footer_share" }}</header> |
||||||
|
<ul class="social-list"> |
||||||
|
{{ range .Site.Data.footer.share }} |
||||||
|
<li> |
||||||
|
{{ $url := .URL | relLangURL }} |
||||||
|
{{ partial "social-sharer.html" (dict "context" . "url" $url "name" .name) }} |
||||||
|
{{ end }} |
||||||
|
</ul> |
||||||
|
</div> |
||||||
|
<div class="blog"> |
||||||
|
<header> |
||||||
|
{{ i18n "footer_follow_blog" }} <a href="{{ "blog/" | relLangURL }}">{{ i18n "footer_follow_blog_blog" }}</a> |
||||||
|
</header> |
||||||
|
</div> |
||||||
|
<div class="follow"> |
||||||
|
<header>{{ i18n "footer_follow_us" }}</header> |
||||||
|
<ul class="social-list"> |
||||||
|
{{ range .Site.Data.footer.follow }} |
||||||
|
<li> |
||||||
|
<a href="{{ .url }}" class="social" rel="noreferrer" target="_blank"> |
||||||
|
{{ partial "icon.html" .name }} |
||||||
|
{{ .name }} |
||||||
|
</a> |
||||||
|
</li> |
||||||
|
{{ end }} |
||||||
|
</ul> |
||||||
|
</div> |
||||||
|
<div class="email"> |
||||||
|
<a href="mailto:{{ .Site.Params.email }}"> |
||||||
|
{{ partial "icon.html" "email" }} |
||||||
|
{{- .Site.Params.email -}} |
||||||
|
</a> |
||||||
|
</div> |
||||||
|
</div> |
||||||
|
|
||||||
|
<hr> |
||||||
|
|
||||||
|
<div class="footer-content"> |
||||||
|
{{ range .Site.Data.footer.content }} |
||||||
|
<section> |
||||||
|
<header>{{ i18n .title }}</header> |
||||||
|
{{ if .links }} |
||||||
|
<ul> |
||||||
|
{{ range .links }} |
||||||
|
<li> |
||||||
|
<a href="{{ .url }}" {{ if .newTab }}target="_blank" rel="noopener" {{end}}> |
||||||
|
{{ if .nameKey }} |
||||||
|
{{ i18n .nameKey }} |
||||||
|
{{ else }} |
||||||
|
{{ .name }} |
||||||
|
{{ end }} |
||||||
|
</a> |
||||||
|
</li> |
||||||
|
{{ end }} |
||||||
|
</ul> |
||||||
|
{{ end }} |
||||||
|
</section> |
||||||
|
{{ end }} |
||||||
|
{{ if .Site.Params.subscriptionUrl }} |
||||||
|
<section class="subscribe"> |
||||||
|
<header>{{ i18n "newsletter" }}</header> |
||||||
|
<p>{{ i18n "subscribe_notice" }}</p> |
||||||
|
<a href="{{ .Site.Params.subscriptionUrl }}" |
||||||
|
class="btn" rel="noreferrer" target="_blank"> |
||||||
|
{{ partial "icon.html" "subscribe" }} |
||||||
|
{{- i18n "subscribe_action" -}} |
||||||
|
</a> |
||||||
|
</section> |
||||||
|
{{ end }} |
||||||
|
</div> |
||||||
|
|
||||||
|
<hr> |
||||||
|
|
||||||
|
<div class="footer-footer"> |
||||||
|
{{ if .Site.Params.logos.footer }} |
||||||
|
<img src="{{ .Site.Params.logos.footer }}" alt="{{ .Site.Title }}"> |
||||||
|
{{ end }} |
||||||
|
<div>{{ emojify .Site.Params.copyright }}</div> |
||||||
|
</div> |
||||||
|
|
||||||
|
</div> |
||||||
|
</footer> |
@ -0,0 +1,80 @@ |
|||||||
|
<head> |
||||||
|
<meta charset="utf-8"> |
||||||
|
<meta http-equiv="X-UA-Compatible" content="IE=edge,chrome=1"> |
||||||
|
<meta name="viewport" content="width=device-width, initial-scale=1.0, viewport-fit=cover"> |
||||||
|
<meta name="HandheldFriendly" content="True"> |
||||||
|
<meta name="MobileOptimized" content="320"> |
||||||
|
<meta name="Description" content="{{ .Site.Params.description }}"> |
||||||
|
|
||||||
|
{{ if eq (getenv "HUGO_ENV") "production" | or (eq .Site.Params.env "production") }} |
||||||
|
{{/* NOTE: These Hugo Internal Templates can be found starting at |
||||||
|
https://github.com/gohugoio/hugo/tree/master/tpl/tplimpl/embedded/templates */}} |
||||||
|
{{- template "_internal/opengraph.html" . -}} |
||||||
|
{{- template "_internal/google_news.html" . -}} |
||||||
|
{{- template "_internal/schema.html" . -}} |
||||||
|
{{- template "_internal/twitter_cards.html" . -}} |
||||||
|
{{ template "_internal/google_analytics_async.html" . }} |
||||||
|
{{ end }} |
||||||
|
|
||||||
|
{{ hugo.Generator }} |
||||||
|
<META NAME="ROBOTS" CONTENT="INDEX, FOLLOW"> |
||||||
|
|
||||||
|
<title>{{ block "title" . }}{{ .Site.Title }} {{ with .Params.Title }} | {{ . }}{{ end }}{{ end }}</title> |
||||||
|
|
||||||
|
{{ if .Site.Params.appleTouchIcon }} |
||||||
|
<link rel="apple-touch-icon" sizes="180x180" href="{{ .Site.Params.appleTouchIcon }}?v=2"> |
||||||
|
{{ end }} |
||||||
|
{{ if .Site.Params.favicon32 }} |
||||||
|
<link rel="icon" type="image/png" sizes="32x32" href="{{ .Site.Params.favicon32 }}?v=2"> |
||||||
|
{{ end }} |
||||||
|
{{ if .Site.Params.favicon16 }} |
||||||
|
<link rel="icon" type="image/png" sizes="16x16" href="{{ .Site.Params.favicon16 }}?v=2"> |
||||||
|
{{ end }} |
||||||
|
{{ if .Site.Params.manifest }} |
||||||
|
<link rel="manifest" href="{{ .Site.Params.manifest }}"> |
||||||
|
{{ end }} |
||||||
|
{{ if .Site.Params.themeColor }} |
||||||
|
<meta name="theme-color" content="{{ .Site.Params.themeColor }}"/> |
||||||
|
<meta name="msapplication-TileColor" content="#{{ .Site.Params.themeColor }}?"> |
||||||
|
{{ if .Site.Params.safariPinnedTab }} |
||||||
|
<link rel="mask-icon" href="{{ .Site.Params.safariPinnedTab }}" color="{{ .Site.Params.themeColor }}"> |
||||||
|
{{ end }} |
||||||
|
{{ end }} |
||||||
|
{{ if .IsHome }} |
||||||
|
<meta property="og:title" content="{{ .Site.Title }}" /> |
||||||
|
<meta property="og:type" content="website" /> |
||||||
|
<meta property="og:url" content="https://ozgurkon.org" /> |
||||||
|
<meta property="og:description" content="{{ $.Site.Params.description }}" /> |
||||||
|
<meta property="og:image" content="/tn.png" /> |
||||||
|
<meta property="og:site_name" content="ÖzgürKon 2020" /> |
||||||
|
<meta name="twitter:card" content="summary" /> |
||||||
|
<meta name="twitter:site" content="@OzgurKonorg" /> |
||||||
|
<meta name="twitter:title" content="ÖzgürKon 2020"> |
||||||
|
<meta name="twitter:description" content="{{ $.Site.Params.description }}"> |
||||||
|
<meta name="twitter:creator" content="@OzgurKonorg" /> |
||||||
|
<meta name="twitter:image" content="/tn.png"> |
||||||
|
{{ else }} |
||||||
|
<meta property="og:title" content="{{ .Page.Title }} - {{ .Site.Title }}" /> |
||||||
|
<meta property="og:type" content="article" /> |
||||||
|
<meta property="og:url" content="https://ozgurkon.org" /> |
||||||
|
<meta property="og:description" content="{{ .Page.Summary }}" /> |
||||||
|
<meta property="og:image" content="/tn.png" /> |
||||||
|
<meta property="og:site_name" content="ÖzgürKon 2020" /> |
||||||
|
<meta name="twitter:card" content="summary" /> |
||||||
|
<meta name="twitter:site" content="@OzgurKonorg" /> |
||||||
|
<meta name="twitter:title" content="{{ .Page.Title }} - ÖzgürKon 2020"> |
||||||
|
<meta name="twitter:description" content="{{ .Page.Summary }}"> |
||||||
|
<meta name="twitter:creator" content="@OzgurKonorg" /> |
||||||
|
<meta name="twitter:image" content="/tn.png"> |
||||||
|
|
||||||
|
{{ end }} |
||||||
|
<link href="{{ with .OutputFormats.Get "RSS" }}{{ .RelPermalink }}{{ end }}" rel="alternate" type="application/rss+xml" title="{{ .Site.Title }}"/> |
||||||
|
<link href="{{ with .OutputFormats.Get "RSS" }}{{ .RelPermalink }}{{ end }}" rel="feed" type="application/rss+xml" title="{{ .Site.Title }}"/> |
||||||
|
|
||||||
|
<link href="https://fonts.googleapis.com/css?family=Roboto:400,500,700" rel="stylesheet"> |
||||||
|
<link rel="stylesheet" href="/theme-oyd.css" media="all"> |
||||||
|
|
||||||
|
{{ block "headextra" . }} |
||||||
|
<!-- No extra headextra --> |
||||||
|
{{ end }} |
||||||
|
</head> |
@ -0,0 +1,52 @@ |
|||||||
|
<header> |
||||||
|
<div class="top-content"> |
||||||
|
|
||||||
|
<div class="logo"> |
||||||
|
<a href="{{"/" | relLangURL}}"> |
||||||
|
<img src="{{ .Site.Params.logos.header }}" alt="logo {{ .Site.Title }}"> |
||||||
|
</a> |
||||||
|
</div> |
||||||
|
|
||||||
|
<input type="checkbox" id="menu-burger" class="visually-hidden" aria-label="Menu"/> |
||||||
|
|
||||||
|
<label for="menu-burger"> |
||||||
|
{{ partial "icon.html" "menu" }} |
||||||
|
{{ partial "icon.html" "close" }} |
||||||
|
</label> |
||||||
|
|
||||||
|
<nav> |
||||||
|
<ul class="menu"> |
||||||
|
{{- $currentPage := . -}} |
||||||
|
{{ range .Site.Menus.main }} |
||||||
|
<li class="{{ if $currentPage.IsMenuCurrent "main" . }}active{{ end }}" > |
||||||
|
{{ if (hasPrefix .URL "http") }} |
||||||
|
<a class="external" rel="noreferrer" target="_blank" href="{{ .URL }}" title="{{ .Name }}">{{ .Name }}</a> |
||||||
|
{{ else if (isset .Page.Params "icon") }} |
||||||
|
<a href="{{ .URL | relLangURL }}" class="link-icon" title="{{ .Name }}"> |
||||||
|
{{ partial "icon.html" .Page.Params.icon }} |
||||||
|
</a> |
||||||
|
{{ else }} |
||||||
|
<a href="{{ .URL | relLangURL }}">{{ .Name }}</a> |
||||||
|
{{ end }} |
||||||
|
</li> |
||||||
|
{{ end }} |
||||||
|
</ul> |
||||||
|
|
||||||
|
<ul class="languages"> |
||||||
|
{{ range .Translations }} |
||||||
|
<li> |
||||||
|
<a class="lang lang-{{ .Language.LanguageName }} {{ if eq .Language $.Site.Home.Language }}active{{ end }}" |
||||||
|
title="{{ .Language.LanguageName }}" |
||||||
|
href="{{ .RelPermalink }}" |
||||||
|
role="radio" |
||||||
|
aria-label="{{ i18n "language_switch" }} {{ .Language.LanguageName }}" |
||||||
|
aria-checked="{{ if eq .Language $.Site.Home.Language }}true{{ else }}false{{ end }}"> |
||||||
|
{{- i18n "language_switch" }} {{ .Language.LanguageName -}} |
||||||
|
</a> |
||||||
|
</li> |
||||||
|
{{ end }} |
||||||
|
</ul> |
||||||
|
</nav> |
||||||
|
|
||||||
|
</div> |
||||||
|
</header> |
After Width: | Height: | Size: 68 B |
@ -0,0 +1,4 @@ |
|||||||
|
<a class="partner" |
||||||
|
href="{{ .URL }}" |
||||||
|
title="{{ .Title }}" |
||||||
|
style="background-image: url({{ .Params.logo }});">{{ .Title }}</a> |
@ -0,0 +1,50 @@ |
|||||||
|
<a href="{{ .Permalink }}"> |
||||||
|
<h4 title="{{ .Title }}"> |
||||||
|
{{ .Title }} |
||||||
|
<span class="language {{ anchorize .Params.language }}"></span> |
||||||
|
</h4> |
||||||
|
|
||||||
|
<hr> |
||||||
|
|
||||||
|
<div class="info"> |
||||||
|
|
||||||
|
{{ if .Params.tags }} |
||||||
|
<div class="tags"> |
||||||
|
{{ range .Params.tags }} |
||||||
|
{{ range first 1 (where $.Site.Data.categories "key" .) }} |
||||||
|
<span>{{ .name }}</span> |
||||||
|
{{ end }} |
||||||
|
{{ end }} |
||||||
|
</div> |
||||||
|
{{ end }} |
||||||
|
|
||||||
|
{{ if .Params.level }} |
||||||
|
<div class="complexity" title="{{ .Params.level }}"> |
||||||
|
<svg><use xlink:href="#level-{{ .Params.level }}"></use></svg> |
||||||
|
</div> |
||||||
|
{{ end }} |
||||||
|
|
||||||
|
{{ if .Params.presentation }} |
||||||
|
<div class="presentation">{{ partial "icon.html" "slides" }}</div> |
||||||
|
{{ end }} |
||||||
|
|
||||||
|
{{ if .Params.videoId }} |
||||||
|
<div class="video">{{ partial "icon.html" "youtube" }}</div> |
||||||
|
{{ end }} |
||||||
|
|
||||||
|
</div> |
||||||
|
|
||||||
|
|
||||||
|
{{ if .Params.speakers }} |
||||||
|
<ul class="speakers {{ if eq 1 (len .Params.speakers) }}single{{ else }}multi{{ end }}"> |
||||||
|
{{ range where $.Site.RegularPages "Params.key" "in" .Params.speakers }} |
||||||
|
<li class="speaker"> |
||||||
|
<div class="speaker-img" style="background-image: url({{ .Params.photoURL }});"></div> |
||||||
|
<strong class="speaker-name">{{ .Params.name }}</strong> |
||||||
|
<!-- <div class="speaker-company">{{ .Params.company }}</div>--> |
||||||
|
</li> |
||||||
|
{{ end }} |
||||||
|
</ul> |
||||||
|
{{ end }} |
||||||
|
|
||||||
|
</a> |
@ -0,0 +1,46 @@ |
|||||||
|
<a href="{{ .URL }}"> |
||||||
|
|
||||||
|
<h2> |
||||||
|
{{ .Title }} |
||||||
|
<span class="language {{ anchorize .Params.language }}"></span> |
||||||
|
</h2> |
||||||
|
|
||||||
|
<hr> |
||||||
|
|
||||||
|
<div class="info"> |
||||||
|
{{ if.Params.tags }} |
||||||
|
<div class="tags"> |
||||||
|
{{ range .Params.tags }} |
||||||
|
{{ range first 1 (where $.Site.Data.categories "key" .) }} |
||||||
|
<span>{{ .name }}</span> |
||||||
|
{{ end }} |
||||||
|
{{ end }} |
||||||
|
</div> |
||||||
|
{{ end }} |
||||||
|
|
||||||
|
<div class="complexity">{{ .Params.level }}</div> |
||||||
|
<div class="type type-{{ anchorize .Params.format }}">{{ .Params.format }}</div> |
||||||
|
|
||||||
|
<div> |
||||||
|
{{ if .Params.presentation }} |
||||||
|
<div class="presentation">{{ partial "icon.html" "slides" }}</div> |
||||||
|
{{ end }} |
||||||
|
{{ if .Params.videoId }} |
||||||
|
<div class="video">{{ partial "icon.html" "youtube" }}</div> |
||||||
|
{{ end }} |
||||||
|
</div> |
||||||
|
</div> |
||||||
|
|
||||||
|
|
||||||
|
<ul class="speakers"> |
||||||
|
{{ range where .Site.RegularPages "Params.key" "in" .Params.speakers }} |
||||||
|
<li class="speaker"> |
||||||
|
<div class="speaker-img" style="background-image: url({{ .Params.photoURL }});"></div> |
||||||
|
<strong class="speaker-name">{{ .Params.name }}</strong> |
||||||
|
<span class="speaker-country">{{ .Params.country }}</span> |
||||||
|
<div class="speaker-company">{{ .Params.company }}</div> |
||||||
|
</li> |
||||||
|
{{ end }} |
||||||
|
</ul> |
||||||
|
|
||||||
|
</a> |
@ -0,0 +1,8 @@ |
|||||||
|
{{- if (eq .name "twitter") -}} |
||||||
|
{{ $text := i18n "twitter_share_text" }} |
||||||
|
<a href="https://twitter.com/share?url={{ .url }}&text={{ $text }}" |
||||||
|
class="social" rel="noreferrer" target="_blank"> |
||||||
|
{{ partial "icon.html" .name }} |
||||||
|
{{- i18n "twitter_share_label" -}} |
||||||
|
</a> |
||||||
|
{{- end -}} |
@ -0,0 +1,9 @@ |
|||||||
|
<a class="visually-hidden" href="{{ .URL }}">{{ .Params.name }}</a> |
||||||
|
<a class="speaker" href="{{ .URL }}"> |
||||||
|
<div role="presentation" class="speaker-img" style="background-image: url({{ .Params.photoURL }});"></div> |
||||||
|
<div class="info"> |
||||||
|
<div class="speaker-company">{{ .Params.company }}</div> |
||||||
|
<strong class="speaker-name">{{ .Params.name }}</strong> |
||||||
|
<span class="speaker-country">{{ .Params.city }}</span> |
||||||
|
</div> |
||||||
|
</a> |
@ -0,0 +1,15 @@ |
|||||||
|
<div class="photo" role="presentation" style="background-image: url('{{ relURL (path.Join "images" "team" .Params.photo) }}');"></div> |
||||||
|
<div class="label"> |
||||||
|
<h3>{{ .Title }}</h3> |
||||||
|
<h4>{{ .Params.subtitle }}</h4> |
||||||
|
<ul class="socials"> |
||||||
|
{{ range .Params.socials }} |
||||||
|
<li> |
||||||
|
<a class="social" rel="noreferrer" href="{{ .link }}" target="_blank"> |
||||||
|
{{ partial "icon.html" (lower .name) }} |
||||||
|
{{- .name -}} |
||||||
|
</a> |
||||||
|
</li> |
||||||
|
{{ end }} |
||||||
|
</ul> |
||||||
|
</div> |
@ -0,0 +1,15 @@ |
|||||||
|
<div class="ticket" {{ if .soldOut }}aria-disabled="true"{{end}}> |
||||||
|
<div class="ticket-name">{{ .name }}</div> |
||||||
|
<div class="ticket-price">{{ .price }} {{ .currency }}</div> |
||||||
|
<div class="ticket-date">{{ .starts }} - {{ .ends }}</div> |
||||||
|
<div class="ticket-info">{{ .info }}</div> |
||||||
|
|
||||||
|
{{ if .soldOut }} |
||||||
|
<span class="btn" aria-disabled="true">{{ i18n "home_tickets_soldout" }}</span> |
||||||
|
{{ else }} |
||||||
|
<a href="{{ .url }}" class="btn primary" rel="noreferrer" target="_blank"> |
||||||
|
{{ partial "icon.html" "ticket" }} |
||||||
|
{{- i18n "home_tickets_action" -}} |
||||||
|
</a> |
||||||
|
{{ end }} |
||||||
|
</div> |
@ -0,0 +1,5 @@ |
|||||||
|
{{ define "main" }} |
||||||
|
|
||||||
|
{{ .Content }} |
||||||
|
|
||||||
|
{{ end }} |
@ -0,0 +1,63 @@ |
|||||||
|
{{ define "main" }} |
||||||
|
|
||||||
|
<section class="header"> |
||||||
|
<div class="card" style="background-image: url({{ .Params.logo }});"></div> |
||||||
|
<h1>{{ .Title }}</h1> |
||||||
|
{{ if .Params.website }} |
||||||
|
<a href="{{ .Params.website }}">{{ .Params.website }}</a> |
||||||
|
{{ end }} |
||||||
|
</section> |
||||||
|
|
||||||
|
<section class="content"> |
||||||
|
{{ .Content }} |
||||||
|
|
||||||
|
</section> |
||||||
|
|
||||||
|
{{ if .Params.why }} |
||||||
|
<section class="why"> |
||||||
|
<h2>{{index .Site.Data.partner .Params.lang "why" }}</h2> |
||||||
|
<p>{{ .Params.why }}</p> |
||||||
|
</section> |
||||||
|
{{ end }} |
||||||
|
|
||||||
|
{{ if .Params.socials }} |
||||||
|
<section class="socials"> |
||||||
|
<h2>{{index .Site.Data.partner .Params.lang "socials" }}</h2> |
||||||
|
<ul> |
||||||
|
{{ range .Page.Params.socials }} |
||||||
|
<li> |
||||||
|
<a href="{{ .link }}" class="social" rel="noreferrer" target="_blank"> |
||||||
|
{{ partial "icon.html" .icon }} |
||||||
|
{{ .name }} |
||||||
|
</a> |
||||||
|
</li> |
||||||
|
{{ end }} |
||||||
|
</ul> |
||||||
|
</section> |
||||||
|
{{ end }} |
||||||
|
|
||||||
|
{{ if .Params.jobs }} |
||||||
|
<section class="jobs"> |
||||||
|
<h2>{{index .Site.Data.partner .Params.lang "jobs" }}</h2> |
||||||
|
<ul> |
||||||
|
{{ range .Page.Params.jobs }} |
||||||
|
<li class="job"> |
||||||
|
<header> |
||||||
|
<a href="{{ .url }}" rel="noreferrer" target="_blank">{{ .title }}</a> |
||||||
|
</header> |
||||||
|
<div class="city"> |
||||||
|
{{ partial "icon.html" "map-marker" }} |
||||||
|
{{ .city }} |
||||||
|
</div> |
||||||
|
<a href="mailto:{{ .contact }}" class="contact"> |
||||||
|
{{ partial "icon.html" "email" }} |
||||||
|
{{ .contact }} |
||||||
|
</a> |
||||||
|
</li> |
||||||
|
{{ end }} |
||||||
|
</ul> |
||||||
|
</section> |
||||||
|
{{ end }} |
||||||
|
|
||||||
|
|
||||||
|
{{ end }} |
@ -0,0 +1,17 @@ |
|||||||
|
{{ define "main" }} |
||||||
|
|
||||||
|
{{ .Content }} |
||||||
|
|
||||||
|
<section> |
||||||
|
<ul class="talks"> |
||||||
|
{{ $sessions := where .Site.AllPages ".Section" "sessions" }} |
||||||
|
{{ $types := (slice "conference" "quickie" "keynote") }} |
||||||
|
{{ range sort $sessions ".Title" }} |
||||||
|
{{ if intersect (slice .Params.format) $types }} |
||||||
|
<li class="talk tag-{{ anchorize (delimit (.Params.tags | default (slice)) "" ) }}">{{ partial "session.html" . }}</li> |
||||||
|
{{ end }} |
||||||
|
{{ end }} |
||||||
|
</ul> |
||||||
|
</section> |
||||||
|
|
||||||
|
{{ end }} |
@ -0,0 +1,63 @@ |
|||||||
|
{{ define "main" }} |
||||||
|
<section class="talk"> |
||||||
|
|
||||||
|
<header class="tag-{{ anchorize (delimit .Params.tags "" ) }}"> |
||||||
|
<div class="tags"> |
||||||
|
{{ range .Params.tags }} |
||||||
|
{{ range first 1 (where $.Site.Data.categories "key" .) }} |
||||||
|
<span>{{ .name }}</span> |
||||||
|
{{ end }} |
||||||
|
{{ end }} |
||||||
|
</div> |
||||||
|
|
||||||
|
<h1 class="text">{{ .Title }}</h1> |
||||||
|
<span class="language {{ anchorize .Params.language }}"></span> |
||||||
|
</header> |
||||||
|
|
||||||
|
<div class="info"> |
||||||
|
<div class="complexity">{{ .Params.level }}</div> |
||||||
|
<div class="type type-{{ anchorize .Params.format }}">{{ .Params.format }}</div> |
||||||
|
|
||||||
|
<div class="detail"> |
||||||
|
<ul class="speakers"> |
||||||
|
{{ range where .Site.RegularPages "Params.key" "in" .Params.speakers }} |
||||||
|
<li> |
||||||
|
<a class="visually-hidden" aria-hidden="true" href="/speakers/{{ .Params.key }}">{{ .Params.name }}</a> |
||||||
|
<a class="speaker" href="/speakers/{{ .Params.key }}"> |
||||||
|
<div class="speaker-img" style="background-image: url({{ .Params.photoURL }});"></div> |
||||||
|
<strong class="speaker-name">{{ .Params.name }}</strong> |
||||||
|
<span class="speaker-country">{{ .Params.city }}</span> |
||||||
|
<div class="speaker-company">{{ .Params.company }}</div> |
||||||
|
</a> |
||||||
|
</li> |
||||||
|
{{ end }} |
||||||
|
</ul> |
||||||
|
<div class="content">{{ .Content }}</div> |
||||||
|
</div> |
||||||
|
|
||||||
|
</div> |
||||||
|
|
||||||
|
|
||||||
|
<div class="media"> |
||||||
|
{{ if .Params.videoId }} |
||||||
|
<div class="video" style="position: relative; padding-bottom: 56.25%; height: 0; overflow: hidden;"> |
||||||
|
<iframe src="//www.youtube.com/embed/{{ .Params.videoId }}?autoplay=1" |
||||||
|
style="position: absolute; top: 0; left: 0; width: 100%; height: 100%; border:0;" allowfullscreen |
||||||
|
title="YouTube Video"></iframe> |
||||||
|
</div> |
||||||
|
{{ end }} |
||||||
|
|
||||||
|
{{ if .Params.presentation }} |
||||||
|
<a class="social-slides" |
||||||
|
href="{{ .Params.presentation }}" |
||||||
|
rel="noreferrer" |
||||||
|
target="_blank"> |
||||||
|
{{ partial "icon.html" "slides" }} |
||||||
|
Voir les slides |
||||||
|
</a> |
||||||
|
{{ end }} |
||||||
|
|
||||||
|
</div> |
||||||
|
|
||||||
|
</section> |
||||||
|
{{ end }} |
@ -0,0 +1,8 @@ |
|||||||
|
{{ $_hugo_config := `{ "version": 1 }` }} |
||||||
|
<div class="album"> |
||||||
|
{{ range (split (.Get "images") ",") }} |
||||||
|
<div class="img" style="background-image: url('{{ . }}');"></div> |
||||||
|
{{ end }} |
||||||
|
<div class="inner">{{ .Inner }}</div> |
||||||
|
|
||||||
|
</div> |
@ -0,0 +1,11 @@ |
|||||||
|
{{ $_hugo_config := `{ "version": 1 }` }} |
||||||
|
{{ $icon := .Get "icon" }} |
||||||
|
{{ $url := .Get "url" }} |
||||||
|
{{ $label := .Get "label" }} |
||||||
|
|
||||||
|
<a class="btn primary" href="{{ $url }}"> |
||||||
|
{{ if and $icon (not (eq $icon "right")) }}{{ partial "icon.html" $icon }}{{ end }} |
||||||
|
{{- $label -}} |
||||||
|
{{ if eq $icon "right" }}{{ partial "icon.html" $icon }}{{ end }} |
||||||
|
</a> |
||||||
|
|
@ -0,0 +1,6 @@ |
|||||||
|
<div class="centered-img"> |
||||||
|
<img |
||||||
|
src="{{.Get "src" }}" |
||||||
|
alt="{{.Get "alt" | default "" }}" |
||||||
|
width="{{.Get "width" | default "auto" }}"> |
||||||
|
</div> |
@ -0,0 +1,7 @@ |
|||||||
|
{{ $_hugo_config := `{ "version": 1 }` }} |
||||||
|
<div class="hero"> |
||||||
|
<h1>{{ $.Page.Title }}</h1> |
||||||
|
<div class="description"> |
||||||
|
{{ .Inner }} |
||||||
|
</div> |
||||||
|
</div> |
@ -0,0 +1,22 @@ |
|||||||
|
{{ $_hugo_config := `{ "version": 1 }` }} |
||||||
|
<section class="info container {{ .Get "class" }}"> |
||||||
|
<div class="wrapper"> |
||||||
|
<div class="inner"> |
||||||
|
{{ .Inner }} |
||||||
|
</div> |
||||||
|
|
||||||
|
{{ with .Get "what" }} |
||||||
|
<div class="numbers"> |
||||||
|
{{range (split . ",") }} |
||||||
|
<div class="number"> |
||||||
|
{{ $labelValue := (split . ":") }} |
||||||
|
{{ $label := (index $labelValue 0) }} |
||||||
|
{{ $value := (index $labelValue 1) }} |
||||||
|
<strong>{{ $value }}</strong> |
||||||
|
<div>{{ $label }}</div> |
||||||
|
</div> |
||||||
|
{{ end }} |
||||||
|
</div> |
||||||
|
{{ end }} |
||||||
|
</div> |
||||||
|
</section> |
@ -0,0 +1,23 @@ |
|||||||
|
{{ $_hugo_config := `{ "version": 1 }` }} |
||||||
|
<section class="location"> |
||||||
|
|
||||||
|
<div class="map" style="background-image: url('{{ .Get "image" }}');"></div> |
||||||
|
|
||||||
|
<div class="description"> |
||||||
|
<div class="inner"> |
||||||
|
{{ .Inner }} |
||||||
|
</div> |
||||||
|
|
||||||
|
<div class="direction"> |
||||||
|
{{ .Get "address" }} |
||||||
|
|
||||||
|
<a href="https://www.oyd.org.tr/" |
||||||
|
class="btn btn-icon-only" target="_blank" rel="noreferrer" |
||||||
|
aria-label="{{ i18n "home_location_direction" }}"> |
||||||
|
{{ partial "icon.html" "direction" }} |
||||||
|
</a> |
||||||
|
|
||||||
|
</div> |
||||||
|
|
||||||
|
</div> |
||||||
|
</section> |
@ -0,0 +1,16 @@ |
|||||||
|
{{ $_hugo_config := `{ "version": 1 }` }} |
||||||
|
<section class="speakers"> |
||||||
|
|
||||||
|
<div class="inner"> |
||||||
|
{{ .Inner }} |
||||||
|
</div> |
||||||
|
|
||||||
|
<ul class="shuffle"> |
||||||
|
{{ range where $.Site.AllPages "Params.feature" true }} |
||||||
|
<li> |
||||||
|
{{ partial "speaker.html" . }} |
||||||
|
</li> |
||||||
|
{{ end }} |
||||||
|
</ul> |
||||||
|
|
||||||
|
</section> |
@ -0,0 +1,9 @@ |
|||||||
|
{{ $_hugo_config := `{ "version": 1 }` }} |
||||||
|
<section class="subscribe {{ .Get "class" }}"> |
||||||
|
<div class="inner">{{ .Inner }}</div> |
||||||
|
<a href="{{ .Site.Params.subscriptionUrl }}" |
||||||
|
class="btn primary" rel="noreferrer" target="_blank"> |
||||||
|
{{ partial "icon.html" "subscribe" }} |
||||||
|
{{ i18n "subscribe_action" }} |
||||||
|
</a> |
||||||
|
</section> |
@ -0,0 +1,4 @@ |
|||||||
|
{{ $_hugo_config := `{ "version": 1 }` }} |
||||||
|
<section class="tickets"> |
||||||
|
{{ .Inner }} |
||||||
|
</section> |
After Width: | Height: | Size: 78 B |
@ -0,0 +1,19 @@ |
|||||||
|
{{ $_hugo_config := `{ "version": 1 }` }} |
||||||
|
{{ $imgLabel := .Get "imgLabel" }} |
||||||
|
{{ $logo := .Site.Params.logos.jumbo }} |
||||||
|
<div class="jumbo"> |
||||||
|
<div class="jumbo-cover" style="background-image: url('{{ .Get "img" }}')" {{ if $imgLabel }}aria-label="{{ $imgLabel }}"{{ end }}></div> |
||||||
|
<img id="jumbo-img" src="{{ .Get "img" }}" /> |
||||||
|
<div id="jumbo-overlay"></div> |
||||||
|
<div class="inner-wrapper"> |
||||||
|
{{ if $logo }} |
||||||
|
<img class="jumbo-logo" src="{{ $logo }}" alt="logo {{ .Site.Title }}"> |
||||||
|
{{ end }} |
||||||
|
<div class="inner"> |
||||||
|
{{ .Inner }} |
||||||
|
</div> |
||||||
|
</div> |
||||||
|
<div class="scroll-down" aria-hidden="true"> |
||||||
|
{{ partial "icon.html" "scroll-down" }} |
||||||
|
</div> |
||||||
|
</div> |
@ -0,0 +1,21 @@ |
|||||||
|
{{ $_hugo_config := `{ "version": 1 }` }} |
||||||
|
<section class="partners"> |
||||||
|
<div class="inner"> |
||||||
|
{{ .Inner }} |
||||||
|
</div> |
||||||
|
|
||||||
|
{{ $site := .Site }} |
||||||
|
{{ range (split (.Get "categories") ",") }} |
||||||
|
<section class="partners-group partner-{{ . }}"> |
||||||
|
<h3 class="fancy"> |
||||||
|
<span>{{ . }}</span> |
||||||
|
</h3> |
||||||
|
<ul> |
||||||
|
{{ $partners := where $site.AllPages "Params.category" . }} |
||||||
|
{{ range sort $partners ".Params.order" "asc" }} |
||||||
|
<li>{{ partial "partner.html" . }}</li> |
||||||
|
{{ end }} |
||||||
|
</ul> |
||||||
|
</section> |
||||||
|
{{ end }} |
||||||
|
</section> |
@ -0,0 +1,17 @@ |
|||||||
|
{{ $_hugo_config := `{ "version": 1 }` }} |
||||||
|
{{ $site := .Site }} |
||||||
|
{{ range (split (.Get "types") ",") }} |
||||||
|
<section class="members"> |
||||||
|
{{ $typeLabel := (split . "=") }} |
||||||
|
{{ $type := (index $typeLabel 0) }} |
||||||
|
{{ $label := (index $typeLabel 1) }} |
||||||
|
|
||||||
|
<h2>{{ $label }}</h2> |
||||||
|
|
||||||
|
<ul class="members shuffle"> |
||||||
|
{{ range where $site.AllPages "Params.type" $type }} |
||||||
|
<li>{{ partial "team.html" . }}</li> |
||||||
|
{{ end }} |
||||||
|
</ul> |
||||||
|
</section> |
||||||
|
{{ end }} |
@ -0,0 +1,23 @@ |
|||||||
|
{{ $_hugo_config := `{ "version": 1 }` }} |
||||||
|
<div class="ticket" {{ if .Get "soldOut" }}aria-disabled="true"{{end}}> |
||||||
|
<div class="ticket-name">{{ .Get "name "}}</div> |
||||||
|
<div class="ticket-price">{{ .Get "price" }}</div> |
||||||
|
<div class="ticket-date"> |
||||||
|
{{ $lang := $.Page.Language.Lang }} |
||||||
|
{{ partial "date-short.html" (dict "time" (.Get "starts") "lang" $lang) }} |
||||||
|
- |
||||||
|
{{ partial "date-short.html" (dict "time" (.Get "ends") "lang" $lang) }} |
||||||
|
</div> |
||||||
|
<div class="ticket-info">{{ .Get "info" }}</div> |
||||||
|
|
||||||
|
{{ if .Get "soldOut" }} |
||||||
|
<span class="btn" aria-disabled="true">{{ i18n "home_tickets_soldout" }}</span> |
||||||
|
{{ else if .Get "close" }} |
||||||
|
<span class="btn" aria-disabled="true">{{ i18n "home_tickets_close" }}</span> |
||||||
|
{{ else }} |
||||||
|
<a href="{{ .Get "url" }} "class="btn primary" rel="noreferrer" target="_blank"> |
||||||
|
{{ partial "icon.html" "ticket" }} |
||||||
|
{{- i18n "home_tickets_action" -}} |
||||||
|
</a> |
||||||
|
{{ end }} |
||||||
|
</div> |
@ -0,0 +1,15 @@ |
|||||||
|
{{ $_hugo_config := `{ "version": 1 }` }} |
||||||
|
<section class="youtube-section {{ .Get "class" }}"> |
||||||
|
<div class="inner"> |
||||||
|
<h2> |
||||||
|
{{ .Get "title" }} |
||||||
|
</h2> |
||||||
|
|
||||||
|
<div class="youtube-player" style="position: relative; padding-bottom: 56.25%; height: 0; overflow: hidden;"> |
||||||
|
<iframe src="//www.youtube.com/embed/{{ .Get "link" }}" |
||||||
|
style="position: absolute; top: 0; left: 0; width: 100%; height: 100%; border:0;" allowfullscreen |
||||||
|
title="YouTube Video"></iframe> |
||||||
|
</div> |
||||||
|
|
||||||
|
</div> |
||||||
|
</section> |
@ -0,0 +1,14 @@ |
|||||||
|
{{ define "main" }} |
||||||
|
|
||||||
|
{{ .Content }} |
||||||
|
|
||||||
|
<section> |
||||||
|
<ul class="speakers shuffle"> |
||||||
|
{{ $speakers := where .Site.AllPages ".Section" "speakers" }} |
||||||
|
{{ range where $speakers ".Kind" "page" }} |
||||||
|
<li>{{ partial "speaker.html" . }}</li> |
||||||
|
{{ end }} |
||||||
|
</ul> |
||||||
|
</section> |
||||||
|
|
||||||
|
{{ end }} |
@ -0,0 +1,61 @@ |
|||||||
|
{{ define "main" }} |
||||||
|
|
||||||
|
<div class="hero"> |
||||||
|
|
||||||
|
<header> |
||||||
|
<div class="speaker-img" style="background-image: url({{ .Page.Params.photoURL }});"></div> |
||||||
|
<div> |
||||||
|
<h1>{{ .Page.Params.name }}</h1> |
||||||
|
|
||||||
|
<ul class="socials"> |
||||||
|
{{ range .Page.Params.socials }} |
||||||
|
<li> |
||||||
|
<a href="{{ .link }}" class="social" rel="noreferrer" target="_blank"> |
||||||
|
{{ partial "icon.html" .icon }} |
||||||
|
{{ .name }} |
||||||
|
</a> |
||||||
|
</li> |
||||||
|
{{ end }} |
||||||
|
</ul> |
||||||
|
</div> |
||||||
|
</header> |
||||||
|
|
||||||
|
<div class="description"> |
||||||
|
|
||||||
|
<ul class="talks"> |
||||||
|
{{ range where .Site.RegularPages "Params.speakers" "intersect" (slice .Page.Params.key) }} |
||||||
|
<li> |
||||||
|
<a href="{{ .Permalink }}" class="visually-hidden">{{ .Title }}</a> |
||||||
|
<a href="{{ .Permalink }}" class="talk tag-{{ anchorize (delimit .Params.tags "" ) }}"> |
||||||
|
<div class="tags"> |
||||||
|
{{ range .Params.tags }} |
||||||
|
{{ range first 1 (where $.Site.Data.categories "key" .) }} |
||||||
|
<span>{{ .name }}</span> |
||||||
|
{{ end }} |
||||||
|
{{ end }} |
||||||
|
</div> |
||||||
|
<span class="language {{ anchorize .Params.language }}"></span> |
||||||
|
<h3 class="text">{{ .Title }}</h3> |
||||||
|
</a> |
||||||
|
</li> |
||||||
|
{{ end }} |
||||||
|
</ul> |
||||||
|
|
||||||
|
</div> |
||||||
|
</div> |
||||||
|
|
||||||
|
<section class="speaker"> |
||||||
|
|
||||||
|
<header> |
||||||
|
<h2>{{ .Page.Params.city }}</h2> |
||||||
|
<div class="speaker-company">{{ .Page.Params.company }}</div> |
||||||
|
</header> |
||||||
|
|
||||||
|
<div class="bio"> |
||||||
|
{{ .Content }} |
||||||
|
</div> |
||||||
|
|
||||||
|
</section> |
||||||
|
|
||||||
|
|
||||||
|
{{ end }} |
@ -0,0 +1,15 @@ |
|||||||
|
{{ define "main" }} |
||||||
|
|
||||||
|
<div class="hero"> |
||||||
|
<h1>{{ .Title }}</h1> |
||||||
|
</div> |
||||||
|
|
||||||
|
<section> |
||||||
|
<ul class="talks shuffle"> |
||||||
|
{{ range where .Pages ".Params.title" "ne" "Office Hours" }} |
||||||
|
<li class="talk">{{ partial "session.html" . }}</li> |
||||||
|
{{ end }} |
||||||
|
</ul> |
||||||
|
</section> |
||||||
|
|
||||||
|
{{ end }} |
@ -0,0 +1,5 @@ |
|||||||
|
{{ define "main" }} |
||||||
|
|
||||||
|
{{ .Content }} |
||||||
|
|
||||||
|
{{ end }} |
@ -0,0 +1,11 @@ |
|||||||
|
{{ define "main" }} |
||||||
|
|
||||||
|
<div class="hero"> |
||||||
|
<h1>{{ .Title }}</h1> |
||||||
|
</div> |
||||||
|
|
||||||
|
<section class="content"> |
||||||
|
{{ .Content }} |
||||||
|
</section> |
||||||
|
|
||||||
|
{{ end }} |
@ -0,0 +1,35 @@ |
|||||||
|
{ |
||||||
|
"name": "ozgurkon-theme-hugo", |
||||||
|
"version": "1.0.0", |
||||||
|
"description": "A theme for a conference website. Forked from DevFest Toulouse 2019", |
||||||
|
"repository": "https://github.com/GDGToulouse/devfest-theme-hugo", |
||||||
|
"author": "Özcan Oğuz <ozcan@oyd.org.tr>, Igor Laborie <ilaborie@gmail.com>", |
||||||
|
"license": "AGPL-3.0-or-later", |
||||||
|
"private": false, |
||||||
|
"scripts": { |
||||||
|
"watch:script": "rollup -c --watch", |
||||||
|
"watch:style": "node-sass src/style/theme.scss -o static --watch", |
||||||
|
"start": "run-p watch:*", |
||||||
|
"build:icons": "node icons.js", |
||||||
|
"build:script": "rollup -c rollup.config.prod.js", |
||||||
|
"build:style": "node-sass src/style/theme.scss -o static; postcss static/theme.css --replace", |
||||||
|
"build": "run-p build:*" |
||||||
|
}, |
||||||
|
"devDependencies": { |
||||||
|
"@babel/core": "^7.5.4", |
||||||
|
"@babel/polyfill": "^7.2.5", |
||||||
|
"@babel/preset-env": "^7.5.4", |
||||||
|
"@types/js-yaml": "^3.12.1", |
||||||
|
"cssnano": "^4.1.8", |
||||||
|
"node-sass": "^4.11.0", |
||||||
|
"npm-run-all": "^4.1.5", |
||||||
|
"plop-logger": "^3.0.0", |
||||||
|
"postcss-cli": "^6.1.3", |
||||||
|
"postcss-preset-env": "^6.7.0", |
||||||
|
"rollup": "^1.19.4", |
||||||
|
"rollup-plugin-babel": "^4.3.1", |
||||||
|
"rollup-plugin-node-resolve": "^5.2.0", |
||||||
|
"rollup-plugin-uglify": "^6.0.1", |
||||||
|
"sass-mq": "^5.0.1" |
||||||
|
} |
||||||
|
} |
@ -0,0 +1,9 @@ |
|||||||
|
module.exports = { |
||||||
|
plugins: [ |
||||||
|
require('postcss-preset-env')({ |
||||||
|
autoprefixer: {grid: true}, |
||||||
|
stage: 3 |
||||||
|
}), |
||||||
|
require('cssnano')({preset: 'default'}) |
||||||
|
] |
||||||
|
}; |
@ -0,0 +1,7 @@ |
|||||||
|
User-agent: * |
||||||
|
# robotstxt.org - if ENV production variable is false robots will be disallowed. |
||||||
|
{{ if eq (getenv "HUGO_ENV") "production" | or (eq .Site.Params.env "production") }} |
||||||
|
Disallow: |
||||||
|
{{ else }} |
||||||
|
Disallow: / |
||||||
|
{{ end }} |
@ -0,0 +1,30 @@ |
|||||||
|
import resolve from 'rollup-plugin-node-resolve'; |
||||||
|
import babel from 'rollup-plugin-babel'; |
||||||
|
const {Logger, LogLevel} = require('plop-logger'); |
||||||
|
const {colorEmojiConfig} = require('plop-logger/lib/extra/colorEmojiConfig'); |
||||||
|
|
||||||
|
Logger.config = colorEmojiConfig; |
||||||
|
const logger = Logger.getLogger('icons'); |
||||||
|
logger.level = LogLevel.All; |
||||||
|
|
||||||
|
const globals = {firebase: 'firebase'}; |
||||||
|
|
||||||
|
export default { |
||||||
|
input: 'src/script/main.js', |
||||||
|
output: [ |
||||||
|
{file: 'static/theme.js', format: 'esm', globals} |
||||||
|
], |
||||||
|
plugins: [ |
||||||
|
resolve(), |
||||||
|
babel({ |
||||||
|
exclude: 'node_modules/**' // only transpile our source code
|
||||||
|
}) |
||||||
|
], |
||||||
|
external: [ |
||||||
|
'firebase', |
||||||
|
'firebase/firestore' |
||||||
|
], |
||||||
|
onwarn(warning) { |
||||||
|
logger.warn(warning.message, warning); |
||||||
|
} |
||||||
|
} |
@ -0,0 +1,10 @@ |
|||||||
|
import {default as defaultConfig} from './rollup.config'; |
||||||
|
import {uglify} from "rollup-plugin-uglify"; |
||||||
|
|
||||||
|
export default { |
||||||
|
...defaultConfig, |
||||||
|
plugins: [ |
||||||
|
...defaultConfig.plugins, |
||||||
|
uglify({sourcemap: false}) |
||||||
|
] |
||||||
|
}; |
After Width: | Height: | Size: 519 B |
After Width: | Height: | Size: 978 B |
After Width: | Height: | Size: 585 B |
After Width: | Height: | Size: 537 B |
After Width: | Height: | Size: 537 B |
After Width: | Height: | Size: 586 B |
After Width: | Height: | Size: 267 B |
After Width: | Height: | Size: 1.4 KiB |
After Width: | Height: | Size: 592 B |
After Width: | Height: | Size: 387 B |
After Width: | Height: | Size: 385 B |
After Width: | Height: | Size: 386 B |
After Width: | Height: | Size: 1.3 KiB |
After Width: | Height: | Size: 414 B |
After Width: | Height: | Size: 357 B |
After Width: | Height: | Size: 463 B |
After Width: | Height: | Size: 921 B |
After Width: | Height: | Size: 357 B |
After Width: | Height: | Size: 883 B |
After Width: | Height: | Size: 860 B |
After Width: | Height: | Size: 1019 B |
After Width: | Height: | Size: 483 B |
After Width: | Height: | Size: 481 B |
After Width: | Height: | Size: 916 B |
After Width: | Height: | Size: 594 B |
@ -0,0 +1,15 @@ |
|||||||
|
import './konami'; |
||||||
|
|
||||||
|
new Konami(function () { |
||||||
|
const elt = document.querySelector('.jumbo'); |
||||||
|
if (elt) { |
||||||
|
elt.style.backgroundImage = 'url(/images/wtf/serious.jpg)'; |
||||||
|
} |
||||||
|
}); |
||||||
|
|
||||||
|
setTimeout(function () { |
||||||
|
const jumboOverlay = document.querySelector('#jumbo-overlay'); |
||||||
|
if (jumboOverlay) { |
||||||
|
jumboOverlay.classList.add('show'); |
||||||
|
} |
||||||
|
}, 500); |
@ -0,0 +1,141 @@ |
|||||||
|
// From https://github.com/snaptortoise/konami-js
|
||||||
|
var Konami = function (callback) { |
||||||
|
var konami = { |
||||||
|
addEvent: function (obj, type, fn, ref_obj) { |
||||||
|
if (obj.addEventListener) |
||||||
|
obj.addEventListener(type, fn, false); |
||||||
|
else if (obj.attachEvent) { |
||||||
|
// IE
|
||||||
|
obj["e" + type + fn] = fn; |
||||||
|
obj[type + fn] = function () { |
||||||
|
obj["e" + type + fn](window.event, ref_obj); |
||||||
|
} |
||||||
|
obj.attachEvent("on" + type, obj[type + fn]); |
||||||
|
} |
||||||
|
}, |
||||||
|
removeEvent: function (obj, eventName, eventCallback) { |
||||||
|
if (obj.removeEventListener) { |
||||||
|
obj.removeEventListener(eventName, eventCallback); |
||||||
|
} else if (obj.attachEvent) { |
||||||
|
obj.detachEvent(eventName); |
||||||
|
} |
||||||
|
}, |
||||||
|
input: "", |
||||||
|
pattern: "38384040373937396665", |
||||||
|
keydownHandler: function (e, ref_obj) { |
||||||
|
if (ref_obj) { |
||||||
|
konami = ref_obj; |
||||||
|
} // IE
|
||||||
|
konami.input += e ? e.keyCode : event.keyCode; |
||||||
|
if (konami.input.length > konami.pattern.length) { |
||||||
|
konami.input = konami.input.substr((konami.input.length - konami.pattern.length)); |
||||||
|
} |
||||||
|
if (konami.input === konami.pattern) { |
||||||
|
konami.code(konami._currentLink); |
||||||
|
konami.input = ''; |
||||||
|
e.preventDefault(); |
||||||
|
return false; |
||||||
|
} |
||||||
|
}, |
||||||
|
load: function (link) { |
||||||
|
this._currentLink = link; |
||||||
|
this.addEvent(document, "keydown", this.keydownHandler, this); |
||||||
|
this.iphone.load(link); |
||||||
|
}, |
||||||
|
unload: function () { |
||||||
|
this.removeEvent(document, 'keydown', this.keydownHandler); |
||||||
|
this.iphone.unload(); |
||||||
|
}, |
||||||
|
code: function (link) { |
||||||
|
window.location = link |
||||||
|
}, |
||||||
|
iphone: { |
||||||
|
start_x: 0, |
||||||
|
start_y: 0, |
||||||
|
stop_x: 0, |
||||||
|
stop_y: 0, |
||||||
|
tap: false, |
||||||
|
capture: false, |
||||||
|
orig_keys: "", |
||||||
|
keys: ["UP", "UP", "DOWN", "DOWN", "LEFT", "RIGHT", "LEFT", "RIGHT", "TAP", "TAP"], |
||||||
|
input: [], |
||||||
|
code: function (link) { |
||||||
|
konami.code(link); |
||||||
|
}, |
||||||
|
touchmoveHandler: function (e) { |
||||||
|
if (e.touches.length === 1 && konami.iphone.capture === true) { |
||||||
|
var touch = e.touches[0]; |
||||||
|
konami.iphone.stop_x = touch.pageX; |
||||||
|
konami.iphone.stop_y = touch.pageY; |
||||||
|
konami.iphone.tap = false; |
||||||
|
konami.iphone.capture = false; |
||||||
|
konami.iphone.check_direction(); |
||||||
|
} |
||||||
|
}, |
||||||
|
touchendHandler: function () { |
||||||
|
konami.iphone.input.push(konami.iphone.check_direction()); |
||||||
|
|
||||||
|
if (konami.iphone.input.length > konami.iphone.keys.length) konami.iphone.input.shift(); |
||||||
|
|
||||||
|
if (konami.iphone.input.length === konami.iphone.keys.length) { |
||||||
|
var match = true; |
||||||
|
for (var i = 0; i < konami.iphone.keys.length; i++) { |
||||||
|
if (konami.iphone.input[i] !== konami.iphone.keys[i]) { |
||||||
|
match = false; |
||||||
|
} |
||||||
|
} |
||||||
|
if (match) { |
||||||
|
konami.iphone.code(konami._currentLink); |
||||||
|
} |
||||||
|
} |
||||||
|
}, |
||||||
|
touchstartHandler: function (e) { |
||||||
|
konami.iphone.start_x = e.changedTouches[0].pageX; |
||||||
|
konami.iphone.start_y = e.changedTouches[0].pageY; |
||||||
|
konami.iphone.tap = true; |
||||||
|
konami.iphone.capture = true; |
||||||
|
}, |
||||||
|
load: function (link) { |
||||||
|
this.orig_keys = this.keys; |
||||||
|
konami.addEvent(document, "touchmove", this.touchmoveHandler); |
||||||
|
konami.addEvent(document, "touchend", this.touchendHandler, false); |
||||||
|
konami.addEvent(document, "touchstart", this.touchstartHandler); |
||||||
|
}, |
||||||
|
unload: function () { |
||||||
|
konami.removeEvent(document, 'touchmove', this.touchmoveHandler); |
||||||
|
konami.removeEvent(document, 'touchend', this.touchendHandler); |
||||||
|
konami.removeEvent(document, 'touchstart', this.touchstartHandler); |
||||||
|
}, |
||||||
|
check_direction: function () { |
||||||
|
x_magnitude = Math.abs(this.start_x - this.stop_x); |
||||||
|
y_magnitude = Math.abs(this.start_y - this.stop_y); |
||||||
|
x = ((this.start_x - this.stop_x) < 0) ? "RIGHT" : "LEFT"; |
||||||
|
y = ((this.start_y - this.stop_y) < 0) ? "DOWN" : "UP"; |
||||||
|
result = (x_magnitude > y_magnitude) ? x : y; |
||||||
|
result = (this.tap === true) ? "TAP" : result; |
||||||
|
return result; |
||||||
|
} |
||||||
|
} |
||||||
|
}; |
||||||
|
|
||||||
|
typeof callback === "string" && konami.load(callback); |
||||||
|
if (typeof callback === "function") { |
||||||
|
konami.code = callback; |
||||||
|
konami.load(); |
||||||
|
} |
||||||
|
|
||||||
|
return konami; |
||||||
|
}; |
||||||
|
|
||||||
|
|
||||||
|
if (typeof module !== 'undefined' && typeof module.exports !== 'undefined') { |
||||||
|
module.exports = Konami; |
||||||
|
} else { |
||||||
|
if (typeof define === 'function' && define.amd) { |
||||||
|
define([], function () { |
||||||
|
return Konami; |
||||||
|
}); |
||||||
|
} else { |
||||||
|
window.Konami = Konami; |
||||||
|
} |
||||||
|
} |
@ -0,0 +1,4 @@ |
|||||||
|
import './polyfills'; |
||||||
|
import './shuffle'; |
||||||
|
import './background'; |
||||||
|
|
@ -0,0 +1,9 @@ |
|||||||
|
// NodeList.forEach
|
||||||
|
if (window.NodeList && !NodeList.prototype.forEach) { |
||||||
|
NodeList.prototype.forEach = function (callback, thisArg) { |
||||||
|
thisArg = thisArg || window; |
||||||
|
for (let i = 0; i < this.length; i++) { |
||||||
|
callback.call(thisArg, this[i], i, this); |
||||||
|
} |
||||||
|
}; |
||||||
|
} |