ng">

BIN
resources/android/splash/drawable-land-xhdpi-screen.png


BIN
resources/android/splash/drawable-land-xxhdpi-screen.png


BIN
resources/android/splash/drawable-land-xxxhdpi-screen.png


BIN
resources/android/splash/drawable-port-hdpi-screen.png


BIN
resources/android/splash/drawable-port-ldpi-screen.png


BIN
resources/android/splash/drawable-port-mdpi-screen.png


BIN
resources/android/splash/drawable-port-xhdpi-screen.png


BIN
resources/android/splash/drawable-port-xxhdpi-screen.png


BIN
resources/android/splash/drawable-port-xxxhdpi-screen.png


BIN
resources/icon.png


BIN
resources/ios/icon/iTunesArtwork.png


BIN
resources/ios/icon/iTunesArtwork@2x.png


BIN
resources/ios/icon/icon-40.png


BIN
resources/ios/icon/icon-40@2x.png


BIN
resources/ios/icon/icon-40@3x.png


BIN
resources/ios/icon/icon-50.png


BIN
resources/ios/icon/icon-50@2x.png


BIN
resources/ios/icon/icon-60.png


BIN
resources/ios/icon/icon-60@2x.png


BIN
resources/ios/icon/icon-60@3x.png


BIN
resources/ios/icon/icon-72.png


BIN
resources/ios/icon/icon-72@2x.png


BIN
resources/ios/icon/icon-76.png


BIN
resources/ios/icon/icon-76@2x.png


BIN
resources/ios/icon/icon-83.5@2x.png


BIN
resources/ios/icon/icon-Small.png


BIN
resources/ios/icon/icon-Small@2x.png


BIN
resources/ios/icon/icon-small-1.png


BIN
resources/ios/icon/icon-small@2x-1.png


BIN
resources/ios/icon/icon-small@3x.png


BIN
resources/ios/icon/icon.png


BIN
resources/ios/icon/icon@2x.png


BIN
resources/ios/splash/Default-568h@2x~iphone.png


BIN
resources/ios/splash/Default-667h.png


BIN
resources/ios/splash/Default-736h.png


BIN
resources/ios/splash/Default-Landscape-736h.png


BIN
resources/ios/splash/Default-Landscape@2x~ipad.png


BIN
resources/ios/splash/Default-Landscape~ipad.png


BIN
resources/ios/splash/Default-Portrait@2x~ipad.png


BIN
resources/ios/splash/Default-Portrait~ipad.png


BIN
resources/ios/splash/Default@2x~iphone.png


BIN
resources/ios/splash/Default~iphone.png


BIN
resources/splash.png


+ 22 - 0
scss/ionic.app.scss

@@ -0,0 +1,22 @@
1
+/*
2
+To customize the look and feel of Ionic, you can override the variables
3
+in ionic's _variables.scss file.
4
+
5
+For example, you might change some of the default colors:
6
+
7
+$light:                           #fff !default;
8
+$stable:                          #f8f8f8 !default;
9
+$positive:                        #387ef5 !default;
10
+$calm:                            #11c1f3 !default;
11
+$balanced:                        #33cd5f !default;
12
+$energized:                       #ffc900 !default;
13
+$assertive:                       #ef473a !default;
14
+$royal:                           #886aea !default;
15
+$dark:                            #444 !default;
16
+*/
17
+
18
+// The path for our ionicons font files, relative to the built CSS in www/css
19
+$ionicons-font-path: "../lib/ionic/fonts" !default;
20
+@import "www/lib/ionic/scss/ionic";
21
+@import "www/lib/font-awesome/scss/font-awesome";  
22
+

BIN
www.zip


File diff suppressed because it is too large
+ 12007 - 0
www/css/ionic.app.css


File diff suppressed because it is too large
+ 1 - 0
www/css/ionic.app.min.css


BIN
www/css/lively-bg.png


+ 138 - 0
www/css/style.css

