Gitlab CSE Unil
Skip to content
GitLab
Menu
Projects
Groups
Snippets
Help
Help
Support
Community forum
Keyboard shortcuts
?
Submit feedback
Contribute to GitLab
Sign in
Toggle navigation
Menu
Open sidebar
M. Chardon
moodle-assignfeedback_editpdfplus
Commits
9e4edd46
Commit
9e4edd46
authored
Jul 15, 2016
by
M. Chardon
Browse files
init
parents
Changes
206
Hide whitespace changes
Inline
Side-by-side
.old/mod/lti/amd/build/external_registration.min.js
0 → 100755
View file @
9e4edd46
define
([
"
jquery
"
,
"
core/ajax
"
,
"
core/notification
"
,
"
core/templates
"
,
"
mod_lti/events
"
,
"
mod_lti/tool_proxy
"
,
"
mod_lti/tool_type
"
,
"
mod_lti/keys
"
,
"
core/str
"
],
function
(
a
,
b
,
c
,
d
,
e
,
f
,
g
,
h
,
i
){
var
j
=
{
EXTERNAL_REGISTRATION_CONTAINER
:
"
#external-registration-page-container
"
,
EXTERNAL_REGISTRATION_TEMPLATE_CONTAINER
:
"
#external-registration-template-container
"
,
EXTERNAL_REGISTRATION_CANCEL_BUTTON
:
"
#cancel-external-registration
"
,
TOOL_TYPE_CAPABILITIES_CONTAINER
:
"
#tool-type-capabilities-container
"
,
TOOL_TYPE_CAPABILITIES_TEMPLATE_CONTAINER
:
"
#tool-type-capabilities-template-container
"
,
CAPABILITIES_AGREE_CONTAINER
:
"
.capabilities-container
"
},
k
=
function
(){
return
a
(
j
.
EXTERNAL_REGISTRATION_CANCEL_BUTTON
)},
l
=
function
(){
return
a
(
j
.
EXTERNAL_REGISTRATION_CONTAINER
)},
m
=
function
(){
return
a
(
j
.
EXTERNAL_REGISTRATION_TEMPLATE_CONTAINER
)},
n
=
function
(){
return
a
(
j
.
TOOL_TYPE_CAPABILITIES_CONTAINER
)},
o
=
function
(){
return
a
(
j
.
TOOL_TYPE_CAPABILITIES_TEMPLATE_CONTAINER
)},
p
=
function
(){
n
().
addClass
(
"
loading
"
)},
q
=
function
(){
n
().
removeClass
(
"
loading
"
)},
r
=
function
(){
k
().
addClass
(
"
loading
"
)},
s
=
function
(){
k
().
removeClass
(
"
loading
"
)},
t
=
function
(){
n
().
addClass
(
"
hidden
"
)},
u
=
function
(){
n
().
removeClass
(
"
hidden
"
)},
v
=
function
(){
l
().
addClass
(
"
hidden
"
)},
w
=
function
(){
l
().
removeClass
(
"
hidden
"
)},
x
=
function
(
a
){
var
b
=
k
();
b
.
attr
(
"
data-tool-proxy-id
"
,
a
)},
y
=
function
(){
var
a
=
k
();
return
a
.
attr
(
"
data-tool-proxy-id
"
)},
z
=
function
(){
var
a
=
k
();
a
.
removeAttr
(
"
data-tool-proxy-id
"
)},
A
=
function
(){
return
y
()?
!
0
:
!
1
},
B
=
function
(){
var
a
=
k
();
return
a
.
attr
(
"
data-tool-proxy-new
"
)
&&
A
()},
C
=
function
(){
var
a
=
k
();
return
a
.
attr
(
"
data-tool-proxy-new
"
,
"
new
"
)},
D
=
function
(){
var
a
=
k
();
return
a
.
removeAttr
(
"
data-tool-proxy-new
"
)},
E
=
function
(
a
){
var
c
=
{
methodname
:
"
mod_lti_get_tool_proxy_registration_request
"
,
args
:{
id
:
a
}};
return
b
.
call
([
c
])[
0
]},
F
=
function
(){
r
();
var
b
=
a
.
Deferred
();
if
(
B
()){
var
d
=
y
();
f
[
"
delete
"
](
d
).
done
(
function
(){
b
.
resolve
()}).
fail
(
function
(
a
){
b
.
reject
(
a
)})}
else
b
.
resolve
();
return
b
.
done
(
function
(){
L
(),
s
()}).
fail
(
function
(
b
){
c
.
exception
(
b
),
L
(),
s
(),
i
.
get_string
(
"
failedtodeletetoolproxy
"
,
"
mod_lti
"
).
done
(
function
(
b
){
var
c
=
{
message
:
b
,
error
:
!
0
};
a
(
document
).
trigger
(
e
.
REGISTRATION_FEEDBACK
,
c
)}).
fail
(
c
.
exception
)}),
b
},
G
=
function
(
a
){
var
b
=
d
.
render
(
"
mod_lti/tool_proxy_registration_form
"
,
a
);
return
b
.
done
(
function
(
a
,
b
){
var
c
=
m
();
c
.
append
(
a
),
d
.
runTemplateJS
(
b
),
c
.
find
(
"
form
"
).
submit
(),
w
()}).
fail
(
c
.
exception
),
b
},
H
=
function
(
a
){
return
g
.
update
({
id
:
a
.
id
,
state
:
g
.
constants
.
state
.
configured
})},
I
=
function
(
b
){
var
f
=
a
.
Deferred
();
return
d
.
render
(
"
mod_lti/tool_type_capabilities_agree
"
,
b
).
done
(
function
(
a
,
c
){
var
g
=
o
();
v
(),
u
(),
d
.
replaceNodeContents
(
g
,
a
,
c
);
var
h
=
g
.
find
(
j
.
CAPABILITIES_AGREE_CONTAINER
);
h
.
on
(
e
.
CAPABILITIES_AGREE
,
function
(){
p
(),
H
(
b
).
always
(
function
(){
q
(),
g
.
empty
(),
f
.
resolve
()})}),
h
.
on
(
e
.
CAPABILITIES_DECLINE
,
function
(){
g
.
empty
(),
f
.
resolve
()})}).
fail
(
f
.
reject
),
f
.
done
(
function
(){
t
()}).
fail
(
c
.
exception
),
f
},
J
=
function
(
b
){
var
c
=
a
.
Deferred
();
return
b
&&
""
!==
b
?
f
.
create
({
regurl
:
b
}).
done
(
function
(
a
){
C
(),
c
=
K
(
a
.
id
)}).
fail
(
function
(
b
){
F
();
var
d
=
{
message
:
b
.
message
,
error
:
!
0
};
a
(
document
).
trigger
(
e
.
REGISTRATION_FEEDBACK
,
d
),
c
.
reject
(
b
)}):
c
.
resolve
(),
c
},
K
=
function
(
b
){
var
c
=
a
.
Deferred
();
return
x
(
b
),
E
(
b
).
done
(
function
(
a
){
G
(
a
).
done
(
function
(){
c
.
resolve
()}).
fail
(
c
.
fail
)}).
fail
(
c
.
fail
),
c
},
L
=
function
(){
A
()
&&
z
(),
D
(
!
1
),
v
();
var
b
=
m
();
b
.
empty
(),
a
(
document
).
trigger
(
e
.
STOP_EXTERNAL_REGISTRATION
)},
M
=
function
(){
a
(
document
).
on
(
e
.
START_EXTERNAL_REGISTRATION
,
function
(
a
,
b
){
b
&&
(
b
.
url
&&
J
(
b
.
url
),
b
.
proxyid
&&
K
(
b
.
proxyid
))});
var
b
=
k
();
b
.
click
(
function
(
a
){
a
.
preventDefault
(),
F
()}),
b
.
keypress
(
function
(
a
){
a
.
metaKey
||
a
.
shiftKey
||
a
.
altKey
||
a
.
ctrlKey
||
(
a
.
keyCode
==
h
.
ENTER
||
a
.
keyCode
==
h
.
SPACE
)
&&
(
a
.
preventDefault
(),
F
())}),
window
.
triggerExternalRegistrationComplete
=
function
(
b
){
var
d
=
a
.
Deferred
(),
f
=
{
message
:
""
,
error
:
!
1
};
if
(
"
success
"
==
b
.
status
){
if
(
i
.
get_string
(
"
successfullycreatedtooltype
"
,
"
mod_lti
"
).
done
(
function
(
a
){
f
.
message
=
a
}).
fail
(
c
.
exception
),
d
.
done
(
function
(){
L
(),
a
(
document
).
trigger
(
e
.
REGISTRATION_FEEDBACK
,
f
),
a
(
document
).
trigger
(
e
.
NEW_TOOL_TYPE
)}).
fail
(
c
.
exception
),
B
()){
var
h
=
y
();
g
.
getFromToolProxyId
(
h
).
done
(
function
(
a
){
if
(
a
&&
a
.
length
){
var
b
=
a
[
0
];
b
.
hascapabilitygroups
?
I
(
b
).
always
(
function
(){
d
.
resolve
()}):
d
.
resolve
()}
else
d
.
resolve
()}).
fail
(
function
(){
d
.
resolve
()})}}
else
f
.
message
=
b
.
error
,
f
.
error
=!
0
,
d
.
done
(
function
(){
F
().
always
(
function
(){
a
(
document
).
trigger
(
e
.
REGISTRATION_FEEDBACK
,
f
)})}).
fail
(
c
.
exception
),
d
.
resolve
();
return
d
}};
return
{
init
:
function
(){
M
()}}});
\ No newline at end of file
.old/mod/lti/amd/build/external_registration_return.min.js
0 → 100755
View file @
9e4edd46
define
([],
function
(){
return
{
init
:
function
(
a
,
b
,
c
,
d
){
window
.
parent
&&
window
.
parent
.
triggerExternalRegistrationComplete
({
message
:
a
,
error
:
b
,
id
:
c
,
status
:
d
})}}});
\ No newline at end of file
.old/mod/lti/amd/build/keys.min.js
0 → 100755
View file @
9e4edd46
define
([],
function
(){
return
{
ENTER
:
13
,
SPACE
:
32
}});
\ No newline at end of file
.old/mod/lti/amd/build/tool_card_controller.min.js
0 → 100755
View file @
9e4edd46
define
([
"
jquery
"
,
"
core/ajax
"
,
"
core/notification
"
,
"
core/templates
"
,
"
mod_lti/tool_type
"
,
"
mod_lti/events
"
,
"
mod_lti/keys
"
,
"
core/str
"
],
function
(
a
,
b
,
c
,
d
,
e
,
f
,
g
,
h
){
var
i
=
{
DELETE_BUTTON
:
"
.delete
"
,
NAME_ELEMENT
:
"
.name
"
,
DESCRIPTION_ELEMENT
:
"
.description
"
,
CAPABILITIES_CONTAINER
:
"
.capabilities-container
"
,
ACTIVATE_BUTTON
:
"
.tool-card-footer a.activate
"
},
j
=
2
e3
,
k
=
function
(
a
){
return
a
.
find
(
i
.
DELETE_BUTTON
)},
l
=
function
(
a
){
return
a
.
find
(
i
.
NAME_ELEMENT
)},
m
=
function
(
a
){
return
a
.
find
(
i
.
DESCRIPTION_ELEMENT
)},
n
=
function
(
a
){
return
a
.
find
(
i
.
ACTIVATE_BUTTON
)},
o
=
function
(
a
){
return
n
(
a
).
length
?
!
0
:
!
1
},
p
=
function
(
a
){
return
a
.
find
(
i
.
CAPABILITIES_CONTAINER
)},
q
=
function
(
a
){
return
p
(
a
).
length
?
!
0
:
!
1
},
r
=
function
(
a
){
return
a
.
attr
(
"
data-type-id
"
)},
s
=
function
(
a
){
a
.
removeClass
(
"
announcement loading success fail capabilities
"
)},
t
=
function
(
a
){
s
(
a
),
a
.
addClass
(
"
announcement loading
"
)},
u
=
function
(
a
){
a
.
removeClass
(
"
announcement loading
"
)},
v
=
function
(
b
){
var
c
=
a
.
Deferred
();
return
s
(
b
),
b
.
addClass
(
"
announcement success
"
),
setTimeout
(
function
(){
b
.
removeClass
(
"
announcement success
"
),
c
.
resolve
()},
j
),
c
},
w
=
function
(
b
){
var
c
=
a
.
Deferred
();
return
s
(
b
),
b
.
addClass
(
"
announcement fail
"
),
setTimeout
(
function
(){
b
.
removeClass
(
"
announcement fail
"
),
c
.
resolve
()},
j
),
c
},
x
=
function
(
b
){
var
d
=
a
.
Deferred
(),
f
=
r
(
b
);
return
t
(
b
),
""
===
f
?
a
.
Deferred
().
resolve
():(
h
.
get_strings
([{
key
:
"
delete
"
,
component
:
"
mod_lti
"
},{
key
:
"
delete_confirmation
"
,
component
:
"
mod_lti
"
},{
key
:
"
delete
"
,
component
:
"
mod_lti
"
},{
key
:
"
cancel
"
,
component
:
"
core
"
}]).
done
(
function
(
a
){
c
.
confirm
(
a
[
0
],
a
[
1
],
a
[
2
],
a
[
3
],
function
(){
e
[
"
delete
"
](
f
).
done
(
function
(){
u
(
b
),
v
(
b
).
done
(
function
(){
b
.
remove
()}).
fail
(
c
.
exception
).
always
(
function
(){
d
.
resolve
()})}).
fail
(
function
(
a
){
w
(
b
),
d
.
reject
(
a
)})},
function
(){
u
(
b
),
d
.
resolve
()})}).
fail
(
function
(
a
){
u
(
b
),
c
.
exception
(
a
),
d
.
reject
(
a
)}),
d
)},
y
=
function
(
a
,
b
){
a
.
attr
(
"
data-val-snapshot
"
,
b
)},
z
=
function
(
a
){
return
a
.
attr
(
"
data-val-snapshot
"
)},
A
=
function
(
a
){
var
b
=
m
(
a
);
if
(
!
b
.
hasClass
(
"
loading
"
)){
var
c
=
b
.
text
().
trim
();
y
(
b
,
c
)}},
B
=
function
(
b
){
var
d
=
r
(
b
);
if
(
""
===
d
)
return
a
.
Deferred
().
resolve
();
var
f
=
m
(
b
);
if
(
f
.
hasClass
(
"
loading
"
))
return
a
.
Deferred
().
resolve
();
var
g
=
f
.
text
().
trim
(),
h
=
z
(
f
);
if
(
h
==
g
)
return
a
.
Deferred
().
resolve
();
f
.
addClass
(
"
loading
"
);
var
i
=
e
.
update
({
id
:
d
,
description
:
g
});
return
i
.
done
(
function
(
a
){
f
.
removeClass
(
"
loading
"
),
f
.
text
(
a
.
description
)}).
fail
(
c
.
exception
),
i
.
fail
(
function
(){
f
.
removeClass
(
"
loading
"
)}),
i
},
C
=
function
(
a
){
var
b
=
l
(
a
);
if
(
!
b
.
hasClass
(
"
loading
"
)){
var
c
=
b
.
text
().
trim
();
y
(
b
,
c
)}},
D
=
function
(
b
){
var
c
=
r
(
b
);
if
(
""
===
c
)
return
a
.
Deferred
().
resolve
();
var
d
=
l
(
b
);
if
(
d
.
hasClass
(
"
loading
"
))
return
a
.
Deferred
().
resolve
();
var
f
=
d
.
text
().
trim
(),
g
=
z
(
d
);
if
(
g
==
f
)
return
a
.
Deferred
().
resolve
();
d
.
addClass
(
"
loading
"
);
var
h
=
e
.
update
({
id
:
c
,
name
:
f
});
return
h
.
done
(
function
(
a
){
d
.
removeClass
(
"
loading
"
),
d
.
text
(
a
.
name
)}),
h
.
fail
(
function
(){
d
.
removeClass
(
"
loading
"
)}),
h
},
E
=
function
(
b
){
var
c
=
r
(
b
);
if
(
""
===
c
)
return
a
.
Deferred
().
resolve
();
t
(
b
);
var
f
=
e
.
update
({
id
:
c
,
state
:
e
.
constants
.
state
.
configured
});
return
f
.
done
(
function
(
c
){
u
(
b
);
var
e
=
v
(
b
),
f
=
d
.
render
(
"
mod_lti/tool_card
"
,
c
);
a
.
when
(
f
,
e
).
then
(
function
(
a
){
var
c
=
a
[
0
],
e
=
a
[
1
];
d
.
replaceNode
(
b
,
c
,
e
)})}),
f
.
fail
(
function
(){
u
(
b
),
w
(
b
)}),
f
},
F
=
function
(
a
){
a
.
addClass
(
"
announcement capabilities
"
)},
G
=
function
(
a
){
a
.
removeClass
(
"
announcement capabilities
"
)},
H
=
function
(
a
){
q
(
a
)?
F
(
a
):
E
(
a
)},
I
=
function
(
a
){
var
b
=
k
(
a
);
b
.
click
(
function
(
b
){
b
.
preventDefault
(),
x
(
a
)}),
b
.
keypress
(
function
(
a
){
a
.
metaKey
||
a
.
shiftKey
||
a
.
altKey
||
a
.
ctrlKey
||
(
a
.
keyCode
==
g
.
ENTER
||
a
.
keyCode
==
g
.
SPACE
)
&&
(
a
.
preventDefault
(),
b
.
click
())});
var
c
=
m
(
a
);
c
.
focus
(
function
(
b
){
b
.
preventDefault
(),
A
(
a
)}),
c
.
blur
(
function
(
b
){
b
.
preventDefault
(),
B
(
a
)}),
c
.
keypress
(
function
(
a
){
a
.
metaKey
||
a
.
shiftKey
||
a
.
altKey
||
a
.
ctrlKey
||
a
.
keyCode
==
g
.
ENTER
&&
(
a
.
preventDefault
(),
c
.
blur
())});
var
d
=
l
(
a
);
if
(
d
.
focus
(
function
(
b
){
b
.
preventDefault
(),
C
(
a
)}),
d
.
blur
(
function
(
b
){
b
.
preventDefault
(),
D
(
a
)}),
d
.
keypress
(
function
(
a
){
a
.
metaKey
||
a
.
shiftKey
||
a
.
altKey
||
a
.
ctrlKey
||
a
.
keyCode
==
g
.
ENTER
&&
(
a
.
preventDefault
(),
d
.
blur
())}),
o
(
a
)){
var
e
=
n
(
a
);
e
.
click
(
function
(
b
){
b
.
preventDefault
(),
H
(
a
)}),
e
.
keypress
(
function
(
a
){
a
.
metaKey
||
a
.
shiftKey
||
a
.
altKey
||
a
.
ctrlKey
||
(
a
.
keyCode
==
g
.
ENTER
||
a
.
keyCode
==
g
.
SPACE
)
&&
(
a
.
preventDefault
(),
e
.
click
())})}
if
(
q
(
a
)){
var
h
=
p
(
a
);
h
.
on
(
f
.
CAPABILITIES_AGREE
,
function
(){
E
(
a
)}),
h
.
on
(
f
.
CAPABILITIES_DECLINE
,
function
(){
G
(
a
)})}};
return
{
init
:
function
(
a
){
I
(
a
)}}});
\ No newline at end of file
.old/mod/lti/amd/build/tool_configure_controller.min.js
0 → 100755
View file @
9e4edd46
define
([
"
jquery
"
,
"
core/ajax
"
,
"
core/notification
"
,
"
core/templates
"
,
"
mod_lti/events
"
,
"
mod_lti/keys
"
,
"
mod_lti/tool_type
"
,
"
mod_lti/tool_proxy
"
,
"
core/str
"
],
function
(
a
,
b
,
c
,
d
,
e
,
f
,
g
,
h
,
i
){
var
j
=
{
EXTERNAL_REGISTRATION_CONTAINER
:
"
#external-registration-container
"
,
EXTERNAL_REGISTRATION_PAGE_CONTAINER
:
"
#external-registration-page-container
"
,
CARTRIDGE_REGISTRATION_CONTAINER
:
"
#cartridge-registration-container
"
,
CARTRIDGE_REGISTRATION_FORM
:
"
#cartridge-registration-form
"
,
ADD_TOOL_FORM
:
"
#add-tool-form
"
,
TOOL_LIST_CONTAINER
:
"
#tool-list-container
"
,
TOOL_CREATE_BUTTON
:
"
#tool-create-button
"
,
REGISTRATION_CHOICE_CONTAINER
:
"
#registration-choice-container
"
,
TOOL_URL
:
"
#tool-url
"
},
k
=
function
(){
return
a
(
j
.
TOOL_CREATE_BUTTON
)},
l
=
function
(){
return
a
(
j
.
TOOL_LIST_CONTAINER
)},
m
=
function
(){
return
a
(
j
.
EXTERNAL_REGISTRATION_CONTAINER
)},
n
=
function
(){
return
a
(
j
.
CARTRIDGE_REGISTRATION_CONTAINER
)},
o
=
function
(){
return
a
(
j
.
REGISTRATION_CHOICE_CONTAINER
)},
p
=
function
(){
return
a
(
j
.
TOOL_URL
).
val
()},
q
=
function
(){
m
().
addClass
(
"
hidden
"
)},
r
=
function
(){
n
().
addClass
(
"
hidden
"
)},
s
=
function
(){
o
().
addClass
(
"
hidden
"
)},
t
=
function
(){
r
(),
s
(),
m
().
removeClass
(
"
hidden
"
),
v
(
m
())},
u
=
function
(
a
){
q
(),
s
(),
n
().
removeClass
(
"
hidden
"
),
n
().
find
(
j
.
CARTRIDGE_REGISTRATION_FORM
).
attr
(
"
data-cartridge-url
"
,
a
),
v
(
n
())},
v
=
function
(
a
){
var
b
=
a
.
children
().
clone
(
!
0
,
!
0
);
a
.
empty
(),
a
.
append
(
b
)},
w
=
function
(){
q
(),
r
(),
o
().
removeClass
(
"
hidden
"
),
v
(
o
())},
x
=
function
(){
l
().
addClass
(
"
hidden
"
)},
y
=
function
(){
l
().
removeClass
(
"
hidden
"
)},
z
=
function
(
a
){
var
b
=
a
.
error
?
"
error
"
:
"
success
"
;
c
.
addNotification
({
message
:
a
.
message
,
type
:
b
})},
A
=
function
(
a
){
a
.
addClass
(
"
loading
"
)},
B
=
function
(
a
){
a
.
removeClass
(
"
loading
"
)},
C
=
function
(){
var
b
=
a
.
Deferred
(),
e
=
l
();
A
(
e
),
a
.
when
(
g
.
query
(),
h
.
query
({
orphanedonly
:
!
0
})).
done
(
function
(
a
,
c
){
d
.
render
(
"
mod_lti/tool_list
"
,{
tools
:
a
,
proxies
:
c
}).
done
(
function
(
a
,
c
){
e
.
empty
(),
e
.
append
(
a
),
d
.
runTemplateJS
(
c
),
b
.
resolve
()}).
fail
(
b
.
reject
)}).
fail
(
b
.
reject
),
b
.
fail
(
c
.
exception
).
always
(
function
(){
B
(
e
)})},
D
=
function
(){
var
b
=
a
.
trim
(
p
());
if
(
""
===
b
)
return
a
.
Deferred
().
resolve
();
var
d
=
k
();
A
(
d
);
var
f
=
g
.
isCartridge
(
b
);
return
f
.
always
(
function
(){
B
(
d
)}),
f
.
done
(
function
(
c
){
c
.
iscartridge
?(
a
(
j
.
TOOL_URL
).
val
(
""
),
a
(
document
).
trigger
(
e
.
START_CARTRIDGE_REGISTRATION
,
b
)):
a
(
document
).
trigger
(
e
.
START_EXTERNAL_REGISTRATION
,{
url
:
b
})}),
f
.
fail
(
function
(){
i
.
get_string
(
"
errorbadurl
"
,
"
mod_lti
"
).
done
(
function
(
b
){
a
(
document
).
trigger
(
e
.
REGISTRATION_FEEDBACK
,{
message
:
b
,
error
:
!
0
})}).
fail
(
c
.
exception
)}),
f
},
E
=
function
(){
a
(
document
).
on
(
e
.
NEW_TOOL_TYPE
,
function
(){
C
()}),
a
(
document
).
on
(
e
.
START_EXTERNAL_REGISTRATION
,
function
(){
t
(),
a
(
j
.
TOOL_URL
).
val
(
""
),
x
()}),
a
(
document
).
on
(
e
.
STOP_EXTERNAL_REGISTRATION
,
function
(){
y
(),
w
()}),
a
(
document
).
on
(
e
.
START_CARTRIDGE_REGISTRATION
,
function
(
a
,
b
){
u
(
b
)}),
a
(
document
).
on
(
e
.
STOP_CARTRIDGE_REGISTRATION
,
function
(){
n
().
find
(
j
.
CARTRIDGE_REGISTRATION_FORM
).
removeAttr
(
"
data-cartridge-url
"
),
w
()}),
a
(
document
).
on
(
e
.
REGISTRATION_FEEDBACK
,
function
(
a
,
b
){
z
(
b
)});
var
b
=
a
(
j
.
ADD_TOOL_FORM
);
b
.
submit
(
function
(
a
){
a
.
preventDefault
(),
D
()})};
return
{
init
:
function
(){
E
(),
C
()}}});
\ No newline at end of file
.old/mod/lti/amd/build/tool_proxy.min.js
0 → 100755
View file @
9e4edd46
define
([
"
core/ajax
"
,
"
core/notification
"
],
function
(
a
,
b
){
return
{
query
:
function
(
c
){
var
d
=
{
methodname
:
"
mod_lti_get_tool_proxies
"
,
args
:
c
||
{}},
e
=
a
.
call
([
d
])[
0
];
return
e
.
fail
(
b
.
exception
),
e
},
"
delete
"
:
function
(
c
){
var
d
=
{
methodname
:
"
mod_lti_delete_tool_proxy
"
,
args
:{
id
:
c
}},
e
=
a
.
call
([
d
])[
0
];
return
e
.
fail
(
b
.
exception
),
e
},
create
:
function
(
b
){
var
c
=
{
methodname
:
"
mod_lti_create_tool_proxy
"
,
args
:
b
},
d
=
a
.
call
([
c
])[
0
];
return
d
}}});
\ No newline at end of file
.old/mod/lti/amd/build/tool_proxy_card_controller.min.js
0 → 100755
View file @
9e4edd46
define
([
"
jquery
"
,
"
core/ajax
"
,
"
core/notification
"
,
"
core/templates
"
,
"
mod_lti/tool_proxy
"
,
"
mod_lti/events
"
,
"
mod_lti/keys
"
,
"
core/str
"
],
function
(
a
,
b
,
c
,
d
,
e
,
f
,
g
,
h
){
var
i
=
{
DELETE_BUTTON
:
"
.delete
"
,
CAPABILITIES_CONTAINER
:
"
.capabilities-container
"
,
ACTIVATE_BUTTON
:
"
.tool-card-footer a.activate
"
},
j
=
2
e3
,
k
=
function
(
a
){
return
a
.
find
(
i
.
DELETE_BUTTON
)},
l
=
function
(
a
){
return
a
.
find
(
i
.
ACTIVATE_BUTTON
)},
m
=
function
(
a
){
return
a
.
attr
(
"
data-proxy-id
"
)},
n
=
function
(
a
){
a
.
removeClass
(
"
announcement loading success fail capabilities
"
)},
o
=
function
(
a
){
n
(
a
),
a
.
addClass
(
"
announcement loading
"
)},
p
=
function
(
a
){
a
.
removeClass
(
"
announcement loading
"
)},
q
=
function
(
b
){
var
c
=
a
.
Deferred
();
return
n
(
b
),
b
.
addClass
(
"
announcement success
"
),
setTimeout
(
function
(){
b
.
removeClass
(
"
announcement success
"
),
c
.
resolve
()},
j
),
c
},
r
=
function
(
b
){
var
c
=
a
.
Deferred
();
return
n
(
b
),
b
.
addClass
(
"
announcement fail
"
),
setTimeout
(
function
(){
b
.
removeClass
(
"
announcement fail
"
),
c
.
resolve
()},
j
),
c
},
s
=
function
(
b
){
var
d
=
a
.
Deferred
(),
f
=
m
(
b
);
return
o
(
b
),
""
===
f
?
a
.
Deferred
().
resolve
():(
h
.
get_strings
([{
key
:
"
delete
"
,
component
:
"
mod_lti
"
},{
key
:
"
delete_confirmation
"
,
component
:
"
mod_lti
"
},{
key
:
"
delete
"
,
component
:
"
mod_lti
"
},{
key
:
"
cancel
"
,
component
:
"
core
"
}]).
done
(
function
(
a
){
c
.
confirm
(
a
[
0
],
a
[
1
],
a
[
2
],
a
[
3
],
function
(){
e
[
"
delete
"
](
f
).
done
(
function
(){
p
(
b
),
q
(
b
).
done
(
function
(){
b
.
remove
(),
d
.
resolve
()}).
fail
(
c
.
exception
)}).
fail
(
function
(
a
){
r
(
b
),
d
.
reject
(
a
)})},
function
(){
p
(
b
),
d
.
resolve
()})}).
fail
(
function
(
a
){
p
(
b
),
c
.
exception
(
a
),
d
.
reject
(
a
)}),
d
)},
t
=
function
(
b
){
var
c
=
{
proxyid
:
m
(
b
)};
a
(
document
).
trigger
(
f
.
START_EXTERNAL_REGISTRATION
,
c
)},
u
=
function
(
a
){
var
b
=
k
(
a
);
b
.
click
(
function
(
b
){
b
.
preventDefault
(),
s
(
a
)}),
b
.
keypress
(
function
(
a
){
a
.
metaKey
||
a
.
shiftKey
||
a
.
altKey
||
a
.
ctrlKey
||
(
a
.
keyCode
==
g
.
ENTER
||
a
.
keyCode
==
g
.
SPACE
)
&&
(
a
.
preventDefault
(),
b
.
click
())});
var
c
=
l
(
a
);
c
.
click
(
function
(
b
){
b
.
preventDefault
(),
t
(
a
)}),
c
.
keypress
(
function
(
a
){
a
.
metaKey
||
a
.
shiftKey
||
a
.
altKey
||
a
.
ctrlKey
||
(
a
.
keyCode
==
g
.
ENTER
||
a
.
keyCode
==
g
.
SPACE
)
&&
(
a
.
preventDefault
(),
c
.
click
())})};
return
{
init
:
function
(
a
){
u
(
a
)}}});
\ No newline at end of file
.old/mod/lti/amd/build/tool_type.min.js
0 → 100755
View file @
9e4edd46
define
([
"
core/ajax
"
,
"
core/notification
"
],
function
(
a
,
b
){
return
{
query
:
function
(
c
){
var
d
=
{
methodname
:
"
mod_lti_get_tool_types
"
,
args
:
c
||
{}},
e
=
a
.
call
([
d
])[
0
];
return
e
.
fail
(
b
.
exception
),
e
},
create
:
function
(
b
){
var
c
=
{
methodname
:
"
mod_lti_create_tool_type
"
,
args
:
b
},
d
=
a
.
call
([
c
])[
0
];
return
d
},
update
:
function
(
c
){
var
d
=
{
methodname
:
"
mod_lti_update_tool_type
"
,
args
:
c
},
e
=
a
.
call
([
d
])[
0
];
return
e
.
fail
(
b
.
exception
),
e
},
"
delete
"
:
function
(
c
){
var
d
=
{
methodname
:
"
mod_lti_delete_tool_type
"
,
args
:{
id
:
c
}},
e
=
a
.
call
([
d
])[
0
];
return
e
.
fail
(
b
.
exception
),
e
},
getFromToolProxyId
:
function
(
a
){
return
this
.
query
({
toolproxyid
:
a
})},
isCartridge
:
function
(
b
){
var
c
=
{
methodname
:
"
mod_lti_is_cartridge
"
,
args
:{
url
:
b
}},
d
=
a
.
call
([
c
])[
0
];
return
d
},
constants
:{
state
:{
configured
:
1
,
pending
:
2
,
rejected
:
3
}}}});
\ No newline at end of file
.old/mod/quiz/amd/build/preflightcheck.min.js
0 → 100755
View file @
9e4edd46
define
([
"
jquery
"
,
"
core/yui
"
],
function
(
a
,
b
){
var
c
=
{
confirmDialogue
:
null
,
init
:
function
(
a
,
d
,
e
,
f
){
var
g
=
a
;
b
.
use
(
"
moodle-core-notification
"
,
"
moodle-core-formchangechecker
"
,
"
io-form
"
,
function
(){
b
.
one
(
e
)
&&
(
c
.
confirmDialogue
=
new
M
.
core
.
dialogue
({
headerContent
:
d
,
bodyContent
:
b
.
one
(
e
),
draggable
:
!
0
,
visible
:
!
1
,
center
:
!
0
,
modal
:
!
0
,
width
:
null
,
extraClasses
:[
"
mod_quiz_preflight_popup
"
]}),
b
.
one
(
a
).
on
(
"
click
"
,
c
.
displayDialogue
),
b
.
one
(
"
#id_cancel
"
).
on
(
"
click
"
,
c
.
hideDialogue
),
g
=
c
.
confirmDialogue
.
get
(
"
boundingBox
"
).
one
(
'
[name="submitbutton"]
'
)),
f
&&
b
.
one
(
g
).
on
(
"
click
"
,
c
.
launchQuizPopup
,
c
,
f
)})},
displayDialogue
:
function
(
a
){
a
&&
a
.
halt
(),
c
.
confirmDialogue
.
show
()},
hideDialogue
:
function
(
a
){
a
&&
a
.
halt
(),
c
.
confirmDialogue
.
hide
(
a
)},
launchQuizPopup
:
function
(
a
,
c
){
a
.
halt
(),
M
.
core_formchangechecker
.
reset_form_dirty_state
();
var
d
=
a
.
target
.
ancestor
(
"
form
"
);
window
.
openpopup
(
a
,{
url
:
d
.
get
(
"
action
"
)
+
"
?
"
+
b
.
IO
.
stringify
(
d
).
replace
(
/
\b
cancel=/
,
"
x=
"
),
windowname
:
"
quizpopup
"
,
options
:
c
,
fullscreen
:
!
0
})}};
return
c
});
\ No newline at end of file
.old/report/competency/amd/build/grading_popup.min.js
0 → 100755
View file @
9e4edd46
define
([
"
jquery
"
,
"
core/notification
"
,
"
core/str
"
,
"
core/ajax
"
,
"
core/log
"
,
"
core/templates
"
,
"
tool_lp/dialogue
"
],
function
(
a
,
b
,
c
,
d
,
e
,
f
,
g
){
var
h
=
function
(
b
,
c
){
this
.
_regionSelector
=
b
,
this
.
_userCompetencySelector
=
c
,
a
(
this
.
_regionSelector
).
on
(
"
click
"
,
this
.
_userCompetencySelector
,
this
.
_handleClick
.
bind
(
this
))};
return
h
.
prototype
.
_handleClick
=
function
(
c
){
var
f
=
a
(
c
.
target
).
closest
(
this
.
_userCompetencySelector
),
g
=
a
(
f
).
data
(
"
competencyid
"
),
h
=
a
(
f
).
data
(
"
courseid
"
),
i
=
a
(
f
).
data
(
"
userid
"
);
e
.
debug
(
"
Clicked on cell: competencyId=
"
+
g
+
"
, courseId=
"
+
h
+
"
, userId=
"
+
i
);
var
j
=
d
.
call
([{
methodname
:
"
tool_lp_data_for_user_competency_summary_in_course
"
,
args
:{
userid
:
i
,
competencyid
:
g
,
courseid
:
h
},
done
:
this
.
_contextLoaded
.
bind
(
this
),
fail
:
b
.
exception
}]);
j
[
0
].
then
(
function
(){
d
.
call
([{
methodname
:
"
core_competency_user_competency_viewed_in_course
"
,
args
:{
userid
:
i
,
competencyid
:
g
,
courseid
:
h
},
fail
:
b
.
exception
}])})},
h
.
prototype
.
_contextLoaded
=
function
(
a
){
var
d
=
this
;
a
.
displayuser
=!
0
,
f
.
render
(
"
tool_lp/user_competency_summary_in_course
"
,
a
).
done
(
function
(
a
,
e
){
c
.
get_string
(
"
usercompetencysummary
"
,
"
report_competency
"
).
done
(
function
(
b
){
new
g
(
b
,
a
,
f
.
runTemplateJS
.
bind
(
f
,
e
),
d
.
_refresh
.
bind
(
d
),
!
0
)}).
fail
(
b
.
exception
)}).
fail
(
b
.
exception
)},
h
.
prototype
.
_refresh
=
function
(){
var
c
=
a
(
this
.
_regionSelector
),
e
=
c
.
data
(
"
courseid
"
),
f
=
c
.
data
(
"
userid
"
);
d
.
call
([{
methodname
:
"
report_competency_data_for_report
"
,
args
:{
courseid
:
e
,
userid
:
f
},
done
:
this
.
_pageContextLoaded
.
bind
(
this
),
fail
:
b
.
exception
}])},
h
.
prototype
.
_pageContextLoaded
=
function
(
a
){
var
c
=
this
;
f
.
render
(
"
report_competency/report
"
,
a
).
done
(
function
(
a
,
b
){
f
.
replaceNode
(
c
.
_regionSelector
,
a
,
b
)}).
fail
(
b
.
exception
)},
h
.
prototype
.
_regionSelector
=
null
,
h
.
prototype
.
_userCompetencySelector
=
null
,
h
});
\ No newline at end of file
.old/report/competency/amd/build/user_course_navigation.min.js
0 → 100755
View file @
9e4edd46
define
([
"
jquery
"
],
function
(
a
){
var
b
=
function
(
b
,
c
,
d
,
e
){
this
.
_baseUrl
=
c
,
this
.
_userId
=
d
+
""
,
this
.
_courseId
=
e
,
a
(
b
).
on
(
"
change
"
,
this
.
_userChanged
.
bind
(
this
))};
return
b
.
prototype
.
_userChanged
=
function
(
b
){
var
c
=
a
(
b
.
target
).
val
(),
d
=
"
?user=
"
+
c
+
"
&id=
"
+
this
.
_courseId
;
document
.
location
=
this
.
_baseUrl
+
d
},
b
.
prototype
.
_userId
=
null
,
b
.
prototype
.
_courseId
=
null
,
b
.
prototype
.
_baseUrl
=
null
,
b
});
\ No newline at end of file
.old/theme/bootstrapbase/amd/build/bootstrap.min.js
0 → 100755
View file @
9e4edd46
define
([
"
jquery
"
],
function
(
a
){
function
b
(
b
){
a
(
"
.dropdown-backdrop
"
).
remove
(),
a
(
k
).
each
(
function
(){
var
d
=
c
(
a
(
this
));(
void
0
==
b
||
0
==
d
.
find
(
b
).
length
)
&&
d
.
removeClass
(
"
open
"
)})}
function
c
(
b
){
var
c
,
d
=
b
.
attr
(
"
data-target
"
);
return
d
||
(
d
=
b
.
attr
(
"
href
"
),
d
=
d
&&
/#/
.
test
(
d
)
&&
d
.
replace
(
/.*
(?=
#
[^\s]
*$
)
/
,
""
)),
c
=
d
&&
a
(
d
),
c
&&
c
.
length
||
(
c
=
b
.
parent
()),
c
}
function
d
(
b
,
c
){
var
d
,
e
=
a
.
proxy
(
this
.
process
,
this
),
f
=
a
(
a
(
b
).
is
(
"
body
"
)?
window
:
b
);
this
.
options
=
a
.
extend
({},
a
.
fn
.
scrollspy
.
defaults
,
c
),
this
.
$scrollElement
=
f
.
on
(
"
scroll.scroll-spy.data-api
"
,
e
),
this
.
selector
=
(
this
.
options
.
target
||
(
d
=
a
(
b
).
attr
(
"
href
"
))
&&
d
.
replace
(
/.*
(?=
#
[^\s]
+$
)
/
,
""
)
||
""
)
+
"
.nav li > a
"
,
this
.
$body
=
a
(
"
body
"
),
this
.
refresh
(),
this
.
process
()}
a
(
"
.h1
"
).
hide
(),
a
(
function
(){
a
.
support
.
transition
=
function
(){
var
a
=
function
(){
var
a
,
b
=
document
.
createElement
(
"
bootstrap
"
),
c
=
{
WebkitTransition
:
"
webkitTransitionEnd
"
,
MozTransition
:
"
transitionend
"
,
OTransition
:
"
oTransitionEnd otransitionend
"
,
transition
:
"
transitionend
"
};
for
(
a
in
c
)
if
(
void
0
!==
b
.
style
[
a
])
return
c
[
a
]}();
return
a
&&
{
end
:
a
}}()});
var
e
=
'
[data-dismiss="alert"]
'
,
f
=
function
(
b
){
a
(
b
).
on
(
"
click
"
,
e
,
this
.
close
)};
f
.
prototype
.
close
=
function
(
b
){
function
c
(){
d
.
trigger
(
"
closed
"
).
remove
()}
var
d
,
e
=
a
(
this
),
f
=
e
.
attr
(
"
data-target
"
);
f
||
(
f
=
e
.
attr
(
"
href
"
),
f
=
f
&&
f
.
replace
(
/.*
(?=
#
[^\s]
*$
)
/
,
""
)),
d
=
a
(
f
),
b
&&
b
.
preventDefault
(),
d
.
length
||
(
d
=
e
.
hasClass
(
"
alert
"
)?
e
:
e
.
parent
()),
d
.
trigger
(
b
=
a
.
Event
(
"
close
"
)),
b
.
isDefaultPrevented
()
||
(
d
.
removeClass
(
"
in
"
),
a
.
support
.
transition
&&
d
.
hasClass
(
"
fade
"
)?
d
.
on
(
a
.
support
.
transition
.
end
,
c
):
c
())};
var
g
=
a
.
fn
.
alert
;
a
.
fn
.
alert
=
function
(
b
){
return
this
.
each
(
function
(){
var
c
=
a
(
this
),
d
=
c
.
data
(
"
alert
"
);
d
||
c
.
data
(
"
alert
"
,
d
=
new
f
(
this
)),
"
string
"
==
typeof
b
&&
d
[
b
].
call
(
c
)})},
a
.
fn
.
alert
.
Constructor
=
f
,
a
.
fn
.
alert
.
noConflict
=
function
(){
return
a
.
fn
.
alert
=
g
,
this
},
a
(
document
).
on
(
"
click.alert.data-api
"
,
e
,
f
.
prototype
.
close
);
var
h
=
function
(
b
,
c
){
this
.
$element
=
a
(
b
),
this
.
options
=
a
.
extend
({},
a
.
fn
.
button
.
defaults
,
c
)};
h
.
prototype
.
setState
=
function
(
a
){
var
b
=
"
disabled
"
,
c
=
this
.
$element
,
d
=
c
.
data
(),
e
=
c
.
is
(
"
input
"
)?
"
val
"
:
"
html
"
;
a
+=
"
Text
"
,
d
.
resetText
||
c
.
data
(
"
resetText
"
,
c
[
e
]()),
c
[
e
](
d
[
a
]
||
this
.
options
[
a
]),
setTimeout
(
function
(){
"
loadingText
"
==
a
?
c
.
addClass
(
b
).
attr
(
b
,
b
):
c
.
removeClass
(
b
).
removeAttr
(
b
)},
0
)},
h
.
prototype
.
toggle
=
function
(){
var
a
=
this
.
$element
.
closest
(
'
[data-toggle="buttons-radio"]
'
);
a
&&
a
.
find
(
"
.active
"
).
removeClass
(
"
active
"
),
this
.
$element
.
toggleClass
(
"
active
"
)};
var
g
=
a
.
fn
.
button
;
a
.
fn
.
button
=
function
(
b
){
return
this
.
each
(
function
(){
var
c
=
a
(
this
),
d
=
c
.
data
(
"
button
"
),
e
=
"
object
"
==
typeof
b
&&
b
;
d
||
c
.
data
(
"
button
"
,
d
=
new
h
(
this
,
e
)),
"
toggle
"
==
b
?
d
.
toggle
():
b
&&
d
.
setState
(
b
)})},
a
.
fn
.
button
.
defaults
=
{
loadingText
:
"
loading...
"
},
a
.
fn
.
button
.
Constructor
=
h
,
a
.
fn
.
button
.
noConflict
=
function
(){
return
a
.
fn
.
button
=
g
,
this
},
a
(
document
).
on
(
"
click.button.data-api
"
,
"
[data-toggle^=button]
"
,
function
(
b
){
var
c
=
a
(
b
.
target
);
c
.
hasClass
(
"
btn
"
)
||
(
c
=
c
.
closest
(
"
.btn
"
)),
c
.
button
(
"
toggle
"
)});
var
i
=
function
(
b
,
c
){
this
.
$element
=
a
(
b
),
this
.
$indicators
=
this
.
$element
.
find
(
"
.carousel-indicators
"
),
this
.
options
=
c
,
"
hover
"
==
this
.
options
.
pause
&&
this
.
$element
.
on
(
"
mouseenter
"
,
a
.
proxy
(
this
.
pause
,
this
)).
on
(
"
mouseleave
"
,
a
.
proxy
(
this
.
cycle
,
this
))};
i
.
prototype
=
{
cycle
:
function
(
b
){
return
b
||
(
this
.
paused
=!
1
),
this
.
interval
&&
clearInterval
(
this
.
interval
),
this
.
options
.
interval
&&!
this
.
paused
&&
(
this
.
interval
=
setInterval
(
a
.
proxy
(
this
.
next
,
this
),
this
.
options
.
interval
)),
this
},
getActiveIndex
:
function
(){
return
this
.
$active
=
this
.
$element
.
find
(
"
.item.active
"
),
this
.
$items
=
this
.
$active
.
parent
().
children
(),
this
.
$items
.
index
(
this
.
$active
)},
to
:
function
(
b
){
var
c
=
this
.
getActiveIndex
(),
d
=
this
;
if
(
!
(
b
>
this
.
$items
.
length
-
1
||
0
>
b
))
return
this
.
sliding
?
this
.
$element
.
one
(
"
slid
"
,
function
(){
d
.
to
(
b
)}):
c
==
b
?
this
.
pause
().
cycle
():
this
.
slide
(
b
>
c
?
"
next
"
:
"
prev
"
,
a
(
this
.
$items
[
b
]))},
pause
:
function
(
b
){
return
b
||
(
this
.
paused
=!
0
),
this
.
$element
.
find
(
"
.next, .prev
"
).
length
&&
a
.
support
.
transition
.
end
&&
(
this
.
$element
.
trigger
(
a
.
support
.
transition
.
end
),
this
.
cycle
(
!
0
)),
clearInterval
(
this
.
interval
),
this
.
interval
=
null
,
this
},
next
:
function
(){
return
this
.
sliding
?
void
0
:
this
.
slide
(
"
next
"
)},
prev
:
function
(){
return
this
.
sliding
?
void
0
:
this
.
slide
(
"
prev
"
)},
slide
:
function
(
b
,
c
){
var
d
,
e
=
this
.
$element
.
find
(
"
.item.active
"
),
f
=
c
||
e
[
b
](),
g
=
this
.
interval
,
h
=
"
next
"
==
b
?
"
left
"
:
"
right
"
,
i
=
"
next
"
==
b
?
"
first
"
:
"
last
"
,
j
=
this
;
if
(
this
.
sliding
=!
0
,
g
&&
this
.
pause
(),
f
=
f
.
length
?
f
:
this
.
$element
.
find
(
"
.item
"
)[
i
](),
d
=
a
.
Event
(
"
slide
"
,{
relatedTarget
:
f
[
0
],
direction
:
h
}),
!
f
.
hasClass
(
"
active
"
)){
if
(
this
.
$indicators
.
length
&&
(
this
.
$indicators
.
find
(
"
.active
"
).
removeClass
(
"
active
"
),
this
.
$element
.
one
(
"
slid
"
,
function
(){
var
b
=
a
(
j
.
$indicators
.
children
()[
j
.
getActiveIndex
()]);
b
&&
b
.
addClass
(
"
active
"
)})),
a
.
support
.
transition
&&
this
.
$element
.
hasClass
(
"
slide
"
)){
if
(
this
.
$element
.
trigger
(
d
),
d
.
isDefaultPrevented
())
return
;
f
.
addClass
(
b
),
f
[
0
].
offsetWidth
,
e
.
addClass
(
h
),
f
.
addClass
(
h
),
this
.
$element
.
one
(
a
.
support
.
transition
.
end
,
function
(){
f
.
removeClass
([
b
,
h
].
join
(
"
"
)).
addClass
(
"
active
"
),
e
.
removeClass
([
"
active
"
,
h
].
join
(
"
"
)),
j
.
sliding
=!
1
,
setTimeout
(
function
(){
j
.
$element
.
trigger
(
"
slid
"
)},
0
)})}
else
{
if
(
this
.
$element
.
trigger
(
d
),
d
.
isDefaultPrevented
())
return
;
e
.
removeClass
(
"
active
"
),
f
.
addClass
(
"
active
"
),
this
.
sliding
=!
1
,
this
.
$element
.
trigger
(
"
slid
"
)}
return
g
&&
this
.
cycle
(),
this
}}};
var
g
=
a
.
fn
.
carousel
;
a
.
fn
.
carousel
=
function
(
b
){
return
this
.
each
(
function
(){
var
c
=
a
(
this
),
d
=
c
.
data
(
"
carousel
"
),
e
=
a
.
extend
({},
a
.
fn
.
carousel
.
defaults
,
"
object
"
==
typeof
b
&&
b
),
f
=
"
string
"
==
typeof
b
?
b
:
e
.
slide
;
d
||
c
.
data
(
"
carousel
"
,
d
=
new
i
(
this
,
e
)),
"
number
"
==
typeof
b
?
d
.
to
(
b
):
f
?
d
[
f
]():
e
.
interval
&&
d
.
pause
().
cycle
()})},
a
.
fn
.
carousel
.
defaults
=
{
interval
:
5
e3
,
pause
:
"
hover
"
},
a
.
fn
.
carousel
.
Constructor
=
i
,
a
.
fn
.
carousel
.
noConflict
=
function
(){
return
a
.
fn
.
carousel
=
g
,
this
},
a
(
document
).
on
(
"
click.carousel.data-api
"
,
"
[data-slide], [data-slide-to]
"
,
function
(
b
){
var
c
,
d
,
e
=
a
(
this
),
f
=
a
(
e
.
attr
(
"
data-target
"
)
||
(
c
=
e
.
attr
(
"
href
"
))
&&
c
.
replace
(
/.*
(?=
#
[^\s]
+$
)
/
,
""
)),
g
=
a
.
extend
({},
f
.
data
(),
e
.
data
());
f
.
carousel
(
g
),(
d
=
e
.
attr
(
"
data-slide-to
"
))
&&
f
.
data
(
"
carousel
"
).
pause
().
to
(
d
).
cycle
(),
b
.
preventDefault
()});
var
j
=
function
(
b
,
c
){
this
.
$element
=
a
(
b
),
this
.
options
=
a
.
extend
({},
a
.
fn
.
collapse
.
defaults
,
c
),
this
.
options
.
parent
&&
(
this
.
$parent
=
a
(
this
.
options
.
parent
)),
this
.
options
.
toggle
&&
this
.
toggle
()};
j
.
prototype
=
{
constructor
:
j
,
dimension
:
function
(){
var
a
=
this
.
$element
.
hasClass
(
"
width
"
);
return
a
?
"
width
"
:
"
height
"
},
show
:
function
(){
var
b
,
c
,
d
,
e
;
if
(
!
this
.
transitioning
&&!
this
.
$element
.
hasClass
(
"
in
"
)){
if
(
b
=
this
.
dimension
(),
c
=
a
.
camelCase
([
"
scroll
"
,
b
].
join
(
"
-
"
)),
d
=
this
.
$parent
&&
this
.
$parent
.
find
(
"
> .accordion-group > .in
"
),
d
&&
d
.
length
){
if
(
e
=
d
.
data
(
"
collapse
"
),
e
&&
e
.
transitioning
)
return
;
d
.
collapse
(
"
hide
"
),
e
||
d
.
data
(
"
collapse
"
,
null
)}
this
.
$element
[
b
](
0
),
this
.
transition
(
"
addClass
"
,
a
.
Event
(
"
show
"
),
"
shown
"
),
a
.
support
.
transition
&&
this
.
$element
[
b
](
this
.
$element
[
0
][
c
])}},
hide
:
function
(){
var
b
;
!
this
.
transitioning
&&
this
.
$element
.
hasClass
(
"
in
"
)
&&
(
b
=
this
.
dimension
(),
this
.
reset
(
this
.
$element
[
b
]()),
this
.
transition
(
"
removeClass
"
,
a
.
Event
(
"
hide
"
),
"
hidden
"
),
this
.
$element
[
b
](
0
))},
reset
:
function
(
a
){
var
b
=
this
.
dimension
();
return
this
.
$element
.
removeClass
(
"
collapse
"
)[
b
](
a
||
"
auto
"
)[
0
].
offsetWidth
,
this
.
$element
[
null
!==
a
?
"
addClass
"
:
"
removeClass
"
](
"
collapse
"
),
this
},
transition
:
function
(
b
,
c
,
d
){
var
e
=
this
,
f
=
function
(){
"
show
"
==
c
.
type
&&
e
.
reset
(),
e
.
transitioning
=
0
,
e
.
$element
.
trigger
(
d
)};
this
.
$element
.
trigger
(
c
),
c
.
isDefaultPrevented
()
||
(
this
.
transitioning
=
1
,
this
.
$element
[
b
](
"
in
"
),
a
.
support
.
transition
&&
this
.
$element
.
hasClass
(
"
collapse
"
)?
this
.
$element
.
one
(
a
.
support
.
transition
.
end
,
f
):
f
())},
toggle
:
function
(){
this
[
this
.
$element
.
hasClass
(
"
in
"
)?
"
hide
"
:
"
show
"
]()}};
var
g
=
a
.
fn
.
collapse
;
a
.
fn
.
collapse
=
function
(
b
){
return
this
.
each
(
function
(){
var
c
=
a
(
this
),
d
=
c
.
data
(
"
collapse
"
),
e
=
a
.
extend
({},
a
.
fn
.
collapse
.
defaults
,
c
.
data
(),
"
object
"
==
typeof
b
&&
b
);
d
||
c
.
data
(
"
collapse
"
,
d
=
new
j
(
this
,
e
)),
"
string
"
==
typeof
b
&&
d
[
b
]()})},
a
.
fn
.
collapse
.
defaults
=
{
toggle
:
!
0
},
a
.
fn
.
collapse
.
Constructor
=
j
,
a
.
fn
.
collapse
.
noConflict
=
function
(){
return
a
.
fn
.
collapse
=
g
,
this
},
a
(
document
).
on
(
"
click.collapse.data-api
"
,
"
[data-toggle=collapse]
"
,
function
(
b
){
var
c
,
d
=
a
(
this
),
e
=
d
.
attr
(
"
data-target
"
)
||
b
.
preventDefault
()
||
(
c
=
d
.
attr
(
"
href
"
))
&&
c
.
replace
(
/.*
(?=
#
[^\s]
+$
)
/
,
""
),
f
=
a
(
e
).
data
(
"
collapse
"
)?
"
toggle
"
:
d
.
data
();
d
[
a
(
e
).
hasClass
(
"
in
"
)?
"
addClass
"
:
"
removeClass
"
](
"
collapsed
"
),
a
(
e
).
collapse
(
f
)});
var
k
=
"
[data-toggle=dropdown]
"
,
l
=
function
(
b
){
var
c
=
a
(
b
).
on
(
"
click.dropdown.data-api
"
,
this
.
toggle
);
a
(
"
html
"
).
on
(
"
click.dropdown.data-api
"
,
function
(){
c
.
parent
().
removeClass
(
"
open
"
)})};
l
.
prototype
=
{
constructor
:
l
,
toggle
:
function
(
d
){
var
e
,
f
,
g
=
a
(
this
);
if
(
!
g
.
is
(
"
.disabled, :disabled
"
))
return
e
=
c
(
g
),
f
=
e
.
hasClass
(
"
open
"
),
b
(
g
),
f
||
"
ontouchstart
"
in
document
.
documentElement
&&
a
(
'
<div class="dropdown-backdrop"/>
'
).
insertBefore
(
a
(
this
)).
on
(
"
click
"
,
b
),
e
.
toggleClass
(
"
open
"
),
g
.
focus
(),
!
1
},
keydown
:
function
(
b
){
var
d
,
e
,
f
,
g
,
h
;
if
(
/
(
38|40|27
)
/
.
test
(
b
.
keyCode
)
&&
(
d
=
a
(
this
),
b
.
preventDefault
(),
b
.
stopPropagation
(),
!
d
.
is
(
"
.disabled, :disabled
"
))){
if
(
f
=
c
(
d
),
g
=
f
.
hasClass
(
"
open
"
),
!
g
||
g
&&
27
==
b
.
keyCode
)
return
27
==
b
.
which
&&
f
.
find
(
k
).
focus
(),
d
.
click
();
e
=
a
(
"
[role=menu] li:not(.divider):visible a
"
,
f
),
e
.
length
&&
(
h
=
e
.
index
(
e
.
filter
(
"
:focus
"
)),
38
==
b
.
keyCode
&&
h
>
0
&&
h
--
,
40
==
b
.
keyCode
&&
h
<
e
.
length
-
1
&&
h
++
,
~
h
||
(
h
=
0
),
e
.
eq
(
h
).
focus
())}}};
var
g
=
a
.
fn
.
dropdown
;
a
.
fn
.
dropdown
=
function
(
b
){
return
this
.
each
(
function
(){
var
c
=
a
(
this
),
d
=
c
.
data
(
"
dropdown
"
);
d
||
c
.
data
(
"
dropdown
"
,
d
=
new
l
(
this
)),
"
string
"
==
typeof
b
&&
d
[
b
].
call
(
c
)})},
a
.
fn
.
dropdown
.
Constructor
=
l
,
a
.
fn
.
dropdown
.
noConflict
=
function
(){
return
a
.
fn
.
dropdown
=
g
,
this
},
a
(
document
).
on
(
"
click.dropdown.data-api
"
,
b
).
on
(
"
click.dropdown.data-api
"
,
"
.dropdown form
"
,
function
(
a
){
a
.
stopPropagation
()}).
on
(
"
click.dropdown.data-api
"
,
k
,
l
.
prototype
.
toggle
).
on
(
"
keydown.dropdown.data-api
"
,
k
+
"
, [role=menu]
"
,
l
.
prototype
.
keydown
);
var
m
=
function
(
b
,
c
){
this
.
options
=
c
,
this
.
$element
=
a
(
b
).
delegate
(
'
[data-dismiss="modal"]
'
,
"
click.dismiss.modal
"
,
a
.
proxy
(
this
.
hide
,
this
)),
this
.
options
.
remote
&&
this
.
$element
.
find
(
"
.modal-body
"
).
load
(
this
.
options
.
remote
)};
m
.
prototype
=
{
constructor
:
m
,
toggle
:
function
(){
return
this
[
this
.
isShown
?
"
hide
"
:
"
show
"
]()},
show
:
function
(){
var
b
=
this
,
c
=
a
.
Event
(
"
show
"
);
this
.
$element
.
trigger
(
c
),
this
.
isShown
||
c
.
isDefaultPrevented
()
||
(
this
.
isShown
=!
0
,
this
.
escape
(),
this
.
backdrop
(
function
(){
var
c
=
a
.
support
.
transition
&&
b
.
$element
.
hasClass
(
"
fade
"
);
b
.
$element
.
parent
().
length
||
b
.
$element
.
appendTo
(
document
.
body
),
b
.
$element
.
show
(),
c
&&
b
.
$element
[
0
].
offsetWidth
,
b
.
$element
.
addClass
(
"
in
"
).
attr
(
"
aria-hidden
"
,
!
1
),
b
.
enforceFocus
(),
c
?
b
.
$element
.
one
(
a
.
support
.
transition
.
end
,
function
(){
b
.
$element
.
focus
().
trigger
(
"
shown
"
)}):
b
.
$element
.
focus
().
trigger
(
"
shown
"
)}))},
hide
:
function
(
b
){
b
&&
b
.
preventDefault
();
b
=
a
.
Event
(
"
hide
"
),
this
.
$element
.
trigger
(
b
),
this
.
isShown
&&!
b
.
isDefaultPrevented
()
&&
(
this
.
isShown
=!
1
,
this
.
escape
(),
a
(
document
).
off
(
"
focusin.modal
"
),
this
.
$element
.
removeClass
(
"
in
"
).
attr
(
"
aria-hidden
"
,
!
0
),
a
.
support
.
transition
&&
this
.
$element
.
hasClass
(
"
fade
"
)?
this
.
hideWithTransition
():
this
.
hideModal
())},
enforceFocus
:
function
(){
var
b
=
this
;
a
(
document
).
on
(
"
focusin.modal
"
,
function
(
a
){
b
.
$element
[
0
]
===
a
.
target
||
b
.
$element
.
has
(
a
.
target
).
length
||
b
.
$element
.
focus
()})},
escape
:
function
(){
var
a
=
this
;
this
.
isShown
&&
this
.
options
.
keyboard
?
this
.
$element
.
on
(
"
keyup.dismiss.modal
"
,
function
(
b
){
27
==
b
.
which
&&
a
.
hide
()}):
this
.
isShown
||
this
.
$element
.
off
(
"
keyup.dismiss.modal
"
)},
hideWithTransition
:
function
(){
var
b
=
this
,
c
=
setTimeout
(
function
(){
b
.
$element
.
off
(
a
.
support
.
transition
.
end
),
b
.
hideModal
()},
500
);
this
.
$element
.
one
(
a
.
support
.
transition
.
end
,
function
(){
clearTimeout
(
c
),
b
.
hideModal
()})},
hideModal
:
function
(){
var
a
=
this
;
this
.
$element
.
hide
(),
this
.
backdrop
(
function
(){
a
.
removeBackdrop
(),
a
.
$element
.
trigger
(
"
hidden
"
)})},
removeBackdrop
:
function
(){
this
.
$backdrop
&&
this
.
$backdrop
.
remove
(),
this
.
$backdrop
=
null
},
backdrop
:
function
(
b
){
var
c
=
this
.
$element
.
hasClass
(
"
fade
"
)?
"
fade
"
:
""
;
if
(
this
.
isShown
&&
this
.
options
.
backdrop
){
var
d
=
a
.
support
.
transition
&&
c
;
if
(
this
.
$backdrop
=
a
(
'
<div class="modal-backdrop
'
+
c
+
'
" />
'
).
appendTo
(
document
.
body
),
this
.
$backdrop
.
click
(
"
static
"
==
this
.
options
.
backdrop
?
a
.
proxy
(
this
.
$element
[
0
].
focus
,
this
.
$element
[
0
]):
a
.
proxy
(
this
.
hide
,
this
)),
d
&&
this
.
$backdrop
[
0
].
offsetWidth
,
this
.
$backdrop
.
addClass
(
"
in
"
),
!
b
)
return
;
d
?
this
.
$backdrop
.
one
(
a
.
support
.
transition
.
end
,
b
):
b
()}
else
!
this
.
isShown
&&
this
.
$backdrop
?(
this
.
$backdrop
.
removeClass
(
"
in
"
),
a
.
support
.
transition
&&
this
.
$element
.
hasClass
(
"
fade
"
)?
this
.
$backdrop
.
one
(
a
.
support
.
transition
.
end
,
b
):
b
()):
b
&&
b
()}};
var
g
=
a
.
fn
.
modal
;
a
.
fn
.
modal
=
function
(
b
){
return
this
.
each
(
function
(){
var
c
=
a
(
this
),
d
=
c
.
data
(
"
modal
"
),
e
=
a
.
extend
({},
a
.
fn
.
modal
.
defaults
,
c
.
data
(),
"
object
"
==
typeof
b
&&
b
);
d
||
c
.
data
(
"
modal
"
,
d
=
new
m
(
this
,
e
)),
"
string
"
==
typeof
b
?
d
[
b
]():
e
.
show
&&
d
.
show
()})},
a
.
fn
.
modal
.
defaults
=
{
backdrop
:
!
0
,
keyboard
:
!
0
,
show
:
!
0
},
a
.
fn
.
modal
.
Constructor
=
m
,
a
.
fn
.
modal
.
noConflict
=
function
(){
return
a
.
fn
.
modal
=
g
,
this
},
a
(
document
).
on
(
"
click.modal.data-api
"
,
'
[data-toggle="modal"]
'
,
function
(
b
){
var
c
=
a
(
this
),
d
=
c
.
attr
(
"
href
"
),
e
=
a
(
c
.
attr
(
"
data-target
"
)
||
d
&&
d
.
replace
(
/.*
(?=
#
[^\s]
+$
)
/
,
""
)),
f
=
e
.
data
(
"
modal
"
)?
"
toggle
"
:
a
.
extend
({
remote
:
!
/#/
.
test
(
d
)
&&
d
},
e
.
data
(),
c
.
data
());
b
.
preventDefault
(),
e
.
modal
(
f
).
one
(
"
hide
"
,
function
(){
c
.
focus
()})});
var
n
=
function
(
a
,
b
){
this
.
init
(
"
tooltip
"
,
a
,
b
)};
n
.
prototype
=
{
constructor
:
n
,
init
:
function
(
b
,
c
,
d
){
var
e
,
f
,
g
,
h
,
i
;
for
(
this
.
type
=
b
,
this
.
$element
=
a
(
c
),
this
.
options
=
this
.
getOptions
(
d
),
this
.
enabled
=!
0
,
g
=
this
.
options
.
trigger
.
split
(
"
"
),
i
=
g
.
length
;
i
--
;)
h
=
g
[
i
],
"
click
"
==
h
?
this
.
$element
.
on
(
"
click.
"
+
this
.
type
,
this
.
options
.
selector
,
a
.
proxy
(
this
.
toggle
,
this
)):
"
manual
"
!=
h
&&
(
e
=
"
hover
"
==
h
?
"
mouseenter
"
:
"
focus
"
,
f
=
"
hover
"
==
h
?
"
mouseleave
"
:
"
blur
"
,
this
.
$element
.
on
(
e
+
"
.
"
+
this
.
type
,
this
.
options
.
selector
,
a
.
proxy
(
this
.
enter
,
this
)),
this
.
$element
.
on
(
f
+
"
.
"
+
this
.
type
,
this
.
options
.
selector
,
a
.
proxy
(
this
.
leave
,
this
)));
this
.
options
.
selector
?
this
.
_options
=
a
.
extend
({},
this
.
options
,{
trigger
:
"
manual
"
,
selector
:
""
}):
this
.
fixTitle
()},
getOptions
:
function
(
b
){
return
b
=
a
.
extend
({},
a
.
fn
[
this
.
type
].
defaults
,
this
.
$element
.
data
(),
b
),
b
.
delay
&&
"
number
"
==
typeof
b
.
delay
&&
(
b
.
delay
=
{
show
:
b
.
delay
,
hide
:
b
.
delay
}),
b
},
enter
:
function
(
b
){
var
c
,
d
=
a
.
fn
[
this
.
type
].
defaults
,
e
=
{};
return
this
.
_options
&&
a
.
each
(
this
.
_options
,
function
(
a
,
b
){
d
[
a
]
!=
b
&&
(
e
[
a
]
=
b
)},
this
),
c
=
a
(
b
.
currentTarget
)[
this
.
type
](
e
).
data
(
this
.
type
),
c
.
options
.
delay
&&
c
.
options
.
delay
.
show
?(
clearTimeout
(
this
.
timeout
),
c
.
hoverState
=
"
in
"
,
void
(
this
.
timeout
=
setTimeout
(
function
(){
"
in
"
==
c
.
hoverState
&&
c
.
show
()},
c
.
options
.
delay
.
show
))):
c
.
show
()},
leave
:
function
(
b
){
var
c
=
a
(
b
.
currentTarget
)[
this
.
type
](
this
.
_options
).
data
(
this
.
type
);
return
this
.
timeout
&&
clearTimeout
(
this
.
timeout
),
c
.
options
.
delay
&&
c
.
options
.
delay
.
hide
?(
c
.
hoverState
=
"
out
"
,
void
(
this
.
timeout
=
setTimeout
(
function
(){
"
out
"
==
c
.
hoverState
&&
c
.
hide
()},
c
.
options
.
delay
.
hide
))):
c
.
hide
()},
show
:
function
(){
var
b
,
c
,
d
,
e
,
f
,
g
,
h
=
a
.
Event
(
"
show
"
);
if
(
this
.
hasContent
()
&&
this
.
enabled
){
if
(
this
.
$element
.
trigger
(
h
),
h
.
isDefaultPrevented
())
return
;
switch
(
b
=
this
.
tip
(),
this
.
setContent
(),
this
.
options
.
animation
&&
b
.
addClass
(
"
fade
"
),
f
=
"
function
"
==
typeof
this
.
options
.
placement
?
this
.
options
.
placement
.
call
(
this
,
b
[
0
],
this
.
$element
[
0
]):
this
.
options
.
placement
,
b
.
detach
().
css
({
top
:
0
,
left
:
0
,
display
:
"
block
"
}),
this
.
options
.
container
?
b
.
appendTo
(
this
.
options
.
container
):
b
.
insertAfter
(
this
.
$element
),
c
=
this
.
getPosition
(),
d
=
b
[
0
].
offsetWidth
,
e
=
b
[
0
].
offsetHeight
,
f
){
case
"
bottom
"
:
g
=
{
top
:
c
.
top
+
c
.
height
,
left
:
c
.
left
+
c
.
width
/
2
-
d
/
2
};
break
;
case
"
top
"
:
g
=
{
top
:
c
.
top
-
e
,
left
:
c
.
left
+
c
.
width
/
2
-
d
/
2
};
break
;
case
"
left
"
:
g
=
{
top
:
c
.
top
+
c
.
height
/
2
-
e
/
2
,
left
:
c
.
left
-
d
};
break
;
case
"
right
"
:
g
=
{
top
:
c
.
top
+
c
.
height
/
2
-
e
/
2
,
left
:
c
.
left
+
c
.
width
}}
this
.
applyPlacement
(
g
,
f
),
this
.
$element
.
trigger
(
"
shown
"
)}},
applyPlacement
:
function
(
a
,
b
){
var
c
,
d
,
e
,
f
,
g
=
this
.
tip
(),
h
=
g
[
0
].
offsetWidth
,
i
=
g
[
0
].
offsetHeight
;
g
.
offset
(
a
).
addClass
(
b
).
addClass
(
"
in
"
),
c
=
g
[
0
].
offsetWidth
,
d
=
g
[
0
].
offsetHeight
,
"
top
"
==
b
&&
d
!=
i
&&
(
a
.
top
=
a
.
top
+
i
-
d
,
f
=!
0
),
"
bottom
"
==
b
||
"
top
"
==
b
?(
e
=
0
,
a
.
left
<
0
&&
(
e
=-
2
*
a
.
left
,
a
.
left
=
0
,
g
.
offset
(
a
),
c
=
g
[
0
].
offsetWidth
,
d
=
g
[
0
].
offsetHeight
),
this
.
replaceArrow
(
e
-
h
+
c
,
c
,
"
left
"
)):
this
.
replaceArrow
(
d
-
i
,
d
,
"
top
"
),
f
&&
g
.
offset
(
a
)},
replaceArrow
:
function
(
a
,
b
,
c
){
this
.
arrow
().
css
(
c
,
a
?
50
*
(
1
-
a
/
b
)
+
"
%
"
:
""
)},
setContent
:
function
(){
var
a
=
this
.
tip
(),
b
=
this
.
getTitle
();
a
.
find
(
"
.tooltip-inner
"
)[
this
.
options
.
html
?
"
html
"
:
"
text
"
](
b
),
a
.
removeClass
(
"
fade in top bottom left right
"
)},
hide
:
function
(){
function
b
(){
var
b
=
setTimeout
(
function
(){
c
.
off
(
a
.
support
.
transition
.
end
).
detach
()},
500
);
c
.
one
(
a
.
support
.
transition
.
end
,
function
(){
clearTimeout
(
b
),
c
.
detach
()})}
var
c
=
this
.
tip
(),
d
=
a
.
Event
(
"
hide
"
);
return
this
.
$element
.
trigger
(
d
),
d
.
isDefaultPrevented
()?
void
0
:(
c
.
removeClass
(
"
in
"
),
a
.
support
.
transition
&&
this
.
$tip
.
hasClass
(
"
fade
"
)?
b
():
c
.
detach
(),
this
.
$element
.
trigger
(
"
hidden
"
),
this
)},
fixTitle
:
function
(){
var
a
=
this
.
$element
;(
a
.
attr
(
"
title
"
)
||
"
string
"
!=
typeof
a
.
attr
(
"
data-original-title
"
))
&&
a
.
attr
(
"
data-original-title
"
,
a
.
attr
(
"
title
"
)
||
""
).
attr
(
"
title
"
,
""
)},
hasContent
:
function
(){
return
this
.
getTitle
()},
getPosition
:
function
(){
var
b
=
this
.
$element
[
0
];
return
a
.
extend
({},
"
function
"
==
typeof
b
.
getBoundingClientRect
?
b
.
getBoundingClientRect
():{
width
:
b
.
offsetWidth
,
height
:
b
.
offsetHeight
},
this
.
$element
.
offset
())},
getTitle
:
function
(){
var
a
,
b
=
this
.
$element
,
c
=
this
.
options
;
return
a
=
b
.
attr
(
"
data-original-title
"
)
||
(
"
function
"
==
typeof
c
.
title
?
c
.
title
.
call
(
b
[
0
]):
c
.
title
)},
tip
:
function
(){
return
this
.
$tip
=
this
.
$tip
||
a
(
this
.
options
.
template
)},
arrow
:
function
(){
return
this
.
$arrow
=
this
.
$arrow
||
this
.
tip
().
find
(
"
.tooltip-arrow
"
)},
validate
:
function
(){
this
.
$element
[
0
].
parentNode
||
(
this
.
hide
(),
this
.
$element
=
null
,
this
.
options
=
null
)},
enable
:
function
(){
this
.
enabled
=!
0
},
disable
:
function
(){
this
.
enabled
=!
1
},
toggleEnabled
:
function
(){
this
.
enabled
=!
this
.
enabled
},
toggle
:
function
(
b
){
var
c
=
b
?
a
(
b
.
currentTarget
)[
this
.
type
](
this
.
_options
).
data
(
this
.
type
):
this
;
c
.
tip
().
hasClass
(
"
in
"
)?
c
.
hide
():
c
.
show
()},
destroy
:
function
(){
this
.
hide
().
$element
.
off
(
"
.
"
+
this
.
type
).
removeData
(
this
.
type
)}};
var
g
=
a
.
fn
.
tooltip
;
a
.
fn
.
tooltip
=
function
(
b
){
return
this
.
each
(
function
(){
var
c
=
a
(
this
),
d
=
c
.
data
(
"
tooltip
"
),
e
=
"
object
"
==
typeof
b
&&
b
;
d
||
c
.
data
(
"
tooltip
"
,
d
=
new
n
(
this
,
e
)),
"
string
"
==
typeof
b
&&
d
[
b
]()})},
a
.
fn
.
tooltip
.
Constructor
=
n
,
a
.
fn
.
tooltip
.
defaults
=
{
animation
:
!
0
,
placement
:
"
top
"
,
selector
:
!
1
,
template
:
'
<div class="tooltip"><div class="tooltip-arrow"></div><div class="tooltip-inner"></div></div>
'
,
trigger
:
"
hover focus
"
,
title
:
""
,
delay
:
0
,
html
:
!
1
,
container
:
!
1
},
a
.
fn
.
tooltip
.
noConflict
=
function
(){
return
a
.
fn
.
tooltip
=
g
,
this
};
var
o
=
function
(
a
,
b
){
this
.
init
(
"
popover
"
,
a
,
b
)};
o
.
prototype
=
a
.
extend
({},
a
.
fn
.
tooltip
.
Constructor
.
prototype
,{
constructor
:
o
,
setContent
:
function
(){
var
a
=
this
.
tip
(),
b
=
this
.
getTitle
(),
c
=
this
.
getContent
();
a
.
find
(
"
.popover-title
"
)[
this
.
options
.
html
?
"
html
"
:
"
text
"
](
b
),
a
.
find
(
"
.popover-content
"
)[
this
.
options
.
html
?
"
html
"
:
"
text
"
](
c
),
a
.
removeClass
(
"
fade top bottom left right in
"
)},
hasContent
:
function
(){
return
this
.
getTitle
()
||
this
.
getContent
()},
getContent
:
function
(){
var
a
,
b
=
this
.
$element
,
c
=
this
.
options
;
return
a
=
(
"
function
"
==
typeof
c
.
content
?
c
.
content
.
call
(
b
[
0
]):
c
.
content
)
||
b
.
attr
(
"
data-content
"
)},
tip
:
function
(){
return
this
.
$tip
||
(
this
.
$tip
=
a
(
this
.
options
.
template
)),
this
.
$tip
},
destroy
:
function
(){
this
.
hide
().
$element
.
off
(
"
.
"
+
this
.
type
).
removeData
(
this
.
type
)}});
var
g
=
a
.
fn
.
popover
;
a
.
fn
.
popover
=
function
(
b
){
return
this
.
each
(
function
(){
var
c
=
a
(
this
),
d
=
c
.
data
(
"
popover
"
),
e
=
"
object
"
==
typeof
b
&&
b
;
d
||
c
.
data
(
"
popover
"
,
d
=
new
o
(
this
,
e
)),
"
string
"
==
typeof
b
&&
d
[
b
]()})},
a
.
fn
.
popover
.
Constructor
=
o
,
a
.
fn
.
popover
.
defaults
=
a
.
extend
({},
a
.
fn
.
tooltip
.
defaults
,{
placement
:
"
right
"
,
trigger
:
"
click
"
,
content
:
""
,
template
:
'
<div class="popover"><div class="arrow"></div><h3 class="popover-title"></h3><div class="popover-content"></div></div>
'
}),
a
.
fn
.
popover
.
noConflict
=
function
(){
return
a
.
fn
.
popover
=
g
,
this
},
d
.
prototype
=
{
constructor
:
d
,
refresh
:
function
(){
var
b
,
c
=
this
;
this
.
offsets
=
a
([]),
this
.
targets
=
a
([]),
b
=
this
.
$body
.
find
(
this
.
selector
).
map
(
function
(){
var
b
=
a
(
this
),
d
=
b
.
data
(
"
target
"
)
||
b
.
attr
(
"
href
"
),
e
=
/^#
\w
/
.
test
(
d
)
&&
a
(
d
);
return
e
&&
e
.
length
&&
[[
e
.
position
().
top
+
(
!
a
.
isWindow
(
c
.
$scrollElement
.
get
(
0
))
&&
c
.
$scrollElement
.
scrollTop
()),
d
]]
||
null
}).
sort
(
function
(
a
,
b
){
return
a
[
0
]
-
b
[
0
]}).
each
(
function
(){
c
.
offsets
.
push
(
this
[
0
]),
c
.
targets
.
push
(
this
[
1
])})},
process
:
function
(){
var
a
,
b
=
this
.
$scrollElement
.
scrollTop
()
+
this
.
options
.
offset
,
c
=
this
.
$scrollElement
[
0
].
scrollHeight
||
this
.
$body
[
0
].
scrollHeight
,
d
=
c
-
this
.
$scrollElement
.
height
(),
e
=
this
.
offsets
,
f
=
this
.
targets
,
g
=
this
.
activeTarget
;
if
(
b
>=
d
)
return
g
!=
(
a
=
f
.
last
()[
0
])
&&
this
.
activate
(
a
);
for
(
a
=
e
.
length
;
a
--
;)
g
!=
f
[
a
]
&&
b
>=
e
[
a
]
&&
(
!
e
[
a
+
1
]
||
b
<=
e
[
a
+
1
])
&&
this
.
activate
(
f
[
a
])},
activate
:
function
(
b
){
var
c
,
d
;
this
.
activeTarget
=
b
,
a
(
this
.
selector
).
parent
(
"
.active
"
).
removeClass
(
"
active
"
),
d
=
this
.
selector
+
'
[data-target="
'
+
b
+
'
"],
'
+
this
.
selector
+
'
[href="
'
+
b
+
'
"]
'
,
c
=
a
(
d
).
parent
(
"
li
"
).
addClass
(
"
active
"
),
c
.
parent
(
"
.dropdown-menu
"
).
length
&&
(
c
=
c
.
closest
(
"
li.dropdown
"
).
addClass
(
"
active
"
)),
c
.
trigger
(
"
activate
"
)}};
var
g
=
a
.
fn
.
scrollspy
;
a
.
fn
.
scrollspy
=
function
(
b
){
return
this
.
each
(
function
(){
var
c
=
a
(
this
),
e
=
c
.
data
(
"
scrollspy
"
),
f
=
"
object
"
==
typeof
b
&&
b
;
e
||
c
.
data
(
"
scrollspy
"
,
e
=
new
d
(
this
,
f
)),
"
string
"
==
typeof
b
&&
e
[
b
]()})},
a
.
fn
.
scrollspy
.
Constructor
=
d
,
a
.
fn
.
scrollspy
.
defaults
=
{
offset
:
10
},
a
.
fn
.
scrollspy
.
noConflict
=
function
(){
return
a
.
fn
.
scrollspy
=
g
,
this
},
a
(
window
).
on
(
"
load
"
,
function
(){
a
(
'
[data-spy="scroll"]
'
).
each
(
function
(){
var
b
=
a
(
this
);
b
.
scrollspy
(
b
.
data
())})});
var
p
=
function
(
b
){
this
.
element
=
a
(
b
)};
p
.
prototype
=
{
constructor
:
p
,
show
:
function
(){
var
b
,
c
,
d
,
e
=
this
.
element
,
f
=
e
.
closest
(
"
ul:not(.dropdown-menu)
"
),
g
=
e
.
attr
(
"
data-target
"
);
g
||
(
g
=
e
.
attr
(
"
href
"
),
g
=
g
&&
g
.
replace
(
/.*
(?=
#
[^\s]
*$
)
/
,
""
)),
e
.
parent
(
"
li
"
).
hasClass
(
"
active
"
)
||
(
b
=
f
.
find
(
"
.active:last a
"
)[
0
],
d
=
a
.
Event
(
"
show
"
,{
relatedTarget
:
b
}),
e
.
trigger
(
d
),
d
.
isDefaultPrevented
()
||
(
c
=
a
(
g
),
this
.
activate
(
e
.
parent
(
"
li
"
),
f
),
this
.
activate
(
c
,
c
.
parent
(),
function
(){
e
.
trigger
({
type
:
"
shown
"
,
relatedTarget
:
b
})})))},
activate
:
function
(
b
,
c
,
d
){
function
e
(){
f
.
removeClass
(
"
active
"
).
find
(
"
> .dropdown-menu > .active
"
).
removeClass
(
"
active
"
),
b
.
addClass
(
"
active
"
),
g
?(
b
[
0
].
offsetWidth
,
b
.
addClass
(
"
in
"
)):
b
.
removeClass
(
"
fade
"
),
b
.
parent
(
"
.dropdown-menu
"
)
&&
b
.
closest
(
"
li.dropdown
"
).
addClass
(
"
active
"
),
d
&&
d
()}
var
f
=
c
.
find
(
"
> .active
"
),
g
=
d
&&
a
.
support
.
transition
&&
f
.
hasClass
(
"
fade
"
);
g
?
f
.
one
(
a
.
support
.
transition
.
end
,
e
):
e
(),
f
.
removeClass
(
"
in
"
)}};
var
g
=
a
.
fn
.
tab
;
a
.
fn
.
tab
=
function
(
b
){
return
this
.
each
(
function
(){
var
c
=
a
(
this
),
d
=
c
.
data
(
"
tab
"
);
d
||
c
.
data
(
"
tab
"
,
d
=
new
p
(
this
)),
"
string
"
==
typeof
b
&&
d
[
b
]()})},
a
.
fn
.
tab
.
Constructor
=
p
,
a
.
fn
.
tab
.
noConflict
=
function
(){
return
a
.
fn
.
tab
=
g
,
this
},
a
(
document
).
on
(
"
click.tab.data-api
"
,
'
[data-toggle="tab"], [data-toggle="pill"]
'
,
function
(
b
){
b
.
preventDefault
(),
a
(
this
).
tab
(
"
show
"
)});
var
q
=
function
(
b
,
c
){
this
.
$element
=
a
(
b
),
this
.
options
=
a
.
extend
({},
a
.
fn
.
typeahead
.
defaults
,
c
),
this
.
matcher
=
this
.
options
.
matcher
||
this
.
matcher
,
this
.
sorter
=
this
.
options
.
sorter
||
this
.
sorter
,
this
.
highlighter
=
this
.
options
.
highlighter
||
this
.
highlighter
,
this
.
updater
=
this
.
options
.
updater
||
this
.
updater
,
this
.
source
=
this
.
options
.
source
,
this
.
$menu
=
a
(
this
.
options
.
menu
),
this
.
shown
=!
1
,
this
.
listen
()};
q
.
prototype
=
{
constructor
:
q
,
select
:
function
(){
var
a
=
this
.
$menu
.
find
(
"
.active
"
).
attr
(
"
data-value
"
);
return
this
.
$element
.
val
(
this
.
updater
(
a
)).
change
(),
this
.
hide
()},
updater
:
function
(
a
){
return
a
},
show
:
function
(){
var
b
=
a
.
extend
({},
this
.
$element
.
position
(),{
height
:
this
.
$element
[
0
].
offsetHeight
});
return
this
.
$menu
.
insertAfter
(
this
.
$element
).
css
({
top
:
b
.
top
+
b
.
height
,
left
:
b
.
left
}).
show
(),
this
.
shown
=!
0
,
this
},
hide
:
function
(){
return
this
.
$menu
.
hide
(),
this
.
shown
=!
1
,
this
},
lookup
:
function
(
b
){
var
c
;
return
this
.
query
=
this
.
$element
.
val
(),
!
this
.
query
||
this
.
query
.
length
<
this
.
options
.
minLength
?
this
.
shown
?
this
.
hide
():
this
:(
c
=
a
.
isFunction
(
this
.
source
)?
this
.
source
(
this
.
query
,
a
.
proxy
(
this
.
process
,
this
)):
this
.
source
,
c
?
this
.
process
(
c
):
this
)},
process
:
function
(
b
){
var
c
=
this
;
return
b
=
a
.
grep
(
b
,
function
(
a
){
return
c
.
matcher
(
a
)}),
b
=
this
.
sorter
(
b
),
b
.
length
?
this
.
render
(
b
.
slice
(
0
,
this
.
options
.
items
)).
show
():
this
.
shown
?
this
.
hide
():
this
},
matcher
:
function
(
a
){
return
~
a
.
toLowerCase
().
indexOf
(
this
.
query
.
toLowerCase
())},
sorter
:
function
(
a
){
for
(
var
b
,
c
=
[],
d
=
[],
e
=
[];
b
=
a
.
shift
();)
b
.
toLowerCase
().
indexOf
(
this
.
query
.
toLowerCase
())?
~
b
.
indexOf
(
this
.
query
)?
d
.
push
(
b
):
e
.
push
(
b
):
c
.
push
(
b
);
return
c
.
concat
(
d
,
e
)},
highlighter
:
function
(
a
){
var
b
=
this
.
query
.
replace
(
/
[\-\[\]
{}()*+?.,
\\\^
$|#
\s]
/g
,
"
\\
$&
"
);
return
a
.
replace
(
new
RegExp
(
"
(
"
+
b
+
"
)
"
,
"
ig
"
),
function
(
a
,
b
){
return
"
<strong>
"
+
b
+
"
</strong>
"
})},
render
:
function
(
b
){
var
c
=
this
;
return
b
=
a
(
b
).
map
(
function
(
b
,
d
){
return
b
=
a
(
c
.
options
.
item
).
attr
(
"
data-value
"
,
d
),
b
.
find
(
"
a
"
).
html
(
c
.
highlighter
(
d
)),
b
[
0
]}),
b
.
first
().
addClass
(
"
active
"
),
this
.
$menu
.
html
(
b
),
this
},
next
:
function
(
b
){
var
c
=
this
.
$menu
.
find
(
"
.active
"
).
removeClass
(
"
active
"
),
d
=
c
.
next
();
d
.
length
||
(
d
=
a
(
this
.
$menu
.
find
(
"
li
"
)[
0
])),
d
.
addClass
(
"
active
"
)},
prev
:
function
(
a
){
var
b
=
this
.
$menu
.
find
(
"
.active
"
).
removeClass
(
"
active
"
),
c
=
b
.
prev
();
c
.
length
||
(
c
=
this
.
$menu
.
find
(
"
li
"
).
last
()),
c
.
addClass
(
"
active
"
)},
listen
:
function
(){
this
.
$element
.
on
(
"
focus
"
,
a
.
proxy
(
this
.
focus
,
this
)).
on
(
"
blur
"
,
a
.
proxy
(
this
.
blur
,
this
)).
on
(
"
keypress
"
,
a
.
proxy
(
this
.
keypress
,
this
)).
on
(
"
keyup
"
,
a
.
proxy
(
this
.
keyup
,
this
)),
this
.
eventSupported
(
"
keydown
"
)
&&
this
.
$element
.
on
(
"
keydown
"
,
a
.
proxy
(
this
.
keydown
,
this
)),
this
.
$menu
.
on
(
"
click
"
,
a
.
proxy
(
this
.
click
,
this
)).
on
(
"
mouseenter
"
,
"
li
"
,
a
.
proxy
(
this
.
mouseenter
,
this
)).
on
(
"
mouseleave
"
,
"
li
"
,
a
.
proxy
(
this
.
mouseleave
,
this
))},
eventSupported
:
function
(
a
){
var
b
=
a
in
this
.
$element
;
return
b
||
(
this
.
$element
.
setAttribute
(
a
,
"
return;
"
),
b
=
"
function
"
==
typeof
this
.
$element
[
a
]),
b
},
move
:
function
(
a
){
if
(
this
.
shown
){
switch
(
a
.
keyCode
){
case
9
:
case
13
:
case
27
:
a
.
preventDefault
();
break
;
case
38
:
a
.
preventDefault
(),
this
.
prev
();
break
;
case
40
:
a
.
preventDefault
(),
this
.
next
()}
a
.
stopPropagation
()}},
keydown
:
function
(
b
){
this
.
suppressKeyPressRepeat
=~
a
.
inArray
(
b
.
keyCode
,[
40
,
38
,
9
,
13
,
27
]),
this
.
move
(
b
)},
keypress
:
function
(
a
){
this
.
suppressKeyPressRepeat
||
this
.
move
(
a
)},
keyup
:
function
(
a
){
switch
(
a
.
keyCode
){
case
40
:
case
38
:
case
16
:
case
17
:
case
18
:
break
;
case
9
:
case
13
:
if
(
!
this
.
shown
)
return
;
this
.
select
();
break
;
case
27
:
if
(
!
this
.
shown
)
return
;
this
.
hide
();
break
;
default
:
this
.
lookup
()}
a
.
stopPropagation
(),
a
.
preventDefault
()},
focus
:
function
(
a
){
this
.
focused
=!
0
},
blur
:
function
(
a
){
this
.
focused
=!
1
,
!
this
.
mousedover
&&
this
.
shown
&&
this
.
hide
()},
click
:
function
(
a
){
a
.
stopPropagation
(),
a
.
preventDefault
(),
this
.
select
(),
this
.
$element
.
focus
()},
mouseenter
:
function
(
b
){
this
.
mousedover
=!
0
,
this
.
$menu
.
find
(
"
.active
"
).
removeClass
(
"
active
"
),
a
(
b
.
currentTarget
).
addClass
(
"
active
"
)},
mouseleave
:
function
(
a
){
this
.
mousedover
=!
1
,
!
this
.
focused
&&
this
.
shown
&&
this
.
hide
()}};
var
g
=
a
.
fn
.
typeahead
;
a
.
fn
.
typeahead
=
function
(
b
){
return
this
.
each
(
function
(){
var
c
=
a
(
this
),
d
=
c
.
data
(
"
typeahead
"
),
e
=
"
object
"
==
typeof
b
&&
b
;
d
||
c
.
data
(
"
typeahead
"
,
d
=
new
q
(
this
,
e
)),
"
string
"
==
typeof
b
&&
d
[
b
]()})},
a
.
fn
.
typeahead
.
defaults
=
{
source
:[],
items
:
8
,
menu
:
'
<ul class="typeahead dropdown-menu"></ul>
'
,
item
:
'
<li><a href="#"></a></li>
'
,
minLength
:
1
},
a
.
fn
.
typeahead
.
Constructor
=
q
,
a
.
fn
.
typeahead
.
noConflict
=
function
(){
return
a
.
fn
.
typeahead
=
g
,
this
},
a
(
document
).
on
(
"
focus.typeahead.data-api
"
,
'
[data-provide="typeahead"]
'
,
function
(
b
){
var
c
=
a
(
this
);
c
.
data
(
"
typeahead
"
)
||
c
.
typeahead
(
c
.
data
())});
var
r
=
function
(
b
,
c
){
this
.
options
=
a
.
extend
({},
a
.
fn
.
affix
.
defaults
,
c
),
this
.
$window
=
a
(
window
).
on
(
"
scroll.affix.data-api
"
,
a
.
proxy
(
this
.
checkPosition
,
this
)).
on
(
"
click.affix.data-api
"
,
a
.
proxy
(
function
(){
setTimeout
(
a
.
proxy
(
this
.
checkPosition
,
this
),
1
)},
this
)),
this
.
$element
=
a
(
b
),
this
.
checkPosition
()};
r
.
prototype
.
checkPosition
=
function
(){
if
(
this
.
$element
.
is
(
"
:visible
"
)){
var
b
,
c
=
a
(
document
).
height
(),
d
=
this
.
$window
.
scrollTop
(),
e
=
this
.
$element
.
offset
(),
f
=
this
.
options
.
offset
,
g
=
f
.
bottom
,
h
=
f
.
top
,
i
=
"
affix affix-top affix-bottom
"
;
"
object
"
!=
typeof
f
&&
(
g
=
h
=
f
),
"
function
"
==
typeof
h
&&
(
h
=
f
.
top
()),
"
function
"
==
typeof
g
&&
(
g
=
f
.
bottom
()),
b
=
null
!=
this
.
unpin
&&
d
+
this
.
unpin
<=
e
.
top
?
!
1
:
null
!=
g
&&
e
.
top
+
this
.
$element
.
height
()
>=
c
-
g
?
"
bottom
"
:
null
!=
h
&&
h
>=
d
?
"
top
"
:
!
1
,
this
.
affixed
!==
b
&&
(
this
.
affixed
=
b
,
this
.
unpin
=
"
bottom
"
==
b
?
e
.
top
-
d
:
null
,
this
.
$element
.
removeClass
(
i
).
addClass
(
"
affix
"
+
(
b
?
"
-
"
+
b
:
""
)))}};
var
g
=
a
.
fn
.
affix
;
a
.
fn
.
affix
=
function
(
b
){
return
this
.
each
(
function
(){
var
c
=
a
(
this
),
d
=
c
.
data
(
"
affix
"
),
e
=
"
object
"
==
typeof
b
&&
b
;
d
||
c
.
data
(
"
affix
"
,
d
=
new
r
(
this
,
e
)),
"
string
"
==
typeof
b
&&
d
[
b
]()})},
a
.
fn
.
affix
.
Constructor
=
r
,
a
.
fn
.
affix
.
defaults
=
{
offset
:
0
},
a
.
fn
.
affix
.
noConflict
=
function
(){
return
a
.
fn
.
affix
=
g
,
this
},
a
(
window
).
on
(
"
load
"
,
function
(){
a
(
'
[data-spy="affix"]
'
).
each
(
function
(){
var
b
=
a
(
this
),
c
=
b
.
data
();
c
.
offset
=
c
.
offset
||
{},
c
.
offsetBottom
&&
(
c
.
offset
.
bottom
=
c
.
offsetBottom
),
c
.
offsetTop
&&
(
c
.
offset
.
top
=
c
.
offsetTop
),
b
.
affix
(
c
)})})});
\ No newline at end of file
ajax.php
0 → 100755
View file @
9e4edd46
<?php
// This file is part of Moodle - http://moodle.org/
//
// Moodle is free software: you can redistribute it and/or modify
// it under the terms of the GNU General Public License as published by
// the Free Software Foundation, either version 3 of the License, or
// (at your option) any later version.
//
// Moodle is distributed in the hope that it will be useful,
// but WITHOUT ANY WARRANTY; without even the implied warranty of
// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
// GNU General Public License for more details.
//
// You should have received a copy of the GNU General Public License
// along with Moodle. If not, see <http://www.gnu.org/licenses/>.
/**
* Process ajax requests
*
* @package assignfeedback_editpdfplus
* @copyright 2012 Davo Smith
* @license http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later
*/
use
\
assignfeedback_editpdfplus\document_services
;
use
\
assignfeedback_editpdfplus\page_editor
;
use
\
assignfeedback_editpdfplus\comments_quick_list
;
define
(
'AJAX_SCRIPT'
,
true
);
require
(
'../../../../config.php'
);
require_once
(
$CFG
->
dirroot
.
'/mod/assign/locallib.php'
);
require_sesskey
();
$action
=
optional_param
(
'action'
,
''
,
PARAM_ALPHANUM
);
$assignmentid
=
required_param
(
'assignmentid'
,
PARAM_INT
);
$userid
=
required_param
(
'userid'
,
PARAM_INT
);
$attemptnumber
=
required_param
(
'attemptnumber'
,
PARAM_INT
);
$readonly
=
optional_param
(
'readonly'
,
false
,
PARAM_BOOL
);
$cm
=
\
get_coursemodule_from_instance
(
'assign'
,
$assignmentid
,
0
,
false
,
MUST_EXIST
);
$context
=
\
context_module
::
instance
(
$cm
->
id
);
$assignment
=
new
\
assign
(
$context
,
null
,
null
);
require_login
(
$assignment
->
get_course
(),
false
,
$cm
);
if
(
!
$assignment
->
can_view_submission
(
$userid
))
{
print_error
(
'nopermission'
);
}
if
(
$action
==
'loadallpages'
)
{
$draft
=
true
;
if
(
!
has_capability
(
'mod/assign:grade'
,
$context
))
{
$draft
=
false
;
$readonly
=
true
;
// A student always sees the readonly version.
require_capability
(
'mod/assign:submit'
,
$context
);
}
// Whoever is viewing the readonly version should not use the drafts, but the actual annotations.
if
(
$readonly
)
{
$draft
=
false
;
}
$pages
=
document_services
::
get_page_images_for_attempt
(
$assignment
,
$userid
,
$attemptnumber
,
$readonly
);
$response
=
new
stdClass
();
$response
->
pagecount
=
count
(
$pages
);
$response
->
pages
=
array
();
$grade
=
$assignment
->
get_user_grade
(
$userid
,
true
);
// The readonly files are stored in a different file area.
$filearea
=
document_services
::
PAGE_IMAGE_FILEAREA
;
if
(
$readonly
)
{
$filearea
=
document_services
::
PAGE_IMAGE_READONLY_FILEAREA
;
}
foreach
(
$pages
as
$id
=>
$pagefile
)
{
$index
=
count
(
$response
->
pages
);
$page
=
new
stdClass
();
$comments
=
page_editor
::
get_comments
(
$grade
->
id
,
$index
,
$draft
);
$page
->
url
=
moodle_url
::
make_pluginfile_url
(
$context
->
id
,
'assignfeedback_editpdfplus'
,
$filearea
,
$grade
->
id
,
'/'
,
$pagefile
->
get_filename
())
->
out
();
$page
->
comments
=
$comments
;
if
(
$imageinfo
=
$pagefile
->
get_imageinfo
())
{
$page
->
width
=
$imageinfo
[
'width'
];
$page
->
height
=
$imageinfo
[
'height'
];
}
else
{
$page
->
width
=
0
;
$page
->
height
=
0
;
}
$annotations
=
page_editor
::
get_annotations
(
$grade
->
id
,
$index
,
$draft
);
$page
->
annotations
=
$annotations
;
array_push
(
$response
->
pages
,
$page
);
}
echo
json_encode
(
$response
);
die
();
}
else
if
(
$action
==
'savepage'
)
{
require_capability
(
'mod/assign:grade'
,
$context
);
$response
=
new
stdClass
();
$response
->
errors
=
array
();
$grade
=
$assignment
->
get_user_grade
(
$userid
,
true
);
$pagejson
=
required_param
(
'page'
,
PARAM_RAW
);
$page
=
json_decode
(
$pagejson
);
$index
=
required_param
(
'index'
,
PARAM_INT
);
$added
=
page_editor
::
set_comments
(
$grade
->
id
,
$index
,
$page
->
comments
);
if
(
$added
!=
count
(
$page
->
comments
))
{
array_push
(
$response
->
errors
,
get_string
(
'couldnotsavepage'
,
'assignfeedback_editpdfplus'
,
$index
+
1
));
}
$added
=
page_editor
::
set_annotations
(
$grade
->
id
,
$index
,
$page
->
annotations
);
if
(
$added
!=
count
(
$page
->
annotations
))
{
array_push
(
$response
->
errors
,
get_string
(
'couldnotsavepage'
,
'assignfeedback_editpdfplus'
,
$index
+
1
));
}
echo
json_encode
(
$response
);
die
();
}
else
if
(
$action
==
'generatepdf'
)
{
require_capability
(
'mod/assign:grade'
,
$context
);
$response
=
new
stdClass
();
$grade
=
$assignment
->
get_user_grade
(
$userid
,
true
);
$file
=
document_services
::
generate_feedback_document
(
$assignment
,
$userid
,
$attemptnumber
);
$response
->
url
=
''
;
if
(
$file
)
{
$url
=
moodle_url
::
make_pluginfile_url
(
$assignment
->
get_context
()
->
id
,
'assignfeedback_editpdfplus'
,
document_services
::
FINAL_PDF_FILEAREA
,
$grade
->
id
,
'/'
,
$file
->
get_filename
(),
false
);
$response
->
url
=
$url
->
out
(
true
);
$response
->
filename
=
$file
->
get_filename
();
}
echo
json_encode
(
$response
);
die
();
}
else
if
(
$action
==
'loadquicklist'
)
{
require_capability
(
'mod/assign:grade'
,
$context
);
$result
=
comments_quick_list
::
get_comments
();
echo
json_encode
(
$result
);
die
();
}
else
if
(
$action
==
'addtoquicklist'
)
{
require_capability
(
'mod/assign:grade'
,
$context
);
$comment
=
required_param
(
'commenttext'
,
PARAM_RAW
);
$width
=
required_param
(
'width'
,
PARAM_INT
);
$colour
=
required_param
(
'colour'
,
PARAM_ALPHA
);
$result
=
comments_quick_list
::
add_comment
(
$comment
,
$width
,
$colour
);
echo
json_encode
(
$result
);
die
();
}
else
if
(
$action
==
'revertchanges'
)
{
require_capability
(
'mod/assign:grade'
,
$context
);
$grade
=
$assignment
->
get_user_grade
(
$userid
,
true
);
$result
=
page_editor
::
revert_drafts
(
$gradeid
);
echo
json_encode
(
$result
);
die
();
}
else
if
(
$action
==
'removefromquicklist'
)
{
require_capability
(
'mod/assign:grade'
,
$context
);
$commentid
=
required_param
(
'commentid'
,
PARAM_INT
);
$result
=
comments_quick_list
::
remove_comment
(
$commentid
);
echo
json_encode
(
$result
);
die
();
}
else
if
(
$action
==
'deletefeedbackdocument'
)
{
require_capability
(
'mod/assign:grade'
,
$context
);
$grade
=
$assignment
->
get_user_grade
(
$userid
,
true
);
$result
=
document_services
::
delete_feedback_document
(
$assignment
,
$userid
,
$attemptnumber
);
$result
=
$result
&&
page_editor
::
unrelease_drafts
(
$grade
->
id
);
echo
json_encode
(
$result
);
die
();
}
ajax_progress.php
0 → 100755
View file @
9e4edd46
<?php
// This file is part of Moodle - http://moodle.org/
//
// Moodle is free software: you can redistribute it and/or modify
// it under the terms of the GNU General Public License as published by
// the Free Software Foundation, either version 3 of the License, or
// (at your option) any later version.
//
// Moodle is distributed in the hope that it will be useful,
// but WITHOUT ANY WARRANTY; without even the implied warranty of
// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
// GNU General Public License for more details.
//
// You should have received a copy of the GNU General Public License
// along with Moodle. If not, see <http://www.gnu.org/licenses/>.
/**
* Process concurrent ajax request.
* ALL RETURNED INFO IS PUBLIC.
*
* @package assignfeedback_editpdfplus
* @copyright 2013 Jerome Mouneyrac
* @license http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later
*/
define
(
'AJAX_SCRIPT'
,
true
);
// To be able to process concurrent ajax request with the generate pdf ajax request we can not use cookie.
define
(
'NO_MOODLE_COOKIES'
,
true
);
use
\
assignfeedback_editpdfplus\document_services
;
require_once
(
'../../../../config.php'
);
try
{
$assignmentid
=
required_param
(
'assignmentid'
,
PARAM_INT
);
$userid
=
required_param
(
'userid'
,
PARAM_INT
);
$attemptnumber
=
required_param
(
'attemptnumber'
,
PARAM_INT
);
// Retrieve the assignments.
require_once
(
$CFG
->
dirroot
.
'/mod/assign/locallib.php'
);
$cm
=
get_coursemodule_from_instance
(
'assign'
,
$assignmentid
,
0
,
false
,
MUST_EXIST
);
$context
=
context_module
::
instance
(
$cm
->
id
);
$assignment
=
new
assign
(
$context
,
null
,
null
);
// Get the generated images from file API call.
$grade
=
$assignment
->
get_user_grade
(
$userid
,
false
,
$attemptnumber
);
// Check we found a grade.
if
(
empty
(
$grade
))
{
throw
new
coding_exception
(
'grade not found'
);
}
// No need to handle the readonly files here, the should be already generated.
$component
=
'assignfeedback_editpdfplus'
;
$filearea
=
document_services
::
PAGE_IMAGE_FILEAREA
;
$filepath
=
'/'
;
$fs
=
get_file_storage
();
$files
=
$fs
->
get_directory_files
(
$context
->
id
,
$component
,
$filearea
,
$grade
->
id
,
$filepath
);
// The important security part: we ONLY RETURN the total NUMBER of generated images.
echo
$OUTPUT
->
header
();
echo
json_encode
(
count
(
$files
));
echo
$OUTPUT
->
footer
();
}
catch
(
Exception
$e
)
{
// This should never happened!
// Return a 500 HTTP header so Y.io gets it as a failure.
if
(
substr
(
php_sapi_name
(),
0
,
3
)
==
'cgi'
)
{
header
(
"Status: 500 Internal Server Error"
);
}
else
{
header
(
'HTTP/1.0 500 Internal Server Error'
);
}
throw
new
moodle_exception
(
'An exception was caught but can not be returned for security purpose.
To easily debug, comment the try catch.'
);
}
backup/moodle2/backup_assignfeedback_editpdfplus_subplugin.class.php
0 → 100755
View file @
9e4edd46
<?php
// This file is part of Moodle - http://moodle.org/
//
// Moodle is free software: you can redistribute it and/or modify
// it under the terms of the GNU General Public License as published by
// the Free Software Foundation, either version 3 of the License, or
// (at your option) any later version.
//
// Moodle is distributed in the hope that it will be useful,
// but WITHOUT ANY WARRANTY; without even the implied warranty of
// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
// GNU General Public License for more details.
//
// You should have received a copy of the GNU General Public License
// along with Moodle. If not, see <http://www.gnu.org/licenses/>.
/**
* This file contains the backup code for the feedback_editpdfplus plugin.
*
* @package assignfeedback_editpdfplus
* @copyright 2013 Damyon Wiese
* @license http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later
*/
defined
(
'MOODLE_INTERNAL'
)
||
die
();
/**
* Provides the information to backup feedback pdf annotations.
*
* This just adds its fileareas to the annotations and the comments and annotation data.
*
* @package assignfeedback_editpdfplus
* @copyright 2013 Damyon Wiese
* @license http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later
*/
class
backup_assignfeedback_editpdfplus_subplugin
extends
backup_subplugin
{
/**