Alexandru Gheorghita преди 7 години
ревизия
a7857aae9e
променени са 59 файла, в които са добавени 2271 реда и са изтрити 0 реда
  1. 143 0
      .gitignore
  2. 21 0
      Dockerfile
  3. 0 0
      home/__init__.py
  4. 22 0
      home/migrations/0001_initial.py
  5. 58 0
      home/migrations/0002_create_homepage.py
  6. 19 0
      home/migrations/0003_homepage_body.py
  7. 27 0
      home/migrations/0004_projectpage.py
  8. 43 0
      home/migrations/0005_auto_20180508_1154.py
  9. 24 0
      home/migrations/0006_auto_20180508_1211.py
  10. 0 0
      home/migrations/__init__.py
  11. 35 0
      home/models.py
  12. 151 0
      home/templates/home/home_page.html
  13. 16 0
      home/templates/home/menus/custom_main_menu.html
  14. 7 0
      home/templates/home/menus/custom_sub_menu.html
  15. 48 0
      home/templates/home/project_page.html
  16. 1 0
      home/templates/home/projects.html
  17. 10 0
      manage.py
  18. 21 0
      requirements.txt
  19. 0 0
      search/__init__.py
  20. 38 0
      search/templates/search/search.html
  21. 34 0
      search/views.py
  22. 0 0
      website/__init__.py
  23. 0 0
      website/settings/__init__.py
  24. 161 0
      website/settings/base.py
  25. 16 0
      website/settings/dev.py
  26. 8 0
      website/settings/production.py
  27. 4 0
      website/static/css/fontawesome-4.5.0.min.css
  28. BIN
      website/static/css/fonts/FontAwesome.otf
  29. BIN
      website/static/css/fonts/fontawesome-webfont.eot
  30. 655 0
      website/static/css/fonts/fontawesome-webfont.svg
  31. BIN
      website/static/css/fonts/fontawesome-webfont.ttf
  32. BIN
      website/static/css/fonts/fontawesome-webfont.woff
  33. BIN
      website/static/css/fonts/fontawesome-webfont.woff2
  34. 0 0
      website/static/css/fonts/index.html
  35. 118 0
      website/static/css/framework.css
  36. 428 0
      website/static/css/layout.css
  37. 0 0
      website/static/css/website.css
  38. BIN
      website/static/images/demo/320x240.png
  39. BIN
      website/static/images/demo/60x60.png
  40. BIN
      website/static/images/demo/avatar.png
  41. BIN
      website/static/images/demo/backgrounds/01.png
  42. BIN
      website/static/images/demo/backgrounds/02.png
  43. BIN
      website/static/images/demo/backgrounds/03.jpg
  44. BIN
      website/static/images/demo/backgrounds/04.jpg
  45. 0 0
      website/static/images/demo/backgrounds/index.html
  46. BIN
      website/static/images/demo/gallery/01.png
  47. 0 0
      website/static/images/demo/gallery/index.html
  48. BIN
      website/static/images/demo/imgl.gif
  49. BIN
      website/static/images/demo/imgr.gif
  50. 0 0
      website/static/images/demo/index.html
  51. 21 0
      website/static/js/jquery.backtotop.js
  52. 4 0
      website/static/js/jquery.min.js
  53. 14 0
      website/static/js/jquery.mobilemenu.js
  54. 0 0
      website/static/js/website.js
  55. 9 0
      website/templates/404.html
  56. 17 0
      website/templates/500.html
  57. 46 0
      website/templates/base.html
  58. 36 0
      website/urls.py
  59. 16 0
      website/wsgi.py

+ 143 - 0
.gitignore

@@ -0,0 +1,143 @@
+
+# Created by https://www.gitignore.io/api/macos,python,django
+
+### Django ###
+*.log
+*.pot
+*.pyc
+__pycache__/
+local_settings.py
+db.sqlite3
+media
+
+# If your build process includes running collectstatic, then you probably don't need or want to include staticfiles/
+# in your Git repository. Update and uncomment the following line accordingly.
+# <django-project-name>/staticfiles/
+
+### macOS ###
+*.DS_Store
+.AppleDouble
+.LSOverride
+
+# Icon must end with two \r
+Icon
+
+# Thumbnails
+._*
+
+# Files that might appear in the root of a volume
+.DocumentRevisions-V100
+.fseventsd
+.Spotlight-V100
+.TemporaryItems
+.Trashes
+.VolumeIcon.icns
+.com.apple.timemachine.donotpresent
+
+# Directories potentially created on remote AFP share
+.AppleDB
+.AppleDesktop
+Network Trash Folder
+Temporary Items
+.apdisk
+
+### Python ###
+# Byte-compiled / optimized / DLL files
+*.py[cod]
+*$py.class
+
+# C extensions
+*.so
+
+# Distribution / packaging
+.Python
+build/
+develop-eggs/
+dist/
+downloads/
+eggs/
+.eggs/
+lib/
+lib64/
+parts/
+sdist/
+var/
+wheels/
+*.egg-info/
+.installed.cfg
+*.egg
+
+# PyInstaller
+#  Usually these files are written by a python script from a template
+#  before PyInstaller builds the exe, so as to inject date/other infos into it.
+*.manifest
+*.spec
+
+# Installer logs
+pip-log.txt
+pip-delete-this-directory.txt
+
+# Unit test / coverage reports
+htmlcov/
+.tox/
+.coverage
+.coverage.*
+.cache
+.pytest_cache/
+nosetests.xml
+coverage.xml
+*.cover
+.hypothesis/
+
+# Translations
+*.mo
+
+# Flask stuff:
+instance/
+.webassets-cache
+
+# Scrapy stuff:
+.scrapy
+
+# Sphinx documentation
+docs/_build/
+
+# PyBuilder
+target/
+
+# Jupyter Notebook
+.ipynb_checkpoints
+
+# pyenv
+.python-version
+
+# celery beat schedule file
+celerybeat-schedule.*
+
+# SageMath parsed files
+*.sage.py
+
+# Environments
+.env
+.venv
+env/
+venv/
+ENV/
+env.bak/
+venv.bak/
+
+# Spyder project settings
+.spyderproject
+.spyproject
+
+# Rope project settings
+.ropeproject
+
+# mkdocs documentation
+/site
+
+# mypy
+.mypy_cache/
+
+
+# End of https://www.gitignore.io/api/macos,python,django

+ 21 - 0
Dockerfile

@@ -0,0 +1,21 @@
+FROM python:3.6
+LABEL maintainer="hello@wagtail.io"
+
+ENV PYTHONUNBUFFERED 1
+ENV DJANGO_ENV dev
+
+COPY ./requirements.txt /code/requirements.txt
+RUN pip install -r /code/requirements.txt
+RUN pip install gunicorn
+
+COPY . /code/
+WORKDIR /code/
+
+RUN python manage.py migrate
+
+RUN useradd wagtail
+RUN chown -R wagtail /code
+USER wagtail
+
+EXPOSE 8000
+CMD exec gunicorn website.wsgi:application --bind 0.0.0.0:8000 --workers 3

+ 0 - 0
home/__init__.py


+ 22 - 0
home/migrations/0001_initial.py

@@ -0,0 +1,22 @@
+# -*- coding: utf-8 -*-
+from django.db import migrations, models
+
+
+class Migration(migrations.Migration):
+
+    dependencies = [
+        ('wagtailcore', '0040_page_draft_title'),
+    ]
+
+    operations = [
+        migrations.CreateModel(
+            name='HomePage',
+            fields=[
+                ('page_ptr', models.OneToOneField(on_delete=models.CASCADE, parent_link=True, auto_created=True, primary_key=True, serialize=False, to='wagtailcore.Page')),
+            ],
+            options={
+                'abstract': False,
+            },
+            bases=('wagtailcore.page',),
+        ),
+    ]

+ 58 - 0
home/migrations/0002_create_homepage.py

