Page MenuHomeCode

No OneTemporary

diff --git a/content/scenes/B00001001.tpl b/content/scenes/B00001001.tpl
--- a/content/scenes/B00001001.tpl
+++ b/content/scenes/B00001001.tpl
@@ -1,156 +1,156 @@
<!-- Tower navigation and passage CSS -->
<style>
body {
overflow: hidden;
}
/* Tower map */
#tower {
background-image: url({$SCENE_URL}/{$CurrentPerso->location_global}/all.png);
background-position: left;
background-repeat: no-repeat;
height: 442px;
}
#tower_hl {
position: relative;
}
/* Passage */
#passage {
width: 960px;
height: 401px;
background-image: url({$SCENE_URL}/{$CurrentPerso->location_global}/couloir/bay/void.png);
background-position: top left;
background-repeat: no-repeat;
}
#passage_left {
position: relative;
background-image: url({$SCENE_URL}/{$CurrentPerso->location_global}/couloir/GoLeft.png);
width: 38px;
height: 38px;
}
#passage_right {
position: relative;
background-image: url({$SCENE_URL}/{$CurrentPerso->location_global}/couloir/GoRight.png);
width: 38px;
height: 38px;
}
#passage_gallery ul {
position: relative;
top: 145px;
left: 120px;
margin-top: inherit;
margin-bottom: inherit;
}
#passage_gallery li {
display: block;
float: left;
margin-right: 60px;
width: 170px;
height: 170px;
padding: 4px 4px;
background-image: url({$SCENE_URL}/{$CurrentPerso->location_global}/couloir/frame.png);
background-repeat: no-repeat;
background-position: top left;
}
#screen {
position: absolute;
left: 10%;
top: 10%;
width: 80%;
height: 80%;
}
#screen img {
position: absolute;
cursor: pointer;
visibility: hidden;
width: 0px;
height: 0px;
}
#screen .tvover {
border: solid #343434;
opacity: 1;
filter: alpha(opacity=100);
}
#screen .tvout {
border: solid #fff;
opacity: 0.7;
}
#bankImages {
display: none;
}
</style>
<!-- Tower -->
<!--
<div id="tower"></div>
-->
<!-- Passage -->
<div class="grid_16 alpha omega">
<div id="passage">
<div id="passage_gallery"></div>
</div>
</div>
<!-- Upload dialog -->
<div dojoType="dijit.Dialog" id="uploadDialog" style="display: none;" title="{#UploadNewArtwork#}">
<p>{#UploadNewArtworkDescription#}</p>
<form method="post" id="test" action="{get_xhr_hashed_url('upload_content', {$CurrentPerso->location_global})}" enctype="multipart/form-data">
<input type="hidden" id="location_local" name="location_local" value='{$CurrentPerso->location_local}' />
<input type="hidden" id="i" name="location_k" value="-1">
<div class="row">
- <label for="artwork" class="firstLabel">Picture (max. {ini_get('upload_max_filesize')})</label>
+ <label for="artwork" class="firstLabel">{#UploadNewArtworkPicture#} (max. {ini_get('upload_max_filesize')})</label>
<input type="file" name="artwork" id="artwork" class="long" />
</div>
<div class="row">
- <label for="title" class="firstLabel">Title</label>
+ <label for="title" class="firstLabel">{#UploadNewArtworkTitle#}</label>
<input dojoType="dijit.form.TextBox" name="title" id="title" type="text" class="long" />
</div>
<div class="row center">
<button dojoType="dijit.form.Button" iconClass="dijitEditorIcon dijitEditorIconSave" type="submit" value="Save" />OK</button>
</div>
</form>
</div>
<!-- Javascript bits: script.aculo.us -->
<script src="{#StaticContentURL#}/js/prototype.js"></script>
<script src="{#StaticContentURL#}/js/effects.js"></script>
<!-- Javascript bits: dojo -->
<script>
dojo.require("dojo.parser");
dojo.require("dijit.Dialog");
dojo.require("dijit.form.Button");
dojo.require("dijit.form.TextBox");
</script>
<!-- Javascript bits: tower and couloir/passage/corridor/gallery/whatNameYouGiveToIt -->
<script src="{$SCENE_URL}/{$CurrentPerso->location_global}/tower.js"></script>
<script>
//Initializes tower map
//tower.hl = '{$SCENE_URL}/{$CurrentPerso->location_global}/hl.png';
//tower.highlight(3);
//Initializes passage view
passage.bayPath = '{$SCENE_URL}/{$CurrentPerso->location_global}/couloir/bay/';
passage.initialize('{$location->global}', '{$CurrentPerso->location_local}');
//Initializes gallery
gallery.initialize('{#StaticContentURL#}', '{get_xhr_hashed_url('get_content', {$CurrentPerso->location_global})}');
</script>
\ No newline at end of file
diff --git a/content/users/1148/30052009(078)Square.jpg b/content/users/1148/30052009(078)Square.jpg
index 37dd67aada282fc6089820080adcd6f119c22f83..a9cbfa3e444770d0c519f5b640e0cca440635175
GIT binary patch
literal 19025
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
diff --git a/dev/quux.php b/dev/quux.php
--- a/dev/quux.php
+++ b/dev/quux.php
@@ -1,48 +1,56 @@
<?php
require_once('includes/objects/ship.php');
require_once('includes/objects/port.php');
require_once('includes/objects/application.php');
+ require_once('includes/objects/content.php');
include('controllers/header.php');
- $case = 'pushdata';
+ $case = 'thumbnail';
switch ($case) {
case 'pushdata';
echo '
<h2>/api.php/app/pushdata</h2>
<form method="post" action="/api.php/app/pushdata?mode=file&key=37d839ba-f9fc-42ca-a3e8-28053e979b90" enctype="multipart/form-data">
<input type="file" name="datafile" /><br />
<input type="submit" value="Send file" />
</form>
';
+ break;
+
+ case 'thumbnail':
+ $content = new Content(1);
+ dprint_r($content);
+ $content->generate_thumbnail();
+ break;
case 'port':
echo '<h2>Port::from_location test</h2>';
$locations = array("B00002", "B00002123", "B00001001", "xyz: [800, 42, 220]");
foreach ($locations as $location) {
dprint_r(Port::from_location($location));
}
break;
case 'ext':
$file = 'dev/foo.tar';
echo "<h2>$file</h2>";
echo "<h3>.tar.bz2</h3>";
echo ereg('\.tar\.bz2$', $file);
echo "<h3>.tar</h3>";
echo ereg('\.tar$', $file);
break;
case 'app':
echo Application::from_api_key("37d839ba-f9fc-42ca-a3e8-28053e979b90")->generate_userkey();
break;
case '':
dieprint_r("No case currently selected.");
break;
}
include('controllers/footer.php');
?>
\ No newline at end of file
diff --git a/do.php b/do.php
--- a/do.php
+++ b/do.php
@@ -1,256 +1,255 @@
<?php
/*
* Zed
* (c) 2010, Dereckson, some rights reserved
* Released under BSD license
*
* AJAX callbacks
*
* As main controller could potentially be interrupted (e.g. if site.requests
* flag is at 1, user is redirected to controllers/userrequest.php), all AJAX
* queries should be handled by this script and not directly by the controllers.
*
* Standard return values:
* -7 user is logged but perso isn't selected
* -9 user is not logged
*
*/
////////////////////////////////////////////////////////////////////////////////
///
/// Initialization
///
//Standard return values
define('USER_NOT_LOGGED', -9);
define('PERSO_NOT_SELECTED', -7);
//Pluton library
include('includes/core.php');
//Session
$IP = encode_ip($_SERVER["REMOTE_ADDR"]);
require_once('includes/story/story.php'); //this class can be stored in session
session_start();
$_SESSION[ID] = session_id();
session_update(); //updates or creates the session
include("includes/login.php"); //login/logout
$CurrentUser = get_logged_user(); //Gets current user infos
//Gets current perso
require_once('includes/objects/perso.php');
if ($perso_id = $CurrentUser->session['perso_id']) {
$CurrentPerso = new Perso($perso_id);
}
//Requires user and perso
if ($CurrentUser->id < 1000) {
echo USER_NOT_LOGGED;
exit;
}
if (!$CurrentPerso) {
echo PERSO_NOT_SELECTED;
exit;
}
//Loads Smarty (as it handles l10n, it will be used by lang_get)
require('includes/Smarty/Smarty.class.php');
$smarty = new Smarty();
$current_dir = dirname(__FILE__);
$smarty->template_dir = $current_dir . '/skins/zed';
$smarty->compile_dir = $current_dir . '/cache/compiled';
$smarty->cache_dir = $current_dir . '/cache';
$smarty->config_dir = $current_dir;
//Loads language files
initialize_lang();
lang_load('core.conf');
////////////////////////////////////////////////////////////////////////////////
///
/// Actions definitions
///
/*
* Actions class
* Each method is called by first part of your URL, other parts are arguments
* e.g. /do.php/validate_quux_request/52 = Actions::validate_quux_request(52);
*
* You can also use $_GET, $_POST or better $_REQUEST.
*
* Don't echo the value but return it, so we can in the future implement custom
* formats like api_output();
*/
class Actions {
/*
* Checks the arguments hash
* @param Array $args the arguments, the last being the hash
*/
static private function is_hash_valid ($args) {
global $Config;
return array_pop($args) == md5($_SESSION['ID'] . $Config['SecretKey'] . implode('', $args));
}
/*
* Handles a allow/deny perso request
* @param string $request_flag the request flag to clear
* @param string $store 'perso' or 'registry'
* @param string $key the perso flag or registry key
* @param string $value the value to store
* @param string $hash the security hash
* @return boolean true if the request is valid and have been processed ; otherwise, false.
*/
static function perso_request ($request_flag, $store, $key, $value, $hash) {
global $CurrentPerso;
//Ensures we've the correct amount of arguments
if (func_num_args() < 4) return false;
//Checks hash
$args = func_get_args();
if (!self::is_hash_valid($args)) {
return false;
}
//Sets flag
switch ($store) {
case 'perso':
$CurrentPerso->set_flag($key, $value);
break;
case 'registry':
registry_set($key, $value);
break;
default:
//Unknown storage location
return false;
}
//Clears request flag
if ((string)$request_flag !== "0") {
$CurrentPerso->delete_flag($request_flag);
}
return true;
}
/*
* Sets current perso's local location
* @param string $location_local the local location
* @return GeoLocation the current perso's GeoLocation object
*
* We don't require a security hash. If the users want to play with it, no problem.
* You generally moves inside a global location as you wish.
* So, if you write a story capturing a perso, use flags to handle this escape!
*/
static function set_local_location ($location_local) {
global $CurrentPerso;
//Ensures we've the correct amount of arguments
if (func_num_args() < 1) return null;
//Moves current perso to specified location
$CurrentPerso->move_to(null, $location_local);
//Returns GeoLocation relevant instance
return $CurrentPerso->location;
}
/*
* Handles upload content form
* @return string new content path
*/
static function upload_content () {
global $CurrentPerso, $CurrentUser;
require_once('includes/objects/content.php');
-
//Initializes a new content instance
$content = new Content();
//Reads form
$content->load_from_form();
//Sets current user/perso parameters
$content->user_id = $CurrentUser->id;
$content->perso_id = $CurrentPerso->id;
$content->location_global = $CurrentPerso->location_global;
//Saves file
if ($content->handle_uploaded_file($_FILES['artwork'])) {
$content->save_to_database();
$content->generate_thumbnail();
return true;
}
return false;
}
/*
*
* @return Array content files
*/
static function get_content ($location_global) {
//Ensures we've the correct amount of arguments
if (func_num_args() < 1) return null;
//Checks hash
$args = func_get_args();
if (!self::is_hash_valid($args)) {
return false;
}
require_once('includes/objects/content.php');
return Content::get_local_content($location_global, $_GET['location_local']);
}
}
////////////////////////////////////////////////////////////////////////////////
///
/// Handles request
///
//You really should use $_SERVER['PATH_INFO']
//i.e. calling /do.php/your request without any mod rewrite intervention
//
//If you choose otherwise, uncomment and tweak one of the following lines:
//$Config['SiteURL'] = 'http://yourserver/zed/do.php';
//$Config['SiteURL'] = get_server_url() . '/do.php';
$args = get_current_url_fragments();
$method = array_shift($args);
if ($_REQUEST['debug']) {
//Debug version
//Most of E_STRICT errors are evaluated at the compile time thus such errors
//are not reported
ini_set('display_errors', 'stderr');
error_reporting(-1);
if (method_exists('Actions', $method)) {
$result = call_user_func_array(array('Actions', $method), $args);
echo json_encode($result);
} else {
echo "<p>Method doesn't exist: $method</p>";
}
if (array_key_exists('redirectTo', $_REQUEST)) {
//If user JS disabled, you can add ?redirectTo= followed by an URL
echo "<p>Instead to print a callback value, redirects to <a href=\"$_REQUEST[redirectTo]\">$_REQUEST[redirectTo]</a></p>";
}
} else {
//Prod version doesn't prints warning <== silence operator
if (method_exists('Actions', $method)) {
$result = @call_user_func_array(array('Actions', $method), $args);
if (array_key_exists('redirectTo', $_REQUEST)) {
//If user JS disabled, you can add ?redirectTo= followed by an URL
header("location: " . $_REQUEST['redirectTo']);
} else {
echo json_encode($result);
}
}
}
?>
\ No newline at end of file
diff --git a/includes/objects/content.php b/includes/objects/content.php
--- a/includes/objects/content.php
+++ b/includes/objects/content.php
@@ -1,259 +1,270 @@
<?php
/*
* Content class
*
* 0.1 2010-02-24 15:57 Autogenerated by Pluton Scaffolding
*
* @package Zed
* @copyright Copyright (c) 2010, Dereckson
* @license Released under BSD license
* @version 0.1
* @todo remove dbc temporary limitations (cf. /do.php upload_content and infra)
* @todo create a class ContentLocation and move location fields there
* @todo validate SQL schema and add in config.php TABLE_CONTENT tables
*
* [DESIGN BY CONTRACT] This class works only with the following assertions:
* i. Each content have EXACTLY ONE location
* ii. Location fields will not be modified
*
* If a content have more than one location, only the first occurence in
* content_locations table will be considered.
*
* If a content have no location, it will be ignored.
*
* If you edit content location, then call saveToDatabase, you will create
* a new location but future instances will contain first not deleted location.
*
*/
class Content {
/* -------------------------------------------------------------
Properties
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - */
public $id;
public $path;
public $user_id;
public $perso_id;
public $title;
public $location_global = null;
public $location_local = null;
public $location_k = null;
public $perso_name;
public $perso_nickname;
/* -------------------------------------------------------------
Constructor, __toString
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - */
/*
* Initializes a new Content instance
* @param int $id the primary key
*/
function __construct ($id = null) {
if ($id) {
$this->id = $id;
$this->load_from_database();
}
}
/*
* Returns a string representation of current Content instance
* @return string the content title or path if title is blank.
*/
function __toString () {
return $this->title ? $this->title : $this->path;
}
/* -------------------------------------------------------------
Load/save class
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - */
/*
* Loads the object Content (ie fill the properties) from the $_POST array
* @param boolean $allowSensibleFields if false, allow only location_local, location_k and title to be defined ; otherwise, allow all fields.
*/
function load_from_form ($allowSensibleFields = false) {
if (array_key_exists('title', $_POST)) $this->title = $_POST['title'];
if (array_key_exists('location_local', $_POST)) $this->location_local = $_POST['location_local'];
if (array_key_exists('location_k', $_POST)) $this->location_k = $_POST['location_k'];
if ($allowSensibleFields) {
if (array_key_exists('path', $_POST)) $this->path = $_POST['path'];
if (array_key_exists('user_id', $_POST)) $this->user_id = $_POST['user_id'];
if (array_key_exists('perso_id', $_POST)) $this->perso_id = $_POST['perso_id'];
if (array_key_exists('location_global', $_POST)) $this->location_global = $_POST['location_global'];
}
}
/*
* Loads the object Content (ie fill the properties) from the database
*/
function load_from_database () {
global $db;
$id = $db->sql_escape($this->id);
$sql = "SELECT * FROM content WHERE content_id = '" . $id . "'";
if ( !($result = $db->sql_query($sql)) ) message_die(SQL_ERROR, "Unable to query content", '', __LINE__, __FILE__, $sql);
if (!$row = $db->sql_fetchrow($result)) {
$this->lastError = "Content unkwown: " . $this->id;
return false;
}
$this->load_from_row($row);
return true;
}
/*
* Loads the object from row
*/
function load_from_row ($row) {
$this->id = $row['content_id'];
$this->path = $row['content_path'];
$this->user_id = $row['user_id'];
$this->perso_id = $row['perso_id'];
$this->title = $row['content_title'];
$this->location_global = $row['location_global'];
$this->location_local = $row['location_local'];
$this->location_k = $row['location_k'];
if (array_key_exists('perso_name', $row)) $this->perso_name = $row['perso_name'];
if (array_key_exists('perso_nickname', $row)) $this->perso_nickname = $row['perso_nickname'];
}
/*
* Saves to database
*/
function save_to_database () {
global $db;
$id = $this->id ? "'" . $db->sql_escape($this->id) . "'" : 'NULL';
$path = $db->sql_escape($this->path);
$user_id = $db->sql_escape($this->user_id);
$perso_id = $db->sql_escape($this->perso_id);
$title = $db->sql_escape($this->title);
$location_global = ($this->location_global !== null) ? "'" . $db->sql_escape($this->location_global) . "'" : 'NULL';
$location_local = ($this->location_local !== null) ? "'" . $db->sql_escape($this->location_local) . "'" : 'NULL';
$location_k = ($this->location_k !== null) ? "'" . $db->sql_escape($this->location_k) . "'" : 'NULL';
//Updates or inserts
$sql = "REPLACE INTO content_files (`content_id`, `content_path`, `user_id`, `perso_id`, `content_title`) VALUES ($id, '$path', '$user_id', '$perso_id', '$title')";
if (!$db->sql_query($sql)) {
message_die(SQL_ERROR, "Can't save content", '', __LINE__, __FILE__, $sql);
}
if (!$this->id) {
//Gets new record id value
$this->id = $db->sql_nextid();
}
//Saves location
$id = $this->id ? "'" . $db->sql_escape($this->id) . "'" : 'NULL';
$sql = "REPLACE INTO content_locations (location_global, location_local, location_k, content_id) VALUES ($location_global, $location_local, $location_k, $id)";
if (!$db->sql_query($sql))
message_die(SQL_ERROR, "Can't save content location", '', __LINE__, __FILE__, $sql);
}
/* -------------------------------------------------------------
File handling helper methods
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - */
/*
* Determines if the extension is valid
* @param string $ext The extension (without dot)
* @return boolean true if this extension is valid ; otherwise, false.
*/
function is_valid_extension ($ext) {
switch ($ext = strtolower($ext)) {
//Pictures
case 'jpg':
case 'gif':
case 'png':
case 'bmp':
case 'xbm':
return true;
//Denied extension
default:
return false;
}
}
/*
+ * Creates a directory
+ */
+ function create_directory ($dir) {
+ if (!file_exists($dir)) {
+ @mkdir($dir); //Creates new directory, chmod 777
+ }
+ }
+
+ /*
* @return boolean true if the file have been handled
*/
function handle_uploaded_file ($fileArray) {
if (count($fileArray) && $fileArray['error'] == 0) {
+ $this->create_directory("content/users/$this->user_id");
$this->path = "content/users/$this->user_id/$fileArray[name]";
- if (!self::is_valid_extension(get_extension($file))) {
+ if (!self::is_valid_extension(get_extension($fileArray[name]))) {
return false;
}
if (move_uploaded_file($fileArray['tmp_name'], $this->path)) {
return true;
} else {
$this->path = null;
return false;
}
} else {
return false;
}
}
/*
* Generates a thumbnail using ImageMagick binary
* @return boolean true if the thumbnail command returns 0 as program exit code ; otherwise, false
*/
function generate_thumbnail () {
global $Config;
//Builds thumbnail filename
$sourceFile = $this->path;
$pos = strrpos($this->path, '.');
$thumbnailFile = substr($sourceFile, 0, $pos) . 'Square' . substr($sourceFile, $pos);
//Executes imagemagick command
- $command = $Config['ImageMagick']['convert'] . " $sourceFile -resize 162x162 $thumbnailFile";
- @system($command, $code);
+ $command = $Config['ImageMagick']['convert'] . " \"$sourceFile\" -resize 162x162 \"$thumbnailFile\"";
+ echo "$command";
+ system($command, $code);
//Returns true if the command have exited with errorcode 0 (= ok)
return ($code == 0);
}
/* -------------------------------------------------------------
Gets content
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - */
/*
* Gets content at specified location
* @param string $location_global global content location
* @param string $location_local local content location
* @return Array array of Content instances
*/
static function get_local_content ($location_global, $location_local) {
global $db;
//Get contents at this location
$location_global = $db->sql_escape($location_global);
$location_local = $db->sql_escape($location_local);
$sql = "SELECT c.*, p.perso_nickname, p.perso_name FROM content c, persos p WHERE c.location_global = '$location_global' AND c.location_local = '$location_local' AND p.perso_id = c.perso_id ORDER BY location_k ASC";
if (!$result = $db->sql_query($sql)) {
message_die(SQL_ERROR, "Can't get content", '', __LINE__, __FILE__, $sql);
}
//Fills content array
$contents = array();
while ($row = $db->sql_fetchrow($result)) {
$content = new Content();
$content->load_from_row($row);
$contents[] = $content;
}
return $contents;
}
}
?>
\ No newline at end of file
diff --git a/js/tour.js b/js/tour.js
--- a/js/tour.js
+++ b/js/tour.js
@@ -1,148 +1,154 @@
/* -------------------------------------------------------------
Zed
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
Author: Dereckson
Tags: animation jquery l10n
Filename: tour.js
Version: 1.0
Created: 2010-01-25
Updated: 2010-02-03
Licence: Dual licensed: BSD and Creative Commons BY 3.0.
Dependencies: jQuery (for dom elements selection and dimensions.js)
dimensions.js
------------------------------------------------------------- */
var tour = {
//Default language
lang: "en",
//Translated in
langs: "en,fr",
//Current highlight showed
current: -1,
//File extension
extension: "png",
//Highlights files and position
//File: /img/tour/{filename}.{extension}
highlights: [
["create", 13, 18],
["lounge", 339, 107],
["play", 22, 345],
["explore", 325, 373]
],
//The center x, y coordinate
//It's used to determinate what highlight to print
center: [368, 390],
//Gets the highlight index, from position
where: function(x, y) {
if (x < this.center[0]) {
//We're at left from center point
return (y < this.center[1]) ? 0 : 2;
} else {
//We're at right from center point
return (y < this.center[1]) ? 1 : 3;
}
},
//Determines if we're inside the #Tour id
isInside: function (pageX, pageY) {
var tourOffset = $("#Tour").offset();
return pageX >= tourOffset.left && pageY >= tourOffset.top
&& pageX <= tourOffset.left + $("#Tour").width()
&& pageY <= tourOffset.top + $("#Tour").height();
},
//Shows the highlight at specified the page position
showAt: function (pageX, pageY) {
var tourOffset = $("#Tour").offset();
this.show(
this.where(pageX - tourOffset.left , pageY - tourOffset.top)
);
},
//Shows the specified highlight
show: function (i) {
if (this.current != i) {
var filename = this.highlights[i][0] + "_" + this.lang + "." + this.extension;
var code = '<img src="img/tour/' + filename + '" alt="' + this.highlights[i][0] + '" />';
$('#TourHighlight').empty().html(code);
var o = document.getElementById("TourHighlight");
o.style.left = this.highlights[i][1] + "px";
o.style.top = this.highlights[i][2] + "px";
this.current = i;
}
},
//Hides highlight
hideall: function () {
if (this.current > -1) {
this.current = -1;
$('#TourHighlight').empty();
}
},
//Runs the animation
run: function (delay) {
//Highlight order
//[0, 1, 3, 2] is a counterwise move
var order = [0, 1, 3, 2];
//Prints first hightlight
this.show(order[0]);
//Prints next highlights
n = this.highlights.length;
for (i = 1 ; i < n ; i++) {
setTimeout('tour.show(' + order[i] + ')', delay * i);
}
//Prints back the first, and enables rollover
setTimeout('tour.show(' + order[0] + ')', delay * n);
setTimeout('tour.enableRollover()', delay * n);
},
//Enables rollovers
enableRollover: function () {
//Enables panel on click
$('#Tour').bind("mousemove mouseout", function(e) {
if (tour.isInside(e.pageX, e.pageY)) {
tour.showAt(e.pageX, e.pageY);
} else {
tour.hideall();
}
});
},
//Gets client language (Firefox) or preferences content language (IE)
getLanguage: function () {
var lang = navigator.language;
if (lang == undefined) lang = navigator.userLanguage;
if (lang == undefined) return "";
//fr-be -> fr
var pos = lang.indexOf('-');
if (pos > -1) lang = lang.substring(0, pos);
return lang.toLowerCase();
},
//Initializes tour
init: function () {
//Tries to localize
var lang = this.getLanguage();
if (this.langs.indexOf(lang) > -1) this.lang = lang;
//Runs tour animation
//The rollover will be enabled at anim end
this.run(900);
+
+ //Makes the tour clickable
+ $('#Tour').bind("click", function(e) {
+ document.location.href = "/";
+ });
}
}
$(document).ready(function() {
- tour.init();
-});
\ No newline at end of file
+ tour.init();
+});
+
diff --git a/lang/en/scenes.conf b/lang/en/scenes.conf
--- a/lang/en/scenes.conf
+++ b/lang/en/scenes.conf
@@ -1,12 +1,14 @@
#Zed language config file - scenes
#Language: English
-#Code: fr
+#Code: en
#Author: Dereckson
###
### Hypership tower
###
[B00001001]
-UploadNewArtwork = "Téléverser une œuvre"
-UploadNewArtworkDescription = "Ce cadre est libre. Vous pouvez exposer ici l'un de vos travaux ou tout autre que vous appréciez."
+UploadNewArtwork = "Upload new artwork"
+UploadNewArtworkDescription = "This frame is free. You can display here your artwork or any other artwork you like."
+UploadNewArtworkPicture = "Picture"
+UploadNewArtworkTitle = "Title"
\ No newline at end of file

File Metadata

Mime Type
text/x-diff
Expires
Wed, Nov 20, 18:25 (4 d, 5 h ago)
Storage Engine
blob
Storage Format
Raw Data
Storage Handle
21014
Default Alt Text
(52 KB)

Event Timeline