+        return;
4
+
5
+    $(document).on('autocompleteLightInitialize', '[data-autocomplete-light-function=select2]', function() {
6
+        var element = $(this);
7
+
8
+        // Templating helper
9
+        function template(text, is_html) {
10
+            if (is_html) {
11
+                var $result = $('<span>');
12
+                $result.html(text);
13
+                return $result;
14
+            } else {
15
+                return text;
16
+            }
17
+        }
18
+
19
+        function result_template(item) {
20
+            var text = template(item.text,
21
+                element.attr('data-html') !== undefined || element.attr('data-result-html') !== undefined
22
+            );
23
+
24
+            if (item.create_id) {
25
+                return $('<span></span>').text(text).addClass('dal-create')
26
+            } else {
27
+                return text
28
+            }
29
+        }
30
+
31
+        function selected_template(item) {
32
+            if (item.selected_text !== undefined) {
33
+                return template(item.selected_text,
34
+                    element.attr('data-html') !== undefined || element.attr('data-selected-html') !== undefined
35
+                );
36
+            } else {
37
+                return result_template(item);
38
+            }
39
+            return
40
+        }
41
+
42
+        var ajax = null;
43
+        if ($(this).attr('data-autocomplete-light-url')) {
44
+            ajax = {
45
+                url: $(this).attr('data-autocomplete-light-url'),
46
+                dataType: 'json',
47
+                delay: 250,
48
+
49
+                data: function (params) {
50
+                    var data = {
51
+                        q: params.term, // search term
52
+                        page: params.page,
53
+                        create: element.attr('data-autocomplete-light-create') && !element.attr('data-tags'),
54
+                        forward: yl.getForwards(element)
55
+                    };
56
+
57
+                    return data;
58
+                },
59
+                processResults: function (data, page) {
60
+                    if (element.attr('data-tags')) {
61
+                        $.each(data.results, function(index, value) {
62
+                            value.id = value.text;
63
+                        });
64
+                    }
65
+
66
+                    return data;
67
+                },
68
+                cache: true
69
+            };
70
+        }
71
+
72
+        $(this).select2({
73
+            tokenSeparators: element.attr('data-tags') ? [','] : null,
74
+            debug: true,
75
+            containerCssClass: ':all:',
76
+            placeholder: element.attr('data-placeholder') || '',
77
+            language: element.attr('data-autocomplete-light-language'),
78
+            minimumInputLength: element.attr('data-minimum-input-length') || 0,
79
+            allowClear: ! $(this).is('[required]'),
80
+            templateResult: result_template,
81
+            templateSelection: selected_template,
82
+            ajax: ajax,
83
+            tags: Boolean(element.attr('data-tags')),
84
+        });
85
+
86
+        $(this).on('select2:selecting', function (e) {
87
+            var data = e.params.args.data;
88
+
89
+            if (data.create_id !== true)
90
+                return;
91
+
92
+            e.preventDefault();
93
+
94
+            var select = $(this);
95
+
96
+            $.ajax({
97
+                url: $(this).attr('data-autocomplete-light-url'),
98
+                type: 'POST',
99
+                dataType: 'json',
100
+                data: {
101
+                    text: data.id,
102
+                    forward: yl.getForwards($(this))
103
+                },
104
+                beforeSend: function(xhr, settings) {
105
+                    xhr.setRequestHeader("X-CSRFToken", document.csrftoken);
106
+                },
107
+                success: function(data, textStatus, jqXHR ) {
108
+                    select.append(
109
+                        $('<option>', {value: data.id, text: data.text, selected: true})
110
+                    );
111
+                    select.trigger('change');
112
+                    select.select2('close');
113
+                }
114
+            });
115
+        });
116
+
117
+    });
118
+    window.__dal__initListenerIsSet = true;
119
+    $('[data-autocomplete-light-function=select2]:not([id*="__prefix__"])').each(function() {
120
+        window.__dal__initialize(this);
121
+    });
122
+})(yl.jQuery);

二進制
app/staticfile/img/heartbeat.png


+ 22 - 0
app/staticfile/import_export/action_formats.js

@@ -0,0 +1,22 @@
1
+(function($) {
2
+  $(document).ready(function() {
3
+    var $actionsSelect, $formatsElement;
4
+    if ($('body').hasClass('grp-change-list')) {
5
+        // using grappelli
6
+        $actionsSelect = $('#grp-changelist-form select[name="action"]');
7
+        $formatsElement = $('#grp-changelist-form select[name="file_format"]');
8
+    } else {
9
+        // using default admin
10
+        $actionsSelect = $('#changelist-form select[name="action"]');
11
+        $formatsElement = $('#changelist-form select[name="file_format"]').parent();
12
+    }
13
+    $actionsSelect.change(function() {
14
+      if ($(this).val() === 'export_admin_action') {
15
+        $formatsElement.show();
16
+      } else {
17
+        $formatsElement.hide();
18
+      }
19
+    });
20
+    $actionsSelect.change();
21
+  });
22
+})(django.jQuery);

+ 81 - 0
app/staticfile/import_export/import.css

@@ -0,0 +1,81 @@
1
+.import-preview .errors {
2
+  position: relative;
3
+}
4
+
5
+.validation-error-count {
6
+  display: inline-block;
7
+  background-color: #e40000;
8
+  border-radius: 6px;
9
+  color: white;
10
+  font-size: 0.9em;
11
+  position: relative;
12
+  font-weight: bold;
13
+  margin-top: -2px;
14
+  padding: 0.2em 0.4em;
15
+}
16
+
17
+.validation-error-container {
18
+  position: absolute;
19
+  opacity: 0;
20
+  pointer-events: none;
21
+  background-color: #ffc1c1;
22
+  padding: 14px 15px 10px;
23
+  top: 25px;
24
+  margin: 0 0 20px 0;
25
+  width: 200px;
26
+  z-index: 2;
27
+}
28
+
29
+table.import-preview tr.skip {
30
+  background-color: #d2d2d2;
31
+}
32
+
33
+table.import-preview tr.new {
34
+  background-color: #bdd8b2;
35
+}
36
+
37
+table.import-preview tr.delete {
38
+  background-color: #f9bebf;
39
+}
40
+
41
+table.import-preview tr.update {
42
+  background-color: #fdfdcf;
43
+}
44
+
45
+.import-preview td:hover .validation-error-count {
46
+  z-index: 3;
47
+}
48
+.import-preview td:hover .validation-error-container {
49
+  opacity: 1;
50
+  pointer-events: auto;
51
+}
52
+
53
+.validation-error-list {
54
+  margin: 0;
55
+  padding: 0;
56
+}
57
+
58
+.validation-error-list li {
59
+  list-style: none;
60
+  margin: 0;
61
+}
62
+
63
+.validation-error-list > li > ul {
64
+  margin: 8px 0;
65
+  padding: 0;
66
+}
67
+
68
+.validation-error-list > li > ul > li {
69
+  padding: 0;
70
+  margin: 0 0 10px;
71
+  line-height: 1.28em;
72
+}
73
+
74
+.validation-error-field-label {
75
+  display: block;
76
+  border-bottom: 1px solid #e40000;
77
+  color: #e40000;
78
+  text-transform: uppercase;
79
+  font-weight: bold;
80
+  font-size: 0.85em;
81
+}

+ 15 - 0
app/staticfile/js/main.js

@@ -0,0 +1,15 @@
1
+$(function(){
2
+    $("#currentLocationBtn").click(function(){
3
+        if ("geolocation" in navigator){ //check geolocation available
4
+            //try to get user current location using getCurrentPosition() method
5
+            console.log("current location");
6
+            navigator.geolocation.getCurrentPosition(function(position){
7
+                console.log("xxxx");
8
+                $("#geoText").val(position.coords.latitude+","+position.coords.longitude );
9
+
10
+            });
11
+        }else{
12
+            console.log("Browser doesn't support geolocation!");
13
+        }
14
+    });
15
+});

+ 262 - 0
app/staticfile/vendor/select2/Gruntfile.js

