Skip to content
Projects
Groups
Snippets
Help
Loading...
Help
Support
Keyboard shortcuts
?
Submit feedback
Contribute to GitLab
Sign in / Register
Toggle navigation
O
officejs
Project overview
Project overview
Details
Activity
Releases
Repository
Repository
Files
Commits
Branches
Tags
Contributors
Graph
Compare
Issues
0
Issues
0
List
Boards
Labels
Milestones
Merge Requests
0
Merge Requests
0
Analytics
Analytics
Repository
Value Stream
Wiki
Wiki
Members
Members
Collapse sidebar
Close sidebar
Activity
Graph
Create a new issue
Commits
Issue Boards
Open sidebar
nexedi
officejs
Commits
c2112947
Commit
c2112947
authored
Sep 19, 2011
by
François Billioud
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
corrects bugs with the load of document list
parent
275cb9a4
Changes
7
Show whitespace changes
Inline
Side-by-side
Showing
7 changed files
with
513 additions
and
328 deletions
+513
-328
UNGProject/js/image-editor.js
UNGProject/js/image-editor.js
+1
-5
UNGProject/js/login.js
UNGProject/js/login.js
+25
-2
UNGProject/js/text-editor.js
UNGProject/js/text-editor.js
+1
-4
UNGProject/js/theme.js
UNGProject/js/theme.js
+90
-198
UNGProject/js/tools.js
UNGProject/js/tools.js
+25
-0
UNGProject/js/ung.js
UNGProject/js/ung.js
+5
-2
UNGProject/xml/table-editor.xml
UNGProject/xml/table-editor.xml
+366
-117
No files found.
UNGProject/js/image-editor.js
View file @
c2112947
...
...
@@ -33,14 +33,10 @@ SVGEditor = function() {
* 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
)
{
this
.
setLastUser
(
getCurrentUser
().
getName
());
this
.
setContent
(
content
);
this
.
setLastModification
(
getCurrentTime
());
this
.
setAsCurrentDocument
();
}
JSONDocument
.
prototype
.
setAsCurrentDocument
=
function
()
{
getCurrentPage
().
displayDocumentInformation
(
this
);
setCurrentDocument
(
this
);
}
UNGProject/js/login.js
View file @
c2112947
...
...
@@ -21,9 +21,32 @@ function logIntoDav(wallet) {
function
initStorage
(
wallet
)
{
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
{
Storage
.
c
urrentStorage
=
new
JIOStorage
(
wallet
);
Storage
.
c
reate
(
'
{"type":"local","userName":"
'
+
wallet
.
userName
+
'
"}
'
);
}
}
...
...
UNGProject/js/text-editor.js
View file @
c2112947
...
...
@@ -129,9 +129,6 @@ JSONDocument.prototype.saveEdition = function(content) {
this
.
setLastUser
(
getCurrentUser
().
getName
());
this
.
setContent
(
content
);
this
.
setLastModification
(
getCurrentTime
());
this
.
setAsCurrentDocument
();
}
JSONDocument
.
prototype
.
setAsCurrentDocument
=
function
()
{
getCurrentPage
().
displayDocumentInformation
(
this
);
setCurrentDocument
(
this
);
}
UNGProject/js/theme.js
View file @
c2112947
...
...
@@ -26,12 +26,27 @@ var Page = {
if
(
page
!=
"
ung
"
&&
page
!=
"
mail
"
&&
page
!=
undefined
)
{
this
.
loadXML
(
"
xml/
"
+
page
+
"
.xml
"
);
}
else
{
//load the user and the documentList in the page (wait for the storage being ready)
getCurrentStorage
().
addWaiter
(
function
()
{
getCurrentUser
().
setAsCurrentUser
();
//display user information when the storage is ready
if
(
getCurrentStorage
()[
Storage
.
USER_READY
])
{
Page
.
displayUserInformation
(
getCurrentUser
());
}
else
{
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
getName
:
function
()
{
return
this
.
name
;},
...
...
@@ -59,15 +74,16 @@ var Page = {
$
(
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)
getCurrentStorage
().
add
Wait
er
(
function
()
{
getCurrentUser
().
setAsCurrentUser
(
);
this
.
loadEditor
(
);
getCurrentDocument
().
setAsCurrentDocument
();
getCurrentStorage
().
add
EventHandl
er
(
function
()
{
Page
.
displayUserInformation
(
getCurrentUser
()
);
Page
.
displayDocumentInformation
(
getCurrentDocument
()
);
Page
.
loadEditor
();
},
Storage
.
USER_READY
);
});
},
/* include a javascript or a css file */
// could be written better
include
:
function
(
file
,
type
)
{
var
object
=
null
;
switch
(
type
)
{
...
...
@@ -147,9 +163,8 @@ function getCurrentPage() {return Page;}
var
User
=
function
(
arg
)
{
if
(
arg
)
{
this
.
load
(
arg
);
if
(
window
.
DocumentList
)
{
this
.
documentList
=
new
DocumentList
(
arg
.
documentList
);}
if
(
window
.
LabelList
)
{
this
.
labelList
=
new
LabelList
(
arg
.
labelList
);}
if
(
window
.
GroupList
)
{
this
.
groupList
=
new
GroupList
(
arg
.
groupList
);}
if
(
window
.
LabelList
)
{
this
.
labelList
=
new
LabelList
(
arg
.
labelList
);}
// labels of the user
if
(
window
.
GroupList
)
{
this
.
groupList
=
new
GroupList
(
arg
.
groupList
);}
// contact groups of the user
}
else
{
this
.
name
=
"
UNG
"
;
//default name
...
...
@@ -172,16 +187,8 @@ User.prototype.load({//add methods thanks to the UngObject.load method
getSetting
:
function
(
key
)
{
return
this
.
settings
[
key
];},
setSetting
:
function
(
key
,
value
)
{
this
.
settings
[
key
]
=
value
;},
getSettings
:
function
()
{
return
this
.
settings
;},
getDocumentList
:
function
()
{
return
this
.
documentList
;},
setDocumentList
:
function
(
list
)
{
this
.
documentList
=
list
;},
getStorageLocation
:
function
()
{
return
this
.
storageLocation
;},
setAsCurrentUser
:
function
()
{
getCurrentPage
().
displayUserInformation
(
this
);
getCurrentStorage
().
setUser
(
this
);
if
(
getCurrentPage
().
getName
()
==
"
ung
"
)
this
.
getDocumentList
().
setAsCurrentDocumentList
();
}
getStorageLocation
:
function
()
{
return
this
.
storageLocation
;}
});
getCurrentUser
=
function
()
{
...
...
@@ -193,189 +200,55 @@ getCurrentUser = function () {
/**
* Class Storage
* this class provides usual API to save/load/delete elements
* @param type : "local" to save in localStorage, or "JIO" for remote storage
* Storage
* this element provides usual API to save/load/delete elements
*/
var
Storage
=
function
(
type
)
{
var
Storage
=
new
UngObject
();
Storage
.
load
({
/* create the storage from storage. Used in the login page */
create
:
function
(
jioFileContent
)
{
this
.
jio
=
JIO
.
initialize
(
jioFileContent
,{
"
ID
"
:
"
www.ungproject.com
"
});
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
)
{
Storage
.
call
(
this
,
"
local
"
);
if
(
userName
)
{
var
loaded
=
this
.
loadUser
(
userName
)
//load an existing user
if
(
!
loaded
)
{
//create a new user if there was no such one
var
user
=
new
User
();
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
var
storage
=
this
;
var
option
=
{
success
:
function
(
data
)
{
//success
storage
.
setUser
(
new
User
(
JSON
.
parse
(
data
)));
storage
.
user
.
storageLocation
=
arg
.
storageLocation
;
storage
.
save
();
},
errorHandler
:
function
(
errorEvent
)
{
//fail
if
(
errorEvent
.
status
==
404
){
//create a new user if there was no such one
var
user
=
new
User
();
user
.
setName
(
arg
.
userName
);
user
.
setName
(
jioFileContent
.
userName
);
storage
.
setUser
(
user
);
storage
.
user
.
storageLocation
=
arg
.
storageL
ocation
;
storage
.
user
.
storageLocation
=
jioFileContent
.
l
ocation
;
storage
.
save
();
}
},
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
;},
loadUser
:
function
(
userName
)
{
//warning no return value
var
storage
=
this
;
var
option
=
{
success
:
function
(
data
)
{
s
torage
.
setUser
(
new
User
(
JSON
.
parse
(
data
)));},
success
:
function
(
data
)
{
S
torage
.
setUser
(
new
User
(
JSON
.
parse
(
data
)));},
errorHandler
:
function
(
errorEvent
)
{
if
(
errorEvent
.
status
==
404
){}}
}
JIO
.
loadDocument
(
userName
+
"
.profile
"
,
option
);
...
...
@@ -399,21 +272,49 @@ JIOStorage.prototype.load({
JIO
.
saveDocument
(
JSON
.
stringify
(
doc
),
fileName
,
option
);
},
deleteDocument
:
function
(
file
,
instruction
)
{
var
option
=
{
option
:
{
success
:
instruction
}
};
var
option
=
{
success
:
instruction
};
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
.
saveDocument
(
this
.
user
,
this
.
user
.
getName
()
+
"
.profile
"
,
function
()
{
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() {
}
setCurrentDocument
=
function
(
doc
)
{
localStorage
.
setItem
(
"
currentDocument
"
,
JSON
.
stringify
(
doc
));
this
.
currentDocument
=
doc
;
Document
.
currentDocument
=
doc
;
}
/**
...
...
@@ -565,15 +466,6 @@ JSONDocument.prototype.states = {
deleted
:{
"
fr
"
:
"
Supprimé
"
,
"
en
"
:
"
Deleted
"
}
}
setCurrentDocument
=
function
(
doc
)
{
currentDocument
=
doc
;
localStorage
.
setItem
(
"
currentDocument
"
,
JSON
.
stringify
(
doc
));
}
...
...
UNGProject/js/tools.js
View file @
c2112947
...
...
@@ -54,6 +54,31 @@ UngObject.prototype.copy = function() {
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
* @param object : the object to convert
...
...
UNGProject/js/ung.js
View file @
c2112947
...
...
@@ -14,7 +14,10 @@ setCurrentDocumentID = function(ID) {return localStorage.setItem("currentDocumen
* the detailedList object is the synchronized list containing more detailed information about documents
* @param documentList : documents information loaded from the storage
*/
var
DocumentList
=
function
(
documentList
)
{
var
DocumentList
=
{
inititalize
:
function
()
{
var
data
=
lo
},
this
.
detailedList
=
{}
if
(
documentList
)
{
for
(
var
doc
in
documentList
)
{
...
...
@@ -193,7 +196,7 @@ DocumentList.prototype.load({
}
});
getDocumentList
=
function
()
{
return
getCurrent
User
().
getDocumentList
();
return
getCurrent
Storage
().
getDocumentList
();
}
...
...
UNGProject/xml/table-editor.xml
View file @
c2112947
<?xml version="1.0" encoding="UTF-8"?>
<root>
<title>
Web Table - Web Table
</title>
<content>
<label>
Contenu de la page
</label>
<div
class=
"input"
>
<link
rel=
"stylesheet"
href=
"js/jquery/plugin/sheet/jquery.sheet.css"
type=
"text/css"
/>
<link
rel=
"stylesheet"
href=
"jquery_sheet_editor/jquery.sheet.erp5.css"
type=
"text/css"
/>
<link
rel=
"stylesheet"
href=
"js/jquery/plugin/colorpicker/jquery.colorPicker.css"
type=
"text/css"
/>
<!--<link rel="stylesheet" href="js/jquery/plugin/colorpicker/menu.css" type="text/css" />-->
<div
id=
"jQuerySheet0"
style=
"height: 400px;"
></div>
<span
id=
"inlineMenu"
style=
"display: none;"
>
<span>
<a
href=
"#"
onclick=
"sheetInstance.controlFactory.addRow(); return false;"
title=
"Insert Row After Selected"
>
<img
alt=
"Insert Row After Selected"
src=
"jquery_sheet_editor/jquery_sheet_image/sheet_row_add.png"
/>
</a>
<a
href=
"#"
onclick=
"sheetInstance.controlFactory.addRow(null, true); return false;"
title=
"Insert Row Before Selected"
>
<img
alt=
"Insert Row Before Selected"
src=
"jquery_sheet_editor/jquery_sheet_image/sheet_row_add.png"
/>
</a>
<a
href=
"#"
onclick=
"sheetInstance.controlFactory.addRow(null, null, ':last'); return false;"
title=
"Add Row At End"
>
<img
alt=
"Add Row"
src=
"jquery_sheet_editor/jquery_sheet_image/sheet_row_add.png"
/>
</a>
<a
href=
"#"
onclick=
"sheetInstance.controlFactory.addRowMulti(); return false;"
title=
"Add Multi-Rows"
>
<img
alt=
"Add Multi-Rows"
src=
"jquery_sheet_editor/jquery_sheet_image/sheet_row_add_multi.png"
/>
</a>
<a
href=
"#"
onclick=
"sheetInstance.deleteRow(); return false;"
title=
"Delete Row"
>
<img
alt=
"Delete Row"
src=
"jquery_sheet_editor/jquery_sheet_image/sheet_row_delete.png"
/>
</a>
<a
href=
"#"
onclick=
"sheetInstance.controlFactory.addColumn(); return false;"
title=
"Insert Column After Selected"
>
<img
alt=
"Insert Column After Selected"
src=
"jquery_sheet_editor/jquery_sheet_image/sheet_col_add.png"
/>
</a>
<a
href=
"#"
onclick=
"sheetInstance.controlFactory.addColumn(null, true); return false;"
title=
"Insert Column Before Selected"
>
<img
alt=
"Insert Column Before Selected"
src=
"jquery_sheet_editor/jquery_sheet_image/sheet_col_add.png"
/>
</a>
<a
href=
"#"
onclick=
"sheetInstance.controlFactory.addColumn(null, null, ':last'); return false;"
title=
"Add Column At End"
>
<img
alt=
"Add Column At End"
src=
"jquery_sheet_editor/jquery_sheet_image/sheet_col_add.png"
/>
</a>
<a
href=
"#"
onclick=
"sheetInstance.controlFactory.addColumnMulti(); return false;"
title=
"Insert Multi-Columns"
>
<img
alt=
"Add Multi-Columns"
src=
"jquery_sheet_editor/jquery_sheet_image/sheet_col_add_multi.png"
/>
</a>
<a
href=
"#"
onclick=
"sheetInstance.deleteColumn(); return false;"
title=
"Delete Column"
>
<img
alt=
"Delete Column"
src=
"jquery_sheet_editor/jquery_sheet_image/sheet_col_delete.png"
/>
</a>
<a
href=
"#"
onclick=
"sheetInstance.getTdRange(null, sheetInstance.obj.formula().val()); return false;"
title=
"Get Cell Range"
>
<img
alt=
"Get Cell Range"
src=
"jquery_sheet_editor/jquery_sheet_image/sheet_get_range.png"
/>
</a>
<a
href=
"#"
onclick=
"sheetInstance.deleteSheet(); return false;"
title=
"Delete Current Sheet"
>
<img
alt=
"Delete Current Sheet"
src=
"jquery_sheet_editor/jquery_sheet_image/table_delete.png"
/>
</a>
<a
href=
"#"
onclick=
"sheetInstance.calc(sheetInstance.i); return false;"
title=
"Refresh Calculations"
>
<img
alt=
"Refresh Calculations"
src=
"jquery_sheet_editor/jquery_sheet_image/arrow_refresh.png"
/>
</a>
<a
href=
"#"
onclick=
"sheetInstance.cellFind(); return false;"
title=
"Find"
>
<img
alt=
"Find"
src=
"jquery_sheet_editor/jquery_sheet_image/find.png"
/>
</a>
<a
href=
"#"
onclick=
"sheetInstance.cellStyleToggle('styleBold'); return false;"
title=
"Bold"
>
<img
alt=
"Bold"
src=
"jquery_sheet_editor/jquery_sheet_image/text_bold.png"
/>
</a>
<a
href=
"#"
onclick=
"sheetInstance.cellStyleToggle('styleItalics'); return false;"
title=
"Italic"
>
<img
alt=
"Italic"
src=
"jquery_sheet_editor/jquery_sheet_image/text_italic.png"
/>
</a>
<a
href=
"#"
onclick=
"sheetInstance.cellStyleToggle('styleUnderline', 'styleLineThrough'); return false;"
title=
"Underline"
>
<img
alt=
"Underline"
src=
"jquery_sheet_editor/jquery_sheet_image/text_underline.png"
/>
</a>
<a
href=
"#"
onclick=
"sheetInstance.cellStyleToggle('styleLineThrough', 'styleUnderline'); return false;"
title=
"Strikethrough"
>
<img
alt=
"Strikethrough"
src=
"jquery_sheet_editor/jquery_sheet_image/text_strikethrough.png"
/>
</a>
<a
href=
"#"
onclick=
"sheetInstance.cellStyleToggle('styleLeft', 'styleCenter styleRight'); return false;"
title=
"Align Left"
>
<img
alt=
"Align Left"
src=
"jquery_sheet_editor/jquery_sheet_image/text_align_left.png"
/>
</a>
<a
href=
"#"
onclick=
"sheetInstance.cellStyleToggle('styleCenter', 'styleLeft styleRight'); return false;"
title=
"Align Center"
>
<img
alt=
"Align Center"
src=
"jquery_sheet_editor/jquery_sheet_image/text_align_center.png"
/>
</a>
<a
href=
"#"
onclick=
"sheetInstance.cellStyleToggle('styleRight', 'styleLeft styleCenter'); return false;"
title=
"Align Right"
>
<img
alt=
"Align Right"
src=
"jquery_sheet_editor/jquery_sheet_image/text_align_right.png"
/>
</a>
<a
href=
"#"
onclick=
"sheetInstance.fillUpOrDown(); return false;"
title=
"Fill Down"
>
<img
alt=
"Fill Down"
src=
"jquery_sheet_editor/jquery_sheet_image/arrow_down.png"
/>
</a>
<a
href=
"#"
onclick=
"sheetInstance.fillUpOrDown(true); return false;"
title=
"Fill Up"
>
<img
alt=
"Fill Up"
src=
"jquery_sheet_editor/jquery_sheet_image/arrow_up.png"
/>
</a>
<span
class=
"colorPickers"
>
<input
title=
"Foreground color"
class=
"colorPickerFont"
style=
"background-image: url('jquery_sheet_editor/jquery_sheet_image/palette.png') ! important; width: 16px; height: 16px;"
/>
<input
title=
"Background Color"
class=
"colorPickerCell"
style=
"background-image: url('jquery_sheet_editor/jquery_sheet_image/palette_bg.png') ! important; width: 16px; height: 16px;"
/>
</span>
<a
href=
"#"
onclick=
"sheetInstance.obj.formula().val('=HYPERLINK(\'' + prompt('Enter Web Address', 'http://www.visop-dev.com/') + '\')').keydown(); return false;"
title=
"HyperLink"
>
<img
alt=
"Web Link"
src=
"jquery_sheet_editor/jquery_sheet_image/page_link.png"
/>
</a>
<a
href=
"#"
onclick=
"sheetInstance.toggleFullScreen(); $('#lockedMenu').toggle(); return false;"
title=
"Toggle Full Screen"
>
<img
alt=
"Web Link"
src=
"jquery_sheet_editor/jquery_sheet_image/arrow_out.png"
/>
</a>
</span>
</span></div>
</content>
<dependencies>
<scriptfile>
js/jquery/plugin/sheet/jquery.sheet.js
</scriptfile>
<scriptfile>
js/jquery/plugin/mbmenu/mbMenu.min.js
</scriptfile>
<scriptfile>
js/jquery/plugin/jqchart/jgcharts.min.js
</scriptfile>
<scriptfile>
js/jquery/plugin/colorpicker/jquery.colorPicker.min.js
</scriptfile>
<scriptfile>
js/jquery/plugin/elastic/jquery.elastic.min.js
</scriptfile>
<scriptfile>
js/jquery/plugin/sheet/jquery.sheet.js
</scriptfile>
<scriptfile>
js/table-editor.js
</scriptfile>
<stylefile>
js/jquery/plugin/sheet/jquery.sheet.css
</stylefile>
<stylefile>
css/table.css
</stylefile>
<stylefile>
js/jquery/plugin/colorpicker/jquery.colorPicker.css
</stylefile>
<stylefile>
css/jquery-ui.css
</stylefile>
</dependencies>
<D:multistatus
xmlns:D=
"DAV:"
>
<D:response
xmlns:lp1=
"DAV:"
xmlns:lp2=
"http://apache.org/dav/props/"
>
<D:href>
/dav/storage/www.ungproject.com/
</D:href>
<D:propstat>
<D:prop>
<lp1:resourcetype>
<D:collection></D:collection>
</lp1:resourcetype>
<lp1:creationdate>
2011-08-16T09:01:53Z
</lp1:creationdate>
<lp1:getlastmodified>
Tue, 16 Aug 2011 09:01:53 GMT
</lp1:getlastmodified>
<lp1:getetag>
"111e80-1000-4aa9ba18b716d"
</lp1:getetag>
<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:getcontenttype>
httpd/unix-directory
</D:getcontenttype>
</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/1313168464706
</D:href>
<D:propstat>
<D:prop>
<lp1:resourcetype></lp1:resourcetype>
<lp1:creationdate>
2011-08-12T17:00:56Z
</lp1:creationdate>
<lp1:getcontentlength>
208
</lp1:getcontentlength>
<lp1:getlastmodified>
Fri, 12 Aug 2011 17:00:56 GMT
</lp1:getlastmodified>
<lp1:getetag>
"11253b-d0-4aa51db5ab821"
</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/1313168465680
</D:href>
<D:propstat>
<D:prop>
<lp1:resourcetype></lp1:resourcetype>
<lp1:creationdate>
2011-08-12T17:04:23Z
</lp1:creationdate>
<lp1:getcontentlength>
355
</lp1:getcontentlength>
<lp1:getlastmodified>
Fri, 12 Aug 2011 17:04:23 GMT
</lp1:getlastmodified>
<lp1:getetag>
"112526-163-4aa51e7bcc361"
</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/1313168467756
</D:href>
<D:propstat>
<D:prop>
<lp1:resourcetype></lp1:resourcetype>
<lp1:creationdate>
2011-08-12T17:01:39Z
</lp1:creationdate>
<lp1:getcontentlength>
394
</lp1:getcontentlength>
<lp1:getlastmodified>
Fri, 12 Aug 2011 17:01:39 GMT
</lp1:getlastmodified>
<lp1:getetag>
"11252b-18a-4aa51ddeae881"
</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/.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>
<link
rel=
"stylesheet"
href=
"css/jquery.sheet.erp5.css"
type=
"text/css"
/>
\ No newline at end of file
Write
Preview
Markdown
is supported
0%
Try again
or
attach a new file
Attach a file
Cancel
You are about to add
0
people
to the discussion. Proceed with caution.
Finish editing this message first!
Cancel
Please
register
or
sign in
to comment