@@ -0,0 +1,58 @@
+# -*- coding: utf-8 -*-
+from django.db import migrations
+
+
+def create_homepage(apps, schema_editor):
+    # Get models
+    ContentType = apps.get_model('contenttypes.ContentType')
+    Page = apps.get_model('wagtailcore.Page')
+    Site = apps.get_model('wagtailcore.Site')
+    HomePage = apps.get_model('home.HomePage')
+
+    # Delete the default homepage
+    # If migration is run multiple times, it may have already been deleted
+    Page.objects.filter(id=2).delete()
+
+    # Create content type for homepage model
+    homepage_content_type, __ = ContentType.objects.get_or_create(
+        model='homepage', app_label='home')
+
+    # Create a new homepage
+    homepage = HomePage.objects.create(
+        title="Home",
+        draft_title="Home",
+        slug='home',
+        content_type=homepage_content_type,
+        path='00010001',
+        depth=2,
+        numchild=0,
+        url_path='/home/',
+    )
+
+    # Create a site with the new homepage set as the root
+    Site.objects.create(
+        hostname='localhost', root_page=homepage, is_default_site=True)
+
+
+def remove_homepage(apps, schema_editor):
+    # Get models
+    ContentType = apps.get_model('contenttypes.ContentType')
+    HomePage = apps.get_model('home.HomePage')
+
+    # Delete the default homepage
+    # Page and Site objects CASCADE
+    HomePage.objects.filter(slug='home', depth=2).delete()
+
+    # Delete content type for homepage model
+    ContentType.objects.filter(model='homepage', app_label='home').delete()
+
+
+class Migration(migrations.Migration):
+
+    dependencies = [
+        ('home', '0001_initial'),
+    ]
+
+    operations = [
+        migrations.RunPython(create_homepage, remove_homepage),
+    ]

+ 19 - 0
home/migrations/0003_homepage_body.py

@@ -0,0 +1,19 @@
+# Generated by Django 2.0.5 on 2018-05-07 10:57
+
+from django.db import migrations
+import wagtail.core.fields
+
+
+class Migration(migrations.Migration):
+
+    dependencies = [
+        ('home', '0002_create_homepage'),
+    ]
+
+    operations = [
+        migrations.AddField(
+            model_name='homepage',
+            name='body',
+            field=wagtail.core.fields.RichTextField(blank=True),
+        ),
+    ]

+ 27 - 0
home/migrations/0004_projectpage.py

@@ -0,0 +1,27 @@
+# Generated by Django 2.0.5 on 2018-05-07 11:55
+
+from django.db import migrations, models
+import django.db.models.deletion
+import wagtail.core.fields
+
+
+class Migration(migrations.Migration):
+
+    dependencies = [
+        ('wagtailcore', '0040_page_draft_title'),
+        ('home', '0003_homepage_body'),
+    ]
+
+    operations = [
+        migrations.CreateModel(
+            name='ProjectPage',
+            fields=[
+                ('page_ptr', models.OneToOneField(auto_created=True, on_delete=django.db.models.deletion.CASCADE, parent_link=True, primary_key=True, serialize=False, to='wagtailcore.Page')),
+                ('body', wagtail.core.fields.RichTextField(blank=True)),
+            ],
+            options={
+                'abstract': False,
+            },
+            bases=('wagtailcore.page',),
+        ),
+    ]

+ 43 - 0
home/migrations/0005_auto_20180508_1154.py

@@ -0,0 +1,43 @@
+# Generated by Django 2.0.5 on 2018-05-08 11:54
+
+from django.db import migrations, models
+
+
+class Migration(migrations.Migration):
+
+    dependencies = [
+        ('home', '0004_projectpage'),
+    ]
+
+    operations = [
+        migrations.AddField(
+            model_name='projectpage',
+            name='author',
+            field=models.TextField(blank=True),
+        ),
+        migrations.AddField(
+            model_name='projectpage',
+            name='budget',
+            field=models.TextField(blank=True),
+        ),
+        migrations.AddField(
+            model_name='projectpage',
+            name='estimations',
+            field=models.TextField(blank=True),
+        ),
+        migrations.AddField(
+            model_name='projectpage',
+            name='keywords',
+            field=models.TextField(blank=True),
+        ),
+        migrations.AddField(
+            model_name='projectpage',
+            name='objectives',
+            field=models.TextField(blank=True),
+        ),
+        migrations.AddField(
+            model_name='projectpage',
+            name='period',
+            field=models.TextField(blank=True),
+        ),
+    ]

+ 24 - 0
home/migrations/0006_auto_20180508_1211.py

@@ -0,0 +1,24 @@
+# Generated by Django 2.0.5 on 2018-05-08 12:11
+
+from django.db import migrations
+import wagtail.core.fields
+
+
+class Migration(migrations.Migration):
+
+    dependencies = [
+        ('home', '0005_auto_20180508_1154'),
+    ]
+
+    operations = [
+        migrations.AlterField(
+            model_name='projectpage',
+            name='estimations',
+            field=wagtail.core.fields.RichTextField(blank=True),
+        ),
+        migrations.AlterField(
+            model_name='projectpage',
+            name='objectives',
+            field=wagtail.core.fields.RichTextField(blank=True),
+        ),
+    ]

+ 0 - 0
home/migrations/__init__.py


+ 35 - 0
home/models.py

@@ -0,0 +1,35 @@
+from django.db import models
+
+from wagtail.core.models import Page
+from wagtail.core.fields import RichTextField, StreamField
+from wagtail.admin.edit_handlers import FieldPanel, MultiFieldPanel
+
+
+class HomePage(Page):
+    body = RichTextField(blank=True)
+
+    content_panels = Page.content_panels + [
+        FieldPanel('body', classname="full")
+    ]
+
+
+class ProjectPage(Page):
+    author = models.TextField(blank=True)
+    keywords = models.TextField(blank=True)
+    objectives = RichTextField(blank=True)
+    estimations = RichTextField(blank=True)
+    period = models.TextField(blank=True)
+    budget = models.TextField(blank=True)
+    body = RichTextField(blank=True)
+
+    content_panels = Page.content_panels + [
+        MultiFieldPanel([
+            FieldPanel('author'),
+            FieldPanel('keywords'),
+            FieldPanel('objectives'),
+            FieldPanel('estimations'),
+            FieldPanel('period'),
+            FieldPanel('budget')], 'Meta data'
+        ),
+        FieldPanel('body', classname="full")
+    ]

+ 151 - 0
home/templates/home/home_page.html

