Commits

Frank Becker committed bba5ade

added assignment 2

Comments (0)

Files changed (23)

aufgaben/2/workshop/__init__.py

Empty file added.

aufgaben/2/workshop/data.sqlite

Binary file added.

aufgaben/2/workshop/data.sqlite-init

Binary file added.

aufgaben/2/workshop/local_settings.py

+import os
+
+DEBUG = True
+SANDBOX = True
+TEMPLATE_DEBUG = DEBUG
+
+BASEDIR = os.path.dirname(__file__)
+
+ADMINS = (
+    # ('Your Name', 'your_email@domain.com'),
+)
+
+MANAGERS = ADMINS
+
+DATABASES = {
+    'default': {
+        'ENGINE': 'django.db.backends.sqlite3',
+        'NAME': os.path.join(BASEDIR, 'data.sqlite'),
+    }
+}
+
+STATICFILES_DIRS = (
+    ('css/workshop', BASEDIR + '/templates/css/workshop'),
+    ('js/workshop', BASEDIR + '/templates/js/workshop'),
+    ('img/workshop', BASEDIR + '/templates/img/workshop'),
+)
+
+#EMAIL_HOST = 'smtp.gmail.com'
+#EMAIL_HOST_USER = 'username@googlemail.com'
+#EMAIL_HOST_PASSWORD = 'xxxxxxxx'
+#EMAIL_USE_TLS = True
+#EMAIL_PORT = 587
+
+# Absolute path to the directory that holds the project sources
+# Make sure to use a training slash
+STATIC_FILES_ROOT = '../../'
+APP_NAME = 'django'
+STATIC_APP_NAME = 'static'
+MEDIA_APP_NAME = 'media'
+
+SECRET_KEY = 'GNzqBomJ=uDe%4))Dx^o!vk+fIF@V5<2O4n94_SQl>HcPFZFTo'
+
+#CMS_MODERATOR = True
+#CMS_SHOW_START_DATE = True
+#CMS_SHOW_END_DATE = True

aufgaben/2/workshop/manage.py

+#!/usr/bin/env python
+from django.core.management import execute_manager
+try:
+    import settings # Assumed to be in the same directory.
+except ImportError:
+    import sys
+    sys.stderr.write("Error: Can't find the file 'settings.py' in the directory containing %r. It appears you've customized things.\nYou'll have to run django-admin.py, passing it your settings module.\n(If the file settings.py does indeed exist, it's causing an ImportError somehow.)\n" % __file__)
+    sys.exit(1)
+
+if __name__ == "__main__":
+    execute_manager(settings)

aufgaben/2/workshop/settings.py

