Commit c2112947 authored by François Billioud's avatar François Billioud

corrects bugs with the load of document list

parent 275cb9a4
...@@ -33,14 +33,10 @@ SVGEditor = function() { ...@@ -33,14 +33,10 @@ SVGEditor = function() {
* setAsCurrentDocument : set the document as currentDocument in the local storage and display its properties in the current page * setAsCurrentDocument : set the document as currentDocument in the local storage and display its properties in the current page
*/ */
JSONDocument.prototype.type = "text"; JSONDocument.prototype.type = "image";
JSONDocument.prototype.saveEdition = function(content) { JSONDocument.prototype.saveEdition = function(content) {
this.setLastUser(getCurrentUser().getName()); this.setLastUser(getCurrentUser().getName());
this.setContent(content); this.setContent(content);
this.setLastModification(getCurrentTime()); this.setLastModification(getCurrentTime());
this.setAsCurrentDocument();
}
JSONDocument.prototype.setAsCurrentDocument = function() {
getCurrentPage().displayDocumentInformation(this); getCurrentPage().displayDocumentInformation(this);
setCurrentDocument(this);
} }
...@@ -21,9 +21,32 @@ function logIntoDav(wallet) { ...@@ -21,9 +21,32 @@ function logIntoDav(wallet) {
function initStorage(wallet) { function initStorage(wallet) {
if(!wallet.provider) {//local storage if(!wallet.provider) {//local storage
Storage.currentStorage = new LocalStorage(wallet.userName); /**
* load JIO file from a DAV and create and return the JIO object
* This function will be replaced. The aim is to load JIO in more various ways, and use JIO.initialize after
* @param userName : name of the user
* @param location : server location
* @param applicant : (optional) information about the person/application needing this JIO object (allow limited access)
* @return JIO object
*/
(function initializeFromDav(userName, location, applicant) {
//get the user personal JIO file
$.ajax({
url: location+"/dav/"+userName+"/"+applicant.ID+"/"+"jio.json",//we could use userAdress instead...
type: "GET",
async: false,
dataType: "text",
headers: {Authorization: "Basic "+Base64.encode(userName+":"+applicant.password)},
fields: {withCredentials: "true"},
success: function(jioContent){
Storage.create(jioContent);
},
error: function(type) {alert("Error "+type.status+" : fail while trying to load jio.json");}
});
return JIO;
})(wallet.userName, wallet.storageLocation, {"ID":"www.ungproject.com", "password":wallet.applicationPassword});
} else { } else {
Storage.currentStorage = new JIOStorage(wallet); Storage.create('{"type":"local","userName":"'+wallet.userName+'"}');
} }
} }
......
...@@ -129,9 +129,6 @@ JSONDocument.prototype.saveEdition = function(content) { ...@@ -129,9 +129,6 @@ JSONDocument.prototype.saveEdition = function(content) {
this.setLastUser(getCurrentUser().getName()); this.setLastUser(getCurrentUser().getName());
this.setContent(content); this.setContent(content);
this.setLastModification(getCurrentTime()); this.setLastModification(getCurrentTime());
this.setAsCurrentDocument();
}
JSONDocument.prototype.setAsCurrentDocument = function() {
getCurrentPage().displayDocumentInformation(this); getCurrentPage().displayDocumentInformation(this);
setCurrentDocument(this);
} }
...@@ -26,11 +26,26 @@ var Page = { ...@@ -26,11 +26,26 @@ var Page = {
if(page!="ung" &&page!="mail" && page !=undefined) { if(page!="ung" &&page!="mail" && page !=undefined) {
this.loadXML("xml/"+page+".xml"); this.loadXML("xml/"+page+".xml");
} else { } else {
//load the user and the documentList in the page (wait for the storage being ready) //display user information when the storage is ready
getCurrentStorage().addWaiter(function() { if (getCurrentStorage()[Storage.USER_READY]) {
getCurrentUser().setAsCurrentUser(); Page.displayUserInformation(getCurrentUser());
getCurrentDocumentList() } else {
},Storage.USER_READY); getCurrentStorage().addEventHandler(function() {
Page.displayUserInformation(getCurrentUser());
getCurrentDocumentList()
},Storage.USER_READY);
}
//display the document list when the line factory is ready
Line.loadHTML(function() {
if (getCurrentStorage()[Storage.LIST_READY]) {
getCurrentDocumentList().display();
} else {
getCurrentStorage().addEventHandler(function() {
getCurrentDocumentList().display();
},Storage.LIST_READY);
}
});
} }
}, },
//getters //getters
...@@ -59,15 +74,16 @@ var Page = { ...@@ -59,15 +74,16 @@ var Page = {
$(dependencies).find("scriptfile").each(function() {page.include($(this).text(),"script");});//includes js $(dependencies).find("scriptfile").each(function() {page.include($(this).text(),"script");});//includes js
// load the user, the editor and the document in the page (wait for the storage being ready) // load the user, the editor and the document in the page (wait for the storage being ready)
getCurrentStorage().addWaiter(function() { getCurrentStorage().addEventHandler(function() {
getCurrentUser().setAsCurrentUser(); Page.displayUserInformation(getCurrentUser());
this.loadEditor(); Page.displayDocumentInformation(getCurrentDocument());
getCurrentDocument().setAsCurrentDocument(); Page.loadEditor();
},Storage.USER_READY); },Storage.USER_READY);
}); });
}, },
/* include a javascript or a css file */ /* include a javascript or a css file */
// could be written better
include: function(file,type) { include: function(file,type) {
var object = null; var object = null;
switch(type) { switch(type) {
...@@ -147,9 +163,8 @@ function getCurrentPage() {return Page;} ...@@ -147,9 +163,8 @@ function getCurrentPage() {return Page;}
var User = function(arg) { var User = function(arg) {
if(arg) { if(arg) {
this.load(arg); this.load(arg);
if(window.DocumentList) {this.documentList = new DocumentList(arg.documentList);} if(window.LabelList) {this.labelList = new LabelList(arg.labelList);}// labels of the user
if(window.LabelList) {this.labelList = new LabelList(arg.labelList);} if(window.GroupList) {this.groupList = new GroupList(arg.groupList);}// contact groups of the user
if(window.GroupList) {this.groupList = new GroupList(arg.groupList);}
} }
else { else {
this.name = "UNG";//default name this.name = "UNG";//default name
...@@ -172,16 +187,8 @@ User.prototype.load({//add methods thanks to the UngObject.load method ...@@ -172,16 +187,8 @@ User.prototype.load({//add methods thanks to the UngObject.load method
getSetting: function(key) {return this.settings[key];}, getSetting: function(key) {return this.settings[key];},
setSetting: function(key,value) {this.settings[key] = value;}, setSetting: function(key,value) {this.settings[key] = value;},
getSettings: function() {return this.settings;}, getSettings: function() {return this.settings;},
getDocumentList: function() {return this.documentList;},
setDocumentList: function(list) {this.documentList = list;},
getStorageLocation: function() {return this.storageLocation;},
setAsCurrentUser: function() { getStorageLocation: function() {return this.storageLocation;}
getCurrentPage().displayUserInformation(this);
getCurrentStorage().setUser(this);
if(getCurrentPage().getName()=="ung") this.getDocumentList().setAsCurrentDocumentList();
}
}); });
getCurrentUser = function () { getCurrentUser = function () {
...@@ -193,189 +200,55 @@ getCurrentUser = function () { ...@@ -193,189 +200,55 @@ getCurrentUser = function () {
/** /**
* Class Storage * Storage
* this class provides usual API to save/load/delete elements * this element provides usual API to save/load/delete elements
* @param type : "local" to save in localStorage, or "JIO" for remote storage
*/
var Storage = function(type) {
Storage.currentStorage = this;
this.type = type;
this.pendingList = [];
//(re)initialize events
this.userReady = false;
}
Storage.prototype = new UngObject();
Storage.prototype.load({
getType: function() {return this.type;},
getUser: function() {return this.user;},
setUser: function(user) {
this.user = user;
user.setAsCurrentUser();
this.userName = user.name;
fireEvent(Storage.userReady);
this.save();
},
updateUser: function() {localStorage[this.getUser().getName()] = JSON.stringify(this.getUser());},
save: function() {
this.updateUser();
localStorage.setItem("currentStorage", JSON.stringify(this));
},
addWaiter: function(action, expectedEvent) {
this[expectedEvent] ? action() : this.pendingList.push({action:action,expectedEvent:expectedEvent});
},
fireEvent: function(event) {
for (var i=0; i<this.pendingList.length; i++) {
var waiter = this.pendingList[i];
if(waiter.expectedEvent===event) {
waiter.action.apply(this, waiter.argument);
this.pendingList(i,1);
i--;
}
}
}
});
Storage.initialize = function () {
var dataStorage = JSON.parse(localStorage.getItem("currentStorage"));
if(!dataStorage) {window.location.href = "login.html";}//if it's the first connexion
if(dataStorage.type == "local") {
Storage.currentStorage = new LocalStorage(dataStorage.userName);
} else {
Storage.currentStorage = new JIOStorage(dataStorage);
}
}
Storage.USER_READY = "userReady"; // value of the USER_READY event
getCurrentStorage = function () {
return Storage.currentStorage;
}
/**
* Class LocalStorage
* this class provides usual API to save/load/delete documents on the localStorage
*/ */
var LocalStorage = function(userName) { var Storage = new UngObject();
Storage.call(this,"local"); Storage.load({
if(userName) { /* create the storage from storage. Used in the login page */
var loaded = this.loadUser(userName)//load an existing user create: function (jioFileContent) {
if(!loaded) {//create a new user if there was no such one this.jio = JIO.initialize(jioFileContent,{"ID":"www.ungproject.com"});
var user = new User(); Storage.currentStorage = this;
user.setName(userName);
user.documents = {};
this.setUser(user);
}
}
}
LocalStorage.prototype = new Storage();
LocalStorage.prototype.load({
/* try to load the user information in the storage and save it in the
* storage instance.
* @param userName : the name of the user
* @return : true if the user existed and has been loaded, false otherwise
*/
loadUser: function(userName) {
try{
if(!localStorage[userName]) {throw "noSuchUser";}
this.setUser(new User(JSON.parse(localStorage[userName])));
return true;
} catch(e) {
if(e!="noSuchUser") {alert(e);}
return false
}
},
getDocument: function(file, instruction) {
var doc = new JSONDocument(this.getUser().documents[file]);
if(instruction) instruction(doc);
return doc;
},
getDocumentList: function() {
return this.getUser().getDocumentList();
},
saveDocument: function(doc, file, instruction) {
this.user.documents[file] = doc;
this.save();
if(instruction) instruction();
},
deleteDocument: function(file, instruction) {
delete this.user.documents[file];
this.save();
if(instruction) instruction();
}
});
/**
* Class JIO
* this class provides usual API to save/load/delete documents on a remote storage
*/
var JIOStorage = function(arg) {
Storage.call(this,"JIO");
if(arg.jio && arg.jio.jioFileContent) {
//recreate the storage from the localStorage (arg = localStorage.currentStorage)
this.jio = JIO.initialize(arg.jio.jioFileContent, {"ID":"www.ungproject.com"});
this.setUser(new User(arg.user));
waitBeforeSucceed(JIO.isReady,this.save);
} else {
//load jio from the dav storage
this.jio = initializeFromDav(arg.userName, arg.storageLocation, {"ID":"www.ungproject.com", "password":arg.applicationPassword});
//try to load user parameters //try to load user parameters
var storage = this; var storage = this;
var option = { var option = {
success: function(data) {//success success: function(data) {//success
storage.setUser(new User(JSON.parse(data))); storage.setUser(new User(JSON.parse(data)));
storage.user.storageLocation = arg.storageLocation;
storage.save(); storage.save();
}, },
errorHandler: function(errorEvent) {//fail errorHandler: function(errorEvent) {//fail
if(errorEvent.status==404){//create a new user if there was no such one if(errorEvent.status==404){//create a new user if there was no such one
var user = new User(); var user = new User();
user.setName(arg.userName); user.setName(jioFileContent.userName);
storage.setUser(user); storage.setUser(user);
storage.user.storageLocation = arg.storageLocation; storage.user.storageLocation = jioFileContent.location;
storage.save(); storage.save();
} }
}, },
asynchronous: false asynchronous: false
} }
JIO.loadDocument(arg.userName+".profile", option); JIO.loadDocument(jioFileContent.userName+".profile", option);
}
/**
* load JIO file from a DAV and create and return the JIO object
* This function will be replaced. The aim is to load JIO in more various ways, and use JIO.initialize after
* @param userName : name of the user
* @param location : server location
* @param applicant : (optional) information about the person/application needing this JIO object (allow limited access)
* @return JIO object
*/
function initializeFromDav(userName, location, applicant) {
//get the user personal JIO file
$.ajax({
url: location+"/dav/"+userName+"/"+applicant.ID+"/"+"jio.json",//we could use userAdress instead...
type: "GET",
async: false,
dataType: "text",
headers: {Authorization: "Basic "+Base64.encode(userName+":"+applicant.password)},
fields: {withCredentials: "true"},
success: function(jioContent){
JIO.initialize(jioContent,applicant);
},
error: function(type) {alert("Error "+type.status+" : fail while trying to load jio.json");}
});
return JIO;
}
} },
JIOStorage.prototype = new Storage();
JIOStorage.prototype.load({ /* initialize the storage from the localStorage */
initialize: function () {
var dataStorage = JSON.parse(localStorage.getItem("currentStorage"));
if(!dataStorage) {window.location.href = "login.html";}//if it's the first connexion
this.jio = JIO.initialize(dataStorage.jio.jioFileContent, {"ID":"www.ungproject.com"});
Storage.currentStorage = this;
this.setUser(new User(dataStorage.user));
},
USER_READY: "userReady", // value of the USER_READY event
LIST_READY: "listReady", // value of the LIST_READY event
getJIO: function() {return this.jio;}, getJIO: function() {return this.jio;},
loadUser: function(userName) {//warning no return value loadUser: function(userName) {//warning no return value
var storage = this;
var option = { var option = {
success: function(data) {storage.setUser(new User(JSON.parse(data)));}, success: function(data) {Storage.setUser(new User(JSON.parse(data)));},
errorHandler: function(errorEvent) {if(errorEvent.status==404){}} errorHandler: function(errorEvent) {if(errorEvent.status==404){}}
} }
JIO.loadDocument(userName+".profile", option); JIO.loadDocument(userName+".profile", option);
...@@ -399,21 +272,49 @@ JIOStorage.prototype.load({ ...@@ -399,21 +272,49 @@ JIOStorage.prototype.load({
JIO.saveDocument(JSON.stringify(doc), fileName, option); JIO.saveDocument(JSON.stringify(doc), fileName, option);
}, },
deleteDocument: function(file, instruction) { deleteDocument: function(file, instruction) {
var option = {option: {success: instruction}}; var option = {success: instruction};
JIO.deleteDocument(file, option); JIO.deleteDocument(file, option);
}, },
save: function() { getDocumentList: function(instruction) {
instruction(this.documentList());
return this.documentList;
},
updateDocumentList: function() {
var option = {
success: function(list) {
delete list[getCurrentUser().getName()+".profile"];//remove the profile file
getCurrentStorage().documentList = list;
fireEvent(Storage.LIST_READY);
}
}
JIO.getDocumentList(option);
},
save: function() { // update and save user information in the localStorage
this.updateUser(); this.updateUser();
this.saveDocument(this.user,this.user.getName()+".profile",function() { this.saveDocument(this.user,this.user.getName()+".profile",function() {
localStorage.setItem("currentStorage",JSON.stringify(this)); localStorage.setItem("currentStorage",JSON.stringify(this));
}); });
} },
});
getUser: function() {return this.user;},
setUser: function(user) {
this.user = user;
this.userName = user.getName();
fireEvent(Storage.USER_READY);
this.updateDocumentList();
getCurrentStorage().save();
},
fireEvent: function(event) {
Storage[event] = true;
UngObject.prototype.fireEvent(event);
},
updateUser: function() {localStorage[this.getUser().getName()] = JSON.stringify(this.getUser());}
});
getCurrentStorage = function () {
return Storage.currentStorage;
}
...@@ -481,7 +382,7 @@ getCurrentDocument = function() { ...@@ -481,7 +382,7 @@ getCurrentDocument = function() {
} }
setCurrentDocument = function(doc) { setCurrentDocument = function(doc) {
localStorage.setItem("currentDocument",JSON.stringify(doc)); localStorage.setItem("currentDocument",JSON.stringify(doc));
this.currentDocument = doc; Document.currentDocument = doc;
} }
/** /**
...@@ -565,15 +466,6 @@ JSONDocument.prototype.states = { ...@@ -565,15 +466,6 @@ JSONDocument.prototype.states = {
deleted:{"fr":"Supprimé","en":"Deleted"} deleted:{"fr":"Supprimé","en":"Deleted"}
} }
setCurrentDocument = function(doc) {
currentDocument = doc;
localStorage.setItem("currentDocument",JSON.stringify(doc));
}
......
...@@ -54,6 +54,31 @@ UngObject.prototype.copy = function() { ...@@ -54,6 +54,31 @@ UngObject.prototype.copy = function() {
return copied; return copied;
} }
/*
* add an event handler executed when the fireEvent function is called
* @param handler : function to execute when the event occures
* @param event : the event to consider
* @param once : if set to true, the handler is executed only once
*/
UngObject.prototype.addEventHandler = function (handler, event, once) {
if(!this.listenerList.length) { this.listnerList = [] }
this.listernerList.push({handler:handler,event:event,once:once});
}
/* fire an event through all the listeners of the object */
UngObject.prototype.fireEvent = function (event) {
for (var i=0; i<this.listenerList.length; i++) {
var listener = this.listenerList[i];
if(listener.event == event) {
listener.handler(event);
if(listener.once) { // remove the listener if supposed to been executed only once
this.listenerList.splice(i,1);
i--;
}
}
}
}
/** /**
* convert an object into an array easier to manipulate * convert an object into an array easier to manipulate
* @param object : the object to convert * @param object : the object to convert
......
...@@ -14,7 +14,10 @@ setCurrentDocumentID = function(ID) {return localStorage.setItem("currentDocumen ...@@ -14,7 +14,10 @@ setCurrentDocumentID = function(ID) {return localStorage.setItem("currentDocumen
* the detailedList object is the synchronized list containing more detailed information about documents * the detailedList object is the synchronized list containing more detailed information about documents
* @param documentList : documents information loaded from the storage * @param documentList : documents information loaded from the storage
*/ */
var DocumentList = function(documentList) { var DocumentList = {
inititalize: function() {
var data = lo
},
this.detailedList = {} this.detailedList = {}
if(documentList) { if(documentList) {
for(var doc in documentList) { for(var doc in documentList) {
...@@ -193,7 +196,7 @@ DocumentList.prototype.load({ ...@@ -193,7 +196,7 @@ DocumentList.prototype.load({
} }
}); });
getDocumentList = function() { getDocumentList = function() {
return getCurrentUser().getDocumentList(); return getCurrentStorage().getDocumentList();
} }
......
<?xml version="1.0" encoding="UTF-8"?> <?xml version="1.0" encoding="UTF-8"?>
<root> <root>
<title> Web Table - Web Table </title> <D:multistatus xmlns:D="DAV:">
<content> <D:response xmlns:lp1="DAV:" xmlns:lp2="http://apache.org/dav/props/">
<label> <D:href>/dav/storage/www.ungproject.com/</D:href>
Contenu de la page <D:propstat>
</label> <D:prop>
<lp1:resourcetype>
<div class="input"> <D:collection></D:collection>
<link rel="stylesheet" href="js/jquery/plugin/sheet/jquery.sheet.css" type="text/css" /> </lp1:resourcetype>
<link rel="stylesheet" href="jquery_sheet_editor/jquery.sheet.erp5.css" type="text/css" /> <lp1:creationdate>2011-08-16T09:01:53Z</lp1:creationdate>
<link rel="stylesheet" href="js/jquery/plugin/colorpicker/jquery.colorPicker.css" type="text/css" /> <lp1:getlastmodified>Tue, 16 Aug 2011 09:01:53 GMT</lp1:getlastmodified>
<!--<link rel="stylesheet" href="js/jquery/plugin/colorpicker/menu.css" type="text/css" />--> <lp1:getetag>"111e80-1000-4aa9ba18b716d"</lp1:getetag>
<D:supportedlock>
<div id="jQuerySheet0" style="height: 400px;"></div> <D:lockentry>
<D:lockscope>
<span id="inlineMenu" style="display: none;"> <D:exclusive></D:exclusive>
<span> </D:lockscope>
<a href="#" onclick="sheetInstance.controlFactory.addRow(); return false;" title="Insert Row After Selected"> <D:locktype>
<img alt="Insert Row After Selected" src="jquery_sheet_editor/jquery_sheet_image/sheet_row_add.png" /> <D:write></D:write>
</a> </D:locktype>
<a href="#" onclick="sheetInstance.controlFactory.addRow(null, true); return false;" title="Insert Row Before Selected"> </D:lockentry>
<img alt="Insert Row Before Selected" src="jquery_sheet_editor/jquery_sheet_image/sheet_row_add.png" /> <D:lockentry>
</a> <D:lockscope>
<a href="#" onclick="sheetInstance.controlFactory.addRow(null, null, ':last'); return false;" title="Add Row At End"> <D:shared></D:shared>
<img alt="Add Row" src="jquery_sheet_editor/jquery_sheet_image/sheet_row_add.png" /> </D:lockscope>
</a> <D:locktype>
<a href="#" onclick="sheetInstance.controlFactory.addRowMulti(); return false;" title="Add Multi-Rows"> <D:write></D:write>
<img alt="Add Multi-Rows" src="jquery_sheet_editor/jquery_sheet_image/sheet_row_add_multi.png" /> </D:locktype>
</a> </D:lockentry>
<a href="#" onclick="sheetInstance.deleteRow(); return false;" title="Delete Row"> </D:supportedlock>
<img alt="Delete Row" src="jquery_sheet_editor/jquery_sheet_image/sheet_row_delete.png" /> <D:lockdiscovery></D:lockdiscovery>
</a> <D:getcontenttype>httpd/unix-directory</D:getcontenttype>
<a href="#" onclick="sheetInstance.controlFactory.addColumn(); return false;" title="Insert Column After Selected"> </D:prop>
<img alt="Insert Column After Selected" src="jquery_sheet_editor/jquery_sheet_image/sheet_col_add.png" /> <D:status>HTTP/1.1 200 OK</D:status>
</a> </D:propstat>
<a href="#" onclick="sheetInstance.controlFactory.addColumn(null, true); return false;" title="Insert Column Before Selected"> </D:response>
<img alt="Insert Column Before Selected" src="jquery_sheet_editor/jquery_sheet_image/sheet_col_add.png" /> <D:response xmlns:lp1="DAV:" xmlns:lp2="http://apache.org/dav/props/">
</a> <D:href>/dav/storage/www.ungproject.com/1313168464706</D:href>
<a href="#" onclick="sheetInstance.controlFactory.addColumn(null, null, ':last'); return false;" title="Add Column At End"> <D:propstat>
<img alt="Add Column At End" src="jquery_sheet_editor/jquery_sheet_image/sheet_col_add.png" /> <D:prop>
</a> <lp1:resourcetype></lp1:resourcetype>
<a href="#" onclick="sheetInstance.controlFactory.addColumnMulti(); return false;" title="Insert Multi-Columns"> <lp1:creationdate>2011-08-12T17:00:56Z</lp1:creationdate>
<img alt="Add Multi-Columns" src="jquery_sheet_editor/jquery_sheet_image/sheet_col_add_multi.png" /> <lp1:getcontentlength>208</lp1:getcontentlength>
</a> <lp1:getlastmodified>Fri, 12 Aug 2011 17:00:56 GMT</lp1:getlastmodified>
<lp1:getetag>"11253b-d0-4aa51db5ab821"</lp1:getetag>
<a href="#" onclick="sheetInstance.deleteColumn(); return false;" title="Delete Column"> <lp2:executable>F</lp2:executable>
<img alt="Delete Column" src="jquery_sheet_editor/jquery_sheet_image/sheet_col_delete.png" /> <D:supportedlock>
</a> <D:lockentry>
<a href="#" onclick="sheetInstance.getTdRange(null, sheetInstance.obj.formula().val()); return false;" title="Get Cell Range"> <D:lockscope>
<img alt="Get Cell Range" src="jquery_sheet_editor/jquery_sheet_image/sheet_get_range.png" /> <D:exclusive></D:exclusive>
</a> </D:lockscope>
<a href="#" onclick="sheetInstance.deleteSheet(); return false;" title="Delete Current Sheet"> <D:locktype>
<img alt="Delete Current Sheet" src="jquery_sheet_editor/jquery_sheet_image/table_delete.png" /> <D:write></D:write>
</a> </D:locktype>
<a href="#" onclick="sheetInstance.calc(sheetInstance.i); return false;" title="Refresh Calculations"> </D:lockentry>
<img alt="Refresh Calculations" src="jquery_sheet_editor/jquery_sheet_image/arrow_refresh.png" /> <D:lockentry>
</a> <D:lockscope>
<a href="#" onclick="sheetInstance.cellFind(); return false;" title="Find"> <D:shared></D:shared>
<img alt="Find" src="jquery_sheet_editor/jquery_sheet_image/find.png" /> </D:lockscope>
</a> <D:locktype>
<a href="#" onclick="sheetInstance.cellStyleToggle('styleBold'); return false;" title="Bold"> <D:write></D:write>
<img alt="Bold" src="jquery_sheet_editor/jquery_sheet_image/text_bold.png" /> </D:locktype>
</a> </D:lockentry>
<a href="#" onclick="sheetInstance.cellStyleToggle('styleItalics'); return false;" title="Italic"> </D:supportedlock>
<img alt="Italic" src="jquery_sheet_editor/jquery_sheet_image/text_italic.png" /> <D:lockdiscovery></D:lockdiscovery>
</a> </D:prop>
<a href="#" onclick="sheetInstance.cellStyleToggle('styleUnderline', 'styleLineThrough'); return false;" title="Underline"> <D:status>HTTP/1.1 200 OK</D:status>
<img alt="Underline" src="jquery_sheet_editor/jquery_sheet_image/text_underline.png" /> </D:propstat>
</a> </D:response>
<a href="#" onclick="sheetInstance.cellStyleToggle('styleLineThrough', 'styleUnderline'); return false;" title="Strikethrough"> <D:response xmlns:lp1="DAV:" xmlns:lp2="http://apache.org/dav/props/">
<img alt="Strikethrough" src="jquery_sheet_editor/jquery_sheet_image/text_strikethrough.png" /> <D:href>/dav/storage/www.ungproject.com/1313168465680</D:href>
<D:propstat>
</a> <D:prop>
<a href="#" onclick="sheetInstance.cellStyleToggle('styleLeft', 'styleCenter styleRight'); return false;" title="Align Left"> <lp1:resourcetype></lp1:resourcetype>
<img alt="Align Left" src="jquery_sheet_editor/jquery_sheet_image/text_align_left.png" /> <lp1:creationdate>2011-08-12T17:04:23Z</lp1:creationdate>
</a> <lp1:getcontentlength>355</lp1:getcontentlength>
<a href="#" onclick="sheetInstance.cellStyleToggle('styleCenter', 'styleLeft styleRight'); return false;" title="Align Center"> <lp1:getlastmodified>Fri, 12 Aug 2011 17:04:23 GMT</lp1:getlastmodified>
<img alt="Align Center" src="jquery_sheet_editor/jquery_sheet_image/text_align_center.png" /> <lp1:getetag>"112526-163-4aa51e7bcc361"</lp1:getetag>
</a> <lp2:executable>F</lp2:executable>
<a href="#" onclick="sheetInstance.cellStyleToggle('styleRight', 'styleLeft styleCenter'); return false;" title="Align Right"> <D:supportedlock>
<img alt="Align Right" src="jquery_sheet_editor/jquery_sheet_image/text_align_right.png" /> <D:lockentry>
</a> <D:lockscope>
<a href="#" onclick="sheetInstance.fillUpOrDown(); return false;" title="Fill Down"> <D:exclusive></D:exclusive>
<img alt="Fill Down" src="jquery_sheet_editor/jquery_sheet_image/arrow_down.png" /> </D:lockscope>
</a> <D:locktype>
<D:write></D:write>
<a href="#" onclick="sheetInstance.fillUpOrDown(true); return false;" title="Fill Up"> </D:locktype>
<img alt="Fill Up" src="jquery_sheet_editor/jquery_sheet_image/arrow_up.png" /> </D:lockentry>
</a> <D:lockentry>
<D:lockscope>
<span class="colorPickers"> <D:shared></D:shared>
<input title="Foreground color" class="colorPickerFont" style="background-image: url('jquery_sheet_editor/jquery_sheet_image/palette.png') ! important; width: 16px; height: 16px;" /> </D:lockscope>
<input title="Background Color" class="colorPickerCell" style="background-image: url('jquery_sheet_editor/jquery_sheet_image/palette_bg.png') ! important; width: 16px; height: 16px;" /> <D:locktype>
</span> <D:write></D:write>
</D:locktype>
<a href="#" onclick="sheetInstance.obj.formula().val('=HYPERLINK(\'' + prompt('Enter Web Address', 'http://www.visop-dev.com/') + '\')').keydown(); return false;" title="HyperLink"> </D:lockentry>
<img alt="Web Link" src="jquery_sheet_editor/jquery_sheet_image/page_link.png" /> </D:supportedlock>
</a> <D:lockdiscovery></D:lockdiscovery>
<a href="#" onclick="sheetInstance.toggleFullScreen(); $('#lockedMenu').toggle(); return false;" title="Toggle Full Screen"> </D:prop>
<img alt="Web Link" src="jquery_sheet_editor/jquery_sheet_image/arrow_out.png" /> <D:status>HTTP/1.1 200 OK</D:status>
</a> </D:propstat>
</D:response>
</span> <D:response xmlns:lp1="DAV:" xmlns:lp2="http://apache.org/dav/props/">
</span></div> <D:href>/dav/storage/www.ungproject.com/1313168467756</D:href>
</content> <D:propstat>
<dependencies> <D:prop>
<scriptfile>js/jquery/plugin/sheet/jquery.sheet.js</scriptfile> <lp1:resourcetype></lp1:resourcetype>
<scriptfile>js/jquery/plugin/mbmenu/mbMenu.min.js</scriptfile> <lp1:creationdate>2011-08-12T17:01:39Z</lp1:creationdate>
<scriptfile>js/jquery/plugin/jqchart/jgcharts.min.js</scriptfile> <lp1:getcontentlength>394</lp1:getcontentlength>
<scriptfile>js/jquery/plugin/colorpicker/jquery.colorPicker.min.js</scriptfile> <lp1:getlastmodified>Fri, 12 Aug 2011 17:01:39 GMT</lp1:getlastmodified>
<scriptfile>js/jquery/plugin/elastic/jquery.elastic.min.js</scriptfile> <lp1:getetag>"11252b-18a-4aa51ddeae881"</lp1:getetag>
<scriptfile>js/jquery/plugin/sheet/jquery.sheet.js</scriptfile> <lp2:executable>F</lp2:executable>
<scriptfile>js/table-editor.js</scriptfile> <D:supportedlock>
<stylefile>js/jquery/plugin/sheet/jquery.sheet.css</stylefile> <D:lockentry>
<stylefile>css/table.css</stylefile> <D:lockscope>
<stylefile>js/jquery/plugin/colorpicker/jquery.colorPicker.css</stylefile> <D:exclusive></D:exclusive>
<stylefile>css/jquery-ui.css</stylefile> </D:lockscope>
</dependencies> <D:locktype>
<D:write></D:write>
</D:locktype>
</D:lockentry>
<D:lockentry>
<D:lockscope>
<D:shared></D:shared>
</D:lockscope>
<D:locktype>
<D:write></D:write>
</D:locktype>
</D:lockentry>
</D:supportedlock>
<D:lockdiscovery></D:lockdiscovery>
</D:prop>
<D:status>HTTP/1.1 200 OK</D:status>
</D:propstat>
</D:response>
<D:response xmlns:lp1="DAV:" xmlns:lp2="http://apache.org/dav/props/">
<D:href>/dav/storage/www.ungproject.com/.htpasswd</D:href>
<D:propstat>
<D:prop>
<lp1:resourcetype></lp1:resourcetype>
<lp1:creationdate>2011-08-12T17:19:47Z</lp1:creationdate>
<lp1:getcontentlength>22</lp1:getcontentlength>
<lp1:getlastmodified>Fri, 12 Aug 2011 17:19:47 GMT</lp1:getlastmodified>
<lp1:getetag>"107100-16-4aa521ed1e601"</lp1:getetag>
<lp2:executable>F</lp2:executable>
<D:supportedlock>
<D:lockentry>
<D:lockscope>
<D:exclusive></D:exclusive>
</D:lockscope>
<D:locktype>
<D:write></D:write>
</D:locktype>
</D:lockentry>
<D:lockentry>
<D:lockscope>
<D:shared></D:shared>
</D:lockscope>
<D:locktype>
<D:write></D:write>
</D:locktype>
</D:lockentry>
</D:supportedlock>
<D:lockdiscovery></D:lockdiscovery>
</D:prop>
<D:status>HTTP/1.1 200 OK</D:status>
</D:propstat>
</D:response>
<D:response xmlns:lp1="DAV:" xmlns:lp2="http://apache.org/dav/props/">
<D:href>/dav/storage/www.ungproject.com/1313168693571</D:href>
<D:propstat>
<D:prop>
<lp1:resourcetype></lp1:resourcetype>
<lp1:creationdate>2011-08-12T17:10:55Z</lp1:creationdate>
<lp1:getcontentlength>4235</lp1:getcontentlength>
<lp1:getlastmodified>Fri, 12 Aug 2011 17:10:55 GMT</lp1:getlastmodified>
<lp1:getetag>"112547-108b-4aa51ff1b1fc1"</lp1:getetag>
<lp2:executable>F</lp2:executable>
<D:supportedlock>
<D:lockentry>
<D:lockscope>
<D:exclusive></D:exclusive>
</D:lockscope>
<D:locktype>
<D:write></D:write>
</D:locktype>
</D:lockentry>
<D:lockentry>
<D:lockscope>
<D:shared></D:shared>
</D:lockscope>
<D:locktype>
<D:write></D:write>
</D:locktype>
</D:lockentry>
</D:supportedlock>
<D:lockdiscovery></D:lockdiscovery>
</D:prop>
<D:status>HTTP/1.1 200 OK</D:status>
</D:propstat>
</D:response>
<D:response xmlns:lp1="DAV:" xmlns:lp2="http://apache.org/dav/props/">
<D:href>/dav/storage/www.ungproject.com/1313169076040</D:href>
<D:propstat>
<D:prop>
<lp1:resourcetype></lp1:resourcetype>
<lp1:creationdate>2011-08-12T17:11:03Z</lp1:creationdate>
<lp1:getcontentlength>209</lp1:getcontentlength>
<lp1:getlastmodified>Fri, 12 Aug 2011 17:11:03 GMT</lp1:getlastmodified>
<lp1:getetag>"112545-d1-4aa51ff91e601"</lp1:getetag>
<lp2:executable>F</lp2:executable>
<D:supportedlock>
<D:lockentry>
<D:lockscope>
<D:exclusive></D:exclusive>
</D:lockscope>
<D:locktype>
<D:write></D:write>
</D:locktype>
</D:lockentry>
<D:lockentry>
<D:lockscope>
<D:shared></D:shared>
</D:lockscope>
<D:locktype>
<D:write></D:write>
</D:locktype>
</D:lockentry>
</D:supportedlock>
<D:lockdiscovery></D:lockdiscovery>
</D:prop>
<D:status>HTTP/1.1 200 OK</D:status>
</D:propstat>
</D:response>
<D:response xmlns:lp1="DAV:" xmlns:lp2="http://apache.org/dav/props/">
<D:href>/dav/storage/www.ungproject.com/.htaccess</D:href>
<D:propstat>
<D:prop>
<lp1:resourcetype></lp1:resourcetype>
<lp1:creationdate>2011-08-16T09:01:53Z</lp1:creationdate>
<lp1:getcontentlength>205</lp1:getcontentlength>
<lp1:getlastmodified>Tue, 16 Aug 2011 09:01:53 GMT</lp1:getlastmodified>
<lp1:getetag>"107017-cd-4aa9ba18b716d"</lp1:getetag>
<lp2:executable>F</lp2:executable>
<D:supportedlock>
<D:lockentry>
<D:lockscope>
<D:exclusive></D:exclusive>
</D:lockscope>
<D:locktype>
<D:write></D:write>
</D:locktype>
</D:lockentry>
<D:lockentry>
<D:lockscope>
<D:shared></D:shared>
</D:lockscope>
<D:locktype>
<D:write></D:write>
</D:locktype>
</D:lockentry>
</D:supportedlock>
<D:lockdiscovery></D:lockdiscovery>
</D:prop>
<D:status>HTTP/1.1 200 OK</D:status>
</D:propstat>
</D:response>
<D:response xmlns:lp1="DAV:" xmlns:lp2="http://apache.org/dav/props/">
<D:href>/dav/storage/www.ungproject.com/1313168575613</D:href>
<D:propstat>
<D:prop>
<lp1:resourcetype></lp1:resourcetype>
<lp1:creationdate>2011-08-12T17:04:08Z</lp1:creationdate>
<lp1:getcontentlength>2554</lp1:getcontentlength>
<lp1:getlastmodified>Fri, 12 Aug 2011 17:04:08 GMT</lp1:getlastmodified>
<lp1:getetag>"11253a-9fa-4aa51e6ce6bc1"</lp1:getetag>
<lp2:executable>F</lp2:executable>
<D:supportedlock>
<D:lockentry>
<D:lockscope>
<D:exclusive></D:exclusive>
</D:lockscope>
<D:locktype>
<D:write></D:write>
</D:locktype>
</D:lockentry>
<D:lockentry>
<D:lockscope>
<D:shared></D:shared>
</D:lockscope>
<D:locktype>
<D:write></D:write>
</D:locktype>
</D:lockentry>
</D:supportedlock>
<D:lockdiscovery></D:lockdiscovery>
</D:prop>
<D:status>HTTP/1.1 200 OK</D:status>
</D:propstat>
</D:response>
<D:response xmlns:lp1="DAV:" xmlns:lp2="http://apache.org/dav/props/">
<D:href>/dav/storage/www.ungproject.com/1313168468871</D:href>
<D:propstat>
<D:prop>
<lp1:resourcetype></lp1:resourcetype>
<lp1:creationdate>2011-08-12T17:00:56Z</lp1:creationdate>
<lp1:getcontentlength>216</lp1:getcontentlength>
<lp1:getlastmodified>Fri, 12 Aug 2011 17:00:56 GMT</lp1:getlastmodified>
<lp1:getetag>"11253c-d8-4aa51db5b8341"</lp1:getetag>
<lp2:executable>F</lp2:executable>
<D:supportedlock>
<D:lockentry>
<D:lockscope>
<D:exclusive></D:exclusive>
</D:lockscope>
<D:locktype>
<D:write></D:write>
</D:locktype>
</D:lockentry>
<D:lockentry>
<D:lockscope>
<D:shared></D:shared>
</D:lockscope>
<D:locktype>
<D:write></D:write>
</D:locktype>
</D:lockentry>
</D:supportedlock>
<D:lockdiscovery></D:lockdiscovery>
</D:prop>
<D:status>HTTP/1.1 200 OK</D:status>
</D:propstat>
</D:response>
<D:response xmlns:lp1="DAV:" xmlns:lp2="http://apache.org/dav/props/">
<D:href>/dav/storage/www.ungproject.com/jio.profile</D:href>
<D:propstat>
<D:prop>
<lp1:resourcetype></lp1:resourcetype>
<lp1:creationdate>2011-08-12T17:19:49Z</lp1:creationdate>
<lp1:getcontentlength>1986</lp1:getcontentlength>
<lp1:getlastmodified>Fri, 12 Aug 2011 17:19:49 GMT</lp1:getlastmodified>
<lp1:getetag>"11253f-7c2-4aa521ee24181"</lp1:getetag>
<lp2:executable>F</lp2:executable>
<D:supportedlock>
<D:lockentry>
<D:lockscope>
<D:exclusive></D:exclusive>
</D:lockscope>
<D:locktype>
<D:write></D:write>
</D:locktype>
</D:lockentry>
<D:lockentry>
<D:lockscope>
<D:shared></D:shared>
</D:lockscope>
<D:locktype>
<D:write></D:write>
</D:locktype>
</D:lockentry>
</D:supportedlock>
<D:lockdiscovery></D:lockdiscovery>
</D:prop>
<D:status>HTTP/1.1 200 OK</D:status>
</D:propstat>
</D:response>
</D:multistatus>
</root> </root>
<link rel="stylesheet" href="css/jquery.sheet.erp5.css" type="text/css" /> <link rel="stylesheet" href="css/jquery.sheet.erp5.css" type="text/css" />
\ No newline at end of file
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