@@ -0,0 +1,138 @@
1
+/* Empty. Add your own CSS if you like */
2
+.custom-icon .icon-badge {
3
+  position: absolute;
4
+  top: 3px;
5
+  right: 0px;
6
+  font-size: 8px;
7
+  padding: 2px 6px;
8
+}
9
+ion-content iframe {
10
+    width:100%;
11
+}
12
+.facebook {
13
+    background-color:#3b5998;
14
+    color:#fff;
15
+}
16
+.social-button:hover {
17
+    color:#fff;
18
+}
19
+.ig {
20
+    background-color:#517fa4;
21
+    color:#fff;
22
+}
23
+.center-block {
24
+    display:block;
25
+    margin:0 auto;
26
+
27
+    width:100%;
28
+}
29
+.center-block img {
30
+}
31
+.lively-bg {
32
+    background: url("./lively-bg.png") no-repeat top left;
33
+    background-size:cover;
34
+}
35
+.lively-bg .input-label {
36
+    color:#fff;
37
+    font-weight:bold;
38
+}
39
+.lively-bg .item-input {
40
+    background:none;
41
+    color:#fff;
42
+    border-top:none;
43
+}
44
+.img-padding {
45
+    padding:10px 20px;
46
+}
47
+.lively-bg .item-input input[type=text],
48
+.lively-bg .item-input input[type=password] 
49
+{
50
+    color:#fff;
51
+
52
+}
53
+.lively-bg .item {
54
+    background:none;
55
+}
56
+.label-content {
57
+    color:#fff;
58
+    font-size:larger;
59
+    font-weight:bold;
60
+}
61
+.borderless {
62
+    border:none;
63
+}
64
+.no-padding a.item-content {
65
+    padding: 0px;
66
+    border: none;
67
+}
68
+
69
+ion-item.no-padding.item {
70
+    border: none;
71
+}
72
+
73
+.list.card {
74
+    box-shadow: none;
75
+	margin-right:0px;
76
+	margin-left:0px;
77
+}
78
+.category {
79
+	background-color:#000;
80
+	color:#fff;
81
+	display:inline-block;
82
+	padding:5px 10px;
83
+}
84
+h2.title {
85
+    margin-top: 10px;
86
+    font-size: larger;
87
+}
88
+ion-content.lively.scroll-content.ionic-scroll.has-header {
89
+    top: 20px;
90
+}
91
+ion-list#lively-menu {}
92
+
93
+#lively-menu ion-item.item {
94
+    color: #fff;
95
+    background-color: #343434;
96
+    border-color: #565656;
97
+}
98
+
99
+#lively-menu a.item-content {
100
+    background-color: #343434;
101
+}
102
+i.icon-perspective {
103
+	background: url('../img/perspective.png') no-repeat center left;
104
+	background-size: contain;
105
+	width: 33px;	
106
+}
107
+hr.zig, hr.zag {
108
+  border: none;
109
+  height: 30px;
110
+  margin: 0 0px;
111
+}
112
+
113
+hr.zig{
114
+  background: linear-gradient(-135deg, #FFF 20px, rgba(0, 0, 0, 0) 0) 0 5px, linear-gradient(135deg, #FFF 20px, rgba(0, 0, 0, 0) 0) 0 5px;
115
+  background-color: rgba(0, 0, 0, 0);
116
+  background-position: center bottom;
117
+  background-repeat: repeat-x;
118
+  background-size: 20px 40px;
119
+  z-index: 100;
120
+  position: relative;
121
+}
122
+
123
+hr.zag {
124
+  background: linear-gradient(-135deg, #eee 20px, rgba(0, 0, 0, 0) 0) 0 5px, linear-gradient(135deg, #eee 20px, #FFF 0) 0 5px;
125
+  background-color: rgba(0, 0, 0, 0);
126
+  background-position: center bottom;
127
+  background-repeat: repeat-x;
128
+  background-size: 20px 40px;
129
+  z-index: 50;
130
+  margin-top: -28px;
131
+}
132
+.author-avatar {
133
+    width:60px;
134
+    height:60px;
135
+    border-radius: 50%;
136
+}
137
+.post-body { font-size:120%; }
138
+img { max-width:100%; }

BIN
www/img/Icon-Facebook.png


BIN
www/img/big-logo.png


BIN
www/img/default.png


BIN
www/img/ionic.png


BIN
www/img/lively-bg.png


BIN
www/img/logo.png


BIN
www/img/perspective.png


BIN
www/img/star.png


+ 38 - 0
www/index.html

@@ -0,0 +1,38 @@
1
+<!DOCTYPE html>
2
+<html>
3
+  <head>
4
+    <meta charset="utf-8">
5
+    <meta name="viewport" content="initial-scale=1, maximum-scale=1, user-scalable=no, width=device-width">
6
+    <title></title>
7
+    <!--
8
+    <link href="lib/ionic/css/ionic.css" rel="stylesheet"> -->
9
+    <link href="css/ionic.app.css" rel="stylesheet">
10
+    <link href="css/style.css" rel="stylesheet">
11
+    <link href="lib/Ionicons/css/ionicons.css">
12
+    <!-- 
13
+    <link href="lib/font-awesome/css/font-awesome.css"> -->
14
+
15
+
16
+    <!-- ionic/angularjs js -->
17
+    <script src="lib/ionic/js/ionic.bundle.js"></script>
18
+    <!-- cordova script (this will be a 404 during development) -->
19
+    <script src="lib/ngCordova/dist/ng-cordova.js"></script>
20
+    
21
+    <script src="cordova.js"></script>
22
+    <script type="text/javascript" charset="utf-8">
23
+    var env = "prod";
24
+    </script>
25
+    <!-- your app's js -->
26
+    <script src="lib/humanize/humanize.js"></script>
27
+    <script src="lib/angularjs-humanize/src/angular-humanize.js"></script>
28
+    <script src="lib/jsSHA/src/sha1.js"></script>
29
+	<script src="lib/ng-cordova-oauth/dist/ng-cordova-oauth.js"></script>
30
+    <script src="http://cdn.mcot.net/publicscript/js/filters.js"></script>
31
+    <script src="js/app.js"></script>
32
+    <script src="js/controllers.js"></script>
33
+  </head>
34
+
35
+  <body ng-app="starter">
36
+    <ion-nav-view></ion-nav-view>
37
+  </body>
38
+</html>

+ 579 - 0
www/js/app.js

@@ -0,0 +1,579 @@
1
+// Ionic Starter App
2
+
3
+// angular.module is a global place for creating, registering and retrieving Angular modules
4
+// 'starter' is the name of this angular module example (also set in a <body> attribute in index.html)
5
+// the 2nd parameter is an array of 'requires'
6
+// 'starter.controllers' is found in controllers.js
7
+var db;
8
+angular.module('starter', ['ionic', 'ngCordova', 'ngCordovaOauth',  'starter.controllers'])
9
+.run(function($ionicPlatform, $cordovaSQLite) {
10
+  $ionicPlatform.ready(function() {
11
+    // Hide the accessory bar by default (remove this to show the accessory bar above the keyboard
12
+    // for form inputs)
13
+    if (window.cordova && window.cordova.plugins.Keyboard) {
14
+      cordova.plugins.Keyboard.hideKeyboardAccessoryBar(true);
15
+      cordova.plugins.Keyboard.disableScroll(true);
16
+
17
+    }
18
+    if (window.StatusBar) {
19
+      // org.apache.cordova.statusbar required
20
+      StatusBar.styleDefault();
21
+    }
22
+	if (window.cordova) {
23
+	    try {
24
+	        db = $cordovaSQLite.openDB({
25
+	            name: "tna.db",
26
+	            location: 'default'
27
+	        });
28
+	    } catch (error) {
29
+	        alert(error);
30
+	    }
31
+	    $cordovaSQLite.execute(db, 'CREATE TABLE IF NOT EXISTS Messages (id INTEGER PRIMARY KEY AUTOINCREMENT, message TEXT)');
32
+	    $cordovaSQLite.execute(db, 'CREATE TABLE IF NOT EXISTS Personal(key TEXT PRIMARY KEY, value TEXT)');
33
+	}
34
+ });
35
+})
36
+.filter('humanize', function(){
37
+    return function humanize(number) {
38
+        if(number < 1000) {
39
+            return number;
40
+        }
41
+        var si = ['K', 'M', 'G', 'T', 'P', 'H'];
42
+        var exp = Math.floor(Math.log(number) / Math.log(1000));
43
+        var result = number / Math.pow(1000, exp);
44
+        result = (result % 1 > (1 / Math.pow(1000, exp - 1))) ? result.toFixed(2) : result.toFixed(0);
45
+        return result + si[exp - 1];
46
+    };
47
+})
48
+.filter('get_url', ['IMG_URI', function(IMG_URI){
49
+    return function(url) {
50
+        return IMG_URI + url;
51
+    };
52
+}])
53
+.filter('map_link',[function(){
54
+    return function(geocode) {
55
+        var isIOS = ionic.Platform.isIOS();
56
+        var isAndroid = ionic.Platform.isAndroid();
57
+        if( isIOS ) {
58
+            return "maps://?q="+geocode;
59
+        }
60
+        if( isAnroid ) {
61
+            return "geo:"+geocode;
62
+        }
63
+    };
64
+}])
65
+.filter('titleCase', function() {
66
+    return function(input) {
67
+      input = input || '';
68
+      return input.replace(/\w\S*/g, function(txt){return txt.charAt(0).toUpperCase() + txt.substr(1).toLowerCase();});
69
+    };
70
+  })
71
+.filter('get_last_array', function(){
72
+    return function(arr) {
73
+        if( arr.length > 0 ){
74
+            var v  = arr[arr.length-1];
75
+            if( v == ""){
76
+                return "Untitled";
77
+            }else {
78
+                return v;
79
+            }
80
+        } else
81
+            return "Untitled";
82
+    };
83
+})
84
+.value('THROTTLE_MILLISECONDS', 4000)
85
+//.constant('API_URI', 'http://localhost:5050')
86
+.constant('API_URI', 'http://mcotn-api.simplico.net')
87
+//.constant('IMG_URI', 'http://simplico.net:5060')
88
+.constant('IMG_URI', 'http://mcotn-backend.simplico.net')
89
+//.constant('GEN_USER_API_URI', 'http://localhost:5052')
90
+.constant('GEN_USER_API_URI', 'http://mcotn-simplitic.simplico.net')
91
+.constant('SEARCH_API', '/api/v1.0/search?collection=posts')
92
+.constant('SHARE_API', '/api/v1.0/share')
93
+.constant('USER_API', '/api/v1.0/users_social')
94
+.constant('CMS_USER_API', '/api/v1.0/users')
95
+.constant('SETTING_API', '/api/v1.0/setting')
96
+.constant('FAV_API', '/api/v1.0/fav')
97
+.constant('NOTI_API', '/api/v1.0/noti')
98
+.constant('AUTH_API', '/auth')
99
+.constant('PAGE_LIMIT', 10)
100
+.constant('DB', 'lively.db')
101
+.constant('PUBLIC_TOKEN', 'eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJuYW1lIjoicHVibGljIiwicm9sZXMiOlsicHVibGljIl0sImV4cCI6MTczNDE2NTcxMCwiaWF0IjoxNDc0OTY1NzEwLCJuYmYiOjE0NzQ5NjU3MTAsImlkZW50aXR5IjoiNTdlOWVmMjZjMjU0ZmQ4N2Q3ZmQ4MzM2In0.-9fcm5s8qYbdqBDUX7cZJ5J3AX91fe6VrCLs_S-_eBU')
102
+.config(function($stateProvider, $urlRouterProvider, $cordovaInAppBrowserProvider, $ionicConfigProvider) {
103
+  var defaultOptions = {
104
+      location: 'no',
105
+      clearcache: 'no',
106
+      toolbar: 'yes'
107
+  };
108
+$ionicConfigProvider.backButton.previousTitleText(false).text('');
109
+  $cordovaInAppBrowserProvider.setDefaultOptions(defaultOptions);
110
+ $stateProvider
111
+
112
+    .state('app', {
113
+    url: '/app',
114
+    abstract: true,
115
+    templateUrl: 'templates/menu.html',
116
+    controller: 'AppCtrl'
117
+  })
118
+
119
+  .state('app.search', {
120
+    url: '/search',
121
+    views: {
122
+      'menuContent': {
123
+        templateUrl: 'templates/search.html',
124
+        controller: 'SearchCtrl'
125
+      }
126
+    }
127
+  })
128
+
129
+  .state('app.login', {
130
+    url: '/login',
131
+    views: {
132
+        'menuContent': {
133
+            templateUrl: 'templates/login.html',
134
+            controller: 'LoginCtrl'
135
+        }
136
+    }
137
+  })
138
+  .state('app.view', {
139
+    url: '/view/:id',
140
+    views: {
141
+      'menuContent': {
142
+        templateUrl: 'templates/view.html',
143
+        controller: 'ViewCtrl'
144
+      }
145
+    }
146
+  })
147
+
148
+  .state('app.browse', {
149
+      url: '/browse',
150
+      views: {
151
+        'menuContent': {
152
+          templateUrl: 'templates/browse.html'
153
+        }
154
+      }
155
+    })
156
+    .state('app.playlists', {
157
+      url: '/playlists',
158
+      views: {
159
+        'menuContent': {
160
+          templateUrl: 'templates/playlists.html',
161
+          controller: 'PlaylistsCtrl'
162
+        }
163
+      }
164
+    })
165
+    .state('app.settings', {
166
+      url: '/settings',
167
+      cache: false,
168
+      views: {
169
+        'menuContent': {
170
+          templateUrl: 'templates/settings.html',
171
+          controller: 'SettingCtrl'
172
+        }
173
+      }
174
+    })
175
+
176
+    .state('app.index', {
177
+      url: '/index',
178
+      views: {
179
+        'menuContent': {
180
+          templateUrl: 'templates/index_page.html',
181
+          controller: 'IndexPageCtrl'
182
+        }
183
+      }
184
+    })
185
+    .state('app.fav', {
186
+      url: '/fav',
187
+      cache: false,
188
+      views: {
189
+        'menuContent': {
190
+          templateUrl: 'templates/index_page.html',
191
+          controller: 'FavCtrl'
192
+        }
193
+      }
194
+    })
195
+    .state('app.byauthor', {
196
+        url: '/byauthor/:uid',
197
+      views: {
198
+        'menuContent': {
199
+          templateUrl: 'templates/byauthor.html',
200
+          controller: 'ByAuthorCtrl'
201
+        }
202
+      }
203
+    })
204
+    .state('app.cat', {
205
+        url: '/cat/:catname',
206
+      views: {
207
+        'menuContent': {
208
+          templateUrl: 'templates/index_page.html',
209
+          controller: 'ListPageCtrl'
210
+        }
211
+      }
212
+    })
213
+    .state('app.nearby', {
214
+        url: '/nearby',
215
+        cache: false,
216
+      views: {
217
+        'menuContent': {
218
+          templateUrl: 'templates/nearby.html',
219
+          controller: 'NearbyCtrl'
220
+        }
221
+      }
222
+    })
223
+
224
+  .state('app.single', {
225
+    url: '/playlists/:playlistId',
226
+    views: {
227
+      'menuContent': {
228
+        templateUrl: 'templates/playlist.html',
229
+        controller: 'PlaylistCtrl'
230
+      }
231
+    }
232
+  });
233
+  // if none of the above states are matched, use this as the fallback
234
+  $urlRouterProvider.otherwise('/app/index');
235
+})
236
+.service('mcotcms', function($http, $httpParamSerializer, API_URI, SEARCH_API, PAGE_LIMIT, SHARE_API, USER_API,GEN_USER_API_URI, AUTH_API, $cordovaSQLite, SETTING_API, FAV_API, NOTI_API, CMS_USER_API) {
237
+
238
+    this.all_posts = function(){
239
+        console.log("all posts");
240
+		return $http({
241
+            method: 'GET',
242
+            url: API_URI + SEARCH_API
243
+		});
244
+    }
245
+    this.get_share = function(id){
246
+        var params = {
247
+            'id': id,
248
+            'action': 'FETCH'
249
+        };
250
+
251
+        var qs = $httpParamSerializer(params);
252
+		return $http({
253
+            method: 'POST',
254
+            url: GEN_USER_API_URI + SHARE_API,
255
+            data: params
256
+		});
257
+    }
258
+    this.update_share = function(id){
259
+        var params = {
260
+            'id': id,
261
+            'action': 'update'
262
+        };
263
+
264
+        var qs = $httpParamSerializer(params);
265
+		return $http({
266
+            method: 'POST',
267
+            url: GEN_USER_API_URI + SHARE_API,
268
+            data: params
269
+		});
270
+    }
271
+    this.clear_data = function(){
272
+        console.log("clear data");
273
+        window.localStorage.clear();
274
+
275
+    }
276
+    this.load_data = function(){
277
+	    return $cordovaSQLite.execute(db, 'SELECT * FROM Messages ORDER BY id DESC');
278
+    }
279
+    this.load_personal_data = function(key){
280
+	    return $cordovaSQLite.execute(db, 'SELECT *  FROM Personal where key = ?', [key]);
281
+    }
282
+    this.get_settings = function(token){
283
+        var params = {
284
+            action: 'GET'
285
+        };
286
+        var qs = $httpParamSerializer(params);
287
+        return $http({
288
+            method: 'POST',
289
+            url: GEN_USER_API_URI + SETTING_API,
290
+            headers: {
291
+                Authorization: 'JWT '+token,
292
+            },
293
+            data: params
294
+        });
295
+    }
296
+    this.post_api = function(token, action, model){
297
+        var params = {
298
+            'model': model,
299
+            'action': action
300
+        };
301
+        return $http({
302
+            method: 'POST',
303
+            url: API_URI + "/api/v2.0/posts",
304
+            headers: {
305
+                Authorization: 'JWT '+token,
306
+            },
307
+            data: params
308
+        });
309
+    }
310
+    this.by_author = function(author_id){
311
+        var params = {
312
+            'id': author_id,
313
+        };
314
+        var qs = $httpParamSerializer(params);
315
+		return $http({
316
+            method: 'GET',
317
+            url: API_URI + CMS_USER_API + "?id=" + author_id,
318
+            data: params
319
+		});
320
+    }
321
+    this.more_on = function(oid, options){
322
+        var params = {
323
+            'method': 'moreon',
324
+            'id': oid,
325
+            /*
326
+            'query': {
327
+                'meta.location': {
328
+                    '$near': {
329
+                        '$geometry': {'type': "Point", 'coordinates':  [position.longitude, position.latitude]},
330
+                        '$maxDistance': 5000
331
+                    }
332
+                }
333
+            },*/
334
+            'type': options.type,
335
+            'version': 'short'
336
+
337
+        };
338
+        var qs = $httpParamSerializer(params);
339
+		return $http({
340
+            method: 'POST',
341
+            url: API_URI + SEARCH_API,
342
+            data: params
343
+		});
344
+    }
345
+    this.nearby = function(position, options){
346
+        var page = options.page;
347
+        var skip = page * PAGE_LIMIT;
348
+        var limit = PAGE_LIMIT;
349
+        var params = {
350
+            'query': {
351
+                'location': {
352
+                    '$near': {
353
+                        '$geometry': {'type': "Point", 'coordinates':  [position.longitude, position.latitude]},
354
+                        '$maxDistance': 5000
355
+                    }
356
+                }
357
+            },
358
+            'type': options.type,
359
+            'skip': skip,
360
+            'page': page,
361
+            'limit': limit,
362
+            'version': 'short'
363
+
364
+        };
365
+        var qs = $httpParamSerializer(params);
366
+		return $http({
367
+            method: 'POST',
368
+            url: API_URI + SEARCH_API,
369
+            data: params
370
+		});
371
+    }
372
+    this.save_settings = function(token, cats){
373
+        var params = {
374
+            'cats': cats,
375
+            'action': 'UPDATE'
376
+        };
377
+        var qs = $httpParamSerializer(params);
378
+        return $http({
379
+            method: 'POST',
380
+            url: GEN_USER_API_URI + SETTING_API,
381
+            headers: {
382
+                Authorization: 'JWT '+token,
383
+            },
384
+            data: params
385
+        });
386
+    }
387
+    this.get_fav  = function(token, options){
388
+
389
+        var page = options.page;
390
+        var skip = page * PAGE_LIMIT;
391
+        var limit = PAGE_LIMIT;
392
+        var params = {
393
+            'action': 'GET',
394
+            'type': options.type,
395
+            'skip': skip,
396
+            'page': page,
397
+            'limit': limit
398
+        };
399
+        var qs = $httpParamSerializer(params);
400
+        return $http({
401
+            method: 'POST',
402
+            url: GEN_USER_API_URI + FAV_API,
403
+            headers: {
404
+                Authorization: 'JWT '+token,
405
+            },
406
+            data: params
407
+        });
408
+    }
409
+    this.fetch_noti = function(token, options) {
410
+        var params = {
411
+            'action': 'FETCH',
412
+            'type': options.type,
413
+        };
414
+        var qs = $httpParamSerializer(params);
415
+        return $http({
416
+            method: 'POST',
417
+            url: GEN_USER_API_URI + NOTI_API,
418
+            headers: {
419
+                Authorization: 'JWT '+token,
420
+            },
421
+            data: params
422
+        });
423
+    }
424
+    this.add_fav = function(token, post_id, type){
425
+        var params = {
426
+            'post_id': post_id,
427
+            'action': 'ADD',
428
+            'type': type
429
+        };
430
+        var qs = $httpParamSerializer(params);
431
+        return $http({
432
+            method: 'POST',
433
+            url: GEN_USER_API_URI + FAV_API,
434
+            headers: {
435
+                Authorization: 'JWT '+token,
436
+            },
437
+            data: params
438
+        });
439
+    }
440
+    this.store_token = function(token){
441
+        var storage = window.localStorage;
442
+        console.log("token is ", token);
443
+        storage.setItem("token", token);
444
+        return $cordovaSQLite.execute(db, 'INSERT or REPLACE INTO Personal(key, value) VALUES (?, ?)', ['token', token]);
445
+    }
446
+
447
+    this.get_token  = function(){
448
+        return window.localStorage.getItem("token");
449
+    }
450
+    this.get_post_by_id = function(id){
451
+
452
+        var params = {
453
+            'id': id,
454
+            'version': 'full'
455
+        };
456
+        var qs = $httpParamSerializer(params);
457
+		return $http({
458
+            method: 'POST',
459
+            url: API_URI + SEARCH_API,
460
+            data: params
461
+		});
462
+    }
463
+
464
+    this.login = function(username, pass) {
465
+
466
+        var params = {
467
+            'username': username,
468
+            'password': pass
469
+        };
470
+        var qs = $httpParamSerializer(params);
471
+        return $http({
472
+            method: 'POST',
473
+            url: GEN_USER_API_URI + AUTH_API,
474
+            data: params
475
+        });
476
+    }
477
+    this.add_user = function(user_obj){
478
+        var params = {
479
+            'obj': user_obj,
480
+            'action': 'add'
481
+        };
482
+        var qs = $httpParamSerializer(params);
483
+        return $http({
484
+            method: 'POST',
485
+            url: GEN_USER_API_URI + USER_API,
486
+            data: params
487
+        });
488
+    }
489
+    this.add_user_by_form = function(user_obj){
490
+        var params = {
491
+            'obj': user_obj,
492
+            'action': 'register_by_form'
493
+        };
494
+        var qs = $httpParamSerializer(params);
495
+        return $http({
496
+            method: 'POST',
497
+            url: GEN_USER_API_URI + USER_API,
498
+            data: params
499
+        });
500
+    }
501
+    this.get_posts = function(option) {
502
+        var query = option.query;
503
+        var page = option.page;
504
+        var skip = page * PAGE_LIMIT;
505
+        var limit = PAGE_LIMIT;
506
+        var version = option.version;
507
+        var params = {
508
+            'query': query,
509
+            'page': page,
510
+            'skip': skip,
511
+            'limit': limit,
512
+            'version': version,
513
+			'sort': 'desc'
514
+        };
515
+        var qs = $httpParamSerializer(params);
516
+        console.log(qs);
517
+		return $http({
518
+            method: 'POST',
519
+            url: API_URI + SEARCH_API,
520
+            data: params
521
+		});
522
+    }
523
+
524
+})
525
+.directive('searchBar', [function () {
526
+	return {
527
+		scope: {
528
+			ngModel: '='
529
+		},
530
+		require: ['^ionNavBar', '?ngModel'],
531
+		restrict: 'E',
532
+		replace: true,
533
+		template: '<ion-nav-buttons side="right">'+
534
+						'<div class="searchBar">'+
535
+							'<div class="searchTxt" ng-show="ngModel.show">'+
536
+						  		'<div class="bgdiv"></div>'+
537
+						  		'<div class="bgtxt">'+
538
+						  			'<input type="text" placeholder="Procurar..." ng-model="ngModel.txt">'+
539
+						  		'</div>'+
540
+					  		'</div>'+
541
+						  	'<i class="icon placeholder-icon" ng-click="ngModel.txt=\'\';ngModel.show=!ngModel.show"></i>'+
542
+						'</div>'+
543
+					'</ion-nav-buttons>',
544
+
545
+		compile: function (element, attrs) {
546
+			var icon=attrs.icon
547
+					|| (ionic.Platform.isAndroid() && 'ion-android-search')
548
+					|| (ionic.Platform.isIOS()     && 'ion-ios7-search')
549
+					|| 'ion-search';
550
+			angular.element(element[0].querySelector('.icon')).addClass(icon);
551
+
552
+			return function($scope, $element, $attrs, ctrls) {
553
+				var navBarCtrl = ctrls[0];
554
+				$scope.navElement = $attrs.side === 'right' ? navBarCtrl.rightButtonsElement : navBarCtrl.leftButtonsElement;
555
+
556
+			};
557
+		},
558
+		controller: ['$scope','$ionicNavBarDelegate', function($scope,$ionicNavBarDelegate){
559
+			var title, definedClass;
560
+			$scope.$watch('ngModel.show', function(showing, oldVal, scope) {
561
+				if(showing!==oldVal) {
562
+					if(showing) {
563
+						if(!definedClass) {
564
+							var numicons=$scope.navElement.children().length;
565
+							angular.element($scope.navElement[0].querySelector('.searchBar')).addClass('numicons'+numicons);
566
+						}
567
+
568
+						title = $ionicNavBarDelegate.getTitle();
569
+						$ionicNavBarDelegate.setTitle('');
570
+					} else {
571
+						$ionicNavBarDelegate.setTitle(title);
572
+					}
573
+				} else if (!title) {
574
+					title = $ionicNavBarDelegate.getTitle();
575
+				}
576
+			});
577
+		}]
578
+	};
579
+}]);

+ 873 - 0
www/js/controllers.js

@@ -0,0 +1,873 @@
1
+angular.module('starter.controllers', ["angular-humanize", 'mcot.filters'])
2
+
3
+.controller('AppCtrl', function($scope, $ionicModal, $timeout, $cordovaFacebook, mcotcms, $cordovaSQLite, $location, $ionicHistory, $ionicPopup, $state, $ionicLoading, $cordovaLocalNotification, $rootScope, $interval, $cordovaOauth, $cordovaInAppBrowser, $http) {
4
+        $scope.data = {
5
+            bcount: 0
6
+        };
7
+        $scope.igLogin = function(){
8
+            $cordovaOauth.instagram("aede22fcf7a145779da9a3cd094069f5", ["basic"])
9
+                .then(function(success){
10
+                    console.log(success);
11
+                    var token = success.access_token;
12
+                    $http.get("https://api.instagram.com/v1/users/self/?access_token="+token)
13
+                        .then(function(success){
14
+                            console.log(success);
15
+                        }, function(error){
16
+                            console.log(error);
17
+                        });
18
+                },function(error){
19
+                    console.log(error);
20
+                });
21
+        };
22
+		$scope.twitterlogin = function(){
23
+			console.log("twitter login");
24
+			var api_key = "VNA6F7wAAwn10KJ7vqhdUPVzR"; //Enter your Consumer Key (API Key)
25
+			var api_secret = "bJDNQhpZPlScH45WuARaJtvv0fMTR68AVTI3VbsfImeht8tt3S"; // Enter your Consumer Secret (API Secret)
26
+			console.log("twitterlogin function got called");
27
+            /*
28
+			 var options = {
29
+			     location: 'yes',
30
+			     clearcache: 'yes',
31
+			     toolbar: 'no'
32
+			 };
33
+	$cordovaInAppBrowser.open('http://ngcordova.com', '_blank')
34
+	    .then(function(event) {
35
+	        // success
36
+	    })
37
+	    .catch(function(event) {
38
+	        // error
39
+	    });*/
40
+           /*
41
+			$cordovaOauth.twitter(api_key, api_secret).then(function(result) {
42
+			console.log(result);
43
+			}, function(error){
44
+				console.log(error);
45
+			});*/
46
+            $cordovaOauth.google("314112088577-mqifo59b09psg38fg5l3s27e8h2ihj2c.apps.googleusercontent.com", ["email"]).then(function(result) {
47
+                    console.log("Response Object -> " + JSON.stringify(result));
48
+            }, function(error) {
49
+                    console.log("Error -> " + error);
50
+            });
51
+		};
52
+ $rootScope.$on('$cordovaInAppBrowser:loaderror', function(e, event) {
53
+     console.log("load error");
54
+     console.log(e);
55
+     console.log(event);
56
+ });
57
+
58
+		$scope.authenticate = function(provider) {
59
+		    $auth.authenticate(provider);
60
+		};
61
+      /*
62
+        $interval(function() {
63
+            //$scope.fetchNotification();
64
+            $cordovaLocalNotification.schedule({
65
+                id: Math.floor(Date.now() / 1000),
66
+                title: 'test noti',
67
+                text: 'description',
68
+            }).then(function(result) {
69
+                console.log(result);
70
+            });
71
+            console.log("noti");
72
+        }, 5000);*/
73
+	    $scope.fetchNotification =  function(){
74
+            var token = mcotcms.get_token();
75
+            if( token !== null ){
76
+                mcotcms.fetch_noti(token, {type: 'post'})
77
+                    .then(function(success){
78
+                        console.log("fetch_noti");
79
+                        $scope.data.bcount = success.data.output.length;
80
+                        for(var i = 0; i < success.data.output.length; i++) {
81
+                            post = success.data.output[i];
82
+                            console.log("the post");
83
+                            console.log(post);
84
+                            $cordovaLocalNotification.schedule({
85
+                                id: post._id.$oid,
86
+                                title: post.title,
87
+                                text: post.description,
88
+                                data: {
89
+                                    oid: success.data.output[i]._id.$oid
90
+                                }
91
+                            }).then(function(result) {
92
+                                console.log(result);
93
+                            });
94
+                        }
95
+                    }, function(error){
96
+
97
+                    });
98
+            }
99
+        };
100
+        $scope.scheduleSingleNotification = function() {
101
+            var now = new Date().getTime();
102
+            var _10SecondsFromNow = new Date(now + 10 * 1000);
103
+            console.log("run notification");
104
+            /*
105
+			$cordovaLocalNotification.schedule({
106
+				id: 1,
107
+				title: 'Title here',
108
+				text: 'Text here',
109
+				at: _10SecondsFromNow
110
+			}).then(function(result) {
111
+				console.log(result);
112
+			});*/
113
+        };
114
+        $rootScope.$on('$cordovaLocalNotification:trigger',
115
+            function(event, notification, state) {
116
+                console.log("trigger");
117
+                console.log(event);
118
+                console.log(notification);
119
+                console.log(state);
120
+            });
121
+        $rootScope.$on('$cordovaLocalNotification:update',
122
+            function(event, notification, state) {
123
+                console.log("update");
124
+                console.log(event);
125
+                console.log(notification);
126
+                console.log(state);
127
+            });
128
+        $rootScope.$on('$cordovaLocalNotification:click',
129
+            function(event, notification, state) {
130
+                console.log("click");
131
+                console.log(event);
132
+                console.log(notification);
133
+                console.log(state);
134
+                var d = angular.fromJson(notification.data);
135
+                console.log(d);
136
+                $state.go("app.view", { id: d.oid});
137
+            });
138
+        $scope.loadData = function() {
139
+            //console.log(db);
140
+            console.log(window.localStorage);
141
+            console.log("load call");
142
+            mcotcms.load_personal_data("token")
143
+                .then(
144
+                    function(res) {
145
+
146
+                        if (res.rows.length > 0) {
147
+
148
+                            $scope.newMessage = res.rows.item(0);
149
+                            $scope.statusMessage = "Message loaded successful, cheers!";
150
+                        }
151
+                    },
152
+                    function(error) {
153
+                        $scope.statusMessage = "Error on loading: " + error.message;
154
+                    }
155
+                );
156
+        };
157
+        // With the new view caching in Ionic, Controllers are only called
158
+        // when they are recreated or on app start, instead of every page change.
159
+        // To listen for when this page is active (for example, to refresh data),
160
+        // listen for the $ionicView.enter event:
161
+        //$scope.$on('$ionicView.enter', function(e) {
162
+        //});
163
+
164
+        // Form data for the login modal
165
+        $scope.loginData = {};
166
+        $scope.signupData = {};
167
+        $scope.showAlert = function(title, text) {
168
+            var alertPopup = $ionicPopup.alert({
169
+                title: title,
170
+                template: text
171
+            });
172
+
173
+            alertPopup.then(function(res) {
174
+                console.log('Thank you for not eating my delicious ice cream cone');
175
+            });
176
+        };
177
+        $scope.logout = function() {
178
+            if (angular.isDefined($scope.modal))
179
+                $scope.modal.hide();
180
+            if (angular.isDefined($scope.signup_modal))
181
+                $scope.signup_modal.hide();
182
+
183
+            mcotcms.clear_data();
184
+            $ionicHistory.nextViewOptions({
185
+                disableBack: true
186
+            });
187
+            $state.go('app.index');
188
+
189
+            $cordovaFacebook.logout()
190
+                .then(function(success) {
191
+                    // success
192
+                    console.log("logout");
193
+                    console.log(success);
194
+                }, function(error) {
195
+                    // error
196
+                });
197
+        };
198
+        $scope.doSignUp = function() {
199
+
200
+            if ($scope.signupData.password == $scope.signupData.confirm_password) {
201
+                $scope.signupData.message = "Success";
202
+                mcotcms.add_user_by_form({
203
+                        email: $scope.signupData.email,
204
+                        password: $scope.signupData.password
205
+                    })
206
+                    .then(function(success) {
207
+                        console.log("add user ");
208
+                        //mcotcms.execute();
209
+                        //mcotcms.select();
210
+                        console.log(success);
211
+                        $scope.signup_modal.hide();
212
+                        $scope.$emit('requireLogin', {})
213
+                            /*
214
+						  $cordovaSQLite.execute(db, 'INSERT INTO Messages (message) VALUES (?)', ["tum"])
215
+						      .then(function(result) {
216
+						          $scope.statusMessage = "Message saved successful, cheers!";
217
+						      }, function(error) {
218
+						          $scope.statusMessage = "Error on saving: " + error.message;
219
+						      })*/
220
+                    }, function(error) {
221
+                        console.log("add erro user ");
222
+                        console.log(error);
223
+                        $scope.$emit("signupError", {
224
+                                msg: error.data.error
225
+                            })
226
+                            //console.log(error);
227
+                            //$scope.statusMessage = err.data.error;
228
+                            //console.log(err);
229
+                    });
230
+            } else {
231
+                $scope.signupData.message = "Not Matched";
232
+            }
233
+        };
234
+        $scope.getStatus = function() {
235
+            $cordovaFacebook.getLoginStatus()
236
+                .then(function(success) {
237
+                    console.log("get status");
238
+                    console.log(success);
239
+                    /*
240
+                    { authResponse: {
241
+                        userID: "12345678912345",
242
+                        accessToken: "kgkh3g42kh4g23kh4g2kh34g2kg4k2h4gkh3g4k2h4gk23h4gk2h34gk234gk2h34AndSoOn",
243
+                        session_Key: true,
244
+                        expiresIn: "5183738",
245
+                        sig: "..."
246
+                        },
247
+                        status: "connected"
248
+                    }
249
+                    */
250
+                }, function(error) {
251
+                    // error
252
+                });
253
+        };
254
+        $scope.fblogin = function() {
255
+            $cordovaFacebook.login(["public_profile", "email", "user_friends"])
256
+                .then(function(login_obj) {
257
+                    console.log("fb login");
258
+                    console.log(login_obj);
259
+                    $cordovaFacebook.api("me", ["public_profile"])
260
+                        .then(function(me_obj) {
261
+                            console.log("me");
262
+                            //console.log(me_obj);
263
+                            mcotcms.add_user({
264
+                                    'login': login_obj,
265
+                                    'me': me_obj
266
+                                })
267
+                                .then(function(result) {
268
+                                    console.log(" success add_user ");
269
+                                    console.log(result.data.token);
270
+                                    mcotcms.store_token(result.data.token)
271
+                                        .then(function(result) {
272
+                                            $scope.$emit('signinSuccess', {});
273
+                                        }, function(error) {
274
+                                            console.log(error);
275
+                                        });
276
+                                }, function(err) {
277
+                                    console.log(err);
278
+                                });
279
+
280
+                        }, function(error) {
281
+                            console.log("error fb");
282
+                        });
283
+
284
+                    // { id: "634565435",
285
+                    //   lastName: "bob"
286
+                    //   ...
287
+                    // }
288
+                }, function(error) {
289
+                    console.log("error fb");
290
+                });
291
+        };
292
+        // Create the login modal that we will use later
293
+        $ionicModal.fromTemplateUrl('templates/login.html', {
294
+            scope: $scope
295
+        }).then(function(modal) {
296
+            $scope.modal = modal;
297
+        });
298
+        $scope.openLoginDialog = function() {
299
+            console.log("modal");
300
+            console.log($scope.modal);
301
+        };
302
+        // Create the login modal that we will use later
303
+        $scope.$on('requireLogin', function(event, args) {
304
+            if( angular.isDefined($scope.modal)) {
305
+                $scope.modal.remove();
306
+            }
307
+            $ionicModal.fromTemplateUrl('templates/login.html', {
308
+                scope: $scope
309
+            }).then(function(modal) {
310
+
311
+                $scope.modal = modal;
312
+                $scope.modal.show();
313
+            });
314
+            //$scope.openLoginDialog();
315
+        });
316
+        $scope.$on('logoutEvent', function(event, args) {
317
+            $scope.logout();
318
+        });
319
+        $scope.$on('signinError', function(event, args) {
320
+            console.log("Sign In Error");
321
+            $scope.showAlert("Sign In Error", args.msg);
322
+        });
323
+        $scope.$on('showLoading', function(event, args) {
324
+            console.log("show loading");
325
+            $ionicLoading.show({
326
+                template: args.text
327
+            }).then(function() {
328
+                console.log("The loading indicator is now displayed");
329
+            });
330
+        });
331
+
332
+        $scope.$on('hideLoading', function(event, args) {
333
+            $ionicLoading.hide().then(function() {
334
+                console.log("The loading indicator is now hidden");
335
+            });
336
+        });
337
+        $scope.$on('signupError', function(event, args) {
338
+            console.log("Sign Up Error");
339
+            $scope.showAlert("Sign Up Error", args.msg);
340
+        });
341
+        $scope.$on('signinSuccess', function(event, args) {
342
+            console.log("Sign in success");
343
+            $state.go("app.index");
344
+            $scope.closeLogin();
345
+            $scope.closeSignUp();
346
+        });
347
+
348
+        $ionicModal.fromTemplateUrl('templates/signup.html', {
349
+            scope: $scope
350
+        }).then(function(su_modal) {
351
+            $scope.signup_modal = su_modal;
352
+        });
353
+
354
+        // Triggered in the login modal to close it
355
+        $scope.closeLogin = function() {
356
+            console.log("close sigin");
357
+            if(angular.isDefined($scope.modal))
358
+                $scope.modal.hide();
359
+
360
+            var token = mcotcms.get_token();
361
+
362
+            console.log(token);
363
+            if (token == 'null') {
364
+                console.log('null ?');
365
+                $ionicHistory.nextViewOptions({
366
+                    disableBack: true
367
+                });
368
+                $state.go('app.index');
369
+            }
370
+        };
371
+        $scope.closeSignUp = function() {
372
+            if( angular.isDefined($scope.signup_modal))
373
+                $scope.signup_modal.hide();
374
+            var token = mcotcms.get_token();
375
+            if (token == null) {
376
+                $ionicHistory.nextViewOptions({
377
+                    disableBack: true
378
+                });
379
+                $state.go('app.index');
380
+            }
381
+        };
382
+
383
+        // Open the login modal
384
+        $scope.login = function() {
385
+            $scope.modal.show();
386
+        };
387
+
388
+        // Perform the login action when the user submits the login form
389
+        $scope.doLogin = function() {
390
+            console.log('Doing login', $scope.loginData);
391
+
392
+            // Simulate a login delay. Remove this and replace with your login
393
+            // code if using a login system
394
+            mcotcms.login($scope.loginData.username, $scope.loginData.password)
395
+                .then(function(success) {
396
+                    console.log(success);
397
+                    mcotcms.store_token(success.data.access_token)
398
+                        .then(function(result) {
399
+                            console.log(result);
400
+                        }, function(error) {
401
+                            console.log(error);
402
+                        });
403
+                }, function(error) {
404
+                    $scope.$emit("signinError", {
405
+                        msg: error.data.description
406
+                    })
407
+                    console.log(error);
408
+                });
409
+            $timeout(function() {
410
+                $scope.closeLogin();
411
+            }, 1000);
412
+        };
413
+    })
414
+    .controller('RequireLoginCtrl', function($scope, mcotcms, $location) {
415
+        console.log("check login ...");
416
+        var token = mcotcms.get_token();
417
+        if (token == 'null' || token == null)  {
418
+            console.log("token null");
419
+            mcotcms.store_token(null);
420
+            $scope.$emit('requireLogin', {});
421
+        }
422
+
423
+    })
424
+    .controller('UtilCtrl', function($scope, mcotcms, $location) {
425
+
426
+        $scope.toDate = function(mongoDate) {
427
+          console.log(mongoDate)
428
+			if( angular.isDefined(mongoDate) ) {
429
+            	return new Date(mongoDate.$date);
430
+			}else {
431
+            	return new Date();
432
+			}
433
+        };
434
+		$scope.go = function ( path ) {
435
+			$location.path( path );
436
+		};
437
+        $scope.fav = function(post_id, type) {
438
+            var token = mcotcms.get_token();
439
+            mcotcms.add_fav(token, post_id, type)
440
+                .then(function(success) {
441
+                    console.log(success);
442
+                }, function(error) {
443
+                    console.log(error);
444
+                });
445
+        };
446
+    })
447
+    .controller('LoadMoreCtrl', function($scope, mcotcms, PAGE_LIMIT) {
448
+        $scope.current_page = 0;
449
+        $scope.is_empty = true;
450
+        $scope.moreDataCanBeLoaded = function() {
451
+            console.log("more data canbe loaded");
452
+            return $scope.is_empty == false;
453
+        };
454
+        $scope.firstLoad = function() {
455
+            console.log("load 1");
456
+            $scope.is_empty = true;
457
+            if (angular.isUndefined($scope.results)) {
458
+                $scope.results = [];
459
+            }
460
+            if (angular.isDefined($scope.special_action)) {
461
+                console.log("wait im");
462
+                if ($scope.special_action == "get_fav") {
463
+                    var the_query = mcotcms.get_fav($scope.token, {
464
+                        'page': $scope.current_page++,
465
+                        'type': 'post'
466
+                    });
467
+                } else if ($scope.special_action == "get_nearby") {
468
+                    console.log("get nearby");
469
+                    var the_query = mcotcms.nearby($scope.position, {
470
+                        'page': $scope.current_page++,
471
+                        'type': 'post'
472
+                    });
473
+                }
474
+            } else {
475
+                var the_query = mcotcms.get_posts({
476
+                    'query': $scope.query,
477
+                    'page': $scope.current_page++,
478
+                    'version': $scope.post_version
479
+                });
480
+            }
481
+            the_query.then(function successCallback(response) {
482
+                // this callback will be called asynchronously
483
+                // when the response is available
484
+                console.log("first load");
485
+                console.log(response.data)
486
+                if (response.data.output.length == 0) {
487
+                    $scope.is_empty = true;
488
+                    return;
489
+                }
490
+                var output = [];
491
+                // for(var i = 0; i < 10; i++ ){
492
+                output = output.concat(response.data.output);
493
+                //}
494
+                console.log("update results");
495
+                $scope.results = $scope.results.concat(output);
496
+                console.log($scope.results);
497
+                $scope.is_empty = false;
498
+                //$scope.$broadcast('scroll.infiniteScrollComplete');
499
+                //$scope.results = response.data.output;
500
+            }, function errorCallback(response) {
501
+                // called asynchronously if an error occurs
502
+                // or server returns response with an error status.
503
+            });
504
+        };
505
+        $scope.firstLoad();
506
+        $scope.loadMoreData = function() {
507
+            console.log("load more 2");
508
+            if ($scope.is_empty == true) {
509
+                return;
510
+            }
511
+            if (angular.isUndefined($scope.results)) {
512
+                console.log("recreate ");
513
+                $scope.results = [];
514
+            }
515
+            if (angular.isDefined($scope.special_action)) {
516
+                console.log("wait im");
517
+                if ($scope.special_action == "get_fav") {
518
+                    var the_query = mcotcms.get_fav($scope.token, {
519
+                        'page': $scope.current_page++,
520
+                        'type': 'post'
521
+                    });
522
+                } else if ($scope.special_action == "get_nearby") {
523
+                    var the_query = mcotcms.nearby($scope.position, {
524
+                        'page': $scope.current_page++,
525
+                        'type': 'post'
526
+                    });
527
+                }
528
+            } else {
529
+                var the_query = mcotcms.get_posts({
530
+                    'query': $scope.query,
531
+                    'page': $scope.current_page++,
532
+                    'version': $scope.post_version
533
+                })
534
+            }
535
+            the_query.then(function successCallback(response) {
536
+                // this callback will be called asynchronously
537
+                // when the response is available
538
+                console.log("... =>");
539
+                console.log(response.data.output.length);
540
+                if (response.data.output.length == 0) {
541
+                    $scope.is_empty = true;
542
+                    return;
543
+                }
544
+                console.log("not empty ");
545
+                var output = [];
546
+                /*
547
+                for(var i = 0; i < 10; i++ ){*/
548
+                output = output.concat(response.data.output);
549
+                /*}*/
550
+                console.log("update results");
551
+                $scope.results = $scope.results.concat(output);
552
+                $scope.is_empty = false;
553
+                $scope.$broadcast('scroll.infiniteScrollComplete');
554
+                //$scope.results = response.data.output;
555
+            }, function errorCallback(response) {
556
+                // called asynchronously if an error occurs
557
+                // or server returns response with an error status.
558
+            });
559
+        };
560
+        $scope.$on('$stateChangeSuccess', function() {
561
+            $scope.loadMoreData();
562
+        });
563
+    })
564
+    .controller('FavCtrl', function($scope, mcotcms, $controller) {
565
+        $scope.query = {};
566
+        $scope.post_version = "short";
567
+        $scope.special_action = "get_fav";
568
+        $controller('RequireLoginCtrl', {
569
+            $scope: $scope
570
+        });
571
+        $scope.token = mcotcms.get_token();
572
+        if ($scope.token != 'null') {
573
+            $controller('LoadMoreCtrl', {
574
+                $scope: $scope
575
+            });
576
+        }
577
+    })
578
+    .controller('ByAuthorCtrl', function($scope, $stateParams, $controller, mcotcms) {
579
+        console.log($stateParams);
580
+        $scope.catname = $stateParams.uid;
581
+        $scope.uid = $stateParams.uid;
582
+        $scope.query = { 'author': $stateParams.uid };
583
+        $scope.post_version = "short";
584
+		mcotcms.by_author($scope.uid)
585
+			.then(function(success){
586
+				console.log("author");
587
+				console.log(success);
588
+				$scope.by_author = success.data.output;
589
+			},function(error){
590
+			});
591
+        $controller('LoadMoreCtrl', {
592
+            $scope: $scope
593
+        });
594
+    })
595
+    .controller('NearbyCtrl', function($scope, mcotcms, $controller, $cordovaGeolocation, $ionicLoading) {
596
+        $scope.query = {};
597
+        var posOptions = {
598
+            timeout: 10000,
599
+            enableHighAccuracy: false
600
+        };
601
+        $scope.$emit("showLoading", {
602
+            text: "Getting Current Position"
603
+        });
604
+        $cordovaGeolocation
605
+            .getCurrentPosition(posOptions)
606
+            .then(function(position) {
607
+                var lat = position.coords.latitude
608
+                var long = position.coords.longitude
609
+                $scope.position = position.coords;
610
+                $scope.post_version = "short";
611
+                $scope.special_action = "get_nearby";
612
+                console.log(position.coords);
613
+                console.log("get nearby call");
614
+                $scope.$emit("hideLoading", {});
615
+                $controller('LoadMoreCtrl', {
616
+                    $scope: $scope
617
+                });
618
+            }, function(err) {
619
+                // error
620
+            });
621
+    })
622
+    .controller('PlaylistsCtrl', function($scope) {
623
+        $scope.playlists = [{
624
+            title: 'Reggae',
625
+            id: 1
626
+        }, {
627
+            title: 'Chill',
628
+            id: 2
629
+        }, {
630
+            title: 'Dubstep',
631
+            id: 3
632
+        }, {
633
+            title: 'Indie',
634
+            id: 4
635
+        }, {
636
+            title: 'Rap',
637
+            id: 5
638
+        }, {
639
+            title: 'Cowbell',
640
+            id: 6
641
+        }];
642
+        $scope.settingsList = [{
643
+            text: "Wireless",
644
+            checked: true
645
+        }, {
646
+            text: "GPS",
647
+            checked: false
648
+        }, {
649
+            text: "Bluetooth",
650
+            checked: false
651
+        }];
652
+    })
653
+    .controller('SettingCtrl', function($scope, mcotcms, $controller) {
654
+        $controller('RequireLoginCtrl', {
655
+            $scope: $scope
656
+        });
657
+        var token = mcotcms.get_token();
658
+        $scope.token = token;
659
+        $scope.openUserLink = function() {
660
+            window.open('http://mcot-simplitic.simplico.net/user_panel/'+$scope.token, '_system');
661
+        };
662
+        console.log("token ", token);
663
+        $scope.categories = [{
664
+            title: "nearme",
665
+            value: true
666
+        }, {
667
+            title: "Breaking News",
668
+            value: true
669
+        }, {
670
+            title: "ข่าวพาดหัว",
671
+            value: true
672
+        }, {
673
+            title: "health",
674
+            value: true
675
+        }, {
676
+            title: "fashion",
677
+            value: true
678
+        }, {
679
+            title: "perspective",
680
+            value: true
681
+        }, {
682
+            title: "idea",
683
+            value: true
684
+        }, {
685
+            title: "outlook",
686
+            value: true
687
+        }, {
688
+            title: "phototalk",
689
+            value: true
690
+        }, ];
691
+        $scope.$on('$destroy', function() {
692
+            console.log("leaving from setting");
693
+            console.log($scope.categories);
694
+            mcotcms.save_settings(token, $scope.categories);
695
+        });
696
+        mcotcms.get_settings(token)
697
+            .then(function(success) {
698
+                var cat_serv = success.data.output;
699
+                console.log(cat_serv);
700
+                for (var i in $scope.categories) {
701
+                    c = $scope.categories[i];
702
+                    console.log(cat_serv[c.title]);
703
+                    if (cat_serv[c.title] != true) {
704
+                        c.value = false;
705
+                    }
706
+                }
707
+            }, function(error) {
708
+                console.log("errror ..", error);
709
+                mcotcms.store_token(null);
710
+                //$scope.$emit("requireLogin", {});
711
+            });
712
+        $scope.logout = function() {
713
+            console.log("logout ...");
714
+            $scope.$emit('logoutEvent', {});
715
+        };
716
+    })
717
+    .controller('IndexPageCtrl', function($scope, mcotcms, $controller) {
718
+        $scope.query = { 'categories.text': 'TNA'};
719
+        $scope.post_version = "short";
720
+
721
+        $controller('UtilCtrl', {
722
+            $scope: $scope
723
+        });
724
+        $controller('LoadMoreCtrl', {
725
+            $scope: $scope
726
+        });
727
+        /*
728
+        mcotcms.all_posts()
729
+        .then(function successCallback(response) {
730
+            // this callback will be called asynchronously
731
+            // when the response is available
732
+            var output = [];
733
+            for(var i = 0; i < 10; i++ ){
734
+                output = output.concat(response.data.output);
735
+            }
736
+            $scope.results = output ;
737
+            //$scope.results = response.data.output;
738
+        }, function errorCallback(response) {
739
+            // called asynchronously if an error occurs
740
+            // or server returns response with an error status.
741
+        });*/
742
+
743
+    })
744
+
745
+.controller('PlaylistCtrl', function($scope, $stateParams) {})
746
+    .controller('LoginCtrl', function($scope, $stateParams, $cordovaFacebook) {
747
+        $scope.login = function() {
748
+            $cordovaFacebook.login(["public_profile", "email", "user_friends"])
749
+                .then(function(success) {
750
+                    console.log(success);
751
+                    // { id: "634565435",
752
+                    //   lastName: "bob"
753
+                    //   ...
754
+                    // }
755
+                }, function(error) {
756
+                    // error
757
+                });
758
+        };
759
+    })
760
+    .controller('ViewCtrl', function($scope, $stateParams, mcotcms, $cordovaDatePicker, $cordovaSocialSharing, $filter, $controller, $sce, PUBLIC_TOKEN) {
761
+        //var deviceType = (navigator.userAgent.match(/iPad/i))  == "iPad" ? "iPad" : (navigator.userAgent.match(/iPhone/i))  == "iPhone" ? "iPhone" : (navigator.userAgent.match(/Android/i)) == "Android" ? "Android" : (navigator.userAgent.match(/BlackBerry/i)) == "BlackBerry" ? "BlackBerry" : "null";
762
+        var isIOS = ionic.Platform.isIOS();
763
+        var isAndroid = ionic.Platform.isAndroid();
764
+        //console.log(deviceType);
765
+        console.log("is IOS ", isIOS);
766
+        console.log("is ANd ", isAndroid);
767
+
768
+        var id = $stateParams.id;
769
+
770
+        $controller('UtilCtrl', {
771
+            $scope: $scope
772
+        });
773
+        $scope.openMap = function(loc) {
774
+            window.open("https://www.google.com/maps?q="+loc[1]+","+loc[0],'_system');
775
+        };
776
+        mcotcms.get_share(id)
777
+            .then(function(success){
778
+                console.log(success);
779
+                $scope.shareCounts = success.data.output;
780
+            },function(error){
781
+            });
782
+        mcotcms.get_post_by_id(id)
783
+            .then(function successCallback(response) {
784
+                $scope.post = response.data.output[0];
785
+				$scope.post_body = $sce.trustAsHtml($scope.post.body);
786
+                mcotcms.by_author($scope.post['author'])
787
+                    .then(function(success){
788
+                        console.log("author");
789
+                        console.log(success);
790
+                        $scope.by_author = success.data.output;
791
+                    },function(error){
792
+                    });
793
+                mcotcms.post_api(PUBLIC_TOKEN, "LIST",  { query: {'categories.text': $scope.post.categories[$scope.post.categories.length - 1].text} })
794
+                    .then(function(success){
795
+                        $scope.more_ons = success.data.output;
796
+                    }, function(error){
797
+
798
+                    });
799
+            }, function errorCallback(response) {});
800
+
801
+        $scope.doSomething = function() {
802
+            var options = {
803
+                date: new Date(),
804
+                mode: 'date', // or 'time'
805
+                minDate: new Date() - 10000,
806
+                allowOldDates: true,
807
+                allowFutureDates: false,
808
+                doneButtonLabel: 'DONE',
809
+                doneButtonColor: '#F2F3F4',
810
+                cancelButtonLabel: 'CANCEL',
811
+                cancelButtonColor: '#000000'
812
+            };
813
+            $cordovaDatePicker.show(options).then(function(date) {
814
+                alert(date);
815
+            });
816
+        };
817
+
818
+        $scope.share = function() {
819
+            var link_url = "http://www.tnamcot.com/view/" + $scope.post._id.$oid;
820
+
821
+            $cordovaSocialSharing
822
+                //.share($scope.post.title + " | " + $scope.post.description + ' ' + link_url, null, null, link_url) // Share via native share sheet
823
+                .share(null, null, null, link_url) // Share via native share sheet
824
+                .then(function(result) {
825
+                    // Success!
826
+                    console.log("share result ", result);
827
+                    if (result == true) {
828
+                        console.log("share true !!");
829
+                        mcotcms.update_share($scope.post._id.$oid)
830
+                            .then(function successCallBack(response) {
831
+                                console.log("share ok");
832
+                            }, function errorCallback(response) {
833
+                                console.log("fail");
834
+                            });
835
+                    }
836
+                    console.log("Share completed? ", result.completed); // On Android apps mostly return false even while it's true
837
+                    console.log("Shared to app: ", result.app); // On Android result.app is currently empty. On iOS it's empty when sharing is cancelled (result.completed=false)
838
+                }, function(err) {
839
+                    // An error occured. Show a message to the user
840
+                    console.log("share error ", err);
841
+                });
842
+        };
843
+
844
+
845
+    })
846
+    .controller('ListPageCtrl', function($scope, $stateParams, $controller, mcotcms) {
847
+        console.log($stateParams);
848
+        $scope.catname = $stateParams.catname;
849
+        $scope.query = {'categories.text': $stateParams.catname};
850
+        $controller('LoadMoreCtrl', {
851
+            $scope: $scope
852
+        });
853
+    })
854
+    .controller('SearchCtrl', function($scope, $stateParams, $http, $ionicHistory, mcotcms, $controller) {
855
+        console.log("search ctrl");
856
+        $scope.search = "";
857
+        $scope.search2 = "";
858
+        $scope.query = {'categories.text': 'TNA'};
859
+        $scope.post_version = "short";
860
+        $controller('UtilCtrl', {
861
+            $scope: $scope
862
+        });
863
+        $controller('LoadMoreCtrl', {
864
+            $scope: $scope
865
+        });
866
+        $scope.change = function(v) {
867
+            $scope.query = {'title': {'$regex': v} };
868
+            $scope.results = [];
869
+            $scope.current_page = 0;
870
+            $scope.firstLoad();
871
+
872
+        };
873
+    });

+ 41 - 0
www/lib/Ionicons/.bower.json

@@ -0,0 +1,41 @@
1
+{
2
+  "ignore": [
3
+    "**/.*",
4
+    "builder",
5
+    "node_modules",
6
+    "bower_components",
7
+    "test",
8
+    "tests"
9
+  ],
10
+  "version": "2.0.1",
11
+  "name": "Ionicons",
12
+  "license": "MIT",
13
+  "authors": [
14
+    "Ben Sperry <ben@drifty.com>",
15
+    "Adam Bradley <adam@drifty.com>",
16
+    "Max Lynch <max@drifty.com>"
17
+  ],
18
+  "keywords": [
19
+    "fonts",
20
+    "icon font",
21
+    "icons",
22
+    "ionic",
23
+    "web font"
24
+  ],
25
+  "main": [
26
+    "css/ionicons.css",
27
+    "fonts/*"
28
+  ],
29
+  "homepage": "https://github.com/driftyco/ionicons",
30
+  "description": "Ionicons - free and beautiful icons from the creators of Ionic Framework",
31
+  "_release": "2.0.1",
32
+  "_resolution": {
33
+    "type": "version",
34
+    "tag": "v2.0.1",
35
+    "commit": "ecb4b806831005c25b97ed9089fbb1d7dcc0879c"
36
+  },
37
+  "_source": "https://github.com/driftyco/ionicons.git",
38
+  "_target": "^2.0.1",
39
+  "_originalSource": "ionicons",
40
+  "_direct": true
41
+}

+ 21 - 0
www/lib/Ionicons/LICENSE

@@ -0,0 +1,21 @@
1
+The MIT License (MIT)
2
+
3
+Copyright (c) 2014 Drifty (http://drifty.com/)
4
+
5
+Permission is hereby granted, free of charge, to any person obtaining a copy
6
+of this software and associated documentation files (the "Software"), to deal
7
+in the Software without restriction, including without limitation the rights
8
+to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
9
+copies of the Software, and to permit persons to whom the Software is
10
+furnished to do so, subject to the following conditions:
11
+
12
+The above copyright notice and this permission notice shall be included in
13
+all copies or substantial portions of the Software.
14
+
15
+THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
16
+IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
17
+FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
18
+AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
19
+LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
20
+OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
21
+THE SOFTWARE.

+ 31 - 0
www/lib/Ionicons/bower.json

@@ -0,0 +1,31 @@
1
+{
2
+    "ignore": [
3
+        "**/.*",
4
+        "builder",
5
+        "node_modules",
6
+        "bower_components",
7
+        "test",
8
+        "tests"
9
+    ],
10
+    "version": "2.0.0",
11
+    "name": "Ionicons",
12
+    "license": "MIT",
13
+    "authors": [
14
+        "Ben Sperry <ben@drifty.com>",
15
+        "Adam Bradley <adam@drifty.com>",
16
+        "Max Lynch <max@drifty.com>"
17
+    ],
18
+    "keywords": [
19
+        "fonts",
20
+        "icon font",
21
+        "icons",
22
+        "ionic",
23
+        "web font"
24
+    ],
25
+    "main": [
26
+        "css/ionicons.css",
27
+        "fonts/*"
28
+    ],
29
+    "homepage": "https://github.com/driftyco/ionicons",
30
+    "description": "Ionicons - free and beautiful icons from the creators of Ionic Framework"
31
+}

File diff suppressed because it is too large
+ 28009 - 0
www/lib/Ionicons/cheatsheet.html


+ 19 - 0
www/lib/Ionicons/component.json

@@ -0,0 +1,19 @@
1
+{
2
+    "repo": "driftyco/ionicons",
3
+    "development": {},
4
+    "version": "2.0.0",
5
+    "styles": [
6
+        "css/ionicons.css"
7
+    ],
8
+    "name": "Ionicons",
9
+    "dependencies": {},
10
+    "keywords": [],
11
+    "license": "MIT",
12
+    "fonts": [
13
+        "fonts/ionicons.eot",
14
+        "fonts/ionicons.svg",
15
+        "fonts/ionicons.ttf",
16
+        "fonts/ionicons.woff"
17
+    ],
18
+    "description": "The premium icon font for Ionic Framework."
19
+}

+ 36 - 0
www/lib/Ionicons/composer.json

@@ -0,0 +1,36 @@
1
+{
2
+    "name": "driftyco/ionicons",
3
+    "license": [
4
+        "MIT"
5
+    ],
6
+    "extra": {},
7
+    "authors": [
8
+        {
9
+            "homepage": "https://twitter.com/benjsperry",
10
+            "role": "Designer",
11
+            "name": "Ben Sperry",
12
+            "email": "ben@drifty.com"
13
+        },
14
+        {
15
+            "homepage": "https://twitter.com/adamdbradley",
16
+            "role": "Developer",
17
+            "name": "Adam Bradley",
18
+            "email": "adam@drifty.com"
19
+        },
20
+        {
21
+            "homepage": "https://twitter.com/maxlynch",
22
+            "role": "Developer",
23
+            "name": "Max Lynch",
24
+            "email": "max@drifty.com"
25
+        }
26
+    ],
27
+    "keywords": [
28
+        "fonts",
29
+        "icon font",
30
+        "icons",
31
+        "ionic",
32
+        "web font"
33
+    ],
34
+    "homepage": "http://ionicons.com/",
35
+    "description": "The premium icon font for Ionic Framework."
36
+}

File diff suppressed because it is too large
+ 1480 - 0
www/lib/Ionicons/css/ionicons.css


File diff suppressed because it is too large
+ 11 - 0
www/lib/Ionicons/css/ionicons.min.css


BIN
www/lib/Ionicons/fonts/ionicons.eot


File diff suppressed because it is too large
+ 2230 - 0
www/lib/Ionicons/fonts/ionicons.svg


BIN
www/lib/Ionicons/fonts/ionicons.ttf


BIN
www/lib/Ionicons/fonts/ionicons.woff


+ 27 - 0
www/lib/Ionicons/less/_ionicons-font.less

@@ -0,0 +1,27 @@
1
+// Ionicons Font Path
2
+// --------------------------
3
+
4
+@font-face {
5
+ font-family: @ionicons-font-family;
6
+ src:url("@{ionicons-font-path}/ionicons.eot?v=@{ionicons-version}");
7
+ src:url("@{ionicons-font-path}/ionicons.eot?v=@{ionicons-version}#iefix") format("embedded-opentype"),
8
+  url("@{ionicons-font-path}/ionicons.ttf?v=@{ionicons-version}") format("truetype"),
9
+  url("@{ionicons-font-path}/ionicons.woff?v=@{ionicons-version}") format("woff"),
10
+  url("@{ionicons-font-path}/ionicons.svg?v=@{ionicons-version}#Ionicons") format("svg");
11
+ font-weight: normal;
12
+ font-style: normal;
13
+}
14
+
15
+.ion {
16
+  display: inline-block;
17
+  font-family: @ionicons-font-family;
18
+  speak: none;
19
+  font-style: normal;
20
+  font-weight: normal;
21
+  font-variant: normal;
22
+  text-transform: none;
23
+  text-rendering: auto;
24
+  line-height: 1;
25
+  -webkit-font-smoothing: antialiased;
26
+  -moz-osx-font-smoothing: grayscale;
27
+}

File diff suppressed because it is too large
+ 1473 - 0
www/lib/Ionicons/less/_ionicons-icons.less


+ 747 - 0
www/lib/Ionicons/less/_ionicons-variables.less

@@ -0,0 +1,747 @@
1
+/*!
2
+Ionicons, v2.0.0
3
+Created by Ben Sperry for the Ionic Framework, http://ionicons.com/
4
+https://twitter.com/benjsperry  https://twitter.com/ionicframework
5
+MIT License: https://github.com/driftyco/ionicons
6
+*/
7
+// Ionicons Variables
8
+// --------------------------
9
+
10
+@ionicons-font-path: "../fonts";
11
+@ionicons-font-family: "Ionicons";
12
+@ionicons-version: "2.0.0";
13
+@ionicons-prefix: ion-;
14
+
15
+@ionicon-var-alert: "\f101";
16
+@ionicon-var-alert-circled: "\f100";
17
+@ionicon-var-android-add: "\f2c7";
18
+@ionicon-var-android-add-circle: "\f359";
19
+@ionicon-var-android-alarm-clock: "\f35a";
20
+@ionicon-var-android-alert: "\f35b";
21
+@ionicon-var-android-apps: "\f35c";
22
+@ionicon-var-android-archive: "\f2c9";
23
+@ionicon-var-android-arrow-back: "\f2ca";
24
+@ionicon-var-android-arrow-down: "\f35d";
25
+@ionicon-var-android-arrow-dropdown: "\f35f";
26
+@ionicon-var-android-arrow-dropdown-circle: "\f35e";
27
+@ionicon-var-android-arrow-dropleft: "\f361";
28
+@ionicon-var-android-arrow-dropleft-circle: "\f360";
29
+@ionicon-var-android-arrow-dropright: "\f363";
30
+@ionicon-var-android-arrow-dropright-circle: "\f362";
31
+@ionicon-var-android-arrow-dropup: "\f365";
32
+@ionicon-var-android-arrow-dropup-circle: "\f364";
33
+@ionicon-var-android-arrow-forward: "\f30f";
34
+@ionicon-var-android-arrow-up: "\f366";
35
+@ionicon-var-android-attach: "\f367";
36
+@ionicon-var-android-bar: "\f368";
37
+@ionicon-var-android-bicycle: "\f369";
38
+@ionicon-var-android-boat: "\f36a";
39
+@ionicon-var-android-bookmark: "\f36b";
40
+@ionicon-var-android-bulb: "\f36c";
41
+@ionicon-var-android-bus: "\f36d";
42
+@ionicon-var-android-calendar: "\f2d1";
43
+@ionicon-var-android-call: "\f2d2";
44
+@ionicon-var-android-camera: "\f2d3";
45
+@ionicon-var-android-cancel: "\f36e";
46
+@ionicon-var-android-car: "\f36f";
47
+@ionicon-var-android-cart: "\f370";
48
+@ionicon-var-android-chat: "\f2d4";
49
+@ionicon-var-android-checkbox: "\f374";
50
+@ionicon-var-android-checkbox-blank: "\f371";
51
+@ionicon-var-android-checkbox-outline: "\f373";
52
+@ionicon-var-android-checkbox-outline-blank: "\f372";
53
+@ionicon-var-android-checkmark-circle: "\f375";
54
+@ionicon-var-android-clipboard: "\f376";
55
+@ionicon-var-android-close: "\f2d7";
56
+@ionicon-var-android-cloud: "\f37a";
57
+@ionicon-var-android-cloud-circle: "\f377";
58
+@ionicon-var-android-cloud-done: "\f378";
59
+@ionicon-var-android-cloud-outline: "\f379";
60
+@ionicon-var-android-color-palette: "\f37b";
61
+@ionicon-var-android-compass: "\f37c";
62
+@ionicon-var-android-contact: "\f2d8";
63
+@ionicon-var-android-contacts: "\f2d9";
64
+@ionicon-var-android-contract: "\f37d";
65
+@ionicon-var-android-create: "\f37e";
66
+@ionicon-var-android-delete: "\f37f";
67
+@ionicon-var-android-desktop: "\f380";
68
+@ionicon-var-android-document: "\f381";
69
+@ionicon-var-android-done: "\f383";
70
+@ionicon-var-android-done-all: "\f382";
71
+@ionicon-var-android-download: "\f2dd";
72
+@ionicon-var-android-drafts: "\f384";
73
+@ionicon-var-android-exit: "\f385";
74
+@ionicon-var-android-expand: "\f386";
75
+@ionicon-var-android-favorite: "\f388";
76
+@ionicon-var-android-favorite-outline: "\f387";
77
+@ionicon-var-android-film: "\f389";
78
+@ionicon-var-android-folder: "\f2e0";
79
+@ionicon-var-android-folder-open: "\f38a";
80
+@ionicon-var-android-funnel: "\f38b";
81
+@ionicon-var-android-globe: "\f38c";
82
+@ionicon-var-android-hand: "\f2e3";
83
+@ionicon-var-android-hangout: "\f38d";
84
+@ionicon-var-android-happy: "\f38e";
85
+@ionicon-var-android-home: "\f38f";
86
+@ionicon-var-android-image: "\f2e4";
87
+@ionicon-var-android-laptop: "\f390";
88
+@ionicon-var-android-list: "\f391";
89
+@ionicon-var-android-locate: "\f2e9";
90
+@ionicon-var-android-lock: "\f392";
91
+@ionicon-var-android-mail: "\f2eb";
92
+@ionicon-var-android-map: "\f393";
93
+@ionicon-var-android-menu: "\f394";
94
+@ionicon-var-android-microphone: "\f2ec";
95
+@ionicon-var-android-microphone-off: "\f395";
96
+@ionicon-var-android-more-horizontal: "\f396";
97
+@ionicon-var-android-more-vertical: "\f397";
98
+@ionicon-var-android-navigate: "\f398";
99
+@ionicon-var-android-notifications: "\f39b";
100
+@ionicon-var-android-notifications-none: "\f399";
101
+@ionicon-var-android-notifications-off: "\f39a";
102
+@ionicon-var-android-open: "\f39c";
103
+@ionicon-var-android-options: "\f39d";
104
+@ionicon-var-android-people: "\f39e";
105
+@ionicon-var-android-person: "\f3a0";
106
+@ionicon-var-android-person-add: "\f39f";
107
+@ionicon-var-android-phone-landscape: "\f3a1";
108
+@ionicon-var-android-phone-portrait: "\f3a2";
109
+@ionicon-var-android-pin: "\f3a3";
110
+@ionicon-var-android-plane: "\f3a4";
111
+@ionicon-var-android-playstore: "\f2f0";
112
+@ionicon-var-android-print: "\f3a5";
113
+@ionicon-var-android-radio-button-off: "\f3a6";
114
+@ionicon-var-android-radio-button-on: "\f3a7";
115
+@ionicon-var-android-refresh: "\f3a8";
116
+@ionicon-var-android-remove: "\f2f4";
117
+@ionicon-var-android-remove-circle: "\f3a9";
118
+@ionicon-var-android-restaurant: "\f3aa";
119
+@ionicon-var-android-sad: "\f3ab";
120
+@ionicon-var-android-search: "\f2f5";
121
+@ionicon-var-android-send: "\f2f6";
122
+@ionicon-var-android-settings: "\f2f7";
123
+@ionicon-var-android-share: "\f2f8";
124
+@ionicon-var-android-share-alt: "\f3ac";
125
+@ionicon-var-android-star: "\f2fc";
126
+@ionicon-var-android-star-half: "\f3ad";
127
+@ionicon-var-android-star-outline: "\f3ae";
128
+@ionicon-var-android-stopwatch: "\f2fd";
129
+@ionicon-var-android-subway: "\f3af";
130
+@ionicon-var-android-sunny: "\f3b0";
131
+@ionicon-var-android-sync: "\f3b1";
132
+@ionicon-var-android-textsms: "\f3b2";
133
+@ionicon-var-android-time: "\f3b3";
134
+@ionicon-var-android-train: "\f3b4";
135
+@ionicon-var-android-unlock: "\f3b5";
136
+@ionicon-var-android-upload: "\f3b6";
137
+@ionicon-var-android-volume-down: "\f3b7";
138
+@ionicon-var-android-volume-mute: "\f3b8";
139
+@ionicon-var-android-volume-off: "\f3b9";
140
+@ionicon-var-android-volume-up: "\f3ba";
141
+@ionicon-var-android-walk: "\f3bb";
142
+@ionicon-var-android-warning: "\f3bc";
143
+@ionicon-var-android-watch: "\f3bd";
144
+@ionicon-var-android-wifi: "\f305";
145
+@ionicon-var-aperture: "\f313";
146
+@ionicon-var-archive: "\f102";
147
+@ionicon-var-arrow-down-a: "\f103";
148
+@ionicon-var-arrow-down-b: "\f104";
149
+@ionicon-var-arrow-down-c: "\f105";
150
+@ionicon-var-arrow-expand: "\f25e";
151
+@ionicon-var-arrow-graph-down-left: "\f25f";
152
+@ionicon-var-arrow-graph-down-right: "\f260";
153
+@ionicon-var-arrow-graph-up-left: "\f261";
154
+@ionicon-var-arrow-graph-up-right: "\f262";
155
+@ionicon-var-arrow-left-a: "\f106";
156
+@ionicon-var-arrow-left-b: "\f107";
157
+@ionicon-var-arrow-left-c: "\f108";
158
+@ionicon-var-arrow-move: "\f263";
159
+@ionicon-var-arrow-resize: "\f264";
160
+@ionicon-var-arrow-return-left: "\f265";
161
+@ionicon-var-arrow-return-right: "\f266";
162
+@ionicon-var-arrow-right-a: "\f109";
163
+@ionicon-var-arrow-right-b: "\f10a";
164
+@ionicon-var-arrow-right-c: "\f10b";
165
+@ionicon-var-arrow-shrink: "\f267";
166
+@ionicon-var-arrow-swap: "\f268";
167
+@ionicon-var-arrow-up-a: "\f10c";
168
+@ionicon-var-arrow-up-b: "\f10d";
169
+@ionicon-var-arrow-up-c: "\f10e";
170
+@ionicon-var-asterisk: "\f314";
171
+@ionicon-var-at: "\f10f";
172
+@ionicon-var-backspace: "\f3bf";
173
+@ionicon-var-backspace-outline: "\f3be";
174
+@ionicon-var-bag: "\f110";
175
+@ionicon-var-battery-charging: "\f111";
176
+@ionicon-var-battery-empty: "\f112";
177
+@ionicon-var-battery-full: "\f113";
178
+@ionicon-var-battery-half: "\f114";
179
+@ionicon-var-battery-low: "\f115";
180
+@ionicon-var-beaker: "\f269";
181
+@ionicon-var-beer: "\f26a";
182
+@ionicon-var-bluetooth: "\f116";
183
+@ionicon-var-bonfire: "\f315";
184
+@ionicon-var-bookmark: "\f26b";
185
+@ionicon-var-bowtie: "\f3c0";
186
+@ionicon-var-briefcase: "\f26c";
187
+@ionicon-var-bug: "\f2be";
188
+@ionicon-var-calculator: "\f26d";
189
+@ionicon-var-calendar: "\f117";
190
+@ionicon-var-camera: "\f118";
191
+@ionicon-var-card: "\f119";
192
+@ionicon-var-cash: "\f316";
193
+@ionicon-var-chatbox: "\f11b";
194
+@ionicon-var-chatbox-working: "\f11a";
195
+@ionicon-var-chatboxes: "\f11c";
196
+@ionicon-var-chatbubble: "\f11e";
197
+@ionicon-var-chatbubble-working: "\f11d";
198
+@ionicon-var-chatbubbles: "\f11f";
199
+@ionicon-var-checkmark: "\f122";
200
+@ionicon-var-checkmark-circled: "\f120";
201
+@ionicon-var-checkmark-round: "\f121";
202
+@ionicon-var-chevron-down: "\f123";
203
+@ionicon-var-chevron-left: "\f124";
204
+@ionicon-var-chevron-right: "\f125";
205
+@ionicon-var-chevron-up: "\f126";
206
+@ionicon-var-clipboard: "\f127";
207
+@ionicon-var-clock: "\f26e";
208
+@ionicon-var-close: "\f12a";
209
+@ionicon-var-close-circled: "\f128";
210
+@ionicon-var-close-round: "\f129";
211
+@ionicon-var-closed-captioning: "\f317";
212
+@ionicon-var-cloud: "\f12b";
213
+@ionicon-var-code: "\f271";
214
+@ionicon-var-code-download: "\f26f";
215
+@ionicon-var-code-working: "\f270";
216
+@ionicon-var-coffee: "\f272";
217
+@ionicon-var-compass: "\f273";
218
+@ionicon-var-compose: "\f12c";
219
+@ionicon-var-connection-bars: "\f274";
220
+@ionicon-var-contrast: "\f275";
221
+@ionicon-var-crop: "\f3c1";
222
+@ionicon-var-cube: "\f318";
223
+@ionicon-var-disc: "\f12d";
224
+@ionicon-var-document: "\f12f";
225
+@ionicon-var-document-text: "\f12e";
226
+@ionicon-var-drag: "\f130";
227
+@ionicon-var-earth: "\f276";
228
+@ionicon-var-easel: "\f3c2";
229
+@ionicon-var-edit: "\f2bf";
230
+@ionicon-var-egg: "\f277";
231
+@ionicon-var-eject: "\f131";
232
+@ionicon-var-email: "\f132";
233
+@ionicon-var-email-unread: "\f3c3";
234
+@ionicon-var-erlenmeyer-flask: "\f3c5";
235
+@ionicon-var-erlenmeyer-flask-bubbles: "\f3c4";
236
+@ionicon-var-eye: "\f133";
237
+@ionicon-var-eye-disabled: "\f306";
238
+@ionicon-var-female: "\f278";
239
+@ionicon-var-filing: "\f134";
240
+@ionicon-var-film-marker: "\f135";
241
+@ionicon-var-fireball: "\f319";
242
+@ionicon-var-flag: "\f279";
243
+@ionicon-var-flame: "\f31a";
244
+@ionicon-var-flash: "\f137";
245
+@ionicon-var-flash-off: "\f136";
246
+@ionicon-var-folder: "\f139";
247
+@ionicon-var-fork: "\f27a";
248
+@ionicon-var-fork-repo: "\f2c0";
249
+@ionicon-var-forward: "\f13a";
250
+@ionicon-var-funnel: "\f31b";
251
+@ionicon-var-gear-a: "\f13d";
252
+@ionicon-var-gear-b: "\f13e";
253
+@ionicon-var-grid: "\f13f";
254
+@ionicon-var-hammer: "\f27b";
255
+@ionicon-var-happy: "\f31c";
256
+@ionicon-var-happy-outline: "\f3c6";
257
+@ionicon-var-headphone: "\f140";
258
+@ionicon-var-heart: "\f141";
259
+@ionicon-var-heart-broken: "\f31d";
260
+@ionicon-var-help: "\f143";
261
+@ionicon-var-help-buoy: "\f27c";
262
+@ionicon-var-help-circled: "\f142";
263
+@ionicon-var-home: "\f144";
264
+@ionicon-var-icecream: "\f27d";
265
+@ionicon-var-image: "\f147";
266
+@ionicon-var-images: "\f148";
267
+@ionicon-var-information: "\f14a";
268
+@ionicon-var-information-circled: "\f149";
269
+@ionicon-var-ionic: "\f14b";
270
+@ionicon-var-ios-alarm: "\f3c8";
271
+@ionicon-var-ios-alarm-outline: "\f3c7";
272
+@ionicon-var-ios-albums: "\f3ca";
273
+@ionicon-var-ios-albums-outline: "\f3c9";
274
+@ionicon-var-ios-americanfootball: "\f3cc";
275
+@ionicon-var-ios-americanfootball-outline: "\f3cb";
276
+@ionicon-var-ios-analytics: "\f3ce";
277
+@ionicon-var-ios-analytics-outline: "\f3cd";
278
+@ionicon-var-ios-arrow-back: "\f3cf";
279
+@ionicon-var-ios-arrow-down: "\f3d0";
280
+@ionicon-var-ios-arrow-forward: "\f3d1";
281
+@ionicon-var-ios-arrow-left: "\f3d2";
282
+@ionicon-var-ios-arrow-right: "\f3d3";
283
+@ionicon-var-ios-arrow-thin-down: "\f3d4";
284
+@ionicon-var-ios-arrow-thin-left: "\f3d5";
285
+@ionicon-var-ios-arrow-thin-right: "\f3d6";
286
+@ionicon-var-ios-arrow-thin-up: "\f3d7";
287
+@ionicon-var-ios-arrow-up: "\f3d8";
288
+@ionicon-var-ios-at: "\f3da";
289
+@ionicon-var-ios-at-outline: "\f3d9";
290
+@ionicon-var-ios-barcode: "\f3dc";
291
+@ionicon-var-ios-barcode-outline: "\f3db";
292
+@ionicon-var-ios-baseball: "\f3de";
293
+@ionicon-var-ios-baseball-outline: "\f3dd";
294
+@ionicon-var-ios-basketball: "\f3e0";
295
+@ionicon-var-ios-basketball-outline: "\f3df";
296
+@ionicon-var-ios-bell: "\f3e2";
297
+@ionicon-var-ios-bell-outline: "\f3e1";
298
+@ionicon-var-ios-body: "\f3e4";
299
+@ionicon-var-ios-body-outline: "\f3e3";
300
+@ionicon-var-ios-bolt: "\f3e6";
301
+@ionicon-var-ios-bolt-outline: "\f3e5";
302
+@ionicon-var-ios-book: "\f3e8";
303
+@ionicon-var-ios-book-outline: "\f3e7";
304
+@ionicon-var-ios-bookmarks: "\f3ea";
305
+@ionicon-var-ios-bookmarks-outline: "\f3e9";
306
+@ionicon-var-ios-box: "\f3ec";
307
+@ionicon-var-ios-box-outline: "\f3eb";
308
+@ionicon-var-ios-briefcase: "\f3ee";
309
+@ionicon-var-ios-briefcase-outline: "\f3ed";
310
+@ionicon-var-ios-browsers: "\f3f0";
311
+@ionicon-var-ios-browsers-outline: "\f3ef";
312
+@ionicon-var-ios-calculator: "\f3f2";
313
+@ionicon-var-ios-calculator-outline: "\f3f1";
314
+@ionicon-var-ios-calendar: "\f3f4";
315
+@ionicon-var-ios-calendar-outline: "\f3f3";
316
+@ionicon-var-ios-camera: "\f3f6";
317
+@ionicon-var-ios-camera-outline: "\f3f5";
318
+@ionicon-var-ios-cart: "\f3f8";
319
+@ionicon-var-ios-cart-outline: "\f3f7";
320
+@ionicon-var-ios-chatboxes: "\f3fa";
321
+@ionicon-var-ios-chatboxes-outline: "\f3f9";
322
+@ionicon-var-ios-chatbubble: "\f3fc";
323
+@ionicon-var-ios-chatbubble-outline: "\f3fb";
324
+@ionicon-var-ios-checkmark: "\f3ff";
325
+@ionicon-var-ios-checkmark-empty: "\f3fd";
326
+@ionicon-var-ios-checkmark-outline: "\f3fe";
327
+@ionicon-var-ios-circle-filled: "\f400";
328
+@ionicon-var-ios-circle-outline: "\f401";
329
+@ionicon-var-ios-clock: "\f403";
330
+@ionicon-var-ios-clock-outline: "\f402";
331
+@ionicon-var-ios-close: "\f406";
332
+@ionicon-var-ios-close-empty: "\f404";
333
+@ionicon-var-ios-close-outline: "\f405";
334
+@ionicon-var-ios-cloud: "\f40c";
335
+@ionicon-var-ios-cloud-download: "\f408";
336
+@ionicon-var-ios-cloud-download-outline: "\f407";
337
+@ionicon-var-ios-cloud-outline: "\f409";
338
+@ionicon-var-ios-cloud-upload: "\f40b";
339
+@ionicon-var-ios-cloud-upload-outline: "\f40a";
340
+@ionicon-var-ios-cloudy: "\f410";
341
+@ionicon-var-ios-cloudy-night: "\f40e";
342
+@ionicon-var-ios-cloudy-night-outline: "\f40d";
343
+@ionicon-var-ios-cloudy-outline: "\f40f";
344
+@ionicon-var-ios-cog: "\f412";
345
+@ionicon-var-ios-cog-outline: "\f411";
346
+@ionicon-var-ios-color-filter: "\f414";
347
+@ionicon-var-ios-color-filter-outline: "\f413";
348
+@ionicon-var-ios-color-wand: "\f416";
349
+@ionicon-var-ios-color-wand-outline: "\f415";
350
+@ionicon-var-ios-compose: "\f418";
351
+@ionicon-var-ios-compose-outline: "\f417";
352
+@ionicon-var-ios-contact: "\f41a";
353
+@ionicon-var-ios-contact-outline: "\f419";
354
+@ionicon-var-ios-copy: "\f41c";
355
+@ionicon-var-ios-copy-outline: "\f41b";
356
+@ionicon-var-ios-crop: "\f41e";
357
+@ionicon-var-ios-crop-strong: "\f41d";
358
+@ionicon-var-ios-download: "\f420";
359
+@ionicon-var-ios-download-outline: "\f41f";
360
+@ionicon-var-ios-drag: "\f421";
361
+@ionicon-var-ios-email: "\f423";
362
+@ionicon-var-ios-email-outline: "\f422";
363
+@ionicon-var-ios-eye: "\f425";
364
+@ionicon-var-ios-eye-outline: "\f424";
365
+@ionicon-var-ios-fastforward: "\f427";
366
+@ionicon-var-ios-fastforward-outline: "\f426";
367
+@ionicon-var-ios-filing: "\f429";
368
+@ionicon-var-ios-filing-outline: "\f428";
369
+@ionicon-var-ios-film: "\f42b";
370
+@ionicon-var-ios-film-outline: "\f42a";
371
+@ionicon-var-ios-flag: "\f42d";
372
+@ionicon-var-ios-flag-outline: "\f42c";
373
+@ionicon-var-ios-flame: "\f42f";
374
+@ionicon-var-ios-flame-outline: "\f42e";
375
+@ionicon-var-ios-flask: "\f431";
376
+@ionicon-var-ios-flask-outline: "\f430";
377
+@ionicon-var-ios-flower: "\f433";
378
+@ionicon-var-ios-flower-outline: "\f432";
379
+@ionicon-var-ios-folder: "\f435";
380
+@ionicon-var-ios-folder-outline: "\f434";
381
+@ionicon-var-ios-football: "\f437";
382
+@ionicon-var-ios-football-outline: "\f436";
383
+@ionicon-var-ios-game-controller-a: "\f439";
384
+@ionicon-var-ios-game-controller-a-outline: "\f438";
385
+@ionicon-var-ios-game-controller-b: "\f43b";
386
+@ionicon-var-ios-game-controller-b-outline: "\f43a";
387
+@ionicon-var-ios-gear: "\f43d";
388
+@ionicon-var-ios-gear-outline: "\f43c";
389
+@ionicon-var-ios-glasses: "\f43f";
390
+@ionicon-var-ios-glasses-outline: "\f43e";
391
+@ionicon-var-ios-grid-view: "\f441";
392
+@ionicon-var-ios-grid-view-outline: "\f440";
393
+@ionicon-var-ios-heart: "\f443";
394
+@ionicon-var-ios-heart-outline: "\f442";
395
+@ionicon-var-ios-help: "\f446";
396
+@ionicon-var-ios-help-empty: "\f444";
397
+@ionicon-var-ios-help-outline: "\f445";
398
+@ionicon-var-ios-home: "\f448";
399
+@ionicon-var-ios-home-outline: "\f447";
400
+@ionicon-var-ios-infinite: "\f44a";
401
+@ionicon-var-ios-infinite-outline: "\f449";
402
+@ionicon-var-ios-information: "\f44d";
403
+@ionicon-var-ios-information-empty: "\f44b";
404
+@ionicon-var-ios-information-outline: "\f44c";
405
+@ionicon-var-ios-ionic-outline: "\f44e";
406
+@ionicon-var-ios-keypad: "\f450";
407
+@ionicon-var-ios-keypad-outline: "\f44f";
408
+@ionicon-var-ios-lightbulb: "\f452";
409
+@ionicon-var-ios-lightbulb-outline: "\f451";
410
+@ionicon-var-ios-list: "\f454";
411
+@ionicon-var-ios-list-outline: "\f453";
412
+@ionicon-var-ios-location: "\f456";
413
+@ionicon-var-ios-location-outline: "\f455";
414
+@ionicon-var-ios-locked: "\f458";
415
+@ionicon-var-ios-locked-outline: "\f457";
416
+@ionicon-var-ios-loop: "\f45a";
417
+@ionicon-var-ios-loop-strong: "\f459";
418
+@ionicon-var-ios-medical: "\f45c";
419
+@ionicon-var-ios-medical-outline: "\f45b";
420
+@ionicon-var-ios-medkit: "\f45e";
421
+@ionicon-var-ios-medkit-outline: "\f45d";
422
+@ionicon-var-ios-mic: "\f461";
423
+@ionicon-var-ios-mic-off: "\f45f";
424
+@ionicon-var-ios-mic-outline: "\f460";
425
+@ionicon-var-ios-minus: "\f464";
426
+@ionicon-var-ios-minus-empty: "\f462";
427
+@ionicon-var-ios-minus-outline: "\f463";
428
+@ionicon-var-ios-monitor: "\f466";
429
+@ionicon-var-ios-monitor-outline: "\f465";
430
+@ionicon-var-ios-moon: "\f468";
431
+@ionicon-var-ios-moon-outline: "\f467";
432
+@ionicon-var-ios-more: "\f46a";
433
+@ionicon-var-ios-more-outline: "\f469";
434
+@ionicon-var-ios-musical-note: "\f46b";
435
+@ionicon-var-ios-musical-notes: "\f46c";
436
+@ionicon-var-ios-navigate: "\f46e";
437
+@ionicon-var-ios-navigate-outline: "\f46d";
438
+@ionicon-var-ios-nutrition: "\f470";
439
+@ionicon-var-ios-nutrition-outline: "\f46f";
440
+@ionicon-var-ios-paper: "\f472";
441
+@ionicon-var-ios-paper-outline: "\f471";
442
+@ionicon-var-ios-paperplane: "\f474";
443
+@ionicon-var-ios-paperplane-outline: "\f473";
444
+@ionicon-var-ios-partlysunny: "\f476";
445
+@ionicon-var-ios-partlysunny-outline: "\f475";
446
+@ionicon-var-ios-pause: "\f478";
447
+@ionicon-var-ios-pause-outline: "\f477";
448
+@ionicon-var-ios-paw: "\f47a";
449
+@ionicon-var-ios-paw-outline: "\f479";
450
+@ionicon-var-ios-people: "\f47c";
451
+@ionicon-var-ios-people-outline: "\f47b";
452
+@ionicon-var-ios-person: "\f47e";
453
+@ionicon-var-ios-person-outline: "\f47d";
454
+@ionicon-var-ios-personadd: "\f480";
455
+@ionicon-var-ios-personadd-outline: "\f47f";
456
+@ionicon-var-ios-photos: "\f482";
457
+@ionicon-var-ios-photos-outline: "\f481";
458
+@ionicon-var-ios-pie: "\f484";
459
+@ionicon-var-ios-pie-outline: "\f483";
460
+@ionicon-var-ios-pint: "\f486";
461
+@ionicon-var-ios-pint-outline: "\f485";
462
+@ionicon-var-ios-play: "\f488";
463
+@ionicon-var-ios-play-outline: "\f487";
464
+@ionicon-var-ios-plus: "\f48b";
465
+@ionicon-var-ios-plus-empty: "\f489";
466
+@ionicon-var-ios-plus-outline: "\f48a";
467
+@ionicon-var-ios-pricetag: "\f48d";
468
+@ionicon-var-ios-pricetag-outline: "\f48c";
469
+@ionicon-var-ios-pricetags: "\f48f";
470
+@ionicon-var-ios-pricetags-outline: "\f48e";
471
+@ionicon-var-ios-printer: "\f491";
472
+@ionicon-var-ios-printer-outline: "\f490";
473
+@ionicon-var-ios-pulse: "\f493";
474
+@ionicon-var-ios-pulse-strong: "\f492";
475
+@ionicon-var-ios-rainy: "\f495";
476
+@ionicon-var-ios-rainy-outline: "\f494";
477
+@ionicon-var-ios-recording: "\f497";
478
+@ionicon-var-ios-recording-outline: "\f496";
479
+@ionicon-var-ios-redo: "\f499";
480
+@ionicon-var-ios-redo-outline: "\f498";
481
+@ionicon-var-ios-refresh: "\f49c";
482
+@ionicon-var-ios-refresh-empty: "\f49a";
483
+@ionicon-var-ios-refresh-outline: "\f49b";
484
+@ionicon-var-ios-reload: "\f49d";
485
+@ionicon-var-ios-reverse-camera: "\f49f";
486
+@ionicon-var-ios-reverse-camera-outline: "\f49e";
487
+@ionicon-var-ios-rewind: "\f4a1";
488
+@ionicon-var-ios-rewind-outline: "\f4a0";
489
+@ionicon-var-ios-rose: "\f4a3";
490
+@ionicon-var-ios-rose-outline: "\f4a2";
491
+@ionicon-var-ios-search: "\f4a5";
492
+@ionicon-var-ios-search-strong: "\f4a4";
493
+@ionicon-var-ios-settings: "\f4a7";
494
+@ionicon-var-ios-settings-strong: "\f4a6";
495
+@ionicon-var-ios-shuffle: "\f4a9";
496
+@ionicon-var-ios-shuffle-strong: "\f4a8";
497
+@ionicon-var-ios-skipbackward: "\f4ab";
498
+@ionicon-var-ios-skipbackward-outline: "\f4aa";
499
+@ionicon-var-ios-skipforward: "\f4ad";
500
+@ionicon-var-ios-skipforward-outline: "\f4ac";
501
+@ionicon-var-ios-snowy: "\f4ae";
502
+@ionicon-var-ios-speedometer: "\f4b0";
503
+@ionicon-var-ios-speedometer-outline: "\f4af";
504
+@ionicon-var-ios-star: "\f4b3";
505
+@ionicon-var-ios-star-half: "\f4b1";
506
+@ionicon-var-ios-star-outline: "\f4b2";
507
+@ionicon-var-ios-stopwatch: "\f4b5";
508
+@ionicon-var-ios-stopwatch-outline: "\f4b4";
509
+@ionicon-var-ios-sunny: "\f4b7";
510
+@ionicon-var-ios-sunny-outline: "\f4b6";
511
+@ionicon-var-ios-telephone: "\f4b9";
512
+@ionicon-var-ios-telephone-outline: "\f4b8";
513
+@ionicon-var-ios-tennisball: "\f4bb";
514
+@ionicon-var-ios-tennisball-outline: "\f4ba";
515
+@ionicon-var-ios-thunderstorm: "\f4bd";
516
+@ionicon-var-ios-thunderstorm-outline: "\f4bc";
517
+@ionicon-var-ios-time: "\f4bf";
518
+@ionicon-var-ios-time-outline: "\f4be";
519
+@ionicon-var-ios-timer: "\f4c1";
520
+@ionicon-var-ios-timer-outline: "\f4c0";
521
+@ionicon-var-ios-toggle: "\f4c3";
522
+@ionicon-var-ios-toggle-outline: "\f4c2";
523
+@ionicon-var-ios-trash: "\f4c5";
524
+@ionicon-var-ios-trash-outline: "\f4c4";
525
+@ionicon-var-ios-undo: "\f4c7";
526
+@ionicon-var-ios-undo-outline: "\f4c6";
527
+@ionicon-var-ios-unlocked: "\f4c9";
528
+@ionicon-var-ios-unlocked-outline: "\f4c8";
529
+@ionicon-var-ios-upload: "\f4cb";
530
+@ionicon-var-ios-upload-outline: "\f4ca";
531
+@ionicon-var-ios-videocam: "\f4cd";
532
+@ionicon-var-ios-videocam-outline: "\f4cc";
533
+@ionicon-var-ios-volume-high: "\f4ce";
534
+@ionicon-var-ios-volume-low: "\f4cf";
535
+@ionicon-var-ios-wineglass: "\f4d1";
536
+@ionicon-var-ios-wineglass-outline: "\f4d0";
537
+@ionicon-var-ios-world: "\f4d3";
538
+@ionicon-var-ios-world-outline: "\f4d2";
539
+@ionicon-var-ipad: "\f1f9";
540
+@ionicon-var-iphone: "\f1fa";
541
+@ionicon-var-ipod: "\f1fb";
542
+@ionicon-var-jet: "\f295";
543
+@ionicon-var-key: "\f296";
544
+@ionicon-var-knife: "\f297";
545
+@ionicon-var-laptop: "\f1fc";
546
+@ionicon-var-leaf: "\f1fd";
547
+@ionicon-var-levels: "\f298";
548
+@ionicon-var-lightbulb: "\f299";
549
+@ionicon-var-link: "\f1fe";
550
+@ionicon-var-load-a: "\f29a";
551
+@ionicon-var-load-b: "\f29b";
552
+@ionicon-var-load-c: "\f29c";
553
+@ionicon-var-load-d: "\f29d";
554
+@ionicon-var-location: "\f1ff";
555
+@ionicon-var-lock-combination: "\f4d4";
556
+@ionicon-var-locked: "\f200";
557
+@ionicon-var-log-in: "\f29e";
558
+@ionicon-var-log-out: "\f29f";
559
+@ionicon-var-loop: "\f201";
560
+@ionicon-var-magnet: "\f2a0";
561
+@ionicon-var-male: "\f2a1";
562
+@ionicon-var-man: "\f202";
563
+@ionicon-var-map: "\f203";
564
+@ionicon-var-medkit: "\f2a2";
565
+@ionicon-var-merge: "\f33f";
566
+@ionicon-var-mic-a: "\f204";
567
+@ionicon-var-mic-b: "\f205";
568
+@ionicon-var-mic-c: "\f206";
569
+@ionicon-var-minus: "\f209";
570
+@ionicon-var-minus-circled: "\f207";
571
+@ionicon-var-minus-round: "\f208";
572
+@ionicon-var-model-s: "\f2c1";
573
+@ionicon-var-monitor: "\f20a";
574
+@ionicon-var-more: "\f20b";
575
+@ionicon-var-mouse: "\f340";
576
+@ionicon-var-music-note: "\f20c";
577
+@ionicon-var-navicon: "\f20e";
578
+@ionicon-var-navicon-round: "\f20d";
579
+@ionicon-var-navigate: "\f2a3";
580
+@ionicon-var-network: "\f341";
581
+@ionicon-var-no-smoking: "\f2c2";
582
+@ionicon-var-nuclear: "\f2a4";
583
+@ionicon-var-outlet: "\f342";
584
+@ionicon-var-paintbrush: "\f4d5";
585
+@ionicon-var-paintbucket: "\f4d6";
586
+@ionicon-var-paper-airplane: "\f2c3";
587
+@ionicon-var-paperclip: "\f20f";
588
+@ionicon-var-pause: "\f210";
589
+@ionicon-var-person: "\f213";
590
+@ionicon-var-person-add: "\f211";
591
+@ionicon-var-person-stalker: "\f212";
592
+@ionicon-var-pie-graph: "\f2a5";
593
+@ionicon-var-pin: "\f2a6";
594
+@ionicon-var-pinpoint: "\f2a7";
595
+@ionicon-var-pizza: "\f2a8";
596
+@ionicon-var-plane: "\f214";
597
+@ionicon-var-planet: "\f343";
598
+@ionicon-var-play: "\f215";
599
+@ionicon-var-playstation: "\f30a";
600
+@ionicon-var-plus: "\f218";
601
+@ionicon-var-plus-circled: "\f216";
602
+@ionicon-var-plus-round: "\f217";
603
+@ionicon-var-podium: "\f344";
604
+@ionicon-var-pound: "\f219";
605
+@ionicon-var-power: "\f2a9";
606
+@ionicon-var-pricetag: "\f2aa";
607
+@ionicon-var-pricetags: "\f2ab";
608
+@ionicon-var-printer: "\f21a";
609
+@ionicon-var-pull-request: "\f345";
610
+@ionicon-var-qr-scanner: "\f346";
611
+@ionicon-var-quote: "\f347";
612
+@ionicon-var-radio-waves: "\f2ac";
613
+@ionicon-var-record: "\f21b";
614
+@ionicon-var-refresh: "\f21c";
615
+@ionicon-var-reply: "\f21e";
616
+@ionicon-var-reply-all: "\f21d";
617
+@ionicon-var-ribbon-a: "\f348";
618
+@ionicon-var-ribbon-b: "\f349";
619
+@ionicon-var-sad: "\f34a";
620
+@ionicon-var-sad-outline: "\f4d7";
621
+@ionicon-var-scissors: "\f34b";
622
+@ionicon-var-search: "\f21f";
623
+@ionicon-var-settings: "\f2ad";
624
+@ionicon-var-share: "\f220";
625
+@ionicon-var-shuffle: "\f221";
626
+@ionicon-var-skip-backward: "\f222";
627
+@ionicon-var-skip-forward: "\f223";
628
+@ionicon-var-social-android: "\f225";
629
+@ionicon-var-social-android-outline: "\f224";
630
+@ionicon-var-social-angular: "\f4d9";
631
+@ionicon-var-social-angular-outline: "\f4d8";
632
+@ionicon-var-social-apple: "\f227";
633
+@ionicon-var-social-apple-outline: "\f226";
634
+@ionicon-var-social-bitcoin: "\f2af";
635
+@ionicon-var-social-bitcoin-outline: "\f2ae";
636
+@ionicon-var-social-buffer: "\f229";
637
+@ionicon-var-social-buffer-outline: "\f228";
638
+@ionicon-var-social-chrome: "\f4db";
639
+@ionicon-var-social-chrome-outline: "\f4da";
640
+@ionicon-var-social-codepen: "\f4dd";
641
+@ionicon-var-social-codepen-outline: "\f4dc";
642
+@ionicon-var-social-css3: "\f4df";
643
+@ionicon-var-social-css3-outline: "\f4de";
644
+@ionicon-var-social-designernews: "\f22b";
645
+@ionicon-var-social-designernews-outline: "\f22a";
646
+@ionicon-var-social-dribbble: "\f22d";
647
+@ionicon-var-social-dribbble-outline: "\f22c";
648
+@ionicon-var-social-dropbox: "\f22f";
649
+@ionicon-var-social-dropbox-outline: "\f22e";
650
+@ionicon-var-social-euro: "\f4e1";
651
+@ionicon-var-social-euro-outline: "\f4e0";
652
+@ionicon-var-social-facebook: "\f231";
653
+@ionicon-var-social-facebook-outline: "\f230";
654
+@ionicon-var-social-foursquare: "\f34d";
655
+@ionicon-var-social-foursquare-outline: "\f34c";
656
+@ionicon-var-social-freebsd-devil: "\f2c4";
657
+@ionicon-var-social-github: "\f233";
658
+@ionicon-var-social-github-outline: "\f232";
659
+@ionicon-var-social-google: "\f34f";
660
+@ionicon-var-social-google-outline: "\f34e";
661
+@ionicon-var-social-googleplus: "\f235";
662
+@ionicon-var-social-googleplus-outline: "\f234";
663
+@ionicon-var-social-hackernews: "\f237";
664
+@ionicon-var-social-hackernews-outline: "\f236";
665
+@ionicon-var-social-html5: "\f4e3";
666
+@ionicon-var-social-html5-outline: "\f4e2";
667
+@ionicon-var-social-instagram: "\f351";
668
+@ionicon-var-social-instagram-outline: "\f350";
669
+@ionicon-var-social-javascript: "\f4e5";
670
+@ionicon-var-social-javascript-outline: "\f4e4";
671
+@ionicon-var-social-linkedin: "\f239";
672
+@ionicon-var-social-linkedin-outline: "\f238";
673
+@ionicon-var-social-markdown: "\f4e6";
674
+@ionicon-var-social-nodejs: "\f4e7";
675
+@ionicon-var-social-octocat: "\f4e8";
676
+@ionicon-var-social-pinterest: "\f2b1";
677
+@ionicon-var-social-pinterest-outline: "\f2b0";
678
+@ionicon-var-social-python: "\f4e9";
679
+@ionicon-var-social-reddit: "\f23b";
680
+@ionicon-var-social-reddit-outline: "\f23a";
681
+@ionicon-var-social-rss: "\f23d";
682
+@ionicon-var-social-rss-outline: "\f23c";
683
+@ionicon-var-social-sass: "\f4ea";
684
+@ionicon-var-social-skype: "\f23f";
685
+@ionicon-var-social-skype-outline: "\f23e";
686
+@ionicon-var-social-snapchat: "\f4ec";
687
+@ionicon-var-social-snapchat-outline: "\f4eb";
688
+@ionicon-var-social-tumblr: "\f241";
689
+@ionicon-var-social-tumblr-outline: "\f240";
690
+@ionicon-var-social-tux: "\f2c5";
691
+@ionicon-var-social-twitch: "\f4ee";
692
+@ionicon-var-social-twitch-outline: "\f4ed";
693
+@ionicon-var-social-twitter: "\f243";
694
+@ionicon-var-social-twitter-outline: "\f242";
695
+@ionicon-var-social-usd: "\f353";
696
+@ionicon-var-social-usd-outline: "\f352";
697
+@ionicon-var-social-vimeo: "\f245";
698
+@ionicon-var-social-vimeo-outline: "\f244";
699
+@ionicon-var-social-whatsapp: "\f4f0";
700
+@ionicon-var-social-whatsapp-outline: "\f4ef";
701
+@ionicon-var-social-windows: "\f247";
702
+@ionicon-var-social-windows-outline: "\f246";
703
+@ionicon-var-social-wordpress: "\f249";
704
+@ionicon-var-social-wordpress-outline: "\f248";
705
+@ionicon-var-social-yahoo: "\f24b";
706
+@ionicon-var-social-yahoo-outline: "\f24a";
707
+@ionicon-var-social-yen: "\f4f2";
708
+@ionicon-var-social-yen-outline: "\f4f1";
709
+@ionicon-var-social-youtube: "\f24d";
710
+@ionicon-var-social-youtube-outline: "\f24c";
711
+@ionicon-var-soup-can: "\f4f4";
712
+@ionicon-var-soup-can-outline: "\f4f3";
713
+@ionicon-var-speakerphone: "\f2b2";
714
+@ionicon-var-speedometer: "\f2b3";
715
+@ionicon-var-spoon: "\f2b4";
716
+@ionicon-var-star: "\f24e";
717
+@ionicon-var-stats-bars: "\f2b5";
718
+@ionicon-var-steam: "\f30b";
719
+@ionicon-var-stop: "\f24f";
720
+@ionicon-var-thermometer: "\f2b6";
721
+@ionicon-var-thumbsdown: "\f250";
722
+@ionicon-var-thumbsup: "\f251";
723
+@ionicon-var-toggle: "\f355";
724
+@ionicon-var-toggle-filled: "\f354";
725
+@ionicon-var-transgender: "\f4f5";
726
+@ionicon-var-trash-a: "\f252";
727
+@ionicon-var-trash-b: "\f253";
728
+@ionicon-var-trophy: "\f356";
729
+@ionicon-var-tshirt: "\f4f7";
730
+@ionicon-var-tshirt-outline: "\f4f6";
731
+@ionicon-var-umbrella: "\f2b7";
732
+@ionicon-var-university: "\f357";
733
+@ionicon-var-unlocked: "\f254";
734
+@ionicon-var-upload: "\f255";
735
+@ionicon-var-usb: "\f2b8";
736
+@ionicon-var-videocamera: "\f256";
737
+@ionicon-var-volume-high: "\f257";
738
+@ionicon-var-volume-low: "\f258";
739
+@ionicon-var-volume-medium: "\f259";
740
+@ionicon-var-volume-mute: "\f25a";
741
+@ionicon-var-wand: "\f358";
742
+@ionicon-var-waterdrop: "\f25b";
743
+@ionicon-var-wifi: "\f25c";
744
+@ionicon-var-wineglass: "\f2b9";
745
+@ionicon-var-woman: "\f25d";
746
+@ionicon-var-wrench: "\f2ba";
747
+@ionicon-var-xbox: "\f30c";

+ 3 - 0
www/lib/Ionicons/less/ionicons.less

@@ -0,0 +1,3 @@
1
+@import "_ionicons-variables";
2
+@import "_ionicons-font";
3
+@import "_ionicons-icons";

BIN
www/lib/Ionicons/png/512/alert-circled.png


+ 0 - 0
www/lib/Ionicons/png/512/alert.png


Some files were not shown because too many files changed in this diff

tum/commu - Gogs: Simplico Git Service

Ei kuvausta

tum c8004f82a2 first commit 7 kuukautta sitten
..
__pycache__ c8004f82a2 first commit 7 kuukautta sitten
migrations c8004f82a2 first commit 7 kuukautta sitten
repositories c8004f82a2 first commit 7 kuukautta sitten
tests c8004f82a2 first commit 7 kuukautta sitten
__init__.py c8004f82a2 first commit 7 kuukautta sitten
admin.py c8004f82a2 first commit 7 kuukautta sitten
apps.py c8004f82a2 first commit 7 kuukautta sitten
models.py c8004f82a2 first commit 7 kuukautta sitten
tests.py c8004f82a2 first commit 7 kuukautta sitten
urls.py c8004f82a2 first commit 7 kuukautta sitten
views.py c8004f82a2 first commit 7 kuukautta sitten