+import os
+from local_settings import *
+
+gettext = lambda s: s
+
+# Absolute path to the directory that holds media.
+# Example: "/home/media/media.lawrence.com/"
+STATIC_ROOT = STATIC_FILES_ROOT + STATIC_APP_NAME + '/'
+MEDIA_ROOT = STATIC_FILES_ROOT + MEDIA_APP_NAME + '/'
+
+# URL that handles the media served from MEDIA_ROOT. Make sure to use a
+# trailing slash if there is a path component (optional in other cases).
+# Examples: "http://media.lawrence.com", "http://example.com/media/"
+STATIC_URL = '/static/'
+MEDIA_URL = '/media/'
+
+# URL prefix for admin media -- CSS, JavaScript and images. Make sure to use a
+# trailing slash.
+# Examples: "http://foo.com/media/", "/media/".
+ADMIN_MEDIA_PREFIX = '/static/admin/'
+
+ROOT_URLCONF = ".".join([BASEDIR.split(os.sep)[-1], "urls"])
+
+TEMPLATE_DIRS = (
+    # Put strings here, like "/home/html/django_templates" or "C:/www/django/templates".
+    # Always use forward slashes, even on Windows.
+    # Don't forget to use absolute paths, not relative paths.
+    #PROJECT_ROOT + APP_NAME + '/templates'
+    BASEDIR + '/templates',
+)
+
+# Django settings for project.
+SEND_BROKEN_LINK_EMAILS = True
+IGNORABLE_404_STARTS = ('/static/cms/wymeditor/lang/',)
+
+# Local time zone for this installation. Choices can be found here:
+# http://en.wikipedia.org/wiki/List_of_tz_zones_by_name
+# although not all choices may be available on all operating systems.
+# If running in a Windows environment this must be set to the same as your
+# system time zone.
+TIME_ZONE = 'Europe/Berlin'
+
+# Language code for this installation. All choices can be found here:
+# http://www.i18nguy.com/unicode/language-identifiers.html
+LANGUAGE_CODE = 'de-DE'
+
+LANGUAGES = (
+    ('de', gettext('German')),
+)
+
+SITE_ID = 1
+
+# If you set this to False, Django will make some optimizations so as not
+# to load the internationalization machinery.
+USE_I18N = True
+
+# List of callables that know how to import templates from various sources.
+TEMPLATE_LOADERS = (
+    'django.template.loaders.filesystem.load_template_source',
+    'django.template.loaders.app_directories.load_template_source',
+    'django.template.loaders.eggs.load_template_source',
+)
+
+TEMPLATE_CONTEXT_PROCESSORS = (
+    'django.core.context_processors.auth',
+    #'django.core.context_processors.debug',
+    'django.core.context_processors.request',
+    'django.core.context_processors.media',
+    'django.core.context_processors.static',
+    'cms.context_processors.media',
+    'django.core.context_processors.i18n',
+    'sekizai.context_processors.sekizai',
+)
+
+MIDDLEWARE_CLASSES = (
+    #'django.middleware.cache.UpdateCacheMiddleware',
+    'django.contrib.sessions.middleware.SessionMiddleware',
+    #'cms.middleware.multilingual.MultilingualURLMiddleware',
+    'django.contrib.auth.middleware.AuthenticationMiddleware',
+    'django.middleware.common.CommonMiddleware',
+    'cms.middleware.page.CurrentPageMiddleware',
+    'cms.middleware.user.CurrentUserMiddleware',
+    #'cms.middleware.media.PlaceholderMediaMiddleware',
+    #'django.middleware.cache.FetchFromCacheMiddleware',
+    'django.middleware.csrf.CsrfViewMiddleware',
+    'django.contrib.messages.middleware.MessageMiddleware',
+    'cms.middleware.toolbar.ToolbarMiddleware',
+    'pagination.middleware.PaginationMiddleware',
+)
+
+THUMBNAIL_PROCESSORS = (
+    'easy_thumbnails.processors.colorspace',
+    'easy_thumbnails.processors.autocrop',
+    #'easy_thumbnails.processors.scale_and_crop',
+    'filer.thumbnail_processors.scale_and_crop_with_subject_location',
+    'easy_thumbnails.processors.filters',
+)
+
+STATICFILES_FINDERS = (
+    'django.contrib.staticfiles.finders.FileSystemFinder',
+    'django.contrib.staticfiles.finders.AppDirectoriesFinder',
+    'compressor.finders.CompressorFinder',
+)
+
+CMS_TEMPLATES = (
+    ('start.html', gettext('start')),
+    ('standard.html', gettext('Standard')),
+    ('bright.html', gettext('heller Hintergrund')),
+)
+
+CMS_FRONTEND_LANGUAGES = ("de",)
+
+CMS_SEO_FIELDS = True
+
+CMS_PLACEHOLDER_CONF = {
+    'links': {
+        'plugins': ('FilePlugin', 'LinkPlugin', 'PicturePlugin', 'TextPlugin',
+                    'SnippetPlugin'),
+        'name': gettext("linke Spalte")
+    },
+
+    'mitte': {
+        'plugins': ('PicturePlugin', 'TextPlugin', 'SnippetPlugin',
+                    'CMSGalleryPlugin'),
+        'name': gettext("mittlere Spalte")
+    },
+
+    'rechts': {
+        'plugins': ('PicturePlugin', 'TextPlugin', 'SnippetPlugin',
+                    'CMSGalleryPlugin'),
+        'name': gettext("rechte Spalte")
+    },
+}
+
+COMPRESS_PRECOMPILERS = (
+    ('text/x-scss', 'pyscss -o {outfile} {infile}'),
+)
+
+COMPRESS_CSS_FILTERS = ['compressor.filters.csstidy.CSSTidyFilter',]
+
+INSTALLED_APPS = (
+    # Django related apps
+    'django.contrib.auth',
+    'django.contrib.contenttypes',
+    'django.contrib.sessions',
+    'django.contrib.sites',
+    'django.contrib.admin',
+    'django.contrib.staticfiles',
+    # django-cms related apps
+    'cms',
+    'cms.plugins.text',
+    'cms.plugins.picture',
+    'cms.plugins.link',
+    'cms.plugins.file',
+    'cms.plugins.snippet',
+    'cms.plugins.googlemap',
+    'cms.plugins.inherit',
+    'mptt',
+    'sekizai',
+    'publisher',
+    'menus',
+    # useful 3rd party apps
+    'compressor',
+    'easy_thumbnails',
+    'filer',
+    'south',
+    'pagination',
+    'tinymce',
+    # your own apps
+)
+TINYMCE_JS_URL = STATIC_URL + 'js/tiny_mce/tiny_mce.js'
+TINYMCE_DEFAULT_CONFIG = {
+    # General options
+   "mode": "exact",
+   "elements": "elm1",
+   "theme": "advanced",
+   "plugins": "safari,pagebreak,style,layer,table,save,advhr,advimage,advlink,emotions,iespell,insertdatetime,preview,media,searchreplace,print,contextmenu,paste,directionality,fullscreen,noneditable,visualchars,nonbreaking,xhtmlxtras,template,inlinepopups",
+
+    # Theme options
+   "theme_advanced_buttons1": "save,newdocument,|,bold,italic,underline,strikethrough,|,justifyleft,justifycenter,justifyright,justifyfull,styleselect,formatselect,fontselect,fontsizeselect",
+   "theme_advanced_buttons2": "cut,copy,paste,pastetext,pasteword,|,search,replace,|,bullist,numlist,|,outdent,indent,blockquote,|,undo,redo,|,link,unlink,anchor,image,cleanup,help,code,|,insertdate,inserttime,preview,|,forecolor,backcolor",
+   "theme_advanced_buttons3": "tablecontrols,|,hr,removeformat,visualaid,|,sub,sup,|,charmap,emotions,iespell,media,advhr,|,print,|,ltr,rtl,|,fullscreen",
+   "theme_advanced_buttons4": "insertlayer,moveforward,movebackward,absolute,|,styleprops,|,cite,abbr,acronym,del,ins,attribs,|,visualchars,nonbreaking,template,pagebreak",
+   "theme_advanced_toolbar_location": "top",
+   "theme_advanced_toolbar_align": "left",
+   "theme_advanced_statusbar_location": "bottom",
+   "theme_advanced_resizing":"True",
+    'theme': "advanced",
+    'language': "de",
+    'width': "100%",
+    'height': "100%",
+    'body_class': "mceForceColors",
+    # Skin options
+    'skin' : "default",
+    'content_css' : "/static/css/layout.css",
+}
+TINYMCE_DEFAULT_CONFIG = {
+    "mode" : "textareas",
+    "elements": "elm1",
+    "theme" : "advanced",
+    "language": "de",
+    "width": "100%",
+    "height": "600",
+    "content_css": "/static/css/layout.css",
+    "theme_advanced_toolbar_location" : "top",
+    "theme_advanced_toolbar_align" : "left",
+    "theme_advanced_buttons1" : "fullscreen,separator,preview,separator,bold,italic,underline,strikethrough,separator,bullist,numlist,outdent,indent,separator,undo,redo,separator,link,unlink,anchor,separator,image,cleanup,help,separator,code",
+    "theme_advanced_buttons2" : "",
+    "theme_advanced_buttons3" : "",
+    "auto_cleanup_word" : 'true',
+    "plugins" : "table,save,advhr,advimage,advlink,emotions,iespell,insertdatetime,preview,zoom,flash,searchreplace,print,contextmenu,fullscreen",
+    "plugin_insertdate_dateFormat" : "%d.%m/%Y",
+    "plugin_insertdate_timeFormat" : "%H:%M:%S",
+    "extended_valid_elements" : "a[name|href|target=_blank|title|onclick],img[class|src|border=0|alt|title|hspace|vspace|width|height|align|onmouseover|onmouseout|name],hr[class|width|size|noshade],font[face|size|color|style],span[class|align|style]",
+    "fullscreen_settings" : {
+        "theme_advanced_path_location" : "top",
+        "theme_advanced_buttons1" : "fullscreen,separator,preview,separator,cut,copy,paste,separator,undo,redo,separator,search,replace,separator,code,separator,cleanup,separator,bold,italic,underline,strikethrough,separator,forecolor,backcolor,separator,justifyleft,justifycenter,justifyright,justifyfull,separator,help",
+        "theme_advanced_buttons2" : "removeformat,styleselect,formatselect,fontselect,fontsizeselect,separator,bullist,numlist,outdent,indent,separator,link,unlink,anchor",
+        "theme_advanced_buttons3" : "sub,sup,separator,image,insertdate,inserttime,separator,tablecontrols,separator,hr,advhr,visualaid,separator,charmap,emotions,iespell,flash,separator,print"
+    }
+}
+
+if DEBUG:
+    import traceback
+    import logging
+
+    # Define a class that logs unhandled errors
+    class LogUncatchedErrors:
+        def process_exception(self, request, exception):
+            logging.error("Unhandled Exception on request for %s\n%s" %
+                                 (request.build_absolute_uri(),
+                                  traceback.format_exc()))
+    # And add it to the middleware classes
+    MIDDLEWARE_CLASSES += ('settings.LogUncatchedErrors',)
+
+    # set shown level of logging output to debug
+    logging.basicConfig(level=logging.DEBUG)

aufgaben/2/workshop/templates/404.html

+<!doctype html>
+<html>
+<head>
+  <meta charset="utf-8">
+  <title>Page Not Found :(</title> 
+  <style>
+	  body { text-align: center;}
+	  h1 { font-size: 50px; text-align: center }
+	  span[frown] { transform: rotate(90deg); display:inline-block; color: #bbb; }
+	  body { font: 20px Constantia, 'Hoefler Text',  "Adobe Caslon Pro", Baskerville, Georgia, Times, serif; color: #999; text-shadow: 2px 2px 2px rgba(200, 200, 200, 0.5); }
+	  ::-moz-selection{ background:#FF5E99; color:#fff; }
+	  ::selection { background:#FF5E99; color:#fff; } 
+	  article {display:block; text-align: left; width: 500px; margin: 0 auto; }
+	  
+	  a { color: rgb(36, 109, 56); text-decoration:none; }
+	  a:hover { color: rgb(96, 73, 141) ; text-shadow: 2px 2px 2px rgba(36, 109, 56, 0.5); }
+  </style>
+</head>
+<body>
+     <article>
+	  <h1>Not found <span frown>:(</span></h1>
+	   <div>
+	       <p>Sorry, but the page you were trying to view does not exist.</p>
+	       <p>It looks like this was the result of either:</p>
+	       <ul>
+		   <li>a mistyped address</li>
+		   <li>an out-of-date link</li>
+	       </ul>
+	   </div>
+	    
+	    <script>
+	    var GOOG_FIXURL_LANG = (navigator.language || '').slice(0,2),
+		GOOG_FIXURL_SITE = location.host;
+	    </script>
+	    <script src="http://linkhelp.clients.google.com/tbproxy/lh/wm/fixurl.js"></script>
+     </article>
+</body>
+</html>

aufgaben/2/workshop/templates/500.html

Empty file added.

aufgaben/2/workshop/templates/base.html

+{% load cms_tags menu_tags compress sekizai_tags %}
+<!doctype html>
+<!--[if lt IE 7]> <html class="no-js ie6 oldie" lang="en"> <![endif]-->
+<!--[if IE 7]>    <html class="no-js ie7 oldie" lang="en"> <![endif]-->
+<!--[if IE 8]>    <html class="no-js ie8 oldie" lang="en"> <![endif]-->
+<!--[if gt IE 8]><!--> <html class="no-js" lang="en"> <!--<![endif]-->
+<head>
+    <meta charset="utf-8">
+    <title>{% page_attribute page_title %}</title>
+    <meta name="description" content="{% page_attribute meta_description %}">
+    <meta name="author" content="">
+    <meta name="viewport" content="width=device-width, initial-scale=1.0">
+    <link rel="shortcut icon" href="{{ STATIC_URL }}img/favicon.ico">
+    <link rel="apple-touch-icon" href="{{ STATIC_URL }}img/apple-touch-icon.png">
+    <link rel="stylesheet" href="{{ STATIC_URL }}css/boilerplate.css" type="text/css">
+    <link rel="stylesheet" href="{{ STATIC_URL }}css/1140.css" type="text/css" media="screen" />
+    <!--[if lte IE 9]>
+        <link rel="stylesheet" href="{{ STATIC_URL }}css/ie.css" type="text/css" media="screen" />
+    <![endif]-->
+    {% comment %}
+    <link rel="stylesheet" href="{{ STATIC_URL }}css/workshop/styles.css" type="text/css" media="screen">
+    {% endcomment %}
+    {% compress css %}
+        <link rel="stylesheet" href="{{ STATIC_URL }}css/workshop/styles.scss" type="text/x-scss">
+        <link rel="stylesheet" href="{{ STATIC_URL }}css/boilerplate_media.css" type="text/css">
+    {% endcompress %}
+    {% render_block "css" %}
+    <link rel="stylesheet" type="text/css" href="{{ STATIC_URL }}css/workshop/jquery.thumbox.1.3.css" />
+    <script src="{{ STATIC_URL }}js/libs/modernizr-2.0.6.min.js"></script>
+</head>
+
+<body>
+
+<div id="container" class="container">
+    <div id="middle">
+            <header>
+                <div class="row">
+                    <div id="label" class="sixcol last">
+                        <p>
+                            <a href="/">Aufgabe 2: erste Seite</a>
+                        </p>
+                    </div>
+                </div>
+            </header>
+        <div id="inner">
+            <div id="main" role="main">
+                <div class="row">
+                    <div class="twelvecol content-padding"></div>
+                </div>
+                <div class="row">
+                    <div id="content-left" class="threecol content">
+                        {% block left %}
+                            <div id="main-menu">
+                                <ul>
+                                    {% show_menu 0 0 0 0 "menu/menu.html" %}
+                                </ul>
+                            </div>
+                            {% placeholder links %}
+                        {% endblock left %}
+                    </div>
+                    <div id="content-middle" class="sixcol content">
+                        {% block middle %}
+                            <p>Six columns</p>
+                        {% endblock middle %}
+                    </div>
+                    <div id="content-right" class="threecol content last">
+                        {% block right %}
+                            <p>Three columns</p>
+                        {% endblock right %}
+                    </div>
+                </div>
+                <div class="row">
+                    <div class="twelvecol content-padding"></div>
+                </div>
+                <img id="stamp" src="{{ STATIC_URL }}img/workshop/django-cms-logo-small.jpg" alt="">
+            </div>
+
+{% comment %}
+            <footer>
+                <div class="row">
+                    <div class="twelvecol">
+                        <p>Twelve columns</p>
+                    </div>
+                </div>
+            </footer>
+{% endcomment %}
+        </div>
+    </div>
+</div>
+
+<div id="background">
+    <div>
+        <table cellpadding="0" cellspacing="0">
+            <tbody>
+            <tr>
+                <td>
+                    <img alt="" src="{{ STATIC_URL }}img/workshop/background_1.jpg">
+                </td>
+            </tr>
+            </tbody>
+        </table>
+    </div>
+</div>
+  <script src="//ajax.googleapis.com/ajax/libs/jquery/1.6.2/jquery.min.js"></script>
+  {% compress js %}
+  <script>window.jQuery || document.write('<script src="{{ STATIC_URL }}js/libs/jquery-1.6.2.min.js"><\/script>')</script>
+  <script src="{{ STATIC_URL }}js/script.js" type="text/javascript"></script>
+  <!--
+  <script type="text/javascript">
+    var _gaq = _gaq || [];
+    _gaq.push(['_setAccount','XX-XXXXXXX-XX']);
+    _gaq.push(['_gat._anonymizeIp']);
+    _gaq.push(['_trackPageview']);
+    (function() {
+      var ga = document.createElement('script'); ga.type = 'text/javascript'; ga.async = true;
+      ga.src = ('https:' == document.location.protocol ? 'https://ssl' : 'http://www') + '.google-analytics.com/ga.js';
+      var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(ga, s);
+    })();
+  </script>
+  -->
+  {% endcompress %}
+  <script type="text/javascript" src="{{ STATIC_URL }}js/workshop/jquery.tools.min.js"></script>
+  {% render_block "js" %}
+  {% block replace_js %}
+      <script type="text/javascript" src="{{ STATIC_URL }}js/workshop/jquery.easing.1.3.js"></script>
+      <script type="text/javascript" src="{{ STATIC_URL }}js/workshop/jquery.thumbox.1.3.js"></script>
+<script type="text/javascript">
+    $(function(){
+        $('#gallery').thumbox();
+        $("#gallery img[title]").tooltip();
+    })
+</script>
+  {% endblock replace_js %}
+
+</body>
+</html>

aufgaben/2/workshop/templates/bright.html

+{% extends "base.html" %}
+
+{% load cms_tags menu_tags thumbnail compress sekizai_tags %}
+{% block middle %}
+    {% placeholder mitte %}
+    {% addtoblock "css" %}
+        {% compress css %}
+        <link rel="stylesheet" href="{{ STATIC_URL }}css/bal/styles-bright.scss" type="text/x-scss">
+        {% endcompress %}
+    {% endaddtoblock %}
+{% endblock middle %}
+{% block right %}
+    {% placeholder rechts %}
+{% endblock right %}
+{% addtoblock "js" %}
+{% endaddtoblock %}

aufgaben/2/workshop/templates/css/workshop/jquery.thumbox.1.3.css

+/** 
+  * 
+  * Thumbox - plugin para galeria de imagens
+  *
+  *  @author     Jose Raimundo de Sousa Neto <sputinykster@gmail.com>
+  *  @version    1.3
+  *  @link       http://www.jneto.net.br
+  *  @since      1.0
+  *  
+  **/
+#thumbox-dock *, #thumbox-overlay, #thumbox-image, #thumbox-border, #thumbox-loader, #thumbox-close, #thumbox-buttonNext, #thumbox-buttonPrev, #thumbox-label{
+	margin:0;
+	padding:0;
+	border:0;
+}
+#thumbox-dock{
+	position:absolute;
+	z-index:9996;
+	background:#000;
+	top:-5000px;
+	left:-5000px
+}
+#thumbox-dock .thumbox-scrollerpages{
+	overflow:hidden;
+	float:left;
+	position: relative;
+}
+#thumbox-dock .thumbox-pages{
+	position:relative;
+	width:100%;
+	left:0;
+}
+#thumbox-dock .thumbox-page{
+	text-align:center;
+	float:left;
+}
+#thumbox-dock .thumbox-page img{
+	margin:10px;
+	cursor:pointer;
+	border:4px #333 solid;
+        -moz-border-radius: 3px;
+        border-radius: 3px;
+}
+#thumbox-dock .thumbox-arrowdock{
+	width:20px;
+	cursor:pointer;
+	float:left;
+	background:#333 no-repeat center center;
+}
+#thumbox-dock .thumbox-leftarrow{
+	background-image:url(../../img/bal/thumbox-prev.png);
+}
+#thumbox-dock .thumbox-rightarrow{
+	background-image:url(../../img/bal/thumbox-next.png);
+}
+#thumbox-overlay{
+	position:absolute;
+	z-index:9995;
+	top:0;
+	left:0;
+  	-ms-filter: "progid:DXImageTransform.Microsoft.Alpha(Opacity=0)";
+  	filter: alpha(opacity=0);
+  	-moz-opacity: 0.0;
+  	-khtml-opacity: 0.0;
+  	opacity: 0.0;
+}
+.thumbox-hoverImage, .thumbox-currentImage{
+	border-color:#DDD !important;
+}
+#thumbox-image{
+	position:absolute;
+	z-index:9998;
+}
+#thumbox-border{
+	position:absolute;
+	z-index:9997;
+	background:#FFF;
+        -moz-border-radius: 8px;
+        border-radius: 8px;
+}
+
+#thumbox-loader{
+	position:absolute;
+	z-index:9999;
+	width:128px;
+	height:15px;
+	background:url(../../img/bal/thumbox-loader.gif)
+}
+#thumbox-close{
+	position:absolute;
+	z-index:9999;
+	width:30px;
+	height:30px;
+	background:url(../../img/bal/thumbox-close.png);
+	cursor:pointer;
+}
+#thumbox-buttonNext, #thumbox-buttonPrev{
+	width:41px;
+	height:66px;
+	position:absolute;
+	z-index:9999;
+	cursor:pointer;
+}
+#thumbox-buttonNext{
+	background:url(../../img/bal/thumbox-nextImg.png);
+}
+#thumbox-buttonPrev{
+	background:url(../../img/bal/thumbox-prevImg.png);
+}
+#thumbox-label{
+	background:url(../../img/bal/thumbox-bgLabel.png);
+	position:absolute;
+	z-index:9999;
+	color:#FFF;
+	font-size:15px;
+	font-family:"Lucida Grande",Helvetica,Arial,Verdana,sans-serif;
+	padding:5px;
+        -moz-border-radius: 5px;
+        border-radius: 5px;
+}

