Skip to content
Toggle navigation
Projects
Groups
Snippets
Help
Antti Väyrynen
/
Moya
This project
Loading...
Sign in
Toggle navigation
Go to a project
Project
Repository
Issues
0
Merge Requests
0
Wiki
Settings
Activity
Graph
Charts
Create a new issue
Commits
Issue Boards
Files
Commits
Branches
Tags
Contributors
Graph
Compare
Charts
Commit 077a2cac
authored
Nov 08, 2014
by
Juho Juopperi
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
Display user's metadata in edit user view.
1 parent
ef360b00
Hide whitespace changes
Inline
Side-by-side
Showing
5 changed files
with
292 additions
and
6 deletions
code/moya-web/WebContent/resources/cditools/user/edit.xhtml
code/moya-web/WebContent/resources/script/jsonview.js
code/moya-web/src/main/java/fi/codecrew/moya/web/cdiview/user/UserView.java
code/moya-web/src/main/resources/fi/codecrew/moya/resources/i18n.properties
code/moya-web/src/main/resources/fi/codecrew/moya/resources/i18n_fi.properties
code/moya-web/WebContent/resources/cditools/user/edit.xhtml
View file @
077a2ca
...
...
@@ -77,7 +77,7 @@
</p:panelGrid>
</p:fieldset>
</h:form>
<h:form>
<p:fieldset
legend=
"#{i18n['user.edit']}"
>
<p:panelGrid
columns=
"3"
styleClass=
"noBorders"
>
...
...
@@ -154,6 +154,24 @@
<p:commandButton
rendered=
"#{cc.attrs.creating or userView.canSave}"
id=
"commitbtn"
action=
"#{cc.attrs.commitaction}"
ajax=
"false"
value=
"#{cc.attrs.commitvalue}"
onerror=
"location.reload(true);"
/>
</p:fieldset>
</h:form>
<ui:fragment
rendered=
"#{not empty userView.meta}"
>
<h:outputScript
target=
"head"
library=
"script"
name=
"jsonview.js"
/>
<h:outputScript
target=
"head"
>
window.onload = function() {
jsonView('#usermetaview');
}
</h:outputScript>
<h:form
id=
"usermetaform"
enctype=
"multipart/form-data"
>
<p:fieldset
legend=
"#{i18n['user.meta.box.legend']}"
>
<p:panelGrid
columns=
"1"
cellpadding=
"1"
>
<div
id=
"usermetaview"
>
#{userView.meta}
</div>
</p:panelGrid>
</p:fieldset>
</h:form>
</ui:fragment>
<h:form>
<p:fieldset
legend=
"#{i18n['user.userSelectableRoles']}"
rendered=
"#{userView.showUserSelectableRoles and cc.attrs.showRoles}"
>
<p:panelGrid
columns=
"2"
styleClass=
"noBorders"
>
...
...
code/moya-web/WebContent/resources/script/jsonview.js
0 → 100644
View file @
077a2ca
/*
* ViewJSON
* Version 1.0
* A Google Chrome extension to display JSON in a user-friendly format
*
* This is a chromeified version of the JSONView Firefox extension by Ben Hollis:
* http://jsonview.com
* http://code.google.com/p/jsonview
*
* Also based on the XMLTree Chrome extension by Moonty & alan.stroop
* https://chrome.google.com/extensions/detail/gbammbheopgpmaagmckhpjbfgdfkpadb
*
* port by Jamie Wilkinson (@jamiew) | http://jamiedubs.com | http://github.com/jamiew
* MIT license / copyfree (f) F.A.T. Lab http://fffff.at
* Speed Project Approved: 2h
*/
function
collapse
(
evt
)
{
var
collapser
=
evt
.
target
;
var
target
=
collapser
.
parentNode
.
getElementsByClassName
(
'collapsible'
);
if
(
!
target
.
length
)
{
return
;
}
target
=
target
[
0
];
if
(
target
.
style
.
display
==
'none'
)
{
var
ellipsis
=
target
.
parentNode
.
getElementsByClassName
(
'ellipsis'
)[
0
];
target
.
parentNode
.
removeChild
(
ellipsis
);
target
.
style
.
display
=
''
;
}
else
{
target
.
style
.
display
=
'none'
;
var
ellipsis
=
document
.
createElement
(
'span'
);
ellipsis
.
className
=
'ellipsis'
;
ellipsis
.
innerHTML
=
' … '
;
target
.
parentNode
.
insertBefore
(
ellipsis
,
target
);
}
collapser
.
innerHTML
=
(
collapser
.
innerHTML
==
'-'
)
?
'+'
:
'-'
;
}
function
addCollapser
(
item
)
{
// This mainly filters out the root object (which shouldn't be collapsible)
if
(
item
.
nodeName
!=
'LI'
)
{
return
;
}
var
collapser
=
document
.
createElement
(
'div'
);
collapser
.
className
=
'collapser'
;
collapser
.
innerHTML
=
'-'
;
collapser
.
addEventListener
(
'click'
,
collapse
,
false
);
item
.
insertBefore
(
collapser
,
item
.
firstChild
);
}
function
jsonView
(
id
)
{
this
.
debug
=
false
;
if
(
id
.
indexOf
(
"#"
)
!=
-
1
)
{
this
.
idType
=
"id"
;
this
.
id
=
id
.
replace
(
'#'
,
''
);
}
else
if
(
id
.
indexOf
(
"."
)
!=
-
1
)
{
this
.
idType
=
"class"
;
this
.
id
=
id
.
replace
(
'.'
,
''
);
}
else
{
if
(
this
.
debug
)
console
.
log
(
"Can't find that element"
);
return
;
}
this
.
data
=
document
.
getElementById
(
this
.
id
).
innerHTML
;
// Note: now using "*.json*" URI matching rather than these page regexes -- save CPU cycles!
// var is_json = /^\s*(\{.*\})\s*$/.test(this.data);
// var is_jsonp = /^.*\(\s*(\{.*\})\s*\)$/.test(this.data);
// if(is_json || is_jsonp){
// Our manifest specifies that we only do URLs matching '.json', so attempt to sanitize any HTML
// added by Chrome's "text/plain" or "text/html" handlers
if
(
/^
\<
pre.*
\>(
.*
)\<\/
pre
\>
$/
.
test
(
this
.
data
))
{
if
(
this
.
debug
)
console
.
log
(
"JSONView: data is wrapped in <pre>...</pre>, stripping HTML..."
);
this
.
data
=
this
.
data
.
replace
(
/<
(?:
.|
\s)
*
?
>/g
,
''
);
//Aggressively strip HTML.
}
// Test if what remains is JSON or JSONp
var
json_regex
=
/^
\s
*
([\[\{]
.*
[\}\]])\s
*$/
;
// Ghetto, but it works
var
jsonp_regex
=
/^
[\s\u
200B
\u
FEFF
]
*
([\w
$
\[\]\.]
+
)[\s\u
200B
\u
FEFF
]
*
\([\s\u
200B
\u
FEFF
]
*
([\[
{
][\s\S]
*
[\]
}
])[\s\u
200B
\u
FEFF
]
*
\)
;
?[\s\u
200B
\u
FEFF
]
*$/
;
var
jsonp_regex2
=
/
([\[\{][\s\S]
*
[\]\}])\)
;/
// more liberal support... this allows us to pass the jsonp.json & jsonp2.json tests
var
is_json
=
json_regex
.
test
(
this
.
data
);
var
is_jsonp
=
jsonp_regex
.
test
(
this
.
data
);
if
(
this
.
debug
)
console
.
log
(
"JSONView: is_json="
+
is_json
+
" is_jsonp="
+
is_jsonp
);
if
(
is_json
||
is_jsonp
)
{
if
(
this
.
debug
)
console
.
log
(
"JSONView: sexytime!"
);
// JSONFormatter json->HTML prototype straight from Firefox JSONView
// For reference: http://code.google.com/p/jsonview
function
JSONFormatter
()
{
// No magic required.
}
JSONFormatter
.
prototype
=
{
htmlEncode
:
function
(
t
)
{
return
t
!=
null
?
t
.
toString
().
replace
(
/&/g
,
"&"
).
replace
(
/"/g
,
"""
).
replace
(
/</g
,
"<"
).
replace
(
/>/g
,
">"
)
:
''
;
},
decorateWithSpan
:
function
(
value
,
className
)
{
return
'<span class="'
+
className
+
'">'
+
this
.
htmlEncode
(
value
)
+
'</span>'
;
},
// Convert a basic JSON datatype (number, string, boolean, null, object, array) into an HTML fragment.
valueToHTML
:
function
(
value
)
{
var
valueType
=
typeof
value
;
var
output
=
""
;
if
(
value
==
null
)
{
output
+=
this
.
decorateWithSpan
(
'null'
,
'null'
);
}
else
if
(
value
&&
value
.
constructor
==
Array
)
{
output
+=
this
.
arrayToHTML
(
value
);
}
else
if
(
valueType
==
'object'
)
{
output
+=
this
.
objectToHTML
(
value
);
}
else
if
(
valueType
==
'number'
)
{
output
+=
this
.
decorateWithSpan
(
value
,
'num'
);
}
else
if
(
valueType
==
'string'
)
{
if
(
/^
(
http|https
)
:
\/\/[^\s]
+$/
.
test
(
value
))
{
output
+=
'<a href="'
+
value
+
'">'
+
this
.
htmlEncode
(
value
)
+
'</a>'
;
}
else
{
output
+=
this
.
decorateWithSpan
(
'"'
+
value
+
'"'
,
'string'
);
}
}
else
if
(
valueType
==
'boolean'
)
{
output
+=
this
.
decorateWithSpan
(
value
,
'bool'
);
}
return
output
;
},
// Convert an array into an HTML fragment
arrayToHTML
:
function
(
json
)
{
var
output
=
'[<ul class="array collapsible">'
;
var
hasContents
=
false
;
for
(
var
prop
in
json
)
{
hasContents
=
true
;
output
+=
'<li>'
;
output
+=
this
.
valueToHTML
(
json
[
prop
]);
output
+=
'</li>'
;
}
output
+=
'</ul>]'
;
if
(
!
hasContents
)
{
output
=
"[ ]"
;
}
return
output
;
},
// Convert a JSON object to an HTML fragment
objectToHTML
:
function
(
json
)
{
var
output
=
'{<ul class="obj collapsible">'
;
var
hasContents
=
false
;
for
(
var
prop
in
json
)
{
hasContents
=
true
;
output
+=
'<li>'
;
output
+=
'<span class="prop">'
+
this
.
htmlEncode
(
prop
)
+
'</span>: '
;
output
+=
this
.
valueToHTML
(
json
[
prop
]);
output
+=
'</li>'
;
}
output
+=
'</ul>}'
;
if
(
!
hasContents
)
{
output
=
"{ }"
;
}
return
output
;
},
// Convert a whole JSON object into a formatted HTML document.
jsonToHTML
:
function
(
json
,
callback
,
uri
)
{
var
output
=
''
;
if
(
callback
)
{
output
+=
'<div class="callback">'
+
callback
+
' (</div>'
;
output
+=
'<div id="json">'
;
}
else
{
output
+=
'<div id="json">'
;
}
output
+=
this
.
valueToHTML
(
json
);
output
+=
'</div>'
;
if
(
callback
)
{
output
+=
'<div class="callback">)</div>'
;
}
return
this
.
toHTML
(
output
,
uri
);
},
// Produce an error document for when parsing fails.
errorPage
:
function
(
error
,
data
,
uri
)
{
// var output = '<div id="error">' + this.stringbundle.GetStringFromName('errorParsing') + '</div>';
// output += '<h1>' + this.stringbundle.GetStringFromName('docContents') + ':</h1>';
var
output
=
'<div id="error">Error parsing JSON: '
+
error
.
message
+
'</div>'
;
output
+=
'<h1>'
+
error
.
stack
+
':</h1>'
;
output
+=
'<div id="json">'
+
this
.
htmlEncode
(
data
)
+
'</div>'
;
return
this
.
toHTML
(
output
,
uri
+
' - Error'
);
},
// Wrap the HTML fragment in a full document. Used by jsonToHTML and errorPage.
toHTML
:
function
(
content
,
title
)
{
return
content
;
}
};
// Sanitize & output -- all magic from JSONView Firefox
this
.
jsonFormatter
=
new
JSONFormatter
();
// This regex attempts to match a JSONP structure:
// * Any amount of whitespace (including unicode nonbreaking spaces) between the start of the file and the callback name
// * Callback name (any valid JavaScript function name according to ECMA-262 Edition 3 spec)
// * Any amount of whitespace (including unicode nonbreaking spaces)
// * Open parentheses
// * Any amount of whitespace (including unicode nonbreaking spaces)
// * Either { or [, the only two valid characters to start a JSON string.
// * Any character, any number of times
// * Either } or ], the only two valid closing characters of a JSON string.
// * Any amount of whitespace (including unicode nonbreaking spaces)
// * A closing parenthesis, an optional semicolon, and any amount of whitespace (including unicode nonbreaking spaces) until the end of the file.
// This will miss anything that has comments, or more than one callback, or requires modification before use.
var
outputDoc
=
''
;
// text = text.match(jsonp_regex)[1];
var
cleanData
=
''
,
callback
=
''
;
var
callback_results
=
jsonp_regex
.
exec
(
this
.
data
);
if
(
callback_results
&&
callback_results
.
length
==
3
)
{
if
(
this
.
debug
)
console
.
log
(
"THIS IS JSONp"
);
callback
=
callback_results
[
1
];
cleanData
=
callback_results
[
2
];
}
else
{
if
(
this
.
debug
)
console
.
log
(
"Vanilla JSON"
);
cleanData
=
this
.
data
;
}
if
(
this
.
debug
)
console
.
log
(
cleanData
);
// Covert, and catch exceptions on failure
try
{
// var jsonObj = this.nativeJSON.decode(cleanData);
var
jsonObj
=
JSON
.
parse
(
cleanData
);
if
(
jsonObj
)
{
outputDoc
=
this
.
jsonFormatter
.
jsonToHTML
(
jsonObj
,
callback
);
}
else
{
throw
"There was no object!"
;
}
}
catch
(
e
)
{
if
(
this
.
debug
)
console
.
log
(
e
);
outputDoc
=
this
.
jsonFormatter
.
errorPage
(
e
,
this
.
data
);
}
var
links
=
'<style type="text/css">body{font-family:sans-serif;}.prop{font-weight:700;}.null{color:red;}.string{color:green;}.collapser{position:absolute;left:-1em;cursor:pointer;}li{position:relative;}li:after{content:\',\';}li:last-child:after{content:\'\';}#error{-moz-border-radius:8px;border:1px solid #970000;background-color:#F7E8E8;margin:.5em;padding:.5em;}.errormessage{font-family:monospace;}#json{font-family:monospace;font-size:1.1em;}ul{list-style:none;margin:0 0 0 2em;padding:0;}h1{font-size:1.2em;}.callback + #json{padding-left:1em;}.callback{font-family:monospace;color:#A52A2A;}.bool,.num{color:blue;}</style>'
;
if
(
this
.
idType
==
"class"
)
{
document
.
getElementsByClassName
(
this
.
id
).
innerHTML
=
links
+
outputDoc
;
}
else
if
(
this
.
idType
==
"id"
)
{
document
.
getElementById
(
this
.
id
).
innerHTML
=
links
+
outputDoc
;
}
var
items
=
document
.
getElementsByClassName
(
'collapsible'
);
for
(
var
i
=
0
;
i
<
items
.
length
;
i
++
)
{
addCollapser
(
items
[
i
].
parentNode
);
}
}
else
{
// console.log("JSONView: this is not json, not formatting.");
}
}
\ No newline at end of file
code/moya-web/src/main/java/fi/codecrew/moya/web/cdiview/user/UserView.java
View file @
077a2ca
...
...
@@ -31,7 +31,7 @@ import javax.faces.application.FacesMessage;
import
javax.faces.context.FacesContext
;
import
javax.inject.Inject
;
import
javax.inject.Named
;
import
javax.
management.RuntimeErrorException
;
import
javax.
json.JsonObject
;
import
org.primefaces.event.CaptureEvent
;
import
org.primefaces.event.FileUploadEvent
;
...
...
@@ -244,8 +244,8 @@ public class UserView extends GenericCDIView {
try
{
UserImage
newImage
=
userbean
.
saveCroppedImage
(
user
.
getUser
().
getCurrentImage
(),
croppedImage
.
getLeft
(),
croppedImage
.
getTop
(),
croppedImage
.
getWidth
(),
croppedImage
.
getHeight
());
croppedImage
.
getLeft
(),
croppedImage
.
getTop
(),
croppedImage
.
getWidth
(),
croppedImage
.
getHeight
());
user
=
userbean
.
getEventUser
(
newImage
.
getUser
(),
false
);
}
catch
(
IOException
e
)
{
...
...
@@ -423,7 +423,7 @@ public class UserView extends GenericCDIView {
event
=
readerbean
.
assocCodeToCard
(
event
,
card
);
user
=
event
.
getUser
();
return
null
;
}
...
...
@@ -444,7 +444,7 @@ public class UserView extends GenericCDIView {
return
"/useradmin/edit"
;
}
//
/admin/adduser/index
// /admin/adduser/index
public
String
incomingPhotoReady
()
{
authView
.
executeLogoutNoRedirect
();
...
...
@@ -597,4 +597,25 @@ public class UserView extends GenericCDIView {
return
shirtEnabled
;
}
/**
* Get metadata from the User (not EventUser). The data is shown in ui.
*
* @return
*/
public
String
getMeta
()
{
EventUser
eventUser
=
getSelectedUser
();
if
(
eventUser
!=
null
)
{
User
user
=
eventUser
.
getUser
();
if
(
user
!=
null
)
{
JsonObject
meta
=
user
.
getMeta
();
if
(
meta
!=
null
)
{
if
(
meta
.
keySet
().
size
()
>
0
)
{
return
meta
.
toString
();
}
}
}
}
return
""
;
}
}
code/moya-web/src/main/resources/fi/codecrew/moya/resources/i18n.properties
View file @
077a2ca
...
...
@@ -388,6 +388,7 @@ topnavi.userlectures = Kurssit ja luennot
user.cropImage
=
Crop
user.imageUpload.imageNotFound
=
Select image to upload
user.info
=
K
\u
00E4ytt
\u
00E4j
\u
00E4
user.meta.box.title
=
Metadata
user.saveUserSelectableRoles
=
Tallenna
user.shirt.L
=
Unisex L
user.shirt.LadyL
=
Ladyfit L
...
...
code/moya-web/src/main/resources/fi/codecrew/moya/resources/i18n_fi.properties
View file @
077a2ca
...
...
@@ -1455,6 +1455,7 @@ user.invitemail = S\u00E4hk\u00F6postiosoite
user.lastName
=
Sukunimi
user.login
=
K
\u
00E4ytt
\u
00E4j
\u
00E4tunnus
user.logout
=
Kirjaudu ulos
user.meta.box.title
=
Metatiedot
user.myPlaces
=
Omat konepaikat
user.myProperties
=
Omat tiedot
user.nick
=
Nick
...
...
Write
Preview
Markdown
is supported
Attach a file
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 post a comment