@@ -0,0 +1,151 @@
+{% extends "base.html" %}
+
+{% load wagtailcore_tags %}
+{% load menu_tags %}
+
+{% block body_class %}template-homepage{% endblock %}
+
+{% block content %}
+<!-- Top Background Image Wrapper -->
+<div class="bgded overlay" style="background-image:url('static/images/demo/backgrounds/03.jpg');">
+  <div class="wrapper row1">
+    <header id="header" class="hoc clear">
+      <div id="logo" class="fl_left">
+        <h1><a href="/">RESINFO-TD</a></h1>
+      </div>
+      {% main_menu template="home/menus/custom_main_menu.html" %}
+    </header>
+  </div>
+  <div id="pageintro" class="hoc clear">
+    <article>
+      <h2 class="heading">RESINFO-TD</h2>
+      <p>Resurse informatice avansate pentru sustinerea proceselor de transformare digitala din economie si societate</p>
+    </article>
+  </div>
+</div>
+
+<div class="wrapper row3">
+  <main class="hoc container clear">
+    <!-- main body -->
+    <div class="center btmspace-50">
+      <h3 class="font-x2 nospace">Obiectivele proiectului</h3>
+      <p class="nospace">Leo dui a tincidunt euismod tellus vivamus facilisis lectus cursus <a href="#">laoreet auctor</a>.</p>
+    </div>
+    <ul class="nospace group services">
+      <li class="one_third first">
+        <article><a href="#"><i class="fa fa-paperclip"></i></a>
+          <h6 class="heading">Duis dapibus lacus</h6>
+          <p>Eu sem dignissim sed placerat ex rutrum phasellus at rhoncus quam mauris sit amet libero&hellip;</p>
+          <footer><a href="#">View Details &raquo;</a></footer>
+        </article>
+      </li>
+      <li class="one_third">
+        <article><a href="#"><i class="fa fa-calculator"></i></a>
+          <h6 class="heading">Ullamcorper ornare</h6>
+          <p>Rhoncus nullam at varius augue nam fringilla nunc ac orci ornare posuere suspendisse dictum lacus&hellip;</p>
+          <footer><a href="#">View Details &raquo;</a></footer>
+        </article>
+      </li>
+      <li class="one_third">
+        <article><a href="#"><i class="fa fa-pie-chart"></i></a>
+          <h6 class="heading">Posuere fusce sit</h6>
+          <p>Amet odio sit amet augue pharetra pulvinar at quis justo in lacinia pretium posuere nunc&hellip;</p>
+          <footer><a href="#">View Details &raquo;</a></footer>
+        </article>
+      </li>
+      <li class="one_third first">
+        <article><a href="#"><i class="fa fa-recycle"></i></a>
+          <h6 class="heading">Tempus vel risus</h6>
+          <p>Mollis lobortis sapien nullam elementum dignissim eleifend nunc lobortis aliquet curabitur&hellip;</p>
+          <footer><a href="#">View Details &raquo;</a></footer>
+        </article>
+      </li>
+      <li class="one_third">
+        <article><a href="#"><i class="fa fa-code-fork"></i></a>
+          <h6 class="heading">Nec ultrices ipsum</h6>
+          <p>Maximus ut in semper nibh at mattis condimentum odio dui neque sit amet vulputate arcu vitae nibh&hellip;</p>
+          <footer><a href="#">View Details &raquo;</a></footer>
+        </article>
+      </li>
+      <li class="one_third">
+        <article><a href="#"><i class="fa fa-cogs"></i></a>
+          <h6 class="heading">Fringilla viverra</h6>
+          <p>Rutrum in gravida efficitur diam vel porta odio cursus eu aliquam amet nunc interdum malesuada&hellip;</p>
+          <footer><a href="#">View Details &raquo;</a></footer>
+        </article>
+      </li>
+    </ul>
+    <!-- / main body -->
+    <div class="clear"></div>
+  </main>
+</div>
+<div class="wrapper row4">
+  <main class="hoc container clear">
+    <!-- main body -->
+    <div class="center btmspace-50">
+      <h3 class="font-x2 nospace">Echipa proiectului</h3>
+      <p class="nospace">Leo dui a tincidunt euismod tellus vivamus facilisis lectus cursus <a href="#">laoreet auctor</a>.</p>
+    </div>
+    <ul class="nospace group services">
+      <li class="one_quarter first">
+        <article>
+          <i class="fa fa-user"></i>
+          <h6 class="heading">Radu M. Boncea</h6>
+          <p>Mollis lobortis sapien nullam elementum dignissim eleifend nunc lobortis aliquet curabitur&hellip;</p>
+        </article>
+      </li>
+      <li class="one_quarter">
+        <article>
+          <i class="fa fa-user"></i>
+          <h6 class="heading">Alexandru C. Gheorghita</h6>
+          <p>Mollis lobortis sapien nullam elementum dignissim eleifend nunc lobortis aliquet curabitur&hellip;</p>
+        </article>
+      </li>
+      <li class="one_quarter">
+        <article>
+          <i class="fa fa-user"></i>
+          <h6 class="heading">Ionut Petre</h6>
+          <p>Mollis lobortis sapien nullam elementum dignissim eleifend nunc lobortis aliquet curabitur&hellip;</p>
+        </article>
+      </li>
+      <li class="one_quarter">
+        <article>
+          <i class="fa fa-user"></i>
+          <h6 class="heading">Dragos Smada</h6>
+          <p>Mollis lobortis sapien nullam elementum dignissim eleifend nunc lobortis aliquet curabitur&hellip;</p>
+        </article>
+      </li>
+      <li class="one_quarter first">
+        <article>
+          <i class="fa fa-user"></i>
+          <h6 class="heading">Carmen Rotuna</h6>
+          <p>Mollis lobortis sapien nullam elementum dignissim eleifend nunc lobortis aliquet curabitur&hellip;</p>
+        </article>
+      </li>
+      <li class="one_quarter">
+        <article>
+          <i class="fa fa-user"></i>
+          <h6 class="heading">Antonio Banderas</h6>
+          <p>Mollis lobortis sapien nullam elementum dignissim eleifend nunc lobortis aliquet curabitur&hellip;</p>
+        </article>
+      </li>
+      <li class="one_quarter">
+        <article>
+          <i class="fa fa-user"></i>
+          <h6 class="heading">Tempus vel risus</h6>
+          <p>Mollis lobortis sapien nullam elementum dignissim eleifend nunc lobortis aliquet curabitur&hellip;</p>
+        </article>
+      </li>
+      <li class="one_quarter">
+        <article>
+          <i class="fa fa-user"></i>
+          <h6 class="heading">Tempus vel risus</h6>
+          <p>Mollis lobortis sapien nullam elementum dignissim eleifend nunc lobortis aliquet curabitur&hellip;</p>
+        </article>
+      </li>
+    </ul>
+    <!-- / main body -->
+    <div class="clear"></div>
+  </main>
+</div>
+{% endblock %}

+ 16 - 0
home/templates/home/menus/custom_main_menu.html

@@ -0,0 +1,16 @@
+{% load menu_tags %}
+
+<nav id="mainav" class="fl_right">
+  <ul class="clear">
+    {% for item in menu_items %}
+      {% if not item.has_children_in_menu %}
+        <li class="{{item.active_class}}"><a href="{{item.href}}">{{item}}</a></li>
+      {% else %}
+        <li>
+          <a class="drop" href="#">{{item}}</a>
+          {% sub_menu item template="home/menus/custom_sub_menu.html" %}
+        </li>
+      {% endif %}
+    {% endfor %}
+  </ul>
+</nav>

+ 7 - 0
home/templates/home/menus/custom_sub_menu.html

@@ -0,0 +1,7 @@
+{% load menu_tags %}
+
+<ul>
+    {% for item in menu_items %}
+    <li><a href="{{item.href}}">{{item}}</a></li>
+    {% endfor %}
+</ul>

+ 48 - 0
home/templates/home/project_page.html

@@ -0,0 +1,48 @@
+{% extends "base.html" %}
+
+{% load wagtailcore_tags %}
+{% load menu_tags %}
+
+{% block body_class %}template-homepage{% endblock %}
+
+{% block content %}
+<!-- Top Background Image Wrapper -->
+<div class="bgded overlay">
+  <div class="wrapper row1">
+    <header id="header" class="hoc clear">
+      <div id="logo" class="fl_left">
+        <h1><a href="/">RESINFO-TD</a></h1>
+      </div>
+      {% main_menu template="home/menus/custom_main_menu.html" %}
+    </header>
+  </div>
+</div>
+<div class="wrapper row2">
+    <div id="breadcrumb" class="hoc clear">
+      <!-- ################################################################################################ -->
+      <ul>
+        <li><a href="#">Home</a></li>
+        <li><a href="#">{{ page.get_parent }}</a></li>
+        <li><a href="#">{{ page.title }}</a></li>
+      </ul>
+      <!-- ################################################################################################ -->
+    </div>
+  </div>
+  <!-- ################################################################################################ -->
+</div>
+
+<div class="wrapper row3">
+    <main class="hoc container clear">
+        <div class="content">
+            <h1><b>{{ page.title }} - {{ page.author }}</b></h1>
+            <dd><b>Cuvinte cheie:</b> {{ page.keywords }}</dd>
+            <dd><b>Perioada:</b> {{ page.period }}</dd>
+            <dd><b>Buget:</b> {{ page.budget }}</dd>
+            <p><b>Obiective</b><br>{{ page.objectives|richtext }}</p>
+            <p><b>Rezultate estimate</b><br>{{ page.estimations|richtext }}</p>
+            <p><b>Descriere</b><br>{{ page.body|richtext }}</p>
+        </div>
+    </main>
+</div>
+
+{% endblock content %}

+ 1 - 0
home/templates/home/projects.html

@@ -0,0 +1 @@
+<h1>Projects</h1>

+ 10 - 0
manage.py

@@ -0,0 +1,10 @@
+#!/usr/bin/env python
+import os
+import sys
+
+if __name__ == "__main__":
+    os.environ.setdefault("DJANGO_SETTINGS_MODULE", "website.settings.dev")
+
+    from django.core.management import execute_from_command_line
+
+    execute_from_command_line(sys.argv)

+ 21 - 0
requirements.txt

@@ -0,0 +1,21 @@
+beautifulsoup4==4.6.0
+certifi==2018.4.16
+chardet==3.0.4
+Django==2.0.5
+django-modelcluster==4.1
+django-taggit==0.22.2
+django-treebeard==4.3
+djangorestframework==3.8.2
+draftjs-exporter==2.0.0
+html5lib==0.999999999
+idna==2.6
+Pillow==5.1.0
+pytz==2018.4
+requests==2.18.4
+six==1.11.0
+Unidecode==0.4.21
+urllib3==1.22
+wagtail==2.0.1
+wagtailmenus==2.9
+webencodings==0.5.1
+Willow==1.1