aufgaben/2/workshop/templates/css/workshop/styles-bright.scss

+@option compress: no;
+$content_background_color: #b5a894;
+$content_foreground_color: #211309;
+$font_name: CtRo;
+
+@font-face {
+    font-family: $font_name;
+    src: url("/static/img/bal/CtRo.ttf");
+}
+
+html,body,#background,#background table,#background td,#container {
+    width:100%;
+    height:100%;
+    overflow:hidden;
+}
+
+body{
+    font-family: $font_name,"Trebuchet MS",Helvetica,Verdana,Arial,sans-serif;
+    font-size:1.5em;
+    cursor:default;
+    /* background:url(loading.gif); */
+    color:#000
+}
+
+.sixcol {
+    width: 47%;
+}
+
+header {
+    color: $content_background_color;
+    a, a:visited, a:link {
+        text-decoration: none;
+        color: $content_background_color;
+    }
+}
+
+#container {
+    position:absolute;
+    overflow:hidden;
+    z-index:10;
+}
+.container {
+    padding-left:0px;
+    padding-right:0px;
+}
+#container[id] {
+    display: table;
+    /* position: static; */
+}
+
+#label {
+    font-variant: small-caps;
+    font-size: 2em;
+}
+
+.content-padding {
+    height: 55px;
+}
+
+.content {
+    min-height: 480px;
+}
+
+#content-left {
+  border-right: 2px dashed #608b9c;
+  margin-right: 3.8%;
+  padding-right: 3.8%;
+  width: 18.2%;
+}
+
+#content-middle {
+    color: $content_foreground_color;
+}
+
+#content-right {
+  border-left: 2px dashed #608b9c;
+  padding-left: 3.8%;
+  width: 18.2%;
+}
+
+#main-menu {
+    text-align: right;
+    text-decoration: none;
+    text-transform: uppercase;
+    ul li.selected a {
+            color: #f34013;
+    }
+    ul li {
+        list-style-type: none;
+        line-height: 1.8em;
+        a {
+            color: #d4e7eb;
+            text-decoration: none;
+        }
+    }
+}
+#fixed-menu {
+    margin-top:20%;
+    text-align: right;
+    text-decoration: none;
+    text-transform: uppercase;
+    ul li.selected a {
+            color: #f34013;
+    }
+    ul li {
+        list-style-type: none;
+        line-height: 1.8em;
+        a {
+            color: $content_foreground_color;
+            text-decoration: none;
+        }
+    }
+}
+
+#background {
+  div {position:absolute;width:200%;height:200%;top:-50%;left:-50%;}
+  td {vertical-align:middle;text-align:center;}
+  img {min-height:50%;min-width:50%;margin:0 auto;}
+}
+
+#middle {
+    position: static;
+    top: 50%;
+}
+
+#middle[id] {
+    display: table-cell;
+    vertical-align: middle;
+    width: 100%;
+}
+#inner {
+    position: relative;
+    top: -50%;
+    color: $content_foreground_color;
+    background: $content_background_color;
+    min-height: 590px;
+}
+
+img#stamp {
+    position: absolute;
+    right: 0;
+    bottom: 55px;
+}
+
+#gallery {
+	overflow: hidden;
+}
+#gallery table {
+    width: 100%;
+}
+
+#gallery table tbody tr td {
+	align: center;
+
+}
+
+#gallery {
+    overflow: hidden;
+    table tbody {
+	    align: center;
+        tr {
+	        align: center;
+            td {
+	            align: center;
+                img {
+                    width: 150px;
+                    height: 130px;
+                    margin-right: 10%;
+                    margin-left: 10%;
+                    margin-bottom: 20%;
+                    -moz-box-shadow: 0 0 5px #888;
+                    -webkit-box-shadow: 0 0 5px#888;
+                    box-shadow: 0 0 5px #888;
+                }
+                .pix {
+                    width: 150px;
+                    height: 130px;
+                    margin-right: 10%;
+                    margin-left: 10%;
+                    margin-bottom: 20%;
+                }
+            }
+        }
+    }
+}
+
+.tooltip {
+	display:none;
+	background:transparent url(/static/img/bal/black_arrow.png);
+    background-size: 100%;
+    background-repeat: no-repeat;
+    background-origin: content;
+    src: url("/static/img/bal/CtRo.ttf") format("truetype");
+	font-size:12px;
+	min-height:70px;
+	width:160px;
+	padding:25px;
+	color:#fff;
+    z-index:15;
+}
+
+#scrollable {
+   /* required settings */
+	position:relative;
+	overflow:hidden;
+	/* width: 610px; */
+	min-height:480px;
+   .items {
+       	/* this cannot be too large */
+	    width:20000em;
+	    position:absolute;
+	    div {
+	        float:left;
+	        img {
+	            min-height:400px;
+	            max-height:580px;
+	            min-width:300px;
+	            max-width:600px;
+	        }
+	    }
+   }
+}
+
+.hide {
+    visibility:hidden;
+}
+
+.pagination {
+    text-align: right;
+	text-transform: uppercase;
+    .disabled {
+        visibility: hidden;
+    }
+    a {
+        text-decoration: none;
+	    color: #608b9c;
+    }
+}
+

aufgaben/2/workshop/templates/css/workshop/styles.css

