web: initial setup for mediacube page
* added the initial setup for mediacube page. * using mysql as database and foundation for layout support.
@@ -0,0 +1,7 @@
|
||||
<?php
|
||||
$servername = 'localhost';
|
||||
$username = "coati_newsletter";
|
||||
$password = "coati";
|
||||
$dbname = "coati_newsletter";
|
||||
$tabename = "subscriber";
|
||||
?>
|
||||
@@ -0,0 +1,48 @@
|
||||
<?php
|
||||
// include('admin/config.php');
|
||||
function getValueFromUrl($valueName)
|
||||
{
|
||||
if (isset($_GET[$valueName]) && !empty($_GET[$valueName]))
|
||||
return $_GET[$valueName];
|
||||
else
|
||||
return "";
|
||||
}
|
||||
?>
|
||||
|
||||
<?php
|
||||
$lan = getValueFromUrl("lan");
|
||||
if ($lan != "de")
|
||||
$lan = "en";
|
||||
?>
|
||||
|
||||
<!-- paulirish.com/2008/conditional-stylesheets-vs-css-hacks-answer-neither/ -->
|
||||
<!--[if lt IE 7]> <html class="no-js lt-ie9 lt-ie8 lt-ie7" lang="en"> <![endif]-->
|
||||
<!--[if IE 7]> <html class="no-js lt-ie9 lt-ie8" lang="en"> <![endif]-->
|
||||
<!--[if IE 8]> <html class="no-js lt-ie9" lang="en"> <![endif]-->
|
||||
<!--[if gt IE 8]><!--> <html class="no-js" lang="en"> <!--<![endif]-->
|
||||
|
||||
<head>
|
||||
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
|
||||
|
||||
<!-- Set the viewport width to device width for mobile -->
|
||||
<meta name="viewport" content="width=device-width, initial-scale=1.0" />
|
||||
|
||||
<title>Coati - Smart Code Exploration.</title>
|
||||
|
||||
<meta name="keywords" content="software development, tool, sourcecode, source code, exploration" />
|
||||
|
||||
<link rel="icon" href="favicon.ico" type="image/x-icon" />
|
||||
<link rel="shortcut icon" href="favicon.ico" type="image/x-icon" />
|
||||
|
||||
<!-- Included CSS Files -->
|
||||
<link rel="stylesheet" href="css/foundation.css">
|
||||
<link rel="stylesheet" href="css/app.css">
|
||||
<script src="js/vendor/modernizr.js"></script>
|
||||
|
||||
<!-- IE Fix for HTML5 Tags -->
|
||||
<!--[if lt IE 9]>
|
||||
<script src="http://html5shiv.googlecode.com/svn/trunk/html5.js"></script>
|
||||
<![endif]-->
|
||||
|
||||
</head>
|
||||
|
||||
@@ -0,0 +1,33 @@
|
||||
<?php
|
||||
header('Content-type: application/json');
|
||||
$response_array['status'] = 'error';
|
||||
|
||||
$email = $_POST["email"];
|
||||
$regex = "/^[a-zA-Z0-9_.+-]+@[a-zA-Z0-9-]+\.[a-zA-Z0-9-.]+$/";
|
||||
if (preg_match($regex, $email))
|
||||
{
|
||||
include("db_config.php");
|
||||
|
||||
$link = new mysqli($servername, $username, $password, $dbname);
|
||||
|
||||
if (mysqli_connect_errno())
|
||||
{
|
||||
exit();
|
||||
}
|
||||
|
||||
$email = mysqli_real_escape_string($link, $email);
|
||||
|
||||
if (mysqli_query($link, "INSERT INTO " . $tabename . " (`id`, `mail`) VALUES (0, '$email')"))
|
||||
{
|
||||
$response_array['status'] = 'success';
|
||||
}
|
||||
|
||||
$link->close();
|
||||
}
|
||||
else
|
||||
{
|
||||
$response_array['status'] = 'error_invalid_email';
|
||||
}
|
||||
|
||||
echo(json_encode($response_array));
|
||||
?>
|
||||
@@ -0,0 +1,140 @@
|
||||
body
|
||||
{
|
||||
margin: 15px 20px;
|
||||
}
|
||||
|
||||
div#language_selection
|
||||
{
|
||||
}
|
||||
|
||||
h1
|
||||
{
|
||||
color: #FFF;
|
||||
}
|
||||
|
||||
a
|
||||
{
|
||||
color: #FFF;
|
||||
text-decoration: none;
|
||||
}
|
||||
|
||||
p p
|
||||
{
|
||||
margin-bottom: 0.6rem;
|
||||
}
|
||||
|
||||
a:hover {
|
||||
color: #FF5D00;
|
||||
}
|
||||
|
||||
div#language_selection > a.selected
|
||||
{
|
||||
font-weight: bold;
|
||||
}
|
||||
|
||||
div#logo_coati
|
||||
{
|
||||
text-align: center;
|
||||
margin-top: 20px;
|
||||
}
|
||||
|
||||
div#logo_coati img
|
||||
{
|
||||
width: 300px;
|
||||
}
|
||||
|
||||
fieldset
|
||||
{
|
||||
border:2px solid #FFF;
|
||||
-moz-border-radius:8px;
|
||||
-webkit-border-radius:8px;
|
||||
border-radius:8px;
|
||||
padding: 24px;
|
||||
}
|
||||
|
||||
div#submission_form
|
||||
{
|
||||
margin-bottom: 10px;
|
||||
}
|
||||
|
||||
div#submission_message
|
||||
{
|
||||
text-align: center;
|
||||
margin-top: 10px;
|
||||
}
|
||||
|
||||
input[type="text"]
|
||||
{
|
||||
border: none;
|
||||
border-color: transparent;
|
||||
background: #FFF;
|
||||
margin: 0px;
|
||||
box-shadow: none;
|
||||
width: 100%;
|
||||
height: 32px;
|
||||
font-size: 14px;
|
||||
}
|
||||
|
||||
input[type="text"]:focus
|
||||
{
|
||||
outline: 0;
|
||||
}
|
||||
|
||||
div.rounded
|
||||
{
|
||||
border:2px solid #FFF;
|
||||
-moz-border-radius:8px;
|
||||
-webkit-border-radius:8px;
|
||||
border-radius:8px;
|
||||
padding: 0px 10px;
|
||||
background: #FFF;
|
||||
margin: 5px;
|
||||
}
|
||||
|
||||
div#button_wrapper
|
||||
{
|
||||
margin: 5px;
|
||||
}
|
||||
|
||||
button#submit
|
||||
{
|
||||
text-align: center;
|
||||
color: #222;
|
||||
background-color: #FFF;
|
||||
border-radius: 8px;
|
||||
width: 100%;
|
||||
padding: 9px 0px;
|
||||
margin: 0px;
|
||||
}
|
||||
|
||||
div#footer
|
||||
{
|
||||
margin-top: 30px;
|
||||
margin-bottom: 20px;
|
||||
|
||||
}
|
||||
|
||||
div.footer_container_left, div.footer_spacer
|
||||
{
|
||||
float: left;
|
||||
}
|
||||
|
||||
div.footer_container_left, div.footer_spacer, div.footer_container_right
|
||||
{
|
||||
position: relative;
|
||||
height: 80px;
|
||||
}
|
||||
|
||||
a#imprint_link
|
||||
{
|
||||
display: block;
|
||||
position: absolute;
|
||||
bottom: 0;
|
||||
right: 0;
|
||||
}
|
||||
|
||||
img#logo_mma, img#logo_mmt, img#logo_fhs
|
||||
{
|
||||
position: absolute;
|
||||
bottom: 0;
|
||||
}
|
||||
@@ -0,0 +1,424 @@
|
||||
/*! normalize.css v3.0.3 | MIT License | github.com/necolas/normalize.css */
|
||||
|
||||
/**
|
||||
* 1. Set default font family to sans-serif.
|
||||
* 2. Prevent iOS and IE text size adjust after device orientation change,
|
||||
* without disabling user zoom.
|
||||
*/
|
||||
|
||||
html {
|
||||
font-family: sans-serif; /* 1 */
|
||||
-ms-text-size-adjust: 100%; /* 2 */
|
||||
-webkit-text-size-adjust: 100%; /* 2 */
|
||||
}
|
||||
|
||||
/**
|
||||
* Remove default margin.
|
||||
*/
|
||||
|
||||
body {
|
||||
margin: 0;
|
||||
}
|
||||
|
||||
/* HTML5 display definitions
|
||||
========================================================================== */
|
||||
|
||||
/**
|
||||
* Correct `block` display not defined for any HTML5 element in IE 8/9.
|
||||
* Correct `block` display not defined for `details` or `summary` in IE 10/11
|
||||
* and Firefox.
|
||||
* Correct `block` display not defined for `main` in IE 11.
|
||||
*/
|
||||
|
||||
article,
|
||||
aside,
|
||||
details,
|
||||
figcaption,
|
||||
figure,
|
||||
footer,
|
||||
header,
|
||||
hgroup,
|
||||
main,
|
||||
menu,
|
||||
nav,
|
||||
section,
|
||||
summary {
|
||||
display: block;
|
||||
}
|
||||
|
||||
/**
|
||||
* 1. Correct `inline-block` display not defined in IE 8/9.
|
||||
* 2. Normalize vertical alignment of `progress` in Chrome, Firefox, and Opera.
|
||||
*/
|
||||
|
||||
audio,
|
||||
canvas,
|
||||
progress,
|
||||
video {
|
||||
display: inline-block; /* 1 */
|
||||
vertical-align: baseline; /* 2 */
|
||||
}
|
||||
|
||||
/**
|
||||
* Prevent modern browsers from displaying `audio` without controls.
|
||||
* Remove excess height in iOS 5 devices.
|
||||
*/
|
||||
|
||||
audio:not([controls]) {
|
||||
display: none;
|
||||
height: 0;
|
||||
}
|
||||
|
||||
/**
|
||||
* Address `[hidden]` styling not present in IE 8/9/10.
|
||||
* Hide the `template` element in IE 8/9/10/11, Safari, and Firefox < 22.
|
||||
*/
|
||||
|
||||
[hidden],
|
||||
template {
|
||||
display: none;
|
||||
}
|
||||
|
||||
/* Links
|
||||
========================================================================== */
|
||||
|
||||
/**
|
||||
* Remove the gray background color from active links in IE 10.
|
||||
*/
|
||||
|
||||
a {
|
||||
background-color: transparent;
|
||||
}
|
||||
|
||||
/**
|
||||
* Improve readability of focused elements when they are also in an
|
||||
* active/hover state.
|
||||
*/
|
||||
|
||||
a:active,
|
||||
a:hover {
|
||||
outline: 0;
|
||||
}
|
||||
|
||||
/* Text-level semantics
|
||||
========================================================================== */
|
||||
|
||||
/**
|
||||
* Address styling not present in IE 8/9/10/11, Safari, and Chrome.
|
||||
*/
|
||||
|
||||
abbr[title] {
|
||||
border-bottom: 1px dotted;
|
||||
}
|
||||
|
||||
/**
|
||||
* Address style set to `bolder` in Firefox 4+, Safari, and Chrome.
|
||||
*/
|
||||
|
||||
b,
|
||||
strong {
|
||||
font-weight: bold;
|
||||
}
|
||||
|
||||
/**
|
||||
* Address styling not present in Safari and Chrome.
|
||||
*/
|
||||
|
||||
dfn {
|
||||
font-style: italic;
|
||||
}
|
||||
|
||||
/**
|
||||
* Address variable `h1` font-size and margin within `section` and `article`
|
||||
* contexts in Firefox 4+, Safari, and Chrome.
|
||||
*/
|
||||
|
||||
h1 {
|
||||
font-size: 2em;
|
||||
margin: 0.67em 0;
|
||||
}
|
||||
|
||||
/**
|
||||
* Address styling not present in IE 8/9.
|
||||
*/
|
||||
|
||||
mark {
|
||||
background: #ff0;
|
||||
color: #000;
|
||||
}
|
||||
|
||||
/**
|
||||
* Address inconsistent and variable font size in all browsers.
|
||||
*/
|
||||
|
||||
small {
|
||||
font-size: 80%;
|
||||
}
|
||||
|
||||
/**
|
||||
* Prevent `sub` and `sup` affecting `line-height` in all browsers.
|
||||
*/
|
||||
|
||||
sub,
|
||||
sup {
|
||||
font-size: 75%;
|
||||
line-height: 0;
|
||||
position: relative;
|
||||
vertical-align: baseline;
|
||||
}
|
||||
|
||||
sup {
|
||||
top: -0.5em;
|
||||
}
|
||||
|
||||
sub {
|
||||
bottom: -0.25em;
|
||||
}
|
||||
|
||||
/* Embedded content
|
||||
========================================================================== */
|
||||
|
||||
/**
|
||||
* Remove border when inside `a` element in IE 8/9/10.
|
||||
*/
|
||||
|
||||
img {
|
||||
border: 0;
|
||||
}
|
||||
|
||||
/**
|
||||
* Correct overflow not hidden in IE 9/10/11.
|
||||
*/
|
||||
|
||||
svg:not(:root) {
|
||||
overflow: hidden;
|
||||
}
|
||||
|
||||
/* Grouping content
|
||||
========================================================================== */
|
||||
|
||||
/**
|
||||
* Address margin not present in IE 8/9 and Safari.
|
||||
*/
|
||||
|
||||
figure {
|
||||
margin: 1em 40px;
|
||||
}
|
||||
|
||||
/**
|
||||
* Address differences between Firefox and other browsers.
|
||||
*/
|
||||
|
||||
hr {
|
||||
box-sizing: content-box;
|
||||
height: 0;
|
||||
}
|
||||
|
||||
/**
|
||||
* Contain overflow in all browsers.
|
||||
*/
|
||||
|
||||
pre {
|
||||
overflow: auto;
|
||||
}
|
||||
|
||||
/**
|
||||
* Address odd `em`-unit font size rendering in all browsers.
|
||||
*/
|
||||
|
||||
code,
|
||||
kbd,
|
||||
pre,
|
||||
samp {
|
||||
font-family: monospace, monospace;
|
||||
font-size: 1em;
|
||||
}
|
||||
|
||||
/* Forms
|
||||
========================================================================== */
|
||||
|
||||
/**
|
||||
* Known limitation: by default, Chrome and Safari on OS X allow very limited
|
||||
* styling of `select`, unless a `border` property is set.
|
||||
*/
|
||||
|
||||
/**
|
||||
* 1. Correct color not being inherited.
|
||||
* Known issue: affects color of disabled elements.
|
||||
* 2. Correct font properties not being inherited.
|
||||
* 3. Address margins set differently in Firefox 4+, Safari, and Chrome.
|
||||
*/
|
||||
|
||||
button,
|
||||
input,
|
||||
optgroup,
|
||||
select,
|
||||
textarea {
|
||||
color: inherit; /* 1 */
|
||||
font: inherit; /* 2 */
|
||||
margin: 0; /* 3 */
|
||||
}
|
||||
|
||||
/**
|
||||
* Address `overflow` set to `hidden` in IE 8/9/10/11.
|
||||
*/
|
||||
|
||||
button {
|
||||
overflow: visible;
|
||||
}
|
||||
|
||||
/**
|
||||
* Address inconsistent `text-transform` inheritance for `button` and `select`.
|
||||
* All other form control elements do not inherit `text-transform` values.
|
||||
* Correct `button` style inheritance in Firefox, IE 8/9/10/11, and Opera.
|
||||
* Correct `select` style inheritance in Firefox.
|
||||
*/
|
||||
|
||||
button,
|
||||
select {
|
||||
text-transform: none;
|
||||
}
|
||||
|
||||
/**
|
||||
* 1. Avoid the WebKit bug in Android 4.0.* where (2) destroys native `audio`
|
||||
* and `video` controls.
|
||||
* 2. Correct inability to style clickable `input` types in iOS.
|
||||
* 3. Improve usability and consistency of cursor style between image-type
|
||||
* `input` and others.
|
||||
*/
|
||||
|
||||
button,
|
||||
html input[type="button"], /* 1 */
|
||||
input[type="reset"],
|
||||
input[type="submit"] {
|
||||
-webkit-appearance: button; /* 2 */
|
||||
cursor: pointer; /* 3 */
|
||||
}
|
||||
|
||||
/**
|
||||
* Re-set default cursor for disabled elements.
|
||||
*/
|
||||
|
||||
button[disabled],
|
||||
html input[disabled] {
|
||||
cursor: default;
|
||||
}
|
||||
|
||||
/**
|
||||
* Remove inner padding and border in Firefox 4+.
|
||||
*/
|
||||
|
||||
button::-moz-focus-inner,
|
||||
input::-moz-focus-inner {
|
||||
border: 0;
|
||||
padding: 0;
|
||||
}
|
||||
|
||||
/**
|
||||
* Address Firefox 4+ setting `line-height` on `input` using `!important` in
|
||||
* the UA stylesheet.
|
||||
*/
|
||||
|
||||
input {
|
||||
line-height: normal;
|
||||
}
|
||||
|
||||
/**
|
||||
* It's recommended that you don't attempt to style these elements.
|
||||
* Firefox's implementation doesn't respect box-sizing, padding, or width.
|
||||
*
|
||||
* 1. Address box sizing set to `content-box` in IE 8/9/10.
|
||||
* 2. Remove excess padding in IE 8/9/10.
|
||||
*/
|
||||
|
||||
input[type="checkbox"],
|
||||
input[type="radio"] {
|
||||
box-sizing: border-box; /* 1 */
|
||||
padding: 0; /* 2 */
|
||||
}
|
||||
|
||||
/**
|
||||
* Fix the cursor style for Chrome's increment/decrement buttons. For certain
|
||||
* `font-size` values of the `input`, it causes the cursor style of the
|
||||
* decrement button to change from `default` to `text`.
|
||||
*/
|
||||
|
||||
input[type="number"]::-webkit-inner-spin-button,
|
||||
input[type="number"]::-webkit-outer-spin-button {
|
||||
height: auto;
|
||||
}
|
||||
|
||||
/**
|
||||
* 1. Address `appearance` set to `searchfield` in Safari and Chrome.
|
||||
* 2. Address `box-sizing` set to `border-box` in Safari and Chrome.
|
||||
*/
|
||||
|
||||
input[type="search"] {
|
||||
-webkit-appearance: textfield; /* 1 */
|
||||
box-sizing: content-box; /* 2 */
|
||||
}
|
||||
|
||||
/**
|
||||
* Remove inner padding and search cancel button in Safari and Chrome on OS X.
|
||||
* Safari (but not Chrome) clips the cancel button when the search input has
|
||||
* padding (and `textfield` appearance).
|
||||
*/
|
||||
|
||||
input[type="search"]::-webkit-search-cancel-button,
|
||||
input[type="search"]::-webkit-search-decoration {
|
||||
-webkit-appearance: none;
|
||||
}
|
||||
|
||||
/**
|
||||
* Define consistent border, margin, and padding.
|
||||
*/
|
||||
|
||||
fieldset {
|
||||
border: 1px solid #c0c0c0;
|
||||
margin: 0 2px;
|
||||
padding: 0.35em 0.625em 0.75em;
|
||||
}
|
||||
|
||||
/**
|
||||
* 1. Correct `color` not being inherited in IE 8/9/10/11.
|
||||
* 2. Remove padding so people aren't caught out if they zero out fieldsets.
|
||||
*/
|
||||
|
||||
legend {
|
||||
border: 0; /* 1 */
|
||||
padding: 0; /* 2 */
|
||||
}
|
||||
|
||||
/**
|
||||
* Remove default vertical scrollbar in IE 8/9/10/11.
|
||||
*/
|
||||
|
||||
textarea {
|
||||
overflow: auto;
|
||||
}
|
||||
|
||||
/**
|
||||
* Don't inherit the `font-weight` (applied by a rule above).
|
||||
* NOTE: the default cannot safely be changed in Chrome and Safari on OS X.
|
||||
*/
|
||||
|
||||
optgroup {
|
||||
font-weight: bold;
|
||||
}
|
||||
|
||||
/* Tables
|
||||
========================================================================== */
|
||||
|
||||
/**
|
||||
* Remove most spacing between table cells.
|
||||
*/
|
||||
|
||||
table {
|
||||
border-collapse: collapse;
|
||||
border-spacing: 0;
|
||||
}
|
||||
|
||||
td,
|
||||
th {
|
||||
padding: 0;
|
||||
}
|
||||
|
After Width: | Height: | Size: 8.2 KiB |
@@ -0,0 +1,8 @@
|
||||
/* Foundation was made by ZURB, an interaction design and design strategy firm in Campbell, CA */
|
||||
/* zurb.com */
|
||||
/* humanstxt.org */
|
||||
|
||||
/* SITE */
|
||||
Standards: HTML5, CSS3
|
||||
Components: jQuery, Orbit, Reveal
|
||||
Software: Sublime, Git, Sass
|
||||
|
After Width: | Height: | Size: 2.9 KiB |
|
After Width: | Height: | Size: 4.1 KiB |
|
After Width: | Height: | Size: 30 KiB |
|
After Width: | Height: | Size: 17 KiB |
|
After Width: | Height: | Size: 12 KiB |
|
After Width: | Height: | Size: 12 KiB |
|
After Width: | Height: | Size: 72 KiB |
@@ -0,0 +1,130 @@
|
||||
<!DOCTYPE html>
|
||||
|
||||
<html xmlns="http://www.w3.org/1999/xhtml">
|
||||
|
||||
<?php
|
||||
include("admin/head.php");
|
||||
?>
|
||||
<body>
|
||||
<div class="row">
|
||||
<div class="medium-12 columns">
|
||||
<div class="left">
|
||||
<a href="index.php?lan=<?php echo($lan) ?>"><img src="./img/logo_coati.png" alt="coati logo" style="width: 100px;" /></a>
|
||||
</div>
|
||||
<div id="language_selection" class="right">
|
||||
<?php
|
||||
echo("<a href='imprint.php?lan=de'");
|
||||
|
||||
if ($lan == "de")
|
||||
echo(" class='selected'");
|
||||
|
||||
echo(">deutsch</a> | <a href='imprint.php?lan=en'");
|
||||
|
||||
if ($lan == "en")
|
||||
echo(" class='selected'");
|
||||
|
||||
echo(">english</a>");
|
||||
?>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
<div class="row">
|
||||
<div class="medium-8 medium-offset-2 columns">
|
||||
<div class="row" style="height: 80px;"></div>
|
||||
<div class="row">
|
||||
<div class="medium-12 columns" style="text-align:center;">
|
||||
<h1>
|
||||
<?php
|
||||
if ($lan == "de")
|
||||
{
|
||||
echo("IMPRESSUM");
|
||||
}
|
||||
else
|
||||
{
|
||||
echo("IMPRINT");
|
||||
}
|
||||
?>
|
||||
</h1>
|
||||
</div>
|
||||
</div>
|
||||
<div class="row" style="height: 80px;"></div>
|
||||
<div class="row">
|
||||
<div class="medium-6 columns">
|
||||
<p>
|
||||
<?php
|
||||
if ($lan == "de")
|
||||
{
|
||||
echo("Coati wurde von Studentinnen und Studenten im Rahmen eines Masterstudiums an der FH Salzburg konzipiert und umgesetzt.");
|
||||
}
|
||||
else
|
||||
{
|
||||
echo("Coati has been developed by master-degree students of the university of applied sciences Salzburg.");
|
||||
}
|
||||
?>
|
||||
</p>
|
||||
<p>
|
||||
<span style="display: block; margin-bottom: 0.6rem;">
|
||||
<?php
|
||||
if ($lan == "de")
|
||||
{
|
||||
echo("Unser Team besteht aus:");
|
||||
}
|
||||
else
|
||||
{
|
||||
echo("We are:");
|
||||
}
|
||||
?>
|
||||
</span>
|
||||
Eberhard Gräther<br />
|
||||
Manuel Dobusch<br />
|
||||
Malte Langkabel<br />
|
||||
Andreas Stallinger<br />
|
||||
Viktoria Pfausler<br />
|
||||
</p>
|
||||
</div>
|
||||
<div class="medium-6 columns">
|
||||
<p>
|
||||
<?php
|
||||
if ($lan == "de")
|
||||
{
|
||||
echo("Für sämtliche Inhalte dieser Seite ist das Team von Coati verantwortlich.");
|
||||
}
|
||||
else
|
||||
{
|
||||
echo("The team of Coati is responsible for all contents of this page.");
|
||||
}
|
||||
?>
|
||||
</p>
|
||||
<span style="display: block; margin-bottom: 0.6rem;">
|
||||
<?php
|
||||
if ($lan == "de")
|
||||
{
|
||||
echo("Kontaktdaten:");
|
||||
}
|
||||
else
|
||||
{
|
||||
echo("Contact:");
|
||||
}
|
||||
?>
|
||||
</span>
|
||||
<p>
|
||||
Eberhard Gräther<br />
|
||||
Fachhochschule Salzburg<br />
|
||||
Urstein Süd 1<br />
|
||||
Raum 362<br />
|
||||
A-5412 Puch/Salzburg<br />
|
||||
</p>
|
||||
<p>
|
||||
egraether.mmt-m2013@fh-salzburg.ac.at
|
||||
</p>
|
||||
</div>
|
||||
</div>
|
||||
<div class="row">
|
||||
<div class="medium-12 columns">
|
||||
<img src="./img/pixel_characters.png" alt="team" style="width: 100%; margin: 80px 0px" />
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</body>
|
||||
</html>
|
||||
@@ -0,0 +1,251 @@
|
||||
<!DOCTYPE html>
|
||||
|
||||
<html xmlns="http://www.w3.org/1999/xhtml">
|
||||
|
||||
<?php
|
||||
include("admin/head.php");
|
||||
?>
|
||||
<body>
|
||||
<div class="row">
|
||||
<div class="medium-12 columns">
|
||||
<?php
|
||||
echo("<div id='language_selection' class='right'><a href='index.php?lan=de'");
|
||||
|
||||
if ($lan == "de")
|
||||
echo(" class='selected'");
|
||||
|
||||
echo(">deutsch</a> | <a href='index.php?lan=en'");
|
||||
|
||||
if ($lan == "en")
|
||||
echo(" class='selected'");
|
||||
|
||||
echo(">english</a></div>");
|
||||
?>
|
||||
</div>
|
||||
</div>
|
||||
<div class="row">
|
||||
<div class="medium-8 medium-centered columns">
|
||||
<div class="row">
|
||||
<div id="logo_coati">
|
||||
<img src="./img/logo_coati.png" alt="coati logo" />
|
||||
</div>
|
||||
</div>
|
||||
<div class="row" style="height: 80px;"></div>
|
||||
<div class="row">
|
||||
<div class="medium-6 columns">
|
||||
<p>
|
||||
<?php
|
||||
if ($lan == "de")
|
||||
{
|
||||
echo(
|
||||
"An einem normalen Arbeitstag produziert ein Programmierer im Durchschnitt 12 Zeilen Code. Unterstützt
|
||||
wird er dabei von mächtiger Software, die ihm das Schreiben auf alle erdenkliche Arten erleichtert. Den
|
||||
Großteil seiner Zeit verbringt der Programmierer jedoch nicht damit, neuen Code zu schreiben, sondern
|
||||
damit, bestehenden Code zu lesen."
|
||||
);
|
||||
}
|
||||
else
|
||||
{
|
||||
echo(
|
||||
"The average programmer spends his ordinary working day writing around 12 lines of code. He is often supported
|
||||
by powerful software that simplifies this task. The larger part of the day, however he does not use to write
|
||||
new code but to read existing code."
|
||||
);
|
||||
}
|
||||
?>
|
||||
</p>
|
||||
</div>
|
||||
<div class="medium-6 columns">
|
||||
<p>
|
||||
<?php
|
||||
if ($lan == "de")
|
||||
{
|
||||
echo(
|
||||
"Für diese Aufgabe gibt es bisher vergleichsweise wenig unterstützende Tools.
|
||||
</p>
|
||||
<p>
|
||||
Coati schließt diese Lücke und bietet ein Interface, mit dem die Navigation in der Codebase
|
||||
beschleunigt und das Verstehen von Zusammenhängen erleichtert wird."
|
||||
);
|
||||
}
|
||||
else
|
||||
{
|
||||
echo(
|
||||
"Currently there are only few tools that support this task.
|
||||
</p>
|
||||
<p>
|
||||
Coati is developed to close this gap and provide an interface that accelerates navigating the codebase and support
|
||||
the comprehension of relations."
|
||||
);
|
||||
}
|
||||
?>
|
||||
</p>
|
||||
</div>
|
||||
</div>
|
||||
<div class="row" style="height: 40px;"></div>
|
||||
<div class="row">
|
||||
<div class="medium-12 columns">
|
||||
<form id="subscribe_form">
|
||||
<fieldset>
|
||||
<legend style="text-align: center; background:transparent;">
|
||||
<img src="./img/letter_icon.png" alt="Newsletter" style="padding: 0px 15px; width: 80px;"/>
|
||||
</legend>
|
||||
|
||||
<div class="row">
|
||||
<div class="medium-12 columns">
|
||||
<p>
|
||||
<?php
|
||||
if ($lan == "de")
|
||||
{
|
||||
echo(
|
||||
"Coati tritt demnächst in die erste Phase des Betatests ein. Aktuell unterstützen wir die Programmiersprache C++.
|
||||
Wenn die Beta beginnt, benachrichtigen wir dich gerne per Newsletter."
|
||||
);
|
||||
}
|
||||
else
|
||||
{
|
||||
echo(
|
||||
"Coati will enter the first phase of a private beta soon. At the moment Coati supports the programming language
|
||||
C++. When the beta starts we will be glad to inform you via newsletter."
|
||||
);
|
||||
}
|
||||
?>
|
||||
|
||||
</p>
|
||||
</div>
|
||||
<div id="submission_form">
|
||||
|
||||
<div class="medium-8 columns">
|
||||
<div class="rounded">
|
||||
<input type="text" placeholder=
|
||||
<?php
|
||||
if ($lan == "de")
|
||||
{
|
||||
echo("'für Newsletter anmelden'");
|
||||
}
|
||||
else
|
||||
{
|
||||
echo("'subscribe for Newsletter'");
|
||||
}
|
||||
?>
|
||||
name="email" />
|
||||
</div>
|
||||
</div>
|
||||
<div class="medium-4 columns end">
|
||||
<div id="button_wrapper">
|
||||
<button type="button" class="button" id="submit" value="Submit" name="submit" onclick="onFormSubmit();">SUBMIT</button>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
<div id="submission_message" class="medium-12 columns">
|
||||
</div>
|
||||
</div>
|
||||
</fieldset>
|
||||
</form>
|
||||
</div>
|
||||
</div>
|
||||
<div class="row">
|
||||
<div id="footer">
|
||||
<div class="medium-6 columns">
|
||||
<div class="footer_container_left" style="width: 20%">
|
||||
<img src="./img/logo_mma.png" alt="mma logo" id="logo_mma" />
|
||||
</div>
|
||||
<div class="footer_spacer"style="width: 5%"></div>
|
||||
<div class="footer_container_left" style="width: 20%">
|
||||
<img src="./img/logo_mmt.png" alt="mmt logo" id="logo_mmt" />
|
||||
</div>
|
||||
<div class="footer_spacer"style="width: 5%"></div>
|
||||
<div class="footer_container_left" style="width: 50%">
|
||||
<img src="./img/logo_fhs.png" alt="fhs logo" id="logo_fhs" />
|
||||
</div>
|
||||
</div>
|
||||
<div class="medium-6 columns">
|
||||
<div class="footer_container_right">
|
||||
<a href="imprint.php?lan=<?php echo($lan) ?>" id="imprint_link">
|
||||
<?php
|
||||
if ($lan == "de")
|
||||
{
|
||||
echo("IMPRESSUM");
|
||||
}
|
||||
else
|
||||
{
|
||||
echo("IMPRINT");
|
||||
}
|
||||
?>
|
||||
</a>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</body>
|
||||
|
||||
<script src="js/jquery-2.1.4.min.js"></script>
|
||||
<script>
|
||||
function onFormSubmit(){
|
||||
var email = $('input[name=email]').val();
|
||||
|
||||
$.ajax({
|
||||
type: "POST",
|
||||
url: "admin/submit.php",
|
||||
data: {email: email},
|
||||
dataType: "json",
|
||||
success: function(data) {
|
||||
if(data.status == 'success'){
|
||||
$("#submission_form").fadeTo(
|
||||
200, 0.0, "linear", function(){
|
||||
$("#submission_form").css("display", "none");
|
||||
$("#submission_message").text(
|
||||
<?php
|
||||
if ($lan == "de")
|
||||
{
|
||||
echo("'Danke für die Anmeldung.'");
|
||||
}
|
||||
else
|
||||
{
|
||||
echo("'Thank you for subscribing.'");
|
||||
}
|
||||
?>
|
||||
);
|
||||
}
|
||||
);
|
||||
}else if(data.status == 'error_invalid_email'){
|
||||
$("#submission_message").text(
|
||||
<?php
|
||||
if ($lan == "de")
|
||||
{
|
||||
echo("'Deine E-Mail-Adresse scheint ungültig zu sein.'");
|
||||
}
|
||||
else
|
||||
{
|
||||
echo("'Your email address seems to be invalid.'");
|
||||
}
|
||||
?>
|
||||
);
|
||||
}else{
|
||||
$("#submission_message").text(
|
||||
<?php
|
||||
if ($lan == "de")
|
||||
{
|
||||
echo("'Ein Fehler ist aufgetreten. Bitte versuch es später nochmal.'");
|
||||
}
|
||||
else
|
||||
{
|
||||
echo("'An error has occurred. Please try again later.'");
|
||||
}
|
||||
?>
|
||||
);
|
||||
}
|
||||
},
|
||||
error: function(data) {
|
||||
alert( "error:" + data);
|
||||
}
|
||||
});
|
||||
|
||||
return true;
|
||||
}
|
||||
|
||||
</script>
|
||||
|
||||
</html>
|
||||
@@ -0,0 +1,359 @@
|
||||
;(function ($, window, document, undefined) {
|
||||
'use strict';
|
||||
|
||||
Foundation.libs.interchange = {
|
||||
name : 'interchange',
|
||||
|
||||
version : '5.5.2',
|
||||
|
||||
cache : {},
|
||||
|
||||
images_loaded : false,
|
||||
nodes_loaded : false,
|
||||
|
||||
settings : {
|
||||
load_attr : 'interchange',
|
||||
|
||||
named_queries : {
|
||||
'default' : 'only screen',
|
||||
'small' : Foundation.media_queries['small'],
|
||||
'small-only' : Foundation.media_queries['small-only'],
|
||||
'medium' : Foundation.media_queries['medium'],
|
||||
'medium-only' : Foundation.media_queries['medium-only'],
|
||||
'large' : Foundation.media_queries['large'],
|
||||
'large-only' : Foundation.media_queries['large-only'],
|
||||
'xlarge' : Foundation.media_queries['xlarge'],
|
||||
'xlarge-only' : Foundation.media_queries['xlarge-only'],
|
||||
'xxlarge' : Foundation.media_queries['xxlarge'],
|
||||
'landscape' : 'only screen and (orientation: landscape)',
|
||||
'portrait' : 'only screen and (orientation: portrait)',
|
||||
'retina' : 'only screen and (-webkit-min-device-pixel-ratio: 2),' +
|
||||
'only screen and (min--moz-device-pixel-ratio: 2),' +
|
||||
'only screen and (-o-min-device-pixel-ratio: 2/1),' +
|
||||
'only screen and (min-device-pixel-ratio: 2),' +
|
||||
'only screen and (min-resolution: 192dpi),' +
|
||||
'only screen and (min-resolution: 2dppx)'
|
||||
},
|
||||
|
||||
directives : {
|
||||
replace : function (el, path, trigger) {
|
||||
// The trigger argument, if called within the directive, fires
|
||||
// an event named after the directive on the element, passing
|
||||
// any parameters along to the event that you pass to trigger.
|
||||
//
|
||||
// ex. trigger(), trigger([a, b, c]), or trigger(a, b, c)
|
||||
//
|
||||
// This allows you to bind a callback like so:
|
||||
// $('#interchangeContainer').on('replace', function (e, a, b, c) {
|
||||
// console.log($(this).html(), a, b, c);
|
||||
// });
|
||||
|
||||
if (el !== null && /IMG/.test(el[0].nodeName)) {
|
||||
var orig_path = el[0].src;
|
||||
|
||||
if (new RegExp(path, 'i').test(orig_path)) {
|
||||
return;
|
||||
}
|
||||
|
||||
el.attr("src", path);
|
||||
|
||||
return trigger(el[0].src);
|
||||
}
|
||||
var last_path = el.data(this.data_attr + '-last-path'),
|
||||
self = this;
|
||||
|
||||
if (last_path == path) {
|
||||
return;
|
||||
}
|
||||
|
||||
if (/\.(gif|jpg|jpeg|tiff|png)([?#].*)?/i.test(path)) {
|
||||
$(el).css('background-image', 'url(' + path + ')');
|
||||
el.data('interchange-last-path', path);
|
||||
return trigger(path);
|
||||
}
|
||||
|
||||
return $.get(path, function (response) {
|
||||
el.html(response);
|
||||
el.data(self.data_attr + '-last-path', path);
|
||||
trigger();
|
||||
});
|
||||
|
||||
}
|
||||
}
|
||||
},
|
||||
|
||||
init : function (scope, method, options) {
|
||||
Foundation.inherit(this, 'throttle random_str');
|
||||
|
||||
this.data_attr = this.set_data_attr();
|
||||
$.extend(true, this.settings, method, options);
|
||||
this.bindings(method, options);
|
||||
this.reflow();
|
||||
},
|
||||
|
||||
get_media_hash : function () {
|
||||
var mediaHash = '';
|
||||
for (var queryName in this.settings.named_queries ) {
|
||||
mediaHash += matchMedia(this.settings.named_queries[queryName]).matches.toString();
|
||||
}
|
||||
return mediaHash;
|
||||
},
|
||||
|
||||
events : function () {
|
||||
var self = this, prevMediaHash;
|
||||
|
||||
$(window)
|
||||
.off('.interchange')
|
||||
.on('resize.fndtn.interchange', self.throttle(function () {
|
||||
var currMediaHash = self.get_media_hash();
|
||||
if (currMediaHash !== prevMediaHash) {
|
||||
self.resize();
|
||||
}
|
||||
prevMediaHash = currMediaHash;
|
||||
}, 50));
|
||||
|
||||
return this;
|
||||
},
|
||||
|
||||
resize : function () {
|
||||
var cache = this.cache;
|
||||
|
||||
if (!this.images_loaded || !this.nodes_loaded) {
|
||||
setTimeout($.proxy(this.resize, this), 50);
|
||||
return;
|
||||
}
|
||||
|
||||
for (var uuid in cache) {
|
||||
if (cache.hasOwnProperty(uuid)) {
|
||||
var passed = this.results(uuid, cache[uuid]);
|
||||
if (passed) {
|
||||
this.settings.directives[passed
|
||||
.scenario[1]].call(this, passed.el, passed.scenario[0], (function (passed) {
|
||||
if (arguments[0] instanceof Array) {
|
||||
var args = arguments[0];
|
||||
} else {
|
||||
var args = Array.prototype.slice.call(arguments, 0);
|
||||
}
|
||||
|
||||
return function() {
|
||||
passed.el.trigger(passed.scenario[1], args);
|
||||
}
|
||||
}(passed)));
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
},
|
||||
|
||||
results : function (uuid, scenarios) {
|
||||
var count = scenarios.length;
|
||||
|
||||
if (count > 0) {
|
||||
var el = this.S('[' + this.add_namespace('data-uuid') + '="' + uuid + '"]');
|
||||
|
||||
while (count--) {
|
||||
var mq, rule = scenarios[count][2];
|
||||
if (this.settings.named_queries.hasOwnProperty(rule)) {
|
||||
mq = matchMedia(this.settings.named_queries[rule]);
|
||||
} else {
|
||||
mq = matchMedia(rule);
|
||||
}
|
||||
if (mq.matches) {
|
||||
return {el : el, scenario : scenarios[count]};
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
return false;
|
||||
},
|
||||
|
||||
load : function (type, force_update) {
|
||||
if (typeof this['cached_' + type] === 'undefined' || force_update) {
|
||||
this['update_' + type]();
|
||||
}
|
||||
|
||||
return this['cached_' + type];
|
||||
},
|
||||
|
||||
update_images : function () {
|
||||
var images = this.S('img[' + this.data_attr + ']'),
|
||||
count = images.length,
|
||||
i = count,
|
||||
loaded_count = 0,
|
||||
data_attr = this.data_attr;
|
||||
|
||||
this.cache = {};
|
||||
this.cached_images = [];
|
||||
this.images_loaded = (count === 0);
|
||||
|
||||
while (i--) {
|
||||
loaded_count++;
|
||||
if (images[i]) {
|
||||
var str = images[i].getAttribute(data_attr) || '';
|
||||
|
||||
if (str.length > 0) {
|
||||
this.cached_images.push(images[i]);
|
||||
}
|
||||
}
|
||||
|
||||
if (loaded_count === count) {
|
||||
this.images_loaded = true;
|
||||
this.enhance('images');
|
||||
}
|
||||
}
|
||||
|
||||
return this;
|
||||
},
|
||||
|
||||
update_nodes : function () {
|
||||
var nodes = this.S('[' + this.data_attr + ']').not('img'),
|
||||
count = nodes.length,
|
||||
i = count,
|
||||
loaded_count = 0,
|
||||
data_attr = this.data_attr;
|
||||
|
||||
this.cached_nodes = [];
|
||||
this.nodes_loaded = (count === 0);
|
||||
|
||||
while (i--) {
|
||||
loaded_count++;
|
||||
var str = nodes[i].getAttribute(data_attr) || '';
|
||||
|
||||
if (str.length > 0) {
|
||||
this.cached_nodes.push(nodes[i]);
|
||||
}
|
||||
|
||||
if (loaded_count === count) {
|
||||
this.nodes_loaded = true;
|
||||
this.enhance('nodes');
|
||||
}
|
||||
}
|
||||
|
||||
return this;
|
||||
},
|
||||
|
||||
enhance : function (type) {
|
||||
var i = this['cached_' + type].length;
|
||||
|
||||
while (i--) {
|
||||
this.object($(this['cached_' + type][i]));
|
||||
}
|
||||
|
||||
return $(window).trigger('resize.fndtn.interchange');
|
||||
},
|
||||
|
||||
convert_directive : function (directive) {
|
||||
|
||||
var trimmed = this.trim(directive);
|
||||
|
||||
if (trimmed.length > 0) {
|
||||
return trimmed;
|
||||
}
|
||||
|
||||
return 'replace';
|
||||
},
|
||||
|
||||
parse_scenario : function (scenario) {
|
||||
// This logic had to be made more complex since some users were using commas in the url path
|
||||
// So we cannot simply just split on a comma
|
||||
|
||||
var directive_match = scenario[0].match(/(.+),\s*(\w+)\s*$/),
|
||||
// getting the mq has gotten a bit complicated since we started accounting for several use cases
|
||||
// of URLs. For now we'll continue to match these scenarios, but we may consider having these scenarios
|
||||
// as nested objects or arrays in F6.
|
||||
// regex: match everything before close parenthesis for mq
|
||||
media_query = scenario[1].match(/(.*)\)/);
|
||||
|
||||
if (directive_match) {
|
||||
var path = directive_match[1],
|
||||
directive = directive_match[2];
|
||||
|
||||
} else {
|
||||
var cached_split = scenario[0].split(/,\s*$/),
|
||||
path = cached_split[0],
|
||||
directive = '';
|
||||
}
|
||||
|
||||
return [this.trim(path), this.convert_directive(directive), this.trim(media_query[1])];
|
||||
},
|
||||
|
||||
object : function (el) {
|
||||
var raw_arr = this.parse_data_attr(el),
|
||||
scenarios = [],
|
||||
i = raw_arr.length;
|
||||
|
||||
if (i > 0) {
|
||||
while (i--) {
|
||||
// split array between comma delimited content and mq
|
||||
// regex: comma, optional space, open parenthesis
|
||||
var scenario = raw_arr[i].split(/,\s?\(/);
|
||||
|
||||
if (scenario.length > 1) {
|
||||
var params = this.parse_scenario(scenario);
|
||||
scenarios.push(params);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
return this.store(el, scenarios);
|
||||
},
|
||||
|
||||
store : function (el, scenarios) {
|
||||
var uuid = this.random_str(),
|
||||
current_uuid = el.data(this.add_namespace('uuid', true));
|
||||
|
||||
if (this.cache[current_uuid]) {
|
||||
return this.cache[current_uuid];
|
||||
}
|
||||
|
||||
el.attr(this.add_namespace('data-uuid'), uuid);
|
||||
return this.cache[uuid] = scenarios;
|
||||
},
|
||||
|
||||
trim : function (str) {
|
||||
|
||||
if (typeof str === 'string') {
|
||||
return $.trim(str);
|
||||
}
|
||||
|
||||
return str;
|
||||
},
|
||||
|
||||
set_data_attr : function (init) {
|
||||
if (init) {
|
||||
if (this.namespace.length > 0) {
|
||||
return this.namespace + '-' + this.settings.load_attr;
|
||||
}
|
||||
|
||||
return this.settings.load_attr;
|
||||
}
|
||||
|
||||
if (this.namespace.length > 0) {
|
||||
return 'data-' + this.namespace + '-' + this.settings.load_attr;
|
||||
}
|
||||
|
||||
return 'data-' + this.settings.load_attr;
|
||||
},
|
||||
|
||||
parse_data_attr : function (el) {
|
||||
var raw = el.attr(this.attr_name()).split(/\[(.*?)\]/),
|
||||
i = raw.length,
|
||||
output = [];
|
||||
|
||||
while (i--) {
|
||||
if (raw[i].replace(/[\W\d]+/, '').length > 4) {
|
||||
output.push(raw[i]);
|
||||
}
|
||||
}
|
||||
|
||||
return output;
|
||||
},
|
||||
|
||||
reflow : function () {
|
||||
this.load('images', true);
|
||||
this.load('nodes', true);
|
||||
}
|
||||
|
||||
};
|
||||
|
||||
}(jQuery, window, window.document));
|
||||
@@ -0,0 +1,725 @@
|
||||
/*
|
||||
* Foundation Responsive Library
|
||||
* http://foundation.zurb.com
|
||||
* Copyright 2014, ZURB
|
||||
* Free to use under the MIT license.
|
||||
* http://www.opensource.org/licenses/mit-license.php
|
||||
*/
|
||||
|
||||
(function ($, window, document, undefined) {
|
||||
'use strict';
|
||||
|
||||
var header_helpers = function (class_array) {
|
||||
var i = class_array.length;
|
||||
var head = $('head');
|
||||
|
||||
while (i--) {
|
||||
if (head.has('.' + class_array[i]).length === 0) {
|
||||
head.append('<meta class="' + class_array[i] + '" />');
|
||||
}
|
||||
}
|
||||
};
|
||||
|
||||
header_helpers([
|
||||
'foundation-mq-small',
|
||||
'foundation-mq-small-only',
|
||||
'foundation-mq-medium',
|
||||
'foundation-mq-medium-only',
|
||||
'foundation-mq-large',
|
||||
'foundation-mq-large-only',
|
||||
'foundation-mq-xlarge',
|
||||
'foundation-mq-xlarge-only',
|
||||
'foundation-mq-xxlarge',
|
||||
'foundation-data-attribute-namespace']);
|
||||
|
||||
// Enable FastClick if present
|
||||
|
||||
$(function () {
|
||||
if (typeof FastClick !== 'undefined') {
|
||||
// Don't attach to body if undefined
|
||||
if (typeof document.body !== 'undefined') {
|
||||
FastClick.attach(document.body);
|
||||
}
|
||||
}
|
||||
});
|
||||
|
||||
// private Fast Selector wrapper,
|
||||
// returns jQuery object. Only use where
|
||||
// getElementById is not available.
|
||||
var S = function (selector, context) {
|
||||
if (typeof selector === 'string') {
|
||||
if (context) {
|
||||
var cont;
|
||||
if (context.jquery) {
|
||||
cont = context[0];
|
||||
if (!cont) {
|
||||
return context;
|
||||
}
|
||||
} else {
|
||||
cont = context;
|
||||
}
|
||||
return $(cont.querySelectorAll(selector));
|
||||
}
|
||||
|
||||
return $(document.querySelectorAll(selector));
|
||||
}
|
||||
|
||||
return $(selector, context);
|
||||
};
|
||||
|
||||
// Namespace functions.
|
||||
|
||||
var attr_name = function (init) {
|
||||
var arr = [];
|
||||
if (!init) {
|
||||
arr.push('data');
|
||||
}
|
||||
if (this.namespace.length > 0) {
|
||||
arr.push(this.namespace);
|
||||
}
|
||||
arr.push(this.name);
|
||||
|
||||
return arr.join('-');
|
||||
};
|
||||
|
||||
var add_namespace = function (str) {
|
||||
var parts = str.split('-'),
|
||||
i = parts.length,
|
||||
arr = [];
|
||||
|
||||
while (i--) {
|
||||
if (i !== 0) {
|
||||
arr.push(parts[i]);
|
||||
} else {
|
||||
if (this.namespace.length > 0) {
|
||||
arr.push(this.namespace, parts[i]);
|
||||
} else {
|
||||
arr.push(parts[i]);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
return arr.reverse().join('-');
|
||||
};
|
||||
|
||||
// Event binding and data-options updating.
|
||||
|
||||
var bindings = function (method, options) {
|
||||
var self = this,
|
||||
bind = function(){
|
||||
var $this = S(this),
|
||||
should_bind_events = !$this.data(self.attr_name(true) + '-init');
|
||||
$this.data(self.attr_name(true) + '-init', $.extend({}, self.settings, (options || method), self.data_options($this)));
|
||||
|
||||
if (should_bind_events) {
|
||||
self.events(this);
|
||||
}
|
||||
};
|
||||
|
||||
if (S(this.scope).is('[' + this.attr_name() +']')) {
|
||||
bind.call(this.scope);
|
||||
} else {
|
||||
S('[' + this.attr_name() +']', this.scope).each(bind);
|
||||
}
|
||||
// # Patch to fix #5043 to move this *after* the if/else clause in order for Backbone and similar frameworks to have improved control over event binding and data-options updating.
|
||||
if (typeof method === 'string') {
|
||||
return this[method].call(this, options);
|
||||
}
|
||||
|
||||
};
|
||||
|
||||
var single_image_loaded = function (image, callback) {
|
||||
function loaded () {
|
||||
callback(image[0]);
|
||||
}
|
||||
|
||||
function bindLoad () {
|
||||
this.one('load', loaded);
|
||||
|
||||
if (/MSIE (\d+\.\d+);/.test(navigator.userAgent)) {
|
||||
var src = this.attr( 'src' ),
|
||||
param = src.match( /\?/ ) ? '&' : '?';
|
||||
|
||||
param += 'random=' + (new Date()).getTime();
|
||||
this.attr('src', src + param);
|
||||
}
|
||||
}
|
||||
|
||||
if (!image.attr('src')) {
|
||||
loaded();
|
||||
return;
|
||||
}
|
||||
|
||||
if (image[0].complete || image[0].readyState === 4) {
|
||||
loaded();
|
||||
} else {
|
||||
bindLoad.call(image);
|
||||
}
|
||||
};
|
||||
|
||||
/*! matchMedia() polyfill - Test a CSS media type/query in JS. Authors & copyright (c) 2012: Scott Jehl, Paul Irish, Nicholas Zakas, David Knight. Dual MIT/BSD license */
|
||||
|
||||
window.matchMedia || (window.matchMedia = function() {
|
||||
"use strict";
|
||||
|
||||
// For browsers that support matchMedium api such as IE 9 and webkit
|
||||
var styleMedia = (window.styleMedia || window.media);
|
||||
|
||||
// For those that don't support matchMedium
|
||||
if (!styleMedia) {
|
||||
var style = document.createElement('style'),
|
||||
script = document.getElementsByTagName('script')[0],
|
||||
info = null;
|
||||
|
||||
style.type = 'text/css';
|
||||
style.id = 'matchmediajs-test';
|
||||
|
||||
script.parentNode.insertBefore(style, script);
|
||||
|
||||
// 'style.currentStyle' is used by IE <= 8 and 'window.getComputedStyle' for all other browsers
|
||||
info = ('getComputedStyle' in window) && window.getComputedStyle(style, null) || style.currentStyle;
|
||||
|
||||
styleMedia = {
|
||||
matchMedium: function(media) {
|
||||
var text = '@media ' + media + '{ #matchmediajs-test { width: 1px; } }';
|
||||
|
||||
// 'style.styleSheet' is used by IE <= 8 and 'style.textContent' for all other browsers
|
||||
if (style.styleSheet) {
|
||||
style.styleSheet.cssText = text;
|
||||
} else {
|
||||
style.textContent = text;
|
||||
}
|
||||
|
||||
// Test if media query is true or false
|
||||
return info.width === '1px';
|
||||
}
|
||||
};
|
||||
}
|
||||
|
||||
return function(media) {
|
||||
return {
|
||||
matches: styleMedia.matchMedium(media || 'all'),
|
||||
media: media || 'all'
|
||||
};
|
||||
};
|
||||
}());
|
||||
|
||||
/*
|
||||
* jquery.requestAnimationFrame
|
||||
* https://github.com/gnarf37/jquery-requestAnimationFrame
|
||||
* Requires jQuery 1.8+
|
||||
*
|
||||
* Copyright (c) 2012 Corey Frang
|
||||
* Licensed under the MIT license.
|
||||
*/
|
||||
|
||||
(function(jQuery) {
|
||||
|
||||
|
||||
// requestAnimationFrame polyfill adapted from Erik Möller
|
||||
// fixes from Paul Irish and Tino Zijdel
|
||||
// http://paulirish.com/2011/requestanimationframe-for-smart-animating/
|
||||
// http://my.opera.com/emoller/blog/2011/12/20/requestanimationframe-for-smart-er-animating
|
||||
|
||||
var animating,
|
||||
lastTime = 0,
|
||||
vendors = ['webkit', 'moz'],
|
||||
requestAnimationFrame = window.requestAnimationFrame,
|
||||
cancelAnimationFrame = window.cancelAnimationFrame,
|
||||
jqueryFxAvailable = 'undefined' !== typeof jQuery.fx;
|
||||
|
||||
for (; lastTime < vendors.length && !requestAnimationFrame; lastTime++) {
|
||||
requestAnimationFrame = window[ vendors[lastTime] + 'RequestAnimationFrame' ];
|
||||
cancelAnimationFrame = cancelAnimationFrame ||
|
||||
window[ vendors[lastTime] + 'CancelAnimationFrame' ] ||
|
||||
window[ vendors[lastTime] + 'CancelRequestAnimationFrame' ];
|
||||
}
|
||||
|
||||
function raf() {
|
||||
if (animating) {
|
||||
requestAnimationFrame(raf);
|
||||
|
||||
if (jqueryFxAvailable) {
|
||||
jQuery.fx.tick();
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
if (requestAnimationFrame) {
|
||||
// use rAF
|
||||
window.requestAnimationFrame = requestAnimationFrame;
|
||||
window.cancelAnimationFrame = cancelAnimationFrame;
|
||||
|
||||
if (jqueryFxAvailable) {
|
||||
jQuery.fx.timer = function (timer) {
|
||||
if (timer() && jQuery.timers.push(timer) && !animating) {
|
||||
animating = true;
|
||||
raf();
|
||||
}
|
||||
};
|
||||
|
||||
jQuery.fx.stop = function () {
|
||||
animating = false;
|
||||
};
|
||||
}
|
||||
} else {
|
||||
// polyfill
|
||||
window.requestAnimationFrame = function (callback) {
|
||||
var currTime = new Date().getTime(),
|
||||
timeToCall = Math.max(0, 16 - (currTime - lastTime)),
|
||||
id = window.setTimeout(function () {
|
||||
callback(currTime + timeToCall);
|
||||
}, timeToCall);
|
||||
lastTime = currTime + timeToCall;
|
||||
return id;
|
||||
};
|
||||
|
||||
window.cancelAnimationFrame = function (id) {
|
||||
clearTimeout(id);
|
||||
};
|
||||
|
||||
}
|
||||
|
||||
}( $ ));
|
||||
|
||||
function removeQuotes (string) {
|
||||
if (typeof string === 'string' || string instanceof String) {
|
||||
string = string.replace(/^['\\/"]+|(;\s?})+|['\\/"]+$/g, '');
|
||||
}
|
||||
|
||||
return string;
|
||||
}
|
||||
|
||||
window.Foundation = {
|
||||
name : 'Foundation',
|
||||
|
||||
version : '5.5.2',
|
||||
|
||||
media_queries : {
|
||||
'small' : S('.foundation-mq-small').css('font-family').replace(/^[\/\\'"]+|(;\s?})+|[\/\\'"]+$/g, ''),
|
||||
'small-only' : S('.foundation-mq-small-only').css('font-family').replace(/^[\/\\'"]+|(;\s?})+|[\/\\'"]+$/g, ''),
|
||||
'medium' : S('.foundation-mq-medium').css('font-family').replace(/^[\/\\'"]+|(;\s?})+|[\/\\'"]+$/g, ''),
|
||||
'medium-only' : S('.foundation-mq-medium-only').css('font-family').replace(/^[\/\\'"]+|(;\s?})+|[\/\\'"]+$/g, ''),
|
||||
'large' : S('.foundation-mq-large').css('font-family').replace(/^[\/\\'"]+|(;\s?})+|[\/\\'"]+$/g, ''),
|
||||
'large-only' : S('.foundation-mq-large-only').css('font-family').replace(/^[\/\\'"]+|(;\s?})+|[\/\\'"]+$/g, ''),
|
||||
'xlarge' : S('.foundation-mq-xlarge').css('font-family').replace(/^[\/\\'"]+|(;\s?})+|[\/\\'"]+$/g, ''),
|
||||
'xlarge-only' : S('.foundation-mq-xlarge-only').css('font-family').replace(/^[\/\\'"]+|(;\s?})+|[\/\\'"]+$/g, ''),
|
||||
'xxlarge' : S('.foundation-mq-xxlarge').css('font-family').replace(/^[\/\\'"]+|(;\s?})+|[\/\\'"]+$/g, '')
|
||||
},
|
||||
|
||||
stylesheet : $('<style></style>').appendTo('head')[0].sheet,
|
||||
|
||||
global : {
|
||||
namespace : undefined
|
||||
},
|
||||
|
||||
init : function (scope, libraries, method, options, response) {
|
||||
var args = [scope, method, options, response],
|
||||
responses = [];
|
||||
|
||||
// check RTL
|
||||
this.rtl = /rtl/i.test(S('html').attr('dir'));
|
||||
|
||||
// set foundation global scope
|
||||
this.scope = scope || this.scope;
|
||||
|
||||
this.set_namespace();
|
||||
|
||||
if (libraries && typeof libraries === 'string' && !/reflow/i.test(libraries)) {
|
||||
if (this.libs.hasOwnProperty(libraries)) {
|
||||
responses.push(this.init_lib(libraries, args));
|
||||
}
|
||||
} else {
|
||||
for (var lib in this.libs) {
|
||||
responses.push(this.init_lib(lib, libraries));
|
||||
}
|
||||
}
|
||||
|
||||
S(window).load(function () {
|
||||
S(window)
|
||||
.trigger('resize.fndtn.clearing')
|
||||
.trigger('resize.fndtn.dropdown')
|
||||
.trigger('resize.fndtn.equalizer')
|
||||
.trigger('resize.fndtn.interchange')
|
||||
.trigger('resize.fndtn.joyride')
|
||||
.trigger('resize.fndtn.magellan')
|
||||
.trigger('resize.fndtn.topbar')
|
||||
.trigger('resize.fndtn.slider');
|
||||
});
|
||||
|
||||
return scope;
|
||||
},
|
||||
|
||||
init_lib : function (lib, args) {
|
||||
if (this.libs.hasOwnProperty(lib)) {
|
||||
this.patch(this.libs[lib]);
|
||||
|
||||
if (args && args.hasOwnProperty(lib)) {
|
||||
if (typeof this.libs[lib].settings !== 'undefined') {
|
||||
$.extend(true, this.libs[lib].settings, args[lib]);
|
||||
} else if (typeof this.libs[lib].defaults !== 'undefined') {
|
||||
$.extend(true, this.libs[lib].defaults, args[lib]);
|
||||
}
|
||||
return this.libs[lib].init.apply(this.libs[lib], [this.scope, args[lib]]);
|
||||
}
|
||||
|
||||
args = args instanceof Array ? args : new Array(args);
|
||||
return this.libs[lib].init.apply(this.libs[lib], args);
|
||||
}
|
||||
|
||||
return function () {};
|
||||
},
|
||||
|
||||
patch : function (lib) {
|
||||
lib.scope = this.scope;
|
||||
lib.namespace = this.global.namespace;
|
||||
lib.rtl = this.rtl;
|
||||
lib['data_options'] = this.utils.data_options;
|
||||
lib['attr_name'] = attr_name;
|
||||
lib['add_namespace'] = add_namespace;
|
||||
lib['bindings'] = bindings;
|
||||
lib['S'] = this.utils.S;
|
||||
},
|
||||
|
||||
inherit : function (scope, methods) {
|
||||
var methods_arr = methods.split(' '),
|
||||
i = methods_arr.length;
|
||||
|
||||
while (i--) {
|
||||
if (this.utils.hasOwnProperty(methods_arr[i])) {
|
||||
scope[methods_arr[i]] = this.utils[methods_arr[i]];
|
||||
}
|
||||
}
|
||||
},
|
||||
|
||||
set_namespace : function () {
|
||||
|
||||
// Description:
|
||||
// Don't bother reading the namespace out of the meta tag
|
||||
// if the namespace has been set globally in javascript
|
||||
//
|
||||
// Example:
|
||||
// Foundation.global.namespace = 'my-namespace';
|
||||
// or make it an empty string:
|
||||
// Foundation.global.namespace = '';
|
||||
//
|
||||
//
|
||||
|
||||
// If the namespace has not been set (is undefined), try to read it out of the meta element.
|
||||
// Otherwise use the globally defined namespace, even if it's empty ('')
|
||||
var namespace = ( this.global.namespace === undefined ) ? $('.foundation-data-attribute-namespace').css('font-family') : this.global.namespace;
|
||||
|
||||
// Finally, if the namsepace is either undefined or false, set it to an empty string.
|
||||
// Otherwise use the namespace value.
|
||||
this.global.namespace = ( namespace === undefined || /false/i.test(namespace) ) ? '' : namespace;
|
||||
},
|
||||
|
||||
libs : {},
|
||||
|
||||
// methods that can be inherited in libraries
|
||||
utils : {
|
||||
|
||||
// Description:
|
||||
// Fast Selector wrapper returns jQuery object. Only use where getElementById
|
||||
// is not available.
|
||||
//
|
||||
// Arguments:
|
||||
// Selector (String): CSS selector describing the element(s) to be
|
||||
// returned as a jQuery object.
|
||||
//
|
||||
// Scope (String): CSS selector describing the area to be searched. Default
|
||||
// is document.
|
||||
//
|
||||
// Returns:
|
||||
// Element (jQuery Object): jQuery object containing elements matching the
|
||||
// selector within the scope.
|
||||
S : S,
|
||||
|
||||
// Description:
|
||||
// Executes a function a max of once every n milliseconds
|
||||
//
|
||||
// Arguments:
|
||||
// Func (Function): Function to be throttled.
|
||||
//
|
||||
// Delay (Integer): Function execution threshold in milliseconds.
|
||||
//
|
||||
// Returns:
|
||||
// Lazy_function (Function): Function with throttling applied.
|
||||
throttle : function (func, delay) {
|
||||
var timer = null;
|
||||
|
||||
return function () {
|
||||
var context = this, args = arguments;
|
||||
|
||||
if (timer == null) {
|
||||
timer = setTimeout(function () {
|
||||
func.apply(context, args);
|
||||
timer = null;
|
||||
}, delay);
|
||||
}
|
||||
};
|
||||
},
|
||||
|
||||
// Description:
|
||||
// Executes a function when it stops being invoked for n seconds
|
||||
// Modified version of _.debounce() http://underscorejs.org
|
||||
//
|
||||
// Arguments:
|
||||
// Func (Function): Function to be debounced.
|
||||
//
|
||||
// Delay (Integer): Function execution threshold in milliseconds.
|
||||
//
|
||||
// Immediate (Bool): Whether the function should be called at the beginning
|
||||
// of the delay instead of the end. Default is false.
|
||||
//
|
||||
// Returns:
|
||||
// Lazy_function (Function): Function with debouncing applied.
|
||||
debounce : function (func, delay, immediate) {
|
||||
var timeout, result;
|
||||
return function () {
|
||||
var context = this, args = arguments;
|
||||
var later = function () {
|
||||
timeout = null;
|
||||
if (!immediate) {
|
||||
result = func.apply(context, args);
|
||||
}
|
||||
};
|
||||
var callNow = immediate && !timeout;
|
||||
clearTimeout(timeout);
|
||||
timeout = setTimeout(later, delay);
|
||||
if (callNow) {
|
||||
result = func.apply(context, args);
|
||||
}
|
||||
return result;
|
||||
};
|
||||
},
|
||||
|
||||
// Description:
|
||||
// Parses data-options attribute
|
||||
//
|
||||
// Arguments:
|
||||
// El (jQuery Object): Element to be parsed.
|
||||
//
|
||||
// Returns:
|
||||
// Options (Javascript Object): Contents of the element's data-options
|
||||
// attribute.
|
||||
data_options : function (el, data_attr_name) {
|
||||
data_attr_name = data_attr_name || 'options';
|
||||
var opts = {}, ii, p, opts_arr,
|
||||
data_options = function (el) {
|
||||
var namespace = Foundation.global.namespace;
|
||||
|
||||
if (namespace.length > 0) {
|
||||
return el.data(namespace + '-' + data_attr_name);
|
||||
}
|
||||
|
||||
return el.data(data_attr_name);
|
||||
};
|
||||
|
||||
var cached_options = data_options(el);
|
||||
|
||||
if (typeof cached_options === 'object') {
|
||||
return cached_options;
|
||||
}
|
||||
|
||||
opts_arr = (cached_options || ':').split(';');
|
||||
ii = opts_arr.length;
|
||||
|
||||
function isNumber (o) {
|
||||
return !isNaN (o - 0) && o !== null && o !== '' && o !== false && o !== true;
|
||||
}
|
||||
|
||||
function trim (str) {
|
||||
if (typeof str === 'string') {
|
||||
return $.trim(str);
|
||||
}
|
||||
return str;
|
||||
}
|
||||
|
||||
while (ii--) {
|
||||
p = opts_arr[ii].split(':');
|
||||
p = [p[0], p.slice(1).join(':')];
|
||||
|
||||
if (/true/i.test(p[1])) {
|
||||
p[1] = true;
|
||||
}
|
||||
if (/false/i.test(p[1])) {
|
||||
p[1] = false;
|
||||
}
|
||||
if (isNumber(p[1])) {
|
||||
if (p[1].indexOf('.') === -1) {
|
||||
p[1] = parseInt(p[1], 10);
|
||||
} else {
|
||||
p[1] = parseFloat(p[1]);
|
||||
}
|
||||
}
|
||||
|
||||
if (p.length === 2 && p[0].length > 0) {
|
||||
opts[trim(p[0])] = trim(p[1]);
|
||||
}
|
||||
}
|
||||
|
||||
return opts;
|
||||
},
|
||||
|
||||
// Description:
|
||||
// Adds JS-recognizable media queries
|
||||
//
|
||||
// Arguments:
|
||||
// Media (String): Key string for the media query to be stored as in
|
||||
// Foundation.media_queries
|
||||
//
|
||||
// Class (String): Class name for the generated <meta> tag
|
||||
register_media : function (media, media_class) {
|
||||
if (Foundation.media_queries[media] === undefined) {
|
||||
$('head').append('<meta class="' + media_class + '"/>');
|
||||
Foundation.media_queries[media] = removeQuotes($('.' + media_class).css('font-family'));
|
||||
}
|
||||
},
|
||||
|
||||
// Description:
|
||||
// Add custom CSS within a JS-defined media query
|
||||
//
|
||||
// Arguments:
|
||||
// Rule (String): CSS rule to be appended to the document.
|
||||
//
|
||||
// Media (String): Optional media query string for the CSS rule to be
|
||||
// nested under.
|
||||
add_custom_rule : function (rule, media) {
|
||||
if (media === undefined && Foundation.stylesheet) {
|
||||
Foundation.stylesheet.insertRule(rule, Foundation.stylesheet.cssRules.length);
|
||||
} else {
|
||||
var query = Foundation.media_queries[media];
|
||||
|
||||
if (query !== undefined) {
|
||||
Foundation.stylesheet.insertRule('@media ' +
|
||||
Foundation.media_queries[media] + '{ ' + rule + ' }', Foundation.stylesheet.cssRules.length);
|
||||
}
|
||||
}
|
||||
},
|
||||
|
||||
// Description:
|
||||
// Performs a callback function when an image is fully loaded
|
||||
//
|
||||
// Arguments:
|
||||
// Image (jQuery Object): Image(s) to check if loaded.
|
||||
//
|
||||
// Callback (Function): Function to execute when image is fully loaded.
|
||||
image_loaded : function (images, callback) {
|
||||
var self = this,
|
||||
unloaded = images.length;
|
||||
|
||||
function pictures_has_height(images) {
|
||||
var pictures_number = images.length;
|
||||
|
||||
for (var i = pictures_number - 1; i >= 0; i--) {
|
||||
if(images.attr('height') === undefined) {
|
||||
return false;
|
||||
};
|
||||
};
|
||||
|
||||
return true;
|
||||
}
|
||||
|
||||
if (unloaded === 0 || pictures_has_height(images)) {
|
||||
callback(images);
|
||||
}
|
||||
|
||||
images.each(function () {
|
||||
single_image_loaded(self.S(this), function () {
|
||||
unloaded -= 1;
|
||||
if (unloaded === 0) {
|
||||
callback(images);
|
||||
}
|
||||
});
|
||||
});
|
||||
},
|
||||
|
||||
// Description:
|
||||
// Returns a random, alphanumeric string
|
||||
//
|
||||
// Arguments:
|
||||
// Length (Integer): Length of string to be generated. Defaults to random
|
||||
// integer.
|
||||
//
|
||||
// Returns:
|
||||
// Rand (String): Pseudo-random, alphanumeric string.
|
||||
random_str : function () {
|
||||
if (!this.fidx) {
|
||||
this.fidx = 0;
|
||||
}
|
||||
this.prefix = this.prefix || [(this.name || 'F'), (+new Date).toString(36)].join('-');
|
||||
|
||||
return this.prefix + (this.fidx++).toString(36);
|
||||
},
|
||||
|
||||
// Description:
|
||||
// Helper for window.matchMedia
|
||||
//
|
||||
// Arguments:
|
||||
// mq (String): Media query
|
||||
//
|
||||
// Returns:
|
||||
// (Boolean): Whether the media query passes or not
|
||||
match : function (mq) {
|
||||
return window.matchMedia(mq).matches;
|
||||
},
|
||||
|
||||
// Description:
|
||||
// Helpers for checking Foundation default media queries with JS
|
||||
//
|
||||
// Returns:
|
||||
// (Boolean): Whether the media query passes or not
|
||||
|
||||
is_small_up : function () {
|
||||
return this.match(Foundation.media_queries.small);
|
||||
},
|
||||
|
||||
is_medium_up : function () {
|
||||
return this.match(Foundation.media_queries.medium);
|
||||
},
|
||||
|
||||
is_large_up : function () {
|
||||
return this.match(Foundation.media_queries.large);
|
||||
},
|
||||
|
||||
is_xlarge_up : function () {
|
||||
return this.match(Foundation.media_queries.xlarge);
|
||||
},
|
||||
|
||||
is_xxlarge_up : function () {
|
||||
return this.match(Foundation.media_queries.xxlarge);
|
||||
},
|
||||
|
||||
is_small_only : function () {
|
||||
return !this.is_medium_up() && !this.is_large_up() && !this.is_xlarge_up() && !this.is_xxlarge_up();
|
||||
},
|
||||
|
||||
is_medium_only : function () {
|
||||
return this.is_medium_up() && !this.is_large_up() && !this.is_xlarge_up() && !this.is_xxlarge_up();
|
||||
},
|
||||
|
||||
is_large_only : function () {
|
||||
return this.is_medium_up() && this.is_large_up() && !this.is_xlarge_up() && !this.is_xxlarge_up();
|
||||
},
|
||||
|
||||
is_xlarge_only : function () {
|
||||
return this.is_medium_up() && this.is_large_up() && this.is_xlarge_up() && !this.is_xxlarge_up();
|
||||
},
|
||||
|
||||
is_xxlarge_only : function () {
|
||||
return this.is_medium_up() && this.is_large_up() && this.is_xlarge_up() && this.is_xxlarge_up();
|
||||
}
|
||||
}
|
||||
};
|
||||
|
||||
$.fn.foundation = function () {
|
||||
var args = Array.prototype.slice.call(arguments, 0);
|
||||
|
||||
return this.each(function () {
|
||||
Foundation.init.apply(Foundation, [this].concat(args));
|
||||
return this;
|
||||
});
|
||||
};
|
||||
|
||||
}(jQuery, window, window.document));
|
||||
@@ -0,0 +1,498 @@
|
||||
;(function ($, window, document, undefined) {
|
||||
'use strict';
|
||||
|
||||
Foundation.libs.reveal = {
|
||||
name : 'reveal',
|
||||
|
||||
version : '5.5.2',
|
||||
|
||||
locked : false,
|
||||
|
||||
settings : {
|
||||
animation : 'fadeAndPop',
|
||||
animation_speed : 250,
|
||||
close_on_background_click : true,
|
||||
close_on_esc : true,
|
||||
dismiss_modal_class : 'close-reveal-modal',
|
||||
multiple_opened : false,
|
||||
bg_class : 'reveal-modal-bg',
|
||||
root_element : 'body',
|
||||
open : function(){},
|
||||
opened : function(){},
|
||||
close : function(){},
|
||||
closed : function(){},
|
||||
on_ajax_error: $.noop,
|
||||
bg : $('.reveal-modal-bg'),
|
||||
css : {
|
||||
open : {
|
||||
'opacity' : 0,
|
||||
'visibility' : 'visible',
|
||||
'display' : 'block'
|
||||
},
|
||||
close : {
|
||||
'opacity' : 1,
|
||||
'visibility' : 'hidden',
|
||||
'display' : 'none'
|
||||
}
|
||||
}
|
||||
},
|
||||
|
||||
init : function (scope, method, options) {
|
||||
$.extend(true, this.settings, method, options);
|
||||
this.bindings(method, options);
|
||||
},
|
||||
|
||||
events : function (scope) {
|
||||
var self = this,
|
||||
S = self.S;
|
||||
|
||||
S(this.scope)
|
||||
.off('.reveal')
|
||||
.on('click.fndtn.reveal', '[' + this.add_namespace('data-reveal-id') + ']:not([disabled])', function (e) {
|
||||
e.preventDefault();
|
||||
|
||||
if (!self.locked) {
|
||||
var element = S(this),
|
||||
ajax = element.data(self.data_attr('reveal-ajax')),
|
||||
replaceContentSel = element.data(self.data_attr('reveal-replace-content'));
|
||||
|
||||
self.locked = true;
|
||||
|
||||
if (typeof ajax === 'undefined') {
|
||||
self.open.call(self, element);
|
||||
} else {
|
||||
var url = ajax === true ? element.attr('href') : ajax;
|
||||
self.open.call(self, element, {url : url}, { replaceContentSel : replaceContentSel });
|
||||
}
|
||||
}
|
||||
});
|
||||
|
||||
S(document)
|
||||
.on('click.fndtn.reveal', this.close_targets(), function (e) {
|
||||
e.preventDefault();
|
||||
if (!self.locked) {
|
||||
var settings = S('[' + self.attr_name() + '].open').data(self.attr_name(true) + '-init') || self.settings,
|
||||
bg_clicked = S(e.target)[0] === S('.' + settings.bg_class)[0];
|
||||
|
||||
if (bg_clicked) {
|
||||
if (settings.close_on_background_click) {
|
||||
e.stopPropagation();
|
||||
} else {
|
||||
return;
|
||||
}
|
||||
}
|
||||
|
||||
self.locked = true;
|
||||
self.close.call(self, bg_clicked ? S('[' + self.attr_name() + '].open:not(.toback)') : S(this).closest('[' + self.attr_name() + ']'));
|
||||
}
|
||||
});
|
||||
|
||||
if (S('[' + self.attr_name() + ']', this.scope).length > 0) {
|
||||
S(this.scope)
|
||||
// .off('.reveal')
|
||||
.on('open.fndtn.reveal', this.settings.open)
|
||||
.on('opened.fndtn.reveal', this.settings.opened)
|
||||
.on('opened.fndtn.reveal', this.open_video)
|
||||
.on('close.fndtn.reveal', this.settings.close)
|
||||
.on('closed.fndtn.reveal', this.settings.closed)
|
||||
.on('closed.fndtn.reveal', this.close_video);
|
||||
} else {
|
||||
S(this.scope)
|
||||
// .off('.reveal')
|
||||
.on('open.fndtn.reveal', '[' + self.attr_name() + ']', this.settings.open)
|
||||
.on('opened.fndtn.reveal', '[' + self.attr_name() + ']', this.settings.opened)
|
||||
.on('opened.fndtn.reveal', '[' + self.attr_name() + ']', this.open_video)
|
||||
.on('close.fndtn.reveal', '[' + self.attr_name() + ']', this.settings.close)
|
||||
.on('closed.fndtn.reveal', '[' + self.attr_name() + ']', this.settings.closed)
|
||||
.on('closed.fndtn.reveal', '[' + self.attr_name() + ']', this.close_video);
|
||||
}
|
||||
|
||||
return true;
|
||||
},
|
||||
|
||||
// PATCH #3: turning on key up capture only when a reveal window is open
|
||||
key_up_on : function (scope) {
|
||||
var self = this;
|
||||
|
||||
// PATCH #1: fixing multiple keyup event trigger from single key press
|
||||
self.S('body').off('keyup.fndtn.reveal').on('keyup.fndtn.reveal', function ( event ) {
|
||||
var open_modal = self.S('[' + self.attr_name() + '].open'),
|
||||
settings = open_modal.data(self.attr_name(true) + '-init') || self.settings ;
|
||||
// PATCH #2: making sure that the close event can be called only while unlocked,
|
||||
// so that multiple keyup.fndtn.reveal events don't prevent clean closing of the reveal window.
|
||||
if ( settings && event.which === 27 && settings.close_on_esc && !self.locked) { // 27 is the keycode for the Escape key
|
||||
self.close.call(self, open_modal);
|
||||
}
|
||||
});
|
||||
|
||||
return true;
|
||||
},
|
||||
|
||||
// PATCH #3: turning on key up capture only when a reveal window is open
|
||||
key_up_off : function (scope) {
|
||||
this.S('body').off('keyup.fndtn.reveal');
|
||||
return true;
|
||||
},
|
||||
|
||||
open : function (target, ajax_settings) {
|
||||
var self = this,
|
||||
modal;
|
||||
|
||||
if (target) {
|
||||
if (typeof target.selector !== 'undefined') {
|
||||
// Find the named node; only use the first one found, since the rest of the code assumes there's only one node
|
||||
modal = self.S('#' + target.data(self.data_attr('reveal-id'))).first();
|
||||
} else {
|
||||
modal = self.S(this.scope);
|
||||
|
||||
ajax_settings = target;
|
||||
}
|
||||
} else {
|
||||
modal = self.S(this.scope);
|
||||
}
|
||||
|
||||
var settings = modal.data(self.attr_name(true) + '-init');
|
||||
settings = settings || this.settings;
|
||||
|
||||
|
||||
if (modal.hasClass('open') && target.attr('data-reveal-id') == modal.attr('id')) {
|
||||
return self.close(modal);
|
||||
}
|
||||
|
||||
if (!modal.hasClass('open')) {
|
||||
var open_modal = self.S('[' + self.attr_name() + '].open');
|
||||
|
||||
if (typeof modal.data('css-top') === 'undefined') {
|
||||
modal.data('css-top', parseInt(modal.css('top'), 10))
|
||||
.data('offset', this.cache_offset(modal));
|
||||
}
|
||||
|
||||
modal.attr('tabindex','0').attr('aria-hidden','false');
|
||||
|
||||
this.key_up_on(modal); // PATCH #3: turning on key up capture only when a reveal window is open
|
||||
|
||||
// Prevent namespace event from triggering twice
|
||||
modal.on('open.fndtn.reveal', function(e) {
|
||||
if (e.namespace !== 'fndtn.reveal') return;
|
||||
});
|
||||
|
||||
modal.on('open.fndtn.reveal').trigger('open.fndtn.reveal');
|
||||
|
||||
if (open_modal.length < 1) {
|
||||
this.toggle_bg(modal, true);
|
||||
}
|
||||
|
||||
if (typeof ajax_settings === 'string') {
|
||||
ajax_settings = {
|
||||
url : ajax_settings
|
||||
};
|
||||
}
|
||||
|
||||
if (typeof ajax_settings === 'undefined' || !ajax_settings.url) {
|
||||
if (open_modal.length > 0) {
|
||||
if (settings.multiple_opened) {
|
||||
self.to_back(open_modal);
|
||||
} else {
|
||||
self.hide(open_modal, settings.css.close);
|
||||
}
|
||||
}
|
||||
|
||||
this.show(modal, settings.css.open);
|
||||
} else {
|
||||
var old_success = typeof ajax_settings.success !== 'undefined' ? ajax_settings.success : null;
|
||||
$.extend(ajax_settings, {
|
||||
success : function (data, textStatus, jqXHR) {
|
||||
if ( $.isFunction(old_success) ) {
|
||||
var result = old_success(data, textStatus, jqXHR);
|
||||
if (typeof result == 'string') {
|
||||
data = result;
|
||||
}
|
||||
}
|
||||
|
||||
if (typeof options !== 'undefined' && typeof options.replaceContentSel !== 'undefined') {
|
||||
modal.find(options.replaceContentSel).html(data);
|
||||
} else {
|
||||
modal.html(data);
|
||||
}
|
||||
|
||||
self.S(modal).foundation('section', 'reflow');
|
||||
self.S(modal).children().foundation();
|
||||
|
||||
if (open_modal.length > 0) {
|
||||
if (settings.multiple_opened) {
|
||||
self.to_back(open_modal);
|
||||
} else {
|
||||
self.hide(open_modal, settings.css.close);
|
||||
}
|
||||
}
|
||||
self.show(modal, settings.css.open);
|
||||
}
|
||||
});
|
||||
|
||||
// check for if user initalized with error callback
|
||||
if (settings.on_ajax_error !== $.noop) {
|
||||
$.extend(ajax_settings, {
|
||||
error : settings.on_ajax_error
|
||||
});
|
||||
}
|
||||
|
||||
$.ajax(ajax_settings);
|
||||
}
|
||||
}
|
||||
self.S(window).trigger('resize');
|
||||
},
|
||||
|
||||
close : function (modal) {
|
||||
var modal = modal && modal.length ? modal : this.S(this.scope),
|
||||
open_modals = this.S('[' + this.attr_name() + '].open'),
|
||||
settings = modal.data(this.attr_name(true) + '-init') || this.settings,
|
||||
self = this;
|
||||
|
||||
if (open_modals.length > 0) {
|
||||
|
||||
modal.removeAttr('tabindex','0').attr('aria-hidden','true');
|
||||
|
||||
this.locked = true;
|
||||
this.key_up_off(modal); // PATCH #3: turning on key up capture only when a reveal window is open
|
||||
|
||||
modal.trigger('close.fndtn.reveal');
|
||||
|
||||
if ((settings.multiple_opened && open_modals.length === 1) || !settings.multiple_opened || modal.length > 1) {
|
||||
self.toggle_bg(modal, false);
|
||||
self.to_front(modal);
|
||||
}
|
||||
|
||||
if (settings.multiple_opened) {
|
||||
self.hide(modal, settings.css.close, settings);
|
||||
self.to_front($($.makeArray(open_modals).reverse()[1]));
|
||||
} else {
|
||||
self.hide(open_modals, settings.css.close, settings);
|
||||
}
|
||||
}
|
||||
},
|
||||
|
||||
close_targets : function () {
|
||||
var base = '.' + this.settings.dismiss_modal_class;
|
||||
|
||||
if (this.settings.close_on_background_click) {
|
||||
return base + ', .' + this.settings.bg_class;
|
||||
}
|
||||
|
||||
return base;
|
||||
},
|
||||
|
||||
toggle_bg : function (modal, state) {
|
||||
if (this.S('.' + this.settings.bg_class).length === 0) {
|
||||
this.settings.bg = $('<div />', {'class': this.settings.bg_class})
|
||||
.appendTo('body').hide();
|
||||
}
|
||||
|
||||
var visible = this.settings.bg.filter(':visible').length > 0;
|
||||
if ( state != visible ) {
|
||||
if ( state == undefined ? visible : !state ) {
|
||||
this.hide(this.settings.bg);
|
||||
} else {
|
||||
this.show(this.settings.bg);
|
||||
}
|
||||
}
|
||||
},
|
||||
|
||||
show : function (el, css) {
|
||||
// is modal
|
||||
if (css) {
|
||||
var settings = el.data(this.attr_name(true) + '-init') || this.settings,
|
||||
root_element = settings.root_element,
|
||||
context = this;
|
||||
|
||||
if (el.parent(root_element).length === 0) {
|
||||
var placeholder = el.wrap('<div style="display: none;" />').parent();
|
||||
|
||||
el.on('closed.fndtn.reveal.wrapped', function () {
|
||||
el.detach().appendTo(placeholder);
|
||||
el.unwrap().unbind('closed.fndtn.reveal.wrapped');
|
||||
});
|
||||
|
||||
el.detach().appendTo(root_element);
|
||||
}
|
||||
|
||||
var animData = getAnimationData(settings.animation);
|
||||
if (!animData.animate) {
|
||||
this.locked = false;
|
||||
}
|
||||
if (animData.pop) {
|
||||
css.top = $(window).scrollTop() - el.data('offset') + 'px';
|
||||
var end_css = {
|
||||
top: $(window).scrollTop() + el.data('css-top') + 'px',
|
||||
opacity: 1
|
||||
};
|
||||
|
||||
return setTimeout(function () {
|
||||
return el
|
||||
.css(css)
|
||||
.animate(end_css, settings.animation_speed, 'linear', function () {
|
||||
context.locked = false;
|
||||
el.trigger('opened.fndtn.reveal');
|
||||
})
|
||||
.addClass('open');
|
||||
}, settings.animation_speed / 2);
|
||||
}
|
||||
|
||||
if (animData.fade) {
|
||||
css.top = $(window).scrollTop() + el.data('css-top') + 'px';
|
||||
var end_css = {opacity: 1};
|
||||
|
||||
return setTimeout(function () {
|
||||
return el
|
||||
.css(css)
|
||||
.animate(end_css, settings.animation_speed, 'linear', function () {
|
||||
context.locked = false;
|
||||
el.trigger('opened.fndtn.reveal');
|
||||
})
|
||||
.addClass('open');
|
||||
}, settings.animation_speed / 2);
|
||||
}
|
||||
|
||||
return el.css(css).show().css({opacity : 1}).addClass('open').trigger('opened.fndtn.reveal');
|
||||
}
|
||||
|
||||
var settings = this.settings;
|
||||
|
||||
// should we animate the background?
|
||||
if (getAnimationData(settings.animation).fade) {
|
||||
return el.fadeIn(settings.animation_speed / 2);
|
||||
}
|
||||
|
||||
this.locked = false;
|
||||
|
||||
return el.show();
|
||||
},
|
||||
|
||||
to_back : function(el) {
|
||||
el.addClass('toback');
|
||||
},
|
||||
|
||||
to_front : function(el) {
|
||||
el.removeClass('toback');
|
||||
},
|
||||
|
||||
hide : function (el, css) {
|
||||
// is modal
|
||||
if (css) {
|
||||
var settings = el.data(this.attr_name(true) + '-init'),
|
||||
context = this;
|
||||
settings = settings || this.settings;
|
||||
|
||||
var animData = getAnimationData(settings.animation);
|
||||
if (!animData.animate) {
|
||||
this.locked = false;
|
||||
}
|
||||
if (animData.pop) {
|
||||
var end_css = {
|
||||
top: - $(window).scrollTop() - el.data('offset') + 'px',
|
||||
opacity: 0
|
||||
};
|
||||
|
||||
return setTimeout(function () {
|
||||
return el
|
||||
.animate(end_css, settings.animation_speed, 'linear', function () {
|
||||
context.locked = false;
|
||||
el.css(css).trigger('closed.fndtn.reveal');
|
||||
})
|
||||
.removeClass('open');
|
||||
}, settings.animation_speed / 2);
|
||||
}
|
||||
|
||||
if (animData.fade) {
|
||||
var end_css = {opacity : 0};
|
||||
|
||||
return setTimeout(function () {
|
||||
return el
|
||||
.animate(end_css, settings.animation_speed, 'linear', function () {
|
||||
context.locked = false;
|
||||
el.css(css).trigger('closed.fndtn.reveal');
|
||||
})
|
||||
.removeClass('open');
|
||||
}, settings.animation_speed / 2);
|
||||
}
|
||||
|
||||
return el.hide().css(css).removeClass('open').trigger('closed.fndtn.reveal');
|
||||
}
|
||||
|
||||
var settings = this.settings;
|
||||
|
||||
// should we animate the background?
|
||||
if (getAnimationData(settings.animation).fade) {
|
||||
return el.fadeOut(settings.animation_speed / 2);
|
||||
}
|
||||
|
||||
return el.hide();
|
||||
},
|
||||
|
||||
close_video : function (e) {
|
||||
var video = $('.flex-video', e.target),
|
||||
iframe = $('iframe', video);
|
||||
|
||||
if (iframe.length > 0) {
|
||||
iframe.attr('data-src', iframe[0].src);
|
||||
iframe.attr('src', iframe.attr('src'));
|
||||
video.hide();
|
||||
}
|
||||
},
|
||||
|
||||
open_video : function (e) {
|
||||
var video = $('.flex-video', e.target),
|
||||
iframe = video.find('iframe');
|
||||
|
||||
if (iframe.length > 0) {
|
||||
var data_src = iframe.attr('data-src');
|
||||
if (typeof data_src === 'string') {
|
||||
iframe[0].src = iframe.attr('data-src');
|
||||
} else {
|
||||
var src = iframe[0].src;
|
||||
iframe[0].src = undefined;
|
||||
iframe[0].src = src;
|
||||
}
|
||||
video.show();
|
||||
}
|
||||
},
|
||||
|
||||
data_attr : function (str) {
|
||||
if (this.namespace.length > 0) {
|
||||
return this.namespace + '-' + str;
|
||||
}
|
||||
|
||||
return str;
|
||||
},
|
||||
|
||||
cache_offset : function (modal) {
|
||||
var offset = modal.show().height() + parseInt(modal.css('top'), 10) + modal.scrollY;
|
||||
|
||||
modal.hide();
|
||||
|
||||
return offset;
|
||||
},
|
||||
|
||||
off : function () {
|
||||
$(this.scope).off('.fndtn.reveal');
|
||||
},
|
||||
|
||||
reflow : function () {}
|
||||
};
|
||||
|
||||
/*
|
||||
* getAnimationData('popAndFade') // {animate: true, pop: true, fade: true}
|
||||
* getAnimationData('fade') // {animate: true, pop: false, fade: true}
|
||||
* getAnimationData('pop') // {animate: true, pop: true, fade: false}
|
||||
* getAnimationData('foo') // {animate: false, pop: false, fade: false}
|
||||
* getAnimationData(null) // {animate: false, pop: false, fade: false}
|
||||
*/
|
||||
function getAnimationData(str) {
|
||||
var fade = /fade/i.test(str);
|
||||
var pop = /pop/i.test(str);
|
||||
return {
|
||||
animate : fade || pop,
|
||||
pop : pop,
|
||||
fade : fade
|
||||
};
|
||||
}
|
||||
}(jQuery, window, window.document));
|
||||
@@ -0,0 +1,8 @@
|
||||
/*!
|
||||
* jQuery Cookie Plugin v1.4.1
|
||||
* https://github.com/carhartl/jquery-cookie
|
||||
*
|
||||
* Copyright 2013 Klaus Hartl
|
||||
* Released under the MIT license
|
||||
*/
|
||||
!function(a){"function"==typeof define&&define.amd?define(["jquery"],a):a("object"==typeof exports?require("jquery"):jQuery)}(function(a){function b(a){return h.raw?a:encodeURIComponent(a)}function c(a){return h.raw?a:decodeURIComponent(a)}function d(a){return b(h.json?JSON.stringify(a):String(a))}function e(a){0===a.indexOf('"')&&(a=a.slice(1,-1).replace(/\\"/g,'"').replace(/\\\\/g,"\\"));try{return a=decodeURIComponent(a.replace(g," ")),h.json?JSON.parse(a):a}catch(b){}}function f(b,c){var d=h.raw?b:e(b);return a.isFunction(c)?c(d):d}var g=/\+/g,h=a.cookie=function(e,g,i){if(void 0!==g&&!a.isFunction(g)){if(i=a.extend({},h.defaults,i),"number"==typeof i.expires){var j=i.expires,k=i.expires=new Date;k.setTime(+k+864e5*j)}return document.cookie=[b(e),"=",d(g),i.expires?"; expires="+i.expires.toUTCString():"",i.path?"; path="+i.path:"",i.domain?"; domain="+i.domain:"",i.secure?"; secure":""].join("")}for(var l=e?void 0:{},m=document.cookie?document.cookie.split("; "):[],n=0,o=m.length;o>n;n++){var p=m[n].split("="),q=c(p.shift()),r=p.join("=");if(e&&e===q){l=f(r,g);break}e||void 0===(r=f(r))||(l[q]=r)}return l};h.defaults={},a.removeCookie=function(b,c){return void 0===a.cookie(b)?!1:(a.cookie(b,"",a.extend({},c,{expires:-1})),!a.cookie(b))}});
|
||||
@@ -0,0 +1,2 @@
|
||||
/*! http://mths.be/placeholder v2.0.9 by @mathias */
|
||||
!function(a){"function"==typeof define&&define.amd?define(["jquery"],a):a(jQuery)}(function(a){function b(b){var c={},d=/^jQuery\d+$/;return a.each(b.attributes,function(a,b){b.specified&&!d.test(b.name)&&(c[b.name]=b.value)}),c}function c(b,c){var d=this,f=a(d);if(d.value==f.attr("placeholder")&&f.hasClass("placeholder"))if(f.data("placeholder-password")){if(f=f.hide().nextAll('input[type="password"]:first').show().attr("id",f.removeAttr("id").data("placeholder-id")),b===!0)return f[0].value=c;f.focus()}else d.value="",f.removeClass("placeholder"),d==e()&&d.select()}function d(){var d,e=this,f=a(e),g=this.id;if(""===e.value){if("password"===e.type){if(!f.data("placeholder-textinput")){try{d=f.clone().attr({type:"text"})}catch(h){d=a("<input>").attr(a.extend(b(this),{type:"text"}))}d.removeAttr("name").data({"placeholder-password":f,"placeholder-id":g}).bind("focus.placeholder",c),f.data({"placeholder-textinput":d,"placeholder-id":g}).before(d)}f=f.removeAttr("id").hide().prevAll('input[type="text"]:first').attr("id",g).show()}f.addClass("placeholder"),f[0].value=f.attr("placeholder")}else f.removeClass("placeholder")}function e(){try{return document.activeElement}catch(a){}}var f,g,h="[object OperaMini]"==Object.prototype.toString.call(window.operamini),i="placeholder"in document.createElement("input")&&!h,j="placeholder"in document.createElement("textarea")&&!h,k=a.valHooks,l=a.propHooks;i&&j?(g=a.fn.placeholder=function(){return this},g.input=g.textarea=!0):(g=a.fn.placeholder=function(){var a=this;return a.filter((i?"textarea":":input")+"[placeholder]").not(".placeholder").bind({"focus.placeholder":c,"blur.placeholder":d}).data("placeholder-enabled",!0).trigger("blur.placeholder"),a},g.input=i,g.textarea=j,f={get:function(b){var c=a(b),d=c.data("placeholder-password");return d?d[0].value:c.data("placeholder-enabled")&&c.hasClass("placeholder")?"":b.value},set:function(b,f){var g=a(b),h=g.data("placeholder-password");return h?h[0].value=f:g.data("placeholder-enabled")?(""===f?(b.value=f,b!=e()&&d.call(b)):g.hasClass("placeholder")?c.call(b,!0,f)||(b.value=f):b.value=f,g):b.value=f}},i||(k.input=f,l.value=f),j||(k.textarea=f,l.value=f),a(function(){a(document).delegate("form","submit.placeholder",function(){var b=a(".placeholder",this).each(c);setTimeout(function(){b.each(d)},10)})}),a(window).bind("beforeunload.placeholder",function(){a(".placeholder").each(function(){this.value=""})}))});
|
||||
@@ -0,0 +1,4 @@
|
||||
# www.robotstxt.org/
|
||||
# www.google.com/support/webmasters/bin/answer.py?hl=en&answer=156449
|
||||
|
||||
User-agent: *
|
||||