+ 0 - 0
search/__init__.py


+ 38 - 0
search/templates/search/search.html

@@ -0,0 +1,38 @@
+{% extends "base.html" %}
+{% load static wagtailcore_tags %}
+
+{% block body_class %}template-searchresults{% endblock %}
+
+{% block title %}Search{% endblock %}
+
+{% block content %}
+    <h1>Search</h1>
+
+    <form action="{% url 'search' %}" method="get">
+        <input type="text" name="query"{% if search_query %} value="{{ search_query }}"{% endif %}>
+        <input type="submit" value="Search" class="button">
+    </form>
+
+    {% if search_results %}
+        <ul>
+            {% for result in search_results %}
+                <li>
+                    <h4><a href="{% pageurl result %}">{{ result }}</a></h4>
+                    {% if result.search_description %}
+                        {{ result.search_description }}
+                    {% endif %}
+                </li>
+            {% endfor %}
+        </ul>
+
+        {% if search_results.has_previous %}
+            <a href="{% url 'search' %}?query={{ search_query|urlencode }}&amp;page={{ search_results.previous_page_number }}">Previous</a>
+        {% endif %}
+
+        {% if search_results.has_next %}
+            <a href="{% url 'search' %}?query={{ search_query|urlencode }}&amp;page={{ search_results.next_page_number }}">Next</a>
+        {% endif %}
+    {% elif search_query %}
+        No results found
+    {% endif %}
+{% endblock %}

+ 34 - 0
search/views.py

@@ -0,0 +1,34 @@
+from django.core.paginator import EmptyPage, PageNotAnInteger, Paginator
+from django.shortcuts import render
+
+from wagtail.core.models import Page
+from wagtail.search.models import Query
+
+
+def search(request):
+    search_query = request.GET.get('query', None)
+    page = request.GET.get('page', 1)
+
+    # Search
+    if search_query:
+        search_results = Page.objects.live().search(search_query)
+        query = Query.get(search_query)
+
+        # Record hit
+        query.add_hit()
+    else:
+        search_results = Page.objects.none()
+
+    # Pagination
+    paginator = Paginator(search_results, 10)
+    try:
+        search_results = paginator.page(page)
+    except PageNotAnInteger:
+        search_results = paginator.page(1)
+    except EmptyPage:
+        search_results = paginator.page(paginator.num_pages)
+
+    return render(request, 'search/search.html', {
+        'search_query': search_query,
+        'search_results': search_results,
+    })

+ 0 - 0
website/__init__.py


+ 0 - 0
website/settings/__init__.py


+ 161 - 0
website/settings/base.py

@@ -0,0 +1,161 @@
+"""
+Django settings for website project.
+
+Generated by 'django-admin startproject' using Django 2.0.5.
+
+For more information on this file, see
+https://docs.djangoproject.com/en/2.0/topics/settings/
+
+For the full list of settings and their values, see
+https://docs.djangoproject.com/en/2.0/ref/settings/
+"""
+
+# Build paths inside the project like this: os.path.join(BASE_DIR, ...)
+import os
+
+PROJECT_DIR = os.path.dirname(os.path.dirname(os.path.abspath(__file__)))
+BASE_DIR = os.path.dirname(PROJECT_DIR)
+
+
+# Quick-start development settings - unsuitable for production
+# See https://docs.djangoproject.com/en/2.0/howto/deployment/checklist/
+
+
+# Application definition
+
+INSTALLED_APPS = [
+    'home',
+    'search',
+
+    'wagtail.contrib.forms',
+    'wagtail.contrib.redirects',
+    'wagtail.embeds',
+    'wagtail.sites',
+    'wagtail.users',
+    'wagtail.snippets',
+    'wagtail.documents',
+    'wagtail.images',
+    'wagtail.search',
+    'wagtail.admin',
+    'wagtail.core',
+    'wagtail.contrib.modeladmin',
+    'wagtailmenus',
+
+    'modelcluster',
+    'taggit',
+
+    'django.contrib.admin',
+    'django.contrib.auth',
+    'django.contrib.contenttypes',
+    'django.contrib.sessions',
+    'django.contrib.messages',
+    'django.contrib.staticfiles'
+]
+
+MIDDLEWARE = [
+    'django.contrib.sessions.middleware.SessionMiddleware',
+    'django.middleware.common.CommonMiddleware',
+    'django.middleware.csrf.CsrfViewMiddleware',
+    'django.contrib.auth.middleware.AuthenticationMiddleware',
+    'django.contrib.messages.middleware.MessageMiddleware',
+    'django.middleware.clickjacking.XFrameOptionsMiddleware',
+    'django.middleware.security.SecurityMiddleware',
+
+    'wagtail.core.middleware.SiteMiddleware',
+    'wagtail.contrib.redirects.middleware.RedirectMiddleware',
+]
+
+ROOT_URLCONF = 'website.urls'
+
+TEMPLATES = [
+    {
+        'BACKEND': 'django.template.backends.django.DjangoTemplates',
+        'DIRS': [
+            os.path.join(PROJECT_DIR, 'templates'),
+        ],
+        'APP_DIRS': True,
+        'OPTIONS': {
+            'context_processors': [
+                'django.template.context_processors.debug',
+                'django.template.context_processors.request',
+                'django.contrib.auth.context_processors.auth',
+                'django.contrib.messages.context_processors.messages',
+                'wagtailmenus.context_processors.wagtailmenus'
+            ],
+        },
+    },
+]
+
+WSGI_APPLICATION = 'website.wsgi.application'
+
+
+# Database
+# https://docs.djangoproject.com/en/2.0/ref/settings/#databases
+
+DATABASES = {
+    'default': {
+        'ENGINE': 'django.db.backends.sqlite3',
+        'NAME': os.path.join(BASE_DIR, 'db.sqlite3'),
+    }
+}
+
+
+# Password validation
+# https://docs.djangoproject.com/en/2.0/ref/settings/#auth-password-validators
+
+AUTH_PASSWORD_VALIDATORS = [
+    {
+        'NAME': 'django.contrib.auth.password_validation.UserAttributeSimilarityValidator',
+    },
+    {
+        'NAME': 'django.contrib.auth.password_validation.MinimumLengthValidator',
+    },
+    {
+        'NAME': 'django.contrib.auth.password_validation.CommonPasswordValidator',
+    },
+    {
+        'NAME': 'django.contrib.auth.password_validation.NumericPasswordValidator',
+    },
+]
+
+
+# Internationalization
+# https://docs.djangoproject.com/en/2.0/topics/i18n/
+
+LANGUAGE_CODE = 'en-us'
+
+TIME_ZONE = 'UTC'
+
+USE_I18N = True
+
+USE_L10N = True
+
+USE_TZ = True
+
+
+# Static files (CSS, JavaScript, Images)
+# https://docs.djangoproject.com/en/2.0/howto/static-files/
+
+STATICFILES_FINDERS = [
+    'django.contrib.staticfiles.finders.FileSystemFinder',
+    'django.contrib.staticfiles.finders.AppDirectoriesFinder',
+]
+
+STATICFILES_DIRS = [
+    os.path.join(PROJECT_DIR, 'static'),
+]
+
+STATIC_ROOT = os.path.join(BASE_DIR, 'static')
+STATIC_URL = '/static/'
+
+MEDIA_ROOT = os.path.join(BASE_DIR, 'media')
+MEDIA_URL = '/media/'
+
+
+# Wagtail settings
+
+WAGTAIL_SITE_NAME = "website"
+
+# Base URL to use when referring to full URLs within the Wagtail admin backend -
+# e.g. in notification emails. Don't include '/admin' or a trailing slash
+BASE_URL = 'http://example.com'

+ 16 - 0
website/settings/dev.py

@@ -0,0 +1,16 @@
+from .base import *
+
+# SECURITY WARNING: don't run with debug turned on in production!
+DEBUG = True
+
+# SECURITY WARNING: keep the secret key used in production secret!
+SECRET_KEY = ')r5k#p-jx4-l98mo5!i#p@9z@pm_!&q(g5tu)k7h#z_d)lsy4v'
+
+
+EMAIL_BACKEND = 'django.core.mail.backends.console.EmailBackend'
+
+
+try:
+    from .local import *
+except ImportError:
+    pass