+@font-face {
+  font-family: CtRo;
+  src: url("/static/img/bal/CtRo.ttf");
+}
+#background, #background table, #background td, #container, body,
+html {
+  width: 100%;
+  height: 100%;
+  overflow: hidden;
+}
+body {
+  font-family: CtRo, "Trebuchet MS", Helvetica, Verdana, Arial, sans-serif;
+  font-size: 1.5em;
+  cursor: default;
+  color: #000;
+}
+.sixcol {
+  width: 47%;
+}
+header {
+  color: #281810;
+}
+header a, header a:link, header a:visited {
+  text-decoration: none;
+  color: #281810;
+}
+#container {
+  position: absolute;
+  overflow: hidden;
+  z-index: 10;
+}
+.container {
+  padding-left: 0px;
+  padding-right: 0px;
+}
+#container[id] {
+  display: table;
+}
+#label {
+  font-variant: small-caps;
+  font-size: 2em;
+}
+.content-padding {
+  height: 55px;
+}
+.content {
+  min-height: 480px;
+}
+#content-left {
+  border-right: 2px dashed #608b9c;
+  margin-right: 3.8%;
+  padding-right: 3.8%;
+  width: 18.2%;
+}
+#content-middle {
+  color: #ffffff;
+}
+#content-right {
+  border-left: 2px dashed #608b9c;
+  padding-left: 3.8%;
+  width: 18.2%;
+}
+#main-menu {
+  text-align: right;
+  text-decoration: none;
+  text-transform: uppercase;
+}
+#main-menu ul li.selected a {
+  color: #f34013;
+}
+#main-menu ul li {
+  list-style-type: none;
+  line-height: 1.8em;
+}
+#main-menu ul li a {
+  color: #d4e7eb;
+  text-decoration: none;
+}
+#fixed-menu {
+  margin-top: 20%;
+  text-align: right;
+  text-decoration: none;
+  text-transform: uppercase;
+}
+#fixed-menu ul li.selected a {
+  color: #f34013;
+}
+#fixed-menu ul li {
+  list-style-type: none;
+  line-height: 1.8em;
+}
+#fixed-menu ul li a {
+  color: #608b9c;
+  text-decoration: none;
+}
+#background div {
+  position: absolute;
+  width: 200%;
+  height: 200%;
+  top: -50%;
+  left: -50%;
+}
+#background td {
+  vertical-align: middle;
+  text-align: center;
+}
+#background img {
+  min-height: 50%;
+  min-width: 50%;
+  margin: 0 auto;
+}
+#middle {
+  position: static;
+  top: 50%;
+}
+#middle[id] {
+  display: table-cell;
+  vertical-align: middle;
+  width: 100%;
+}
+#inner {
+  position: relative;
+  top: -50%;
+  color: #608b9c;
+  background: #281810;
+  min-height: 590px;
+}
+img#stamp {
+  position: absolute;
+  right: 0;
+  bottom: 55px;
+}
+#gallery {
+  overflow: hidden;
+}
+#gallery table {
+  width: 100%;
+}
+#gallery table tbody tr td {
+  align: center;
+}
+#gallery {
+  overflow: hidden;
+}
+#gallery table tbody {
+  align: center;
+}
+#gallery table tbody tr {
+  align: center;
+}
+#gallery table tbody tr td {
+  align: center;
+}
+#gallery table tbody tr td img {
+  width: 150px;
+  height: 130px;
+  margin-right: 10%;
+  margin-left: 10%;
+  margin-bottom: 20%;
+  -moz-box-shadow: 0 0 5px #888;
+  -webkit-box-shadow: 0 0 5px#888;
+  box-shadow: 0 0 5px #888;
+}
+#gallery table tbody tr td .pix {
+  width: 150px;
+  height: 130px;
+  margin-right: 10%;
+  margin-left: 10%;
+  margin-bottom: 20%;
+}
+.tooltip {
+  display: none;
+  background: transparent url(/static/img/bal/black_arrow.png);
+  background-size: 100%;
+  background-repeat: no-repeat;
+  background-origin: content;
+  src: url("/static/img/bal/CtRo.ttf") format("truetype");
+  font-size: 12px;
+  min-height: 70px;
+  width: 160px;
+  padding: 25px;
+  color: #fff;
+  z-index: 15;
+}
+#scrollable {
+  position: relative;
+  overflow: hidden;
+  min-height: 480px;
+}
+#scrollable .items {
+  width: 20000em;
+  position: absolute;
+}
+#scrollable .items div {
+  float: left;
+}
+#scrollable .items div img {
+  min-height: 400px;
+  max-height: 580px;
+  min-width: 300px;
+  max-width: 600px;
+}
+.hide {
+  visibility: hidden;
+}
+.pagination {
+  text-align: right;
+  text-transform: uppercase;
+}
+.pagination .disabled {
+  visibility: hidden;
+}
+.pagination a {
+  text-decoration: none;
+  color: #608b9c;
+}
+

aufgaben/2/workshop/templates/css/workshop/styles.scss

+@option compress: no;
+
+$content_background_color: #163009;
+$content_foreground_color: #608b9c;
+$font_name: Ubuntu;
+
+@font-face {
+    font-family: $font_name;
+    src: url("/static/img/workshop/Ubuntu-B.ttf");
+}
+
+html,body,#background,#background table,#background td,#container {
+    width:100%;
+    height:100%;
+    overflow:hidden;
+}
+
+body{
+    font-family: $font_name,"Trebuchet MS",Helvetica,Verdana,Arial,sans-serif;
+    font-size:1.5em;
+    cursor:default;
+    /* background:url(loading.gif); */
+    color:#000;
+}
+
+.sixcol {
+    width: 47%;
+}
+
+header {
+    color: $content_foreground_color;
+    a, a:visited, a:link {
+        text-decoration: none;
+        color: #ccff99;
+    }
+}
+
+#container {
+    position:absolute;
+    overflow:hidden;
+    z-index:10;
+}
+.container {
+    padding-left:0px;
+    padding-right:0px;
+}
+#container[id] {
+    display: table;
+    /* position: static; */
+}
+
+#label {
+    font-variant: small-caps;
+    font-size: 2em;
+}
+
+.content-padding {
+    height: 55px;
+}
+
+.content {
+    min-height: 480px;
+}
+
+#content-left {
+  border-right: 2px dashed $content_foreground_color;
+  margin-right: 3.8%;
+  padding-right: 3.8%;
+  width: 18.2%;
+}
+
+#content-middle {
+    color: white;
+}
+
+#content-right {
+  border-left: 2px dashed $content_foreground_color;
+  padding-left: 3.8%;
+  width: 18.2%;
+}
+
+#main-menu {
+    text-align: right;
+    text-decoration: none;
+    text-transform: uppercase;
+    ul li.selected a {
+            color: #f34013;
+    }
+    ul li.ancestor a {
+            color: #f34013;
+    }
+    ul li {
+        list-style-type: none;
+        line-height: 1.8em;
+        a {
+            color: #d4e7eb;
+            text-decoration: none;
+        }
+    }
+}
+#fixed-menu {
+    margin-top:20%;
+    text-align: right;
+    text-decoration: none;
+    text-transform: uppercase;
+    ul li.selected a {
+            color: #f34013;
+    }
+    ul li {
+        list-style-type: none;
+        line-height: 1.8em;
+        a {
+            color: $content_foreground_color;
+            text-decoration: none;
+        }
+    }
+}
+
+#background {
+  div {position:absolute;width:200%;height:200%;top:-50%;left:-50%;}
+  td {vertical-align:middle;text-align:center;}
+  img {min-height:50%;min-width:50%;margin:0 auto;}
+}
+
+#middle {
+    position: static;
+    top: 50%;
+}
+
+#middle[id] {
+    display: table-cell;
+    vertical-align: middle;
+    width: 100%;
+}
+#inner {
+    position: relative;
+    top: -50%;
+    color: $content_foreground_color;
+    background: $content_background_color;
+    min-height: 590px;
+}
+
+img#stamp {
+    position: absolute;
+    right: 0;
+    bottom: 55px;
+}
+
+#gallery {
+	overflow: hidden;
+}
+#gallery table {
+    width: 100%;
+}
+
+#gallery table tbody tr td {
+	align: center;
+
+}
+
+#gallery {
+    overflow: hidden;
+    table tbody {
+	    align: center;
+        tr {
+	        align: center;
+            td {
+	            align: center;
+                img {
+                    width: 150px;
+                    height: 130px;
+                    margin-right: 10%;
+                    margin-left: 10%;
+                    margin-bottom: 20%;
+                    -moz-box-shadow: 0 0 5px #888;
+                    -webkit-box-shadow: 0 0 5px#888;
+                    box-shadow: 0 0 5px #888;
+                }
+                .pix {
+                    width: 150px;
+                    height: 130px;
+                    margin-right: 10%;
+                    margin-left: 10%;
+                    margin-bottom: 20%;
+                }
+            }
+        }
+    }
+}
+
+.tooltip {
+	display:none;
+	background:transparent url(/static/img/bal/black_arrow.png);
+    background-size: 100%;
+    background-repeat: no-repeat;
+    background-origin: content;
+    src: url("/static/img/bal/CtRo.ttf") format("truetype");
+	font-size:12px;
+	min-height:70px;
+	width:160px;
+	padding:25px;
+	color:#fff;
+    z-index:15;
+}
+
+#scrollable {
+   /* required settings */
+	position:relative;
+	overflow:hidden;
+	/* width: 610px; */
+	min-height:480px;
+   .items {
+       	/* this cannot be too large */
+	    width:20000em;
+	    position:absolute;
+	    div {
+	        float:left;
+	        img {
+	            min-height:400px;
+	            max-height:580px;
+	            min-width:300px;
+	            max-width:600px;
+	        }
+	    }
+   }
+}
+
+.hide {
+    visibility:hidden;
+}
+
+.pagination {
+    text-align: right;
+	text-transform: uppercase;
+    .disabled {
+        visibility: hidden;
+    }
+    a {
+        text-decoration: none;
+	    color: $content_foreground_color;
+    }
+}

