diff --git a/Navigaton.py b/Navigaton.py new file mode 100644 index 00000000000..4517c8536d4 --- /dev/null +++ b/Navigaton.py @@ -0,0 +1,45 @@ +class NavItem: + def __init__(self, config, page): + if 'url' in config: + self.url = config['url'] + else: + self.url = None + self.title = config['title'] + self.items = [] + if 'items' in config: + self.items = [NavItem(item_config, page) for item_config in config['items']] + self._config = config + self._current_url = page.path + + def is_active(self): + for item in self.items: + if item.is_active(): + return True + if self.url is not None: + url = self.url + if url.startswith("/"): + url = url[1:] + if url.endswith(".html"): + url = url[:-5] + return self._current_url.startswith(url) + else: + return False + + def is_external(self): + if hasattr(self, 'url'): + return self.url.startswith("http://") or self.url.startswith("https://") + else: + return False + + def __getitem__(self, item): + return self._config[item] + + +class Nav: + def __init__(self, config, page): + self._nav = {} + for nav_id in config: + self._nav[nav_id] = [NavItem(nav_item_config, page) for nav_item_config in config[nav_id]] + + def __getitem__(self, item): + return self._nav[item] diff --git a/_data/_nav.yml b/data/_nav.yml similarity index 100% rename from _data/_nav.yml rename to data/_nav.yml diff --git a/_data/api.yml b/data/api.yml similarity index 100% rename from _data/api.yml rename to data/api.yml diff --git a/_data/companies-using-kotlin.yml b/data/companies-using-kotlin.yml similarity index 100% rename from _data/companies-using-kotlin.yml rename to data/companies-using-kotlin.yml diff --git a/_data/events.yml b/data/events.yml similarity index 100% rename from _data/events.yml rename to data/events.yml diff --git a/_data/kotlin-features.yml b/data/kotlin-features.yml similarity index 100% rename from _data/kotlin-features.yml rename to data/kotlin-features.yml diff --git a/_data/oss-projects.yml b/data/oss-projects.yml similarity index 100% rename from _data/oss-projects.yml rename to data/oss-projects.yml diff --git a/_data/releases.yml b/data/releases.yml similarity index 100% rename from _data/releases.yml rename to data/releases.yml diff --git a/_data/twitterTips.yml b/data/twitterTips.yml similarity index 100% rename from _data/twitterTips.yml rename to data/twitterTips.yml diff --git a/_data/videos.yml b/data/videos.yml similarity index 100% rename from _data/videos.yml rename to data/videos.yml diff --git a/kotlin-website-flask.py b/kotlin-website-flask.py new file mode 100644 index 00000000000..d18c1a58586 --- /dev/null +++ b/kotlin-website-flask.py @@ -0,0 +1,52 @@ +import os + +import yaml +from flask import Flask, render_template +from flask.ext.flatpages import FlatPages +from os import path + +from Navigaton import Nav + +app = Flask(__name__) +app.config.from_pyfile('mysettings.py') +pages = FlatPages(app) +data_folder = path.join(os.path.dirname(__file__), "data") + + +def get_data(): + data = {} + for data_file in os.listdir(data_folder): + data_file_path = path.join(data_folder, data_file) + with open(data_file_path) as stream: + try: + file_name_without_extension = data_file[:-4] if data_file.endswith(".yml") else data_file + data[file_name_without_extension] = yaml.load(stream) + except yaml.YAMLError as exc: + print 'Cant parse data file ' + data_file + print exc.message + except IOError as exc: + print 'Cant open data file ' + data_file + print exc.message + return data + + +site_data = get_data() + + +@app.route('/') +def hello_world(): + return 'Hello World!' + + +@app.route('//') +def page(path): + page = pages.get_or_404(path) + nav = Nav(site_data['_nav'], page) + template = page.meta["layout"] if 'layout' in page.meta else 'default.html' + if not template.endswith(".html"): + template += ".html" + return render_template(template, page=page, data=site_data, nav=nav, baseurl="") + + +if __name__ == '__main__': + app.run() diff --git a/mysettings.py b/mysettings.py new file mode 100644 index 00000000000..3fd62838423 --- /dev/null +++ b/mysettings.py @@ -0,0 +1,11 @@ +import markdown.extensions.fenced_code +import markdown.extensions.codehilite +import markdown.extensions.attr_list + +DEBUG = True +FLATPAGES_EXTENSION = '.md' +FLATPAGES_MARKDOWN_EXTENSIONS = [ + markdown.extensions.attr_list.AttrListExtension(), + markdown.extensions.codehilite.CodeHiliteExtension(guess_lang=False, css_class="code"), + markdown.extensions.fenced_code.FencedCodeExtension() +] diff --git a/requirements.txt b/requirements.txt new file mode 100644 index 00000000000..05a237ebbc3 --- /dev/null +++ b/requirements.txt @@ -0,0 +1,3 @@ +flask = 0.10.1 +flask-flatpages = 0.6 +Pygments = 2.1.1 \ No newline at end of file