@ -0,0 +1,3 @@ |
|||||
|
{ |
||||
|
"directory": "www/lib" |
||||
|
} |
@ -0,0 +1,14 @@ |
|||||
|
# http://editorconfig.org |
||||
|
root = true |
||||
|
|
||||
|
[*] |
||||
|
charset = utf-8 |
||||
|
indent_style = space |
||||
|
indent_size = 2 |
||||
|
end_of_line = lf |
||||
|
insert_final_newline = true |
||||
|
trim_trailing_whitespace = true |
||||
|
|
||||
|
[*.md] |
||||
|
insert_final_newline = false |
||||
|
trim_trailing_whitespace = false |
@ -0,0 +1,9 @@ |
|||||
|
# Specifies intentionally untracked files to ignore when using Git |
||||
|
# http://git-scm.com/docs/gitignore |
||||
|
|
||||
|
node_modules/ |
||||
|
platforms/ |
||||
|
plugins/ |
||||
|
npm-debug.log |
||||
|
.idea/ |
||||
|
www/lib/ |
@ -0,0 +1,11 @@ |
|||||
|
{ |
||||
|
"name": "HelloIonic", |
||||
|
"private": "true", |
||||
|
"devDependencies": { |
||||
|
"ionic": "driftyco/ionic-bower#1.3.2" |
||||
|
}, |
||||
|
"dependencies": { |
||||
|
"angular-translate": "^2.14.0", |
||||
|
"ui-leaflet": "^2.0.0" |
||||
|
} |
||||
|
} |
@ -0,0 +1,22 @@ |
|||||
|
<?xml version="1.0" encoding="UTF-8" standalone="yes"?> |
||||
|
<widget id="com.ionicframework.openeventsplatformapp652778" version="0.0.1" xmlns="http://www.w3.org/ns/widgets" xmlns:cdv="http://cordova.apache.org/ns/1.0"> |
||||
|
<name>openEventsPlatformApp</name> |
||||
|
<description> |
||||
|
An Ionic Framework and Cordova project. |
||||
|
</description> |
||||
|
<author email="you@example.com" href="http://example.com/"> |
||||
|
Your Name Here |
||||
|
</author> |
||||
|
<content src="index.html"/> |
||||
|
<access origin="*"/> |
||||
|
<preference name="webviewbounce" value="false"/> |
||||
|
<preference name="UIWebViewBounce" value="false"/> |
||||
|
<preference name="DisallowOverscroll" value="true"/> |
||||
|
<preference name="SplashScreenDelay" value="2000"/> |
||||
|
<preference name="FadeSplashScreenDuration" value="2000"/> |
||||
|
<preference name="android-minSdkVersion" value="16"/> |
||||
|
<preference name="BackupWebStorage" value="none"/> |
||||
|
<feature name="StatusBar"> |
||||
|
<param name="ios-package" value="CDVStatusBar" onload="true"/> |
||||
|
</feature> |
||||
|
</widget> |
@ -0,0 +1,51 @@ |
|||||
|
var gulp = require('gulp'); |
||||
|
var gutil = require('gulp-util'); |
||||
|
var bower = require('bower'); |
||||
|
var concat = require('gulp-concat'); |
||||
|
var sass = require('gulp-sass'); |
||||
|
var minifyCss = require('gulp-minify-css'); |
||||
|
var rename = require('gulp-rename'); |
||||
|
var sh = require('shelljs'); |
||||
|
|
||||
|
var paths = { |
||||
|
sass: ['./scss/**/*.scss'] |
||||
|
}; |
||||
|
|
||||
|
gulp.task('default', ['sass']); |
||||
|
|
||||
|
gulp.task('sass', function(done) { |
||||
|
gulp.src('./scss/ionic.app.scss') |
||||
|
.pipe(sass()) |
||||
|
.on('error', sass.logError) |
||||
|
.pipe(gulp.dest('./www/css/')) |
||||
|
.pipe(minifyCss({ |
||||
|
keepSpecialComments: 0 |
||||
|
})) |
||||
|
.pipe(rename({ extname: '.min.css' })) |
||||
|
.pipe(gulp.dest('./www/css/')) |
||||
|
.on('end', done); |
||||
|
}); |
||||
|
|
||||
|
gulp.task('watch', ['sass'], function() { |
||||
|
gulp.watch(paths.sass, ['sass']); |
||||
|
}); |
||||
|
|
||||
|
gulp.task('install', ['git-check'], function() { |
||||
|
return bower.commands.install() |
||||
|
.on('log', function(data) { |
||||
|
gutil.log('bower', gutil.colors.cyan(data.id), data.message); |
||||
|
}); |
||||
|
}); |
||||
|
|
||||
|
gulp.task('git-check', function(done) { |
||||
|
if (!sh.which('git')) { |
||||
|
console.log( |
||||
|
' ' + gutil.colors.red('Git is not installed.'), |
||||
|
'\n Git, the version control system, is required to download Ionic.', |
||||
|
'\n Download git here:', gutil.colors.cyan('http://git-scm.com/downloads') + '.', |
||||
|
'\n Once git is installed, run \'' + gutil.colors.cyan('gulp install') + '\' again.' |
||||
|
); |
||||
|
process.exit(1); |
||||
|
} |
||||
|
done(); |
||||
|
}); |
@ -0,0 +1,83 @@ |
|||||
|
<!-- |
||||
|
# |
||||
|
# Licensed to the Apache Software Foundation (ASF) under one |
||||
|
# or more contributor license agreements. See the NOTICE file |
||||
|
# distributed with this work for additional information |
||||
|
# regarding copyright ownership. The ASF licenses this file |
||||
|
# to you under the Apache License, Version 2.0 (the |
||||
|
# "License"); you may not use this file except in compliance |
||||
|
# with the License. You may obtain a copy of the License at |
||||
|
# |
||||
|
# http://www.apache.org/licenses/LICENSE-2.0 |
||||
|
# |
||||
|
# Unless required by applicable law or agreed to in writing, |
||||
|
# software distributed under the License is distributed on an |
||||
|
# "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY |
||||
|
# KIND, either express or implied. See the License for the |
||||
|
# specific language governing permissions and limitations |
||||
|
# under the License. |
||||
|
# |
||||
|
--> |
||||
|
# Cordova Hooks |
||||
|
|
||||
|
This directory may contain scripts used to customize cordova commands. This |
||||
|
directory used to exist at `.cordova/hooks`, but has now been moved to the |
||||
|
project root. Any scripts you add to these directories will be executed before |
||||
|
and after the commands corresponding to the directory name. Useful for |
||||
|
integrating your own build systems or integrating with version control systems. |
||||
|
|
||||
|
__Remember__: Make your scripts executable. |
||||
|
|
||||
|
## Hook Directories |
||||
|
The following subdirectories will be used for hooks: |
||||
|
|
||||
|
after_build/ |
||||
|
after_compile/ |
||||
|
after_docs/ |
||||
|
after_emulate/ |
||||
|
after_platform_add/ |
||||
|
after_platform_rm/ |
||||
|
after_platform_ls/ |
||||
|
after_plugin_add/ |
||||
|
after_plugin_ls/ |
||||
|
after_plugin_rm/ |
||||
|
after_plugin_search/ |
||||
|
after_prepare/ |
||||
|
after_run/ |
||||
|
after_serve/ |
||||
|
before_build/ |
||||
|
before_compile/ |
||||
|
before_docs/ |
||||
|
before_emulate/ |
||||
|
before_platform_add/ |
||||
|
before_platform_rm/ |
||||
|
before_platform_ls/ |
||||
|
before_plugin_add/ |
||||
|
before_plugin_ls/ |
||||
|
before_plugin_rm/ |
||||
|
before_plugin_search/ |
||||
|
before_prepare/ |
||||
|
before_run/ |
||||
|
before_serve/ |
||||
|
pre_package/ <-- Windows 8 and Windows Phone only. |
||||
|
|
||||
|
## Script Interface |
||||
|
|
||||
|
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: |
||||
|
|
||||
|
* CORDOVA_VERSION - The version of the Cordova-CLI. |
||||
|
* CORDOVA_PLATFORMS - Comma separated list of platforms that the command applies to (e.g.: android, ios). |
||||
|
* CORDOVA_PLUGINS - Comma separated list of plugin IDs that the command applies to (e.g.: org.apache.cordova.file, org.apache.cordova.file-transfer) |
||||
|
* CORDOVA_HOOK - Path to the hook that is being executed. |
||||
|
* CORDOVA_CMDLINE - The exact command-line arguments passed to cordova (e.g.: cordova run ios --emulate) |
||||
|
|
||||
|
If a script returns a non-zero exit code, then the parent cordova command will be aborted. |
||||
|
|
||||
|
|
||||
|
## Writing hooks |
||||
|
|
||||
|
We highly recommend writting your hooks using Node.js so that they are |
||||
|
cross-platform. Some good examples are shown here: |
||||
|
|
||||
|
[http://devgirl.org/2013/11/12/three-hooks-your-cordovaphonegap-project-needs/](http://devgirl.org/2013/11/12/three-hooks-your-cordovaphonegap-project-needs/) |
||||
|
|
@ -0,0 +1,94 @@ |
|||||
|
#!/usr/bin/env node
|
||||
|
|
||||
|
// Add Platform Class
|
||||
|
// v1.0
|
||||
|
// Automatically adds the platform class to the body tag
|
||||
|
// after the `prepare` command. By placing the platform CSS classes
|
||||
|
// directly in the HTML built for the platform, it speeds up
|
||||
|
// rendering the correct layout/style for the specific platform
|
||||
|
// instead of waiting for the JS to figure out the correct classes.
|
||||
|
|
||||
|
var fs = require('fs'); |
||||
|
var path = require('path'); |
||||
|
|
||||
|
var rootdir = process.argv[2]; |
||||
|
|
||||
|
function addPlatformBodyTag(indexPath, platform) { |
||||
|
// add the platform class to the body tag
|
||||
|
try { |
||||
|
var platformClass = 'platform-' + platform; |
||||
|
var cordovaClass = 'platform-cordova platform-webview'; |
||||
|
|
||||
|
var html = fs.readFileSync(indexPath, 'utf8'); |
||||
|
|
||||
|
var bodyTag = findBodyTag(html); |
||||
|
if(!bodyTag) return; // no opening body tag, something's wrong
|
||||
|
|
||||
|
if(bodyTag.indexOf(platformClass) > -1) return; // already added
|
||||
|
|
||||
|
var newBodyTag = bodyTag; |
||||
|
|
||||
|
var classAttr = findClassAttr(bodyTag); |
||||
|
if(classAttr) { |
||||
|
// body tag has existing class attribute, add the classname
|
||||
|
var endingQuote = classAttr.substring(classAttr.length-1); |
||||
|
var newClassAttr = classAttr.substring(0, classAttr.length-1); |
||||
|
newClassAttr += ' ' + platformClass + ' ' + cordovaClass + endingQuote; |
||||
|
newBodyTag = bodyTag.replace(classAttr, newClassAttr); |
||||
|
|
||||
|
} else { |
||||
|
// add class attribute to the body tag
|
||||
|
newBodyTag = bodyTag.replace('>', ' class="' + platformClass + ' ' + cordovaClass + '">'); |
||||
|
} |
||||
|
|
||||
|
html = html.replace(bodyTag, newBodyTag); |
||||
|
|
||||
|
fs.writeFileSync(indexPath, html, 'utf8'); |
||||
|
|
||||
|
process.stdout.write('add to body class: ' + platformClass + '\n'); |
||||
|
} catch(e) { |
||||
|
process.stdout.write(e); |
||||
|
} |
||||
|
} |
||||
|
|
||||
|
function findBodyTag(html) { |
||||
|
// get the body tag
|
||||
|
try{ |
||||
|
return html.match(/<body(?=[\s>])(.*?)>/gi)[0]; |
||||
|
}catch(e){} |
||||
|
} |
||||
|
|
||||
|
function findClassAttr(bodyTag) { |
||||
|
// get the body tag's class attribute
|
||||
|
try{ |
||||
|
return bodyTag.match(/ class=["|'](.*?)["|']/gi)[0]; |
||||
|
}catch(e){} |
||||
|
} |
||||
|
|
||||
|
if (rootdir) { |
||||
|
|
||||
|
// go through each of the platform directories that have been prepared
|
||||
|
var platforms = (process.env.CORDOVA_PLATFORMS ? process.env.CORDOVA_PLATFORMS.split(',') : []); |
||||
|
|
||||
|
for(var x=0; x<platforms.length; x++) { |
||||
|
// open up the index.html file at the www root
|
||||
|
try { |
||||
|
var platform = platforms[x].trim().toLowerCase(); |
||||
|
var indexPath; |
||||
|
|
||||
|
if(platform == 'android') { |
||||
|
indexPath = path.join('platforms', platform, 'assets', 'www', 'index.html'); |
||||
|
} else { |
||||
|
indexPath = path.join('platforms', platform, 'www', 'index.html'); |
||||
|
} |
||||
|
|
||||
|
if(fs.existsSync(indexPath)) { |
||||
|
addPlatformBodyTag(indexPath, platform); |
||||
|
} |
||||
|
|
||||
|
} catch(e) { |
||||
|
process.stdout.write(e); |
||||
|
} |
||||
|
} |
||||
|
|
||||
|
} |
@ -0,0 +1,4 @@ |
|||||
|
{ |
||||
|
"name": "openEventsPlatformApp", |
||||
|
"app_id": "" |
||||
|
} |
@ -0,0 +1,26 @@ |
|||||
|
{ |
||||
|
"name": "openeventsplatformapp", |
||||
|
"version": "1.1.1", |
||||
|
"description": "openEventsPlatformApp: An Ionic project", |
||||
|
"dependencies": { |
||||
|
"gulp": "^3.5.6", |
||||
|
"gulp-sass": "^2.0.4", |
||||
|
"gulp-concat": "^2.2.0", |
||||
|
"gulp-minify-css": "^0.3.0", |
||||
|
"gulp-rename": "^1.2.0" |
||||
|
}, |
||||
|
"devDependencies": { |
||||
|
"bower": "^1.3.3", |
||||
|
"gulp-util": "^2.2.14", |
||||
|
"shelljs": "^0.3.0" |
||||
|
}, |
||||
|
"cordovaPlugins": [ |
||||
|
"cordova-plugin-whitelist", |
||||
|
"cordova-plugin-statusbar", |
||||
|
"cordova-plugin-console", |
||||
|
"cordova-plugin-device", |
||||
|
"cordova-plugin-splashscreen", |
||||
|
"ionic-plugin-keyboard" |
||||
|
], |
||||
|
"cordovaPlatforms": [] |
||||
|
} |
@ -0,0 +1,23 @@ |
|||||
|
/* |
||||
|
To customize the look and feel of Ionic, you can override the variables |
||||
|
in ionic's _variables.scss file. |
||||
|
|
||||
|
For example, you might change some of the default colors: |
||||
|
|
||||
|
$light: #fff !default; |
||||
|
$stable: #f8f8f8 !default; |
||||
|
$positive: #387ef5 !default; |
||||
|
$calm: #11c1f3 !default; |
||||
|
$balanced: #33cd5f !default; |
||||
|
$energized: #ffc900 !default; |
||||
|
$assertive: #ef473a !default; |
||||
|
$royal: #886aea !default; |
||||
|
$dark: #444 !default; |
||||
|
*/ |
||||
|
|
||||
|
// The path for our ionicons font files, relative to the built CSS in www/css |
||||
|
$ionicons-font-path: "../lib/ionic/fonts" !default; |
||||
|
|
||||
|
// Include all of Ionic |
||||
|
@import "www/lib/ionic/scss/ionic"; |
||||
|
|
@ -0,0 +1 @@ |
|||||
|
/* Empty. Add your own CSS if you like */ |
@ -0,0 +1,56 @@ |
|||||
|
<!DOCTYPE html> |
||||
|
<html> |
||||
|
<head> |
||||
|
<meta charset="utf-8"> |
||||
|
<meta name="viewport" content="initial-scale=1, maximum-scale=1, user-scalable=no, width=device-width"> |
||||
|
<title></title> |
||||
|
|
||||
|
<link rel="manifest" href="manifest.json"> |
||||
|
|
||||
|
<!-- un-comment this code to enable service worker |
||||
|
<script> |
||||
|
if ('serviceWorker' in navigator) { |
||||
|
navigator.serviceWorker.register('service-worker.js') |
||||
|
.then(() => console.log('service worker installed')) |
||||
|
.catch(err => console.log('Error', err)); |
||||
|
} |
||||
|
</script>--> |
||||
|
|
||||
|
<link href="lib/ionic/css/ionic.css" rel="stylesheet"> |
||||
|
<link href="css/style.css" rel="stylesheet"> |
||||
|
|
||||
|
<!-- IF using Sass (run gulp sass first), then uncomment below and remove the CSS includes above |
||||
|
<link href="css/ionic.app.css" rel="stylesheet"> |
||||
|
--> |
||||
|
|
||||
|
<!-- ionic/angularjs js --> |
||||
|
<script src="lib/ionic/js/ionic.bundle.js"></script> |
||||
|
|
||||
|
<!-- cordova script (this will be a 404 during development) --> |
||||
|
<script src="cordova.js"></script> |
||||
|
|
||||
|
<!-- openstreetmaps angular - leaflet --> |
||||
|
<script src="lib/leaflet/dist/leaflet.js"></script> |
||||
|
<script src="lib/angular-simple-logger/dist/angular-simple-logger.js"></script> |
||||
|
<!--<script src="lib/ui-leaflet/dist/ui-leaflet_dev_mapped.js"></script>--> |
||||
|
<script src="lib/ui-leaflet/dist/ui-leaflet.js"></script> |
||||
|
<link rel="stylesheet" href="lib/leaflet/dist/leaflet.css" /> |
||||
|
|
||||
|
<!-- Angular Translate --> |
||||
|
<script src="lib/angular-translate/angular-translate.js"></script> |
||||
|
<script src="js/translations.js"></script> |
||||
|
|
||||
|
<!-- your app's js --> |
||||
|
<script src="js/app.js"></script> |
||||
|
<script src="js/menu.js"></script> |
||||
|
<script src="js/events.js"></script> |
||||
|
<script src="js/event.js"></script> |
||||
|
<script src="js/users.js"></script> |
||||
|
<script src="js/user.js"></script> |
||||
|
|
||||
|
</head> |
||||
|
|
||||
|
<body ng-app="app"> |
||||
|
<ion-nav-view></ion-nav-view> |
||||
|
</body> |
||||
|
</html> |
@ -0,0 +1,125 @@ |
|||||
|
var urlapi = "http://localhost:3000/api/"; |
||||
|
|
||||
|
|
||||
|
angular.module('app', [ |
||||
|
'ionic', |
||||
|
'pascalprecht.translate', |
||||
|
'app.menu', |
||||
|
'app.events', |
||||
|
'app.event', |
||||
|
'app.users', |
||||
|
'app.user' |
||||
|
]) |
||||
|
|
||||
|
.run(function($ionicPlatform) { |
||||
|
$ionicPlatform.ready(function() { |
||||
|
// Hide the accessory bar by default (remove this to show the accessory bar above the keyboard
|
||||
|
// for form inputs)
|
||||
|
if (window.cordova && window.cordova.plugins.Keyboard) { |
||||
|
cordova.plugins.Keyboard.hideKeyboardAccessoryBar(true); |
||||
|
cordova.plugins.Keyboard.disableScroll(true); |
||||
|
|
||||
|
} |
||||
|
if (window.StatusBar) { |
||||
|
// org.apache.cordova.statusbar required
|
||||
|
StatusBar.styleDefault(); |
||||
|
} |
||||
|
}); |
||||
|
}) |
||||
|
|
||||
|
.config(function($stateProvider, $urlRouterProvider) { |
||||
|
$stateProvider |
||||
|
|
||||
|
// setup an abstract state for the tabs directive
|
||||
|
.state('app', { |
||||
|
url: '/app', |
||||
|
abstract: true, |
||||
|
templateUrl: 'templates/menu.html', |
||||
|
controller: 'MenuCtrl' |
||||
|
}) |
||||
|
|
||||
|
// Each tab has its own nav history stack:
|
||||
|
|
||||
|
.state('app.events', { |
||||
|
url: '/events', |
||||
|
views: { |
||||
|
'menuContent': { |
||||
|
templateUrl: 'templates/events.html', |
||||
|
controller: 'EventsCtrl' |
||||
|
} |
||||
|
} |
||||
|
}).state('app.event', { |
||||
|
url: '/events/:eventid', |
||||
|
views: { |
||||
|
'menuContent': { |
||||
|
templateUrl: 'templates/event.html', |
||||
|
controller: 'EventCtrl' |
||||
|
} |
||||
|
} |
||||
|
}) |
||||
|
.state('app.users', { |
||||
|
url: '/users', |
||||
|
views: { |
||||
|
'menuContent': { |
||||
|
templateUrl: 'templates/users.html', |
||||
|
controller: 'UsersCtrl' |
||||
|
} |
||||
|
} |
||||
|
}) |
||||
|
.state('app.user', { |
||||
|
url: '/users/:userid', |
||||
|
views: { |
||||
|
'menuContent': { |
||||
|
templateUrl: 'templates/user.html', |
||||
|
controller: 'UserCtrl' |
||||
|
} |
||||
|
} |
||||
|
}); |
||||
|
|
||||
|
// if none of the above states are matched, use this as the fallback
|
||||
|
$urlRouterProvider.otherwise('/app/events'); |
||||
|
}) |
||||
|
/* translator */ |
||||
|
.config(['$translateProvider', function($translateProvider) { |
||||
|
|
||||
|
/* get lang from the file translations.js */ |
||||
|
for (lang in translations) { |
||||
|
$translateProvider.translations(lang, translations[lang]); |
||||
|
} |
||||
|
|
||||
|
if (window.localStorage.getItem('lang')) { |
||||
|
$translateProvider.preferredLanguage(window.localStorage.getItem('lang')); |
||||
|
} else { |
||||
|
$translateProvider.preferredLanguage('english'); |
||||
|
}; |
||||
|
|
||||
|
$translateProvider.useSanitizeValueStrategy('escape'); |
||||
|
|
||||
|
}]) |
||||
|
.factory('httpInterceptor', function httpInterceptor($q, $window, $location) { |
||||
|
return { |
||||
|
request: function(config) { |
||||
|
return config; |
||||
|
}, |
||||
|
requestError: function(config) { |
||||
|
return config; |
||||
|
}, |
||||
|
response: function(res) { |
||||
|
return res; |
||||
|
}, |
||||
|
responseError: function(res) { |
||||
|
return res; |
||||
|
} |
||||
|
} |
||||
|
}) |
||||
|
.factory('api', function($http) { |
||||
|
return { |
||||
|
init: function() { |
||||
|
$http.defaults.headers.common['X-Access-Token'] = localStorage.getItem("cim_app_token"); |
||||
|
$http.defaults.headers.post['X-Access-Token'] = localStorage.getItem("cim_app_token"); |
||||
|
} |
||||
|
}; |
||||
|
}) |
||||
|
.run(function(api) { |
||||
|
api.init(); |
||||
|
}); |
@ -0,0 +1,57 @@ |
|||||
|
angular.module('app.event', ['pascalprecht.translate', 'ui-leaflet']) |
||||
|
|
||||
|
.controller('EventCtrl', function($scope, $http, $ionicModal, |
||||
|
$stateParams, $timeout, $ionicLoading, $filter, |
||||
|
leafletData, leafletBoundsHelpers) { |
||||
|
|
||||
|
|
||||
|
$scope.center= { |
||||
|
lat: 0, |
||||
|
lng: 0, |
||||
|
zoom: 1 |
||||
|
}; |
||||
|
$scope.markers=[]; |
||||
|
$scope.tiles= { |
||||
|
url: "http://{s}.tile.openstreetmap.org/{z}/{x}/{y}.png", |
||||
|
options: { |
||||
|
attribution: '<a href="http://www.openstreetmap.org/copyright">OpenStreetMap</a> contributors' |
||||
|
} |
||||
|
}; |
||||
|
|
||||
|
|
||||
|
$scope.event={}; |
||||
|
$scope.doRefresh = function() { |
||||
|
/* events refresh: */ |
||||
|
$http.get(urlapi + 'events/id/'+ $stateParams.eventid) |
||||
|
.then(function(data){ |
||||
|
console.log('data success events'); |
||||
|
console.log(data); // for browser console
|
||||
|
//$scope.events = data.data; // for UI
|
||||
|
$scope.event=data.data; |
||||
|
$scope.$broadcast('scroll.refreshComplete');//refresher stop
|
||||
|
|
||||
|
if($scope.event.location) |
||||
|
{ |
||||
|
$scope.markers=[]; |
||||
|
$scope.markers.push({ |
||||
|
lat: Number($scope.event.location.geo.lat), |
||||
|
lng: Number($scope.event.location.geo.long), |
||||
|
message: $scope.event.location.name |
||||
|
}); |
||||
|
$scope.center= { |
||||
|
lat: (Number($scope.travel.from.lat)+Number($scope.travel.to.lat))/2, |
||||
|
lng: (Number($scope.travel.from.long)+Number($scope.travel.to.long))/2, |
||||
|
zoom: 4 |
||||
|
}; |
||||
|
} |
||||
|
|
||||
|
}, function(data){ |
||||
|
console.log('data error'); |
||||
|
$scope.$broadcast('scroll.refreshComplete');//refresher stop
|
||||
|
$ionicLoading.show({ template: 'Error connecting server', noBackdrop: true, duration: 2000 }); |
||||
|
|
||||
|
}); |
||||
|
}; |
||||
|
$scope.doRefresh(); |
||||
|
|
||||
|
}); |
@ -0,0 +1,27 @@ |
|||||
|
angular.module('app.events', ['pascalprecht.translate']) |
||||
|
|
||||
|
.controller('EventsCtrl', function($scope, $http, $ionicModal, $timeout, $ionicLoading, $filter) { |
||||
|
|
||||
|
|
||||
|
$scope.events=[]; |
||||
|
$scope.page=0; |
||||
|
$scope.doRefresh = function() { |
||||
|
/* events refresh: */ |
||||
|
$http.get(urlapi + 'events?page=' + $scope.page) |
||||
|
.then(function(data){ |
||||
|
console.log('data success events'); |
||||
|
console.log(data); // for browser console
|
||||
|
//$scope.events = data.data; // for UI
|
||||
|
$scope.events=data.data; |
||||
|
$scope.$broadcast('scroll.refreshComplete');//refresher stop
|
||||
|
|
||||
|
}, function(data){ |
||||
|
console.log('data error'); |
||||
|
$scope.$broadcast('scroll.refreshComplete');//refresher stop
|
||||
|
$ionicLoading.show({ template: 'Error connecting server', noBackdrop: true, duration: 2000 }); |
||||
|
|
||||
|
}); |
||||
|
}; |
||||
|
$scope.doRefresh(); |
||||
|
|
||||
|
}); |
@ -0,0 +1,15 @@ |
|||||
|
angular.module('app.menu', ['pascalprecht.translate']) |
||||
|
|
||||
|
|
||||
|
.controller('MenuCtrl', function($scope, $window) { |
||||
|
if (localStorage.getItem("events_app_userdata")) { |
||||
|
$scope.storageuser = JSON.parse(localStorage.getItem("events_app_userdata")); |
||||
|
console.log($scope.storageuser); |
||||
|
} |
||||
|
|
||||
|
$scope.logout = function() { |
||||
|
localStorage.removeItem("events_app_token"); |
||||
|
localStorage.removeItem("events_app_userdata"); |
||||
|
$window.location.reload(true); |
||||
|
}; |
||||
|
}); |
@ -0,0 +1,7 @@ |
|||||
|
var translations = { |
||||
|
"english": { |
||||
|
"Actual_language": "Actual language: ", |
||||
|
"Menu": "Menu", |
||||
|
"Signup": "Signup" |
||||
|
} |
||||
|
}; |
@ -0,0 +1,54 @@ |
|||||
|
angular.module('app.user', ['pascalprecht.translate', 'ui-leaflet']) |
||||
|
|
||||
|
.controller('UserCtrl', function($scope, $http, $ionicModal, |
||||
|
$stateParams, $timeout, $ionicLoading, $filter, |
||||
|
leafletData, leafletBoundsHelpers) { |
||||
|
|
||||
|
$scope.center= { |
||||
|
lat: 0, |
||||
|
lng: 0, |
||||
|
zoom: 1 |
||||
|
}; |
||||
|
$scope.markers=[]; |
||||
|
$scope.tiles= { |
||||
|
url: "http://{s}.tile.openstreetmap.org/{z}/{x}/{y}.png", |
||||
|
options: { |
||||
|
attribution: '<a href="http://www.openstreetmap.org/copyright">OpenStreetMap</a> contributors' |
||||
|
} |
||||
|
}; |
||||
|
|
||||
|
$scope.user={}; |
||||
|
$scope.doRefresh = function() { |
||||
|
/* events refresh: */ |
||||
|
$http.get(urlapi + 'users/id/'+ $stateParams.userid) |
||||
|
.then(function(data){ |
||||
|
console.log('data success events'); |
||||
|
console.log(data); // for browser console
|
||||
|
//$scope.events = data.data; // for UI
|
||||
|
$scope.user=data.data; |
||||
|
$scope.$broadcast('scroll.refreshComplete');//refresher stop
|
||||
|
if($scope.user.location) |
||||
|
{ |
||||
|
$scope.markers=[]; |
||||
|
$scope.markers.push({ |
||||
|
lat: Number($scope.user.location.geo.lat), |
||||
|
lng: Number($scope.user.location.geo.long), |
||||
|
message: $scope.user.location.name |
||||
|
}); |
||||
|
$scope.center= { |
||||
|
lat: Number($scope.user.location.geo.lat), |
||||
|
lng: Number($scope.user.location.geo.long), |
||||
|
zoom: 16 |
||||
|
}; |
||||
|
} |
||||
|
|
||||
|
}, function(data){ |
||||
|
console.log('data error'); |
||||
|
$scope.$broadcast('scroll.refreshComplete');//refresher stop
|
||||
|
$ionicLoading.show({ template: 'Error connecting server', noBackdrop: true, duration: 2000 }); |
||||
|
|
||||
|
}); |
||||
|
}; |
||||
|
$scope.doRefresh(); |
||||
|
|
||||
|
}); |
@ -0,0 +1,27 @@ |
|||||
|
angular.module('app.users', ['pascalprecht.translate']) |
||||
|
|
||||
|
.controller('UsersCtrl', function($scope, $http, $ionicModal, $timeout, $ionicLoading, $filter) { |
||||
|
|
||||
|
|
||||
|
$scope.users=[]; |
||||
|
$scope.page=0; |
||||
|
$scope.doRefresh = function() { |
||||
|
/* users refresh: */ |
||||
|
$http.get(urlapi + 'users?page=' + $scope.page) |
||||
|
.then(function(data){ |
||||
|
console.log('data success users'); |
||||
|
console.log(data); // for browser console
|
||||
|
//$scope.users = data.data; // for UI
|
||||
|
$scope.users=data.data; |
||||
|
$scope.$broadcast('scroll.refreshComplete');//refresher stop
|
||||
|
|
||||
|
}, function(data){ |
||||
|
console.log('data error'); |
||||
|
$scope.$broadcast('scroll.refreshComplete');//refresher stop
|
||||
|
$ionicLoading.show({ template: 'Error connecting server', noBackdrop: true, duration: 2000 }); |
||||
|
|
||||
|
}); |
||||
|
}; |
||||
|
$scope.doRefresh(); |
||||
|
|
||||
|
}); |
@ -0,0 +1,12 @@ |
|||||
|
|
||||
|
{ |
||||
|
"name": "My Ionic App", |
||||
|
"short_name": "My Ionic App", |
||||
|
"start_url": "index.html", |
||||
|
"display": "standalone", |
||||
|
"icons": [{ |
||||
|
"src": "icon.png", |
||||
|
"sizes": "512x512", |
||||
|
"type": "image/png" |
||||
|
}] |
||||
|
} |
@ -0,0 +1,12 @@ |
|||||
|
|
||||
|
self.addEventListener('activate', function (event) { |
||||
|
|
||||
|
}); |
||||
|
|
||||
|
self.addEventListener('fetch', function (event) { |
||||
|
|
||||
|
}); |
||||
|
|
||||
|
self.addEventListener('push', function (event) { |
||||
|
|
||||
|
}); |
@ -0,0 +1,24 @@ |
|||||
|
<ion-view view-title="Event"> |
||||
|
<ion-content> |
||||
|
<a class="item item-avatar" ng-href="#/app/users/{{event.user._id}}"> |
||||
|
<img ng-src="{{event.user.img}}"> |
||||
|
<h2>{{event.user.username}}</h2> |
||||
|
<p>{{event.user.description}}</p> |
||||
|
</a> |
||||
|
<a class="item"> |
||||
|
<h2>{{event.title}}</h2> |
||||
|
<p>{{event.description}}</p> |
||||
|
<p>{{event.date | date: 'HH:mm, dd/MM/yyyy'}}</p> |
||||
|
</a> |
||||
|
|
||||
|
<div class="item item-image"> |
||||
|
<img ng-src="{{event.img}}"> |
||||
|
</div> |
||||
|
|
||||
|
<div class="item"> |
||||
|
<h2>Map</h2> |
||||
|
</div> |
||||
|
|
||||
|
<leaflet width="100%" height="40%" markers="markers" center="center" tiles="tiles" id="map-simple-map"></leaflet> |
||||
|
</ion-content> |
||||
|
</ion-view> |
@ -0,0 +1,17 @@ |
|||||
|
<ion-view view-title="Events"> |
||||
|
<ion-content> |
||||
|
<ion-refresher |
||||
|
pulling-text="{{'Pull_to_refresh' | translate}}..." |
||||
|
on-refresh="doRefresh()"> |
||||
|
</ion-refresher> |
||||
|
|
||||
|
<a class="item item-thumbnail-left" href="#/app/events/{{event._id}}" |
||||
|
ng-repeat="event in events"> |
||||
|
<img ng-src="{{event.img}}"> |
||||
|
<div class="badge item-note">{{event.user.username}}</div> |
||||
|
<h2>{{event.title}}</h2> |
||||
|
<p>{{event.description}}</p> |
||||
|
<p>{{event.date | date: 'HH:mm, dd/MM/yyyy'}}</p> |
||||
|
</a> |
||||
|
</ion-content> |
||||
|
</ion-view> |
@ -0,0 +1,39 @@ |
|||||
|
<ion-side-menus enable-menu-with-back-views="false"> |
||||
|
<ion-side-menu-content> |
||||
|
<ion-nav-bar class="bar-stable"> |
||||
|
<ion-nav-back-button> |
||||
|
</ion-nav-back-button> |
||||
|
|
||||
|
<ion-nav-buttons side="left"> |
||||
|
<button class="button button-icon button-clear ion-navicon" menu-toggle="left"> |
||||
|
</button> |
||||
|
</ion-nav-buttons> |
||||
|
</ion-nav-bar> |
||||
|
<ion-nav-view name="menuContent"></ion-nav-view> |
||||
|
</ion-side-menu-content> |
||||
|
|
||||
|
<ion-side-menu side="left"> |
||||
|
<ion-header-bar class="bar-stable"> |
||||
|
<h1 class="title">Left</h1> |
||||
|
</ion-header-bar> |
||||
|
<ion-content> |
||||
|
<ion-list> |
||||
|
<ion-item menu-close href="#/app/events"> |
||||
|
Events |
||||
|
</ion-item> |
||||
|
<ion-item menu-close href="#/app/users"> |
||||
|
Users |
||||
|
</ion-item> |
||||
|
<ion-item menu-close href="#/app/search"> |
||||
|
Search |
||||
|
</ion-item> |
||||
|
<ion-item menu-close href="#/app/settings"> |
||||
|
Settings |
||||
|
</ion-item> |
||||
|
<ion-item menu-close href="#/app/login"> |
||||
|
User login |
||||
|
</ion-item> |
||||
|
</ion-list> |
||||
|
</ion-content> |
||||
|
</ion-side-menu> |
||||
|
</ion-side-menus> |
@ -0,0 +1,22 @@ |
|||||
|
<!-- |
||||
|
Create tabs with an icon and label, using the tabs-positive style. |
||||
|
Each tab's child <ion-nav-view> directive will have its own |
||||
|
navigation history that also transitions its views in and out. |
||||
|
--> |
||||
|
<!-- tabs-color-active-balanced --> |
||||
|
<!--<ion-tabs class="tabs-icon-top tabs-color-active-balanced"> |
||||
|
|
||||
|
<ion-tab title="Events" icon-off="ion-calendar" icon-on="ion-calendar" href="#/app/events"> |
||||
|
<ion-nav-view name="tab-events"></ion-nav-view> |
||||
|
</ion-tab> |
||||
|
|
||||
|
<ion-tab title="People" icon-off="ion-person-stalker" icon-on="ion-person-stalker" href="#/app/users"> |
||||
|
<ion-nav-view name="tab-users"></ion-nav-view> |
||||
|
</ion-tab> |
||||
|
|
||||
|
<ion-tab title="Settings" icon-off="ion-ios-gear" icon-on="ion-ios-gear" href="#/app/settings"> |
||||
|
<ion-nav-view name="tab-settings"></ion-nav-view> |
||||
|
</ion-tab> |
||||
|
|
||||
|
</ion-tabs> |
||||
|
--> |
@ -0,0 +1,20 @@ |
|||||
|
<ion-view view-title="User"> |
||||
|
<ion-content> |
||||
|
<div class="item item-avatar"> |
||||
|
<img ng-src="{{user.img}}"> |
||||
|
<div class="o_pullRight"> |
||||
|
<span class="badge badge-balanced"> |
||||
|
Following |
||||
|
</span> |
||||
|
</div> |
||||
|
<h2>{{user.username}}</h2> |
||||
|
<p>{{user.email}}</p> |
||||
|
</div> |
||||
|
<div class="item item-body"> |
||||
|
asdf asdflk jasdfljashd fljkas dflka shdfklasd {{user.description}} |
||||
|
</div> |
||||
|
|
||||
|
<leaflet width="100%" height="40%" markers="markers" center="center" |
||||
|
tiles="tiles" id="map-simple-map"></leaflet> |
||||
|
</ion-content> |
||||
|
</ion-view> |
@ -0,0 +1,18 @@ |
|||||
|
<ion-view view-title="Users"> |
||||
|
<ion-content> |
||||
|
<ion-refresher |
||||
|
pulling-text="{{'Pull_to_refresh' | translate}}..." |
||||
|
on-refresh="doRefresh()"> |
||||
|
</ion-refresher> |
||||
|
<ion-list><!-- item-remove-animate --> |
||||
|
<ion-item class="item-avatar item-icon-right" |
||||
|
ng-repeat="user in users" type="item-text-wrap" href="#/app/users/{{user._id}}"> |
||||
|
<img ng-src="{{user.img}}"> |
||||
|
<h2>{{user.username}}</h2> |
||||
|
<p>{{user.email}}</p> |
||||
|
|
||||
|
<span class="badge badge-balanced">Following</span> |
||||
|
</ion-item> |
||||
|
</ion-list> |
||||
|
</ion-content> |
||||
|
</ion-view> |