aufgaben/2/workshop/templates/img/workshop/Ubuntu-B.ttf

Binary file added.

aufgaben/2/workshop/templates/img/workshop/background_1.jpg

Added
New image

aufgaben/2/workshop/templates/img/workshop/django-cms-logo-small.jpg

Added
New image

aufgaben/2/workshop/templates/js/workshop/jquery.easing.1.3.js

+/*
+ * jQuery Easing v1.3 - http://gsgd.co.uk/sandbox/jquery/easing/
+ *
+ * Uses the built in easing capabilities added In jQuery 1.1
+ * to offer multiple easing options
+ *
+ * TERMS OF USE - jQuery Easing
+ * 
+ * Open source under the BSD License. 
+ * 
+ * Copyright © 2008 George McGinley Smith
+ * All rights reserved.
+ * 
+ * Redistribution and use in source and binary forms, with or without modification, 
+ * are permitted provided that the following conditions are met:
+ * 
+ * Redistributions of source code must retain the above copyright notice, this list of 
+ * conditions and the following disclaimer.
+ * Redistributions in binary form must reproduce the above copyright notice, this list 
+ * of conditions and the following disclaimer in the documentation and/or other materials 
+ * provided with the distribution.
+ * 
+ * Neither the name of the author nor the names of contributors may be used to endorse 
+ * or promote products derived from this software without specific prior written permission.
+ * 
+ * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND ANY 
+ * EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
+ * MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE
+ *  COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
+ *  EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE
+ *  GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED 
+ * AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
+ *  NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED 
+ * OF THE POSSIBILITY OF SUCH DAMAGE. 
+ *
+*/
+
+// t: current time, b: begInnIng value, c: change In value, d: duration
+jQuery.easing['jswing'] = jQuery.easing['swing'];
+
+jQuery.extend( jQuery.easing,
+{
+	def: 'easeOutQuad',
+	swing: function (x, t, b, c, d) {
+		//alert(jQuery.easing.default);
+		return jQuery.easing[jQuery.easing.def](x, t, b, c, d);
+	},
+	easeInQuad: function (x, t, b, c, d) {
+		return c*(t/=d)*t + b;
+	},
+	easeOutQuad: function (x, t, b, c, d) {
+		return -c *(t/=d)*(t-2) + b;
+	},
+	easeInOutQuad: function (x, t, b, c, d) {
+		if ((t/=d/2) < 1) return c/2*t*t + b;
+		return -c/2 * ((--t)*(t-2) - 1) + b;
+	},
+	easeInCubic: function (x, t, b, c, d) {
+		return c*(t/=d)*t*t + b;
+	},
+	easeOutCubic: function (x, t, b, c, d) {
+		return c*((t=t/d-1)*t*t + 1) + b;
+	},
+	easeInOutCubic: function (x, t, b, c, d) {
+		if ((t/=d/2) < 1) return c/2*t*t*t + b;
+		return c/2*((t-=2)*t*t + 2) + b;
+	},
+	easeInQuart: function (x, t, b, c, d) {
+		return c*(t/=d)*t*t*t + b;
+	},
+	easeOutQuart: function (x, t, b, c, d) {
+		return -c * ((t=t/d-1)*t*t*t - 1) + b;
+	},
+	easeInOutQuart: function (x, t, b, c, d) {
+		if ((t/=d/2) < 1) return c/2*t*t*t*t + b;
+		return -c/2 * ((t-=2)*t*t*t - 2) + b;
+	},
+	easeInQuint: function (x, t, b, c, d) {
+		return c*(t/=d)*t*t*t*t + b;
+	},
+	easeOutQuint: function (x, t, b, c, d) {
+		return c*((t=t/d-1)*t*t*t*t + 1) + b;
+	},
+	easeInOutQuint: function (x, t, b, c, d) {
+		if ((t/=d/2) < 1) return c/2*t*t*t*t*t + b;
+		return c/2*((t-=2)*t*t*t*t + 2) + b;
+	},
+	easeInSine: function (x, t, b, c, d) {
+		return -c * Math.cos(t/d * (Math.PI/2)) + c + b;
+	},
+	easeOutSine: function (x, t, b, c, d) {
+		return c * Math.sin(t/d * (Math.PI/2)) + b;
+	},
+	easeInOutSine: function (x, t, b, c, d) {
+		return -c/2 * (Math.cos(Math.PI*t/d) - 1) + b;
+	},
+	easeInExpo: function (x, t, b, c, d) {
+		return (t==0) ? b : c * Math.pow(2, 10 * (t/d - 1)) + b;
+	},
+	easeOutExpo: function (x, t, b, c, d) {
+		return (t==d) ? b+c : c * (-Math.pow(2, -10 * t/d) + 1) + b;
+	},
+	easeInOutExpo: function (x, t, b, c, d) {
+		if (t==0) return b;
+		if (t==d) return b+c;
+		if ((t/=d/2) < 1) return c/2 * Math.pow(2, 10 * (t - 1)) + b;
+		return c/2 * (-Math.pow(2, -10 * --t) + 2) + b;
+	},
+	easeInCirc: function (x, t, b, c, d) {
+		return -c * (Math.sqrt(1 - (t/=d)*t) - 1) + b;
+	},
+	easeOutCirc: function (x, t, b, c, d) {
+		return c * Math.sqrt(1 - (t=t/d-1)*t) + b;
+	},
+	easeInOutCirc: function (x, t, b, c, d) {
+		if ((t/=d/2) < 1) return -c/2 * (Math.sqrt(1 - t*t) - 1) + b;
+		return c/2 * (Math.sqrt(1 - (t-=2)*t) + 1) + b;
+	},
+	easeInElastic: function (x, t, b, c, d) {
+		var s=1.70158;var p=0;var a=c;
+		if (t==0) return b;  if ((t/=d)==1) return b+c;  if (!p) p=d*.3;
+		if (a < Math.abs(c)) { a=c; var s=p/4; }
+		else var s = p/(2*Math.PI) * Math.asin (c/a);
+		return -(a*Math.pow(2,10*(t-=1)) * Math.sin( (t*d-s)*(2*Math.PI)/p )) + b;
+	},
+	easeOutElastic: function (x, t, b, c, d) {
+		var s=1.70158;var p=0;var a=c;
+		if (t==0) return b;  if ((t/=d)==1) return b+c;  if (!p) p=d*.3;
+		if (a < Math.abs(c)) { a=c; var s=p/4; }
+		else var s = p/(2*Math.PI) * Math.asin (c/a);
+		return a*Math.pow(2,-10*t) * Math.sin( (t*d-s)*(2*Math.PI)/p ) + c + b;
+	},
+	easeInOutElastic: function (x, t, b, c, d) {
+		var s=1.70158;var p=0;var a=c;
+		if (t==0) return b;  if ((t/=d/2)==2) return b+c;  if (!p) p=d*(.3*1.5);
+		if (a < Math.abs(c)) { a=c; var s=p/4; }
+		else var s = p/(2*Math.PI) * Math.asin (c/a);
+		if (t < 1) return -.5*(a*Math.pow(2,10*(t-=1)) * Math.sin( (t*d-s)*(2*Math.PI)/p )) + b;
+		return a*Math.pow(2,-10*(t-=1)) * Math.sin( (t*d-s)*(2*Math.PI)/p )*.5 + c + b;
+	},
+	easeInBack: function (x, t, b, c, d, s) {
+		if (s == undefined) s = 1.70158;
+		return c*(t/=d)*t*((s+1)*t - s) + b;
+	},
+	easeOutBack: function (x, t, b, c, d, s) {
+		if (s == undefined) s = 1.70158;
+		return c*((t=t/d-1)*t*((s+1)*t + s) + 1) + b;
+	},
+	easeInOutBack: function (x, t, b, c, d, s) {
+		if (s == undefined) s = 1.70158; 
+		if ((t/=d/2) < 1) return c/2*(t*t*(((s*=(1.525))+1)*t - s)) + b;
+		return c/2*((t-=2)*t*(((s*=(1.525))+1)*t + s) + 2) + b;
+	},
+	easeInBounce: function (x, t, b, c, d) {
+		return c - jQuery.easing.easeOutBounce (x, d-t, 0, c, d) + b;
+	},
+	easeOutBounce: function (x, t, b, c, d) {
+		if ((t/=d) < (1/2.75)) {
+			return c*(7.5625*t*t) + b;
+		} else if (t < (2/2.75)) {
+			return c*(7.5625*(t-=(1.5/2.75))*t + .75) + b;
+		} else if (t < (2.5/2.75)) {
+			return c*(7.5625*(t-=(2.25/2.75))*t + .9375) + b;
+		} else {
+			return c*(7.5625*(t-=(2.625/2.75))*t + .984375) + b;
+		}
+	},
+	easeInOutBounce: function (x, t, b, c, d) {
+		if (t < d/2) return jQuery.easing.easeInBounce (x, t*2, 0, c, d) * .5 + b;
+		return jQuery.easing.easeOutBounce (x, t*2-d, 0, c, d) * .5 + c*.5 + b;
+	}
+});
+
+/*
+ *
+ * TERMS OF USE - EASING EQUATIONS
+ * 
+ * Open source under the BSD License. 
+ * 
+ * Copyright © 2001 Robert Penner
+ * All rights reserved.
+ * 
+ * Redistribution and use in source and binary forms, with or without modification, 
+ * are permitted provided that the following conditions are met:
+ * 
+ * Redistributions of source code must retain the above copyright notice, this list of 
+ * conditions and the following disclaimer.
+ * Redistributions in binary form must reproduce the above copyright notice, this list 
+ * of conditions and the following disclaimer in the documentation and/or other materials 
+ * provided with the distribution.
+ * 
+ * Neither the name of the author nor the names of contributors may be used to endorse 
+ * or promote products derived from this software without specific prior written permission.
+ * 
+ * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND ANY 
+ * EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
+ * MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE
+ *  COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
+ *  EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE
+ *  GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED 
+ * AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
+ *  NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED 
+ * OF THE POSSIBILITY OF SUCH DAMAGE. 
+ *
+ */