+ 8 - 0
website/settings/production.py

@@ -0,0 +1,8 @@
+from .base import *
+
+DEBUG = False
+
+try:
+    from .local import *
+except ImportError:
+    pass

Файловите разлики са ограничени, защото са твърде много
+ 4 - 0
website/static/css/fontawesome-4.5.0.min.css


BIN
website/static/css/fonts/FontAwesome.otf


BIN
website/static/css/fonts/fontawesome-webfont.eot


Файловите разлики са ограничени, защото са твърде много
+ 655 - 0
website/static/css/fonts/fontawesome-webfont.svg


BIN
website/static/css/fonts/fontawesome-webfont.ttf


BIN
website/static/css/fonts/fontawesome-webfont.woff


BIN
website/static/css/fonts/fontawesome-webfont.woff2


+ 0 - 0
website/static/css/fonts/index.html


+ 118 - 0
website/static/css/framework.css

@@ -0,0 +1,118 @@
+@charset "utf-8";
+/*
+Template Name: Pobabini
+Author: <a href="http://www.os-templates.com/">OS Templates</a>
+Author URI: http://www.os-templates.com/
+Licence: Free to use under our free template licence terms
+Licence URI: http://www.os-templates.com/template-terms
+File: Framework CSS
+*/
+
+html{overflow-y:scroll; overflow-x:hidden;}
+html, body{margin:0; padding:0; font-size:14px; line-height:1.6em;}
+
+*, *::before, *::after{box-sizing:border-box;}
+
+.bold{font-weight:bold;}
+.center{text-align:center;}
+.right{text-align:right;}
+.uppercase{text-transform:uppercase;}
+.capitalise{text-transform:capitalize;}
+.hidden{display:none;}
+.nospace{margin:0; padding:0; list-style:none;}
+.block{display:block;}
+.inline *{display:inline-block;}
+.inline *:last-child{margin-right:0;}
+.pushright li{margin-right:20px;}
+.pushright li:last-child{margin-right:0;}
+.borderedbox{border:1px solid;}
+.overlay{position:relative; z-index:1;}
+.overlay::after{display:block; position:absolute; top:0; left:0; width:100%; height:100%; content:""; z-index:-1;}
+.bgded{background-position:top center; background-repeat:no-repeat; background-size:cover;}
+.circle{border-radius:50%; background-clip:padding-box;}
+
+.btn{display:inline-block; padding:15px 25px 17px; text-transform:uppercase; border:1px solid;}
+.btn.medium{padding:10px 20px 12px;}
+.btn.small{padding:8px 18px 10px; text-transform:none;}
+
+.clear, .group{display:block;}
+.clear::before, .clear::after, .group::before, .group::after{display:table; content:"";}
+.clear, .clear::after, .group, .group::after{clear:both;}
+
+a{outline:none; text-decoration:none;}
+
+.fl_left, .imgl{float:left;}
+.fl_right, .imgr{float:right;}
+
+img{width:auto; max-width:100%; height:auto; margin:0; padding:0; border:none; line-height:normal; vertical-align:middle;}
+.imgl{margin:0 15px 10px 0; clear:left;}
+.imgr{margin:0 0 10px 15px; clear:right;}
+
+
+/* Fonts
+--------------------------------------------------------------------------------------------------------------- */
+body, input, textarea, select{font-family:Verdana, Geneva, sans-serif;}
+h1, h2, h3, h4, h5, h6, .heading{font-family:Georgia, "Times New Roman", Times, serif;}
+
+
+/* Forms
+--------------------------------------------------------------------------------------------------------------- */
+form, fieldset, legend{margin:0; padding:0; border:none;}
+legend{display:none;}
+label, input, textarea, select, button{display:block; resize:none; outline:none; color:inherit; font-size:inherit; font-family:inherit; vertical-align:middle;}
+label{margin-bottom:5px;}
+:required, :invalid{outline:none; box-shadow:none;}
+
+
+/* Generalise
+--------------------------------------------------------------------------------------------------------------- */
+h1, h2, h3, h4, h5, h6, .heading{margin:0 0 20px 0; font-size:22px; line-height:normal; font-weight:normal; text-transform:capitalize;}
+
+address{font-style:normal; font-weight:normal;}
+hr{display:block; width:100%; height:1px; border:solid; border-width:1px 0 0 0;}
+
+.font-xs{font-size:.8rem;}
+.font-x1{font-size:1.2rem;}
+.font-x2{font-size:1.8rem;}
+.font-x3{font-size:2.8rem;}
+
+.wrapper{display:block; width:100%; margin:0; padding:0; text-align:left; word-wrap:break-word;}
+/*
+The "hoc" class is a generic class used to centre a containing element horizontally
+It should be used in conjunction with a second class or ID
+*/
+.hoc{display:block; margin:0 auto;}
+
+
+/* HTML 5 Overrides
+--------------------------------------------------------------------------------------------------------------- */
+address, article, aside, figcaption, figure, footer, header, main, nav, section{display:block; margin:0; padding:0;}
+
+
+/* Grid
+--------------------------------------------------------------------------------------------------------------- */
+.one_half, .one_third, .two_third, .one_quarter, .two_quarter, .three_quarter{display:inline-block; float:left; margin:0 0 0 3.06748466257669%; list-style:none;}
+
+.first{margin-left:0; clear:left;}
+
+.one_quarter{width:22.69938650306748%;}
+.one_third{width:31.28834355828221%;}
+.one_half, .two_quarter{width:48.46625766871166%;}
+.two_third{width:65.6441717791411%;}
+.three_quarter{width:74.23312883435584%;}
+
+
+/* Spacing
+--------------------------------------------------------------------------------------------------------------- */
+.btmspace-10{margin-bottom:10px;}
+.btmspace-15{margin-bottom:15px;}
+.btmspace-30{margin-bottom:30px;}
+.btmspace-50{margin-bottom:50px;}
+.btmspace-80{margin-bottom:80px;}
+
+.inspace-5{padding:5px;}
+.inspace-10{padding:10px;}
+.inspace-15{padding:15px;}
+.inspace-30{padding:30px;}
+.inspace-50{padding:50px;}
+.inspace-80{padding:80px;}

+ 428 - 0
website/static/css/layout.css