@@ -0,0 +1,262 @@
1
+const sass = require('node-sass');
2
+
3
+module.exports = function (grunt) {
4
+  // Full list of files that must be included by RequireJS
5
+  includes = [
6
+    'jquery.select2',
7
+    'almond',
8
+
9
+    'jquery-mousewheel' // shimmed for non-full builds
10
+  ];
11
+
12
+  fullIncludes = [
13
+    'jquery',
14
+
15
+    'select2/compat/containerCss',
16
+    'select2/compat/dropdownCss',
17
+
18
+    'select2/compat/initSelection',
19
+    'select2/compat/inputData',
20
+    'select2/compat/matcher',
21
+    'select2/compat/query',
22
+
23
+    'select2/dropdown/attachContainer',
24
+    'select2/dropdown/stopPropagation',
25
+
26
+    'select2/selection/stopPropagation'
27
+  ].concat(includes);
28
+
29
+  var i18nModules = [];
30
+  var i18nPaths = {};
31
+
32
+  var i18nFiles = grunt.file.expand({
33
+    cwd: 'src/js'
34
+  }, 'select2/i18n/*.js');
35
+
36
+  var testFiles = grunt.file.expand('tests/**/*.html');
37
+  var testUrls = testFiles.map(function (filePath) {
38
+    return 'http://localhost:9999/' + filePath;
39
+  });
40
+
41
+  var testBuildNumber = "unknown";
42
+
43
+  if (process.env.TRAVIS_JOB_ID) {
44
+    testBuildNumber = "travis-" + process.env.TRAVIS_JOB_ID;
45
+  } else {
46
+    var currentTime = new Date();
47
+
48
+    testBuildNumber = "manual-" + currentTime.getTime();
49
+  }
50
+
51
+  for (var i = 0; i < i18nFiles.length; i++) {
52
+    var file = i18nFiles[i];
53
+    var name = file.split('.')[0];
54
+
55
+    i18nModules.push({
56
+      name: name
57
+    });
58
+
59
+    i18nPaths[name] = '../../' + name;
60
+  }
61
+
62
+  var minifiedBanner = '/*! Select2 <%= package.version %> | https://github.com/select2/select2/blob/master/LICENSE.md */';
63
+
64
+  grunt.initConfig({
65
+    package: grunt.file.readJSON('package.json'),
66
+
67
+    concat: {
68
+      'dist': {
69
+        options: {
70
+          banner: grunt.file.read('src/js/wrapper.start.js'),
71
+        },
72
+        src: [
73
+          'dist/js/select2.js',
74
+          'src/js/wrapper.end.js'
75
+        ],
76
+        dest: 'dist/js/select2.js'
77
+      },
78
+      'dist.full': {
79
+        options: {
80
+          banner: grunt.file.read('src/js/wrapper.start.js'),
81
+        },
82
+        src: [
83
+          'dist/js/select2.full.js',
84
+          'src/js/wrapper.end.js'
85
+        ],
86
+        dest: 'dist/js/select2.full.js'
87
+      }
88
+    },
89
+
90
+    connect: {
91
+      tests: {
92
+        options: {
93
+          base: '.',
94
+          hostname: '127.0.0.1',
95
+          port: 9999
96
+        }
97
+      }
98
+    },
99
+
100
+    uglify: {
101
+      'dist': {
102
+        src: 'dist/js/select2.js',
103
+        dest: 'dist/js/select2.min.js',
104
+        options: {
105
+          banner: minifiedBanner
106
+        }
107
+      },
108
+      'dist.full': {
109
+        src: 'dist/js/select2.full.js',
110
+        dest: 'dist/js/select2.full.min.js',
111
+        options: {
112
+          banner: minifiedBanner
113
+        }
114
+      }
115
+    },
116
+
117
+    qunit: {
118
+      all: {
119
+        options: {
120
+          urls: testUrls
121
+        }
122
+      }
123
+    },
124
+
125
+    jshint: {
126
+      options: {
127
+        jshintrc: true,
128
+        reporterOutput: ''
129
+      },
130
+      code: {
131
+        src: ['src/js/**/*.js']
132
+      },
133
+      tests: {
134
+        src: ['tests/**/*.js']
135
+      }
136
+    },
137
+
138
+    sass: {
139
+      dist: {
140
+        options: {
141
+          implementation: sass,
142
+          outputStyle: 'compressed'
143
+        },
144
+        files: {
145
+          'dist/css/select2.min.css': [
146
+            'src/scss/core.scss',
147
+            'src/scss/theme/default/layout.css'
148
+          ]
149
+        }
150
+      },
151
+      dev: {
152
+        options: {
153
+          implementation: sass,
154
+          outputStyle: 'nested'
155
+        },
156
+        files: {
157
+          'dist/css/select2.css': [
158
+            'src/scss/core.scss',
159
+            'src/scss/theme/default/layout.css'
160
+          ]
161
+        }
162
+      }
163
+    },
164
+
165
+    requirejs: {
166
+      'dist': {
167
+        options: {
168
+          baseUrl: 'src/js',
169
+          optimize: 'none',
170
+          name: 'select2/core',
171
+          out: 'dist/js/select2.js',
172
+          include: includes,
173
+          namespace: 'S2',
174
+          paths: {
175
+            'almond': require.resolve('almond').slice(0, -3),
176
+            'jquery': 'jquery.shim',
177
+            'jquery-mousewheel': 'jquery.mousewheel.shim'
178
+          },
179
+          wrap: {
180
+            startFile: 'src/js/banner.start.js',
181
+            endFile: 'src/js/banner.end.js'
182
+          }
183
+        }
184
+      },
185
+      'dist.full': {
186
+        options: {
187
+          baseUrl: 'src/js',
188
+          optimize: 'none',
189
+          name: 'select2/core',
190
+          out: 'dist/js/select2.full.js',
191
+          include: fullIncludes,
192
+          namespace: 'S2',
193
+          paths: {
194
+            'almond': require.resolve('almond').slice(0, -3),
195
+            'jquery': 'jquery.shim',
196
+            'jquery-mousewheel': require.resolve('jquery-mousewheel').slice(0, -3)
197
+          },
198
+          wrap: {
199
+            startFile: 'src/js/banner.start.js',
200
+            endFile: 'src/js/banner.end.js'
201
+          }
202
+        }
203
+      },
204
+      'i18n': {
205
+        options: {
206
+          baseUrl: 'src/js/select2/i18n',
207
+          dir: 'dist/js/i18n',
208
+          paths: i18nPaths,
209
+          modules: i18nModules,
210
+          namespace: 'S2',
211
+          wrap: {
212
+            start: minifiedBanner + grunt.file.read('src/js/banner.start.js'),
213
+            end: grunt.file.read('src/js/banner.end.js')
214
+          }
215
+        }
216
+      }
217
+    },
218
+
219
+    watch: {
220
+      js: {
221
+        files: [
222
+          'src/js/select2/**/*.js',
223
+          'tests/**/*.js'
224
+        ],
225
+        tasks: [
226
+          'compile',
227
+          'test',
228
+          'minify'
229
+        ]
230
+      },
231
+      css: {
232
+        files: [
233
+          'src/scss/**/*.scss'
234
+        ],
235
+        tasks: [
236
+          'compile',
237
+          'minify'
238
+        ]
239
+      }
240
+    }
241
+  });
242
+
243
+  grunt.loadNpmTasks('grunt-contrib-concat');
244
+  grunt.loadNpmTasks('grunt-contrib-connect');
245
+  grunt.loadNpmTasks('grunt-contrib-jshint');
246
+  grunt.loadNpmTasks('grunt-contrib-qunit');
247
+  grunt.loadNpmTasks('grunt-contrib-requirejs');
248
+  grunt.loadNpmTasks('grunt-contrib-uglify');
249
+  grunt.loadNpmTasks('grunt-contrib-watch');
250
+
251
+  grunt.loadNpmTasks('grunt-sass');
252
+
253
+  grunt.registerTask('default', ['compile', 'test', 'minify']);
254
+
255
+  grunt.registerTask('compile', [
256
+    'requirejs:dist', 'requirejs:dist.full', 'requirejs:i18n',
257
+    'concat:dist', 'concat:dist.full',
258
+    'sass:dev'
259
+  ]);
260
+  grunt.registerTask('minify', ['uglify', 'sass:dist']);
261
+  grunt.registerTask('test', ['connect:tests', 'qunit', 'jshint']);
262
+};

+ 13 - 0
app/staticfile/vendor/select2/bower.json

@@ -0,0 +1,13 @@
1
+{
2
+    "name": "select2",
3
+    "description": "Select2 is a jQuery based replacement for select boxes. It supports searching, remote data sets, and infinite scrolling of results.",
4
+    "main": [
5
+        "dist/js/select2.js",
6
+        "src/scss/core.scss"
7
+    ],
8
+    "license": "MIT",
9
+    "repository": {
10
+        "type": "git",
11
+        "url": "git@github.com:select2/select2.git"
12
+    }
13
+}

+ 19 - 0
app/staticfile/vendor/select2/component.json

