ki 0.4.10 → 0.4.11

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
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>