ki 0.4.10 → 0.4.11

Sign up to get free protection for your applications and to get access to all the features.
Files changed (96) hide show
  1. checksums.yaml +4 -4
  2. data/Gemfile.lock +16 -8
  3. data/MIDDLEWARE.md +27 -7
  4. data/README.md +45 -2
  5. data/REALTIME.md +48 -0
  6. data/TODO.md +19 -0
  7. data/ki.gemspec +1 -0
  8. data/lib/ki.rb +5 -0
  9. data/lib/ki/base_request.rb +7 -0
  10. data/lib/ki/channel_manager.rb +58 -0
  11. data/lib/ki/ki.rb +1 -0
  12. data/lib/ki/ki_cli.rb +1 -1
  13. data/lib/ki/ki_config.rb +18 -2
  14. data/lib/ki/middleware/api_handler.rb +11 -16
  15. data/lib/ki/middleware/helpers/redirect_to_helper.rb +13 -0
  16. data/lib/ki/middleware/realtime.rb +81 -0
  17. data/lib/ki/model.rb +6 -4
  18. data/lib/ki/modules/restrictions.rb +4 -7
  19. data/lib/ki/orm.rb +38 -2
  20. data/lib/ki/utils/redirect_to_helper.rb +0 -0
  21. data/lib/ki/version.rb +1 -1
  22. data/spec/examples/json.northpole.ro/.bowerrc +3 -0
  23. data/spec/examples/json.northpole.ro/Gemfile +1 -0
  24. data/spec/examples/json.northpole.ro/bower.json +17 -0
  25. data/spec/examples/json.northpole.ro/config.ru +3 -0
  26. data/spec/examples/json.northpole.ro/config.yml +4 -0
  27. data/spec/examples/json.northpole.ro/config.yml.backup +18 -0
  28. data/spec/examples/json.northpole.ro/config/deploy.rb +2 -1
  29. data/spec/examples/json.northpole.ro/config/deploy/production.rb +4 -38
  30. data/spec/examples/json.northpole.ro/public/app/.bowerrc +3 -0
  31. data/spec/examples/json.northpole.ro/public/app/.gitignore +9 -0
  32. data/spec/examples/json.northpole.ro/public/app/.jshintrc +13 -0
  33. data/spec/examples/json.northpole.ro/public/app/.travis.yml +14 -0
  34. data/spec/examples/json.northpole.ro/public/app/LICENSE +22 -0
  35. data/spec/examples/json.northpole.ro/public/app/README.md +82 -0
  36. data/spec/examples/json.northpole.ro/public/app/bower.json +20 -0
  37. data/spec/examples/json.northpole.ro/public/app/e2e/pages/ContactUser.js +22 -0
  38. data/spec/examples/json.northpole.ro/public/app/e2e/pages/UserDetails.js +11 -0
  39. data/spec/examples/json.northpole.ro/public/app/e2e/pages/UserList.js +12 -0
  40. data/spec/examples/json.northpole.ro/public/app/e2e/protractor.conf.js +26 -0
  41. data/spec/examples/json.northpole.ro/public/app/e2e/scenarios/users.js +34 -0
  42. data/spec/examples/json.northpole.ro/public/app/gulpfile.js +104 -0
  43. data/spec/examples/json.northpole.ro/public/app/karma.conf.js +35 -0
  44. data/spec/examples/json.northpole.ro/public/app/package.json +30 -0
  45. data/spec/examples/json.northpole.ro/public/app/src/assets/svg/avatar-1.svg +11 -0
  46. data/spec/examples/json.northpole.ro/public/app/src/assets/svg/avatar-4.svg +16 -0
  47. data/spec/examples/json.northpole.ro/public/app/src/assets/svg/avatars.svg +244 -0
  48. data/spec/examples/json.northpole.ro/public/app/src/assets/svg/google_plus.svg +1 -0
  49. data/spec/examples/json.northpole.ro/public/app/src/assets/svg/hangouts.svg +1 -0
  50. data/spec/examples/json.northpole.ro/public/app/src/assets/svg/ic_fullscreen_48px.svg +4 -0
  51. data/spec/examples/json.northpole.ro/public/app/src/assets/svg/ic_fullscreen_exit_48px.svg +4 -0
  52. data/spec/examples/json.northpole.ro/public/app/src/assets/svg/ic_music_note_48px.svg +1 -0
  53. data/spec/examples/json.northpole.ro/public/app/src/assets/svg/ic_note_add_48px.svg +1 -0
  54. data/spec/examples/json.northpole.ro/public/app/src/assets/svg/ic_view_list_48px.svg +1 -0
  55. data/spec/examples/json.northpole.ro/public/app/src/assets/svg/icon.svg +1 -0
  56. data/spec/examples/json.northpole.ro/public/app/src/assets/svg/mail.svg +1 -0
  57. data/spec/examples/json.northpole.ro/public/app/src/assets/svg/manggo.svg +1095 -0
  58. data/spec/examples/json.northpole.ro/public/app/src/assets/svg/menu.svg +4 -0
  59. data/spec/examples/json.northpole.ro/public/app/src/assets/svg/phone.svg +1 -0
  60. data/spec/examples/json.northpole.ro/public/app/src/assets/svg/share.svg +3 -0
  61. data/spec/examples/json.northpole.ro/public/app/src/assets/svg/twitter.svg +1 -0
  62. data/spec/examples/json.northpole.ro/public/app/src/css/app.css +138 -0
  63. data/spec/examples/json.northpole.ro/public/app/src/css/app.css.map +7 -0
  64. data/spec/examples/json.northpole.ro/public/app/src/css/app.sass +145 -0
  65. data/spec/examples/json.northpole.ro/public/app/src/index.html +157 -0
  66. data/spec/examples/json.northpole.ro/public/app/src/js/MainController.coffee +167 -0
  67. data/spec/examples/json.northpole.ro/public/app/src/js/app.coffee +58 -0
  68. data/spec/examples/json.northpole.ro/public/app/src/js/blobs/BlobsController.coffee +115 -0
  69. data/spec/examples/json.northpole.ro/public/app/src/js/blobs/blobs.html +48 -0
  70. data/spec/examples/json.northpole.ro/public/app/src/js/tutorial/tutorial.html +15 -0
  71. data/spec/examples/json.northpole.ro/public/app/src/js/users/UserService.coffee +12 -0
  72. data/spec/examples/json.northpole.ro/public/app/src/js/users/Users.coffee +1 -0
  73. data/spec/examples/json.northpole.ro/public/app/src/js/users/users.html +8 -0
  74. data/spec/examples/json.northpole.ro/public/javascripts/jnorthpole.coffee +40 -7
  75. data/spec/examples/json.northpole.ro/public/javascripts/realtime.coffee +28 -0
  76. data/spec/examples/json.northpole.ro/public/{javascripts/music → music}/angular-youtube-embed.js +0 -0
  77. data/spec/examples/json.northpole.ro/public/music/index.html +126 -0
  78. data/spec/examples/json.northpole.ro/public/music/music.coffee +99 -0
  79. data/spec/examples/json.northpole.ro/public/music/music.sass +63 -0
  80. data/spec/examples/json.northpole.ro/public/stylesheets/app.sass +3 -0
  81. data/spec/examples/json.northpole.ro/views/faq.haml +7 -0
  82. data/spec/examples/json.northpole.ro/views/layout.haml +1 -0
  83. data/spec/examples/json.northpole.ro/views/music.haml +2 -0
  84. data/spec/examples/json.northpole.ro/views/websocket.haml +7 -0
  85. data/spec/lib/ki/channel_manager_spec.rb +82 -0
  86. data/spec/lib/ki/helpers_spec.rb +11 -0
  87. data/spec/lib/ki/ki_config_spec.rb +28 -0
  88. data/spec/lib/ki/middleware/admin_generator_spec.rb +8 -0
  89. data/spec/lib/ki/middleware/init_middleware_spec.rb +21 -0
  90. data/spec/lib/ki/middleware/realtime_spec.rb +96 -0
  91. data/spec/lib/ki/model_spec.rb +28 -7
  92. data/spec/lib/ki/modules/model_helper_spec.rb +31 -0
  93. data/spec/lib/ki/orm_spec.rb +26 -0
  94. metadata +211 -9
  95. data/spec/examples/json.northpole.ro/public/javascripts/docs.min.js +0 -16
  96. data/spec/examples/json.northpole.ro/views/awsum.haml +0 -108
@@ -0,0 +1,4 @@
1
+ <svg xmlns="http://www.w3.org/2000/svg" width="100%" height="100%" viewBox="0 0 24 24">
2
+ <path d="M0 0h24v24h-24z" fill="none"/>
3
+ <path d="M3 18h18v-2h-18v2zm0-5h18v-2h-18v2zm0-7v2h18v-2h-18z"/>
4
+ </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" 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,3 @@
1
+ <svg style="width:100%;height:100%" viewBox="0 0 24 24">
2
+ <path d="M21,11L14,4V8C7,9 4,14 3,19C5.5,15.5 9,13.9 14,13.9V18L21,11Z" />
3
+ </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>