Commit 26639b48 authored by François Billioud's avatar François Billioud

Merge branch 'jio'

parents 455f7a5c ef1fced9
......@@ -5,7 +5,7 @@
<title></title>
<script type="text/javascript"> function reloc(url) {window.location = url;}</script>
</head>
<body onload="reloc('ung.html');">
<body onload="reloc('mail.html');">
</body>
</html>
/**
*
* Base64 encode / decode
* http://www.webtoolkit.info/
*
**/
var Base64 = {
// private property
_keyStr : "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/=",
// public method for encoding
encode : function (input) {
var output = "";
var chr1, chr2, chr3, enc1, enc2, enc3, enc4;
var i = 0;
input = Base64._utf8_encode(input);
while (i < input.length) {
chr1 = input.charCodeAt(i++);
chr2 = input.charCodeAt(i++);
chr3 = input.charCodeAt(i++);
enc1 = chr1 >> 2;
enc2 = ((chr1 & 3) << 4) | (chr2 >> 4);
enc3 = ((chr2 & 15) << 2) | (chr3 >> 6);
enc4 = chr3 & 63;
if (isNaN(chr2)) {
enc3 = enc4 = 64;
} else if (isNaN(chr3)) {
enc4 = 64;
}
output = output +
this._keyStr.charAt(enc1) + this._keyStr.charAt(enc2) +
this._keyStr.charAt(enc3) + this._keyStr.charAt(enc4);
}
return output;
},
// public method for decoding
decode : function (input) {
var output = "";
var chr1, chr2, chr3;
var enc1, enc2, enc3, enc4;
var i = 0;
input = input.replace(/[^A-Za-z0-9\+\/\=]/g, "");
while (i < input.length) {
enc1 = this._keyStr.indexOf(input.charAt(i++));
enc2 = this._keyStr.indexOf(input.charAt(i++));
enc3 = this._keyStr.indexOf(input.charAt(i++));
enc4 = this._keyStr.indexOf(input.charAt(i++));
chr1 = (enc1 << 2) | (enc2 >> 4);
chr2 = ((enc2 & 15) << 4) | (enc3 >> 2);
chr3 = ((enc3 & 3) << 6) | enc4;
output = output + String.fromCharCode(chr1);
if (enc3 != 64) {
output = output + String.fromCharCode(chr2);
}
if (enc4 != 64) {
output = output + String.fromCharCode(chr3);
}
}
output = Base64._utf8_decode(output);
return output;
},
// private method for UTF-8 encoding
_utf8_encode : function (string) {
string = string.replace(/\r\n/g,"\n");
var utftext = "";
for (var n = 0; n < string.length; n++) {
var c = string.charCodeAt(n);
if (c < 128) {
utftext += String.fromCharCode(c);
}
else if((c > 127) && (c < 2048)) {
utftext += String.fromCharCode((c >> 6) | 192);
utftext += String.fromCharCode((c & 63) | 128);
}
else {
utftext += String.fromCharCode((c >> 12) | 224);
utftext += String.fromCharCode(((c >> 6) & 63) | 128);
utftext += String.fromCharCode((c & 63) | 128);
}
}
return utftext;
},
// private method for UTF-8 decoding
_utf8_decode : function (utftext) {
var string = "";
var i = 0;
var c = c1 = c2 = 0;
while ( i < utftext.length ) {
c = utftext.charCodeAt(i);
if (c < 128) {
string += String.fromCharCode(c);
i++;
}
else if((c > 191) && (c < 224)) {
c2 = utftext.charCodeAt(i+1);
string += String.fromCharCode(((c & 31) << 6) | (c2 & 63));
i += 2;
}
else {
c2 = utftext.charCodeAt(i+1);
c3 = utftext.charCodeAt(i+2);
string += String.fromCharCode(((c & 15) << 12) | ((c2 & 63) << 6) | (c3 & 63));
i += 3;
}
}
return string;
}
}
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html>
<head>
<title></title>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<script type="text/javascript" src="jio.js" />
<script type="text/javascript">
nextField = function(event) {
if(event.keyCode==13) {
if(document.getElementById("userName")==document.activeElement) {document.getElementById("password").focus();return;}
if(document.getElementById("password")==document.activeElement) {login();document.getElementById("submit").focus();return;}
}
}
document.onload;
</script>
</head>
<body>
<form action="https://dav-storage/login.php" method="post">
<div style="border: solid 1px #000; width:auto; float:left;">
<label >user name</label>
<input id="userName" type="text" name="userName" onkeypress="nextField(event)" /><br/>
<label>password</label>
<input id="password" type="password" name="password" onkeypress="nextField(event)"/><br/>
<input id="submit" type="submit" value="send" />
</div>
</form>
</body>
</html>
NoSSLStorage = function(user, location) {
this.rsa = null;
this.userName = user;
this.storageLocation = location;
}
NoSSLStorage.prototype = {
initIO: function() {
this.rsa = new RSA();
},
maintenance: function() {//maintains the ssh key in life
var ID = {user:this.userName, key:this.rsa.getPublicKey()}
send(ID,this.storageLocation);
setTimeout(maintenance(),3000);
},
loadDocument: function(applicationDomain, repository, file) {
},
saveDocument: function(applicationDomain, data, repository, file, overwrite) {
},
deleteDocument: function(applicationDomain, repository, file) {
}
}
DAVStorage = function(user, location, passwdCrypto) {
this.passwordCrypto = passwdCrypto;
this.userName = user;
this.storageLocation = location;
}
DAVStorage.prototype = {
initIO: function() {
//récupérer le password crypto
},
loadDocument: function(applicationDomain, repository, file, instruction, errorHandler) {
$.ajax({
url: repository+file,
type: "GET",
dataType: type,
headers: { Authorization: "Basic "+btoa("smik:asdf")},
fields: { withCredentials: "true" },
success: instruction,
error: errorHandler || function(type) {alert("Error "+type.status+" : fail while trying to load "+address);}
});
},
saveDocument: function(applicationDomain, newData, repository, file, overwrite, instruction, oldData) {
var save = function() {
$.ajax({
url: repository+file,
type: "PUT",
dataType: "json",
data: JSON.stringify(newData),
headers: { Authorization: "Basic "+btoa("smik:asdf")},
fields: { withCredentials: "true" },
success: instruction,
error: function(type) {
if(type.status==201 || type.status==204) {instruction();}//ajax thinks that 201 is an error...
}
});
}
var merge = function(serverData) {
if(overwrite) {
//if(diff(oldData,serverData)) {merge(newData, serverData);}
save();
}
}
//check if already exists and for diffs
loadDocument(applicationDomain, repository, file,
function(serverData) {
merge(serverData);
},
function(type) {
if(type.status==404) {
save();
} else {
if(type.status==201 || type.status==204) {instruction();}
}
}
);
},
deleteDocument: function(applicationDomain, repository, file) {
$.ajax({
url: address,
type: "DELETE",
headers: { Authorization: "Basic "+btoa("smik:asdf")},
fields: { withCredentials: "true" },
success: instruction,
error: function(type) {
alert(type.status);//ajax thinks that 201 is an error...
}
});
}
}
login = function() {
var user = $("#userName").value;
var storageLocation = $("#storageLocation").value;
currentStorage = new NoSSLStorage(user,storageLocation);
var password = CryptoSym.encrypt({
userName: user,
publicKey:currentStorage.rsa.getPublicKey(),
password:$("#password").value
});
$("#password").value = "";
$("#code").value = password;
$("#connection").action = "https://"+storageLocation;
maintenance();
}
loadFile = function(address, type, instruction) {
$.ajax({
url: address,
type: "GET",
dataType: type,
success: instruction,
error: function(type) {alert("Error "+type.status+" : fail while trying to load "+address);}
});
}
loadServerDescription = function(address) {
loadFile(address+"/server.json", "JSON", function() {})
}
CryptoSym = {
encrypt: function(obj, key) {return JSON.stringify(obj)+"key";},
decrypt: function(obj, key) {return JSON.parse(obj.split("key")[0])}
}
RSA = function(publicKey) {
if(publicKey) {
this.publicKey = publicKey;
} else {
this.publicKey = null;
this.privateKey = null;
this.generate();
}
}
RSA.prototype = {
getPublicKey: function() {return this.publicKey;},
getPrivateKey: function() {return this.privateKey;},
generate: function() {
this.privateKey = Date.now();
this.publicKey = this.privateKey;
},
encrypt: function(text,key) {return text+key;},
decrypt: function(text) {return text.split(this.privateKey)[0]}
}
<?php
function filesList($dirname) {
$dir = opendir($dirname);
$filesArray = array();
while($file = readdir($dir)) {
if($file != '.' && $file != '..' && !is_dir($dirname.$file))
{
$filesArray[] = $file;
}
}
closedir($dir);
$jsonList = json_encode($filesArray);
return $jsonList;
}
echo filesList(".");
?>
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html>
<head>
<title></title>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<script type="text/javascript" src="jio.js" />
<script type="text/javascript">
nextField = function(event) {
if(event.keyCode==13) {
if(document.getElementById("userName")==document.activeElement) {document.getElementById("storageLocation").focus();return;}
if(document.getElementById("storageLocation")==document.activeElement) {document.getElementById("password").focus();return;}
if(document.getElementById("password")==document.activeElement) {login();document.getElementById("submit").focus();return;}
}
}
document.onload;
</script>
</head>
<body>
<div style="border: solid 1px #000; width:auto; float:left;">
<label >user name</label>
<input id="userName" type="text" name="userName" onkeypress="nextField(event)" /><br/>
<label>storage location</label>
<input id="storageLocation" type="text" name="storageLocation" onkeypress="nextField(event)"/><br/>
<label>password</label>
<input id="password" type="password" name="password" onkeypress="nextField(event)"/><br/>
</div>
<div style="border: solid 1px #000; width:auto; float:left;">
<form id="connection" action="" method="post" >
<input id="code" type="text" name="code"/>
<input id="submit" type="submit" value="send" />
</form>
</div>
</body>
</html>
/**
* This file provides classes needed by the mail editor
*/
/**
* Editors
* editors must implement the following methods :
* load : load the editor in the current page
* saveEdition : save the edition made by this editor to the current document
* loadContentFromDocument : display the content of the specified document in the editor
*/
var Xinha = function() {
this.name = "Xinha";
this.load = function() {
_editor_url = "xinha/";
getCurrentPage().include("xinha/XinhaCore.js","script");
getCurrentPage().include("xinha/config.js","script");
xinha_init();
}
this.saveEdition = function() {
getCurrentDocument().saveEdition(xinha_editors.input_area.getEditorContent());
}
this.loadContentFromDocument = function(doc) {
var setText = function() {xinha_editors.input_area.setEditorContent(doc.getContent());}
tryUntilSucceed(setText);
}
this.load();
}
/**
* Text documents
*
* editable documents must implements the following arguments and methods
* type : a unique type ID
* saveEdition : set the argument as the new content of the document. Change last modification time and display the changes
* setAsCurrentDocument : set the document as currentDocument in the local storage and display its properties in the current page
/**
* class JSONEMail
* @param arg : a json JSONEMail object to load
*/
var JSONEMail = function(arg) {
if(arg) {this.load(arg);}
else {
this.senders = {};
this.cc = {};
this.bcc = {};
this.object = "";
this.recipients = {};
this.date = currentTime();
this.content = "";
this.attachment = {};
}
}
JSONEMail.prototype = new UngObject();//inherits methods from JSONDocument
JSONEMail.prototype.load({
//setters,getters
getSenders: function() {return this.senders;},
getCC: function() {return this.cc;},
getBCC: function() {return this.bcc;},
getObject: function() {return this.object},
getRecipients: function() {return this.recipients;},
getDate: function() {return this.date;},
setSenders: function(senderList) {this.senders = senderList;},
setCC: function(ccList) {this.cc = ccList;},
setBCC: function(bccList) {this.bcc = bccList;},
setObject: function(object) {this.object = object;},
setRecipients: function(recipientList) {this.recipients = recipientList;},
setDate: function(date) {this.date = date;}
});
This diff is collapsed.
......@@ -30,6 +30,9 @@ var Xinha = function() {
var AlohaInterface = function() {
this.name = "Aloha";
this.load = function() {
GENTICS_Aloha_base="aloha/aloha/";
loadFile("aloha/aloha/aloha.js", "script", function(data) {
eval(data);
includeJS("aloha/aloha/plugins/com.gentics.aloha.plugins.Format/plugin.js");
includeJS("aloha/aloha/plugins/com.gentics.aloha.plugins.Table/plugin.js");
includeJS("aloha/aloha/plugins/com.gentics.aloha.plugins.List/plugin.js");
......@@ -37,6 +40,7 @@ var AlohaInterface = function() {
$("div#page_content div.input").html("<div id='aloha_editable'>test</div>");
$("#aloha_editable").css("min-height","15em").css("border","5px solid #3399FF").css("overflow","auto");
$("#aloha_editable").aloha();
});
}
this.saveEdition = function() {
getCurrentDocument().saveEdition(GENTICS.Aloha.editables[0].getContents());
......@@ -48,6 +52,65 @@ var AlohaInterface = function() {
this.load();
}
var NicEdit = function() {
this.name = "NicEdit";
this.instance = null;
this.load = function() {
var nic = this;
loadFile("nicEdit/nicEdit.js","script",function(data) {
eval(data);
nic.instance = new nicEditor({iconsPath : 'nicEdit/nicEditorIcons.gif',fullPanel : true}).panelInstance('input_area');
});
}
this.saveEdition = function() {
getCurrentDocument().saveEdition($("div.input div.nicEdit-main").html());
}
this.loadContentFromDocument = function(doc) {
if(this.instance) {this.instance.removeInstance('input_area');this.instance=null}
$("#input_area").attr("value",doc.getContent());
this.instance = new nicEditor({iconsPath : 'nicEdit/nicEditorIcons.gif',fullPanel : true}).panelInstance('input_area');
}
this.load();
}
var TinyEdit = function() {
this.name = "TinyEdit";
this.load = function() {
loadFile("tinyEdit/tinyEdit.js","script",function(data) {
eval(data);
new TINY.editor.edit('editor',{
id:'input_area', // (required) ID of the textarea
width:584, // (optional) width of the editor
height:175, // (optional) heightof the editor
cssclass:'te', // (optional) CSS class of the editor
controlclass:'tecontrol', // (optional) CSS class of the buttons
rowclass:'teheader', // (optional) CSS class of the button rows
dividerclass:'tedivider', // (optional) CSS class of the button diviers
controls:['bold', 'italic', 'underline', 'strikethrough', '|', 'subscript', 'superscript', '|', 'orderedlist', 'unorderedlist', '|' ,'outdent' ,'indent', '|', 'leftalign', 'centeralign', 'rightalign', 'blockjustify', '|', 'unformat', '|', 'undo', 'redo', 'n', 'font', 'size', 'style', '|', 'image', 'hr', 'link', 'unlink', '|', 'cut', 'copy', 'paste', 'print'], // (required) options you want available, a '|' represents a divider and an 'n' represents a new row
footer:true, // (optional) show the footer
fonts:['Verdana','Arial','Georgia','Trebuchet MS'], // (optional) array of fonts to display
xhtml:true, // (optional) generate XHTML vs HTML
//cssfile:'style.css', // (optional) attach an external CSS file to the editor
content:'starting content', // (optional) set the starting content else it will default to the textarea content
css:'body{background-color:#ccc}', // (optional) attach CSS to the editor
bodyid:'editor', // (optional) attach an ID to the editor body
footerclass:'tefooter', // (optional) CSS class of the footer
toggle:{text:'source',activetext:'wysiwyg',cssclass:'toggle'}, // (optional) toggle to markup view options
resize:{cssclass:'resize'} // (optional) display options for the editor resize
});
});
}
this.saveEdition = function() {
getCurrentDocument().saveEdition($("#input").attr("value"));
}
this.loadContentFromDocument = function(doc) {
$("#input").attr("value",doc.getContent());
}
this.load();
}
/**
* Text documents
*
......
......@@ -61,7 +61,7 @@ Page.prototype = {
/* load the editor to work with and a new document to work on */
switch(this.name) {
case "text-editor":
editor = new AlohaInterface();
editor = new NicEdit();
doc=new JSONTextDocument();
break;
case "table-editor":
......
This diff is collapsed.
......@@ -28,13 +28,6 @@
<script type="text/javascript" src="js/theme-mobile.js"></script>
<script type="text/javascript">//hack for aloha
if(supportedDocuments[getCurrentDocument().getType()].editorPage=="text-editor") {
GENTICS_Aloha_base="aloha/aloha/"
includeJS("aloha/aloha/aloha.js");
}
</script>
<script type="text/javascript">
// initialize
var initPage = function() {
......@@ -49,11 +42,6 @@
var init = function() {
initPage();
waitBeforeSucceed(function() {return getCurrentPage().getXML();},initUser);
//$("script#jquery_loader").remove();
//$("script#jquery_loader2").remove();
//$("#author").aloha();
}
$(document).ready(init);
</script>
......@@ -129,7 +117,7 @@
<label>search_bar</label>
<div class="input"><div >
<a class="ung_docs" onclick="stopDocumentEdition()">
<a class="ung_docs" href="ung-mobile.html" onclick="stopDocumentEdition()">
<img src="images/ung/ung-logo.gif" alt="logo"/>
</a>
......@@ -179,11 +167,9 @@
<fieldset class="bottom editable">
<div id="page_content" class="field page"
title="Contenu de la page web.">
<div id="page_content" class="field page">
</div>
<div id="document_content" class="field hidden"
title="The content of the document considered as a text string">
<div id="document_content" class="field hidden">
</div>
</fieldset>
......
......@@ -229,11 +229,9 @@
<fieldset class="bottom editable">
<div id="page_content" class="field page"
title="Contenu de la page web.">
<div id="page_content" class="field page">
</div>
<div id="document_content" class="field hidden"
title="The content of the document considered as a text string">
<div id="document_content" class="field hidden">
</div>
</fieldset>
......
......@@ -80,22 +80,48 @@
</td>
<td class="listbox-table-data-cell">
<a class="listbox-document-icon">
<img src="images/icons/document.png"/>
<img src=""/>
</a>
</td>
<td class='listbox-table-data-cell'>
<a class="listbox-document-title">Web Page</a>
<a class="listbox-document-title"></a>
</td>
<td class="listbox-table-data-cell">
<a class="listbox-document-state">Deleted</a>
<a class="listbox-document-state"></a>
</td>
<td class="listbox-table-data-cell">
<a class="listbox-document-date">2011/05/31&nbsp;&nbsp;&nbsp;11:44</a>
<a class="listbox-document-date"></a>
</td>
</tr>
</tbody>
</table>
</line>
<mail>
<table>
<tbody>
<tr>
<td class="listbox-table-select-cell">
<input type="checkbox"/>
</td>
<td class="listbox-table-data-cell">
<a class="listbox-email-attachment">
</a>
</td>
<td class='listbox-table-data-cell'>
<a class="listbox-email-sender"></a>
</td>
<td class="listbox-table-data-cell">
<a class="listbox-email-object"></a>
</td>
<td class="listbox-table-data-cell">
<a class="listbox-email-date"></a>
</td>
</tr>
</tbody>
</table>
</mail>
</root>
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment