Skip to content
体验新版
项目
组织
正在加载...
登录
切换导航
打开侧边栏
wrr-cat
apollo
提交
26b171fc
apollo
项目概览
wrr-cat
/
apollo
与 Fork 源项目一致
从无法访问的项目Fork
通知
2
Star
0
Fork
0
代码
文件
提交
分支
Tags
贡献者
分支图
Diff
Issue
0
列表
看板
标记
里程碑
合并请求
0
Wiki
0
Wiki
分析
仓库
DevOps
项目成员
Pages
apollo
项目概览
项目概览
详情
发布
仓库
仓库
文件
提交
分支
标签
贡献者
分支图
比较
Issue
0
Issue
0
列表
看板
标记
里程碑
合并请求
0
合并请求
0
Pages
分析
分析
仓库分析
DevOps
Wiki
0
Wiki
成员
成员
收起侧边栏
关闭侧边栏
动态
分支图
创建新Issue
提交
Issue看板
体验新版 GitCode,发现更多精彩内容 >>
提交
26b171fc
编写于
3月 21, 2016
作者:
Y
Yiming Liu
浏览文件
操作
浏览文件
下载
差异文件
Merge pull request #18 from nobodyiam/demo-page
Add demo page for apollo client usage illustration purpose
上级
6e99c57b
c9d72d52
变更
15
展开全部
隐藏空白更改
内联
并排
Showing
15 changed file
with
326 addition
and
2 deletion
+326
-2
apollo-demo/src/main/java/com/ctrip/apollo/demo/controller/DemoController.java
...java/com/ctrip/apollo/demo/controller/DemoController.java
+45
-0
apollo-demo/src/main/java/com/ctrip/apollo/demo/exception/RestExceptionHandler.java
...com/ctrip/apollo/demo/exception/RestExceptionHandler.java
+25
-0
apollo-demo/src/main/java/com/ctrip/apollo/demo/model/Config.java
...emo/src/main/java/com/ctrip/apollo/demo/model/Config.java
+22
-0
apollo-demo/src/main/java/com/ctrip/apollo/demo/model/ErrorResult.java
...rc/main/java/com/ctrip/apollo/demo/model/ErrorResult.java
+22
-0
apollo-demo/src/main/webapp/WEB-INF/views/welcome.jsp
apollo-demo/src/main/webapp/WEB-INF/views/welcome.jsp
+26
-2
apollo-demo/src/main/webapp/s/scripts/angular-toastr-1.4.1.tpls.min.js
...rc/main/webapp/s/scripts/angular-toastr-1.4.1.tpls.min.js
+1
-0
apollo-demo/src/main/webapp/s/scripts/app.js
apollo-demo/src/main/webapp/s/scripts/app.js
+61
-0
apollo-demo/src/main/webapp/s/scripts/http.js
apollo-demo/src/main/webapp/s/scripts/http.js
+32
-0
apollo-demo/src/main/webapp/s/scripts/loading-bar.min.js
apollo-demo/src/main/webapp/s/scripts/loading-bar.min.js
+7
-0
apollo-demo/src/main/webapp/s/scripts/ui-bootstrap-0.13.0.min.js
...demo/src/main/webapp/s/scripts/ui-bootstrap-0.13.0.min.js
+9
-0
apollo-demo/src/main/webapp/s/scripts/ui-bootstrap-tpls-0.13.0.min.js
...src/main/webapp/s/scripts/ui-bootstrap-tpls-0.13.0.min.js
+10
-0
apollo-demo/src/main/webapp/s/styles/angular-toastr-1.4.1.min.css
...emo/src/main/webapp/s/styles/angular-toastr-1.4.1.min.css
+1
-0
apollo-demo/src/main/webapp/s/styles/app.css
apollo-demo/src/main/webapp/s/styles/app.css
+3
-0
apollo-demo/src/main/webapp/s/styles/loading-bar.min.css
apollo-demo/src/main/webapp/s/styles/loading-bar.min.css
+1
-0
apollo-demo/src/main/webapp/s/templates/list.html
apollo-demo/src/main/webapp/s/templates/list.html
+61
-0
未找到文件。
apollo-demo/src/main/java/com/ctrip/apollo/demo/DemoController.java
→
apollo-demo/src/main/java/com/ctrip/apollo/demo/
controller/
DemoController.java
浏览文件 @
26b171fc
package
com.ctrip.apollo.demo
;
package
com.ctrip.apollo.demo
.controller
;
import
com.ctrip.apollo.client.ApolloConfigManager
;
import
com.ctrip.apollo.client.model.ApolloRegistry
;
import
com.ctrip.apollo.client.util.ConfigUtil
;
import
com.ctrip.apollo.demo.model.Config
;
import
org.springframework.beans.factory.annotation.Autowired
;
import
org.springframework.beans.factory.annotation.Autowired
;
import
org.springframework.beans.factory.annotation.Value
;
import
org.springframework.beans.factory.annotation.Value
;
import
org.springframework.context.annotation.PropertySource
;
import
org.springframework.context.annotation.PropertySource
;
...
@@ -9,6 +13,9 @@ import org.springframework.web.bind.annotation.RequestMapping;
...
@@ -9,6 +13,9 @@ import org.springframework.web.bind.annotation.RequestMapping;
import
org.springframework.web.bind.annotation.RequestMethod
;
import
org.springframework.web.bind.annotation.RequestMethod
;
import
org.springframework.web.bind.annotation.RestController
;
import
org.springframework.web.bind.annotation.RestController
;
import
java.io.IOException
;
import
java.util.List
;
/**
/**
* @author Jason Song(song_s@ctrip.com)
* @author Jason Song(song_s@ctrip.com)
*/
*/
...
@@ -18,12 +25,21 @@ import org.springframework.web.bind.annotation.RestController;
...
@@ -18,12 +25,21 @@ import org.springframework.web.bind.annotation.RestController;
public
class
DemoController
{
public
class
DemoController
{
@Autowired
@Autowired
private
Environment
env
;
private
Environment
env
;
@Autowired
private
ApolloConfigManager
apolloConfigManager
;
//Apollo config client internal impl, not intended to be use by application, only for this test page
private
ConfigUtil
configUtil
=
ConfigUtil
.
getInstance
();
@Value
(
"${apollo.foo}"
)
@Value
(
"${apollo.foo}"
)
private
String
foo
;
private
String
foo
;
@RequestMapping
(
value
=
"/config/{configName:.*}"
,
method
=
RequestMethod
.
GET
)
@RequestMapping
(
value
=
"/config/{configName:.*}"
,
method
=
RequestMethod
.
GET
)
public
String
queryConfig
(
@PathVariable
String
configName
)
{
public
Config
queryConfig
(
@PathVariable
String
configName
)
{
return
env
.
getProperty
(
configName
,
"undefined"
);
return
new
Config
(
configName
,
env
.
getProperty
(
configName
,
"undefined"
));
}
@RequestMapping
(
value
=
"/client/registries"
,
method
=
RequestMethod
.
GET
)
public
List
<
ApolloRegistry
>
loadApolloRegistries
()
throws
IOException
{
return
configUtil
.
loadApolloRegistries
();
}
}
}
}
apollo-demo/src/main/java/com/ctrip/apollo/demo/exception/RestExceptionHandler.java
0 → 100644
浏览文件 @
26b171fc
package
com.ctrip.apollo.demo.exception
;
import
com.ctrip.apollo.demo.model.ErrorResult
;
import
com.fasterxml.jackson.core.JsonProcessingException
;
import
org.springframework.http.HttpStatus
;
import
org.springframework.http.MediaType
;
import
org.springframework.http.ResponseEntity
;
import
org.springframework.web.bind.annotation.ControllerAdvice
;
import
org.springframework.web.bind.annotation.ExceptionHandler
;
import
org.springframework.web.context.request.WebRequest
;
/**
* Created by Jason on 7/6/15.
*/
@ControllerAdvice
public
class
RestExceptionHandler
{
@ExceptionHandler
(
Exception
.
class
)
ResponseEntity
<
ErrorResult
>
handleWebExceptions
(
Exception
ex
,
WebRequest
request
)
throws
JsonProcessingException
{
ErrorResult
error
=
new
ErrorResult
(
HttpStatus
.
INTERNAL_SERVER_ERROR
.
value
(),
ex
.
getMessage
());
return
ResponseEntity
.
ok
().
contentType
(
MediaType
.
APPLICATION_JSON
).
body
(
error
);
}
}
apollo-demo/src/main/java/com/ctrip/apollo/demo/model/Config.java
0 → 100644
浏览文件 @
26b171fc
package
com.ctrip.apollo.demo.model
;
/**
* Created by Jason on 2/25/16.
*/
public
class
Config
{
private
final
String
name
;
private
final
String
value
;
public
Config
(
String
name
,
String
value
)
{
this
.
name
=
name
;
this
.
value
=
value
;
}
public
String
getName
()
{
return
name
;
}
public
String
getValue
()
{
return
value
;
}
}
apollo-demo/src/main/java/com/ctrip/apollo/demo/model/ErrorResult.java
0 → 100644
浏览文件 @
26b171fc
package
com.ctrip.apollo.demo.model
;
/**
* Created by Jason on 7/6/15.
*/
public
class
ErrorResult
{
private
final
int
code
;
private
final
String
msg
;
public
ErrorResult
(
int
code
,
String
msg
)
{
this
.
code
=
code
;
this
.
msg
=
msg
;
}
public
int
getCode
()
{
return
code
;
}
public
String
getMsg
()
{
return
msg
;
}
}
apollo-demo/src/main/webapp/WEB-INF/views/welcome.jsp
浏览文件 @
26b171fc
<html>
<!DOCTYPE html>
<%@page
contentType=
"text/html"
pageEncoding=
"UTF-8"
%>
<html
ng-app=
"Demo"
>
<meta
http-equiv=
Content-Type
content=
"text/html;charset=utf-8"
>
<meta
name=
"viewport"
content=
"width=device-width, initial-scale=1, maximum-scale=1, user-scalable=no"
>
<title>
Apollo Config Client
</title>
<link
rel=
"stylesheet"
type=
"text/css"
href=
"http://apps.bdimg.com/libs/bootstrap/3.3.0/css/bootstrap.min.css"
/>
<link
rel=
"stylesheet"
type=
"text/css"
href=
"/styles/angular-toastr-1.4.1.min.css"
/>
<link
rel=
'stylesheet'
href=
'/styles/loading-bar.min.css'
type=
'text/css'
media=
'all'
/>
<link
rel=
"stylesheet"
type=
"text/css"
href=
"/styles/app.css"
/>
<script
type=
"text/javascript"
src=
"http://apps.bdimg.com/libs/jquery/1.9.1/jquery.min.js"
></script>
<script
type=
"text/javascript"
src=
"http://apps.bdimg.com/libs/angular.js/1.3.9/angular.min.js"
></script>
<!-- HTML5 Shim and Respond.js IE8 support of HTML5 elements and media queries -->
<!-- WARNING: Respond.js doesn't work if you view the page via file:// -->
<!--[if lt IE 9]>
<script src="https://oss.maxcdn.com/libs/html5shiv/3.7.0/html5shiv.js"></script>
<script src="https://oss.maxcdn.com/libs/respond.js/1.3.0/respond.min.js"></script>
<![endif]-->
<body>
<body>
<h2>
Hello World!
</h2>
<div
class=
"container-fluid"
ng-include=
"'/templates/list.html'"
></div>
<script
type=
"text/javascript"
src=
"//cdn.bootcss.com/underscore.js/1.8.3/underscore-min.js"
></script>
<script
type=
"text/javascript"
src=
"/scripts/ui-bootstrap-0.13.0.min.js"
></script>
<script
type=
"text/javascript"
src=
"/scripts/ui-bootstrap-tpls-0.13.0.min.js"
></script>
<script
type=
"text/javascript"
src=
"/scripts/angular-toastr-1.4.1.tpls.min.js"
></script>
<script
type=
'text/javascript'
src=
'/scripts/loading-bar.min.js'
></script>
<script
type=
"text/javascript"
src=
"/scripts/http.js"
></script>
<script
type=
"text/javascript"
src=
"/scripts/app.js"
></script>
</body>
</body>
</html>
</html>
apollo-demo/src/main/webapp/s/scripts/angular-toastr-1.4.1.tpls.min.js
0 → 100644
浏览文件 @
26b171fc
!
function
(){
"
use strict
"
;
function
t
(
t
,
e
,
s
,
n
,
o
,
r
,
a
){
function
i
(
t
){
if
(
t
)
d
(
t
.
toastId
);
else
for
(
var
e
=
0
;
e
<
O
.
length
;
e
++
)
d
(
O
[
e
].
toastId
)}
function
l
(
t
,
e
,
s
){
var
n
=
m
().
iconClasses
.
error
;
return
g
(
n
,
t
,
e
,
s
)}
function
c
(
t
,
e
,
s
){
var
n
=
m
().
iconClasses
.
info
;
return
g
(
n
,
t
,
e
,
s
)}
function
u
(
t
,
e
,
s
){
var
n
=
m
().
iconClasses
.
success
;
return
g
(
n
,
t
,
e
,
s
)}
function
p
(
t
,
e
,
s
){
var
n
=
m
().
iconClasses
.
warning
;
return
g
(
n
,
t
,
e
,
s
)}
function
d
(
e
,
s
){
function
n
(
t
){
for
(
var
e
=
0
;
e
<
O
.
length
;
e
++
)
if
(
O
[
e
].
toastId
===
t
)
return
O
[
e
]}
function
o
(){
return
!
O
.
length
}
var
i
=
n
(
e
);
i
&&!
i
.
deleting
&&
(
i
.
deleting
=!
0
,
i
.
isOpened
=!
1
,
t
.
leave
(
i
.
el
).
then
(
function
(){
i
.
scope
.
options
.
onHidden
&&
i
.
scope
.
options
.
onHidden
(
s
),
i
.
scope
.
$destroy
();
var
t
=
O
.
indexOf
(
i
);
delete
B
[
i
.
scope
.
message
],
O
.
splice
(
t
,
1
);
var
e
=
r
.
maxOpened
;
e
&&
O
.
length
>=
e
&&
O
[
e
-
1
].
open
.
resolve
(),
o
()
&&
(
h
.
remove
(),
h
=
null
,
T
=
a
.
defer
())}))}
function
g
(
t
,
e
,
s
,
n
){
return
angular
.
isObject
(
s
)
&&
(
n
=
s
,
s
=
null
),
v
({
iconClass
:
t
,
message
:
e
,
optionsOverride
:
n
,
title
:
s
})}
function
m
(){
return
angular
.
extend
({},
r
)}
function
f
(
e
){
if
(
h
)
return
T
.
promise
;
h
=
angular
.
element
(
"
<div></div>
"
),
h
.
attr
(
"
id
"
,
e
.
containerId
),
h
.
addClass
(
e
.
positionClass
),
h
.
css
({
"
pointer-events
"
:
"
auto
"
});
var
s
=
angular
.
element
(
document
.
querySelector
(
e
.
target
));
if
(
!
s
||!
s
.
length
)
throw
"
Target for toasts doesn't exist
"
;
return
t
.
enter
(
h
,
s
).
then
(
function
(){
T
.
resolve
()}),
T
.
promise
}
function
v
(
s
){
function
r
(
t
,
e
,
s
){
s
.
allowHtml
?(
t
.
scope
.
allowHtml
=!
0
,
t
.
scope
.
title
=
o
.
trustAsHtml
(
e
.
title
),
t
.
scope
.
message
=
o
.
trustAsHtml
(
e
.
message
)):(
t
.
scope
.
title
=
e
.
title
,
t
.
scope
.
message
=
e
.
message
),
t
.
scope
.
toastType
=
t
.
iconClass
,
t
.
scope
.
toastId
=
t
.
toastId
,
t
.
scope
.
options
=
{
extendedTimeOut
:
s
.
extendedTimeOut
,
messageClass
:
s
.
messageClass
,
onHidden
:
s
.
onHidden
,
onShown
:
s
.
onShown
,
progressBar
:
s
.
progressBar
,
tapToDismiss
:
s
.
tapToDismiss
,
timeOut
:
s
.
timeOut
,
titleClass
:
s
.
titleClass
,
toastClass
:
s
.
toastClass
},
s
.
closeButton
&&
(
t
.
scope
.
options
.
closeHtml
=
s
.
closeHtml
)}
function
i
(){
function
t
(
t
){
for
(
var
e
=
[
"
containerId
"
,
"
iconClasses
"
,
"
maxOpened
"
,
"
newestOnTop
"
,
"
positionClass
"
,
"
preventDuplicates
"
,
"
preventOpenDuplicates
"
,
"
templates
"
],
s
=
0
,
n
=
e
.
length
;
n
>
s
;
s
++
)
delete
t
[
e
[
s
]];
return
t
}
var
e
=
{
toastId
:
C
++
,
isOpened
:
!
1
,
scope
:
n
.
$new
(),
open
:
a
.
defer
()};
return
e
.
iconClass
=
s
.
iconClass
,
s
.
optionsOverride
&&
(
p
=
angular
.
extend
(
p
,
t
(
s
.
optionsOverride
)),
e
.
iconClass
=
s
.
optionsOverride
.
iconClass
||
e
.
iconClass
),
r
(
e
,
s
,
p
),
e
.
el
=
l
(
e
.
scope
),
e
}
function
l
(
t
){
var
s
=
angular
.
element
(
"
<div toast></div>
"
),
n
=
e
.
get
(
"
$compile
"
);
return
n
(
s
)(
t
)}
function
c
(){
return
p
.
maxOpened
&&
O
.
length
<=
p
.
maxOpened
||!
p
.
maxOpened
}
function
u
(){
var
t
=
p
.
preventDuplicates
&&
s
.
message
===
w
,
e
=
p
.
preventOpenDuplicates
&&
B
[
s
.
message
];
return
t
||
e
?
!
0
:(
w
=
s
.
message
,
B
[
s
.
message
]
=!
0
,
!
1
)}
var
p
=
m
();
if
(
!
u
()){
var
g
=
i
();
if
(
O
.
push
(
g
),
p
.
autoDismiss
&&
p
.
maxOpened
>
0
)
for
(
var
v
=
O
.
slice
(
0
,
O
.
length
-
p
.
maxOpened
),
T
=
0
,
$
=
v
.
length
;
$
>
T
;
T
++
)
d
(
v
[
T
].
toastId
);
return
c
()
&&
g
.
open
.
resolve
(),
g
.
open
.
promise
.
then
(
function
(){
f
(
p
).
then
(
function
(){
if
(
g
.
isOpened
=!
0
,
p
.
newestOnTop
)
t
.
enter
(
g
.
el
,
h
).
then
(
function
(){
g
.
scope
.
init
()});
else
{
var
e
=
h
[
0
].
lastChild
?
angular
.
element
(
h
[
0
].
lastChild
):
null
;
t
.
enter
(
g
.
el
,
h
,
e
).
then
(
function
(){
g
.
scope
.
init
()})}})}),
g
}}
var
h
,
C
=
0
,
O
=
[],
w
=
""
,
B
=
{},
T
=
a
.
defer
(),
$
=
{
clear
:
i
,
error
:
l
,
info
:
c
,
remove
:
d
,
success
:
u
,
warning
:
p
};
return
$
}
angular
.
module
(
"
toastr
"
,[]).
factory
(
"
toastr
"
,
t
),
t
.
$inject
=
[
"
$animate
"
,
"
$injector
"
,
"
$document
"
,
"
$rootScope
"
,
"
$sce
"
,
"
toastrConfig
"
,
"
$q
"
]}(),
function
(){
"
use strict
"
;
angular
.
module
(
"
toastr
"
).
constant
(
"
toastrConfig
"
,{
allowHtml
:
!
1
,
autoDismiss
:
!
1
,
closeButton
:
!
1
,
closeHtml
:
"
<button>×</button>
"
,
containerId
:
"
toast-container
"
,
extendedTimeOut
:
1
e3
,
iconClasses
:{
error
:
"
toast-error
"
,
info
:
"
toast-info
"
,
success
:
"
toast-success
"
,
warning
:
"
toast-warning
"
},
maxOpened
:
0
,
messageClass
:
"
toast-message
"
,
newestOnTop
:
!
0
,
onHidden
:
null
,
onShown
:
null
,
positionClass
:
"
toast-top-right
"
,
preventDuplicates
:
!
1
,
preventOpenDuplicates
:
!
1
,
progressBar
:
!
1
,
tapToDismiss
:
!
0
,
target
:
"
body
"
,
templates
:{
toast
:
"
directives/toast/toast.html
"
,
progressbar
:
"
directives/progressbar/progressbar.html
"
},
timeOut
:
5
e3
,
titleClass
:
"
toast-title
"
,
toastClass
:
"
toast
"
})}(),
function
(){
"
use strict
"
;
function
t
(
t
){
function
e
(
t
,
e
,
s
,
n
){
function
o
(){
var
t
=
(
i
-
(
new
Date
).
getTime
())
/
a
*
100
;
e
.
css
(
"
width
"
,
t
+
"
%
"
)}
var
r
,
a
,
i
;
n
.
progressBar
=
t
,
t
.
start
=
function
(
t
){
r
&&
clearInterval
(
r
),
a
=
parseFloat
(
t
),
i
=
(
new
Date
).
getTime
()
+
a
,
r
=
setInterval
(
o
,
10
)},
t
.
stop
=
function
(){
r
&&
clearInterval
(
r
)},
t
.
$on
(
"
$destroy
"
,
function
(){
clearInterval
(
r
)})}
return
{
replace
:
!
0
,
require
:
"
^toast
"
,
templateUrl
:
function
(){
return
t
.
templates
.
progressbar
},
link
:
e
}}
angular
.
module
(
"
toastr
"
).
directive
(
"
progressBar
"
,
t
),
t
.
$inject
=
[
"
toastrConfig
"
]}(),
function
(){
"
use strict
"
;
function
t
(){
this
.
progressBar
=
null
,
this
.
startProgressBar
=
function
(
t
){
this
.
progressBar
&&
this
.
progressBar
.
start
(
t
)},
this
.
stopProgressBar
=
function
(){
this
.
progressBar
&&
this
.
progressBar
.
stop
()}}
angular
.
module
(
"
toastr
"
).
controller
(
"
ToastController
"
,
t
)}(),
function
(){
"
use strict
"
;
function
t
(
t
,
e
,
s
,
n
){
function
o
(
s
,
o
,
r
,
a
){
function
i
(
t
){
return
a
.
startProgressBar
(
t
),
e
(
function
(){
a
.
stopProgressBar
(),
n
.
remove
(
s
.
toastId
)},
t
,
1
)}
function
l
(){
s
.
progressBar
=!
1
,
a
.
stopProgressBar
()}
function
c
(){
return
s
.
options
.
closeHtml
}
var
u
;
if
(
s
.
toastClass
=
s
.
options
.
toastClass
,
s
.
titleClass
=
s
.
options
.
titleClass
,
s
.
messageClass
=
s
.
options
.
messageClass
,
s
.
progressBar
=
s
.
options
.
progressBar
,
c
()){
var
p
=
angular
.
element
(
s
.
options
.
closeHtml
),
d
=
t
.
get
(
"
$compile
"
);
p
.
addClass
(
"
toast-close-button
"
),
p
.
attr
(
"
ng-click
"
,
"
close()
"
),
d
(
p
)(
s
),
o
.
prepend
(
p
)}
s
.
init
=
function
(){
s
.
options
.
timeOut
&&
(
u
=
i
(
s
.
options
.
timeOut
)),
s
.
options
.
onShown
&&
s
.
options
.
onShown
()},
o
.
on
(
"
mouseenter
"
,
function
(){
l
(),
u
&&
e
.
cancel
(
u
)}),
s
.
tapToast
=
function
(){
s
.
options
.
tapToDismiss
&&
s
.
close
(
!
0
)},
s
.
close
=
function
(
t
){
n
.
remove
(
s
.
toastId
,
t
)},
o
.
on
(
"
mouseleave
"
,
function
(){(
0
!==
s
.
options
.
timeOut
||
0
!==
s
.
options
.
extendedTimeOut
)
&&
(
s
.
$apply
(
function
(){
s
.
progressBar
=
s
.
options
.
progressBar
}),
u
=
i
(
s
.
options
.
extendedTimeOut
))})}
return
{
replace
:
!
0
,
templateUrl
:
function
(){
return
s
.
templates
.
toast
},
controller
:
"
ToastController
"
,
link
:
o
}}
angular
.
module
(
"
toastr
"
).
directive
(
"
toast
"
,
t
),
t
.
$inject
=
[
"
$injector
"
,
"
$interval
"
,
"
toastrConfig
"
,
"
toastr
"
]}(),
angular
.
module
(
"
toastr
"
).
run
([
"
$templateCache
"
,
function
(
t
){
t
.
put
(
"
directives/progressbar/progressbar.html
"
,
'
<div class="toast-progress"></div>
\n
'
),
t
.
put
(
"
directives/toast/toast.html
"
,
'
<div class="{{toastClass}} {{toastType}}" ng-click="tapToast()">
\n
<div ng-switch on="allowHtml">
\n
<div ng-switch-default ng-if="title" class="{{titleClass}}">{{title}}</div>
\n
<div ng-switch-default class="{{messageClass}}">{{message}}</div>
\n
<div ng-switch-when="true" ng-if="title" class="{{titleClass}}" ng-bind-html="title"></div>
\n
<div ng-switch-when="true" class="{{messageClass}}" ng-bind-html="message"></div>
\n
</div>
\n
<progress-bar ng-if="progressBar"></progress-bar>
\n
</div>
\n
'
)}]);
\ No newline at end of file
apollo-demo/src/main/webapp/s/scripts/app.js
0 → 100644
浏览文件 @
26b171fc
(
function
(
$
)
{
var
app
=
angular
.
module
(
'
Demo
'
,
[
'
ui.bootstrap
'
,
'
toastr
'
,
'
angular-loading-bar
'
,
'
httpInterceptors
'
//custom http interceptor
]);
app
.
controller
(
'
DemoController
'
,
function
(
$scope
,
$http
,
$modal
,
toastr
)
{
//var NONE = "none";
this
.
registries
=
{};
this
.
configQuery
=
{};
//this.refreshResult = NONE;
var
self
=
this
;
this
.
loadRegistries
=
function
()
{
$http
.
get
(
"
demo/client/registries
"
)
.
success
(
function
(
data
)
{
self
.
registries
=
data
;
})
.
error
(
function
(
data
,
status
)
{
toastr
.
error
((
data
&&
data
.
msg
)
||
'
Loading registries failed
'
);
});
};
this
.
queryConfig
=
function
()
{
$http
.
get
(
"
demo/config/
"
+
encodeURIComponent
(
this
.
configQuery
.
configName
))
.
success
(
function
(
data
)
{
self
.
configQuery
.
configValue
=
data
.
value
;
})
.
error
(
function
(
data
,
status
)
{
toastr
.
error
((
data
&&
data
.
msg
)
||
'
Load config failed
'
);
});
};
//this.refreshConfig = function() {
// $http.post("refresh")
// .success(function(data) {
// self.assembleRefreshResult(data);
// })
// .error(function(data, status) {
// toastr.error((data && data.msg) || 'Refresh config failed');
// });
//
//};
//this.assembleRefreshResult = function(changedPropertyArray) {
// if(!changedPropertyArray || !changedPropertyArray.length) {
// this.refreshResult = NONE;
// return;
// }
// this.refreshResult = changedPropertyArray.join(',');
//};
this
.
loadRegistries
();
});
})(
jQuery
);
apollo-demo/src/main/webapp/s/scripts/http.js
0 → 100644
浏览文件 @
26b171fc
(
function
(
$
)
{
var
httpInterceptors
=
angular
.
module
(
'
httpInterceptors
'
,
[]);
httpInterceptors
.
factory
(
'
httpInterceptor
'
,
function
(
$q
)
{
return
{
'
request
'
:
function
(
config
)
{
var
t
=
new
Date
().
getTime
();
if
(
config
.
url
.
indexOf
(
'
.htm
'
)
!=
-
1
||
config
.
url
.
indexOf
(
'
?_=
'
)
!=
-
1
)
{
return
config
;
}
config
.
url
=
config
.
url
+
'
?_=
'
+
t
;
return
config
;
},
'
response
'
:
function
(
response
)
{
if
(
typeof
response
.
data
===
'
object
'
)
{
if
(
response
.
data
.
code
!=
null
&&
response
.
data
.
code
!=
200
)
{
return
$q
.
reject
(
response
);
}
}
return
response
;
}
};
});
httpInterceptors
.
config
(
function
(
$httpProvider
)
{
$httpProvider
.
interceptors
.
push
(
'
httpInterceptor
'
);
});
})(
jQuery
);
apollo-demo/src/main/webapp/s/scripts/loading-bar.min.js
0 → 100644
浏览文件 @
26b171fc
/*!
* angular-loading-bar v0.8.0
* https://chieffancypants.github.io/angular-loading-bar
* Copyright (c) 2015 Wes Cruver
* License: MIT
*/
!
function
(){
"
use strict
"
;
angular
.
module
(
"
angular-loading-bar
"
,[
"
cfp.loadingBarInterceptor
"
]),
angular
.
module
(
"
chieffancypants.loadingBar
"
,[
"
cfp.loadingBarInterceptor
"
]),
angular
.
module
(
"
cfp.loadingBarInterceptor
"
,[
"
cfp.loadingBar
"
]).
config
([
"
$httpProvider
"
,
function
(
a
){
var
b
=
[
"
$q
"
,
"
$cacheFactory
"
,
"
$timeout
"
,
"
$rootScope
"
,
"
$log
"
,
"
cfpLoadingBar
"
,
function
(
b
,
c
,
d
,
e
,
f
,
g
){
function
h
(){
d
.
cancel
(
j
),
g
.
complete
(),
l
=
0
,
k
=
0
}
function
i
(
b
){
var
d
,
e
=
c
.
get
(
"
$http
"
),
f
=
a
.
defaults
;
!
b
.
cache
&&!
f
.
cache
||
b
.
cache
===!
1
||
"
GET
"
!==
b
.
method
&&
"
JSONP
"
!==
b
.
method
||
(
d
=
angular
.
isObject
(
b
.
cache
)?
b
.
cache
:
angular
.
isObject
(
f
.
cache
)?
f
.
cache
:
e
);
var
g
=
void
0
!==
d
?
void
0
!==
d
.
get
(
b
.
url
):
!
1
;
return
void
0
!==
b
.
cached
&&
g
!==
b
.
cached
?
b
.
cached
:(
b
.
cached
=
g
,
g
)}
var
j
,
k
=
0
,
l
=
0
,
m
=
g
.
latencyThreshold
;
return
{
request
:
function
(
a
){
return
a
.
ignoreLoadingBar
||
i
(
a
)
||
(
e
.
$broadcast
(
"
cfpLoadingBar:loading
"
,{
url
:
a
.
url
}),
0
===
k
&&
(
j
=
d
(
function
(){
g
.
start
()},
m
)),
k
++
,
g
.
set
(
l
/
k
)),
a
},
response
:
function
(
a
){
return
a
&&
a
.
config
?(
a
.
config
.
ignoreLoadingBar
||
i
(
a
.
config
)
||
(
l
++
,
e
.
$broadcast
(
"
cfpLoadingBar:loaded
"
,{
url
:
a
.
config
.
url
,
result
:
a
}),
l
>=
k
?
h
():
g
.
set
(
l
/
k
)),
a
):(
f
.
error
(
"
Broken interceptor detected: Config object not supplied in response:
\n
https://github.com/chieffancypants/angular-loading-bar/pull/50
"
),
a
)},
responseError
:
function
(
a
){
return
a
&&
a
.
config
?(
a
.
config
.
ignoreLoadingBar
||
i
(
a
.
config
)
||
(
l
++
,
e
.
$broadcast
(
"
cfpLoadingBar:loaded
"
,{
url
:
a
.
config
.
url
,
result
:
a
}),
l
>=
k
?
h
():
g
.
set
(
l
/
k
)),
b
.
reject
(
a
)):(
f
.
error
(
"
Broken interceptor detected: Config object not supplied in rejection:
\n
https://github.com/chieffancypants/angular-loading-bar/pull/50
"
),
b
.
reject
(
a
))}}}];
a
.
interceptors
.
push
(
b
)}]),
angular
.
module
(
"
cfp.loadingBar
"
,[]).
provider
(
"
cfpLoadingBar
"
,
function
(){
this
.
autoIncrement
=!
0
,
this
.
includeSpinner
=!
0
,
this
.
includeBar
=!
0
,
this
.
latencyThreshold
=
100
,
this
.
startSize
=
.
02
,
this
.
parentSelector
=
"
body
"
,
this
.
spinnerTemplate
=
'
<div id="loading-bar-spinner"><div class="spinner-icon"></div></div>
'
,
this
.
loadingBarTemplate
=
'
<div id="loading-bar"><div class="bar"><div class="peg"></div></div></div>
'
,
this
.
$get
=
[
"
$injector
"
,
"
$document
"
,
"
$timeout
"
,
"
$rootScope
"
,
function
(
a
,
b
,
c
,
d
){
function
e
(){
k
||
(
k
=
a
.
get
(
"
$animate
"
));
var
e
=
b
.
find
(
n
).
eq
(
0
);
c
.
cancel
(
m
),
r
||
(
d
.
$broadcast
(
"
cfpLoadingBar:started
"
),
r
=!
0
,
v
&&
k
.
enter
(
o
,
e
,
angular
.
element
(
e
[
0
].
lastChild
)),
u
&&
k
.
enter
(
q
,
e
,
angular
.
element
(
e
[
0
].
lastChild
)),
f
(
w
))}
function
f
(
a
){
if
(
r
){
var
b
=
100
*
a
+
"
%
"
;
p
.
css
(
"
width
"
,
b
),
s
=
a
,
t
&&
(
c
.
cancel
(
l
),
l
=
c
(
function
(){
g
()},
250
))}}
function
g
(){
if
(
!
(
h
()
>=
1
)){
var
a
=
0
,
b
=
h
();
a
=
b
>=
0
&&
.
25
>
b
?(
3
*
Math
.
random
()
+
3
)
/
100
:
b
>=
.
25
&&
.
65
>
b
?
3
*
Math
.
random
()
/
100
:
b
>=
.
65
&&
.
9
>
b
?
2
*
Math
.
random
()
/
100
:
b
>=
.
9
&&
.
99
>
b
?.
005
:
0
;
var
c
=
h
()
+
a
;
f
(
c
)}}
function
h
(){
return
s
}
function
i
(){
s
=
0
,
r
=!
1
}
function
j
(){
k
||
(
k
=
a
.
get
(
"
$animate
"
)),
d
.
$broadcast
(
"
cfpLoadingBar:completed
"
),
f
(
1
),
c
.
cancel
(
m
),
m
=
c
(
function
(){
var
a
=
k
.
leave
(
o
,
i
);
a
&&
a
.
then
&&
a
.
then
(
i
),
k
.
leave
(
q
)},
500
)}
var
k
,
l
,
m
,
n
=
this
.
parentSelector
,
o
=
angular
.
element
(
this
.
loadingBarTemplate
),
p
=
o
.
find
(
"
div
"
).
eq
(
0
),
q
=
angular
.
element
(
this
.
spinnerTemplate
),
r
=!
1
,
s
=
0
,
t
=
this
.
autoIncrement
,
u
=
this
.
includeSpinner
,
v
=
this
.
includeBar
,
w
=
this
.
startSize
;
return
{
start
:
e
,
set
:
f
,
status
:
h
,
inc
:
g
,
complete
:
j
,
autoIncrement
:
this
.
autoIncrement
,
includeSpinner
:
this
.
includeSpinner
,
latencyThreshold
:
this
.
latencyThreshold
,
parentSelector
:
this
.
parentSelector
,
startSize
:
this
.
startSize
}}]})}();
\ No newline at end of file
apollo-demo/src/main/webapp/s/scripts/ui-bootstrap-0.13.0.min.js
0 → 100644
浏览文件 @
26b171fc
此差异已折叠。
点击以展开。
apollo-demo/src/main/webapp/s/scripts/ui-bootstrap-tpls-0.13.0.min.js
0 → 100644
浏览文件 @
26b171fc
此差异已折叠。
点击以展开。
apollo-demo/src/main/webapp/s/styles/angular-toastr-1.4.1.min.css
0 → 100644
浏览文件 @
26b171fc
.toast-title
{
font-weight
:
700
}
.toast-message
{
word-wrap
:
break-word
}
.toast-message
a
,
.toast-message
label
{
color
:
#fff
}
.toast-message
a
:hover
{
color
:
#ccc
;
text-decoration
:
none
}
.toast-close-button
{
position
:
relative
;
right
:
-.3em
;
top
:
-.3em
;
float
:
right
;
font-size
:
20px
;
font-weight
:
700
;
color
:
#fff
;
-webkit-text-shadow
:
0
1px
0
#fff
;
text-shadow
:
0
1px
0
#fff
;
opacity
:
.8
}
.toast-close-button
:focus
,
.toast-close-button
:hover
{
color
:
#000
;
text-decoration
:
none
;
cursor
:
pointer
;
opacity
:
.4
}
button
.toast-close-button
{
padding
:
0
;
cursor
:
pointer
;
background
:
0
0
;
border
:
0
;
-webkit-appearance
:
none
}
.toast-top-center
{
top
:
0
;
right
:
0
;
width
:
100%
}
.toast-bottom-center
{
bottom
:
0
;
right
:
0
;
width
:
100%
}
.toast-top-full-width
{
top
:
0
;
right
:
0
;
width
:
100%
}
.toast-bottom-full-width
{
bottom
:
0
;
right
:
0
;
width
:
100%
}
.toast-top-left
{
top
:
12px
;
left
:
12px
}
.toast-top-right
{
top
:
12px
;
right
:
12px
}
.toast-bottom-right
{
right
:
12px
;
bottom
:
12px
}
.toast-bottom-left
{
bottom
:
12px
;
left
:
12px
}
#toast-container
{
position
:
fixed
;
z-index
:
999999
}
#toast-container
*
{
-moz-box-sizing
:
border-box
;
-webkit-box-sizing
:
border-box
;
box-sizing
:
border-box
}
#toast-container
>
div
{
position
:
relative
;
overflow
:
hidden
;
margin
:
0
0
6px
;
padding
:
15px
15px
15px
50px
;
width
:
300px
;
-moz-border-radius
:
3px
;
-webkit-border-radius
:
3px
;
border-radius
:
3px
;
background-position
:
15px
center
;
background-repeat
:
no-repeat
;
-moz-box-shadow
:
0
0
12px
#999
;
-webkit-box-shadow
:
0
0
12px
#999
;
box-shadow
:
0
0
12px
#999
;
color
:
#fff
;
opacity
:
.8
}
#toast-container
>
:hover
{
-moz-box-shadow
:
0
0
12px
#000
;
-webkit-box-shadow
:
0
0
12px
#000
;
box-shadow
:
0
0
12px
#000
;
opacity
:
1
;
cursor
:
pointer
}
#toast-container
>
.toast-info
{
background-image
:
url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABgAAAAYCAYAAADgdz34AAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8YQUAAAAJcEhZcwAADsMAAA7DAcdvqGQAAAGwSURBVEhLtZa9SgNBEMc9sUxxRcoUKSzSWIhXpFMhhYWFhaBg4yPYiWCXZxBLERsLRS3EQkEfwCKdjWJAwSKCgoKCcudv4O5YLrt7EzgXhiU3/4+b2ckmwVjJSpKkQ6wAi4gwhT+z3wRBcEz0yjSseUTrcRyfsHsXmD0AmbHOC9Ii8VImnuXBPglHpQ5wwSVM7sNnTG7Za4JwDdCjxyAiH3nyA2mtaTJufiDZ5dCaqlItILh1NHatfN5skvjx9Z38m69CgzuXmZgVrPIGE763Jx9qKsRozWYw6xOHdER+nn2KkO+Bb+UV5CBN6WC6QtBgbRVozrahAbmm6HtUsgtPC19tFdxXZYBOfkbmFJ1VaHA1VAHjd0pp70oTZzvR+EVrx2Ygfdsq6eu55BHYR8hlcki+n+kERUFG8BrA0BwjeAv2M8WLQBtcy+SD6fNsmnB3AlBLrgTtVW1c2QN4bVWLATaIS60J2Du5y1TiJgjSBvFVZgTmwCU+dAZFoPxGEEs8nyHC9Bwe2GvEJv2WXZb0vjdyFT4Cxk3e/kIqlOGoVLwwPevpYHT+00T+hWwXDf4AJAOUqWcDhbwAAAAASUVORK5CYII=)
!important
}
#toast-container
>
.toast-error
{
background-image
:
url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABgAAAAYCAYAAADgdz34AAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8YQUAAAAJcEhZcwAADsMAAA7DAcdvqGQAAAHOSURBVEhLrZa/SgNBEMZzh0WKCClSCKaIYOED+AAKeQQLG8HWztLCImBrYadgIdY+gIKNYkBFSwu7CAoqCgkkoGBI/E28PdbLZmeDLgzZzcx83/zZ2SSXC1j9fr+I1Hq93g2yxH4iwM1vkoBWAdxCmpzTxfkN2RcyZNaHFIkSo10+8kgxkXIURV5HGxTmFuc75B2RfQkpxHG8aAgaAFa0tAHqYFfQ7Iwe2yhODk8+J4C7yAoRTWI3w/4klGRgR4lO7Rpn9+gvMyWp+uxFh8+H+ARlgN1nJuJuQAYvNkEnwGFck18Er4q3egEc/oO+mhLdKgRyhdNFiacC0rlOCbhNVz4H9FnAYgDBvU3QIioZlJFLJtsoHYRDfiZoUyIxqCtRpVlANq0EU4dApjrtgezPFad5S19Wgjkc0hNVnuF4HjVA6C7QrSIbylB+oZe3aHgBsqlNqKYH48jXyJKMuAbiyVJ8KzaB3eRc0pg9VwQ4niFryI68qiOi3AbjwdsfnAtk0bCjTLJKr6mrD9g8iq/S/B81hguOMlQTnVyG40wAcjnmgsCNESDrjme7wfftP4P7SP4N3CJZdvzoNyGq2c/HWOXJGsvVg+RA/k2MC/wN6I2YA2Pt8GkAAAAASUVORK5CYII=)
!important
}
#toast-container
>
.toast-success
{
background-image
:
url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABgAAAAYCAYAAADgdz34AAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8YQUAAAAJcEhZcwAADsMAAA7DAcdvqGQAAADsSURBVEhLY2AYBfQMgf///3P8+/evAIgvA/FsIF+BavYDDWMBGroaSMMBiE8VC7AZDrIFaMFnii3AZTjUgsUUWUDA8OdAH6iQbQEhw4HyGsPEcKBXBIC4ARhex4G4BsjmweU1soIFaGg/WtoFZRIZdEvIMhxkCCjXIVsATV6gFGACs4Rsw0EGgIIH3QJYJgHSARQZDrWAB+jawzgs+Q2UO49D7jnRSRGoEFRILcdmEMWGI0cm0JJ2QpYA1RDvcmzJEWhABhD/pqrL0S0CWuABKgnRki9lLseS7g2AlqwHWQSKH4oKLrILpRGhEQCw2LiRUIa4lwAAAABJRU5ErkJggg==)
!important
}
#toast-container
>
.toast-warning
{
background-image
:
url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABgAAAAYCAYAAADgdz34AAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8YQUAAAAJcEhZcwAADsMAAA7DAcdvqGQAAAGYSURBVEhL5ZSvTsNQFMbXZGICMYGYmJhAQIJAICYQPAACiSDB8AiICQQJT4CqQEwgJvYASAQCiZiYmJhAIBATCARJy+9rTsldd8sKu1M0+dLb057v6/lbq/2rK0mS/TRNj9cWNAKPYIJII7gIxCcQ51cvqID+GIEX8ASG4B1bK5gIZFeQfoJdEXOfgX4QAQg7kH2A65yQ87lyxb27sggkAzAuFhbbg1K2kgCkB1bVwyIR9m2L7PRPIhDUIXgGtyKw575yz3lTNs6X4JXnjV+LKM/m3MydnTbtOKIjtz6VhCBq4vSm3ncdrD2lk0VgUXSVKjVDJXJzijW1RQdsU7F77He8u68koNZTz8Oz5yGa6J3H3lZ0xYgXBK2QymlWWA+RWnYhskLBv2vmE+hBMCtbA7KX5drWyRT/2JsqZ2IvfB9Y4bWDNMFbJRFmC9E74SoS0CqulwjkC0+5bpcV1CZ8NMej4pjy0U+doDQsGyo1hzVJttIjhQ7GnBtRFN1UarUlH8F3xict+HY07rEzoUGPlWcjRFRr4/gChZgc3ZL2d8oAAAAASUVORK5CYII=)
!important
}
#toast-container
.toast-bottom-center
>
div
,
#toast-container
.toast-top-center
>
div
{
width
:
300px
;
margin
:
auto
}
#toast-container
.toast-bottom-full-width
>
div
,
#toast-container
.toast-top-full-width
>
div
{
width
:
96%
;
margin
:
auto
}
.toast
{
background-color
:
#030303
}
.toast-success
{
background-color
:
#51a351
}
.toast-error
{
background-color
:
#bd362f
}
.toast-info
{
background-color
:
#2f96b4
}
.toast-warning
{
background-color
:
#f89406
}
.toast-progress
{
position
:
absolute
;
left
:
0
;
bottom
:
0
;
height
:
4px
;
background-color
:
#000
;
opacity
:
.4
}
.toast
{
opacity
:
1
!important
}
.toast.ng-enter
{
opacity
:
0
!important
;
transition
:
opacity
.3s
linear
}
.toast.ng-enter.ng-enter-active
{
opacity
:
1
!important
}
.toast.ng-leave
{
opacity
:
1
;
transition
:
opacity
.3s
linear
}
.toast.ng-leave.ng-leave-active
{
opacity
:
0
!important
}
@media
all
and
(
max-width
:
240px
){
#toast-container
>
div
{
padding
:
8px
8px
8px
50px
;
width
:
11em
}
#toast-container
.toast-close-button
{
right
:
-.2em
;
top
:
-.2em
}}
@media
all
and
(
min-width
:
241px
)
and
(
max-width
:
480px
){
#toast-container
>
div
{
padding
:
8px
8px
8px
50px
;
width
:
18em
}
#toast-container
.toast-close-button
{
right
:
-.2em
;
top
:
-.2em
}}
@media
all
and
(
min-width
:
481px
)
and
(
max-width
:
768px
){
#toast-container
>
div
{
padding
:
15px
15px
15px
50px
;
width
:
25em
}}
\ No newline at end of file
apollo-demo/src/main/webapp/s/styles/app.css
0 → 100644
浏览文件 @
26b171fc
#config-value-wrapper
,
#refresh-result
{
margin-top
:
5px
;
}
\ No newline at end of file
apollo-demo/src/main/webapp/s/styles/loading-bar.min.css
0 → 100644
浏览文件 @
26b171fc
#loading-bar
,
#loading-bar-spinner
{
pointer-events
:
none
;
-webkit-pointer-events
:
none
;
-webkit-transition
:
350ms
linear
all
;
-moz-transition
:
350ms
linear
all
;
-o-transition
:
350ms
linear
all
;
transition
:
350ms
linear
all
}
#loading-bar-spinner
.ng-enter
,
#loading-bar-spinner
.ng-leave.ng-leave-active
,
#loading-bar
.ng-enter
,
#loading-bar
.ng-leave.ng-leave-active
{
opacity
:
0
}
#loading-bar-spinner
.ng-enter.ng-enter-active
,
#loading-bar-spinner
.ng-leave
,
#loading-bar
.ng-enter.ng-enter-active
,
#loading-bar
.ng-leave
{
opacity
:
1
}
#loading-bar
.bar
{
-webkit-transition
:
width
350ms
;
-moz-transition
:
width
350ms
;
-o-transition
:
width
350ms
;
transition
:
width
350ms
;
background
:
#29d
;
position
:
fixed
;
z-index
:
10002
;
top
:
0
;
left
:
0
;
width
:
100%
;
height
:
2px
;
border-bottom-right-radius
:
1px
;
border-top-right-radius
:
1px
}
#loading-bar
.peg
{
position
:
absolute
;
width
:
70px
;
right
:
0
;
top
:
0
;
height
:
2px
;
opacity
:
.45
;
-moz-box-shadow
:
#29d
1px
0
6px
1px
;
-ms-box-shadow
:
#29d
1px
0
6px
1px
;
-webkit-box-shadow
:
#29d
1px
0
6px
1px
;
box-shadow
:
#29d
1px
0
6px
1px
;
-moz-border-radius
:
100%
;
-webkit-border-radius
:
100%
;
border-radius
:
100%
}
#loading-bar-spinner
{
display
:
block
;
position
:
fixed
;
z-index
:
10002
;
top
:
10px
;
left
:
10px
}
#loading-bar-spinner
.spinner-icon
{
width
:
14px
;
height
:
14px
;
border
:
2px
solid
transparent
;
border-top-color
:
#29d
;
border-left-color
:
#29d
;
border-radius
:
50%
;
-webkit-animation
:
loading-bar-spinner
400ms
linear
infinite
;
-moz-animation
:
loading-bar-spinner
400ms
linear
infinite
;
-ms-animation
:
loading-bar-spinner
400ms
linear
infinite
;
-o-animation
:
loading-bar-spinner
400ms
linear
infinite
;
animation
:
loading-bar-spinner
400ms
linear
infinite
}
@-webkit-keyframes
loading-bar-spinner
{
0
%
{
-webkit-transform
:
rotate
(
0
);
transform
:
rotate
(
0
)}
100
%
{
-webkit-transform
:
rotate
(
360deg
);
transform
:
rotate
(
360deg
)}}
@-moz-keyframes
loading-bar-spinner
{
0
%
{
-moz-transform
:
rotate
(
0
);
transform
:
rotate
(
0
)}
100
%
{
-moz-transform
:
rotate
(
360deg
);
transform
:
rotate
(
360deg
)}}
@-o-keyframes
loading-bar-spinner
{
0
%
{
-o-transform
:
rotate
(
0
);
transform
:
rotate
(
0
)}
100
%
{
-o-transform
:
rotate
(
360deg
);
transform
:
rotate
(
360deg
)}}
@-ms-keyframes
loading-bar-spinner
{
0
%
{
-ms-transform
:
rotate
(
0
);
transform
:
rotate
(
0
)}
100
%
{
-ms-transform
:
rotate
(
360deg
);
transform
:
rotate
(
360deg
)}}
@keyframes
loading-bar-spinner
{
0
%
{
transform
:
rotate
(
0
)}
100
%
{
transform
:
rotate
(
360deg
)}}
\ No newline at end of file
apollo-demo/src/main/webapp/s/templates/list.html
0 → 100644
浏览文件 @
26b171fc
<div
ng-controller=
"DemoController as demoCtrl"
>
<h1>
Apollo Config Client Demo
</h1>
<div
id=
"env-wrapper"
>
<h3>
Current Client Side Registries:
</h3>
<table
class=
"table table-bordered table-hover"
>
<thead>
<tr
class=
"bg-info"
>
<th>
AppId
</th>
<th>
Version
</th>
</tr>
</thead>
<tbody>
<tr
ng-repeat=
"item in demoCtrl.registries"
>
<td>
{{item.appId}}
</td>
<td>
{{item.version}}
</td>
</tr.>
</tbody>
</table>
</div>
<div
id=
"load-config-wrapper"
>
<h3>
Load Config:
</h3>
<form
name=
"loadConfigForm"
class=
"form-horizontal"
novalidate
ng-submit=
"demoCtrl.queryConfig()"
>
<div
class=
"form-group"
ng-class=
"{ 'has-error' : loadConfigForm.configName.$invalid && loadConfigForm.configName.$dirty}"
>
<div
id=
"input-config-wrapper"
class=
"clearfix"
>
<label
class=
"col-sm-2 control-label"
>
Config Name
</label>
<div
class=
"col-sm-3"
>
<input
type=
"text"
name=
"configName"
class=
"form-control"
ng-model=
"demoCtrl.configQuery.configName"
autofocus=
"true"
required
autocomplete=
"off"
/>
<p
ng-show=
"loadConfigForm.configName.$invalid && loadConfigForm.configName.$dirty"
class=
"help-block"
>
Please fill
in the content
</p>
</div>
<input
type=
"submit"
class=
"btn btn-primary col-sm-1"
value=
"query"
ng-disabled=
"loadConfigForm.$pristine || loadConfigForm.$invalid"
/>
</div>
<div
id=
"config-value-wrapper"
class=
"clearfix"
>
<label
class=
"col-sm-2 control-label"
>
Config Value
</label>
<div
class=
"col-sm-3"
>
<textarea
rows=
"2"
cols=
"38"
readonly
class=
"form-control"
>
{{demoCtrl.configQuery.configValue}}
</textarea>
</div>
</div>
</div>
</form>
</div>
<!--<div id="refresh-config-wrapper">-->
<!--<h3>Refresh Config:</h3>-->
<!--<button type="button" class="btn btn-primary" ng-click="demoCtrl.refreshConfig()">Refresh Config</button>-->
<!--<div id="refresh-result">-->
<!--<strong>Changed Properties:</strong> {{demoCtrl.refreshResult}}-->
<!--</div>-->
<!--</div>-->
</div>
编辑
预览
Markdown
is supported
0%
请重试
或
添加新附件
.
添加附件
取消
You are about to add
0
people
to the discussion. Proceed with caution.
先完成此消息的编辑!
取消
想要评论请
注册
或
登录