diff --git a/.gitignore b/.gitignore new file mode 100644 index 0000000..bee8a64 --- /dev/null +++ b/.gitignore @@ -0,0 +1 @@ +__pycache__ diff --git a/__init__.py b/__init__.py new file mode 100644 index 0000000..e69de29 diff --git a/admin.py b/admin.py new file mode 100644 index 0000000..8c38f3f --- /dev/null +++ b/admin.py @@ -0,0 +1,3 @@ +from django.contrib import admin + +# Register your models here. diff --git a/forms.py b/forms.py new file mode 100644 index 0000000..3c96018 --- /dev/null +++ b/forms.py @@ -0,0 +1,16 @@ +# -*- coding: utf-8 -*- +from django import forms +from crispy_forms.helper import FormHelper +from crispy_forms.layout import Submit +from django.core.urlresolvers import reverse +from crispy_forms.layout import Layout, Fieldset, ButtonHolder, Submit, Div + + +class form_user_login(forms.Form): + username = forms.CharField(label='Username',widget=forms.TextInput) + password = forms.CharField(label='Password',widget=forms.PasswordInput) + + def __init__(self, *args, **kwargs): + super(form_user_login, self).__init__(*args, **kwargs) + self.helper = FormHelper() + self.helper.add_input(Submit('submit','Login')) \ No newline at end of file diff --git a/models.py b/models.py new file mode 100644 index 0000000..71a8362 --- /dev/null +++ b/models.py @@ -0,0 +1,3 @@ +from django.db import models + +# Create your models here. diff --git a/static/webpage/apis.css b/static/webpage/apis.css new file mode 100644 index 0000000..85f5640 --- /dev/null +++ b/static/webpage/apis.css @@ -0,0 +1,154 @@ +a.list-group-item { + cursor: pointer; +} + +div.txt { + line-height: 2em; +} + +[data-entity-class] { + line-height: 1; + display: inline-block; + background: transparent; + padding: 0 0.15em 0.15em 0.15em; + position: relative; + cursor: help; + border-bottom: 3px solid; + white-space: pre; +} + +[data-entity-class]:after { + box-sizing: border-box; + content: attr(data-user-added) '*' attr(data-entity-class); + line-height: 1; + display: inline-block; + font-size: 0.65em; + font-weight: bold; + text-transform: uppercase; + position: absolute; + bottom: -1.5em; + left: 0; + -webkit-transition: opacity 0.25s ease; + transition: opacity 0.25s ease; +} + +[data-entity-class="PersonPlace"] ~ [data-entity-class="PersonPlace"]:after { + opacity: 0; +} + +[data-entity-class="PersonPlace"] ~ [data-entity-class="PersonPlace"]:hover:after { + opacity: 1; +} + +[data-entity-class="PersonInstitution"] ~ [data-entity-class="PersonInstitution"]:after { + opacity: 0; +} + +[data-entity-class="PersonInstitution"] ~ [data-entity-class="PersonInstitution"]:hover:after { + opacity: 1; +} + +[data-entity-class="PersonPerson"] ~ [data-entity-class="PersonPerson"]:after { + opacity: 0; +} + +[data-entity-class="PersonPerson"] ~ [data-entity-class="PersonPerson"]:hover:after { + opacity: 1; +} + +[data-entity-class][data-entity-class="PersonPlace"] { + border-bottom-color: #394bf4; +} + +[data-entity-class][data-entity-class="PersonPlace"]:after { + color: #394bf4; +} + +[data-entity-class][data-entity-class="PersonInstitution"] { + border-bottom-color: hsla(120, 100%, 50%, 0.8); +} + +[data-entity-class][data-entity-class="PersonInstitution"]:after { + color: hsla(120, 100%, 50%, 0.8); +} + +[data-entity-class][data-entity-class="PersonPerson"] { + border-bottom-color: hsla(356, 86%, 50%, 0.8); +} + +[data-entity-class][data-entity-class="PersonPerson"]:after { + color: hsla(356, 86%, 50%, 0.8); +} + +mark.hl_text_complex { + border-bottom-color: hsla(57, 100%, 55%, 0.87); + cursor: help; +} + +mark.complex:after { + color: hsla(57, 100%, 55%, 0.87); +} + +.top-buffer { margin-top:20px; } + +span.autocomplete-light-widget { + display: block; +} + +.yourlabs-autocomplete [data-value] { + white-space: normal; + word-wrap: break-word; +} + +span.autocomplete-light-text-widget { + max-width: 500px; +} + +span.autocomp_span { + width: auto; +} + +ul.pagination li.current { + padding-left: 10px; + padding-right: 10px; +} + +ul.annotations_list { + list-style-type: none; + padding: 0.5em; + line-height: 2.5em; +} + +table thead th{ + background-repeat: no-repeat; + background-position: center left; + cursor: pointer; +} +.asc{ + background-image: url(django_tables2/themes/paleblue/img/arrow-active-up.png); +} +.desc{ + background-image: url(django_tables2/themes/paleblue/img/arrow-active-down.png); +} + +a { + padding-left: 5px; +} + +.tooltipster-base div { + height: auto; +} + +#accordion { margin-right:10px; } + .panel-collapse>.list-group .list-group-item:first-child {border-top-right-radius: 0;border-top-left-radius: 0;} + .panel-collapse>.list-group .list-group-item {border-width: 1px 0;} + .panel-collapse>.list-group {margin-bottom: 0;} + .panel-collapse .list-group-item {border-radius:0;} + + .panel-collapse .list-group .list-group {margin: 0;margin-top: 10px;} + .panel-collapse .list-group-item li.list-group-item {margin: 0 -15px;border-top: 1px solid #ddd !important;border-bottom: 0;padding-left: 30px;} + .panel-collapse .list-group-item li.list-group-item:last-child {padding-bottom: 0;} + + .panel-collapse div.list-group div.list-group{margin: 0;} + .panel-collapse div.list-group .list-group a.list-group-item {border-top: 1px solid #ddd !important;border-bottom: 0;padding-left: 30px;} + .panel-collapse .list-group-item li.list-group-item {border-top: 1px solid #DDD !important;} diff --git a/static/webpage/apis_highlighter.js b/static/webpage/apis_highlighter.js new file mode 100644 index 0000000..1561440 --- /dev/null +++ b/static/webpage/apis_highlighter.js @@ -0,0 +1,183 @@ +function find_related_object(elem, data) { + for (i = 0; i < data.length; i++) { + if (elem === data[i]['id']) { + return data[i] + } + } +} + +function get_menu_object(elem) { + if (elem['kind'] == 'txt') { + var res = ''+elem['name']+''} + else if (elem['kind'] == 'frm') { + var res = ''+elem['name']+'' + } else if (elem['kind'] == 'fn') { + var res = ''+elem['name']+'' + } + + return res +} + +function updateObject(object, newValue, path){ + + var stack = path.split('>'); + + while (stack.length>1) { + object = object[stack.shift()]; + } + + object[stack.shift()] = newValue; + +} + +function create_nested_menu(data, data_list) { + //console.log(data) + var res = '' + for (x in data) { + + // res += '
  • '+data_list[x]['name'] + if (data[x] instanceof Object && Object.keys(data[x]).length > 0) { + res += ''+data_list[x]['name']+'\ +
    ' + res += create_nested_menu(data[x], data_list) + res += '
    ' + } else { + //console.log(data_list[x]) + res += get_menu_object(data_list[x]) + } + } + return res +} + +function create_apis_menu(data) { + var lst_m = [] + var len = 0 + for (i = 0; i < data['menuentry_set'].length; i++) { + //console.log(data['menuentry_set'][i]); + var lst = [] + var elem = data['menuentry_set'][i] + lst.push(elem) + while (elem.parent) { + if (!(elem.parent instanceof Object)) { + elem.parent = find_related_object(elem.parent, data['menuentry_set'])} + lst.push(elem.parent) + elem = elem.parent + } + lst_m.push(lst.reverse()); + if (lst.length > len) { + len = lst.length + } + } + var menu_2 = {} + var menu_2_lst = {} + for (x = 0; x < lst_m.length; x++) { + var s_n = menu_2 + for (u = 0; u < lst_m[x].length; u++) { + if (!(lst_m[x][u]['id'] in menu_2_lst)) { + s_n[lst_m[x][u]['id']] = {} + menu_2_lst[lst_m[x][u]['id']] = lst_m[x][u] + } + s_n = s_n[lst_m[x][u]['id']]} + } + var menu_html = create_nested_menu(menu_2, menu_2_lst) + menu_html += '' + menu_html = '
    ' + menu_html + return menu_html +} + + +function get_selected_text(txt_id) { + var element = document.getElementById(txt_id); + var start = 0, end = 0; + var sel, range, priorRange; + if (typeof window.getSelection != "undefined") { + range = window.getSelection().getRangeAt(0); + priorRange = range.cloneRange(); + priorRange.selectNodeContents(element); + priorRange.setEnd(range.startContainer, range.startOffset); + start = priorRange.toString().length; + end = start + range.toString().length; + } else if (typeof document.selection != "undefined" && + (sel = document.selection).type != "Control") { + range = sel.createRange(); + priorRange = document.body.createTextRange(); + priorRange.moveToElementText(element); + priorRange.setEndPoint("EndToStart", range); + start = priorRange.text.length; + end = start + range.text.length; + } + return { + start: start, + end: end, + rect: range.getBoundingClientRect() + }; +}; + + +function init_apis_highlighter(project_id, entity_id) { + $.get("/api/HLProjects/"+project_id.toString()+"/", function(data){ + //menu = create_apis_menu(data.results[0]) + //$( "#test_menu" ).append(menu) + //console.log(data) + $.ApisHigh = {} + $.ApisHigh.entity_id = entity_id + var lst_class = [] + for (i=0; i < data['texthigh_set'].length; i++) { + lst_class.push('.'+data['texthigh_set'][i]['text_class']) + } + var cl_2 = lst_class.join(', ') + $(cl_2).bind('mouseup',function() { + $.ApisHigh.selected_text = get_selected_text($(this).attr('id')) + $.ApisHigh.selected_text.id = $(this).attr('id') + }) + $(cl_2).tooltipster({ + content: 'Loading...', + contentAsHTML: true, + interactive: true, + trigger: 'click', + theme: 'tooltipster-light', + side: ['bottom'], + + functionPosition: function(instance, helper, position){ + //console.log(position) + position.coord.top = ($.ApisHigh.selected_text.rect.top + (position.distance + $.ApisHigh.selected_text.rect.height)); + position.coord.left = ($.ApisHigh.selected_text.rect.left - ((position.size.width/2)-($.ApisHigh.selected_text.rect.width/2))); + position.target = $.ApisHigh.selected_text.rect.left + ($.ApisHigh.selected_text.rect.width/2) + position.size.height = 'auto' + //console.log(position.target) + return position; + }, + // 'instance' is basically the tooltip. More details in the "Object-oriented Tooltipster" section. + functionBefore: function(instance, helper) { + if ($.ApisHigh.high_complex){ + $.ApisHigh.high_complex.close(); + }; + if ($.ApisHigh.selected_text.start == $.ApisHigh.selected_text.end) { + return false + } + var $origin = $(helper.origin); + // we set a variable so the data is only loaded once via Ajax, not every time the tooltip opens + if ($origin.data('loaded') !== true) { + + menu = create_apis_menu(data) + + // call the 'content' method to update the content of our tooltip with the returned data + instance.content(menu); + + + // to remember that the data has been loaded + $origin.data('loaded', true); + $.ApisHigh.data_original = menu; + + } else {//console.log('fired'); + + instance.content($.ApisHigh.data_original);} + $.ApisHigh.tt_instance = instance + }, + + }); + + //$.ApisHigh.tt_instance = $(cl_2).tooltipster('instance'); + }) +} + diff --git a/static/webpage/img/ACDH_Panorama_Postkarte_motiv02.jpg b/static/webpage/img/ACDH_Panorama_Postkarte_motiv02.jpg new file mode 100644 index 0000000..25c69be Binary files /dev/null and b/static/webpage/img/ACDH_Panorama_Postkarte_motiv02.jpg differ diff --git a/static/webpage/img/INZ-Logo.png b/static/webpage/img/INZ-Logo.png new file mode 100644 index 0000000..8f63900 Binary files /dev/null and b/static/webpage/img/INZ-Logo.png differ diff --git a/static/webpage/img/INZ-Logo_orig.jpg b/static/webpage/img/INZ-Logo_orig.jpg new file mode 100644 index 0000000..ff08b37 Binary files /dev/null and b/static/webpage/img/INZ-Logo_orig.jpg differ diff --git a/static/webpage/img/ISR_logo.png b/static/webpage/img/ISR_logo.png new file mode 100644 index 0000000..5f52de5 Binary files /dev/null and b/static/webpage/img/ISR_logo.png differ diff --git a/static/webpage/img/apis.png b/static/webpage/img/apis.png new file mode 100644 index 0000000..6e1697a Binary files /dev/null and b/static/webpage/img/apis.png differ diff --git a/static/webpage/img/dach_3et.jpg b/static/webpage/img/dach_3et.jpg new file mode 100644 index 0000000..5473625 Binary files /dev/null and b/static/webpage/img/dach_3et.jpg differ diff --git a/static/webpage/img/fassadehauptgebaeude.jpg b/static/webpage/img/fassadehauptgebaeude.jpg new file mode 100644 index 0000000..3fb7a55 Binary files /dev/null and b/static/webpage/img/fassadehauptgebaeude.jpg differ diff --git a/static/webpage/img/logo.png b/static/webpage/img/logo.png new file mode 100644 index 0000000..8403971 Binary files /dev/null and b/static/webpage/img/logo.png differ diff --git a/static/webpage/img/network.jpg b/static/webpage/img/network.jpg new file mode 100644 index 0000000..18375cd Binary files /dev/null and b/static/webpage/img/network.jpg differ diff --git a/static/webpage/img/places.jpg b/static/webpage/img/places.jpg new file mode 100644 index 0000000..155c01b Binary files /dev/null and b/static/webpage/img/places.jpg differ diff --git a/static/webpage/libraries/bower.json b/static/webpage/libraries/bower.json new file mode 100644 index 0000000..d5b150f --- /dev/null +++ b/static/webpage/libraries/bower.json @@ -0,0 +1,26 @@ +{ + "name": "libraries", + "description": "libraries for APIS", + "main": "libraries", + "license": "MIT", + "homepage": "", + "private": true, + "ignore": [ + "**/.*", + "node_modules", + "bower_components", + "test", + "tests" + ], + "dependencies": { + "jquery": "^3.2.1", + "bootstrap": "^3.3.7", + "bootstrap-multiselect": "^0.9.13", + "bootstrap-datepicker": "^1.7.0", + "jquery-tablesort": "^0.0.11", + "leaflet": "^1.1.0", + "tooltipster": "^4.2.5", + "leaflet.markercluster": "Leaflet.markercluster#^1.0.6", + "linkurious.js": "Linkurious/linkurious.js#^1.5.1" + } +} diff --git a/static/webpage/libraries/scroll-to-top/css/ap-scroll-top.min.css b/static/webpage/libraries/scroll-to-top/css/ap-scroll-top.min.css new file mode 100644 index 0000000..71bc8a2 --- /dev/null +++ b/static/webpage/libraries/scroll-to-top/css/ap-scroll-top.min.css @@ -0,0 +1 @@ +.apst-wrapper,.apst-wrapper::before,.apst-wrapper::after,.apst-wrapper *,.apst-wrapper *::before,.apst-wrapper *::after{-webkit-box-sizing:border-box;-moz-box-sizing:border-box;-ms-box-sizing:border-box;-o-box-sizing:border-box;box-sizing:border-box}.apst-wrapper{display:none;position:fixed;z-index:99999;cursor:pointer;box-sizing:border-box;-webkit-tap-highlight-color:rgba(0,0,0,0);-webkit-tap-highlight-color:transparent;-webkit-touch-callout:none;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none}.apst-top{top:20px}.apst-bottom{bottom:20px}.apst-left{left:20px}.apst-center{left:50%;margin-left:-40px}.apst-right{right:20px}.apst-button{width:80px;height:80px;background-color:#555;-webkit-border-radius:50%;-moz-border-radius:50%;-ms-border-radius:50%;-o-border-radius:50%;border-radius:50%}.apst-button,.apst-button::before{display:block;position:relative;-webkit-transition:all .2s;-moz-transition:all .2s;-ms-transition:all .2s;-o-transition:all .2s;transition:all .2s}.apst-button::before{content:"";left:29px;top:33px;width:22px;height:22px;border-right:6px solid #fff;border-top:6px solid #fff;-webkit-transform:rotate(-45deg);-moz-transform:rotate(-45deg);-ms-transform:rotate(-45deg);-o-transform:rotate(-45deg);transform:rotate(-45deg)}.apst-button:hover{background-color:#333}.apst-button:hover::before{border-color:#fff}@media only screen and (max-width:640px){.apst-center{margin-left:-35px}.apst-button{width:70px;height:70px}.apst-button::before{left:25px;top:27px;width:20px;height:20px}}@media only screen and (max-width:400px){.apst-center{margin-left:-30px}.apst-button{width:60px;height:60px}.apst-button::before{left:21px;top:23px;width:18px;height:18px;border-width:5px}} \ No newline at end of file diff --git a/static/webpage/libraries/scroll-to-top/js/ap-scroll-top.min.js b/static/webpage/libraries/scroll-to-top/js/ap-scroll-top.min.js new file mode 100644 index 0000000..5cf4af1 --- /dev/null +++ b/static/webpage/libraries/scroll-to-top/js/ap-scroll-top.min.js @@ -0,0 +1 @@ +!function(t){function i(t){t+="";var i=t[0].toUpperCase();return i+t.substr(1)}function s(i){this.settings=t.extend(!0,{},s.defaultSettings,i),this._init(),e=this}var e,r="apst-",o="apst",l="apst";String.prototype.ucfirst||(String.prototype.ucfirst=function(){return i(this)}),s.prototype={_init:function(){this._addScrollTopElement(),this._registerScrollEvent(),this._updateCssClasses(),this._updatePosition(),this._updateScrollElementVisibility(),this._trigger("init")},_addScrollTopElement:function(){var i=this;"function"==typeof this.settings.customButton?this._scrollTopWrapper=this.settings.customButton(this.settings):(this._scrollTopWrapper=t("
    ",{"class":r+"wrapper"}),this._scrollTopButton=t("
    ",{"class":r+"button"}),this._scrollTopWrapper.append(this._scrollTopButton)),this._scrollTopWrapper.data("visible",!1),t("body").append(this._scrollTopWrapper);var s=this._getButton();s.on("click."+o,function(){i.scrollTo()})},_getButton:function(){var t=this._scrollTopWrapper.find("."+r+"button");return 0==t.length&&(t=this._scrollTopWrapper),t},_registerScrollEvent:function(){var i=this;t(document).ready(function(){t(window).scroll(function(t){i._updateScrollElementVisibility()})})},_updateScrollElementVisibility:function(){var t=this;this.settings.enabled&&this._isVisible()&&!this._scrollTopWrapper.data("visible")?(this._scrollTopWrapper.stop(!0,!1).fadeIn(this.settings.visibilityFadeSpeed,function(){t._updateCssClasses(),t._trigger("toggle",{visible:!0})}),this._scrollTopWrapper.data("visible",!0)):(!this._isVisible()&&this._scrollTopWrapper.data("visible")||!this.settings.enabled)&&(this._scrollTopWrapper.stop(!0,!1).fadeOut(this.settings.visibilityFadeSpeed,function(){t._updateCssClasses(),t._trigger("toggle",{visible:!1})}),this._scrollTopWrapper.data("visible",!1))},_isVisible:function(){var i=t(window).scrollTop();if("function"==typeof this.settings.visibilityTrigger)return this.settings.visibilityTrigger(i);var s=parseInt(this.settings.visibilityTrigger);return i>=s},_updateCssClasses:function(){if(this.settings.enabled?(this._scrollTopWrapper.addClass(r+"enabled"),this._scrollTopWrapper.removeClass(r+"disabled")):(this._scrollTopWrapper.addClass(r+"disabled"),this._scrollTopWrapper.removeClass(r+"enabled")),this._scrollTopWrapper.data("visible")?(this._scrollTopWrapper.addClass(r+"visible"),this._scrollTopWrapper.removeClass(r+"hidden")):(this._scrollTopWrapper.addClass(r+"hidden"),this._scrollTopWrapper.removeClass(r+"visible")),"string"==typeof this.settings.theme||this.settings.theme.length>0){var t=r+"theme-"+this.settings.theme;this._scrollTopWrapper.hasClass(t)||this._scrollTopWrapper.addClass(t)}this._trigger("cssClassesUpdated")},_updatePosition:function(){var t=["top","bottom","left","center","right"];if("string"==typeof this.settings.position){var i=this.settings.position.split(" ");for(index in i){var s=i[index].trim();t.indexOf(s)>-1&&this._scrollTopWrapper.addClass(r+i[index])}this._trigger("positionUpdated")}},_trigger:function(i,s){var e="on"+i.ucfirst(),r=this.settings[e];"function"==typeof r&&r.apply(t(this),s),i=l+i.ucfirst(),t(this).trigger(i,s)},_triggerHandler:function(i,s){var e,r="on"+i.ucfirst(),o=this.settings[r],n=void 0;return"function"==typeof o&&(n=o.apply(t(this),s)),i=l+i.ucfirst(),e=void 0!==(e=t(this).triggerHandler(i,s))?e:n},enable:function(){this.settings.enabled||(this.settings.enabled=!0,this._updateCssClasses(),this._updateScrollElementVisibility(),this._trigger("enabled"))},disable:function(){this.settings.enabled&&(this.settings.enabled=!1,this._updateCssClasses(),this._updateScrollElementVisibility(),this._trigger("disabled"))},scrollTo:function(i,s){var e=this;i=void 0!=i?i:0,s=s?s:this.settings.scrollSpeed;var r=this._triggerHandler("beforeScrollTo",{position:i,speed:s});"number"==typeof r?i=parseInt(r):"object"==typeof r&&(r.position&&(i=parseInt(r.position)),r.speed&&(s=parseInt(r.speed))),t("html, body").animate({scrollTop:i},s,function(){e._trigger("scrolledTo",{position:i})})},option:function(i,s){if(!i)return t.extend({},this.settings);var e;if("string"==typeof i){if(1===arguments.length)return void 0!==this.settings[i]?this.settings[i]:null;e={},e[i]=s}else e=i;this._setOptions(e)},_setOptions:function(t){for(key in t){var i=t[key];if("position"==key&&this._scrollTopWrapper.removeClass(r+"top "+r+"bottom "+r+"left "+r+"center "+r+"right"),"theme"==key){var s=r+"theme-"+this.settings.theme;this._scrollTopWrapper.hasClass(s)&&this._scrollTopWrapper.removeClass(s)}this.settings[key]=i,["enabled","visibilityTrigger","theme"].indexOf(key)>-1&&this._updateCssClasses(),["enabled","visibilityTrigger"].indexOf(key)>-1&&this._updateScrollElementVisibility(),["position"].indexOf(key)>-1&&this._updatePosition()}},destroy:function(){this._trigger("destroy"),this._getButton().off("click."+o),this._scrollTopWrapper.remove()}},t.apScrollTop=function(i){if(e||new s(i),"string"==typeof i){var r,o,l=Array.prototype.slice.call(arguments,1);if("function"==typeof(r=e[i])&&"_"!==i.charAt(0))return o=r.apply(e,l),void 0!==o?o:t(e)}return t(e)},s.defaultSettings={enabled:!0,visibilityTrigger:100,visibilityFadeSpeed:150,scrollSpeed:250,position:"right bottom",customButton:void 0,theme:"default"}}(jQuery); \ No newline at end of file diff --git a/templates/webpage/apis.html b/templates/webpage/apis.html new file mode 100644 index 0000000..6221413 --- /dev/null +++ b/templates/webpage/apis.html @@ -0,0 +1,20 @@ +{% extends "webpage/base.html" %} +{% load staticfiles %} + +{% block content %} + +
    +

    APIS-Project

    +

    Mapping historical networks: Building the new Austrian Prosopographical | Biographical Information System

    +

    Abstract

    +
    +

    Das Österreichische Biographische Lexikon (ÖBL) ist das einzige enzyklopädische Werk in Mitteleuropa, das Lebens- und Karriereverläufe verdienter Persönlichkeiten des gesamten Gebiets der ehemaligen österreichisch-ungarischen Monarchie sowie der Ersten/Zweiten Republik erfasst. Basierend auf den rund 18.000 publizierten und bereits digital verfügbaren Biographien werden in Zusammenarbeit mit dem Austrian Centre for Digital Humanities (ACDH) und dem Institut für Stadt- und Regionalforschung (ISR) durch den Einsatz unterschiedlicher Methoden der Computerlinguistik (differenzierte, textlinguistische Erschließung), moderner IT-Strukturen und des Semantic Web Möglichkeiten geschaffen, um Lösungsansätze für Forschungsfragen im geistes-, sozial- und kulturwissenschaftlichen Kontext zu unterstützen und spezifische Auswertungen zu ermöglichen. Das ÖBL wird durch Transformation in eine adäquate Forschungsinfrastruktur maschinenlesbar (RDF, SKOS), semantisch angereichert, in der Linked Open Data Cloud publiziert (Open-Access Bereitstellung der Daten unter der CC-BY-NC Lizenz) sowie vollständig an internationale Standards angebunden (GND, VIAF); eine Integration in bestehende europäische Initiativen (DARIAH, CLARIN, EUROPEANA) ist projektiert. Dadurch wird zugleich die maximale Zugänglichkeit der Forschungsdaten erreicht.

    +

    Im Sinne transdisziplinärer Zusammenarbeit verbindet sich die Expertise des ÖBL (historisch-biographische Forschung) mit jener des ACDH im Bereich der Corpuslinguistik und Textechnologie zur Entwicklung innovativer Methoden, um beispielhaft konkreten sozialwissenschaftlichen Forschungsfragen des ISR eine neue Plattform zu bieten; parallel wird eine umfangreiche sozialwissenschaftliche und demographische Analyse der Wanderungsformen und Wanderungsmuster gesellschaftlicher Eliten im 19. und frühen 20. Jahrhundert mit besonderer Berücksichtigung der politischen Brüche innerhalb dieses Zeitraums erarbeitet/publiziert.

    +

    Das Projekt schlägt damit die Brücke von den Geisteswissenschaften über die Texttechnologie und Semantic Web-Ansätze zu den Sozialwissenschaften; es ist modellhaft, zukunftsweisend und realisiert Interdisziplinarität anhand eines konkreten „Werkstücks“. +

    +

    Contact

    +
  • Christine Gruber | OeBL/INZ OeAW
  • +
  • Eveline Wandl-Vogt | ACDH OeAW
  • + + +{% endblock %} \ No newline at end of file diff --git a/templates/webpage/base.html b/templates/webpage/base.html new file mode 100644 index 0000000..550f736 --- /dev/null +++ b/templates/webpage/base.html @@ -0,0 +1,302 @@ +{% load staticfiles %} + + + + + + {% block Titel %} Apis-WebApp {% endblock %} + + {% block metaDescription %} + + + {% endblock %} + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + {% block scriptHeader %} + {% endblock %} + + + + + + + + +
    +
    + Warning! Work in Progress. But entered data will be preserved. +
    + {% block content %} + {% endblock %} +
    + +
    +
    +
    +
    + + ACDH + +
    +
    + + INZ + +
    +
    +
    +
    + + ISR + +
    +
    + + APIS-Project + +
    +
    +
    +
    + {% block scripts %} + + + + + + + + {% endblock %} + + diff --git a/templates/webpage/confirm_delete.html b/templates/webpage/confirm_delete.html new file mode 100644 index 0000000..890342f --- /dev/null +++ b/templates/webpage/confirm_delete.html @@ -0,0 +1,36 @@ +{% extends "webpage/base.html" %} +{% block content %} + + + + + +{% endblock content %} +{% block scripts %} +{{block.super}} + +{% endblock scripts %} \ No newline at end of file diff --git a/templates/webpage/index.html b/templates/webpage/index.html new file mode 100644 index 0000000..23f5a7f --- /dev/null +++ b/templates/webpage/index.html @@ -0,0 +1,54 @@ +{% extends "webpage/base.html" %} +{% load staticfiles %} + +{% block content %} + +
    + +
    +
    +

    APIS
    + Austrian Prosopographical Information System

    +

    + This is a web application to + collect, + curate, + enrich, + analyze, + visualize, + and export + prosopgraphical and biographical data. + This web application is developed in the context of the APIS-Project.
    + First use cases are the are Modeling the Austrian Biographical Dictionary (Österreichisches Biograpisches Lexikon / ÖBL) and Semantic Academy (SemAc). +

    +
    +{% endblock %} diff --git a/templates/webpage/paas.html b/templates/webpage/paas.html new file mode 100644 index 0000000..9816527 --- /dev/null +++ b/templates/webpage/paas.html @@ -0,0 +1,21 @@ +{% extends "webpage/base.html" %} +{% load staticfiles %} + +{% block content %} + +
    +

    APIS PAAS

    +

    Prosopography of the Members of the Austrian Academy of Sciences 1847–2022

    +

    Abstract

    +
    +

    APIS PAAS is a web application to collect, analyze and evaluate prosopographical and biographical data of the approximately 3000 members of the Austrian Academy of Sciences 1847–2022. This prosopography is developed by the APIS-Project of the ACDH (Austrian Prosopographical | Biographical Information System | Austrian Centre for Digitial Humanities | AAS) in cooperation with the Working Group History of the Austrian Academy of Sciences (HAAS). + The open app will enable users to retrieve the life and career paths of about 3000 Academy members since 1847. Combined evaluation methods make possible an analysis of specific network structures and constellations in the field of science and scholarship of Central Europe. The data concerning persons, places, institutions, events and publications are gathered in a structured way and linked with the GND (Gemeinsame Normdatei, “common authority file”) of the German National Library, the German-speaking library associations, the ZDB (Zeitschriftenbank, “periodicals database”) and the GeoNames geographical database.

    +

    APIS PAAS is an essential part of the new history of the Austrian Academy of Sciences 1847–2022 that is being compiled by the Working Group History of the Austrian Academy of Sciences (HAAS) at the Austrian Academy of Sciences. +

    +

    Contact

    +
  • Johannes Feichtinger | IKT OeAW
  • +
  • Heidemarie Uhl | IKT OeAW
  • +
  • Peter Andorfer | ACDH OeAW
  • +
    +
    +{% endblock %} \ No newline at end of file diff --git a/templates/webpage/user_login.html b/templates/webpage/user_login.html new file mode 100644 index 0000000..b9f29ce --- /dev/null +++ b/templates/webpage/user_login.html @@ -0,0 +1,17 @@ +{% extends "webpage/base.html" %} + +{% block content %} + +

    +{% if form.errors %} + +

    Please correct the error{{ form.errors|pluralize }} below.

    + +{% endif %} + +{% load crispy_forms_tags %} + +{% crispy form form.helper %} + +
    +{% endblock %} diff --git a/templates/webpage/user_logout.html b/templates/webpage/user_logout.html new file mode 100644 index 0000000..12a243a --- /dev/null +++ b/templates/webpage/user_logout.html @@ -0,0 +1,15 @@ +{% extends "webpage/base.html" %} + +{% block Titel %}logout{% endblock %} + +{% block content %} + +
    + +

    Sayōnara!

    + +

    You've signed out

    + +
    + +{% endblock content %} diff --git a/tests.py b/tests.py new file mode 100644 index 0000000..7ce503c --- /dev/null +++ b/tests.py @@ -0,0 +1,3 @@ +from django.test import TestCase + +# Create your tests here. diff --git a/urls.py b/urls.py new file mode 100644 index 0000000..113c7ea --- /dev/null +++ b/urls.py @@ -0,0 +1,11 @@ +from django.conf.urls import url, include +from . import views + +urlpatterns = [ +url(r'^$', views.start_view, name="start"), +url(r'^paas-project/$', views.paas_view, name="paas-project"), +url(r'^apis-project/$', views.apis_view, name="apis-project"), +url(r'^login/$', views.user_login, name='user_login'), +url(r'^accounts/login/$', views.user_login, name='user_login'), +url(r'^logout/$', views.user_logout, name='user_logout'), +] \ No newline at end of file diff --git a/views.py b/views.py new file mode 100644 index 0000000..f5e4451 --- /dev/null +++ b/views.py @@ -0,0 +1,53 @@ +from django.shortcuts import render +from django.http import HttpResponse, HttpResponseRedirect, HttpResponseForbidden +from django.shortcuts import render, render_to_response, get_object_or_404, redirect +from django.template import RequestContext +from django.contrib.auth import authenticate, login, logout +from django.contrib.auth.decorators import login_required +from django.utils.decorators import method_decorator +from django.core.urlresolvers import reverse, reverse_lazy + +from .forms import form_user_login + + +def start_view(request): + context = RequestContext(request) + return render(request, 'webpage/index.html', context) + + +def paas_view(request): + context = RequestContext(request) + return render(request, 'webpage/paas.html', context) + +def apis_view(request): + context = RequestContext(request) + return render(request, 'webpage/apis.html', context) + + +################################################################# +# views for login/logout # +################################################################# + +def user_login(request): + errors=[] + if request.method == 'POST': + form = form_user_login(request.POST) + if form.is_valid(): + cd = form.cleaned_data + user = authenticate(username=cd['username'],password=cd['password']) + if user is not None: + if user.is_active: + login(request, user) + return HttpResponseRedirect(request.GET.get('next','/')) + else: + return HttpResponse('not active.') + else: + return HttpResponse('user does not exist') + else: + form = form_user_login() + return render(request, 'webpage/user_login.html', {'form':form}) + + +def user_logout(request): + logout(request) + return render_to_response('webpage/user_logout.html')