@@ -0,0 +1,19 @@
1
+{
2
+  "name": "select2",
3
+  "repo": "select/select2",
4
+  "description": "Select2 is a jQuery based replacement for select boxes. It supports searching, remote data sets, and infinite scrolling of results.",
5
+  "version": "4.0.7",
6
+  "demo": "https://select2.org/",
7
+  "keywords": [
8
+    "jquery"
9
+  ],
10
+  "main": "dist/js/select2.js",
11
+  "styles": [
12
+    "dist/css/select2.css"
13
+  ],
14
+  "scripts": [
15
+    "dist/js/select2.js",
16
+    "dist/js/i18n/*.js"
17
+  ],
18
+  "license": "MIT"
19
+}

+ 22 - 0
app/staticfile/vendor/select2/composer.json

@@ -0,0 +1,22 @@
1
+{
2
+  "name": "select2/select2",
3
+  "description": "Select2 is a jQuery based replacement for select boxes.",
4
+  "type": "component",
5
+  "homepage": "https://select2.org/",
6
+  "license": "MIT",
7
+  "extra": {
8
+    "component": {
9
+      "scripts": [
10
+        "dist/js/select2.js"
11
+      ],
12
+      "styles": [
13
+        "dist/css/select2.css"
14
+      ],
15
+      "files": [
16
+        "dist/js/select2.js",
17
+        "dist/js/i18n/*.js",
18
+        "dist/css/select2.css"
19
+      ]
20
+    }
21
+  }
22
+}

+ 484 - 0
app/staticfile/vendor/select2/dist/css/select2.css