@@ -0,0 +1,428 @@
+@charset "utf-8";
+/*
+Template Name: Pobabini
+Author: <a href="http://www.os-templates.com/">OS Templates</a>
+Author URI: http://www.os-templates.com/
+Licence: Free to use under our free template licence terms
+Licence URI: http://www.os-templates.com/template-terms
+File: Layout CSS
+*/
+
+@import url("fontawesome-4.5.0.min.css");
+@import url("framework.css");
+
+/* Rows
+--------------------------------------------------------------------------------------------------------------- */
+.row1{border-bottom:1px solid;}
+.row2, .row2 a{}
+.row3, .row3 a{}
+.row4, .row4 a{}
+.row5{border-top:1px solid;}
+
+
+
+/* Header
+--------------------------------------------------------------------------------------------------------------- */
+#header{}
+
+#header #logo{margin:30px 0 0 0;}
+#header #logo h1{margin:0; padding:0; font-size:22px; text-transform:uppercase;}
+
+
+/* Page Intro
+--------------------------------------------------------------------------------------------------------------- */
+#pageintro{padding:200px 0 100px;}
+
+#pageintro article{display:block; max-width:50%;}
+#pageintro article .heading{margin-bottom:30px; font-size:64px;}
+#pageintro article p{font-size:16px;}
+#pageintro article footer{margin-top:50px;}
+
+
+/* Content Area
+--------------------------------------------------------------------------------------------------------------- */
+.container{padding:80px 0;}
+
+/* Content */
+.container .content{}
+
+.services{}
+.services li{}
+.services li:nth-child(-n+3){margin-bottom:30px;}
+.services li:last-child{margin-bottom:0;}/* Used for mobile devices when elements stack */
+.services article{display:block; position:relative; min-height:80px; padding:0 0 0 40px;}
+.services article *{margin:0;}
+.services article i{display:block; position:absolute; top:0; left:0; font-size:24px;}
+.services article .heading{margin-bottom:10px; font-size:1.2rem;}
+.services article p{margin-bottom:10px;}
+
+.elements{}
+.elements li{}
+.elements li:nth-child(-n+3){margin-bottom:30px;}
+.elements li:last-child{margin-bottom:0;}/* Used for mobile devices when elements stack */
+.elements figure{display:block; position:relative; width:100%; max-width:320px; height:100%;}
+.elements figure figcaption{display:block; position:absolute; bottom:0; left:0; width:100%; text-align:center; opacity:0;}
+.elements figure:hover figcaption{opacity:1;}
+.elements figure figcaption a{display:block; padding:10px; font-weight:700; text-transform:uppercase;}
+
+/* Comments */
+#comments ul{margin:0 0 40px 0; padding:0; list-style:none;}
+#comments li{margin:0 0 10px 0; padding:15px;}
+#comments .avatar{float:right; margin:0 0 10px 10px; padding:3px; border:1px solid;}
+#comments address{font-weight:bold;}
+#comments time{font-size:smaller;}
+#comments .comcont{display:block; margin:0; padding:0;}
+#comments .comcont p{margin:10px 5px 10px 0; padding:0;}
+
+#comments form{display:block; width:100%;}
+#comments input, #comments textarea{width:100%; padding:10px; border:1px solid;}
+#comments textarea{overflow:auto;}
+#comments div{margin-bottom:15px;}
+#comments input[type="submit"], #comments input[type="reset"]{display:inline-block; width:auto; min-width:150px; margin:0; padding:8px 5px; cursor:pointer;}
+
+/* Sidebar */
+.container .sidebar{}
+
+.sidebar .sdb_holder{margin-bottom:50px;}
+.sidebar .sdb_holder:last-child{margin-bottom:0;}
+
+
+/* Full Width Split Box
+--------------------------------------------------------------------------------------------------------------- */
+.split{display:block; width:100%; background-position:top right; background-repeat:no-repeat; background-size:cover;}
+.split .box{display:block; float:right; width:50%; padding:6%;}
+
+.split .box .testimonial{}
+.split .box .testimonial figure{margin-bottom:20px;}
+.split .box .testimonial figure img{float:left; margin-right:15px; border-radius:50%;}
+.split .box .testimonial figure figcaption{float:left; margin:15px 0 0 0;}
+.split .box .testimonial figure figcaption *{display:block; margin:0; padding:0; line-height:1;}
+.split .box .testimonial figure figcaption strong{margin-bottom:5px;}
+.split .box .testimonial figure figcaption br{display:none;}
+.split .box .testimonial figure figcaption em{font-size:.8rem;}
+.split .box .testimonial blockquote{display:block; position:relative; width:100%; margin:0; padding:30px 0 0 0; line-height:1.4; z-index:1;}
+.split .box .testimonial blockquote::before{display:block; position:absolute; top:0; left:0; font-family:"FontAwesome"; font-size:60px; content:"\f10d"; z-index:-1;}
+
+
+/* Social
+--------------------------------------------------------------------------------------------------------------- */
+#social{padding:30px 0; text-align:center;}
+
+#social div:last-child{margin-bottom:0;}/* Used in small devices when elements stack */
+
+#social .title{margin:0 0 15px 0; padding:0; font-size:1.2rem; text-transform:uppercase;}
+
+#social form{display:block; position:relative; max-width:90%; margin:0 auto;}
+#social input, #social button{display:block; height:36px; border:none;}
+#social input{width:100%; min-width:250px; padding:5px 40px 5px 15px;}
+#social button{position:absolute; top:1px; right:1px; width:32px; height:34px; font-size:16px; cursor:pointer;}
+#social button em{display:none;}
+
+
+/* Footer
+--------------------------------------------------------------------------------------------------------------- */
+#footer{padding:80px 0;}
+
+#footer .title{margin:0 0 30px 0; padding:0; font-size:1.2rem; text-transform:uppercase;}
+
+#footer .linklist li{display:block; margin-bottom:15px; padding:0 0 15px 0; border-bottom:1px solid;}
+#footer .linklist li:last-child{margin:0; padding:0; border:none;}
+#footer .linklist li::before, #footer .linklist li::after{display:table; content:"";}
+#footer .linklist li, #footer .linklist li::after{clear:both;}
+
+#footer .contact{}
+#footer .contact.linklist li, #footer .contact.linklist li:last-child{position:relative; padding-left:40px;}
+#footer .contact li *{margin:0; padding:0; line-height:1.6;}
+#footer .contact li i{display:block; position:absolute; top:0; left:0; width:30px; font-size:16px; text-align:center;}
+
+
+/* Copyright
+--------------------------------------------------------------------------------------------------------------- */
+#copyright{padding:20px 0;}
+#copyright *{margin:0; padding:0;}
+
+
+/* Transition Fade
+--------------------------------------------------------------------------------------------------------------- */
+*, *::before, *::after{transition:all .3s ease-in-out;}
+#mainav form *{transition:none !important;}
+
+
+/* ------------------------------------------------------------------------------------------------------------ */
+/* ------------------------------------------------------------------------------------------------------------ */
+/* ------------------------------------------------------------------------------------------------------------ */
+/* ------------------------------------------------------------------------------------------------------------ */
+/* ------------------------------------------------------------------------------------------------------------ */
+
+
+/* Navigation
+--------------------------------------------------------------------------------------------------------------- */
+nav ul, nav ol{margin:0; padding:0; list-style:none;}
+
+#mainav, #breadcrumb, .sidebar nav{line-height:normal;}
+#mainav .drop::after, #mainav li li .drop::after, #breadcrumb li a::after, .sidebar nav a::after{position:absolute; font-family:"FontAwesome"; font-size:10px; line-height:10px;}
+
+/* Top Navigation */
+#mainav{}
+#mainav ul.clear{margin-top:3px;}
+#mainav ul{text-transform:uppercase;}
+#mainav ul ul{z-index:9999; position:absolute; width:180px; text-transform:none;}
+#mainav ul ul ul{left:180px; top:0;}
+#mainav li{display:inline-block; position:relative; margin:0 15px 0 0; padding:0;}
+#mainav li:last-child{margin-right:0;}
+#mainav li li{width:100%; margin:0;}
+#mainav li a{display:block; padding:30px 0;}
+#mainav li li a{border:solid; border-width:0 0 1px 0;}
+#mainav .drop{padding-left:15px;}
+#mainav li li a, #mainav li li .drop{display:block; margin:0; padding:10px 15px;}
+#mainav .drop::after, #mainav li li .drop::after{content:"\f0d7";}
+#mainav .drop::after{top:35px; left:5px;}
+#mainav li li .drop::after{top:15px; left:5px;}
+#mainav ul ul{visibility:hidden; opacity:0;}
+#mainav ul li:hover > ul{visibility:visible; opacity:1;}
+
+#mainav form{display:none; margin:0; padding:0;}
+#mainav form select, #mainav form select option{display:block; cursor:pointer; outline:none;}
+#mainav form select{width:100%; padding:5px; border:1px solid;}
+#mainav form select option{margin:5px; padding:0; border:none;}
+
+/* Breadcrumb */
+#breadcrumb{padding:20px 0 20px; text-align:right; text-transform:uppercase;}
+#breadcrumb ul{margin:0; padding:0; list-style:none;}
+#breadcrumb li{display:inline-block; margin:0 6px 0 0; padding:0;}
+#breadcrumb li a{display:block; position:relative; margin:0; padding:0 12px 0 0; font-size:12px;}
+#breadcrumb li a::after{top:3px; right:0; content:"\f101";}
+#breadcrumb li:last-child a{margin:0; padding:0;}
+#breadcrumb li:last-child a::after{display:none;}
+
+/* Sidebar Navigation */
+.sidebar nav{display:block; width:100%;}
+.sidebar nav li{margin:0 0 3px 0; padding:0;}
+.sidebar nav a{display:block; position:relative; margin:0; padding:5px 10px 5px 15px; text-decoration:none; border:solid; border-width:0 0 1px 0;}
+.sidebar nav a::after{top:9px; left:5px; content:"\f101";}
+.sidebar nav ul ul a{padding-left:35px;}
+.sidebar nav ul ul a::after{left:25px;}
+.sidebar nav ul ul ul a{padding-left:55px;}
+.sidebar nav ul ul ul a::after{left:45px;}
+
+/* Pagination */
+.pagination{display:block; width:100%; text-align:center; clear:both;}
+.pagination li{display:inline-block; margin:0 2px 0 0;}
+.pagination li:last-child{margin-right:0;}
+.pagination a, .pagination strong{display:block; padding:8px 11px; border:1px solid; background-clip:padding-box; font-weight:normal;}
+
+/* Back to Top */
+#backtotop{z-index:999; display:inline-block; position:fixed; visibility:hidden; bottom:20px; right:20px; width:36px; height:36px; line-height:36px; font-size:16px; text-align:center; opacity:.2;}
+#backtotop i{display:block; width:100%; height:100%; line-height:inherit;}
+#backtotop.visible{visibility:visible; opacity:.5;}
+#backtotop:hover{opacity:1;}
+
+
+/* Tables
+--------------------------------------------------------------------------------------------------------------- */
+table, th, td{border:1px solid; border-collapse:collapse; vertical-align:top;}
+table, th{table-layout:auto;}
+table{width:100%; margin-bottom:15px;}
+th, td{padding:5px 8px;}
+td{border-width:0 1px;}
+
+
+/* Gallery
+--------------------------------------------------------------------------------------------------------------- */
+#gallery{display:block; width:100%; margin-bottom:50px;}
+#gallery figure figcaption{display:block; width:100%; clear:both;}
+#gallery li{margin-bottom:30px;}
+
+
+/* Font Awesome Social Icons
+--------------------------------------------------------------------------------------------------------------- */
+.faico{margin:0; padding:0; list-style:none;}
+.faico li{display:inline-block; margin:0 5px 0 0; padding:0; line-height:normal;}
+.faico li:last-child{margin-right:0;}
+.faico a{display:inline-block; width:36px; height:36px; line-height:36px; font-size:18px; text-align:center;}
+
+.faico a{color:inherit; background-color:#050505;}
+.faico a:hover{color:#FFFFFF;}
+
+.faicon-dribble:hover{background-color:#EA4C89;}
+.faicon-facebook:hover{background-color:#3B5998;}
+.faicon-google-plus:hover{background-color:#DB4A39;}
+.faicon-linkedin:hover{background-color:#0E76A8;}
+.faicon-pinterest:hover{background-color:#C8232C;}
+.faicon-rss:hover{background-color:#EE802F;}
+.faicon-twitter:hover{background-color:#00ACEE;}
+.faicon-vk:hover{background-color:#4E658E;}
+.faicon-youtube:hover{background-color:#C4302B;}
+
+
+/* ------------------------------------------------------------------------------------------------------------ */
+/* ------------------------------------------------------------------------------------------------------------ */
+/* ------------------------------------------------------------------------------------------------------------ */
+/* ------------------------------------------------------------------------------------------------------------ */
+/* ------------------------------------------------------------------------------------------------------------ */
+
+
+/* Colours
+--------------------------------------------------------------------------------------------------------------- */
+body{color:#7F7F7F; background-color:#050505;}
+a{color:#96B2B6;}
+a:active, a:focus{background:transparent;}/* IE10 + 11 Bugfix - prevents grey background */
+hr, .borderedbox{border-color:#D7D7D7;}
+label span{color:#FF0000; background-color:inherit;}
+input:focus, textarea:focus, *:required:focus{border-color:#96B2B6;}
+.overlay{color:#FFFFFF; background-color:inherit;}
+.overlay::after{color:inherit; background-color:rgba(0,0,0,.55);}
+
+.btn, .btn.inverse:hover{color:#FFFFFF; background-color:#96B2B6; border-color:#96B2B6;}
+.btn:hover, .btn.inverse{color:inherit; background-color:transparent; border-color:inherit;}
+
+
+/* Rows */
+.row1{border-color:rgba(255,255,255,.2);}
+.row2, .row2 a{}
+.row3{color:#959394; background-color:#FFFFFF;}
+.row4{color:#7F7F7F; background-color:#050505;}
+.row5, .row5 a{color:#7F7F7F; background-color:#050505; border-color:rgba(255,255,255,.2);}
+
+.coloured{color:#FFFFFF; background-color:#96B2B6;}
+
+
+/* Header */
+#header #logo a{color:inherit;}
+
+
+/* Page Intro */
+#pageintro .btn.inverse{color:#96B2B6; background-color:#FFFFFF; border-color:#FFFFFF;}
+#pageintro .btn.inverse:hover{color:#FFFFFF; background-color:#96B2B6; border-color:#96B2B6;}
+
+
+/* Content Area */
+.services li{border-color:#D7D7D7;}
+
+.elements figure figcaption{color:#FFFFFF; background:#96B2B6;}
+.elements figure figcaption a{color:inherit;}
+
+
+/* Full Width Split Box */
+.split{color:#FFFFFF; background-color:rgba(0,0,0,.5);}
+.split .box{background-color:inherit;}
+.split .box .testimonial blockquote::before{color:rgba(255,255,255,.2);}
+
+
+/* Social */
+#social input, #social button{color:#FFFFFF; background-color:#050505;}
+#social button{color:#96B2B6;}
+
+
+/* Footer */
+#footer .title{color:#FFFFFF;}
+#footer .linklist li{border-color:rgba(255,255,255,.2);}
+
+#footer input, #footer button{color:#FFFFFF; background-color:#191919;}
+#footer button{color:#96B2B6;}
+
+
+/* Navigation */
+#mainav li a{color:inherit;}
+#mainav .active a, #mainav a:hover, #mainav li:hover > a{color:#96B2B6; background-color:inherit;}
+#mainav li li a, #mainav .active li a{color:#FFFFFF; background-color:rgba(0,0,0,.6); border-color:rgba(0,0,0,.6);}
+#mainav li li:hover > a, #mainav .active .active > a{color:#FFFFFF; background-color:#96B2B6;}
+#mainav form select{color:#FFFFFF; background-color:#050505; border-color:rgba(255,255,255,.2);}
+
+#breadcrumb a{color:inherit; background-color:inherit;}
+#breadcrumb li:last-child a{color:#96B2B6;}
+
+.container .sidebar nav a{color:inherit; border-color:#D7D7D7;}
+.container .sidebar nav a:hover{color:#96B2B6;}
+
+.pagination a, .pagination strong{border-color:#D7D7D7;}
+.pagination .current *{color:#FFFFFF; background-color:#96B2B6;}
+
+#backtotop{color:#FFFFFF; background-color:#96B2B6;}
+
+
+/* Tables + Comments */
+table, th, td, #comments .avatar, #comments input, #comments textarea{border-color:#D7D7D7;}
+#comments input:focus, #comments textarea:focus, #comments *:required:focus{border-color:#96B2B6;}
+th{color:#FFFFFF; background-color:#373737;}
+tr, #comments li, #comments input[type="submit"], #comments input[type="reset"]{color:inherit; background-color:#FBFBFB;}
+tr:nth-child(even), #comments li:nth-child(even){color:inherit; background-color:#F7F7F7;}
+table a, #comments a{background-color:inherit;}
+
+
+/* ------------------------------------------------------------------------------------------------------------ */
+/* ------------------------------------------------------------------------------------------------------------ */
+/* ------------------------------------------------------------------------------------------------------------ */
+/* ------------------------------------------------------------------------------------------------------------ */
+/* ------------------------------------------------------------------------------------------------------------ */
+
+
+/* Media Queries
+--------------------------------------------------------------------------------------------------------------- */
+@-ms-viewport{width:device-width;}
+
+
+/* Max Wrapper Width - Laptop, Desktop etc.
+--------------------------------------------------------------------------------------------------------------- */
+@media screen and (min-width:978px){
+	.hoc{max-width:978px;}
+}
+
+
+/* Mobile Devices
+--------------------------------------------------------------------------------------------------------------- */
+@media screen and (max-width:900px){
+	.hoc{max-width:90%;}
+
+	#header{padding:30px 0;}
+	#header #logo{margin:0;}
+
+	#mainav{}
+	#mainav ul{display:none;}
+	#mainav form{display:block;}
+
+	#breadcrumb{}
+
+	.container{}
+	#comments input[type="reset"]{margin-top:10px;}
+	.pagination li{display:inline-block; margin:0 5px 5px 0;}
+
+	#footer{}
+
+	#copyright{}
+	#copyright p:first-of-type{margin-bottom:10px;}
+}
+
+
+@media screen and (max-width:750px){
+	.imgl, .imgr{display:inline-block; float:none; margin:0 0 10px 0;}
+	.fl_left, .fl_right{display:block; float:none;}
+	.one_half, .one_third, .two_third, .one_quarter, .two_quarter, .three_quarter{display:block; float:none; width:auto; margin:0 0 30px 0; padding:0;}
+
+	#header{text-align:center;}
+	#header #logo{margin-bottom:15px;}
+
+	#pageintro{}
+	#pageintro article{max-width:none;}
+	#pageintro article .heading{font-size:36px;}
+
+	.split .box{float:none; width:100%; padding:10%;}
+
+	#footer{padding-bottom:50px;}/* not neccessary but looks better */
+}
+
+@media screen and (max-width:450px){}
+
+
+/* Other
+--------------------------------------------------------------------------------------------------------------- */
+@media screen and (max-width:650px){
+	.scrollable{display:block; width:100%; margin:0 0 30px 0; padding:0 0 15px 0; overflow:auto; overflow-x:scroll;}
+	.scrollable table{margin:0; padding:0; white-space:nowrap;}
+
+	.inline li{display:block; margin-bottom:10px;}
+	.pushright li{margin-right:0;}
+
+	.font-x2{font-size:1.4rem;}
+	.font-x3{font-size:1.6rem;}
+}

+ 0 - 0
website/static/css/website.css


BIN
website/static/images/demo/320x240.png


BIN
website/static/images/demo/60x60.png


BIN
website/static/images/demo/avatar.png


BIN
website/static/images/demo/backgrounds/01.png


BIN
website/static/images/demo/backgrounds/02.png


BIN
website/static/images/demo/backgrounds/03.jpg


BIN
website/static/images/demo/backgrounds/04.jpg


+ 0 - 0
website/static/images/demo/backgrounds/index.html


BIN
website/static/images/demo/gallery/01.png


+ 0 - 0
website/static/images/demo/gallery/index.html


BIN
website/static/images/demo/imgl.gif


BIN
website/static/images/demo/imgr.gif


+ 0 - 0
website/static/images/demo/index.html


+ 21 - 0
website/static/js/jquery.backtotop.js

@@ -0,0 +1,21 @@
+/*
+Template Name: Pobabini
+Author: <a href="http://www.os-templates.com/">OS Templates</a>
+Author URI: http://www.os-templates.com/
+Licence: Free to use under our free template licence terms
+Licence URI: http://www.os-templates.com/template-terms
+File: Back to Top JS
+*/
+
+jQuery("#backtotop").click(function () {
+    jQuery("body,html").animate({
+        scrollTop: 0
+    }, 600);
+});
+jQuery(window).scroll(function () {
+    if (jQuery(window).scrollTop() > 150) {
+        jQuery("#backtotop").addClass("visible");
+    } else {
+        jQuery("#backtotop").removeClass("visible");
+    }
+});

Файловите разлики са ограничени, защото са твърде много
+ 4 - 0
website/static/js/jquery.min.js


Файловите разлики са ограничени, защото са твърде много
+ 14 - 0
website/static/js/jquery.mobilemenu.js


+ 0 - 0
website/static/js/website.js


+ 9 - 0
website/templates/404.html

@@ -0,0 +1,9 @@
+{% extends "base.html" %}
+
+{% block body_class %}template-404{% endblock %}
+
+{% block content %}
+    <h1>Page not found</h1>
+
+    <h2>Sorry, this page could not be found.</h2>
+{% endblock %}

+ 17 - 0
website/templates/500.html

@@ -0,0 +1,17 @@
+<!DOCTYPE html>
+<!--[if lt IE 7]>      <html class="no-js lt-ie9 lt-ie8 lt-ie7"> <![endif]-->
+<!--[if IE 7]>         <html class="no-js lt-ie9 lt-ie8"> <![endif]-->
+<!--[if IE 8]>         <html class="no-js lt-ie9"> <![endif]-->
+<!--[if gt IE 8]><!--> <html class="no-js"> <!--<![endif]-->
+    <head>
+        <meta charset="utf-8" />
+        <meta http-equiv="X-UA-Compatible" content="IE=edge" />
+        <title>Internal server error</title>
+        <meta name="viewport" content="width=device-width, initial-scale=1" />
+    </head>
+    <body>
+        <h1>Internal server error</h1>
+
+        <h2>Sorry, there seems to be an error. Please try again soon.</h2>
+    </body>
+</html>

+ 46 - 0
website/templates/base.html

@@ -0,0 +1,46 @@
+{% load static wagtailuserbar %}
+
+<!DOCTYPE html>
+<!--[if lt IE 7]>      <html class="no-js lt-ie9 lt-ie8 lt-ie7"> <![endif]-->
+<!--[if IE 7]>         <html class="no-js lt-ie9 lt-ie8"> <![endif]-->
+<!--[if IE 8]>         <html class="no-js lt-ie9"> <![endif]-->
+<!--[if gt IE 8]><!--> <html class="no-js"> <!--<![endif]-->
+    <head>
+        <meta charset="utf-8" />
+        <meta http-equiv="X-UA-Compatible" content="IE=edge" />
+        <title>
+            {% block title %}
+                {% if self.seo_title %}{{ self.seo_title }}{% else %}{{ self.title }}{% endif %}
+            {% endblock %}
+            {% block title_suffix %}
+                {% with self.get_site.site_name as site_name %}
+                    {% if site_name %}- {{ site_name }}{% endif %}
+                {% endwith %}
+            {% endblock %}
+        </title>
+        <meta name="description" content="" />
+        <meta name="viewport" content="width=device-width, initial-scale=1.0, maximum-scale=1.0, user-scalable=no">
+
+        {# Global stylesheets #}
+        <link rel="stylesheet" type="text/css" href="{% static 'css/layout.css' %}">
+
+        {% block extra_css %}
+            {# Override this in templates to add extra stylesheets #}
+        {% endblock %}
+    </head>
+
+    <body class="{% block body_class %}{% endblock %}">
+        {% wagtailuserbar %}
+
+        {% block content %}{% endblock %}
+
+        {# Global javascript #}
+        <script type="text/javascript" src="{% static 'js/jquery.min.js' %}"></script>
+        <script type="text/javascript" src="{% static 'js/jquery.backtotop.js' %}"></script>
+        <script type="text/javascript" src="{% static 'js/jquery.mobilemenu.js' %}"></script>
+
+        {% block extra_js %}
+            {# Override this in templates to add extra javascript #}
+        {% endblock %}
+    </body>
+</html>

+ 36 - 0
website/urls.py

@@ -0,0 +1,36 @@
+from django.conf import settings
+from django.conf.urls import include, url
+from django.contrib import admin
+
+from wagtail.admin import urls as wagtailadmin_urls
+from wagtail.core import urls as wagtail_urls
+from wagtail.documents import urls as wagtaildocs_urls
+
+from search import views as search_views
+
+urlpatterns = [
+    url(r'^django-admin/', admin.site.urls),
+
+    url(r'^admin/', include(wagtailadmin_urls)),
+    url(r'^documents/', include(wagtaildocs_urls)),
+
+    url(r'^search/$', search_views.search, name='search'),
+
+    # For anything not caught by a more specific rule above, hand over to
+    # Wagtail's page serving mechanism. This should be the last pattern in
+    # the list:
+    url(r'', include(wagtail_urls)),
+
+    # Alternatively, if you want Wagtail pages to be served from a subpath
+    # of your site, rather than the site root:
+    #    url(r'^pages/', include(wagtail_urls)),
+]
+
+
+if settings.DEBUG:
+    from django.conf.urls.static import static
+    from django.contrib.staticfiles.urls import staticfiles_urlpatterns
+
+    # Serve static and media files from development server
+    urlpatterns += staticfiles_urlpatterns()
+    urlpatterns += static(settings.MEDIA_URL, document_root=settings.MEDIA_ROOT)

+ 16 - 0
website/wsgi.py

@@ -0,0 +1,16 @@
+"""
+WSGI config for website project.
+
+It exposes the WSGI callable as a module-level variable named ``application``.
+
+For more information on this file, see
+https://docs.djangoproject.com/en/2.0/howto/deployment/wsgi/
+"""
+
+import os
+
+from django.core.wsgi import get_wsgi_application
+
+os.environ.setdefault("DJANGO_SETTINGS_MODULE", "website.settings.dev")
+
+application = get_wsgi_application()