aufgaben/2/workshop/templates/js/workshop/jquery.thumbox.1.3.js

+/** 
+  * 
+  * Thumbox - plugin para galeria de imagens
+  *
+  *  @author     Jose Raimundo de Sousa Neto <sputinykster@gmail.com>
+  *  @version    1.3
+  *  @link       http://www.jneto.net.br
+  *  @since      1.0
+  *  
+  **/
+(function($,doc){
+    $.fn.thumbox = function(settings) {
+        var defaults = {
+            thumbs:5,
+            overlayColor:'#999',
+            overlayOpacity:0.8,
+            overlaySpeed:500,
+            scrollSpeed:500,
+            zoomSpeed:250,
+            showOne:false,
+			preventImgOverflow:true,
+            keyboardNavigation:true,
+            wheelNavigation:true,
+            showLabel:true,
+            labelPosition:'bottom',
+			descAttr:'alt',
+            dockPosition:'top',
+            timeOut:15,
+            maxThumbWidth:0,
+            maxThumbHeight:0,
+            openImageEffect:'linear',
+            closeImageEffect:'linear',
+            scrollDockEffect:'linear'
+        };
+        settings             = $.extend(defaults, settings);
+		var _sputinyk        = [];
+        var _locked          = undefined;
+        var _width           = undefined;
+        var _page            = undefined;
+        var _qtdImgs         = undefined;
+        var _currentImage    = undefined;
+        var _coordToCloseImg = false;
+        var _isSingleImg     = false;
+        var _wasAborted      = false;
+        var _clockTimeOut    = 0;
+        $all                 = $(this);
+		
+		storeData = function(el, data){for ( key in data ) el.data(key, data[key]); return }
+		
+        $all.each(function(k,matched){
+            objList = (matched.tagName == 'A') ? $(matched) : $(matched).find('a');
+            if(objList.size() == 1){
+				storeData(objList, settings);
+                $(objList).bind('click', function(e){
+                    $(this).blur();
+                    e.preventDefault();
+                    _wasAborted = false;
+                    img   = $(this).find('img');
+                    label = $(img).attr(settings.descAttr);
+                    big   = $(this).attr('href');
+                    coord = {
+                        left:   $(img).offset().left, 
+                        top:    $(img).offset().top, 
+                        width:  $(img).outerWidth(), 
+                        height: $(img).outerHeight()
+                    }
+                    openImageFromPage(big, label, coord, settings);
+                })
+            } else {
+                objList.each(function(i,e){
+                    $(e).bind('click', function(e){
+						e.preventDefault();
+                        $(this).blur();
+                        _wasAborted = false;
+                        showDock($(this).data('objlist'), $(this).data('params'), $(this).data('indeximg'))
+                        });
+						storeData($(e), {
+	                        'indeximg':i+1, 
+	                        'params':settings, 
+	                        'objlist':$(matched)
+                        });
+						$(e).find('img').data('big', $(e).attr('href'));
+                    if(settings.showOne && (i>0)){
+                        $(e).css({
+                            'position':'absolute', 
+                            'left':-5000, 
+                            'top':-3000
+                        });
+                    }
+                });
+            }
+        });
+		
+		getDim = function(wImg, hImg, dW, dH){
+			if(wImg > dW){
+                hImg = hImg / (wImg / dW);
+                wImg = dW;
+            }
+            if(hImg > dH){
+                wImg = wImg / (hImg / dH);
+                hImg = dH;
+            }
+			return [wImg, hImg]
+		}
+		
+        showDock = function(objs, params, autoopen){
+            setPlParams(params);
+            _wasAborted = false;
+            showLoader();
+            maxThumbW = (getPlParam('maxThumbWidth') === 0) ? 1000000 : getPlParam('maxThumbWidth');
+            maxThumbH = (getPlParam('maxThumbHeight') === 0) ? 1000000 : getPlParam('maxThumbHeight');
+            cls       = false;
+            pgs       = '<div class="thumbox-page" page="1">';
+            qtd       = $(objs).find('a').find('img').size();
+            pag       = 1;
+            $(objs).find('a').find('img').each(function(i,e){
+                src         = $(e).attr('src');
+                big         = $(e).data('big');
+                lbl         = $(e).attr('alt');
+                widthThumb  = $(e).width();
+                heightThumb = $(e).height();
+				newSizes    = getDim(widthThumb, heightThumb, maxThumbW, maxThumbH);
+				widthThumb  = newSizes[0];
+				heightThumb = newSizes[1];
+                pgs += '<img src="'+src+'" alt="'+lbl+'" big="'+big+'" imgindex="'+(i+1)+'" width="'+widthThumb+'" height="'+heightThumb+'" />';
+                if(!((i+1)%getPlParam('thumbs'))){
+                    pgs += '</div>';
+                    cls = true;
+                    if((i+1)<qtd){
+                        pag = pag + 1;
+                        pgs += '<div class="thumbox-page" page="'+pag+'">';
+                        cls = false;
+                    }
+                }
+            });
+            if(!cls){
+                pgs += '</div>'
+                }
+            $('body').append('<div id="thumbox-dock"><div class="thumbox-arrowdock thumbox-leftarrow" arrowdir="p"></div><div class="thumbox-scrollerpages"><div class="thumbox-pages">'+pgs+'</div></div><div class="thumbox-arrowdock thumbox-rightarrow" arrowdir="n"></div></div>');
+            
+            hd = $('.thumbox-scrollerpages').height();
+            
+            $('.thumbox-page > img').each(function(i, e){
+            	v = (hd - $(e).attr('height'))/2 - 2;
+            	$(e).css('margin-bottom', v);
+            	
+            })
+            
+            $('.thumbox-page > img').bind('click', function(e){
+                if(isLocked()) return;
+                openImageFromDock($(e.target).attr('imgindex'));
+            }).bind('mouseover', function(e){
+                $(e.target).addClass('thumbox-hoverImage');
+            }).bind('mouseout', function(e){
+                $(e.target).removeClass('thumbox-hoverImage');
+            });
+            $('.thumbox-arrowdock').bind('click', function(e){
+                if(isLocked()) return;
+                page = _page;
+                goToPage(($(e.target).attr('arrowdir') == 'n') ? page+1 : page-1);
+            });
+            
+            if(getPlParam('wheelNavigation')){
+                attatchWheelEvent();
+            }
+            
+            if(getPlParam('keyboardNavigation')){
+                $(document).bind('keydown', keyboardNav);
+            }
+            $('#thumbox-dock > .thumbox-leftarrow').fadeTo(0, 0.1);
+            if($('.thumbox-page').size() == 1) {
+                $('#thumbox-dock > .thumbox-rightarrow').fadeTo(0, 0.1);
+            }
+            wmax = hmax = 0;
+            $('.thumbox-page').each(function(i,e){
+                if($(e).width() > wmax) wmax = $(e).width();
+                if($(e).height() > hmax) hmax = $(e).height();
+            });
+            $('.thumbox-page, .thumbox-scrollerpages, #thumbox-dock').css({
+                'width':wmax, 
+                'height':hmax
+            });
+            $('.thumbox-pages').css({
+                'width':wmax*$('.thumbox-page').size()
+                });
+            $('.thumbox-arrowdock').css({
+                'height':hmax
+            });
+            showOverlay();
+            _locked          = true;
+            _width           = wmax;
+            _page            = 1;
+            _qtdImgs         = qtd;
+            _currentImage    = false;
+            _coordToCloseImg = false;
+            _isSingleImg     = false;
+            tTop = (getPlParam('dockPosition') == 'top') ? ($(document).scrollTop()+10) : ($(window).height()+$(document).scrollTop()-$('#thumbox-dock').height()-10);
+            $('#thumbox-dock').css({
+                'top':tTop,
+                'width':wmax+40,
+                left:($(window).width()/2)-(wmax/2)-20
+            }).hide().fadeIn(getPlParam('overlaySpeed'), function(){
+                unlockHandlers();
+                if(autoopen != undefined) {
+                    goToPage(Math.ceil(autoopen/getPlParam('thumbs')), autoopen)
+                }
+            })
+        };
+        
+        var attatchWheelEvent = function(){
+            if(document.attachEvent) {
+                document.attachEvent("onmousewheel", thumboxWheel);
+            } else {
+                if(window.addEventListener) window.addEventListener($.browser.mozilla ? 'DOMMouseScroll' : 'mousewheel', thumboxWheel, false);
+            }
+        }
+        
+        var deattatchWheelEvent = function(){
+            if(document.detachEvent) {
+                document.detachEvent("onmousewheel", thumboxWheel);
+            } else {
+                if(window.removeEventListener) window.removeEventListener($.browser.mozilla ? 'DOMMouseScroll' : 'onmousewheel', thumboxWheel, false);
+            }
+        }
+        
+        var thumboxWheel = function(event){
+			if (($.browser.msie && (Number($.browser.version) < 8)) || $.browser.opera) {
+				return;
+			}
+            var delta = 0;
+            if (!event) 
+                event = window.event;
+            if (event.wheelDelta) {
+                delta = event.wheelDelta / 120;
+                if (window.opera) delta = -delta;
+            }
+            else 
+                if (event.detail) delta = -event.detail / 3;
+            if (delta) {
+                if (delta > 0) {
+                    if(isLocked()) return;
+                    openPrev();
+                } else {
+                    if(isLocked()) return;
+                    openNext();
+                };
+            }
+        }
+	
+        var lockHandlers   = function(){
+            _locked = true
+            }
+        var unlockHandlers = function(){
+            _locked = false
+            }
+        var isLocked       = function(){
+            return _locked
+            }
+        var isSingleImg    = function(){
+            return _isSingleImg
+            }
+	
+        var keyboardNav = function(evt){
+            if(evt.keyCode == 27){
+                _wasAborted = true;
+                closeDock();
+                return;
+            }
+            if((!getPlParam('keyboardNavigation')) || (jQuery.inArray(evt.keyCode, [39,40,13,32,37,38,8,27,36,35]) == -1)) return;
+            evt.preventDefault();
+            if(isLocked()) return;
+            switch (evt.keyCode) {
+                case 39:
+                case 40:
+                case 13:
+                case 32:
+                    if(!isSingleImg()) openNext()
+                    break;
+                case 37:
+                case 38:
+                case 8:
+                    if(!isSingleImg()) openPrev()
+                    break;
+                case 36:
+                    if(!isSingleImg()) openImageFromDock(1)
+                    break;
+                case 35:
+                    if(!isSingleImg()) openImageFromDock(_qtdImgs)
+                    break;
+                case 27:
+                    closeDock();
+                    break;
+            }
+        }
+	
+        var unbindKeyboardEvt = function(){
+            $(document).unbind('keydown', keyboardNav);
+            deattatchWheelEvent();
+        }
+	
+        var showLoader = function(){
+            if ($('#thumbox-loader').size()) return;
+            $('body').append('<div id="thumbox-loader"></div>');
+            $('#thumbox-loader').css({
+                left:$(window).width()/2-64,
+                top:$(window).height()/2+$(document).scrollTop()-7
+            })
+        }
+	
+        var hideLoader = function(){
+            $('#thumbox-loader').remove()
+        }
+	
+        var openNext = function(){
+            openImageFromDock(_currentImage+1)
+        }
+	
+        var openPrev = function(){
+            openImageFromDock(_currentImage-1)
+        }
+        
+        var setPlParams = function(listValues){
+            _sputinyk = listValues;
+            if($.easing.def == undefined) {
+                _sputinyk.openImageEffect  = 'linear';
+                _sputinyk.closeImageEffect = 'linear';
+                _sputinyk.scrollDockEffect = 'linear';
+            }
+        }
+		
+		var getPlParam = function(param){return _sputinyk[param]}
+	
+        var openImageFromPage = function(big, label, coord, params){
+            setPlParams(params);
+            _isSingleImg = true;
+            showLoader();
+            showOverlay();
+            showImage(coord, big, label, undefined);
+            if(getPlParam('wheelNavigation')){
+                attatchWheelEvent();
+            }
+            if(getPlParam('keyboardNavigation')){
+                $(window).bind('keydown', keyboardNav);
+            }
+        }
+	
+        var openImageFromDock = function(imgindex){
+            if(imgindex < 1) return;
+            if(imgindex > _qtdImgs) return;
+            if(_currentImage == imgindex) return;
+            lockHandlers();
+            page = Math.ceil(imgindex/getPlParam('thumbs'));
+            if(_page != page){
+                goToPage(page, imgindex);
+                return;
+            }
+            $('.thumbox-page > img').removeClass('thumbox-currentImage');
+            $('.thumbox-page').find('img[imgindex="'+imgindex+'"]').addClass('thumbox-currentImage');
+            _currentImage = imgindex
+            thumb  = $('.thumbox-page > img[imgindex="'+imgindex+'"]');
+            urlImg = $(thumb).attr('big');
+            label  = $(thumb).attr(getPlParam('descAttr'));