@@ -0,0 +1,484 @@
1
+.select2-container {
2
+  box-sizing: border-box;
3
+  display: inline-block;
4
+  margin: 0;
5
+  position: relative;
6
+  vertical-align: middle; }
7
+  .select2-container .select2-selection--single {
8
+    box-sizing: border-box;
9
+    cursor: pointer;
10
+    display: block;
11
+    height: 28px;
12
+    user-select: none;
13
+    -webkit-user-select: none; }
14
+    .select2-container .select2-selection--single .select2-selection__rendered {
15
+      display: block;
16
+      padding-left: 8px;
17
+      padding-right: 20px;
18
+      overflow: hidden;
19
+      text-overflow: ellipsis;
20
+      white-space: nowrap; }
21
+    .select2-container .select2-selection--single .select2-selection__clear {
22
+      position: relative; }
23
+  .select2-container[dir="rtl"] .select2-selection--single .select2-selection__rendered {
24
+    padding-right: 8px;
25
+    padding-left: 20px; }
26
+  .select2-container .select2-selection--multiple {
27
+    box-sizing: border-box;
28
+    cursor: pointer;
29
+    display: block;
30
+    min-height: 32px;
31
+    user-select: none;
32
+    -webkit-user-select: none; }
33
+    .select2-container .select2-selection--multiple .select2-selection__rendered {
34
+      display: inline-block;
35
+      overflow: hidden;
36
+      padding-left: 8px;
37
+      text-overflow: ellipsis;
38
+      white-space: nowrap; }
39
+  .select2-container .select2-search--inline {
40
+    float: left; }
41
+    .select2-container .select2-search--inline .select2-search__field {
42
+      box-sizing: border-box;
43
+      border: none;
44
+      font-size: 100%;
45
+      margin-top: 5px;
46
+      padding: 0; }
47
+      .select2-container .select2-search--inline .select2-search__field::-webkit-search-cancel-button {
48
+        -webkit-appearance: none; }
49
+
50
+.select2-dropdown {
51
+  background-color: white;
52
+  border: 1px solid #aaa;
53
+  border-radius: 4px;
54
+  box-sizing: border-box;
55
+  display: block;
56
+  position: absolute;
57
+  left: -100000px;
58
+  width: 100%;
59
+  z-index: 1051; }
60
+
61
+.select2-results {
62
+  display: block; }
63
+
64
+.select2-results__options {
65
+  list-style: none;
66
+  margin: 0;
67
+  padding: 0; }
68
+
69
+.select2-results__option {
70
+  padding: 6px;
71
+  user-select: none;
72
+  -webkit-user-select: none; }
73
+  .select2-results__option[aria-selected] {
74
+    cursor: pointer; }
75
+
76
+.select2-container--open .select2-dropdown {
77
+  left: 0; }
78
+
79
+.select2-container--open .select2-dropdown--above {
80
+  border-bottom: none;
81
+  border-bottom-left-radius: 0;
82
+  border-bottom-right-radius: 0; }
83
+
84
+.select2-container--open .select2-dropdown--below {
85
+  border-top: none;
86
+  border-top-left-radius: 0;
87
+  border-top-right-radius: 0; }
88
+
89
+.select2-search--dropdown {
90
+  display: block;
91
+  padding: 4px; }
92
+  .select2-search--dropdown .select2-search__field {
93
+    padding: 4px;
94
+    width: 100%;
95
+    box-sizing: border-box; }
96
+    .select2-search--dropdown .select2-search__field::-webkit-search-cancel-button {
97
+      -webkit-appearance: none; }
98
+  .select2-search--dropdown.select2-search--hide {
99
+    display: none; }
100
+
101
+.select2-close-mask {
102
+  border: 0;
103
+  margin: 0;
104
+  padding: 0;
105
+  display: block;
106
+  position: fixed;
107
+  left: 0;
108
+  top: 0;
109
+  min-height: 100%;
110
+  min-width: 100%;
111
+  height: auto;
112
+  width: auto;
113
+  opacity: 0;
114
+  z-index: 99;
115
+  background-color: #fff;
116
+  filter: alpha(opacity=0); }
117
+
118
+.select2-hidden-accessible {
119
+  border: 0 !important;
120
+  clip: rect(0 0 0 0) !important;
121
+  -webkit-clip-path: inset(50%) !important;
122
+  clip-path: inset(50%) !important;
123
+  height: 1px !important;
124
+  overflow: hidden !important;
125
+  padding: 0 !important;
126
+  position: absolute !important;
127
+  width: 1px !important;
128
+  white-space: nowrap !important; }
129
+
130
+.select2-container--default .select2-selection--single {
131
+  background-color: #fff;
132
+  border: 1px solid #aaa;
133
+  border-radius: 4px; }
134
+  .select2-container--default .select2-selection--single .select2-selection__rendered {
135
+    color: #444;
136
+    line-height: 28px; }
137
+  .select2-container--default .select2-selection--single .select2-selection__clear {
138
+    cursor: pointer;
139
+    float: right;
140
+    font-weight: bold; }
141
+  .select2-container--default .select2-selection--single .select2-selection__placeholder {
142
+    color: #999; }
143
+  .select2-container--default .select2-selection--single .select2-selection__arrow {
144
+    height: 26px;
145
+    position: absolute;
146
+    top: 1px;
147
+    right: 1px;
148
+    width: 20px; }
149
+    .select2-container--default .select2-selection--single .select2-selection__arrow b {
150
+      border-color: #888 transparent transparent transparent;
151
+      border-style: solid;
152
+      border-width: 5px 4px 0 4px;
153
+      height: 0;
154
+      left: 50%;
155
+      margin-left: -4px;
156
+      margin-top: -2px;
157
+      position: absolute;
158
+      top: 50%;
159
+      width: 0; }
160
+
161
+.select2-container--default[dir="rtl"] .select2-selection--single .select2-selection__clear {
162
+  float: left; }
163
+
164
+.select2-container--default[dir="rtl"] .select2-selection--single .select2-selection__arrow {
165
+  left: 1px;
166
+  right: auto; }
167
+
168
+.select2-container--default.select2-container--disabled .select2-selection--single {
169
+  background-color: #eee;
170
+  cursor: default; }
171
+  .select2-container--default.select2-container--disabled .select2-selection--single .select2-selection__clear {
172
+    display: none; }
173
+
174
+.select2-container--default.select2-container--open .select2-selection--single .select2-selection__arrow b {
175
+  border-color: transparent transparent #888 transparent;
176
+  border-width: 0 4px 5px 4px; }
177
+
178
+.select2-container--default .select2-selection--multiple {
179
+  background-color: white;
180
+  border: 1px solid #aaa;
181
+  border-radius: 4px;
182
+  cursor: text; }
183
+  .select2-container--default .select2-selection--multiple .select2-selection__rendered {
184
+    box-sizing: border-box;
185
+    list-style: none;
186
+    margin: 0;
187
+    padding: 0 5px;
188
+    width: 100%; }
189
+    .select2-container--default .select2-selection--multiple .select2-selection__rendered li {
190
+      list-style: none; }
191
+  .select2-container--default .select2-selection--multiple .select2-selection__placeholder {
192
+    color: #999;
193
+    margin-top: 5px;
194
+    float: left; }
195
+  .select2-container--default .select2-selection--multiple .select2-selection__clear {
196
+    cursor: pointer;
197
+    float: right;
198
+    font-weight: bold;
199
+    margin-top: 5px;
200
+    margin-right: 10px; }
201
+  .select2-container--default .select2-selection--multiple .select2-selection__choice {
202
+    background-color: #e4e4e4;
203
+    border: 1px solid #aaa;
204
+    border-radius: 4px;
205
+    cursor: default;
206
+    float: left;
207
+    margin-right: 5px;
208
+    margin-top: 5px;
209
+    padding: 0 5px; }
210
+  .select2-container--default .select2-selection--multiple .select2-selection__choice__remove {
211
+    color: #999;
212
+    cursor: pointer;
213
+    display: inline-block;
214
+    font-weight: bold;
215
+    margin-right: 2px; }
216
+    .select2-container--default .select2-selection--multiple .select2-selection__choice__remove:hover {
217
+      color: #333; }
218
+
219
+.select2-container--default[dir="rtl"] .select2-selection--multiple .select2-selection__choice, .select2-container--default[dir="rtl"] .select2-selection--multiple .select2-selection__placeholder, .select2-container--default[dir="rtl"] .select2-selection--multiple .select2-search--inline {
220
+  float: right; }
221
+
222
+.select2-container--default[dir="rtl"] .select2-selection--multiple .select2-selection__choice {
223
+  margin-left: 5px;
224
+  margin-right: auto; }
225
+
226
+.select2-container--default[dir="rtl"] .select2-selection--multiple .select2-selection__choice__remove {
227
+  margin-left: 2px;
228
+  margin-right: auto; }
229
+
230
+.select2-container--default.select2-container--focus .select2-selection--multiple {
231
+  border: solid black 1px;
232
+  outline: 0; }
233
+
234
+.select2-container--default.select2-container--disabled .select2-selection--multiple {
235
+  background-color: #eee;
236
+  cursor: default; }
237
+
238
+.select2-container--default.select2-container--disabled .select2-selection__choice__remove {
239
+  display: none; }
240
+
241
+.select2-container--default.select2-container--open.select2-container--above .select2-selection--single, .select2-container--default.select2-container--open.select2-container--above .select2-selection--multiple {
242
+  border-top-left-radius: 0;
243
+  border-top-right-radius: 0; }
244
+
245
+.select2-container--default.select2-container--open.select2-container--below .select2-selection--single, .select2-container--default.select2-container--open.select2-container--below .select2-selection--multiple {
246
+  border-bottom-left-radius: 0;
247
+  border-bottom-right-radius: 0; }
248
+
249
+.select2-container--default .select2-search--dropdown .select2-search__field {
250
+  border: 1px solid #aaa; }
251
+
252
+.select2-container--default .select2-search--inline .select2-search__field {
253
+  background: transparent;
254
+  border: none;
255
+  outline: 0;
256
+  box-shadow: none;
257
+  -webkit-appearance: textfield; }
258
+
259
+.select2-container--default .select2-results > .select2-results__options {
260
+  max-height: 200px;
261
+  overflow-y: auto; }
262
+
263
+.select2-container--default .select2-results__option[role=group] {
264
+  padding: 0; }
265
+
266
+.select2-container--default .select2-results__option[aria-disabled=true] {
267
+  color: #999; }
268
+
269
+.select2-container--default .select2-results__option[aria-selected=true] {
270
+  background-color: #ddd; }
271
+
272
+.select2-container--default .select2-results__option .select2-results__option {
273
+  padding-left: 1em; }
274
+  .select2-container--default .select2-results__option .select2-results__option .select2-results__group {
275
+    padding-left: 0; }
276
+  .select2-container--default .select2-results__option .select2-results__option .select2-results__option {
277
+    margin-left: -1em;
278
+    padding-left: 2em; }
279
+    .select2-container--default .select2-results__option .select2-results__option .select2-results__option .select2-results__option {
280
+      margin-left: -2em;
281
+      padding-left: 3em; }
282
+      .select2-container--default .select2-results__option .select2-results__option .select2-results__option .select2-results__option .select2-results__option {
283
+        margin-left: -3em;
284
+        padding-left: 4em; }
285
+        .select2-container--default .select2-results__option .select2-results__option .select2-results__option .select2-results__option .select2-results__option .select2-results__option {
286
+          margin-left: -4em;
287
+          padding-left: 5em; }
288
+          .select2-container--default .select2-results__option .select2-results__option .select2-results__option .select2-results__option .select2-results__option .select2-results__option .select2-results__option {
289
+            margin-left: -5em;
290
+            padding-left: 6em; }
291
+
292
+.select2-container--default .select2-results__option--highlighted[aria-selected] {
293
+  background-color: #5897fb;
294
+  color: white; }
295
+
296
+.select2-container--default .select2-results__group {
297
+  cursor: default;
298
+  display: block;
299
+  padding: 6px; }
300
+
301
+.select2-container--classic .select2-selection--single {
302
+  background-color: #f7f7f7;
303
+  border: 1px solid #aaa;
304
+  border-radius: 4px;
305
+  outline: 0;
306
+  background-image: -webkit-linear-gradient(top, white 50%, #eeeeee 100%);
307
+  background-image: -o-linear-gradient(top, white 50%, #eeeeee 100%);
308
+  background-image: linear-gradient(to bottom, white 50%, #eeeeee 100%);
309
+  background-repeat: repeat-x;
310
+  filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#FFFFFFFF', endColorstr='#FFEEEEEE', GradientType=0); }
311
+  .select2-container--classic .select2-selection--single:focus {
312
+    border: 1px solid #5897fb; }
313
+  .select2-container--classic .select2-selection--single .select2-selection__rendered {
314
+    color: #444;
315
+    line-height: 28px; }
316
+  .select2-container--classic .select2-selection--single .select2-selection__clear {
317
+    cursor: pointer;
318
+    float: right;
319
+    font-weight: bold;
320
+    margin-right: 10px; }
321
+  .select2-container--classic .select2-selection--single .select2-selection__placeholder {
322
+    color: #999; }
323
+  .select2-container--classic .select2-selection--single .select2-selection__arrow {
324
+    background-color: #ddd;
325
+    border: none;
326
+    border-left: 1px solid #aaa;
327
+    border-top-right-radius: 4px;
328
+    border-bottom-right-radius: 4px;
329
+    height: 26px;
330
+    position: absolute;
331
+    top: 1px;
332
+    right: 1px;
333
+    width: 20px;
334
+    background-image: -webkit-linear-gradient(top, #eeeeee 50%, #cccccc 100%);
335
+    background-image: -o-linear-gradient(top, #eeeeee 50%, #cccccc 100%);
336
+    background-image: linear-gradient(to bottom, #eeeeee 50%, #cccccc 100%);
337
+    background-repeat: repeat-x;
338
+    filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#FFEEEEEE', endColorstr='#FFCCCCCC', GradientType=0); }
339
+    .select2-container--classic .select2-selection--single .select2-selection__arrow b {
340
+      border-color: #888 transparent transparent transparent;
341
+      border-style: solid;
342
+      border-width: 5px 4px 0 4px;
343
+      height: 0;
344
+      left: 50%;
345
+      margin-left: -4px;
346
+      margin-top: -2px;
347
+      position: absolute;
348
+      top: 50%;
349
+      width: 0; }
350
+
351
+.select2-container--classic[dir="rtl"] .select2-selection--single .select2-selection__clear {
352
+  float: left; }
353
+
354
+.select2-container--classic[dir="rtl"] .select2-selection--single .select2-selection__arrow {
355
+  border: none;
356
+  border-right: 1px solid #aaa;
357
+  border-radius: 0;
358
+  border-top-left-radius: 4px;
359
+  border-bottom-left-radius: 4px;
360
+  left: 1px;
361
+  right: auto; }
362
+
363
+.select2-container--classic.select2-container--open .select2-selection--single {
364
+  border: 1px solid #5897fb; }
365
+  .select2-container--classic.select2-container--open .select2-selection--single .select2-selection__arrow {
366
+    background: transparent;
367
+    border: none; }
368
+    .select2-container--classic.select2-container--open .select2-selection--single .select2-selection__arrow b {
369
+      border-color: transparent transparent #888 transparent;
370
+      border-width: 0 4px 5px 4px; }
371
+
372
+.select2-container--classic.select2-container--open.select2-container--above .select2-selection--single {
373
+  border-top: none;
374
+  border-top-left-radius: 0;
375
+  border-top-right-radius: 0;
376
+  background-image: -webkit-linear-gradient(top, white 0%, #eeeeee 50%);
377
+  background-image: -o-linear-gradient(top, white 0%, #eeeeee 50%);
378
+  background-image: linear-gradient(to bottom, white 0%, #eeeeee 50%);
379
+  background-repeat: repeat-x;
380
+  filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#FFFFFFFF', endColorstr='#FFEEEEEE', GradientType=0); }
381
+
382
+.select2-container--classic.select2-container--open.select2-container--below .select2-selection--single {
383
+  border-bottom: none;
384
+  border-bottom-left-radius: 0;
385
+  border-bottom-right-radius: 0;
386
+  background-image: -webkit-linear-gradient(top, #eeeeee 50%, white 100%);
387
+  background-image: -o-linear-gradient(top, #eeeeee 50%, white 100%);
388
+  background-image: linear-gradient(to bottom, #eeeeee 50%, white 100%);
389
+  background-repeat: repeat-x;
390
+  filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#FFEEEEEE', endColorstr='#FFFFFFFF', GradientType=0); }
391
+
392
+.select2-container--classic .select2-selection--multiple {
393
+  background-color: white;
394
+  border: 1px solid #aaa;
395
+  border-radius: 4px;
396
+  cursor: text;
397
+  outline: 0; }
398
+  .select2-container--classic .select2-selection--multiple:focus {
399
+    border: 1px solid #5897fb; }
400
+  .select2-container--classic .select2-selection--multiple .select2-selection__rendered {
401
+    list-style: none;
402
+    margin: 0;
403
+    padding: 0 5px; }
404
+  .select2-container--classic .select2-selection--multiple .select2-selection__clear {
405
+    display: none; }
406
+  .select2-container--classic .select2-selection--multiple .select2-selection__choice {
407
+    background-color: #e4e4e4;
408
+    border: 1px solid #aaa;
409
+    border-radius: 4px;
410
+    cursor: default;
411
+    float: left;
412
+    margin-right: 5px;
413
+    margin-top: 5px;
414
+    padding: 0 5px; }
415
+  .select2-container--classic .select2-selection--multiple .select2-selection__choice__remove {
416
+    color: #888;
417
+    cursor: pointer;
418
+    display: inline-block;
419
+    font-weight: bold;
420
+    margin-right: 2px; }
421
+    .select2-container--classic .select2-selection--multiple .select2-selection__choice__remove:hover {
422
+      color: #555; }
423
+
424
+.select2-container--classic[dir="rtl"] .select2-selection--multiple .select2-selection__choice {
425
+  float: right;
426
+  margin-left: 5px;
427
+  margin-right: auto; }
428
+
429
+.select2-container--classic[dir="rtl"] .select2-selection--multiple .select2-selection__choice__remove {
430
+  margin-left: 2px;
431
+  margin-right: auto; }
432
+
433
+.select2-container--classic.select2-container--open .select2-selection--multiple {
434
+  border: 1px solid #5897fb; }
435
+
436
+.select2-container--classic.select2-container--open.select2-container--above .select2-selection--multiple {
437
+  border-top: none;
438
+  border-top-left-radius: 0;
439
+  border-top-right-radius: 0; }
440
+
441
+.select2-container--classic.select2-container--open.select2-container--below .select2-selection--multiple {
442
+  border-bottom: none;
443
+  border-bottom-left-radius: 0;
444
+  border-bottom-right-radius: 0; }
445
+
446
+.select2-container--classic .select2-search--dropdown .select2-search__field {
447
+  border: 1px solid #aaa;
448
+  outline: 0; }
449
+
450
+.select2-container--classic .select2-search--inline .select2-search__field {
451
+  outline: 0;
452
+  box-shadow: none; }
453
+
454
+.select2-container--classic .select2-dropdown {
455
+  background-color: white;
456
+  border: 1px solid transparent; }
457
+
458
+.select2-container--classic .select2-dropdown--above {
459
+  border-bottom: none; }
460
+
461
+.select2-container--classic .select2-dropdown--below {
462
+  border-top: none; }
463
+
464
+.select2-container--classic .select2-results > .select2-results__options {
465
+  max-height: 200px;
466
+  overflow-y: auto; }
467
+
468
+.select2-container--classic .select2-results__option[role=group] {
469
+  padding: 0; }
470
+
471
+.select2-container--classic .select2-results__option[aria-disabled=true] {
472
+  color: grey; }
473
+
474
+.select2-container--classic .select2-results__option--highlighted[aria-selected] {
475
+  background-color: #3875d7;
476
+  color: white; }
477
+
478
+.select2-container--classic .select2-results__group {
479
+  cursor: default;
480
+  display: block;
481
+  padding: 6px; }
482
+
483
+.select2-container--classic.select2-container--open .select2-dropdown {
484
+  border-color: #5897fb; }

File diff suppressed because it is too large
+ 1 - 0
app/staticfile/vendor/select2/dist/css/select2.min.css


File diff suppressed because it is too large
+ 3 - 0
app/staticfile/vendor/select2/dist/js/i18n/af.js


File diff suppressed because it is too large
+ 3 - 0
app/staticfile/vendor/select2/dist/js/i18n/ar.js


File diff suppressed because it is too large
+ 3 - 0
app/staticfile/vendor/select2/dist/js/i18n/az.js


File diff suppressed because it is too large
+ 3 - 0
app/staticfile/vendor/select2/dist/js/i18n/bg.js


File diff suppressed because it is too large
+ 3 - 0
app/staticfile/vendor/select2/dist/js/i18n/bn.js


File diff suppressed because it is too large
+ 3 - 0
app/staticfile/vendor/select2/dist/js/i18n/bs.js


File diff suppressed because it is too large
+ 3 - 0
app/staticfile/vendor/select2/dist/js/i18n/ca.js


File diff suppressed because it is too large
+ 3 - 0
app/staticfile/vendor/select2/dist/js/i18n/cs.js


File diff suppressed because it is too large
+ 3 - 0
app/staticfile/vendor/select2/dist/js/i18n/da.js


File diff suppressed because it is too large
+ 3 - 0
app/staticfile/vendor/select2/dist/js/i18n/de.js


File diff suppressed because it is too large
+ 3 - 0
app/staticfile/vendor/select2/dist/js/i18n/dsb.js


File diff suppressed because it is too large
+ 3 - 0
app/staticfile/vendor/select2/dist/js/i18n/el.js


File diff suppressed because it is too large
+ 3 - 0
app/staticfile/vendor/select2/dist/js/i18n/en.js


File diff suppressed because it is too large
+ 3 - 0
app/staticfile/vendor/select2/dist/js/i18n/es.js


File diff suppressed because it is too large
+ 3 - 0
app/staticfile/vendor/select2/dist/js/i18n/et.js


File diff suppressed because it is too large
+ 3 - 0
app/staticfile/vendor/select2/dist/js/i18n/eu.js


File diff suppressed because it is too large
+ 3 - 0
app/staticfile/vendor/select2/dist/js/i18n/fa.js


File diff suppressed because it is too large
+ 3 - 0
app/staticfile/vendor/select2/dist/js/i18n/fi.js


File diff suppressed because it is too large
+ 3 - 0
app/staticfile/vendor/select2/dist/js/i18n/fr.js


File diff suppressed because it is too large
+ 3 - 0
app/staticfile/vendor/select2/dist/js/i18n/gl.js


File diff suppressed because it is too large
+ 3 - 0
app/staticfile/vendor/select2/dist/js/i18n/he.js


File diff suppressed because it is too large
+ 3 - 0
app/staticfile/vendor/select2/dist/js/i18n/hi.js


File diff suppressed because it is too large
+ 3 - 0
app/staticfile/vendor/select2/dist/js/i18n/hr.js


File diff suppressed because it is too large
+ 3 - 0
app/staticfile/vendor/select2/dist/js/i18n/hsb.js


+ 0 - 0
app/staticfile/vendor/select2/dist/js/i18n/hu.js


部分文件因文件數量過多而無法顯示

แก้หน้า index_page.html และ menu.html · 86d81d25b9 - Gogs: Simplico Git Service
Explorar el Código

แก้หน้า index_page.html และ menu.html

Thiranon Wiriyanurakkul %!s(int64=8) %!d(string=hace) años
commit
86d81d25b9
Se han modificado 100 ficheros con 51408 adiciones y 0 borrados
  1. BIN
      .DS_Store
  2. 3 0
      .bowerrc
  3. 14 0
      .editorconfig
  4. 6 0
      .gitignore
  5. 3 0
      .vscode/settings.json
  6. 14 0
      bower.json
  7. 85 0
      config.xml
  8. 51 0
      gulpfile.js
  9. 83 0
      hooks/README.md
  10. 94 0
      hooks/after_prepare/010_add_platform_class.js
  11. 4 0
      ionic.project
  12. 3236 0
      package-lock.json
  13. 29 0
      package.json
  14. BIN
      resources/android/icon/drawable-hdpi-icon.png
  15. BIN
      resources/android/icon/drawable-ldpi-icon.png
  16. BIN
      resources/android/icon/drawable-mdpi-icon.png
  17. BIN
      resources/android/icon/drawable-xhdpi-icon.png
  18. BIN
      resources/android/icon/drawable-xxhdpi-icon.png
  19. BIN
      resources/android/icon/drawable-xxxhdpi-icon.png
  20. BIN
      resources/android/splash/drawable-land-hdpi-screen.png
  21. BIN
      resources/android/splash/drawable-land-ldpi-screen.png
  22. BIN
      resources/android/splash/drawable-land-mdpi-screen.png
  23. BIN
      resources/android/splash/drawable-land-xhdpi-screen.png
  24. BIN
      resources/android/splash/drawable-land-xxhdpi-screen.png
  25. BIN
      resources/android/splash/drawable-land-xxxhdpi-screen.png
  26. BIN
      resources/android/splash/drawable-port-hdpi-screen.png
  27. BIN
      resources/android/splash/drawable-port-ldpi-screen.png
  28. BIN
      resources/android/splash/drawable-port-mdpi-screen.png
  29. BIN
      resources/android/splash/drawable-port-xhdpi-screen.png
  30. BIN
      resources/android/splash/drawable-port-xxhdpi-screen.png
  31. BIN
      resources/android/splash/drawable-port-xxxhdpi-screen.png
  32. BIN
      resources/icon.png
  33. BIN
      resources/ios/icon/iTunesArtwork.png
  34. BIN
      resources/ios/icon/iTunesArtwork@2x.png
  35. BIN
      resources/ios/icon/icon-40.png
  36. BIN
      resources/ios/icon/icon-40@2x.png
  37. BIN
      resources/ios/icon/icon-40@3x.png
  38. BIN
      resources/ios/icon/icon-50.png
  39. BIN
      resources/ios/icon/icon-50@2x.png
  40. BIN
      resources/ios/icon/icon-60.png
  41. BIN
      resources/ios/icon/icon-60@2x.png
  42. BIN
      resources/ios/icon/icon-60@3x.png
  43. BIN
      resources/ios/icon/icon-72.png
  44. BIN
      resources/ios/icon/icon-72@2x.png
  45. BIN
      resources/ios/icon/icon-76.png
  46. BIN
      resources/ios/icon/icon-76@2x.png
  47. BIN
      resources/ios/icon/icon-83.5@2x.png
  48. BIN
      resources/ios/icon/icon-Small.png
  49. BIN
      resources/ios/icon/icon-Small@2x.png
  50. BIN
      resources/ios/icon/icon-small-1.png
  51. BIN
      resources/ios/icon/icon-small@2x-1.png
  52. BIN
      resources/ios/icon/icon-small@3x.png
  53. BIN
      resources/ios/icon/icon.png
  54. BIN
      resources/ios/icon/icon@2x.png
  55. BIN
      resources/ios/splash/Default-568h@2x~iphone.png
  56. BIN
      resources/ios/splash/Default-667h.png
  57. BIN
      resources/ios/splash/Default-736h.png
  58. BIN
      resources/ios/splash/Default-Landscape-736h.png
  59. BIN
      resources/ios/splash/Default-Landscape@2x~ipad.png
  60. BIN
      resources/ios/splash/Default-Landscape~ipad.png
  61. BIN
      resources/ios/splash/Default-Portrait@2x~ipad.png
  62. BIN
      resources/ios/splash/Default-Portrait~ipad.png
  63. BIN
      resources/ios/splash/Default@2x~iphone.png
  64. BIN
      resources/ios/splash/Default~iphone.png
  65. BIN
      resources/splash.png
  66. 22 0
      scss/ionic.app.scss
  67. BIN
      www.zip
  68. 12007 0
      www/css/ionic.app.css
  69. 1 0
      www/css/ionic.app.min.css
  70. BIN
      www/css/lively-bg.png
  71. 138 0
      www/css/style.css
  72. BIN
      www/img/Icon-Facebook.png
  73. BIN
      www/img/big-logo.png
  74. BIN
      www/img/default.png
  75. BIN
      www/img/ionic.png
  76. BIN
      www/img/lively-bg.png
  77. BIN
      www/img/logo.png
  78. BIN
      www/img/perspective.png
  79. BIN
      www/img/star.png
  80. 38 0
      www/index.html
  81. 579 0
      www/js/app.js
  82. 873 0
      www/js/controllers.js
  83. 41 0
      www/lib/Ionicons/.bower.json
  84. 21 0
      www/lib/Ionicons/LICENSE
  85. 31 0
      www/lib/Ionicons/bower.json
  86. 28009 0
      www/lib/Ionicons/cheatsheet.html
  87. 19 0
      www/lib/Ionicons/component.json
  88. 36 0
      www/lib/Ionicons/composer.json
  89. 1480 0
      www/lib/Ionicons/css/ionicons.css
  90. 11 0
      www/lib/Ionicons/css/ionicons.min.css
  91. BIN
      www/lib/Ionicons/fonts/ionicons.eot
  92. 2230 0
      www/lib/Ionicons/fonts/ionicons.svg
  93. BIN
      www/lib/Ionicons/fonts/ionicons.ttf
  94. BIN
      www/lib/Ionicons/fonts/ionicons.woff
  95. 27 0
      www/lib/Ionicons/less/_ionicons-font.less
  96. 1473 0
      www/lib/Ionicons/less/_ionicons-icons.less
  97. 747 0
      www/lib/Ionicons/less/_ionicons-variables.less
  98. 3 0
      www/lib/Ionicons/less/ionicons.less
  99. BIN
      www/lib/Ionicons/png/512/alert-circled.png
  100. 0 0
      www/lib/Ionicons/png/512/alert.png

BIN
.DS_Store


+ 3 - 0
.bowerrc

@@ -0,0 +1,3 @@
1
+{
2
+  "directory": "www/lib"
3
+}

+ 14 - 0
.editorconfig

@@ -0,0 +1,14 @@
1
+# http://editorconfig.org
2
+root = true
3
+
4
+[*]
5
+charset = utf-8
6
+indent_style = space
7
+indent_size = 2
8
+end_of_line = lf
9
+insert_final_newline = true
10
+trim_trailing_whitespace = true
11
+
12
+[*.md]
13
+insert_final_newline = false
14
+trim_trailing_whitespace = false

+ 6 - 0
.gitignore

@@ -0,0 +1,6 @@
1
+# Specifies intentionally untracked files to ignore when using Git
2
+# http://git-scm.com/docs/gitignore
3
+
4
+node_modules/
5
+platforms/
6
+plugins/

+ 3 - 0
.vscode/settings.json

@@ -0,0 +1,3 @@
1
+{
2
+    "git.ignoreLimitWarning": true
3
+}

+ 14 - 0
bower.json

@@ -0,0 +1,14 @@
1
+{
2
+  "name": "HelloIonic",
3
+  "private": "true",
4
+  "devDependencies": {
5
+    "ionic": "driftyco/ionic-bower#1.3.1"
6
+  },
7
+  "dependencies": {
8
+    "ng-cordova-oauth": "^0.2.10",
9
+    "font-awesome": "fontawesome#^4.6.3"
10
+  },
11
+  "resolutions": {
12
+    "angular": ">= 1.2.23"
13
+  }
14
+}

+ 85 - 0
config.xml

@@ -0,0 +1,85 @@
1
+<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
2
+<widget id="net.mcot.tnamcot" version="2.4.0" xmlns="http://www.w3.org/ns/widgets" xmlns:cdv="http://cordova.apache.org/ns/1.0">
3
+  <name>TNA</name>
4
+  <description>
5
+        Thai News Agency Official Website
6
+    </description>
7
+  <author email="patumos@gmail.com" href="http://www.tnamcot.com/">
8
+      TNA
9
+    </author>
10
+  <content src="index.html"/>
11
+  <access origin="*"/>
12
+  <access origin="tel:*" launch-external="yes"/>
13
+  <access origin="mailto:*" launch-external="yes"/>
14
+  <access origin="geo:*" launch-external="yes"/>
15
+  <access origin="maps:*" launch-external="yes"/>
16
+  <access origin="comgooglemaps-x-callback:*" launch-external="yes"/>
17
+  <meta http-equiv="Content-Security-Policy" content="default-src 'self' http://mcotn-api.simplico.net  https://www.googleapis.com https://graph.facebook.com https://api.instagram.com"/>
18
+  <allow-navigation href="*"/>
19
+  <preference name="webviewbounce" value="false"/>
20
+  <preference name="UIWebViewBounce" value="false"/>
21
+  <preference name="DisallowOverscroll" value="true"/>
22
+  <preference name="SplashScreenDelay" value="2000"/>
23
+  <preference name="FadeSplashScreenDuration" value="2000"/>
24
+  <preference name="android-minSdkVersion" value="16"/>
25
+  <preference name="BackupWebStorage" value="none"/>
26
+  <preference name="SplashScreen" value="screen"/>
27
+  <feature name="StatusBar">
28
+    <param name="ios-package" onload="true" value="CDVStatusBar"/>
29
+  </feature>
30
+  <platform name="ios">
31
+    <icon src="resources/ios/icon/icon.png" width="57" height="57"/>
32
+    <icon src="resources/ios/icon/icon@2x.png" width="114" height="114"/>
33
+    <icon src="resources/ios/icon/icon-40.png" width="40" height="40"/>
34
+    <icon src="resources/ios/icon/icon-40@2x.png" width="80" height="80"/>
35
+    <icon src="resources/ios/icon/icon-50.png" width="50" height="50"/>
36
+    <icon src="resources/ios/icon/icon-50@2x.png" width="100" height="100"/>
37
+    <icon src="resources/ios/icon/icon-60.png" width="60" height="60"/>
38
+    <icon src="resources/ios/icon/icon-60@2x.png" width="120" height="120"/>
39
+    <icon src="resources/ios/icon/icon-60@3x.png" width="180" height="180"/>
40
+    <icon src="resources/ios/icon/icon-72.png" width="72" height="72"/>
41
+    <icon src="resources/ios/icon/icon-72@2x.png" width="144" height="144"/>
42
+    <icon src="resources/ios/icon/icon-76.png" width="76" height="76"/>
43
+    <icon src="resources/ios/icon/icon-76@2x.png" width="152" height="152"/>
44
+    <icon src="resources/ios/icon/icon-small.png" width="29" height="29"/>
45
+    <icon src="resources/ios/icon/icon-small@2x.png" width="58" height="58"/>
46
+    <icon src="resources/ios/icon/icon-small@3x.png" width="87" height="87"/>
47
+    <splash src="resources/ios/splash/Default-568h@2x~iphone.png" width="640" height="1136"/>
48
+    <splash src="resources/ios/splash/Default-667h.png" width="750" height="1334"/>
49
+    <splash src="resources/ios/splash/Default-736h.png" width="1242" height="2208"/>
50
+    <splash src="resources/ios/splash/Default-Landscape-736h.png" width="2208" height="1242"/>
51
+    <splash src="resources/ios/splash/Default-Landscape@2x~ipad.png" width="2048" height="1536"/>
52
+    <splash src="resources/ios/splash/Default-Landscape~ipad.png" width="1024" height="768"/>
53
+    <splash src="resources/ios/splash/Default-Portrait@2x~ipad.png" width="1536" height="2048"/>
54
+    <splash src="resources/ios/splash/Default-Portrait~ipad.png" width="768" height="1024"/>
55
+    <splash src="resources/ios/splash/Default@2x~iphone.png" width="640" height="960"/>
56
+    <splash src="resources/ios/splash/Default~iphone.png" width="320" height="480"/>
57
+  </platform>
58
+  <platform name="android">
59
+    <preference name="android-minSdkVersion" value="25"/>
60
+    <preference name="android-targetSdkVersion" value="25"/>
61
+    <icon src="resources/android/icon/drawable-ldpi-icon.png" density="ldpi"/>
62
+    <icon src="resources/android/icon/drawable-mdpi-icon.png" density="mdpi"/>
63
+    <icon src="resources/android/icon/drawable-hdpi-icon.png" density="hdpi"/>
64
+    <icon src="resources/android/icon/drawable-xhdpi-icon.png" density="xhdpi"/>
65
+    <icon src="resources/android/icon/drawable-xxhdpi-icon.png" density="xxhdpi"/>
66
+    <icon src="resources/android/icon/drawable-xxxhdpi-icon.png" density="xxxhdpi"/>
67
+    <splash src="resources/android/splash/drawable-land-ldpi-screen.png" density="land-ldpi"/>
68
+    <splash src="resources/android/splash/drawable-land-mdpi-screen.png" density="land-mdpi"/>
69
+    <splash src="resources/android/splash/drawable-land-hdpi-screen.png" density="land-hdpi"/>
70
+    <splash src="resources/android/splash/drawable-land-xhdpi-screen.png" density="land-xhdpi"/>
71
+    <splash src="resources/android/splash/drawable-land-xxhdpi-screen.png" density="land-xxhdpi"/>
72
+    <splash src="resources/android/splash/drawable-land-xxxhdpi-screen.png" density="land-xxxhdpi"/>
73
+    <splash src="resources/android/splash/drawable-port-ldpi-screen.png" density="port-ldpi"/>
74
+    <splash src="resources/android/splash/drawable-port-mdpi-screen.png" density="port-mdpi"/>
75
+    <splash src="resources/android/splash/drawable-port-hdpi-screen.png" density="port-hdpi"/>
76
+    <splash src="resources/android/splash/drawable-port-xhdpi-screen.png" density="port-xhdpi"/>
77
+    <splash src="resources/android/splash/drawable-port-xxhdpi-screen.png" density="port-xxhdpi"/>
78
+    <splash src="resources/android/splash/drawable-port-xxxhdpi-screen.png" density="port-xxxhdpi"/>
79
+  </platform>
80
+  <icon src="resources/android/icon/drawable-xhdpi-icon.png"/>
81
+  <plugin name="cordova-plugin-facebook4" spec="~1.7.1">
82
+    <variable name="APP_ID" value="1820066744879942"/>
83
+    <variable name="APP_NAME" value="MCOT Social Login"/>
84
+  </plugin>
85
+</widget>

+ 51 - 0
gulpfile.js

@@ -0,0 +1,51 @@
1
+var gulp = require('gulp');
2
+var gutil = require('gulp-util');
3
+var bower = require('bower');
4
+var concat = require('gulp-concat');
5
+var sass = require('gulp-sass');
6
+var minifyCss = require('gulp-minify-css');
7
+var rename = require('gulp-rename');
8
+var sh = require('shelljs');
9
+
10
+var paths = {
11
+  sass: ['./scss/**/*.scss']
12
+};
13
+
14
+gulp.task('default', ['sass']);
15
+
16
+gulp.task('sass', function(done) {
17
+  gulp.src('./scss/ionic.app.scss')
18
+    .pipe(sass())
19
+    .on('error', sass.logError)
20
+    .pipe(gulp.dest('./www/css/'))
21
+    .pipe(minifyCss({
22
+      keepSpecialComments: 0
23
+    }))
24
+    .pipe(rename({ extname: '.min.css' }))
25
+    .pipe(gulp.dest('./www/css/'))
26
+    .on('end', done);
27
+});
28
+
29
+gulp.task('watch', function() {
30
+  gulp.watch(paths.sass, ['sass']);
31
+});
32
+
33
+gulp.task('install', ['git-check'], function() {
34
+  return bower.commands.install()
35
+    .on('log', function(data) {
36
+      gutil.log('bower', gutil.colors.cyan(data.id), data.message);
37
+    });
38
+});
39
+
40
+gulp.task('git-check', function(done) {
41
+  if (!sh.which('git')) {
42
+    console.log(
43
+      '  ' + gutil.colors.red('Git is not installed.'),
44
+      '\n  Git, the version control system, is required to download Ionic.',
45
+      '\n  Download git here:', gutil.colors.cyan('http://git-scm.com/downloads') + '.',
46
+      '\n  Once git is installed, run \'' + gutil.colors.cyan('gulp install') + '\' again.'
47
+    );
48
+    process.exit(1);
49
+  }
50
+  done();
51
+});

+ 83 - 0
hooks/README.md

@@ -0,0 +1,83 @@
1
+<!--
2
+#
3
+# Licensed to the Apache Software Foundation (ASF) under one
4
+# or more contributor license agreements.  See the NOTICE file
5
+# distributed with this work for additional information
6
+# regarding copyright ownership.  The ASF licenses this file
7
+# to you under the Apache License, Version 2.0 (the
8
+# "License"); you may not use this file except in compliance
9
+# with the License.  You may obtain a copy of the License at
10
+#
11
+# http://www.apache.org/licenses/LICENSE-2.0
12
+#
13
+# Unless required by applicable law or agreed to in writing,
14
+# software distributed under the License is distributed on an
15
+# "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
16
+#  KIND, either express or implied.  See the License for the
17
+# specific language governing permissions and limitations
18
+# under the License.
19
+#
20
+-->
21
+# Cordova Hooks
22
+
23
+This directory may contain scripts used to customize cordova commands. This
24
+directory used to exist at `.cordova/hooks`, but has now been moved to the
25
+project root. Any scripts you add to these directories will be executed before
26
+and after the commands corresponding to the directory name. Useful for
27
+integrating your own build systems or integrating with version control systems.
28
+
29
+__Remember__: Make your scripts executable.
30
+
31
+## Hook Directories
32
+The following subdirectories will be used for hooks:
33
+
34
+    after_build/
35
+    after_compile/
36
+    after_docs/
37
+    after_emulate/
38
+    after_platform_add/
39
+    after_platform_rm/
40
+    after_platform_ls/
41
+    after_plugin_add/
42
+    after_plugin_ls/
43
+    after_plugin_rm/
44
+    after_plugin_search/
45
+    after_prepare/
46
+    after_run/
47
+    after_serve/
48
+    before_build/
49
+    before_compile/
50
+    before_docs/
51
+    before_emulate/
52
+    before_platform_add/
53
+    before_platform_rm/
54
+    before_platform_ls/
55
+    before_plugin_add/
56
+    before_plugin_ls/
57
+    before_plugin_rm/
58
+    before_plugin_search/
59
+    before_prepare/
60
+    before_run/
61
+    before_serve/
62
+    pre_package/ <-- Windows 8 and Windows Phone only.
63
+
64
+## Script Interface
65
+
66
+All scripts are run from the project's root directory and have the root directory passes as the first argument. All other options are passed to the script using environment variables:
67
+
68
+* CORDOVA_VERSION - The version of the Cordova-CLI.
69
+* CORDOVA_PLATFORMS - Comma separated list of platforms that the command applies to (e.g.: android, ios).
70
+* CORDOVA_PLUGINS - Comma separated list of plugin IDs that the command applies to (e.g.: org.apache.cordova.file, org.apache.cordova.file-transfer)
71
+* CORDOVA_HOOK - Path to the hook that is being executed.
72
+* CORDOVA_CMDLINE - The exact command-line arguments passed to cordova (e.g.: cordova run ios --emulate)
73
+
74
+If a script returns a non-zero exit code, then the parent cordova command will be aborted.
75
+
76
+
77
+## Writing hooks
78
+
79
+We highly recommend writting your hooks using Node.js so that they are
80
+cross-platform. Some good examples are shown here:
81
+
82
+[http://devgirl.org/2013/11/12/three-hooks-your-cordovaphonegap-project-needs/](http://devgirl.org/2013/11/12/three-hooks-your-cordovaphonegap-project-needs/)
83
+

+ 94 - 0
hooks/after_prepare/010_add_platform_class.js

@@ -0,0 +1,94 @@
1
+#!/usr/bin/env node
2
+
3
+// Add Platform Class
4
+// v1.0
5
+// Automatically adds the platform class to the body tag
6
+// after the `prepare` command. By placing the platform CSS classes
7
+// directly in the HTML built for the platform, it speeds up
8
+// rendering the correct layout/style for the specific platform
9
+// instead of waiting for the JS to figure out the correct classes.
10
+
11
+var fs = require('fs');
12
+var path = require('path');
13
+
14
+var rootdir = process.argv[2];
15
+
16
+function addPlatformBodyTag(indexPath, platform) {
17
+  // add the platform class to the body tag
18
+  try {
19
+    var platformClass = 'platform-' + platform;
20
+    var cordovaClass = 'platform-cordova platform-webview';
21
+
22
+    var html = fs.readFileSync(indexPath, 'utf8');
23
+
24
+    var bodyTag = findBodyTag(html);
25
+    if(!bodyTag) return; // no opening body tag, something's wrong
26
+
27
+    if(bodyTag.indexOf(platformClass) > -1) return; // already added
28
+
29
+    var newBodyTag = bodyTag;
30
+
31
+    var classAttr = findClassAttr(bodyTag);
32
+    if(classAttr) {
33
+      // body tag has existing class attribute, add the classname
34
+      var endingQuote = classAttr.substring(classAttr.length-1);
35
+      var newClassAttr = classAttr.substring(0, classAttr.length-1);
36
+      newClassAttr += ' ' + platformClass + ' ' + cordovaClass + endingQuote;
37
+      newBodyTag = bodyTag.replace(classAttr, newClassAttr);
38
+
39
+    } else {
40
+      // add class attribute to the body tag
41
+      newBodyTag = bodyTag.replace('>', ' class="' + platformClass + ' ' + cordovaClass + '">');
42
+    }
43
+
44
+    html = html.replace(bodyTag, newBodyTag);
45
+
46
+    fs.writeFileSync(indexPath, html, 'utf8');
47
+
48
+    process.stdout.write('add to body class: ' + platformClass + '\n');
49
+  } catch(e) {
50
+    process.stdout.write(e);
51
+  }
52
+}
53
+
54
+function findBodyTag(html) {
55
+  // get the body tag
56
+  try{
57
+    return html.match(/<body(?=[\s>])(.*?)>/gi)[0];
58
+  }catch(e){}
59
+}
60
+
61
+function findClassAttr(bodyTag) {
62
+  // get the body tag's class attribute
63
+  try{
64
+    return bodyTag.match(/ class=["|'](.*?)["|']/gi)[0];
65
+  }catch(e){}
66
+}
67
+
68
+if (rootdir) {
69
+
70
+  // go through each of the platform directories that have been prepared
71
+  var platforms = (process.env.CORDOVA_PLATFORMS ? process.env.CORDOVA_PLATFORMS.split(',') : []);
72
+
73
+  for(var x=0; x<platforms.length; x++) {
74
+    // open up the index.html file at the www root
75
+    try {
76
+      var platform = platforms[x].trim().toLowerCase();
77
+      var indexPath;
78
+
79
+      if(platform == 'android') {
80
+        indexPath = path.join('platforms', platform, 'assets', 'www', 'index.html');
81
+      } else {
82
+        indexPath = path.join('platforms', platform, 'www', 'index.html');
83
+      }
84
+
85
+      if(fs.existsSync(indexPath)) {
86
+        addPlatformBodyTag(indexPath, platform);
87
+      }
88
+
89
+    } catch(e) {
90
+      process.stdout.write(e);
91
+    }
92
+  }
93
+
94
+}

+ 4 - 0
ionic.project

@@ -0,0 +1,4 @@
1
+{
2
+  "name": "lively-app",
3
+  "app_id": ""
4
+}

La diferencia del archivo ha sido suprimido porque es demasiado grande
+ 3236 - 0
package-lock.json


+ 29 - 0
package.json

@@ -0,0 +1,29 @@
1
+{
2
+  "name": "lively-app",
3
+  "version": "1.1.1",
4
+  "description": "lively-app: An Ionic project",
5
+  "dependencies": {
6
+    "gulp": "^3.5.6",
7
+    "gulp-sass": "^2.0.4",
8
+    "gulp-concat": "^2.2.0",
9
+    "gulp-minify-css": "^0.3.0",
10
+    "gulp-rename": "^1.2.0"
11
+  },
12
+  "devDependencies": {
13
+    "bower": "^1.3.3",
14
+    "gulp-util": "^2.2.14",
15
+    "shelljs": "^0.3.0"
16
+  },
17
+  "cordovaPlugins": [
18
+    "cordova-plugin-device",
19
+    "cordova-plugin-console",
20
+    "cordova-plugin-whitelist",
21
+    "cordova-plugin-splashscreen",
22
+    "cordova-plugin-statusbar",
23
+    "ionic-plugin-keyboard"
24
+  ],
25
+  "cordovaPlatforms": [
26
+    "android",
27
+    "ios"
28
+  ]
29
+}

BIN
resources/android/icon/drawable-hdpi-icon.png


BIN
resources/android/icon/drawable-ldpi-icon.png


BIN
resources/android/icon/drawable-mdpi-icon.png


BIN
resources/android/icon/drawable-xhdpi-icon.png


BIN
resources/android/icon/drawable-xxhdpi-icon.png


BIN
resources/android/icon/drawable-xxxhdpi-icon.png


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


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


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


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


La diferencia del archivo ha sido suprimido porque es demasiado grande
+ 12007 - 0
www/css/ionic.app.css


La diferencia del archivo ha sido suprimido porque es demasiado grande
+ 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
+}

La diferencia del archivo ha sido suprimido porque es demasiado grande
+ 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
+}

La diferencia del archivo ha sido suprimido porque es demasiado grande
+ 1480 - 0
www/lib/Ionicons/css/ionicons.css


La diferencia del archivo ha sido suprimido porque es demasiado grande
+ 11 - 0
www/lib/Ionicons/css/ionicons.min.css


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


La diferencia del archivo ha sido suprimido porque es demasiado grande
+ 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
+}

La diferencia del archivo ha sido suprimido porque es demasiado grande
+ 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


Algunos archivos no se mostraron porque demasiados archivos cambiaron en este cambio

Anmelden - Gogs: Simplico Git Service

Anmelden