ki 0.4.10 → 0.4.11
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/Gemfile.lock +16 -8
- data/MIDDLEWARE.md +27 -7
- data/README.md +45 -2
- data/REALTIME.md +48 -0
- data/TODO.md +19 -0
- data/ki.gemspec +1 -0
- data/lib/ki.rb +5 -0
- data/lib/ki/base_request.rb +7 -0
- data/lib/ki/channel_manager.rb +58 -0
- data/lib/ki/ki.rb +1 -0
- data/lib/ki/ki_cli.rb +1 -1
- data/lib/ki/ki_config.rb +18 -2
- data/lib/ki/middleware/api_handler.rb +11 -16
- data/lib/ki/middleware/helpers/redirect_to_helper.rb +13 -0
- data/lib/ki/middleware/realtime.rb +81 -0
- data/lib/ki/model.rb +6 -4
- data/lib/ki/modules/restrictions.rb +4 -7
- data/lib/ki/orm.rb +38 -2
- data/lib/ki/utils/redirect_to_helper.rb +0 -0
- data/lib/ki/version.rb +1 -1
- data/spec/examples/json.northpole.ro/.bowerrc +3 -0
- data/spec/examples/json.northpole.ro/Gemfile +1 -0
- data/spec/examples/json.northpole.ro/bower.json +17 -0
- data/spec/examples/json.northpole.ro/config.ru +3 -0
- data/spec/examples/json.northpole.ro/config.yml +4 -0
- data/spec/examples/json.northpole.ro/config.yml.backup +18 -0
- data/spec/examples/json.northpole.ro/config/deploy.rb +2 -1
- data/spec/examples/json.northpole.ro/config/deploy/production.rb +4 -38
- data/spec/examples/json.northpole.ro/public/app/.bowerrc +3 -0
- data/spec/examples/json.northpole.ro/public/app/.gitignore +9 -0
- data/spec/examples/json.northpole.ro/public/app/.jshintrc +13 -0
- data/spec/examples/json.northpole.ro/public/app/.travis.yml +14 -0
- data/spec/examples/json.northpole.ro/public/app/LICENSE +22 -0
- data/spec/examples/json.northpole.ro/public/app/README.md +82 -0
- data/spec/examples/json.northpole.ro/public/app/bower.json +20 -0
- data/spec/examples/json.northpole.ro/public/app/e2e/pages/ContactUser.js +22 -0
- data/spec/examples/json.northpole.ro/public/app/e2e/pages/UserDetails.js +11 -0
- data/spec/examples/json.northpole.ro/public/app/e2e/pages/UserList.js +12 -0
- data/spec/examples/json.northpole.ro/public/app/e2e/protractor.conf.js +26 -0
- data/spec/examples/json.northpole.ro/public/app/e2e/scenarios/users.js +34 -0
- data/spec/examples/json.northpole.ro/public/app/gulpfile.js +104 -0
- data/spec/examples/json.northpole.ro/public/app/karma.conf.js +35 -0
- data/spec/examples/json.northpole.ro/public/app/package.json +30 -0
- data/spec/examples/json.northpole.ro/public/app/src/assets/svg/avatar-1.svg +11 -0
- data/spec/examples/json.northpole.ro/public/app/src/assets/svg/avatar-4.svg +16 -0
- data/spec/examples/json.northpole.ro/public/app/src/assets/svg/avatars.svg +244 -0
- data/spec/examples/json.northpole.ro/public/app/src/assets/svg/google_plus.svg +1 -0
- data/spec/examples/json.northpole.ro/public/app/src/assets/svg/hangouts.svg +1 -0
- data/spec/examples/json.northpole.ro/public/app/src/assets/svg/ic_fullscreen_48px.svg +4 -0
- data/spec/examples/json.northpole.ro/public/app/src/assets/svg/ic_fullscreen_exit_48px.svg +4 -0
- data/spec/examples/json.northpole.ro/public/app/src/assets/svg/ic_music_note_48px.svg +1 -0
- data/spec/examples/json.northpole.ro/public/app/src/assets/svg/ic_note_add_48px.svg +1 -0
- data/spec/examples/json.northpole.ro/public/app/src/assets/svg/ic_view_list_48px.svg +1 -0
- data/spec/examples/json.northpole.ro/public/app/src/assets/svg/icon.svg +1 -0
- data/spec/examples/json.northpole.ro/public/app/src/assets/svg/mail.svg +1 -0
- data/spec/examples/json.northpole.ro/public/app/src/assets/svg/manggo.svg +1095 -0
- data/spec/examples/json.northpole.ro/public/app/src/assets/svg/menu.svg +4 -0
- data/spec/examples/json.northpole.ro/public/app/src/assets/svg/phone.svg +1 -0
- data/spec/examples/json.northpole.ro/public/app/src/assets/svg/share.svg +3 -0
- data/spec/examples/json.northpole.ro/public/app/src/assets/svg/twitter.svg +1 -0
- data/spec/examples/json.northpole.ro/public/app/src/css/app.css +138 -0
- data/spec/examples/json.northpole.ro/public/app/src/css/app.css.map +7 -0
- data/spec/examples/json.northpole.ro/public/app/src/css/app.sass +145 -0
- data/spec/examples/json.northpole.ro/public/app/src/index.html +157 -0
- data/spec/examples/json.northpole.ro/public/app/src/js/MainController.coffee +167 -0
- data/spec/examples/json.northpole.ro/public/app/src/js/app.coffee +58 -0
- data/spec/examples/json.northpole.ro/public/app/src/js/blobs/BlobsController.coffee +115 -0
- data/spec/examples/json.northpole.ro/public/app/src/js/blobs/blobs.html +48 -0
- data/spec/examples/json.northpole.ro/public/app/src/js/tutorial/tutorial.html +15 -0
- data/spec/examples/json.northpole.ro/public/app/src/js/users/UserService.coffee +12 -0
- data/spec/examples/json.northpole.ro/public/app/src/js/users/Users.coffee +1 -0
- data/spec/examples/json.northpole.ro/public/app/src/js/users/users.html +8 -0
- data/spec/examples/json.northpole.ro/public/javascripts/jnorthpole.coffee +40 -7
- data/spec/examples/json.northpole.ro/public/javascripts/realtime.coffee +28 -0
- data/spec/examples/json.northpole.ro/public/{javascripts/music → music}/angular-youtube-embed.js +0 -0
- data/spec/examples/json.northpole.ro/public/music/index.html +126 -0
- data/spec/examples/json.northpole.ro/public/music/music.coffee +99 -0
- data/spec/examples/json.northpole.ro/public/music/music.sass +63 -0
- data/spec/examples/json.northpole.ro/public/stylesheets/app.sass +3 -0
- data/spec/examples/json.northpole.ro/views/faq.haml +7 -0
- data/spec/examples/json.northpole.ro/views/layout.haml +1 -0
- data/spec/examples/json.northpole.ro/views/music.haml +2 -0
- data/spec/examples/json.northpole.ro/views/websocket.haml +7 -0
- data/spec/lib/ki/channel_manager_spec.rb +82 -0
- data/spec/lib/ki/helpers_spec.rb +11 -0
- data/spec/lib/ki/ki_config_spec.rb +28 -0
- data/spec/lib/ki/middleware/admin_generator_spec.rb +8 -0
- data/spec/lib/ki/middleware/init_middleware_spec.rb +21 -0
- data/spec/lib/ki/middleware/realtime_spec.rb +96 -0
- data/spec/lib/ki/model_spec.rb +28 -7
- data/spec/lib/ki/modules/model_helper_spec.rb +31 -0
- data/spec/lib/ki/orm_spec.rb +26 -0
- metadata +211 -9
- data/spec/examples/json.northpole.ro/public/javascripts/docs.min.js +0 -16
- data/spec/examples/json.northpole.ro/views/awsum.haml +0 -108
@@ -0,0 +1 @@
|
|
1
|
+
<?xml version="1.0" ?><svg height="100%" id="Layer_1" version="1.1" viewBox="0 0 512 512" width="100%" xml:space="preserve" xmlns="http://www.w3.org/2000/svg" xmlns:svg="http://www.w3.org/2000/svg"><defs id="defs12"/><g id="g4780"><rect height="512" id="rect2987" rx="64" ry="64" style="fill:#7b519d;fill-opacity:1;fill-rule:nonzero;stroke:none" width="512" x="0" y="0"/><g id="g15" transform="matrix(1.452588,0,0,1.452588,-115.17955,-97.147891)"><path d="m 369.75,304.701 c -8.397,-6.76 -17.371,-12.828 -26.204,-19.027 -17.617,-12.373 -33.73,-13.334 -46.876,6.572 -7.382,11.176 -17.716,11.665 -28.521,6.762 -29.789,-13.506 -52.791,-34.318 -66.265,-64.595 -5.96,-13.395 -5.882,-25.405 8.064,-34.879 7.383,-5.01 14.822,-10.939 14.227,-21.887 -0.777,-14.275 -35.437,-61.981 -49.124,-67.016 -5.664,-2.084 -11.304,-1.949 -17.066,-0.012 -32.095,10.793 -45.388,37.188 -32.657,68.441 37.98,93.242 104.82,158.154 196.828,197.773 5.245,2.256 11.073,3.158 14.024,3.967 20.947,0.211 45.486,-19.971 52.573,-40 6.823,-19.269 -7.597,-26.918 -19.003,-36.099 z" id="path17-6" style="fill:#ffffff;fill-rule:evenodd"/><path d="m 266.586,120.19 c 67.264,10.344 98.285,42.328 106.851,110.076 0.794,6.258 -1.537,15.674 7.391,15.848 9.331,0.178 7.083,-9.099 7.161,-15.363 0.789,-63.806 -54.846,-122.957 -119.458,-125.138 -4.875,0.701 -14.962,-3.362 -15.591,7.564 -0.419,7.367 8.073,6.156 13.646,7.013 z" id="path19-1" style="fill:#ffffff;fill-rule:evenodd"/><path d="m 279.743,138.766 c -6.47,-0.779 -15.011,-3.828 -16.523,5.15 -1.578,9.422 7.941,8.465 14.058,9.834 41.544,9.285 56.009,24.406 62.849,65.615 0.999,6.008 -0.986,15.359 9.224,13.809 7.567,-1.152 4.834,-9.168 5.467,-13.85 0.335,-39.563 -33.567,-75.574 -75.075,-80.558 z" id="path21-2" style="fill:#ffffff;fill-rule:evenodd"/><path d="m 283.558,171.118 c -4.319,0.107 -8.558,0.574 -10.145,5.189 -2.384,6.898 2.631,8.543 7.736,9.363 17.042,2.736 26.011,12.785 27.713,29.779 0.46,4.613 3.387,8.35 7.843,7.824 6.174,-0.736 6.732,-6.232 6.543,-11.451 0.305,-19.093 -21.275,-41.161 -39.69,-40.704 z" id="path23" style="fill:#ffffff;fill-rule:evenodd"/></g></g></svg>
|
@@ -0,0 +1 @@
|
|
1
|
+
<?xml version="1.0" ?><svg height="100%" id="Layer_1" version="1.1" viewBox="0 0 512 512" width="100%" xml:space="preserve" xmlns="http://www.w3.org/2000/svg" ><defs id="defs12"/><g id="g3763"><rect height="512" id="rect2987" rx="64" ry="64" style="fill:#00abf1;fill-opacity:1;fill-rule:nonzero;stroke:none" width="512" x="0" y="0"/><g id="layer1_2_" transform="matrix(1.418485,0,0,1.418485,-507.62367,-651.3318)"><path d="m 679.333,552.19 c -10.375,4.604 -21.521,7.711 -33.224,9.111 11.939,-7.16 21.114,-18.501 25.436,-32.004 -11.178,6.63 -23.563,11.439 -36.744,14.035 -10.547,-11.246 -25.588,-18.269 -42.223,-18.269 -31.953,0 -57.859,25.906 -57.859,57.855 0,4.533 0.513,8.946 1.501,13.186 -48.085,-2.419 -90.71,-25.446 -119.245,-60.454 -4.981,8.545 -7.833,18.48 -7.833,29.089 0,20.072 10.21,37.777 25.735,48.152 -9.479,-0.302 -18.398,-2.902 -26.204,-7.234 -0.003,0.238 -0.003,0.482 -0.003,0.726 0,28.029 19.944,51.41 46.407,56.734 -4.855,1.315 -9.968,2.027 -15.238,2.027 -3.733,0 -7.354,-0.373 -10.883,-1.041 7.36,22.98 28.728,39.709 54.039,40.176 -19.795,15.52 -44.742,24.77 -71.854,24.77 -4.665,0 -9.27,-0.275 -13.799,-0.816 25.609,16.422 56.018,26.001 88.688,26.001 106.412,0 164.606,-88.156 164.606,-164.606 0,-2.514 -0.058,-5.007 -0.165,-7.49 11.295,-8.159 21.11,-18.344 28.862,-29.948 l 0,0 z" id="path5_1_" style="fill:#ffffff"/></g></g></svg>
|
@@ -0,0 +1,138 @@
|
|
1
|
+
html, body {
|
2
|
+
font-family: "Roboto", sans-serif;
|
3
|
+
font-size: 14px;
|
4
|
+
height: 100%;
|
5
|
+
margin: 0px;
|
6
|
+
padding: 0px;
|
7
|
+
overflow: hidden; }
|
8
|
+
|
9
|
+
::-webkit-scrollbar {
|
10
|
+
display: none; }
|
11
|
+
|
12
|
+
[ng\:cloak], [ng-cloak], [data-ng-cloak], [x-ng-cloak], .ng-cloak, .x-ng-cloak {
|
13
|
+
display: none !important; }
|
14
|
+
|
15
|
+
.boobs {
|
16
|
+
background: url("//media.giphy.com/media/EFIwNN4wo9Tig/giphy.gif") no-repeat center center; }
|
17
|
+
|
18
|
+
.menu {
|
19
|
+
background-color: transparent;
|
20
|
+
border: none;
|
21
|
+
height: 38px;
|
22
|
+
margin: 16px;
|
23
|
+
width: 36px; }
|
24
|
+
|
25
|
+
md-list .md-button {
|
26
|
+
color: inherit;
|
27
|
+
font-weight: 500;
|
28
|
+
text-align: left;
|
29
|
+
width: 100%; }
|
30
|
+
|
31
|
+
.selected:hover {
|
32
|
+
background-color: #FFCDD2 !important; }
|
33
|
+
|
34
|
+
.selected {
|
35
|
+
background-color: #FFEBEE; }
|
36
|
+
|
37
|
+
md-sidenav md-list {
|
38
|
+
padding: 0px 0px 8px 0px; }
|
39
|
+
|
40
|
+
#content {
|
41
|
+
overflow: hidden; }
|
42
|
+
#content .md-button.contact {
|
43
|
+
background-color: transparent;
|
44
|
+
border: none;
|
45
|
+
width: 48px;
|
46
|
+
height: 48px;
|
47
|
+
margin: 8px auto 16px 0;
|
48
|
+
position: absolute;
|
49
|
+
top: 10px;
|
50
|
+
right: 40px; }
|
51
|
+
#content md-icon.avatar {
|
52
|
+
margin-top: 10px; }
|
53
|
+
#content .md-button.contact > md-icon {
|
54
|
+
fill: black;
|
55
|
+
width: 36px;
|
56
|
+
height: 36px; }
|
57
|
+
|
58
|
+
md-button.menuBtn > md-icon {
|
59
|
+
fill: white;
|
60
|
+
width: 24px;
|
61
|
+
height: 24px; }
|
62
|
+
|
63
|
+
#content .md-button.contact:active > md-icon {
|
64
|
+
background-color: #dadada;
|
65
|
+
border-radius: 75%;
|
66
|
+
padding: 4px;
|
67
|
+
transition: all 100ms ease-out 30ms; }
|
68
|
+
|
69
|
+
.content-wrapper {
|
70
|
+
position: relative; }
|
71
|
+
|
72
|
+
md-toolbar h1 {
|
73
|
+
font-size: 1.25em;
|
74
|
+
font-weight: 400; }
|
75
|
+
|
76
|
+
h1.center-it {
|
77
|
+
margin: auto; }
|
78
|
+
|
79
|
+
.avatar {
|
80
|
+
position: relative;
|
81
|
+
width: 128px;
|
82
|
+
height: 128px;
|
83
|
+
border: 1px solid #ddd;
|
84
|
+
border-radius: 50%;
|
85
|
+
display: inline-block;
|
86
|
+
overflow: hidden;
|
87
|
+
margin: 0px;
|
88
|
+
vertical-align: middle;
|
89
|
+
zoom: 0.7;
|
90
|
+
transform: translateZ(0);
|
91
|
+
-webkit-transform: scale(0.7);
|
92
|
+
-moz-transform: scale(0.7); }
|
93
|
+
|
94
|
+
md-bottom-sheet md-icon {
|
95
|
+
margin-right: 20px; }
|
96
|
+
|
97
|
+
span.name {
|
98
|
+
font-weight: bold;
|
99
|
+
font-size: 1.1em;
|
100
|
+
padding-left: 5px; }
|
101
|
+
|
102
|
+
.small-bot {
|
103
|
+
padding-top: 6px !important;
|
104
|
+
padding-bottom: 2px !important; }
|
105
|
+
|
106
|
+
.done {
|
107
|
+
text-decoration: line-through; }
|
108
|
+
|
109
|
+
form[name=userForm] md-input-container {
|
110
|
+
padding-left: 12px;
|
111
|
+
padding-right: 12px; }
|
112
|
+
|
113
|
+
input {
|
114
|
+
color: rgba(0, 0, 0, 0.87) !important; }
|
115
|
+
|
116
|
+
/* you can also define the transition style
|
117
|
+
* on the base class as well (.repeat-item) */
|
118
|
+
.repeat-item.ng-enter, .repeat-item.ng-leave {
|
119
|
+
-webkit-transition: 0.5s linear all;
|
120
|
+
transition: 0.5s linear all; }
|
121
|
+
.repeat-item.ng-enter {
|
122
|
+
opacity: 0; }
|
123
|
+
.repeat-item.ng-leave {
|
124
|
+
opacity: 1; }
|
125
|
+
.repeat-item.ng-leave.ng-leave-active {
|
126
|
+
opacity: 0; }
|
127
|
+
.repeat-item.ng-enter.ng-enter-active {
|
128
|
+
opacity: 1; }
|
129
|
+
|
130
|
+
.delete {
|
131
|
+
float: right; }
|
132
|
+
|
133
|
+
label.add-new {
|
134
|
+
white-space: nowrap;
|
135
|
+
overflow: hidden;
|
136
|
+
text-overflow: ellipsis; }
|
137
|
+
|
138
|
+
/*# sourceMappingURL=app.css.map */
|
@@ -0,0 +1,7 @@
|
|
1
|
+
{
|
2
|
+
"version": 3,
|
3
|
+
"mappings": "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",
|
4
|
+
"sources": ["app.sass"],
|
5
|
+
"names": [],
|
6
|
+
"file": "app.css"
|
7
|
+
}
|
@@ -0,0 +1,145 @@
|
|
1
|
+
html, body
|
2
|
+
font-family: 'Roboto', sans-serif
|
3
|
+
font-size: 14px
|
4
|
+
height: 100%
|
5
|
+
margin: 0px
|
6
|
+
padding: 0px
|
7
|
+
overflow: hidden
|
8
|
+
|
9
|
+
::-webkit-scrollbar
|
10
|
+
display: none
|
11
|
+
|
12
|
+
[ng\:cloak], [ng-cloak], [data-ng-cloak], [x-ng-cloak], .ng-cloak, .x-ng-cloak
|
13
|
+
display: none !important
|
14
|
+
|
15
|
+
.boobs
|
16
|
+
background: url("//media.giphy.com/media/EFIwNN4wo9Tig/giphy.gif") no-repeat center center
|
17
|
+
|
18
|
+
.menu
|
19
|
+
background-color: transparent
|
20
|
+
border: none
|
21
|
+
height: 38px
|
22
|
+
margin: 16px
|
23
|
+
width: 36px
|
24
|
+
|
25
|
+
md-list .md-button
|
26
|
+
color: inherit
|
27
|
+
font-weight: 500
|
28
|
+
text-align: left
|
29
|
+
width: 100%
|
30
|
+
// &.selected
|
31
|
+
// color: #03a9f4
|
32
|
+
|
33
|
+
.selected:hover
|
34
|
+
background-color: #FFCDD2 !important
|
35
|
+
|
36
|
+
.selected
|
37
|
+
background-color: #FFEBEE
|
38
|
+
|
39
|
+
md-sidenav md-list
|
40
|
+
padding: 0px 0px 8px 0px
|
41
|
+
|
42
|
+
#content
|
43
|
+
overflow: hidden
|
44
|
+
.md-button.contact
|
45
|
+
background-color: transparent
|
46
|
+
border: none
|
47
|
+
width: 48px
|
48
|
+
height: 48px
|
49
|
+
margin: 8px auto 16px 0
|
50
|
+
position: absolute
|
51
|
+
top: 10px
|
52
|
+
right: 40px
|
53
|
+
md-icon.avatar
|
54
|
+
margin-top: 10px
|
55
|
+
.md-button.contact > md-icon
|
56
|
+
fill: black
|
57
|
+
width: 36px
|
58
|
+
height: 36px
|
59
|
+
|
60
|
+
md-button.menuBtn > md-icon
|
61
|
+
fill: white
|
62
|
+
width: 24px
|
63
|
+
height: 24px
|
64
|
+
|
65
|
+
#content
|
66
|
+
.md-button.contact:active > md-icon
|
67
|
+
background-color: #dadada
|
68
|
+
border-radius: 75%
|
69
|
+
padding: 4px
|
70
|
+
transition: all 100ms ease-out 30ms
|
71
|
+
// img
|
72
|
+
// display: block
|
73
|
+
// height: auto
|
74
|
+
// max-width: 500px
|
75
|
+
|
76
|
+
.content-wrapper
|
77
|
+
position: relative
|
78
|
+
|
79
|
+
md-toolbar h1
|
80
|
+
font-size: 1.250em
|
81
|
+
font-weight: 400
|
82
|
+
|
83
|
+
h1.center-it
|
84
|
+
margin: auto
|
85
|
+
|
86
|
+
.avatar
|
87
|
+
position: relative
|
88
|
+
width: 128px
|
89
|
+
height: 128px
|
90
|
+
border: 1px solid #ddd
|
91
|
+
border-radius: 50%
|
92
|
+
display: inline-block
|
93
|
+
overflow: hidden
|
94
|
+
margin: 0px
|
95
|
+
vertical-align: middle
|
96
|
+
zoom: 0.70
|
97
|
+
transform: translateZ(0)
|
98
|
+
-webkit-transform: scale(0.7)
|
99
|
+
-moz-transform: scale(0.7)
|
100
|
+
|
101
|
+
md-bottom-sheet md-icon
|
102
|
+
margin-right: 20px
|
103
|
+
|
104
|
+
span.name
|
105
|
+
font-weight: bold
|
106
|
+
font-size: 1.1em
|
107
|
+
padding-left: 5px
|
108
|
+
|
109
|
+
.small-bot
|
110
|
+
padding-top: 6px !important
|
111
|
+
padding-bottom: 2px !important
|
112
|
+
|
113
|
+
.done
|
114
|
+
text-decoration: line-through
|
115
|
+
|
116
|
+
form[name=userForm] md-input-container
|
117
|
+
padding-left: 12px
|
118
|
+
padding-right: 12px
|
119
|
+
|
120
|
+
input
|
121
|
+
color: rgba(0,0,0,0.87) !important
|
122
|
+
|
123
|
+
/* you can also define the transition style
|
124
|
+
* on the base class as well (.repeat-item)
|
125
|
+
|
126
|
+
.repeat-item
|
127
|
+
&.ng-enter, &.ng-leave
|
128
|
+
-webkit-transition: 0.5s linear all
|
129
|
+
transition: 0.5s linear all
|
130
|
+
&.ng-enter
|
131
|
+
opacity: 0
|
132
|
+
&.ng-leave
|
133
|
+
&.ng-leave-active
|
134
|
+
opacity: 0
|
135
|
+
opacity: 1
|
136
|
+
&.ng-enter.ng-enter-active
|
137
|
+
opacity: 1
|
138
|
+
|
139
|
+
.delete
|
140
|
+
float: right
|
141
|
+
|
142
|
+
label.add-new
|
143
|
+
white-space: nowrap
|
144
|
+
overflow: hidden
|
145
|
+
text-overflow: ellipsis
|
@@ -0,0 +1,157 @@
|
|
1
|
+
<!DOCTYPE html>
|
2
|
+
<html lang="en" ng-app="app">
|
3
|
+
<head>
|
4
|
+
<title>{{myConfig.title}}</title>
|
5
|
+
|
6
|
+
<meta charset="utf-8">
|
7
|
+
<meta http-equiv="X-UA-Compatible" content="IE=edge">
|
8
|
+
<meta name="description" content="">
|
9
|
+
<meta name="viewport" content="initial-scale=1, maximum-scale=1, user-scalable=no" />
|
10
|
+
|
11
|
+
<link rel='stylesheet' href='//fonts.googleapis.com/css?family=Roboto:400,500,700,400italic'>
|
12
|
+
<link rel="stylesheet" href="./css/vendor.css"/>
|
13
|
+
<link rel="stylesheet" href="./css/app.css"/>
|
14
|
+
|
15
|
+
</head>
|
16
|
+
|
17
|
+
<body layout="row" layout-fill ng-controller="MainController as ul" ng-cloak>
|
18
|
+
|
19
|
+
<md-sidenav class="site-sidenav md-sidenav-left md-whiteframe-z2" md-component-id="left" md-is-locked-open="false">
|
20
|
+
|
21
|
+
<md-toolbar class="md-whiteframe-z1">
|
22
|
+
<h1 class="center-it">accounts</h1>
|
23
|
+
</md-toolbar>
|
24
|
+
|
25
|
+
<md-list>
|
26
|
+
<md-list-item ng-repeat="it in ul.users">
|
27
|
+
<md-button ng-click="ul.selectUser(it)" ng-class="{'selected' : it.api_key === user.api_key }">
|
28
|
+
<md-icon md-svg-icon="svg-1" class="avatar"></md-icon>
|
29
|
+
{{ul.user.api_key}}
|
30
|
+
{{it.api_key}}
|
31
|
+
</md-button>
|
32
|
+
</md-list-item>
|
33
|
+
</md-list>
|
34
|
+
|
35
|
+
<md-button class="md-fab md-primary md-fab-bottom-right" aria-label="Use Android" ng-click="ul.showAdvanced($event)">
|
36
|
+
<md-icon md-svg-icon="person_add"></md-icon>
|
37
|
+
</md-button>
|
38
|
+
|
39
|
+
</md-sidenav>
|
40
|
+
|
41
|
+
<div flex layout="column" tabIndex="-1" role="main" class="md-whiteframe-z2">
|
42
|
+
|
43
|
+
<md-toolbar layout="row" class="md-whiteframe-z1" layout-align="start center">
|
44
|
+
<md-button class="menu" ng-click="ul.toggleList()" aria-label="Show User List">
|
45
|
+
<md-icon md-svg-icon="menu"></md-icon>
|
46
|
+
</md-button>
|
47
|
+
<h1>{{myConfig.title}}</h1>
|
48
|
+
</md-toolbar>
|
49
|
+
|
50
|
+
<md-content id="content" ng-view flex layout="column" layout-fill></md-content>
|
51
|
+
</div>
|
52
|
+
|
53
|
+
<!-- TODO: templates are here for fast loading. A mechanism is needed to keep sanity -->
|
54
|
+
<script type="text/ng-template" id="./js/templates/contactSheet.html">
|
55
|
+
<md-bottom-sheet class="md-list md-has-header">
|
56
|
+
|
57
|
+
<!-- <md-subheader> -->
|
58
|
+
<!-- Contact <span class="name">{{ cp.json.text }}</span>: -->
|
59
|
+
<!-- </md-subheader> -->
|
60
|
+
|
61
|
+
<md-list>
|
62
|
+
<md-item ng-repeat="item in cp.actions">
|
63
|
+
<md-button ng-click="cp.submitContact(item)" id="item_{{$index}}">
|
64
|
+
<md-icon md-svg-icon="{{ item.icon }}"></md-icon>
|
65
|
+
{{item.name}}
|
66
|
+
</md-button>
|
67
|
+
</md-item>
|
68
|
+
</md-list>
|
69
|
+
|
70
|
+
</md-bottom-sheet>
|
71
|
+
</script>
|
72
|
+
<script type="text/ng-template" id="./js/templates/dropdown.tmpl.html">
|
73
|
+
<md-menu md-position-mode="target-right target">
|
74
|
+
<md-button aria-label="Open cog menu" class="md-icon-button" ng-click="$mdOpenMenu($event)">
|
75
|
+
<md-icon md-menu-origin md-svg-icon="cog"></md-icon>
|
76
|
+
</md-button>
|
77
|
+
<md-menu-content width="3" >
|
78
|
+
|
79
|
+
<md-menu-item>
|
80
|
+
<md-button ng-click="fullscreen(item)">
|
81
|
+
<div layout="row">
|
82
|
+
<p flex>fullscreen</p>
|
83
|
+
<md-icon md-menu-align-target md-svg-icon="fullscreen" style="margin: auto 3px auto 0;"></md-icon>
|
84
|
+
</div>
|
85
|
+
</md-button>
|
86
|
+
</md-menu-item>
|
87
|
+
|
88
|
+
<md-menu-item>
|
89
|
+
<md-button ng-click="toggleType(item)">
|
90
|
+
<div layout="row">
|
91
|
+
<p flex>toggle view</p>
|
92
|
+
<md-icon md-menu-align-target md-svg-icon="share" style="margin: auto 3px auto 0;"></md-icon>
|
93
|
+
</div>
|
94
|
+
</md-button>
|
95
|
+
</md-menu-item>
|
96
|
+
|
97
|
+
<md-menu-item>
|
98
|
+
<md-button ng-click="showContactOptions($event, item)">
|
99
|
+
<div layout="row">
|
100
|
+
<p flex>delete</p>
|
101
|
+
<md-icon md-menu-align-target md-svg-icon="delete" style="margin: auto 3px auto 0;"></md-icon>
|
102
|
+
</div>
|
103
|
+
</md-button>
|
104
|
+
</md-menu-item>
|
105
|
+
|
106
|
+
</md-menu-content>
|
107
|
+
</md-menu>
|
108
|
+
</script>
|
109
|
+
<script type="text/ng-template" id="./js/templates/dialog1.tmpl.html">
|
110
|
+
<md-dialog aria-label="mango (fruit)">
|
111
|
+
<md-toolbar>
|
112
|
+
<div class="md-toolbar-tools">
|
113
|
+
<h2>connect account</h2>
|
114
|
+
<span flex></span>
|
115
|
+
<md-button class="md-icon-button" ng-click="cancel()">
|
116
|
+
<md-icon md-svg-icon="clear" aria-label="Close dialog"></md-icon>
|
117
|
+
</md-button>
|
118
|
+
</div>
|
119
|
+
</md-toolbar>
|
120
|
+
<md-dialog-content>
|
121
|
+
<form name="userForm">
|
122
|
+
<md-input-container>
|
123
|
+
<label>api key</label>
|
124
|
+
<input ng-model="user.api_key" ng-required>
|
125
|
+
</md-input-container>
|
126
|
+
<md-input-container>
|
127
|
+
<label>secret</label>
|
128
|
+
<input ng-model="user.secret" ng-required>
|
129
|
+
</md-input-container>
|
130
|
+
<div class="md-actions" layout="row">
|
131
|
+
<md-button ng-click="register()" style="margin-right:20px;">
|
132
|
+
Register
|
133
|
+
</md-button>
|
134
|
+
<md-button ng-click="connect()" style="margin-right:20px;">
|
135
|
+
Connect
|
136
|
+
</md-button>
|
137
|
+
</div>
|
138
|
+
</form>
|
139
|
+
</md-dialog-content>
|
140
|
+
</md-dialog>
|
141
|
+
</script>
|
142
|
+
|
143
|
+
<script src="./js/vendor.js"></script>
|
144
|
+
|
145
|
+
<script src="/javascripts/jnorthpole.js"></script>
|
146
|
+
|
147
|
+
<script src="./js/app.js"></script>
|
148
|
+
|
149
|
+
<script src="./js/MainController.js"></script>
|
150
|
+
|
151
|
+
<script src="./js/users/Users.js"></script>
|
152
|
+
<script src="./js/users/UserService.js"></script>
|
153
|
+
|
154
|
+
<script src="./js/blobs/BlobsController.js"></script>
|
155
|
+
|
156
|
+
</body>
|
157
|
+
</html>
|