Fusion ?
This commit is contained in:
commit
a849759521
|
@ -0,0 +1 @@
|
|||
*.pyc
|
|
@ -5,8 +5,8 @@ from django import forms
|
|||
|
||||
class LoginForm(forms.Form):
|
||||
# no need for max_length, let's not make heavyer things that can be lighter
|
||||
username = forms.CharField(label="Nom d'utilisateur")
|
||||
password = forms.CharField(label="Mot de passe", widget=forms.PasswordInput)
|
||||
username = forms.CharField(label="", widget=forms.TextInput(attrs={'placeholder':'Identifiant'}))
|
||||
password = forms.CharField(label="", widget=forms.PasswordInput(attrs={'placeholder':'Mot de passe'}))
|
||||
|
||||
class InscriptionForm(forms.Form):
|
||||
username = forms.CharField(label="Nom d'utilisateur", min_length=settings.USERNAME_MIN_LENGTH, max_length=settings.USERNAME_MAX_LENGTH)
|
||||
|
|
|
@ -1,18 +1,22 @@
|
|||
#-*- coding: utf-8 -*-
|
||||
|
||||
from django.shortcuts import render, redirect
|
||||
from django.contrib.auth import authenticate
|
||||
from django.contrib.auth.models import User
|
||||
from django.contrib.auth import login as a_login, logout as a_logout
|
||||
from account.forms import *
|
||||
from django.core.urlresolvers import reverse
|
||||
from django.core.validators import validate_email
|
||||
from django.conf import settings as s
|
||||
|
||||
from django.http import JsonResponse
|
||||
from django.http import Http404
|
||||
from account.forms import *
|
||||
from home.views import homepage
|
||||
|
||||
|
||||
def login(request):
|
||||
error = False
|
||||
form = LoginForm()
|
||||
"""
|
||||
Login validation
|
||||
Only accessible with ajax POST from menu and return json
|
||||
"""
|
||||
form = LoginForm(request.POST or None)
|
||||
if request.method == "POST":
|
||||
if form.is_valid():
|
||||
username = form.cleaned_data["username"]
|
||||
|
@ -20,20 +24,42 @@ def login(request):
|
|||
user = authenticate(username=username, password=password)
|
||||
if user:
|
||||
a_login(request, user)
|
||||
return redirect(reverse(homepage))
|
||||
data = {
|
||||
'login':True
|
||||
}
|
||||
else:
|
||||
error = True
|
||||
|
||||
return render(request, 'login.html', locals())
|
||||
data = {
|
||||
'login':False
|
||||
}
|
||||
if(User.objects.filter(username=username).exists()):
|
||||
data['error'] = 'Mauvais mot de passe'
|
||||
else:
|
||||
data['error'] = 'Identifiant inconnu'
|
||||
if('HTTP_X_REQUESTED_WITH' in request.META and request.META['HTTP_X_REQUESTED_WITH'] == 'XMLHttpRequest'):
|
||||
return JsonResponse(data)
|
||||
return render(request, 'account/login.html', locals())
|
||||
else:
|
||||
#hack attempt, log it
|
||||
print(request.POST)
|
||||
elif request.method == "GET":
|
||||
return render(request, 'account/login.html')
|
||||
|
||||
raise Http404
|
||||
|
||||
def logout(request):
|
||||
"""
|
||||
Logout user
|
||||
with ajax POST from menu and reload page
|
||||
"""
|
||||
a_logout(request)
|
||||
return redirect(reverse(homepage))
|
||||
|
||||
|
||||
def signup(request):
|
||||
error = False
|
||||
"""
|
||||
Signup user
|
||||
with ajax POST from signup page and return json
|
||||
"""
|
||||
form = InscriptionForm()
|
||||
if request.method == "POST":
|
||||
if form.is_valid():
|
||||
|
@ -42,25 +68,34 @@ def signup(request):
|
|||
username = form.cleaned_data["username"]
|
||||
email = form.cleaned_data["email"]
|
||||
cgu = form.cleaned_data["cgu"]
|
||||
if(
|
||||
username.length < s.USERNAME_MIN_LENGTH or username.length > s.USERNAME_MAX_LENGTH or
|
||||
password.length < s.PASSWORD_MIN_LENGTH or password.length > s.PASSWORD_MAX_LENGTH or
|
||||
password1 != password2 or cgu==False
|
||||
):
|
||||
error = True
|
||||
return render(request, 'signup.html', locals())
|
||||
if(password1 != password2):
|
||||
data = {
|
||||
'registered':False,
|
||||
'error':"Les mots de passe ne sont pas identique !"
|
||||
}
|
||||
elif(User.objects.filter(username=username).exists()):
|
||||
data = {
|
||||
'registered':False,
|
||||
'error':"Ce nom d'utilisateur est déjà utilisé !"
|
||||
}
|
||||
elif(User.objects.filter(email=email).exists()):
|
||||
data = {
|
||||
'registered':False,
|
||||
'error':"Cette adresse email est déjà utilisé !"
|
||||
}
|
||||
else:
|
||||
create_user(username, email, password1)
|
||||
authenticate(username, password1)
|
||||
data = {
|
||||
'registered':True
|
||||
}
|
||||
|
||||
try:
|
||||
validate_email(email)
|
||||
except forms.ValidationError:
|
||||
error = True
|
||||
return render(request, 'signup.html', locals())
|
||||
|
||||
create_user(username, email, password1)
|
||||
authenticate(username, password1)
|
||||
return render(request, 'home.html', locals())
|
||||
|
||||
return render(request, 'signupt.html', locals())
|
||||
if('HTTP_X_REQUESTED_WITH' in request.META and request.META['HTTP_X_REQUESTED_WITH'] == 'XMLHttpRequest'):
|
||||
return JsonResponse(data)
|
||||
return render(request, 'account/signup.html', locals())
|
||||
elif request.method == "GET":
|
||||
return render(request, 'account/signup.html', locals())
|
||||
raise Http404
|
||||
|
||||
def account(request):
|
||||
return render(request, 'account.html')
|
||||
return render(request, 'account.html')
|
||||
|
|
|
@ -0,0 +1,7 @@
|
|||
from django.conf import settings
|
||||
from django import forms
|
||||
|
||||
class ContactForm(forms.Form):
|
||||
email = forms.EmailField(label="E-mail")
|
||||
title = forms.CharField(label="Objet", min_length=settings.OBJECT_MIN_LENGTH, max_length=settings.OBJECT_MAX_LENGTH)
|
||||
message = forms.CharField(label="Message", min_length=settings.MAILBODY_MIN_LENGTH, max_length=settings.MAILBODY_MAX_LENGTH)
|
|
@ -2,5 +2,7 @@ from django.conf.urls import url
|
|||
|
||||
import home.views as v
|
||||
urlpatterns = [
|
||||
url(r'^$', v.homepage),
|
||||
url(r'^$', v.homepage, name="homepage"),
|
||||
url(r'^contact$', v.contact, name="contact"),
|
||||
url(r'^articlê$', v.article, name="article")
|
||||
]
|
||||
|
|
|
@ -1,6 +1,39 @@
|
|||
#-*- coding: utf-8 -*-
|
||||
|
||||
from django.shortcuts import render
|
||||
from django.shortcuts import render, redirect
|
||||
from django.contrib.auth import authenticate, get_user
|
||||
from django.contrib.auth.models import User
|
||||
from django.http import Http404
|
||||
from django.http import JsonResponse
|
||||
from home.forms import *
|
||||
|
||||
def homepage(request):
|
||||
return render(request, 'home/homepage.html')
|
||||
"""
|
||||
Render home page.
|
||||
"""
|
||||
return render(request, 'home/homepage.html', locals())
|
||||
|
||||
def contact(request):
|
||||
"""
|
||||
Form validation and contact page rendering.
|
||||
"""
|
||||
user = get_user(request)
|
||||
form = ContactForm(request.POST or None, initial={'email': user.email if user.is_authenticated else ''})
|
||||
if request.method == "POST":
|
||||
if form.is_valid():
|
||||
#TODO send email ? save into database ?
|
||||
data = {
|
||||
'sent':True
|
||||
}
|
||||
if('HTTP_X_REQUESTED_WITH' in request.META and request.META['HTTP_X_REQUESTED_WITH'] == 'XMLHttpRequest'):
|
||||
return JsonResponse(data)
|
||||
return render(request, 'home/contact.html', locals())
|
||||
else:
|
||||
#hack attempt, log it
|
||||
print(request.POST)
|
||||
elif request.method == "GET":
|
||||
return render(request, 'home/contact.html', locals())
|
||||
raise Http404
|
||||
|
||||
def article(request):
|
||||
return render(request, 'home/article.html')
|
|
@ -0,0 +1,8 @@
|
|||
from django.conf import settings
|
||||
from account.forms import LoginForm
|
||||
|
||||
def menu(request):
|
||||
dictionnaire = {
|
||||
'loginForm' : LoginForm(auto_id=False),
|
||||
}
|
||||
return dictionnaire
|
|
@ -11,6 +11,7 @@ https://docs.djangoproject.com/en/1.9/ref/settings/
|
|||
"""
|
||||
|
||||
import os
|
||||
from django.conf import global_settings
|
||||
|
||||
# Build paths inside the project like this: os.path.join(BASE_DIR, ...)
|
||||
BASE_DIR = os.path.dirname(os.path.dirname(os.path.abspath(__file__)))
|
||||
|
@ -60,7 +61,7 @@ TEMPLATES = [
|
|||
{
|
||||
'BACKEND': 'django.template.backends.django.DjangoTemplates',
|
||||
'DIRS': [
|
||||
'/home/darks/web/planete_casio/templates/',
|
||||
os.path.join(BASE_DIR, 'templates/'),
|
||||
],
|
||||
'APP_DIRS': True,
|
||||
'OPTIONS': {
|
||||
|
@ -69,6 +70,7 @@ TEMPLATES = [
|
|||
'django.template.context_processors.request',
|
||||
'django.contrib.auth.context_processors.auth',
|
||||
'django.contrib.messages.context_processors.messages',
|
||||
'planete_casio.context_processors.menu'
|
||||
],
|
||||
},
|
||||
},
|
||||
|
@ -136,16 +138,21 @@ APPEND_SLASH = True
|
|||
# Static files (CSS, JavaScript, Images)
|
||||
# https://docs.djangoproject.com/en/1.9/howto/static-files/
|
||||
|
||||
STATIC_URL = 'http://static.localhost/' # For dev css
|
||||
# STATIC_URL = '/static/' # For Django admin css
|
||||
# STATIC_URL = 'http://static.localhost/' # For dev css
|
||||
STATIC_URL = '/sfiles/' # For Django admin css
|
||||
|
||||
# STATIC_ROOT = '/home/web/planete_casio/static/'
|
||||
|
||||
STATICFILES_DIRS = (
|
||||
"/home/web/planete_casio/sfiles/",
|
||||
os.path.join(BASE_DIR, "sfiles"),
|
||||
)
|
||||
|
||||
|
||||
USERNAME_MIN_LENGTH = 3
|
||||
USERNAME_MAX_LENGTH = 30
|
||||
PASSWORD_MIN_LENGTH = 8
|
||||
PASSWORD_MAX_LENGTH = 72 # maximum number of characters for bcrypt
|
||||
PASSWORD_MAX_LENGTH = 72 # maximum number of characters for bcrypt
|
||||
OBJECT_MIN_LENGTH = 3
|
||||
OBJECT_MAX_LENGTH = 255
|
||||
MAILBODY_MIN_LENGTH = 3
|
||||
MAILBODY_MAX_LENGTH = 10000
|
|
@ -16,14 +16,14 @@ Including another URLconf
|
|||
from django.conf import settings
|
||||
from django.conf.urls import url, include
|
||||
from django.contrib import admin
|
||||
import account.views as v
|
||||
import account.views as av
|
||||
|
||||
urlpatterns = [
|
||||
url(r'^admin/', admin.site.urls),
|
||||
url(r'^', include('home.urls')),
|
||||
url(r'^forum/', include('forum.urls')),
|
||||
url(r'^account/', include('account.urls')),
|
||||
url(r'^login', v.login),
|
||||
url(r'^logout', v.logout),
|
||||
url(r'^signup', v.signup)
|
||||
url(r'^forum/', include('forum.urls'), name="forum"),
|
||||
url(r'^account/', include('account.urls'), name="account"),
|
||||
url(r'^login', av.login, name="login"),
|
||||
url(r'^logout', av.logout, name="logout"),
|
||||
url(r'^signup', av.signup, name="signup")
|
||||
]
|
||||
|
|
|
@ -2,7 +2,7 @@
|
|||
margin-left: 60px;
|
||||
}
|
||||
|
||||
#container h1 {
|
||||
/* #container h1 {
|
||||
margin-left: 5%;
|
||||
font-family: Raleway; font-size: 24px;
|
||||
font-weight: 200; color: #242424;
|
||||
|
@ -12,75 +12,6 @@
|
|||
margin-left: 5%;
|
||||
font-family: Raleway; font-size: 20px;
|
||||
font-weight: 200; color: #242424;
|
||||
}
|
||||
|
||||
article > div {
|
||||
margin: 5px 15px;
|
||||
text-align: justify;
|
||||
}
|
||||
|
||||
article .flex-container {
|
||||
display: flex;
|
||||
}
|
||||
|
||||
article .flex-container > * {
|
||||
flex-grow: 1;
|
||||
max-width: 500px;
|
||||
margin: 5px 10px;
|
||||
}
|
||||
|
||||
article .flex-container > * .more {
|
||||
display: block; margin-left: 10px;
|
||||
font-family: NotoSans; font-size: 12px;
|
||||
color: #ba1203;
|
||||
transition: .15s ease;
|
||||
}
|
||||
article .flex-container > * .more:hover {
|
||||
padding-left: 1 5px;
|
||||
}
|
||||
|
||||
article p {
|
||||
margin-bottom: 10px;
|
||||
}
|
||||
} */
|
||||
|
||||
|
||||
/* tiles */
|
||||
.tile-container {
|
||||
display: flex; flex-wrap: wrap;
|
||||
justify-content: space-around;
|
||||
align-items: stretch;
|
||||
}
|
||||
|
||||
.tile-container > div {
|
||||
flex-grow: 1;
|
||||
min-width: 300px;
|
||||
margin: 10px 15px; padding: 0 10px;
|
||||
/*border: 1px solid #cccccc;*/
|
||||
border-radius: 3px;
|
||||
box-shadow: 0px 1px 3px rgba(0, 0, 0, .3);
|
||||
}
|
||||
|
||||
|
||||
.tile-container table {
|
||||
width: 100%;
|
||||
}
|
||||
.tile-container table td {
|
||||
padding: 3px 5px;
|
||||
display: flex;
|
||||
}
|
||||
.tile-container table input[type="text"],
|
||||
.tile-container table input[type="date"] {
|
||||
flex-grow: 1;
|
||||
padding: 3px 10px;
|
||||
border: 0; border-radius: 1px;
|
||||
font-family: "Segoe UI", Helvetica, "Droid Sans", Arial,sans-serif;
|
||||
box-shadow: 0 0 1px rgba(0, 0, 0, .4); transition: .15s ease;
|
||||
}
|
||||
.tile-container table input[type="text"]:focus,
|
||||
.tile-container table input[type="date"]:focus {
|
||||
box-shadow: 0 0 4px rgba(0, 102, 255, .9);
|
||||
}
|
||||
}
|
||||
.tile-container table td:first-child {
|
||||
/*text-align: right;*/
|
||||
}
|
|
@ -14,8 +14,8 @@
|
|||
|
||||
body {
|
||||
margin: 0;
|
||||
background: #ffffff;
|
||||
font-family: sans-serif;
|
||||
background: #fbfbfb;
|
||||
font-family: 'DejaVu Sans', sans-serif;
|
||||
}
|
||||
|
||||
|
||||
|
@ -29,6 +29,9 @@ header {
|
|||
background: #f8f8fa; border-bottom: 1px solid #d0d0d0;
|
||||
}
|
||||
|
||||
header h1 {
|
||||
font-family: Raleway; font-weight: 200;
|
||||
}
|
||||
|
||||
header svg {
|
||||
width: 24px; height: 24px; vertical-align: middle;
|
||||
|
@ -69,6 +72,16 @@ header input[type="search"]:focus ~ a > svg > path {
|
|||
}
|
||||
|
||||
|
||||
footer {
|
||||
margin: 20px 10% 5px 10%; padding: 10px 0;
|
||||
text-align: center; font-size: 11px; font-style: italic;
|
||||
color: #a0a0a0;
|
||||
border-top: 1px solid rgba(0, 0, 0, .1);
|
||||
}
|
||||
footer p {
|
||||
margin: 3px 0;
|
||||
}
|
||||
|
||||
/*
|
||||
links
|
||||
*/
|
||||
|
@ -159,3 +172,18 @@ input[type="search"]:focus,
|
|||
input[type="password"]:focus {
|
||||
|
||||
}
|
||||
|
||||
|
||||
section {
|
||||
margin: 10px 5%;
|
||||
}
|
||||
|
||||
section h1 {
|
||||
border-bottom: 1px solid #a0a0a0;
|
||||
font-family: Raleway; font-size: 24px;
|
||||
font-weight: 200; color: #242424;
|
||||
}
|
||||
|
||||
section * {
|
||||
transition: .15s ease;
|
||||
}
|
|
@ -0,0 +1,134 @@
|
|||
/*
|
||||
home-title
|
||||
*/
|
||||
|
||||
.home-title {
|
||||
margin: 20px 0; padding: 10px 5%;
|
||||
background: #bf1c11; box-shadow: 0 2px 2px rgba(0, 0, 0, .3);
|
||||
border-top: 10px solid #ab170c;
|
||||
}
|
||||
|
||||
.home-title h1 {
|
||||
margin-top: 0;
|
||||
color: #ffffff; border-color: #ffffff;
|
||||
}
|
||||
|
||||
.home-title p {
|
||||
margin-bottom: 0; text-align: justify;
|
||||
color: #ffffff;
|
||||
}
|
||||
|
||||
.home-title a {
|
||||
color: inherit; text-decoration: underline;
|
||||
}
|
||||
|
||||
|
||||
/*
|
||||
pinned-content
|
||||
*/
|
||||
|
||||
.home-pinned-content > div {
|
||||
display: flex; justify-content: space-between;
|
||||
}
|
||||
|
||||
.home-pinned-content article {
|
||||
flex-grow: 1; margin: 0 1px; padding: 0;
|
||||
position: relative;
|
||||
max-width: 250px; overflow: hidden;
|
||||
}
|
||||
|
||||
.home-pinned-content a {
|
||||
display: block;
|
||||
}
|
||||
|
||||
.home-pinned-content img {
|
||||
width: 100%; filter: blur(0px);
|
||||
}
|
||||
|
||||
.home-pinned-content article div {
|
||||
position: absolute; bottom: 0; z-index: 3;
|
||||
width: 90%; margin: 0;
|
||||
padding: 30px 5% 10px 5%;
|
||||
color: #ffffff; text-shadow: 1px 1px 0 rgba(0,0,0,.6);
|
||||
background-image: linear-gradient(180deg,transparent 0,rgba(0,0,0,.7) 40px,rgba(0,0,0,.8));
|
||||
}
|
||||
|
||||
.home-pinned-content h2 {
|
||||
display: block; margin: 5px 0;
|
||||
font-size: 18px; font-family: NotoSans; font-weight: 200;
|
||||
line-height: 20px;
|
||||
}
|
||||
|
||||
|
||||
/*
|
||||
home-articles
|
||||
*/
|
||||
|
||||
.home-articles {
|
||||
display: flex; justify-content: space-between;
|
||||
}
|
||||
.home-articles > div {
|
||||
flex-grow: 1; max-width: 48%;
|
||||
}
|
||||
.home-articles h1 {
|
||||
display: flex; justify-content: space-between; align-items: center;
|
||||
}
|
||||
.home-articles h1 a {
|
||||
padding: 0;
|
||||
font-family: NotoSans; font-size: 16px;
|
||||
font-weight: 400; color: /*#015078*/ /*#bf1c11*/ #234d5f;
|
||||
}
|
||||
|
||||
.home-articles article {
|
||||
padding: 10px; margin: 10px 0; display: flex; align-items: center;
|
||||
background: #ffffff; border: 1px solid rgba(0, 0, 0, .2);
|
||||
}
|
||||
.home-articles article > img {
|
||||
float: left; margin-right: 10px; flex-shrink: 0;
|
||||
}
|
||||
.home-articles article > img.screeshot {
|
||||
width: 128px; height: 64px;
|
||||
}
|
||||
.home-articles article > div {
|
||||
flex-shrink: 1;
|
||||
}
|
||||
.home-articles article h3 {
|
||||
margin: 0;
|
||||
color: #424242; font-weight: normal;
|
||||
}
|
||||
.home-articles p {
|
||||
margin: 5px 0;
|
||||
text-align: justify;
|
||||
color: #808080;
|
||||
}
|
||||
.home-articles .metadata {
|
||||
margin: 0;
|
||||
color: #22292c;
|
||||
}
|
||||
.home-articles .metadata a {
|
||||
color: #22292c; font-weight: 400; font-style: italic;
|
||||
}
|
||||
|
||||
|
||||
/*
|
||||
hover rules
|
||||
*/
|
||||
|
||||
.home-pinned-content a:hover img,
|
||||
.home-pinned-content a:focus img {
|
||||
filter: blur(3px);
|
||||
}
|
||||
.home-pinned-content a:hover div,
|
||||
.home-pinned-content a:focus div {
|
||||
padding: 200px 5% 10px 5%;
|
||||
background-image: linear-gradient(180deg,transparent 0,rgba(0,0,0,.7) 40px,rgba(0,0,0,.8));
|
||||
}
|
||||
|
||||
.home-articles h1 a:hover,
|
||||
.home-articles h1 a:focus {
|
||||
padding-right: 10px;
|
||||
}
|
||||
.home-articles article a:hover,
|
||||
.home-articles article a:focus {
|
||||
text-decoration: underline;
|
||||
}
|
|
@ -253,4 +253,114 @@ header input[type="search"] {
|
|||
}
|
||||
#spotlight a:hover, header #spotlight a:focus {
|
||||
color: #404040;
|
||||
}
|
||||
|
||||
|
||||
/* Homepage */
|
||||
|
||||
section {
|
||||
margin: 10px;
|
||||
}
|
||||
section h1 {
|
||||
margin: 10px 0;
|
||||
border-bottom: 1px solid #a0a0a0;
|
||||
font-family: Raleway; font-size: 20px;
|
||||
font-weight: 200; color: #242424;
|
||||
}
|
||||
section * {
|
||||
transition: .15s ease;
|
||||
}
|
||||
.home-title {
|
||||
margin: 20px 0; padding: 10px;
|
||||
background: #bf1c11; box-shadow: 0 2px 2px rgba(0, 0, 0, .3);
|
||||
border-top: 10px solid #ab170c;
|
||||
}
|
||||
.home-title h1 {
|
||||
margin: 0;
|
||||
color: #ffffff; border-color: #ffffff;
|
||||
}
|
||||
.home-title p {
|
||||
margin-bottom: 0; text-align: justify;
|
||||
color: #ffffff; font-size: 14px;
|
||||
}
|
||||
.home-title a {
|
||||
color: inherit; text-decoration: underline;
|
||||
}
|
||||
#shoutbox {
|
||||
display: none;
|
||||
}
|
||||
.home-pinned-content {
|
||||
margin-top: 30px;
|
||||
}
|
||||
.home-pinned-content article {
|
||||
margin: 5px 0;
|
||||
}
|
||||
.home-pinned-content article > a {
|
||||
width: 100%;
|
||||
display: flex; align-items: center;
|
||||
text-decoration: none;
|
||||
}
|
||||
.home-pinned-content img {
|
||||
flex-shrink: 0;
|
||||
width: 100px; height: 100px;
|
||||
}
|
||||
.home-pinned-content article div {
|
||||
flex-grow: 1; margin-left: 10px;
|
||||
}
|
||||
.home-pinned-content h2 {
|
||||
margin: 0;
|
||||
font-family: Raleway; font-size: 18px;
|
||||
font-weight: 400; color: #242424;
|
||||
text-decoration: underline;
|
||||
}
|
||||
.home-pinned-content span {
|
||||
color: #000000; font-size: 14px;
|
||||
}
|
||||
.home-articles > div {
|
||||
margin-top: 30px;
|
||||
}
|
||||
.home-articles article {
|
||||
margin-bottom: 15px;
|
||||
display: flex; align-items: center;
|
||||
}
|
||||
.home-articles article > img {
|
||||
flex-shrink: 0; width: 128px; height: 64px;
|
||||
}
|
||||
.home-articles article > div {
|
||||
margin-left: 5px;
|
||||
}
|
||||
.home-articles h1 {
|
||||
display: flex; justify-content: space-between; align-items: center;
|
||||
}
|
||||
.home-articles h1 > a {
|
||||
font-size: 13px; color: #666666;
|
||||
}
|
||||
.home-articles h3 {
|
||||
margin: 0;
|
||||
color: #424242; font-weight: normal;
|
||||
}
|
||||
.home-articles p {
|
||||
margin: 5px 0;
|
||||
text-align: justify;
|
||||
color: #808080; font-size: 14px;
|
||||
}
|
||||
|
||||
|
||||
/* Notifications */
|
||||
|
||||
.alert {
|
||||
display: none;
|
||||
}
|
||||
|
||||
|
||||
/* Footer */
|
||||
|
||||
footer {
|
||||
margin: 20px 10% 5px 10%; padding: 10px 0;
|
||||
text-align: center; font-size: 11px; font-style: italic;
|
||||
color: #a0a0a0;
|
||||
border-top: 1px solid rgba(0, 0, 0, .1);
|
||||
}
|
||||
footer p {
|
||||
margin: 3px 0;
|
||||
}
|
|
@ -62,7 +62,7 @@ nav a:focus {
|
|||
display: flex; flex-direction: column; flex-grow: 1;
|
||||
align-items: center; justify-content: center;
|
||||
width: 100%; height: 100%;
|
||||
-moz-transition: opacity .15s ease; /* because Chrome sucks */
|
||||
transition: opacity .15s ease; /* because Chrome sucks */
|
||||
}
|
||||
|
||||
#light-menu li > a > svg {
|
||||
|
@ -75,12 +75,12 @@ nav a:focus {
|
|||
#light-menu li > a::after {
|
||||
content: attr(label);
|
||||
position: fixed; display: none;
|
||||
padding: 4px 8px; margin-top: -28px; left: 63px;
|
||||
padding: 4px 8px; /*margin-top: -28px;*/ left: 63px;
|
||||
font-family: NotoSans; border-radius: 3px;
|
||||
background: rgba(0, 0, 0, 0.9);
|
||||
}
|
||||
#light-menu li > a:hover::after,
|
||||
#light-menu li > a:focus::after {
|
||||
#light-menu li:not(.opened) > a:hover::after,
|
||||
#light-menu li:not(.opened) > a:focus::after {
|
||||
display: block;
|
||||
}
|
||||
|
||||
|
@ -96,21 +96,34 @@ nav a:focus {
|
|||
|
||||
/* Overlay */
|
||||
#menu {
|
||||
position: fixed; left: 60px; z-index: 5;
|
||||
width: 0; height: 100%; overflow-x: hidden; overflow-y: auto;
|
||||
position: fixed; z-index: 5;
|
||||
left: -240px; width: 300px; /* left-to-right animation */
|
||||
/*left: 60px; width: 0;*/ /* scroll animation */
|
||||
height: 100%; overflow-x: hidden; overflow-y: auto;
|
||||
font-family: NotoSans; font-size: 14px;
|
||||
background: #22292c; box-shadow: 0 0 5px rgba(0, 0, 0, 0.3);
|
||||
transition: .2s ease;
|
||||
transition: 2s ease;
|
||||
}
|
||||
/*@media all and (max-width: 1266px) {
|
||||
#menu {
|
||||
left: 30px;
|
||||
}
|
||||
}*/
|
||||
|
||||
#menu.opened {
|
||||
left: 60px; /* left-to-right animation */
|
||||
/*width: 300px;*/ /* scroll animation */
|
||||
}
|
||||
|
||||
|
||||
#menu.scroll-animation {
|
||||
left: 60px; width: 0;
|
||||
}
|
||||
#menu.scroll-animation.opened {
|
||||
width: 300px;
|
||||
}
|
||||
#menu.left-to-right-animation {
|
||||
left: -240px; width: 300px;
|
||||
}
|
||||
#menu.left-to-right-animation.opened {
|
||||
left: 60px;
|
||||
}
|
||||
|
||||
|
||||
#menu > div {
|
||||
width: 300px;
|
||||
|
@ -169,14 +182,15 @@ nav a:focus {
|
|||
|
||||
#menu form input {
|
||||
display: block; width: 80%;
|
||||
margin: 5px auto; padding: 5px 10px;
|
||||
font-size: 14px;
|
||||
margin: 0 5%; padding: 5px 2%;
|
||||
font-size: 14px; color: inherit;
|
||||
background: #e8e8e8; transition: background .15s ease;
|
||||
border: none;
|
||||
}
|
||||
#menu form input:focus {
|
||||
background: #ffffff;
|
||||
}
|
||||
#menu form input:first-child {
|
||||
#menu form.login input:first-child {
|
||||
margin-bottom: 0; border-bottom: none;
|
||||
border-top-left-radius: 5px;
|
||||
-webkit-border-top-left-radius: 5px;
|
||||
|
@ -185,7 +199,7 @@ nav a:focus {
|
|||
-webkit-border-top-right-radius: 5px;
|
||||
-moz-border-top-right-radius: 5px;
|
||||
}
|
||||
#menu form input:nth-child(2) {
|
||||
#menu form.login input:nth-child(2) {
|
||||
margin-top: 0; border-top: 1px solid #dddddd;
|
||||
border-bottom-left-radius: 5px;
|
||||
-webkit-border-bottom-left-radius: 5px;
|
||||
|
|
|
@ -40,3 +40,14 @@
|
|||
}
|
||||
}
|
||||
|
||||
|
||||
@media screen and (max-width: 1100px) {
|
||||
.home-pinned-content article:nth-child(5) {
|
||||
display: none;
|
||||
}
|
||||
}
|
||||
@media screen and (max-width: 800px) {
|
||||
.home-pinned-content article:nth-child(4) {
|
||||
display: none;
|
||||
}
|
||||
}
|
||||
|
|
|
@ -0,0 +1,34 @@
|
|||
#shoutbox {
|
||||
margin: 20px 5% 10px 5%;
|
||||
/*box-shadow: 0 0 2px rgba(0, 0, 0, .4);*/
|
||||
background: #ffffff;
|
||||
/*border: 1px solid #999999;*/
|
||||
}
|
||||
|
||||
#shoutbox > div {
|
||||
margin: 0; padding: 0; height: 125px; width: 100%;
|
||||
overflow-y: scroll; border-bottom: 1px solid #999999;
|
||||
border-radius: 5px 5px 0 0;
|
||||
border: 1px solid #999999;
|
||||
}
|
||||
#shoutbox > input {
|
||||
width: 100%; padding: 5px 0;
|
||||
border-radius: 0 0 5px 5px;
|
||||
border: 1px solid #999999;
|
||||
}
|
||||
#shoutbox > input:focus {
|
||||
border-color: #a12222;
|
||||
box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.075), 0 0 8px rgba(161, 34, 34, 0.6);
|
||||
}
|
||||
|
||||
#shoutbox > div > div {
|
||||
padding: 2px 10px;
|
||||
border-bottom: 1px solid rgba(0, 0, 0, .3);
|
||||
font-size: 11px;
|
||||
}
|
||||
#shoutbox > div > div:last-child {
|
||||
border-bottom: none;
|
||||
}
|
||||
#shoutbox > div > div:hover {
|
||||
background: #e0e0e0;
|
||||
}
|
|
@ -0,0 +1,3 @@
|
|||
function contact(response){
|
||||
alert(response)
|
||||
}
|
|
@ -0,0 +1,74 @@
|
|||
function setCookie(name, value) {
|
||||
var end = new Date();
|
||||
end.setTime( end.getTime() + 3600 * 1000 );
|
||||
var str=name+"="+escape(value)+"; expires="+end.toGMTString()+"; path=/";
|
||||
document.cookie = str;
|
||||
}
|
||||
function getCookie(name) {
|
||||
var debut = document.cookie.indexOf(name);
|
||||
if( debut == -1 ) return null;
|
||||
var end = document.cookie.indexOf( ";", debut+name.length+1 );
|
||||
if( end == -1 ) end = document.cookie.length;
|
||||
return unescape( document.cookie.substring( debut+name.length+1, end ) );
|
||||
}
|
||||
|
||||
function close_important(element) {
|
||||
element.style.opacity = 0;
|
||||
setTimeout(function(){ element.parentNode.removeChild(element); }, 200);
|
||||
}
|
||||
|
||||
/*
|
||||
Send post ajax request to url defined in action.
|
||||
Callback the function defined in the callback attribute from the submit type.
|
||||
*/
|
||||
function ajaxWrapper(evt){
|
||||
evt.preventDefault();
|
||||
var elems = evt.target;
|
||||
var params = "";
|
||||
// do not embed submit value (-1)
|
||||
for(i = 0; i < elems.length-1; i++){
|
||||
if(params) params += "&";
|
||||
params += encodeURIComponent(elems[i].name)+"="+encodeURIComponent(elems[i].value);
|
||||
}
|
||||
const req = new XMLHttpRequest();
|
||||
req.open("POST", evt.target.action, true);
|
||||
req.setRequestHeader('Content-Type',"application/x-www-form-urlencoded");
|
||||
req.setRequestHeader('X-Requested-With', 'XMLHttpRequest');
|
||||
req.onreadystatechange = function(){
|
||||
if(req.readyState == 4 && (req.status == 200 || req.status == 0)){
|
||||
var fn = window[elems[elems.length-1].getAttribute("callback")];
|
||||
if(typeof fn == 'function'){
|
||||
fn(req.responseText);
|
||||
}
|
||||
}
|
||||
}
|
||||
req.send(params);
|
||||
}
|
||||
|
||||
/*
|
||||
Add event listener on submit for all form with class with-ajax.
|
||||
*/
|
||||
|
||||
window.onload = function(){
|
||||
|
||||
var ele;
|
||||
var elems = document.getElementsByClassName('with-ajax');
|
||||
for(i = 0; i < elems.length; i++){
|
||||
ele = elems[i];
|
||||
if(ele.addEventListener){ // Normal people
|
||||
ele.addEventListener("submit", ajaxWrapper, false);
|
||||
}else if(ele.attachEvent){ // Retarded user using IE
|
||||
ele.attachEvent("onsubmit", ajaxWrapper);
|
||||
}
|
||||
}
|
||||
|
||||
if(getCookie('pc_notif') == 'true')
|
||||
document.getElementsByClassName('alert')[0].parentNode.removeChild(document.getElementsByClassName('alert')[0]);
|
||||
if(getCookie('pc_notif_2') == 'true')
|
||||
document.getElementsByClassName('alert')[0].parentNode.removeChild(document.getElementsByClassName('alert')[0]);
|
||||
|
||||
}
|
||||
|
||||
function login(response){
|
||||
alert(response);
|
||||
}
|
|
@ -6,18 +6,19 @@
|
|||
<article>
|
||||
<h1>Formulaire de connexion</h1>
|
||||
<div>
|
||||
{% if error %}
|
||||
<p><strong>Utilisateur inexistant ou mauvais de mot de passe.</strong></p>
|
||||
{% if data != None and data.login == False %}
|
||||
<p><strong>{{ data.error }}</strong></p>
|
||||
{% endif %}
|
||||
|
||||
{% if user.is_authenticated %}
|
||||
Vous êtes connecté, {{ user.username }} !
|
||||
{% else %}
|
||||
<form method="post" action=".">
|
||||
<form method="post" action="/login" class="with-ajax">
|
||||
{{ loginForm }}
|
||||
{% csrf_token %}
|
||||
{{ form.as_p }}
|
||||
<input type="submit"/>
|
||||
<input type="submit" callback="login_page" value="Connexion"/>
|
||||
</form>
|
||||
<a href="/password-forgotten">Mot de passe oublié ?</a>
|
||||
{% endif %}
|
||||
</div>
|
||||
</article>
|
||||
|
|
|
@ -3,7 +3,7 @@
|
|||
<!DOCTYPE html>
|
||||
<html lang="fr-FR">
|
||||
<head>
|
||||
<title>{% block title %}Planète Casio : design template{% endblock %}</title>
|
||||
<title>{% block title %}Planète Casio{% endblock %}</title>
|
||||
|
||||
<meta charset="utf-8" />
|
||||
<meta name="viewport" content="width=device-width, initial-scale=1.0">
|
||||
|
@ -12,13 +12,12 @@
|
|||
<link rel="stylesheet" media="all and (min-width: 700px)" type="text/css" href="{% static 'css/navbar.css' %}">
|
||||
<link rel="stylesheet" media="all and (min-width: 700px)" type="text/css" href="{% static 'css/container.css' %}">
|
||||
<link rel="stylesheet" media="all and (min-width: 700px)" type="text/css" href="{% static 'css/responsive.css' %}">
|
||||
|
||||
<link rel="stylesheet" media="all and (max-width: 699px)" type="text/css" href="{% static 'css/light.css' %}">
|
||||
</head>
|
||||
<body>
|
||||
<nav>
|
||||
<ul id="light-menu">
|
||||
<a id="logo" href="{% url 'home.views.homepage' %}">
|
||||
<a id="logo" href="{% url 'homepage' %}">
|
||||
<img src="{% static 'images/logo_noshadow.png' %}" alt="logo"/>
|
||||
</a>
|
||||
|
||||
|
@ -138,8 +137,12 @@
|
|||
<h2>
|
||||
Invité
|
||||
</h2>
|
||||
<a href="{% url 'account.views.login' %}">Connexion</a>
|
||||
<a href="{% url 'account.views.login' %}">Inscription</a>
|
||||
<form method="post" action="{% url 'login' %}" class="login with-ajax">
|
||||
{{ loginForm }}
|
||||
{% csrf_token %}
|
||||
<input type="submit" callback="login" value="Connexion">
|
||||
</form>
|
||||
<a href="{% url 'signup' %}">Inscription</a>
|
||||
</div>
|
||||
{% endif %}
|
||||
|
||||
|
@ -355,34 +358,10 @@
|
|||
</div> -->
|
||||
</body>
|
||||
|
||||
{% block javascript %}
|
||||
<script type="text/javascript" src="{% static 'scripts/trigger_menu.js' %}"></script>
|
||||
<script type="text/javascript" src="{% static 'scripts/smartphone_patch.js' %}"></script>
|
||||
|
||||
<script type="text/javascript">
|
||||
function setCookie(name, value) {
|
||||
var end = new Date();
|
||||
end.setTime( end.getTime() + 3600 * 1000 );
|
||||
var str=name+"="+escape(value)+"; expires="+end.toGMTString()+"; path=/";
|
||||
document.cookie = str;
|
||||
}
|
||||
function getCookie(name) {
|
||||
var debut = document.cookie.indexOf(name);
|
||||
if( debut == -1 ) return null;
|
||||
var end = document.cookie.indexOf( ";", debut+name.length+1 );
|
||||
if( end == -1 ) end = document.cookie.length;
|
||||
return unescape( document.cookie.substring( debut+name.length+1, end ) );
|
||||
}
|
||||
|
||||
if(getCookie('pc_notif') == 'true')
|
||||
document.getElementsByClassName('alert')[0].parentNode.removeChild(document.getElementsByClassName('alert')[0]);
|
||||
if(getCookie('pc_notif_2') == 'true')
|
||||
document.getElementsByClassName('alert')[0].parentNode.removeChild(document.getElementsByClassName('alert')[0]);
|
||||
|
||||
function close_important(element) {
|
||||
element.style.opacity = 0;
|
||||
setTimeout(function(){ element.parentNode.removeChild(element); }, 200);
|
||||
}
|
||||
|
||||
</script>
|
||||
<script type="text/javascript" src="{% static 'scripts/pc-utils.js' %}"></script>
|
||||
{% endblock %}
|
||||
|
||||
</html>
|
||||
|
|
|
@ -0,0 +1,19 @@
|
|||
{% extends "base.html" %}
|
||||
{% load static %}
|
||||
|
||||
{% block title %}Planète Casio — Contact{% endblock %}
|
||||
|
||||
{% block content %}
|
||||
|
||||
<form method="post" action="{% url 'contact' %}" class="with-ajax">
|
||||
{{ form }}
|
||||
{% csrf_token %}
|
||||
<input type="submit" callback="contact" value="Envoyer"/>
|
||||
</form>
|
||||
|
||||
{% endblock %}
|
||||
|
||||
{% block javascript %}
|
||||
{{ block.super }}
|
||||
<script type="text/javascript" src="{% static 'scripts/contact.js' %}">
|
||||
{% endblock %}
|
|
@ -0,0 +1,333 @@
|
|||
|
||||
|
||||
<!DOCTYPE html>
|
||||
<html lang="fr-FR">
|
||||
<head>
|
||||
<title>Planète Casio — Contact</title>
|
||||
|
||||
<meta charset="utf-8" />
|
||||
<meta name="viewport" content="width=device-width, initial-scale=1.0">
|
||||
|
||||
<link rel="stylesheet" media="all and (min-width: 700px)" type="text/css" href="/sfiles/css/global.css">
|
||||
<link rel="stylesheet" media="all and (min-width: 700px)" type="text/css" href="/sfiles/css/navbar.css">
|
||||
<link rel="stylesheet" media="all and (min-width: 700px)" type="text/css" href="/sfiles/css/container.css">
|
||||
<link rel="stylesheet" media="all and (min-width: 700px)" type="text/css" href="/sfiles/css/responsive.css">
|
||||
<link rel="stylesheet" media="all and (max-width: 699px)" type="text/css" href="/sfiles/css/light.css">
|
||||
</head>
|
||||
<body>
|
||||
<nav>
|
||||
<ul id="light-menu">
|
||||
<a id="logo" href="/">
|
||||
<img src="/sfiles/images/logo_noshadow.png" alt="logo"/>
|
||||
</a>
|
||||
|
||||
<li>
|
||||
<a role="button" label="Compte" tabindex="0">
|
||||
<svg viewBox="0 0 24 24">
|
||||
<path fill="#ffffff" d="M12,19.2C9.5,19.2 7.29,17.92 6,16C6.03,14 10,12.9 12,12.9C14,12.9 17.97,14 18,16C16.71,17.92 14.5,19.2 12,19.2M12,5A3,3 0 0,1 15,8A3,3 0 0,1 12,11A3,3 0 0,1 9,8A3,3 0 0,1 12,5M12,2A10,10 0 0,0 2,12A10,10 0 0,0 12,22A10,10 0 0,0 22,12C22,6.47 17.5,2 12,2Z"></path>
|
||||
</svg>
|
||||
<div>Compte</div>
|
||||
</a>
|
||||
</li>
|
||||
|
||||
<li>
|
||||
<a role="button" label="Actualités" tabindex="0">
|
||||
<svg viewBox="0 0 24 24">
|
||||
<path fill="#ffffff" d="M20,11H4V8H20M20,15H13V13H20M20,19H13V17H20M11,19H4V13H11M20.33,4.67L18.67,3L17,4.67L15.33,3L13.67,4.67L12,3L10.33,4.67L8.67,3L7,4.67L5.33,3L3.67,4.67L2,3V19A2,2 0 0,0 4,21H20A2,2 0 0,0 22,19V3L20.33,4.67Z"></path>
|
||||
</svg>
|
||||
<div>Actualités</div>
|
||||
</a>
|
||||
</li>
|
||||
|
||||
<li>
|
||||
<a role="button" label="Forum" tabindex="0">
|
||||
<svg viewBox="0 0 24 24">
|
||||
<path fill="#ffffff" d="M17,12V3A1,1 0 0,0 16,2H3A1,1 0 0,0 2,3V17L6,13H16A1,1 0 0,0 17,12M21,6H19V15H6V17A1,1 0 0,0 7,18H18L22,22V7A1,1 0 0,0 21,6Z"></path>
|
||||
</svg>
|
||||
<div>Forum</div>
|
||||
</a>
|
||||
</li>
|
||||
|
||||
<li>
|
||||
<a role="button" label="Programmes" tabindex="0">
|
||||
<svg viewBox="0 0 24 24">
|
||||
<path fill="#ffffff" d="M8,3A2,2 0 0,0 6,5V9A2,2 0 0,1 4,11H3V13H4A2,2 0 0,1 6,15V19A2,2 0 0,0 8,21H10V19H8V14A2,2 0 0,0 6,12A2,2 0 0,0 8,10V5H10V3M16,3A2,2 0 0,1 18,5V9A2,2 0 0,0 20,11H21V13H20A2,2 0 0,0 18,15V19A2,2 0 0,1 16,21H14V19H16V14A2,2 0 0,1 18,12A2,2 0 0,1 16,10V5H14V3H16Z"></path>
|
||||
</svg>
|
||||
<div>Programmes</div>
|
||||
</a>
|
||||
</li>
|
||||
|
||||
<li>
|
||||
<a role="button" label="Tutoriels" tabindex="0">
|
||||
<svg viewBox="0 0 24 24">
|
||||
<path fill="#ffffff" d="M12,3L1,9L12,15L21,10.09V17H23V9M5,13.18V17.18L12,21L19,17.18V13.18L12,17L5,13.18Z"></path>
|
||||
</svg>
|
||||
<div>Tutoriels</div>
|
||||
</a>
|
||||
</li>
|
||||
|
||||
<li>
|
||||
<a role="button" label="Sprites" tabindex="0">
|
||||
<svg viewBox="0 0 24 24">
|
||||
<path fill="#ffffff" d="M20.71,4.63L19.37,3.29C19,2.9 18.35,2.9 17.96,3.29L9,12.25L11.75,15L20.71,6.04C21.1,5.65 21.1,5 20.71,4.63M7,14A3,3 0 0,0 4,17C4,18.31 2.84,19 2,19C2.92,20.22 4.5,21 6,21A4,4 0 0,0 10,17A3,3 0 0,0 7,14Z"></path>
|
||||
</svg>
|
||||
<div>Sprites</div>
|
||||
</a>
|
||||
</li>
|
||||
|
||||
<li>
|
||||
<a href="#" label="Outils">
|
||||
<svg viewBox="0 0 24 24">
|
||||
<path fill="#ffffff" d="M22.7,19L13.6,9.9C14.5,7.6 14,4.9 12.1,3C10.1,1 7.1,0.6 4.7,1.7L9,6L6,9L1.6,4.7C0.4,7.1 0.9,10.1 2.9,12.1C4.8,14 7.5,14.5 9.8,13.6L18.9,22.7C19.3,23.1 19.9,23.1 20.3,22.7L22.6,20.4C23.1,20 23.1,19.3 22.7,19Z"></path>
|
||||
</svg>
|
||||
<div>Outils</div>
|
||||
</a>
|
||||
</li>
|
||||
</ul>
|
||||
|
||||
<div id="menu">
|
||||
|
||||
<div>
|
||||
<h2>
|
||||
Invité
|
||||
</h2>
|
||||
<form method="post" action="/login" class="login with-ajax">
|
||||
<tr><th></th><td><input name="username" placeholder="Identifiant" type="text" required /></td></tr>
|
||||
<tr><th></th><td><input name="password" placeholder="Mot de passe" type="password" required /></td></tr>
|
||||
<input type='hidden' name='csrfmiddlewaretoken' value='0V7fuD52dM89FkLsYLaAZusaAbx59DMpj8HlXJgr6tCgqH6dM4xeaOqBKUvsEQQA' />
|
||||
<input type="submit" callback="login" value="Connexion">
|
||||
</form>
|
||||
<a href="/signup">Inscription</a>
|
||||
</div>
|
||||
|
||||
|
||||
<div>
|
||||
<h2>
|
||||
<svg viewBox="0 0 24 24">
|
||||
<path fill="#ffffff" d="M20,11H4V8H20M20,15H13V13H20M20,19H13V17H20M11,19H4V13H11M20.33,4.67L18.67,3L17,4.67L15.33,3L13.67,4.67L12,3L10.33,4.67L8.67,3L7,4.67L5.33,3L3.67,4.67L2,3V19A2,2 0 0,0 4,21H20A2,2 0 0,0 22,19V3L20.33,4.67Z"></path>
|
||||
</svg>
|
||||
Actualités
|
||||
</h2>
|
||||
<a href="#">Casio</a>
|
||||
<a href="#">Arduino</a>
|
||||
<a href="#">Projets communautaires</a>
|
||||
<a href="#">Divers</a>
|
||||
|
||||
<hr />
|
||||
|
||||
<h3>Derniers articles</h3>
|
||||
<ul>
|
||||
<li><a href="#">Un nouvel OS pour les Graph 75</a></li>
|
||||
<li><a href="#">Les 7 Days CPC arrivent bientôt</a></li>
|
||||
<li><a href="#">Résultats de jeu du mois de Février 2017</a></li>
|
||||
<li><a href="#">Test du shield relai Sainsmart pour Arduino</a></li>
|
||||
<li><a href="#">Un nouveau tutoriel sur le C-engine</a></li>
|
||||
</ul>
|
||||
</div>
|
||||
|
||||
<div>
|
||||
<h2>
|
||||
<svg viewBox="0 0 24 24">
|
||||
<path fill="#ffffff" d="M17,12V3A1,1 0 0,0 16,2H3A1,1 0 0,0 2,3V17L6,13H16A1,1 0 0,0 17,12M21,6H19V15H6V17A1,1 0 0,0 7,18H18L22,22V7A1,1 0 0,0 21,6Z"></path>
|
||||
</svg>
|
||||
Forum
|
||||
</h2>
|
||||
<a href="#">Vie communautaire</a>
|
||||
<a href="#">Projets de programmation</a>
|
||||
<a href="#">Questions et problèmes</a>
|
||||
<a href="#">Discussions</a>
|
||||
<a href="#">Administration</a>
|
||||
<a href="#">CreativeCalc</a>
|
||||
|
||||
<hr />
|
||||
|
||||
<h3>Derniers commentaires</h3>
|
||||
<ul>
|
||||
<li><a href="#">Legolas</a> sur <a href="#">Bugs de la v5</a></li>
|
||||
<li><a href="#">Dark Storm</a> sur <a href="#">fxSDK support</a></li>
|
||||
<li><a href="#">Gollum</a> sur <a href="#">Le nom de topic qui fout le bordel car il est trop long…</a></li>
|
||||
<li><a href="#">Lephenixnoir</a> sur <a href="#">fxSDK support</a></li>
|
||||
<li><a href="#">Kristaba</a> sur <a href="#">FiXos, le retour</a></li>
|
||||
</ul>
|
||||
</div>
|
||||
|
||||
<div>
|
||||
<h2>
|
||||
<svg viewBox="0 0 24 24">
|
||||
<path fill="#ffffff" d="M8,3A2,2 0 0,0 6,5V9A2,2 0 0,1 4,11H3V13H4A2,2 0 0,1 6,15V19A2,2 0 0,0 8,21H10V19H8V14A2,2 0 0,0 6,12A2,2 0 0,0 8,10V5H10V3M16,3A2,2 0 0,1 18,5V9A2,2 0 0,0 20,11H21V13H20A2,2 0 0,0 18,15V19A2,2 0 0,1 16,21H14V19H16V14A2,2 0 0,1 18,12A2,2 0 0,1 16,10V5H14V3H16Z"></path>
|
||||
</svg>
|
||||
Programmes
|
||||
</h2>
|
||||
<a href="#">
|
||||
<svg viewBox="0 0 24 24">
|
||||
<path fill="#ffffff" d="M7,6H17A6,6 0 0,1 23,12A6,6 0 0,1 17,18C15.22,18 13.63,17.23 12.53,16H11.47C10.37,17.23 8.78,18 7,18A6,6 0 0,1 1,12A6,6 0 0,1 7,6M6,9V11H4V13H6V15H8V13H10V11H8V9H6M15.5,12A1.5,1.5 0 0,0 14,13.5A1.5,1.5 0 0,0 15.5,15A1.5,1.5 0 0,0 17,13.5A1.5,1.5 0 0,0 15.5,12M18.5,9A1.5,1.5 0 0,0 17,10.5A1.5,1.5 0 0,0 18.5,12A1.5,1.5 0 0,0 20,10.5A1.5,1.5 0 0,0 18.5,9Z"></path>
|
||||
</svg>
|
||||
Jeux
|
||||
</a>
|
||||
<a href="#">
|
||||
<svg viewBox="0 0 24 24">
|
||||
<path fill="#ffffff" d="M19,19H5V8H19M19,3H18V1H16V3H8V1H6V3H5C3.89,3 3,3.9 3,5V19A2,2 0 0,0 5,21H19A2,2 0 0,0 21,19V5A2,2 0 0,0 19,3M16.53,11.06L15.47,10L10.59,14.88L8.47,12.76L7.41,13.82L10.59,17L16.53,11.06Z"></path>
|
||||
</svg>
|
||||
Utilitaires
|
||||
</a>
|
||||
<a href="#">
|
||||
<svg viewBox="0 0 24 24">
|
||||
<path fill="#ffffff" d="M21,16H3V4H21M21,2H3C1.89,2 1,2.89 1,4V16A2,2 0 0,0 3,18H10V20H8V22H16V20H14V18H21A2,2 0 0,0 23,16V4C23,2.89 22.1,2 21,2Z"></path>
|
||||
</svg>
|
||||
Logiciels
|
||||
</a>
|
||||
<a href="#">
|
||||
<svg viewBox="0 0 24 24">
|
||||
<path fill="#ffffff" d="M12,15.39L8.24,17.66L9.23,13.38L5.91,10.5L10.29,10.13L12,6.09L13.71,10.13L18.09,10.5L14.77,13.38L15.76,17.66M22,9.24L14.81,8.63L12,2L9.19,8.63L2,9.24L7.45,13.97L5.82,21L12,17.27L18.18,21L16.54,13.97L22,9.24Z"></path>
|
||||
</svg>
|
||||
Top 20
|
||||
</a>
|
||||
|
||||
<hr />
|
||||
|
||||
<a href="#">
|
||||
<svg viewBox="0 0 24 24">
|
||||
<path fill="#ffffff" d="M9.5,3A6.5,6.5 0 0,1 16,9.5C16,11.11 15.41,12.59 14.44,13.73L14.71,14H15.5L20.5,19L19,20.5L14,15.5V14.71L13.73,14.44C12.59,15.41 11.11,16 9.5,16A6.5,6.5 0 0,1 3,9.5A6.5,6.5 0 0,1 9.5,3M9.5,5C7,5 5,7 5,9.5C5,12 7,14 9.5,14C12,14 14,12 14,9.5C14,7 12,5 9.5,5Z" />
|
||||
</svg>
|
||||
Recherche avancée
|
||||
</a>
|
||||
|
||||
<hr />
|
||||
|
||||
<h3>Sélection de la semaine</h3>
|
||||
<ul>
|
||||
<li><a href="#"><img src="/sfiles/images/fruit_ninja.gif">Fruit Ninja</a></li>
|
||||
<li><a href="#"><img src="/sfiles/images/clonelab.gif">Clonelab</a></li>
|
||||
<li><a href="#"><img src="/sfiles/images/gravity_duck.png">Gravity Duck</a></li>
|
||||
<li><a href="#"><img src="/sfiles/images/calcraft.gif">Calcraft</a></li>
|
||||
</ul>
|
||||
|
||||
<hr />
|
||||
<h3>Coup de cœur</h3>
|
||||
<ul>
|
||||
<li><a href="#"><img src="/sfiles/images/fruit_ninja.gif">Fruit Ninja</a></li>
|
||||
<li><a href="#"><img src="/sfiles/images/clonelab.gif">Clonelab</a></li>
|
||||
<li><a href="#"><img src="/sfiles/images/gravity_duck.png">Gravity Duck</a></li>
|
||||
<li><a href="#"><img src="/sfiles/images/calcraft.gif">Calcraft</a></li>
|
||||
</ul>
|
||||
</div>
|
||||
|
||||
<div>
|
||||
<h2>
|
||||
<svg viewBox="0 0 24 24">
|
||||
<path fill="#ffffff" d="M12,3L1,9L12,15L21,10.09V17H23V9M5,13.18V17.18L12,21L19,17.18V13.18L12,17L5,13.18Z"></path>
|
||||
</svg>
|
||||
Tutoriels
|
||||
</h2>
|
||||
<a href="#">Basic Casio</a>
|
||||
<a href="#">C/C++ Casio</a>
|
||||
<a href="#">Arduino</a>
|
||||
<hr>
|
||||
<a href="#">Foire aux questions (FAQ)</a>
|
||||
</div>
|
||||
|
||||
<div>
|
||||
<h2>
|
||||
<svg viewBox="0 0 24 24">
|
||||
<path fill="#ffffff" d="M20.71,4.63L19.37,3.29C19,2.9 18.35,2.9 17.96,3.29L9,12.25L11.75,15L20.71,6.04C21.1,5.65 21.1,5 20.71,4.63M7,14A3,3 0 0,0 4,17C4,18.31 2.84,19 2,19C2.92,20.22 4.5,21 6,21A4,4 0 0,0 10,17A3,3 0 0,0 7,14Z"></path>
|
||||
</svg>
|
||||
Sprites
|
||||
</h2>
|
||||
<a href="#">Personnages</a>
|
||||
<a href="#">Environnement</a>
|
||||
<a href="#">Objets</a>
|
||||
<a href="#">Interfaces</a>
|
||||
<a href="#">Générateur</a>
|
||||
</div>
|
||||
|
||||
<div>
|
||||
<h2>
|
||||
<svg viewBox="0 0 24 24">
|
||||
<path fill="#ffffff" d="M22.7,19L13.6,9.9C14.5,7.6 14,4.9 12.1,3C10.1,1 7.1,0.6 4.7,1.7L9,6L6,9L1.6,4.7C0.4,7.1 0.9,10.1 2.9,12.1C4.8,14 7.5,14.5 9.8,13.6L18.9,22.7C19.3,23.1 19.9,23.1 20.3,22.7L22.6,20.4C23.1,20 23.1,19.3 22.7,19Z"></path>
|
||||
</svg>
|
||||
Outils
|
||||
</h2>
|
||||
|
||||
<a href="#">
|
||||
<svg viewBox="0 0 24 24">
|
||||
<path fill="#ffffff" d="M2.6,10.59L8.38,4.8L10.07,6.5C9.83,7.35 10.22,8.28 11,8.73V14.27C10.4,14.61 10,15.26 10,16A2,2 0 0,0 12,18A2,2 0 0,0 14,16C14,15.26 13.6,14.61 13,14.27V9.41L15.07,11.5C15,11.65 15,11.82 15,12A2,2 0 0,0 17,14A2,2 0 0,0 19,12A2,2 0 0,0 17,10C16.82,10 16.65,10 16.5,10.07L13.93,7.5C14.19,6.57 13.71,5.55 12.78,5.16C12.35,5 11.9,4.96 11.5,5.07L9.8,3.38L10.59,2.6C11.37,1.81 12.63,1.81 13.41,2.6L21.4,10.59C22.19,11.37 22.19,12.63 21.4,13.41L13.41,21.4C12.63,22.19 11.37,22.19 10.59,21.4L2.6,13.41C1.81,12.63 1.81,11.37 2.6,10.59Z"></path>
|
||||
</svg>
|
||||
Forge GitLab
|
||||
</a>
|
||||
<a href="#">
|
||||
<svg viewBox="0 0 24 24">
|
||||
<path fill="#ffffff" d="M14.97,18.95L12.41,12.92C11.39,14.91 10.27,17 9.31,18.95C9.3,18.96 8.84,18.95 8.84,18.95C7.37,15.5 5.85,12.1 4.37,8.68C4.03,7.84 2.83,6.5 2,6.5C2,6.4 2,6.18 2,6.05H7.06V6.5C6.46,6.5 5.44,6.9 5.7,7.55C6.42,9.09 8.94,15.06 9.63,16.58C10.1,15.64 11.43,13.16 12,12.11C11.55,11.23 10.13,7.93 9.71,7.11C9.39,6.57 8.58,6.5 7.96,6.5C7.96,6.35 7.97,6.25 7.96,6.06L12.42,6.07V6.47C11.81,6.5 11.24,6.71 11.5,7.29C12.1,8.53 12.45,9.42 13,10.57C13.17,10.23 14.07,8.38 14.5,7.41C14.76,6.76 14.37,6.5 13.29,6.5C13.3,6.38 13.3,6.17 13.3,6.07C14.69,6.06 16.78,6.06 17.15,6.05V6.47C16.44,6.5 15.71,6.88 15.33,7.46L13.5,11.3C13.68,11.81 15.46,15.76 15.65,16.2L19.5,7.37C19.2,6.65 18.34,6.5 18,6.5C18,6.37 18,6.2 18,6.05L22,6.08V6.1L22,6.5C21.12,6.5 20.57,7 20.25,7.75C19.45,9.54 17,15.24 15.4,18.95C15.4,18.95 14.97,18.95 14.97,18.95Z"></path>
|
||||
</svg>
|
||||
Casio Universal Wiki
|
||||
</a>
|
||||
<a href="#">
|
||||
<svg viewBox="0 0 24 24">
|
||||
<path fill="#ffffff" d="M19,8L15,12H18A6,6 0 0,1 12,18C11,18 10.03,17.75 9.2,17.3L7.74,18.76C8.97,19.54 10.43,20 12,20A8,8 0 0,0 20,12H23M6,12A6,6 0 0,1 12,6C13,6 13.97,6.25 14.8,6.7L16.26,5.24C15.03,4.46 13.57,4 12,4A8,8 0 0,0 4,12H1L5,16L9,12"></path>
|
||||
</svg>
|
||||
SH4 Compatibility Tool
|
||||
</a>
|
||||
</div>
|
||||
</div>
|
||||
</nav>
|
||||
|
||||
<div id="container">
|
||||
<header>
|
||||
<form>
|
||||
<input type="search" placeholder="Recherche" />
|
||||
<a role="button" onclick="this.parentNode.submit();" href="#" class="light-hidden">
|
||||
<svg viewBox="0 0 24 24">
|
||||
<path fill="#adb0b4"d="M9.5,3A6.5,6.5 0 0,1 16,9.5C16,11.11 15.41,12.59 14.44,13.73L14.71,14H15.5L20.5,19L19,20.5L14,15.5V14.71L13.73,14.44C12.59,15.41 11.11,16 9.5,16A6.5,6.5 0 0,1 3,9.5A6.5,6.5 0 0,1 9.5,3M9.5,5C7,5 5,7 5,9.5C5,12 7,14 9.5,14C12,14 14,12 14,9.5C14,7 12,5 9.5,5Z"></path>
|
||||
</svg>
|
||||
</a>
|
||||
</form>
|
||||
|
||||
<div id="spotlight">
|
||||
<a href="#">Concours</a>
|
||||
<a href="#">Jeu du mois</a>
|
||||
</div>
|
||||
</header>
|
||||
|
||||
|
||||
|
||||
<form method="post" action="/contact" class="with-ajax">
|
||||
<tr><th><label for="id_email">E-mail :</label></th><td><input id="id_email" name="email" type="email" required /></td></tr>
|
||||
<tr><th><label for="id_title">Objet :</label></th><td><input id="id_title" maxlength="255" minlength="3" name="title" type="text" required /></td></tr>
|
||||
<tr><th><label for="id_message">Message :</label></th><td><input id="id_message" maxlength="10000" minlength="3" name="message" type="text" required /></td></tr>
|
||||
<input type='hidden' name='csrfmiddlewaretoken' value='0V7fuD52dM89FkLsYLaAZusaAbx59DMpj8HlXJgr6tCgqH6dM4xeaOqBKUvsEQQA' />
|
||||
<input type="submit" callback="contact" value="Envoyer"/>
|
||||
</form>
|
||||
|
||||
|
||||
|
||||
</div>
|
||||
|
||||
<!-- <div class="alert ok" style="top: 25px;" onclick="close_important(this)">
|
||||
<svg style='width:24px;height:24px' viewBox='0 0 24 24'>
|
||||
<path fill="#727272" d="M12,2A10,10 0 0,1 22,12A10,10 0 0,1 12,22A10,10 0 0,1 2,12A10,10 0 0,1 12,2M12,4A8,8 0 0,0 4,12A8,8 0 0,0 12,20A8,8 0 0,0 20,12A8,8 0 0,0 12,4M11,16.5L6.5,12L7.91,10.59L11,13.67L16.59,8.09L18,9.5L11,16.5Z"></path>
|
||||
</svg>
|
||||
<span>
|
||||
Votre message a bien été posté.
|
||||
</span>
|
||||
<input type="button" class="flat" value="MASQUER" onclick="setCookie('pc_notif', 'true');"></input>
|
||||
</div>
|
||||
<div class="alert error" style="top: 95px;" onclick="close_important(this)">
|
||||
<svg style='width:24px;height:24px' viewBox='0 0 24 24'>
|
||||
<path fill="#727272" d="M12,2L1,21H23M12,6L19.53,19H4.47M11,10V14H13V10M11,16V18H13V16"></path>
|
||||
</svg>
|
||||
<span>
|
||||
Holy shit! Ceci est un grave problème ! Il faut s'en occuper dès que possible.
|
||||
</span>
|
||||
<input type="button" class="flat" value="MASQUER" onclick="setCookie('pc_notif_2', 'true');"></input>
|
||||
</div> -->
|
||||
</body>
|
||||
|
||||
|
||||
|
||||
<script type="text/javascript" src="/sfiles/scripts/trigger_menu.js"></script>
|
||||
<script type="text/javascript" src="/sfiles/scripts/smartphone_patch.js"></script>
|
||||
<script type="text/javascript" src="/sfiles/scripts/pc-utils.js"></script>
|
||||
|
||||
<script type="text/javascript" src="/sfiles/scripts/contact.js">
|
||||
|
||||
|
||||
</html>
|
Loading…
Reference in New Issue