Skip to content
Projects
Groups
Snippets
Help
Loading...
Help
Support
Keyboard shortcuts
?
Submit feedback
Contribute to GitLab
Sign in / Register
Toggle navigation
jio_mebibou
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
Snippets
Snippets
Members
Members
Collapse sidebar
Close sidebar
Activity
Graph
Create a new issue
Commits
Issue Boards
Open sidebar
Alexandra Rogova
jio_mebibou
Commits
531ca1e8
Commit
531ca1e8
authored
Jan 11, 2013
by
Sven Franck
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
jslint pass xwikistorage.js
parent
bc17b228
Changes
1
Show whitespace changes
Inline
Side-by-side
Showing
1 changed file
with
265 additions
and
257 deletions
+265
-257
src/jio.storage/xwikistorage.js
src/jio.storage/xwikistorage.js
+265
-257
No files found.
src/jio.storage/xwikistorage.js
View file @
531ca1e8
(
function
(
$
,
Base64
)
{
/*jslint indent: 2, maxlen: 80, sloppy: true, nomen: true */
/*global toSend: true, jIO: true, jQuery: true, Base64: true */
/**
/**
* JIO XWiki based storage. Type = 'xwiki'.
* Edits XWiki documents as html using html editor.
* Test this code using the following inputs:
* {"type":"xwiki","username":"Admin","password":"admin","xwikiurl":"http://127.0.0.1:8080/xwiki","space":"OfficeJS"}
*
{"type":"xwiki","username":"Admin","password":"admin","xwikiurl":"http://127.0.0
.1:8080/xwiki","space":"OfficeJS"}
*/
var
newXWikiStorage
=
function
(
spec
,
my
)
{
(
function
(
$
,
Base64
)
{
var
newXWikiStorage
=
function
(
spec
,
my
)
{
var
that
,
priv
,
escapeDocId
,
restoreDocId
,
doWithFormToken
,
getDates
,
super_serialized
;
/** The input configuration. */
spec
=
spec
||
{};
/** The "public" object which will have methods called on it. */
var
that
=
my
.
basicStorage
(
spec
,
my
);
that
=
my
.
basicStorage
(
spec
,
my
);
/** "private" fields. */
var
priv
=
{
priv
=
{
username
:
spec
.
username
||
''
,
password
:
spec
.
password
||
''
,
xwikiurl
:
spec
.
xwikiurl
||
''
,
...
...
@@ -23,64 +31,65 @@ var newXWikiStorage = function(spec, my)
};
//--------------------- Private Functions ---------------------//
/** Escape a document ID by URL escaping all '/' characters. */
var
escapeDocId
=
function
(
docId
)
{
return
docId
.
replace
(
/.html$/
,
''
).
split
(
'
/
'
).
join
(
'
%2F
'
);
escapeDocId
=
function
(
docId
)
{
// jslint: replaced "." with [\w\W]
return
docId
.
replace
(
/
[\w\W]
html$/
,
''
).
split
(
'
/
'
).
join
(
'
%2F
'
);
};
/** Restore a document id from the escaped form. */
var
restoreDocId
=
function
(
escapedDocId
)
{
restoreDocId
=
function
(
escapedDocId
)
{
return
escapedDocId
.
split
(
'
%2F
'
).
join
(
'
/
'
)
+
'
.html
'
;
};
/**
* Get the Anti-CSRF token and do something with it.
*
* @param docId
the document id of a
document which you have permission to edit.
* @param whatToDo
a function which will be called with the form token as the
parameter.
* @param docId
document id of
document which you have permission to edit.
* @param whatToDo
function which is called with form token as
parameter.
*/
var
doWithFormToken
=
function
(
docId
,
whatToDo
)
{
var
url
=
priv
.
xwikiurl
+
'
/bin/edit/
'
+
priv
.
space
+
'
/
'
+
escapeDocId
(
docId
)
+
'
?editor=wiki&cachebuster=
'
+
Date
.
now
();
doWithFormToken
=
function
(
docId
,
whatToDo
)
{
var
url
=
priv
.
xwikiurl
+
'
/bin/edit/
'
+
priv
.
space
+
'
/
'
+
escapeDocId
(
docId
)
+
'
?editor=wiki&cachebuster=
'
+
Date
.
now
();
$
.
ajax
({
url
:
url
,
type
:
"
GET
"
,
async
:
true
,
dataType
:
'
text
'
,
headers
:
{
'
Authorization
'
:
'
Basic
'
+
Base64
.
encode
(
priv
.
username
+
'
:
'
+
priv
.
password
)},
headers
:
{
'
Authorization
'
:
'
Basic
'
+
Base64
.
encode
(
priv
.
username
+
'
:
'
+
priv
.
password
)
},
success
:
function
(
html
)
{
whatToDo
(
$
(
html
).
find
(
'
input[name=form_token]
'
).
attr
(
'
value
'
));
}
});
};
/**
* Get the creation and modification dates for a page.
*
* @param docId the ID of the document.
* @param callWhenDone
a callback which will be called when this
function finishes.
* @param callWhenDone
callback, will be called when
function finishes.
*/
var
getDates
=
function
(
docId
,
callWhenDone
)
{
// http://127.0.0.1:8080/xwiki/rest/wikis/xwiki/spaces/Main/pages/<pageName>
getDates
=
function
(
docId
,
callWhenDone
)
{
// http://127.0.0.1:8080/xwiki/rest/wikis/xwiki/
// spaces/Main/pages/<pageName>
var
map
=
{};
$
.
ajax
(
{
url
:
priv
.
xwikiurl
+
'
/rest/wikis/
'
+
'
xwiki
'
+
'
/spaces/
'
+
priv
.
space
+
'
/pages/
'
+
escapeDocId
(
docId
)
+
'
?cachebuster=
'
+
Date
.
now
(),
$
.
ajax
({
url
:
priv
.
xwikiurl
+
'
/rest/wikis/
'
+
'
xwiki
'
+
'
/spaces/
'
+
priv
.
space
+
'
/pages/
'
+
escapeDocId
(
docId
)
+
'
?cachebuster=
'
+
Date
.
now
(),
type
:
"
GET
"
,
async
:
true
,
dataType
:
'
xml
'
,
headers
:
{
'
Authorization
'
:
'
Basic
'
+
Base64
.
encode
(
priv
.
username
+
'
:
'
+
priv
.
password
)},
headers
:
{
'
Authorization
'
:
'
Basic
'
+
Base64
.
encode
(
priv
.
username
+
'
:
'
+
priv
.
password
)
},
success
:
function
(
xmlData
)
{
$
(
xmlData
).
find
(
'
modified
'
).
each
(
function
()
{
$
(
xmlData
).
find
(
'
modified
'
).
each
(
function
()
{
map
.
_last_modified
=
Date
.
parse
(
$
(
this
).
text
());
});
$
(
xmlData
).
find
(
'
created
'
).
each
(
function
()
{
$
(
xmlData
).
find
(
'
created
'
).
each
(
function
()
{
map
.
_creation_date
=
Date
.
parse
(
$
(
this
).
text
());
});
callWhenDone
();
...
...
@@ -90,52 +99,51 @@ var newXWikiStorage = function(spec, my)
};
//--------------------- Public Functions ---------------------//
/** Get a serialized form of the module state. */
var
super_serialized
=
that
.
serialized
;
that
.
serialized
=
function
()
{
var
o
=
super_serialized
()
;
for
(
var
key
in
priv
)
{
super_serialized
=
that
.
serialized
;
that
.
serialized
=
function
()
{
var
o
=
super_serialized
(),
key
;
for
(
key
in
priv
)
{
if
(
priv
.
hasOwnProperty
(
key
))
{
o
[
key
]
=
priv
[
key
];
}
}
return
o
;
};
/** Check that the storage module is properly setup. */
that
.
validateState
=
function
()
{
for
(
var
key
in
priv
)
{
that
.
validateState
=
function
()
{
var
key
;
for
(
key
in
priv
)
{
if
(
priv
.
hasOwnProperty
(
key
)
&&
!
priv
[
key
])
{
return
'
Must specify "
'
+
key
+
'
".
'
;
}
}
return
''
;
};
/** Alias to put() */
that
.
post
=
function
(
command
)
{
that
.
put
(
command
);
};
/**
* Saves a document as an XWikiDocument.
*
* @param command must contain document ID and document content.
*/
that
.
put
=
function
(
command
)
{
doWithFormToken
(
command
.
getDocId
(),
function
(
formToken
)
{
doWithFormToken
(
command
.
getDocId
(),
function
(
formToken
)
{
if
(
!
formToken
)
{
thro
w
Error
(
"
missing form token
"
);
throw
ne
w
Error
(
"
missing form token
"
);
}
$
.
ajax
({
url
:
priv
.
xwikiurl
+
'
/bin/preview/
'
+
priv
.
space
+
'
/
'
+
escapeDocId
(
command
.
getDocId
()),
url
:
priv
.
xwikiurl
+
'
/bin/preview/
'
+
priv
.
space
+
'
/
'
+
escapeDocId
(
command
.
getDocId
()),
type
:
"
POST
"
,
async
:
true
,
dataType
:
'
text
'
,
headers
:
{
'
Authorization
'
:
'
Basic
'
+
Base64
.
encode
(
priv
.
username
+
'
:
'
+
priv
.
password
)},
headers
:
{
'
Authorization
'
:
'
Basic
'
+
Base64
.
encode
(
priv
.
username
+
'
:
'
+
priv
.
password
)
},
data
:
{
parent
:
''
,
title
:
''
,
...
...
@@ -153,7 +161,7 @@ var newXWikiStorage = function(spec, my)
ajax
:
true
,
form_token
:
formToken
},
success
:
function
(
html
)
{
success
:
function
(
)
{
that
.
success
({
ok
:
true
,
id
:
command
.
getDocId
()
...
...
@@ -162,8 +170,6 @@ var newXWikiStorage = function(spec, my)
});
});
};
// end put
/**
* Loads a document from the XWiki storage.
*/
...
...
@@ -178,32 +184,34 @@ var newXWikiStorage = function(spec, my)
* "_last_modified": 1348154789478
* }
*/
var
doc
;
var
pendingRequests
=
2
;
var
finishedRequest
=
function
()
{
pendingRequests
--
;
var
doc
,
pendingRequests
=
2
,
finishedRequest
=
function
()
{
pendingRequests
-=
1
;
if
(
pendingRequests
<
1
)
{
that
.
success
(
doc
);
}
};
doc
=
(
function
()
{
doc
=
(
function
()
{
var
resultMap
=
getDates
(
command
.
getDocId
(),
finishedRequest
);
$
.
ajax
({
url
:
priv
.
xwikiurl
+
'
/bin/get/
'
+
priv
.
space
+
'
/
'
+
escapeDocId
(
command
.
getDocId
())
+
'
?xpage=plain&cachebuster=
'
+
Date
.
now
(),
url
:
priv
.
xwikiurl
+
'
/bin/get/
'
+
priv
.
space
+
'
/
'
+
escapeDocId
(
command
.
getDocId
())
+
'
?xpage=plain&cachebuster=
'
+
Date
.
now
(),
type
:
"
GET
"
,
async
:
true
,
dataType
:
'
text
'
,
headers
:
{
'
Authorization
'
:
'
Basic
'
+
Base64
.
encode
(
priv
.
username
+
'
:
'
+
priv
.
password
)},
headers
:
{
'
Authorization
'
:
'
Basic
'
+
Base64
.
encode
(
priv
.
username
+
'
:
'
+
priv
.
password
)
},
success
:
function
(
html
)
{
resultMap
.
content
=
html
;
finishedRequest
();
}
});
return
resultMap
;
})(
);
}()
);
doc
.
_id
=
command
.
getDocId
();
};
// end get
...
...
@@ -215,15 +223,16 @@ var newXWikiStorage = function(spec, my)
*/
that
.
allDocs
=
function
(
command
)
{
// http://127.0.0.1:8080/xwiki/rest/wikis/xwiki/spaces/Main/pages
$
.
ajax
(
{
url
:
priv
.
xwikiurl
+
'
/rest/wikis/
'
+
'
xwiki
'
+
'
/spaces/
'
+
priv
.
space
+
'
/pages?cachebuster=
'
+
Date
.
now
(),
$
.
ajax
({
url
:
priv
.
xwikiurl
+
'
/rest/wikis/
'
+
'
xwiki
'
+
'
/spaces/
'
+
priv
.
space
+
'
/pages?cachebuster=
'
+
Date
.
now
(),
type
:
"
GET
"
,
async
:
true
,
dataType
:
'
xml
'
,
headers
:
{
'
Authorization
'
:
'
Basic
'
+
Base64
.
encode
(
priv
.
username
+
'
:
'
+
priv
.
password
)},
headers
:
{
'
Authorization
'
:
'
Basic
'
+
Base64
.
encode
(
priv
.
username
+
'
:
'
+
priv
.
password
)
},
success
:
function
(
xmlData
)
{
/** Protocol definition:
* {
...
...
@@ -249,28 +258,27 @@ var newXWikiStorage = function(spec, my)
* ]
* }
*/
var
totalRows
=
0
var
data
=
[];
var
totalRows
=
0
,
data
=
[],
// The number of async calls which are waiting to return.
var
outstandingCalls
=
0
;
$
(
xmlData
).
find
(
'
name
'
).
each
(
function
()
{
outstandingCalls
++
;
var
id
=
restoreDocId
(
$
(
this
).
text
());
var
entry
=
{
outstandingCalls
=
0
,
toSend
;
$
(
xmlData
).
find
(
'
name
'
).
each
(
function
()
{
outstandingCalls
+=
1
;
var
id
=
restoreDocId
(
$
(
this
).
text
()),
entry
=
{
'
id
'
:
id
,
'
key
'
:
id
,
'
value
'
:
getDates
(
id
,
function
()
{
outstandingCalls
--
;
'
value
'
:
getDates
(
id
,
function
()
{
outstandingCalls
-=
1
;
if
(
outstandingCalls
<
1
)
{
that
.
success
(
toSend
);
}
})
};
data
[
totalRows
++
]
=
entry
;
data
[
totalRows
+=
1
]
=
entry
;
});
var
toSend
=
{
toSend
=
{
'
total_rows
'
:
totalRows
,
'
rows
'
:
data
};
...
...
@@ -285,38 +293,40 @@ var newXWikiStorage = function(spec, my)
error
:
function
(
type
)
{
if
(
type
.
status
===
404
)
{
type
.
message
=
'
Cannot find "
'
+
command
.
getDocId
()
+
'
"
informations.
'
;
'
"
informations.
'
;
type
.
reason
=
'
missing
'
;
that
.
error
(
type
);
}
else
{
type
.
reason
=
'
Cannot get "
'
+
command
.
getDocId
()
+
'
"
informations
'
;
'
"
informations
'
;
type
.
message
=
type
.
reason
+
'
.
'
;
that
.
retry
(
type
);
}
}
}
);
}
);
};
/**
* Removes a document from the XWiki storage.
*/
that
.
remove
=
function
(
command
)
{
// http://127.0.0.1:8080/xwiki/bin/delete/Main/WebHomee?confirm=1&form_token=r7x0oGBSk2EFm2fxVULfFA
doWithFormToken
(
command
.
getDocId
(),
function
(
formToken
)
{
// http://127.0.0.1:8080/xwiki/bin/delete/Main/WebHomee?
// confirm=1&form_token= //r7x0oGBSk2EFm2fxVULfFA
doWithFormToken
(
command
.
getDocId
(),
function
(
formToken
)
{
$
.
ajax
({
url
:
priv
.
xwikiurl
+
'
/bin/delete/
'
+
priv
.
space
+
'
/
'
+
escapeDocId
(
command
.
getDocId
()),
url
:
priv
.
xwikiurl
+
'
/bin/delete/
'
+
priv
.
space
+
'
/
'
+
escapeDocId
(
command
.
getDocId
()),
type
:
"
POST
"
,
async
:
true
,
dataType
:
'
text
'
,
headers
:
{
'
Authorization
'
:
'
Basic
'
+
Base64
.
encode
(
priv
.
username
+
'
:
'
+
priv
.
password
)},
headers
:
{
'
Authorization
'
:
'
Basic
'
+
Base64
.
encode
(
priv
.
username
+
'
:
'
+
priv
.
password
)
},
data
:
{
confirm
:
1
,
form_token
:
formToken
},
success
:
function
(
html
)
{
success
:
function
(
)
{
that
.
success
({
ok
:
true
,
id
:
command
.
getDocId
()
...
...
@@ -325,9 +335,7 @@ var newXWikiStorage = function(spec, my)
});
});
};
// end remove
return
that
;
};
jIO
.
addStorageType
(
'
xwiki
'
,
newXWikiStorage
);
}(
jQuery
,
Base64
));
};
jIO
.
addStorageType
(
'
xwiki
'
,
newXWikiStorage
);
}(
jQuery
,
Base64
));
\ 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