diff --git a/.desktop/assets/background.png b/.desktop/assets/background.png new file mode 100644 index 0000000000000000000000000000000000000000..d325562be69eb1ba950739c166305a491ba2debe Binary files /dev/null and b/.desktop/assets/background.png differ diff --git a/.desktop/assets/icon.icns b/.desktop/assets/icon.icns new file mode 100644 index 0000000000000000000000000000000000000000..50918cfd1a18eb5b26d3e29cc7d41db5ce8ac5ee Binary files /dev/null and b/.desktop/assets/icon.icns differ diff --git a/.desktop/assets/icon.ico b/.desktop/assets/icon.ico new file mode 100644 index 0000000000000000000000000000000000000000..fa225f3fd49b6e164a8b5380248e5bb936342e76 Binary files /dev/null and b/.desktop/assets/icon.ico differ diff --git a/.desktop/assets/icon.png b/.desktop/assets/icon.png new file mode 100644 index 0000000000000000000000000000000000000000..a330e0cdd1ee810f8a62770a008078194845bdec Binary files /dev/null and b/.desktop/assets/icon.png differ diff --git a/.desktop/assets/loading.gif b/.desktop/assets/loading.gif new file mode 100644 index 0000000000000000000000000000000000000000..0a618ea6629006514bac08263e5ffe2ac91f2b65 Binary files /dev/null and b/.desktop/assets/loading.gif differ diff --git a/.desktop/assets/splash.png b/.desktop/assets/splash.png new file mode 100644 index 0000000000000000000000000000000000000000..d903387d517c5e59ac2656625ed40761fad80268 Binary files /dev/null and b/.desktop/assets/splash.png differ diff --git a/.desktop/desktop.js b/.desktop/desktop.js new file mode 100644 index 0000000000000000000000000000000000000000..b0d052820c3751b36f89a7e870f44002651d331f --- /dev/null +++ b/.desktop/desktop.js @@ -0,0 +1,106 @@ +/* eslint-disable no-unused-vars */ +import process from 'process'; +import { app, dialog } from 'electron'; + +process.env.GOOGLE_API_KEY='AIzaSyC4jbvZam56G7f0dJzAz2N5soH46jPep8Y'; + +/** + * Entry point to your native desktop code. + * + * @class + */ +export default class Desktop { + /** + * @param {Object} log - Winston logger instance + * @param {Object} skeletonApp - reference to the skeleton app instance + * @param {Object} appSettings - settings.json contents + * @param {Object} eventsBus - event emitter for listening or emitting events + * shared across skeleton app and every module/plugin + * @param {Object} modules - references to all loaded modules + * @param {Object} Module - reference to the Module class + * @constructor + */ + constructor({ log, skeletonApp, appSettings, eventsBus, modules, Module }) { + /** + * You can delete unused var from the param destructuring. + * Left them here just to emphasize what is passed. Delete the eslint rule at the top + * when done. + * You can also just have a one `config` param and do `Object.assign(this, config);` + */ + const desktop = new Module('desktop'); + // Get the automatically predefined logger instance. + this.log = log; + + // From Meteor use this by invoking Desktop.send('desktop', 'closeApp'); + desktop.on('closeApp', () => app.quit()); + + // We need to handle gracefully potential problems. + // Lets remove the default handler and replace it with ours. + skeletonApp.removeUncaughtExceptionListener(); + + process.on('uncaughtException', Desktop.uncaughtExceptionHandler); + + // Chrome problems should also be handled. The `windowCreated` event has a `window` + // reference. This is the reference to the current Electron renderer process (Chrome) + // displaying your Meteor app. + eventsBus.on('windowCreated', (window) => { + window.webContents.on('crashed', Desktop.windowCrashedHandler); + window.on('unresponsive', Desktop.windowUnresponsiveHandler); + }); + + // Consider setting a crash reporter -> + // https://github.com/electron/electron/blob/master/docs/api/crash-reporter.md + } + + /** + * Window crash handler. + */ + static windowCrashedHandler() { + Desktop.displayRestartDialog( + 'Application has crashed', + 'Do you want to restart it?' + ); + } + + /** + * Window's unresponsiveness handler. + */ + static windowUnresponsiveHandler() { + Desktop.displayRestartDialog( + 'Application is not responding', + 'Do you want to restart it?' + ); + } + + /** + * JS's uncaught exception handler. + * @param {string} error - error message + */ + static uncaughtExceptionHandler(error) { + // Consider sending a log somewhere, it is good be aware your users are having problems, + // right? + Desktop.displayRestartDialog( + 'Application encountered an error', + 'Do you want to restart it?', + error + ); + } + + /** + * Displays an error dialog with simple 'restart' or 'shutdown' choice. + * @param {string} title - title of the dialog + * @param {string} message - message shown in the dialog + * @param {string} details - additional details to be displayed + */ + static displayRestartDialog(title, message, details = '') { + dialog.showMessageBox( + { type: 'error', buttons: ['Restart', 'Shutdown'], title, message, detail: details }, + (response) => { + if (response === 0) { + app.relaunch(); + } + app.exit(0); + } + ); + } +} diff --git a/.desktop/desktop.test.js b/.desktop/desktop.test.js new file mode 100644 index 0000000000000000000000000000000000000000..ec7d05d0273582cc9e68bb708813f667d3852795 --- /dev/null +++ b/.desktop/desktop.test.js @@ -0,0 +1,125 @@ +/* eslint-disable no-param-reassign */ +import test from 'ava'; +import electron from 'electron'; +import path from 'path'; +import { Application } from 'spectron'; + +/** + * For this to work, init testing with `npm run desktop -- init-tests-support`. + * This will add necessary packages to your `devDependencies` and add `desktop-test` to scripts. + * + * This is an example of functional test for your desktop app. + * Remember that you need to rebuild your desktop app if you made changes in .desktop. You can + * do that with `npm run desktop -- build`. + * There is a plan for using desktop.asar built from omega:meteor-desktop-bundler so that you could + * avoid manual rebuild. + */ + +test.beforeEach(async (t) => { + // Before each test we will spawn a new desktop app instance. + t.context.app = new Application({ + path: electron, + requireName: 'electronRequire', + args: [path.join(__dirname, '..', '.meteor', 'desktop-build')], + env: { NODE_ENV: 'test', ELECTRON_ENV: 'test', METEOR_DESKTOP_NO_SPLASH_SCREEN: 1 } + }); + await t.context.app.start(); +}); + +test.afterEach.always(async (t) => { + // Kill the app after the test. + if (t.context.app && t.context.app.isRunning()) { + await t.context.app.stop(); + } +}); + +/** + * Sends an IPC event to your module. + * + * @param {Object} app - app ref from Spectron + * @param {string} module - module name + * @param {string} event - event from your module + * @param {...*} args - arguments to pass to ipc.send + */ +function sendModuleEvent(app, module, event, ...args) { + args.unshift(`${module}__${event}`); + return app.electron.ipcRenderer.send(...args); +} + +/** + * Waits until a promise from a function finally returns true. + * @param {Function} functionReturningPromise - function to test + * @param {number} ms - expiration timeout in milliseconds + * @returns {Promise} + */ +function waitFor(functionReturningPromise, ms = 10000) { + return new Promise((resolve, reject) => { + let invokerTimeout; + let timeout; + const invokeFunction = () => + functionReturningPromise() + .then((result) => { + if (result) { + clearTimeout(invokerTimeout); + clearTimeout(timeout); + resolve(); + } else { + invokerTimeout = setTimeout(invokeFunction, 500); + } + }) + .catch(() => { + invokerTimeout = setTimeout(invokeFunction, 500); + }); + invokeFunction(); + timeout = setTimeout(() => { + clearTimeout(invokerTimeout); + reject('timeout expired on waitFor'); + }, ms); + }); +} + +/** + * Waits for the app to load and appear. + * @param {Object} t - test context + * @returns {{app: (Application|*), window: *}} + */ +async function waitForApp(t) { + const app = t.context.app; + await app.client.waitUntilWindowLoaded(); + const window = app.browserWindow; + // Wait for the main window for max 30seconds. Adjust to your app. + await waitFor(window.isVisible, 30000); + t.is(await app.client.getWindowCount(), 1); + await app.client.waitUntil( + async () => await app.client.execute( + () => document.readyState === 'complete' + ) + ); + return { app, window }; +} + +test.serial('if app can be closed', async (t) => { + const { app, window } = await waitForApp(t); // eslint-disable-line no-unused-vars + await sendModuleEvent(app, 'desktop', 'closeApp'); + t.true(await app.client.getWindowCount() === 0); + + // Spectron does not seem to notice app has quit so we need to do it manually. + t.context.app.running = false; +}); + +// Empty test. +test.serial('if window title is set properly', async (t) => { + const { app, window } = await waitForApp(t); // eslint-disable-line no-unused-vars + + // Your assertions... + + /* + const title = await window.getTitle(); + t.is(title, 'my app <title>'); + + // NOTE: + // avoid using await in assertions like + // t.is(await window.getTitle(), 'my app <title>'); + // it makes Power Assert not producing it's useful graphs + */ +}); diff --git a/.desktop/modules/example/example.test.js b/.desktop/modules/example/example.test.js new file mode 100644 index 0000000000000000000000000000000000000000..a256c6df0d79f2e7e429a1d8eec5f4e239885576 --- /dev/null +++ b/.desktop/modules/example/example.test.js @@ -0,0 +1,108 @@ +/* eslint-disable no-console */ +import test from 'ava'; +import { Application } from 'spectron'; +import path from 'path'; +import fs from 'fs'; +import shell from 'shelljs'; +import electron from 'electron'; +import { + constructModule, createTestAppWithModule, fetch, + fireEventsBusEventAndWaitForAnother +} from + 'meteor-desktop-test-suite'; + +/** + * For this to work, init testing with `npm run desktop -- init-tests-support`. + * This will add necessary packages to your `devDependencies` and add `desktop-test` to scripts. + * + * This is an example of functional test for your module. + * + * You could test your module from the built app, like in desktop.test.js. + * + * Here instead we will treat this module like a separate plugin and test it in a test app instance. + * This has a significant advantage as you do not have to rebuild the desktop app if you made + * changes in the module - you just need to rerun the tests which is usually faster. + * + * However if your module is importing files from the outside of its dir this will fail - support + * for that is planned - vote on features on meteor-desktop issues list on github. + * + * Be aware that you can specify npm dependencies in the dependencies section of module.json - + * those will be installed in the test app. + */ + +let userData; +let appDir; + +async function getApp(t) { + // Waits for the test app to start. + const app = t.context.app; + await app.client.waitUntilWindowLoaded(); + t.is(await app.client.getWindowCount(), 1); + return app; +} + +test.before( + async () => { + // Create a new test app with this module included. + appDir = await createTestAppWithModule( + null, __dirname); + } +); + +test.after( + () => { + // Remove the test app and its data. + shell.rm('-rf', userData); + shell.rm('-rf', appDir); + } +); + +test.beforeEach(async (t) => { + // Every test start a new instance of the test app. + t.context.app = new Application({ // eslint-disable-line no-param-reassign + path: electron, + args: [appDir], + env: { ELECTRON_ENV: 'test' } + }); + await t.context.app.start(); + userData = await t.context.app.electron.remote.app.getPath('userData'); +}); + +test.afterEach.always(async (t) => { + try { + // Test app saves an error.txt file if it encounters an uncaught exception. + // It is good to see it's contents if it is present. + const errorFile = path.join(appDir, 'error.txt'); + console.log( + 'error caught in the test app:', + fs.readFileSync(errorFile, 'utf8') + ); + fs.unlinkSync(errorFile); + } catch (e) { + // No error.txt present. That's good! + } + + if (t.context.app && t.context.app.isRunning()) { + await t.context.app.stop(); + } +}); + +test('the test app', async t => await getApp(t)); + +test.serial('if testEvent returns true for 1', async (t) => { + const app = await getApp(t); + await constructModule(app); + await fireEventsBusEventAndWaitForAnother(app, 'desktopLoaded', 'example.loaded'); + const response = await fetch(app, 'example', 'testEvent', 1); + // Fetch returns an array with the response event arguments. + t.true(response[0]); +}); + +test.serial('if testEvent returns false for 5', async (t) => { + const app = await getApp(t); + await constructModule(app); + await fireEventsBusEventAndWaitForAnother(app, 'desktopLoaded', 'example.loaded'); + const response = await fetch(app, 'example', 'testEvent', 5); + // Fetch returns an array with the response event arguments. + t.false(response[0]); +}); diff --git a/.desktop/modules/example/index.js b/.desktop/modules/example/index.js new file mode 100644 index 0000000000000000000000000000000000000000..80edf4a2c93f53272a4061a104dfe6226c09e12a --- /dev/null +++ b/.desktop/modules/example/index.js @@ -0,0 +1,58 @@ +/* eslint-disable no-unused-vars */ +import moduleJson from './module.json'; + +/** + * Example module. + * + * @param {Object} log - Winston logger instance + * @param {Object} skeletonApp - reference to the skeleton app instance + * @param {Object} appSettings - settings.json contents + * @param {Object} eventsBus - event emitter for listening or emitting events + * shared across skeleton app and every module/plugin + * @param {Object} modules - references to all loaded modules + * @param {Object} settings - module settings + * @param {Object} Module - reference to the Module class + * @constructor + */ +export default class Example { + constructor({ log, skeletonApp, appSettings, eventsBus, modules, settings, Module }) { + /** + * You can delete unused vars from the param destructuring. + * Left them here just to emphasize what is passed. Delete the eslint rule at the top + * when done. + * You can also just have a one `config` param and do `Object.assign(this, config);` + */ + this.module = new Module(moduleJson.name); + + // Get the automatically predefined logger instance. + this.log = log; + this.eventsBus = eventsBus; + + // Never do time consuming or blocking things directly in the constructor. + // Instead hook to `afterLoading` or `beforeDesktopJsLoad` events. + // This will also ensure plugins providing things like splash screens will be able + // to start as quickly as possible. + this.eventsBus.on('desktopLoaded', () => { + this.init(); + }); + } + + init() { + // Do some initialization if necessary. + + this.registerApi(); + + // Lets inform that the module has finished loading. + this.eventsBus.emit(`${moduleJson.name}.loaded`); + } + + registerApi() { + // Lets create a test event. + this.module.on('testEvent', (event, fetchId, testArg) => { + // Nothing fancy here, we will just respond with the result of testArg === 1. + // fetchId is necessary for the system to know to which request the response is for. + // It will be present if you will emit this event in Meteor app with `Desktop.fetch`. + this.module.respond('testEvent', fetchId, testArg === 1); + }); + } +} diff --git a/.desktop/modules/example/module.json b/.desktop/modules/example/module.json new file mode 100644 index 0000000000000000000000000000000000000000..633100cc7b45325bb5e1789d4d9b7c625a864db0 --- /dev/null +++ b/.desktop/modules/example/module.json @@ -0,0 +1,6 @@ +{ + "name": "example", + "dependencies": { + }, + "extract": [] +} diff --git a/.desktop/squirrelEvents.js b/.desktop/squirrelEvents.js new file mode 100644 index 0000000000000000000000000000000000000000..759d62e1c0a6b4b16dd9ab59937e7599e3a72605 --- /dev/null +++ b/.desktop/squirrelEvents.js @@ -0,0 +1,38 @@ +/** + * Simple class that allows to hook into Squirrel.Windows events. + */ +export default class SquirrelEvents { + /** + * @param {Squirrel} Squirrel - reference to the Squirrel class + */ + constructor(Squirrel) { + this.Squirrel = Squirrel; + } + + /** + * Invoked during installation. + */ + install() { + this.Squirrel.createShortcuts(); + } + + /** + * Invoked on first run. + */ + firstRun() { // eslint-disable-line class-methods-use-this + } + + /** + * Invoked during update. + */ + updated() { + this.Squirrel.updateShortcuts(); + } + + /** + * Invoked during uninstall. + */ + uninstall() { + this.Squirrel.removeShortcuts(); + } +} diff --git a/.gitignore b/.gitignore index 7dba7a28ff7d30574944f5dc8706669590fea197..b9c66f9ed03592a8210e9816b57da5e7374415c7 100644 --- a/.gitignore +++ b/.gitignore @@ -8,4 +8,9 @@ electron-settings.json electron-settings-prod.json cordova.facebook.json private/* +.desktop-installer/ +.desktop-package/ +public/i18n/ node_modules/ + +version.desktop diff --git a/.meteor/.gitignore b/.meteor/.gitignore index 501f92e4b5eb1a0eea1c21c7a6317095beb52bc9..c523263bb271f01ccaba167f47dd7c2af001434a 100644 --- a/.meteor/.gitignore +++ b/.meteor/.gitignore @@ -1,2 +1,3 @@ dev_bundle local +desktop-build \ No newline at end of file diff --git a/.meteor/packages b/.meteor/packages index 3afab3298a37435df9e8477ac85cecd2e5d5ca37..ce420370eb4d28cac5bde51e29e5fad1d0b89558 100644 --- a/.meteor/packages +++ b/.meteor/packages @@ -60,7 +60,7 @@ meteoric:autoform-ionic reactive-dict@1.1.8 meteorhacks:subs-manager sha@1.0.9 -meteorhacks:kadira +#meteorhacks:kadira dschulz:jquery-qrcode pauloborges:mapbox@2.2.3_2 gwendall:autoform-i18n @@ -75,3 +75,7 @@ force-ssl@1.0.13 froatsnook:request froatsnook:valid-email shell-server@0.2.1 +omega:meteor-desktop-watcher +omega:meteor-desktop-bundler +omega:meteor-desktop-localstorage +tap:i18n-bundler diff --git a/.meteor/versions b/.meteor/versions index bce4256712e8860f8512bb24c20c2e2724dc785c..fee1cb9dba25caff5fdc35629b98db82dfbc09c8 100644 --- a/.meteor/versions +++ b/.meteor/versions @@ -61,7 +61,6 @@ dschulz:jquery-qrcode@1.0.2 ecmascript@0.5.9 ecmascript-runtime@0.3.15 ejson@1.0.13 -email@1.1.18 es5-shim@4.6.15 fastclick@1.0.13 force-ssl@1.0.13 @@ -95,8 +94,6 @@ mdg:validation-error@0.5.1 meteor@1.6.0 meteor-base@1.0.4 meteorhacks:async@1.0.0 -meteorhacks:kadira@2.30.2 -meteorhacks:meteorx@1.4.1 meteorhacks:subs-manager@1.6.4 meteoric:autoform-ionic@0.1.6 meteoric:camera@1.0.3 @@ -118,6 +115,9 @@ mrt:profile-online@0.1.9 multiply:iron-router-progress@1.0.2 npm-mongo@2.2.11_2 observe-sequence@1.0.14 +omega:meteor-desktop-bundler@0.1.0 +omega:meteor-desktop-localstorage@0.0.11 +omega:meteor-desktop-watcher@0.1.0 ordered-dict@1.0.9 outatime:geolib@2.0.15 pauloborges:mapbox@2.2.3_2 @@ -144,6 +144,7 @@ spacebars-compiler@1.0.13 standard-minifier-css@1.3.2 standard-minifier-js@1.2.1 tap:i18n@1.8.2 +tap:i18n-bundler@0.3.0 tap:i18n-ui@0.8.0 templating@1.2.15 templating-compiler@1.2.15 diff --git a/imports/api/server/publish.js b/imports/api/server/publish.js index 3cec92828c70ca697bfb842ea7bb7f8d7e32642c..d328d1ea66707d4155aafd3055c3afa8aa82366d 100644 --- a/imports/api/server/publish.js +++ b/imports/api/server/publish.js @@ -177,7 +177,7 @@ Meteor.publishComposite('citoyenEvents', function(latlng,radius) { { find: function(scopeD) { return Events.find({ - parentId: new Mongo.ObjectID(scopeD._id) + parentId: scopeD._id._str }); } }, diff --git a/imports/startup/client/client.js b/imports/startup/client/client.js index c37b171fbabeb84d6813ac11d093e1966687ef59..c285d0289911b6e62439fabaca86ded10e05bbe9 100644 --- a/imports/startup/client/client.js +++ b/imports/startup/client/client.js @@ -133,6 +133,10 @@ Template.registerHelper("urlImageCommunecter", function () { return Meteor.settings.public.urlimage; }); +Template.registerHelper("urlImageDesktop", function () { + console.log(Meteor.settings.public.remoteUrl); + return Meteor.isDesktop ? Meteor.settings.public.remoteUrl : ''; +}); Template.registerHelper("SchemasFollowRest", SchemasFollowRest); @@ -143,29 +147,29 @@ Template.registerHelper("SchemasEventsRest", SchemasEventsRest); let success = function (state) { if(state === 'Enabled') { - //console.log("GPS Is Enabled"); + console.log("GPS Is Enabled"); Session.set('GPSstart', true); Location.locate(function(pos){ Session.set('geo',pos); //console.log(pos); }, function(err){ - //console.log(err.message); + console.log(err.message); Session.set('GPSstart', false); Session.set('geo',null); Session.set('geoError',err.message); }); }else if(state==="Disabled"){ - //console.log("GPS Is Disabled"); + console.log("GPS Is Disabled"); Session.set('GPSstart', false); Session.set('geo',null); Session.set('geoError','GPS Is Disabled'); }else if(state=='NotDetermined' || state=='Restricted'){ - //console.log("Never asked user for auhtorization"); + console.log("Never asked user for auhtorization"); Session.set('GPSstart', false); Session.set('geo',null); Session.set('geoError','Never asked user for auhtorization'); }else if(state==='Denied'){ - //console.log("Asked User for authorization but they denied"); + console.log("Asked User for authorization but they denied"); Session.set('GPSstart', false); Session.set('geo',null); Session.set('geoError','Asked User for authorization but they denied'); diff --git a/imports/ui/news/detail/detail.html b/imports/ui/news/detail/detail.html index 7319cc704fa43d9a8a8f1de30142baf16351a1a1..5542cd2cf064390d2d41cf8669bcb77d4b94f859 100644 --- a/imports/ui/news/detail/detail.html +++ b/imports/ui/news/detail/detail.html @@ -22,7 +22,7 @@ {{#if photoNews}} <div class="item item-body"> {{#each photoNews}} - <img src="{{this.url store='photosLarge' uploading='/default.png' storing='/default.png'}}" class="full-image photo-viewer" /> + <img src="{{urlImageDesktop}}{{this.url store='photosLarge' uploading='/default.png' storing='/default.png'}}" class="full-image photo-viewer" /> {{/each}} </div> {{/if}} diff --git a/imports/ui/news/news.html b/imports/ui/news/news.html index 24653ae4b59753470c501c52963cabd4c9d0c65b..6e7b762991f849826bb33bf0ffe5759225a2eb5c 100644 --- a/imports/ui/news/news.html +++ b/imports/ui/news/news.html @@ -26,7 +26,7 @@ <a href="{{pathFor 'newsDetail' _id=scope._id._str newsId=_id._str scope=target.type}}" class="item animated in {{#if photoNews}}item-thumbnail-left{{else}}{{#if imageDoc authorNews._id._str}}item-avatar{{/if}}{{/if}}"> {{#each photoNews}} - <img src="{{this.url store='photosThumb' uploading='/default.png' storing='/default.png'}}" /> + <img src="{{urlImageDesktop}}{{this.url store='photosThumb' uploading='/default.png' storing='/default.png'}}" /> {{else}} {{#if imageDoc}} {{> imgDoc imageDoc=imageDoc resized="80x80"}} @@ -229,7 +229,7 @@ <a href="{{pathFor 'newsDetail' _id=scope._id._str newsId=_id._str scope=target.type}}" class="item animated out {{#if photoNews}}item-thumbnail-left{{/if}}"> {{#each photoNews}} - <img src="{{this.url store='photosThumb' uploading='/default.png' storing='/default.png'}}" /> + <img src="{{urlImageDesktop}}{{this.url store='photosThumb' uploading='/default.png' storing='/default.png'}}" /> {{/each}} <h2>{{name}}</h2> diff --git a/package.json b/package.json index c0137aabbae89b826571ced6962104e05efc191e..4ecb9d587092944ee5359bf20cd8b35bb98a482a 100644 --- a/package.json +++ b/package.json @@ -4,7 +4,8 @@ "description": "communevent", "private": true, "scripts": { - "start": "meteor run" + "start": "meteor run", + "desktop": "meteor-desktop" }, "dependencies": { "meteor-node-stubs": "~0.2.0", @@ -19,5 +20,9 @@ "bugs": { "url": "https://github.com/aboire/communEvent/issues" }, - "homepage": "https://github.com/aboire/communEvent#readme" + "homepage": "https://github.com/aboire/communEvent#readme", + "devDependencies": { + "devtron": "^1.4.0", + "meteor-desktop": "^0.1.0" + } } diff --git a/packages/aboire:camera-ui/camera-ui-cordova.js b/packages/aboire:camera-ui/camera-ui-cordova.js deleted file mode 100644 index ffec5772c5a2914b8f954745ec8c09f85b0c26c2..0000000000000000000000000000000000000000 --- a/packages/aboire:camera-ui/camera-ui-cordova.js +++ /dev/null @@ -1,110 +0,0 @@ -/******************** Private functions ****************************/ - -var devicePlatform = window && window.device && window.device.platform; - -var isAndroidDevice = function () { - return devicePlatform == 'Android'; -}; - -var isIosDevice = function () { - return devicePlatform == 'iOS'; -}; - -/** - * Check whether ios or android device and give the specific options for it. - * @param {Object} options Options - Optional - * @param {Object} options.iosOptions {special options only for ios} - * @param {Object} options.androidOptions {special options only for android} - * @returns {{}} - */ -var getOptionsPerDevice = function (options) { - options = options || {}; - if (isAndroidDevice() && options.androidOptions) { - options = _.extend({}, options.androidOptions, options); - } else if (isIosDevice() && options.iosOptions) { - options = _.extend({}, options.iosOptions, options); - } - return options; -}; - -/** - * @summary Create action sheet options setting for taking image - * @param {Object} options Options - Optional - * @param {String} options.takeImage - Text of take image button - * @param {String} options.imageLibrary - Text of image library button - * @param {String} options.cancel - Text of cancel button - * @returns {{buttonLabels: Array, androidEnableCancelButton: boolean, winphoneEnableCancelButton: boolean, addCancelButtonWithLabel: *}} - */ -var getActionsSheetOptions = function (options) { - options = options || {}; - - var buttonTexts = { - takeImage: options.takeImage || __('Take photo'), - imageLibrary: options.imageLibrary || __('Image Library'), - cancel: options.cancel || __('Cancel') - }; - return { - 'buttonLabels': [ - buttonTexts.takeImage, - buttonTexts.imageLibrary - ], - 'androidEnableCancelButton': true, // default false - 'winphoneEnableCancelButton': true, // default false - 'addCancelButtonWithLabel': buttonTexts.cancel - }; -}; - -var takePicture = function (options, usingPhotoLibrary, callback) { - var pictureOptions = getOptionsPerDevice(options); - if (usingPhotoLibrary) { - pictureOptions.sourceType = Camera.PictureSourceType.PHOTOLIBRARY; - } - MeteoricCamera.getPicture(pictureOptions, callback); -}; - -/******************** Public functions *****************************/ - -/** - * @summary Get a picture from the device's default camera. - * Show ActionSheet to ask whether to take the image from camera or imageLibrary. - * Same as MeteorCamera.getPicture just allow to give - * special options using options.androidOptions or options.iosOptions. - * @param {Object} options Options - Optional - * @param {Number} options.height The minimum height of the image - * @param {Number} options.width The minimum width of the image - * @param {Number} options.quality [description] - * @param {Object} options.buttonTexts {cancel:String, takeImage:String, imageLibrary:String} - * @param {Object} options.iosOptions {special options only for ios} - * @param {Object} options.androidOptions {special options only for android} - * @param {Function} callback A callback that is called with two arguments: - * 1. error, an object that contains error.message and possibly other properties - * depending on platform - * 2. data, a Data URI string with the image encoded in JPEG format, ready to - * use as the `src` attribute on an `<img />` tag. - */ -MeteorCameraUI.getPicture = function (options, callback) { - // Checks whether device support actionsheet plugin - if (window && window.plugins && window.plugins.actionsheet) { - var actionSheetOptions = getActionsSheetOptions(options); - window.plugins.actionsheet.show(actionSheetOptions, function (buttonIndex) { - setTimeout(function () { - var usingPhotoLibrary = false; - // Like other Cordova plugins (prompt, confirm) the buttonIndex is 1-based (first button is index 1) - if (buttonIndex) { - // Image library button clicked - if (buttonIndex === 2) { - usingPhotoLibrary = true; - } else if (buttonIndex === 3) { - // Cancel button clicked - callback(); - return; - } - } - takePicture(options, usingPhotoLibrary, callback); - }, 1); - }); - } else { - // Use default Meteor Camera - MeteoricCamera.getPicture(options, callback); - } -}; diff --git a/packages/aboire:camera-ui/README.md b/packages/aboire_camera-ui/README.md similarity index 100% rename from packages/aboire:camera-ui/README.md rename to packages/aboire_camera-ui/README.md diff --git a/packages/aboire:camera-ui/camera-ui-browser.js b/packages/aboire_camera-ui/camera-ui-browser.js similarity index 100% rename from packages/aboire:camera-ui/camera-ui-browser.js rename to packages/aboire_camera-ui/camera-ui-browser.js diff --git a/packages/aboire:camera-ui/camera-ui-client.js b/packages/aboire_camera-ui/camera-ui-client.js similarity index 100% rename from packages/aboire:camera-ui/camera-ui-client.js rename to packages/aboire_camera-ui/camera-ui-client.js diff --git a/packages/aboire_camera-ui/camera-ui-cordova.js b/packages/aboire_camera-ui/camera-ui-cordova.js new file mode 100644 index 0000000000000000000000000000000000000000..6feb69b8ac343abddec042e84a201845143d9e57 --- /dev/null +++ b/packages/aboire_camera-ui/camera-ui-cordova.js @@ -0,0 +1,122 @@ +if (Meteor.isDesktop) { + console.log('meteor is desktop'); + MeteorCameraUI.getPicture = function (options, callback) { + // If browser options exists use them + if (options && options.browserOptions) { + options = _.extend({}, options.browserOptions, options); + } + MeteoricCamera.getPicture(options, callback); + }; +} else { + /******************** Private functions ****************************/ + + var devicePlatform = window && window.device && window.device.platform; + + var isAndroidDevice = function () { + return devicePlatform == 'Android'; + }; + + var isIosDevice = function () { + return devicePlatform == 'iOS'; + }; + + /** + * Check whether ios or android device and give the specific options for it. + * @param {Object} options Options - Optional + * @param {Object} options.iosOptions {special options only for ios} + * @param {Object} options.androidOptions {special options only for android} + * @returns {{}} + */ + var getOptionsPerDevice = function (options) { + options = options || {}; + if (isAndroidDevice() && options.androidOptions) { + options = _.extend({}, options.androidOptions, options); + } else if (isIosDevice() && options.iosOptions) { + options = _.extend({}, options.iosOptions, options); + } + return options; + }; + + /** + * @summary Create action sheet options setting for taking image + * @param {Object} options Options - Optional + * @param {String} options.takeImage - Text of take image button + * @param {String} options.imageLibrary - Text of image library button + * @param {String} options.cancel - Text of cancel button + * @returns {{buttonLabels: Array, androidEnableCancelButton: boolean, winphoneEnableCancelButton: boolean, addCancelButtonWithLabel: *}} + */ + var getActionsSheetOptions = function (options) { + options = options || {}; + + var buttonTexts = { + takeImage: options.takeImage || __('Take photo'), + imageLibrary: options.imageLibrary || __('Image Library'), + cancel: options.cancel || __('Cancel') + }; + return { + 'buttonLabels': [ + buttonTexts.takeImage, + buttonTexts.imageLibrary + ], + 'androidEnableCancelButton': true, // default false + 'winphoneEnableCancelButton': true, // default false + 'addCancelButtonWithLabel': buttonTexts.cancel + }; + }; + + var takePicture = function (options, usingPhotoLibrary, callback) { + var pictureOptions = getOptionsPerDevice(options); + if (usingPhotoLibrary) { + pictureOptions.sourceType = Camera.PictureSourceType.PHOTOLIBRARY; + } + MeteoricCamera.getPicture(pictureOptions, callback); + }; + + /******************** Public functions *****************************/ + + /** + * @summary Get a picture from the device's default camera. + * Show ActionSheet to ask whether to take the image from camera or imageLibrary. + * Same as MeteorCamera.getPicture just allow to give + * special options using options.androidOptions or options.iosOptions. + * @param {Object} options Options - Optional + * @param {Number} options.height The minimum height of the image + * @param {Number} options.width The minimum width of the image + * @param {Number} options.quality [description] + * @param {Object} options.buttonTexts {cancel:String, takeImage:String, imageLibrary:String} + * @param {Object} options.iosOptions {special options only for ios} + * @param {Object} options.androidOptions {special options only for android} + * @param {Function} callback A callback that is called with two arguments: + * 1. error, an object that contains error.message and possibly other properties + * depending on platform + * 2. data, a Data URI string with the image encoded in JPEG format, ready to + * use as the `src` attribute on an `<img />` tag. + */ + MeteorCameraUI.getPicture = function (options, callback) { + // Checks whether device support actionsheet plugin + if (window && window.plugins && window.plugins.actionsheet) { + var actionSheetOptions = getActionsSheetOptions(options); + window.plugins.actionsheet.show(actionSheetOptions, function (buttonIndex) { + setTimeout(function () { + var usingPhotoLibrary = false; + // Like other Cordova plugins (prompt, confirm) the buttonIndex is 1-based (first button is index 1) + if (buttonIndex) { + // Image library button clicked + if (buttonIndex === 2) { + usingPhotoLibrary = true; + } else if (buttonIndex === 3) { + // Cancel button clicked + callback(); + return; + } + } + takePicture(options, usingPhotoLibrary, callback); + }, 1); + }); + } else { + // Use default Meteor Camera + MeteoricCamera.getPicture(options, callback); + } + }; + +} diff --git a/packages/aboire:camera-ui/camera-ui-tests.js b/packages/aboire_camera-ui/camera-ui-tests.js similarity index 100% rename from packages/aboire:camera-ui/camera-ui-tests.js rename to packages/aboire_camera-ui/camera-ui-tests.js diff --git a/packages/aboire:camera-ui/camera-ui.js b/packages/aboire_camera-ui/camera-ui.js similarity index 100% rename from packages/aboire:camera-ui/camera-ui.js rename to packages/aboire_camera-ui/camera-ui.js diff --git a/packages/aboire:camera-ui/i18n/en.i18n.json b/packages/aboire_camera-ui/i18n/en.i18n.json similarity index 100% rename from packages/aboire:camera-ui/i18n/en.i18n.json rename to packages/aboire_camera-ui/i18n/en.i18n.json diff --git a/packages/aboire:camera-ui/i18n/fr.i18n.json b/packages/aboire_camera-ui/i18n/fr.i18n.json similarity index 100% rename from packages/aboire:camera-ui/i18n/fr.i18n.json rename to packages/aboire_camera-ui/i18n/fr.i18n.json diff --git a/packages/aboire:camera-ui/package-tap.i18n b/packages/aboire_camera-ui/package-tap.i18n similarity index 100% rename from packages/aboire:camera-ui/package-tap.i18n rename to packages/aboire_camera-ui/package-tap.i18n diff --git a/packages/aboire:camera-ui/package.js b/packages/aboire_camera-ui/package.js similarity index 100% rename from packages/aboire:camera-ui/package.js rename to packages/aboire_camera-ui/package.js diff --git a/packages/djabatav:geolocation-plus/.versions b/packages/djabatav_geolocation-plus/.versions similarity index 100% rename from packages/djabatav:geolocation-plus/.versions rename to packages/djabatav_geolocation-plus/.versions diff --git a/packages/djabatav:geolocation-plus/README.md b/packages/djabatav_geolocation-plus/README.md similarity index 100% rename from packages/djabatav:geolocation-plus/README.md rename to packages/djabatav_geolocation-plus/README.md diff --git a/packages/djabatav:geolocation-plus/lib/location.js b/packages/djabatav_geolocation-plus/lib/location.js similarity index 100% rename from packages/djabatav:geolocation-plus/lib/location.js rename to packages/djabatav_geolocation-plus/lib/location.js diff --git a/packages/djabatav:geolocation-plus/package.js b/packages/djabatav_geolocation-plus/package.js similarity index 100% rename from packages/djabatav:geolocation-plus/package.js rename to packages/djabatav_geolocation-plus/package.js diff --git a/packages/meteoric:camera/camera-cordova.js b/packages/meteoric:camera/camera-cordova.js deleted file mode 100755 index a797bc35bf8ba2a23648737fa276f3ab00a2b5a5..0000000000000000000000000000000000000000 --- a/packages/meteoric:camera/camera-cordova.js +++ /dev/null @@ -1,27 +0,0 @@ -MeteoricCamera.getPicture = function (options, callback) { - // if options are not passed - if (! callback) { - callback = options; - options = {}; - } - - var success = function (data) { - callback(null, "data:image/jpeg;base64," + data); - }; - - var failure = function (error) { - callback(new Meteor.Error("cordovaError", error)); - }; - - navigator.camera.getPicture(success, failure, - _.extend(options, { - quality: options.quality || 60, - targetWidth: options.width || 640, - targetHeight: options.height || 480, - destinationType: Camera.DestinationType.DATA_URL, - correctOrientation: true, - encodingType: Camera.EncodingType.JPEG, - allowEdit: true - }) - ); -}; diff --git a/packages/meteoric:autoform-ionic/.gitignore b/packages/meteoric_autoform-ionic/.gitignore similarity index 100% rename from packages/meteoric:autoform-ionic/.gitignore rename to packages/meteoric_autoform-ionic/.gitignore diff --git a/packages/meteoric:autoform-ionic/.versions b/packages/meteoric_autoform-ionic/.versions similarity index 100% rename from packages/meteoric:autoform-ionic/.versions rename to packages/meteoric_autoform-ionic/.versions diff --git a/packages/meteoric:autoform-ionic/LICENSE b/packages/meteoric_autoform-ionic/LICENSE similarity index 100% rename from packages/meteoric:autoform-ionic/LICENSE rename to packages/meteoric_autoform-ionic/LICENSE diff --git a/packages/meteoric:autoform-ionic/README.md b/packages/meteoric_autoform-ionic/README.md similarity index 100% rename from packages/meteoric:autoform-ionic/README.md rename to packages/meteoric_autoform-ionic/README.md diff --git a/packages/meteoric:autoform-ionic/ionic.css b/packages/meteoric_autoform-ionic/ionic.css similarity index 100% rename from packages/meteoric:autoform-ionic/ionic.css rename to packages/meteoric_autoform-ionic/ionic.css diff --git a/packages/meteoric:autoform-ionic/ionic.html b/packages/meteoric_autoform-ionic/ionic.html similarity index 100% rename from packages/meteoric:autoform-ionic/ionic.html rename to packages/meteoric_autoform-ionic/ionic.html diff --git a/packages/meteoric:autoform-ionic/ionic.js b/packages/meteoric_autoform-ionic/ionic.js similarity index 100% rename from packages/meteoric:autoform-ionic/ionic.js rename to packages/meteoric_autoform-ionic/ionic.js diff --git a/packages/meteoric:autoform-ionic/package.js b/packages/meteoric_autoform-ionic/package.js similarity index 100% rename from packages/meteoric:autoform-ionic/package.js rename to packages/meteoric_autoform-ionic/package.js diff --git a/packages/meteoric:autoform-ionic/versions.json b/packages/meteoric_autoform-ionic/versions.json similarity index 100% rename from packages/meteoric:autoform-ionic/versions.json rename to packages/meteoric_autoform-ionic/versions.json diff --git a/packages/meteoric:camera/.versions b/packages/meteoric_camera/.versions similarity index 100% rename from packages/meteoric:camera/.versions rename to packages/meteoric_camera/.versions diff --git a/packages/meteoric:camera/README.md b/packages/meteoric_camera/README.md similarity index 100% rename from packages/meteoric:camera/README.md rename to packages/meteoric_camera/README.md diff --git a/packages/meteoric:camera/camera-browser.js b/packages/meteoric_camera/camera-browser.js similarity index 100% rename from packages/meteoric:camera/camera-browser.js rename to packages/meteoric_camera/camera-browser.js diff --git a/packages/meteoric_camera/camera-cordova.js b/packages/meteoric_camera/camera-cordova.js new file mode 100755 index 0000000000000000000000000000000000000000..9ab3e5728329dd4d71acbc24a109b11e5d1276a4 --- /dev/null +++ b/packages/meteoric_camera/camera-cordova.js @@ -0,0 +1,107 @@ +if (Meteor.isDesktop) { + console.log('meteor is desktop'); + + MeteoricCamera.photo = new ReactiveVar(null); + MeteoricCamera.error = new ReactiveVar(null); + MeteoricCamera.waitingForPermission = new ReactiveVar(null); + + MeteoricCamera.canvasWidth = 0; + MeteoricCamera.canvasHeight = 0; + + MeteoricCamera.quality = 80; + + // is the current error a permission denied error? + MeteoricCamera.permissionDeniedError = function () { + return MeteoricCamera.error.get() && ( + MeteoricCamera.error.get().name === "PermissionDeniedError" || // Chrome and Opera + MeteoricCamera.error.get() === "PERMISSION_DENIED" // Firefox + ); + }; + + // is the current error a browser not supported error? + MeteoricCamera.browserNotSupportedError = function () { + return MeteoricCamera.error.get() && MeteoricCamera.error.get() === "BROWSER_NOT_SUPPORTED"; + }; + + + /** + * @summary Get a picture from the device's default camera. + * @param {Object} options Options + * @param {Number} options.height The minimum height of the image + * @param {Number} options.width The minimum width of the image + * @param {Number} options.quality [description] + * @param {Function} callback A callback that is called with two arguments: + * 1. error, an object that contains error.message and possibly other properties + * depending on platform + * 2. data, a Data URI string with the image encoded in JPEG format, ready to + * use as the `src` attribute on an `<img />` tag. + */ + MeteoricCamera.getPicture = function (options, callback) { + // if options are not passed + if (! callback) { + callback = options; + options = {}; + } + + desiredHeight = options.height || 640; + desiredWidth = options.width || 480; + + // Canvas#toDataURL takes the quality as a 0-1 value, not a percentage + MeteoricCamera.quality = (options.quality || 49) / 100; + + if (desiredHeight * 4 / 3 > desiredWidth) { + MeteoricCamera.canvasWidth = desiredHeight * 4 / 3; + MeteoricCamera.canvasHeight = desiredHeight; + } else { + MeteoricCamera.canvasHeight = desiredWidth * 3 / 4; + MeteoricCamera.canvasWidth = desiredWidth; + } + + MeteoricCamera.canvasWidth = Math.round(MeteoricCamera.canvasWidth); + MeteoricCamera.canvasHeight = Math.round(MeteoricCamera.canvasHeight); + + + IonModal.open("viewfinder"); + // var view; + + MeteoricCamera.closeAndCallback = function () { + var originalArgs = arguments; + IonModal.close(); + MeteoricCamera.photo.set(null); + callback.apply(null, originalArgs); + }; + + // view = UI.renderWithData(Template.viewfinder); + // UI.insert(view, document.body); + }; + +} else { + MeteoricCamera.getPicture = function (options, callback) { + // if options are not passed + if (! callback) { + callback = options; + options = {}; + } + + var success = function (data) { + callback(null, "data:image/jpeg;base64," + data); + }; + + var failure = function (error) { + callback(new Meteor.Error("cordovaError", error)); + }; + + navigator.camera.getPicture(success, failure, + _.extend(options, { + quality: options.quality || 60, + targetWidth: options.width || 640, + targetHeight: options.height || 480, + destinationType: Camera.DestinationType.DATA_URL, + correctOrientation: true, + encodingType: Camera.EncodingType.JPEG, + allowEdit: true + }) + ); + }; + +} diff --git a/packages/meteoric:camera/camera.js b/packages/meteoric_camera/camera.js similarity index 100% rename from packages/meteoric:camera/camera.js rename to packages/meteoric_camera/camera.js diff --git a/packages/meteoric:camera/camera.less b/packages/meteoric_camera/camera.less similarity index 100% rename from packages/meteoric:camera/camera.less rename to packages/meteoric_camera/camera.less diff --git a/packages/meteoric:camera/i18n/en.i18n.json b/packages/meteoric_camera/i18n/en.i18n.json similarity index 100% rename from packages/meteoric:camera/i18n/en.i18n.json rename to packages/meteoric_camera/i18n/en.i18n.json diff --git a/packages/meteoric:camera/i18n/fr.i18n.json b/packages/meteoric_camera/i18n/fr.i18n.json similarity index 100% rename from packages/meteoric:camera/i18n/fr.i18n.json rename to packages/meteoric_camera/i18n/fr.i18n.json diff --git a/packages/meteoric:camera/package-tap.i18n b/packages/meteoric_camera/package-tap.i18n similarity index 100% rename from packages/meteoric:camera/package-tap.i18n rename to packages/meteoric_camera/package-tap.i18n diff --git a/packages/meteoric:camera/package.js b/packages/meteoric_camera/package.js similarity index 79% rename from packages/meteoric:camera/package.js rename to packages/meteoric_camera/package.js index 606235c39adf4b491f974202fd1f6ffa471b0352..05d592800d415e4e48ce31119d3ba926adbe7f53 100755 --- a/packages/meteoric:camera/package.js +++ b/packages/meteoric_camera/package.js @@ -28,11 +28,18 @@ Package.onUse(function(api) { 'templates/viewfinder.js' ], ['web.browser']); + api.addFiles([ + 'camera-cordova.js', + 'camera.less', + 'templates/errorMessage.html', + 'templates/permissionDenied.html', + 'templates/viewfinder.html', + 'templates/viewfinder.js' + ], ['web.cordova']) + api.addFiles([ "i18n/en.i18n.json", "i18n/fr.i18n.json" ], ["client", "server"]); - - api.addFiles('camera-cordova.js', ['web.cordova']); }); diff --git a/packages/meteoric:camera/templates/errorMessage.html b/packages/meteoric_camera/templates/errorMessage.html similarity index 100% rename from packages/meteoric:camera/templates/errorMessage.html rename to packages/meteoric_camera/templates/errorMessage.html diff --git a/packages/meteoric:camera/templates/permissionDenied.html b/packages/meteoric_camera/templates/permissionDenied.html similarity index 100% rename from packages/meteoric:camera/templates/permissionDenied.html rename to packages/meteoric_camera/templates/permissionDenied.html diff --git a/packages/meteoric:camera/templates/viewfinder.html b/packages/meteoric_camera/templates/viewfinder.html similarity index 100% rename from packages/meteoric:camera/templates/viewfinder.html rename to packages/meteoric_camera/templates/viewfinder.html diff --git a/packages/meteoric:camera/templates/viewfinder.js b/packages/meteoric_camera/templates/viewfinder.js similarity index 100% rename from packages/meteoric:camera/templates/viewfinder.js rename to packages/meteoric_camera/templates/viewfinder.js diff --git a/packages/meteoric:ionic/.gitignore b/packages/meteoric_ionic/.gitignore similarity index 100% rename from packages/meteoric:ionic/.gitignore rename to packages/meteoric_ionic/.gitignore diff --git a/packages/meteoric:ionic/.versions b/packages/meteoric_ionic/.versions similarity index 100% rename from packages/meteoric:ionic/.versions rename to packages/meteoric_ionic/.versions diff --git a/packages/meteoric:ionic/GUIDE.md b/packages/meteoric_ionic/GUIDE.md similarity index 100% rename from packages/meteoric:ionic/GUIDE.md rename to packages/meteoric_ionic/GUIDE.md diff --git a/packages/meteoric:ionic/LICENSE b/packages/meteoric_ionic/LICENSE similarity index 100% rename from packages/meteoric:ionic/LICENSE rename to packages/meteoric_ionic/LICENSE diff --git a/packages/meteoric:ionic/README.md b/packages/meteoric_ionic/README.md similarity index 100% rename from packages/meteoric:ionic/README.md rename to packages/meteoric_ionic/README.md diff --git a/packages/meteoric:ionic/components/ionActionSheet/ionActionSheet.html b/packages/meteoric_ionic/components/ionActionSheet/ionActionSheet.html similarity index 100% rename from packages/meteoric:ionic/components/ionActionSheet/ionActionSheet.html rename to packages/meteoric_ionic/components/ionActionSheet/ionActionSheet.html diff --git a/packages/meteoric:ionic/components/ionActionSheet/ionActionSheet.js b/packages/meteoric_ionic/components/ionActionSheet/ionActionSheet.js similarity index 100% rename from packages/meteoric:ionic/components/ionActionSheet/ionActionSheet.js rename to packages/meteoric_ionic/components/ionActionSheet/ionActionSheet.js diff --git a/packages/meteoric:ionic/components/ionBackdrop/ionBackdrop.html b/packages/meteoric_ionic/components/ionBackdrop/ionBackdrop.html similarity index 100% rename from packages/meteoric:ionic/components/ionBackdrop/ionBackdrop.html rename to packages/meteoric_ionic/components/ionBackdrop/ionBackdrop.html diff --git a/packages/meteoric:ionic/components/ionBackdrop/ionBackdrop.js b/packages/meteoric_ionic/components/ionBackdrop/ionBackdrop.js similarity index 100% rename from packages/meteoric:ionic/components/ionBackdrop/ionBackdrop.js rename to packages/meteoric_ionic/components/ionBackdrop/ionBackdrop.js diff --git a/packages/meteoric:ionic/components/ionBody/ionBody.html b/packages/meteoric_ionic/components/ionBody/ionBody.html similarity index 100% rename from packages/meteoric:ionic/components/ionBody/ionBody.html rename to packages/meteoric_ionic/components/ionBody/ionBody.html diff --git a/packages/meteoric:ionic/components/ionBody/ionBody.js b/packages/meteoric_ionic/components/ionBody/ionBody.js similarity index 100% rename from packages/meteoric:ionic/components/ionBody/ionBody.js rename to packages/meteoric_ionic/components/ionBody/ionBody.js diff --git a/packages/meteoric:ionic/components/ionContent/ionContent.html b/packages/meteoric_ionic/components/ionContent/ionContent.html similarity index 100% rename from packages/meteoric:ionic/components/ionContent/ionContent.html rename to packages/meteoric_ionic/components/ionContent/ionContent.html diff --git a/packages/meteoric:ionic/components/ionContent/ionContent.js b/packages/meteoric_ionic/components/ionContent/ionContent.js similarity index 100% rename from packages/meteoric:ionic/components/ionContent/ionContent.js rename to packages/meteoric_ionic/components/ionContent/ionContent.js diff --git a/packages/meteoric:ionic/components/ionFooterBar/ionFooterBar.html b/packages/meteoric_ionic/components/ionFooterBar/ionFooterBar.html similarity index 100% rename from packages/meteoric:ionic/components/ionFooterBar/ionFooterBar.html rename to packages/meteoric_ionic/components/ionFooterBar/ionFooterBar.html diff --git a/packages/meteoric:ionic/components/ionFooterBar/ionFooterBar.js b/packages/meteoric_ionic/components/ionFooterBar/ionFooterBar.js similarity index 100% rename from packages/meteoric:ionic/components/ionFooterBar/ionFooterBar.js rename to packages/meteoric_ionic/components/ionFooterBar/ionFooterBar.js diff --git a/packages/meteoric:ionic/components/ionHeaderBar/ionHeaderBar.html b/packages/meteoric_ionic/components/ionHeaderBar/ionHeaderBar.html similarity index 100% rename from packages/meteoric:ionic/components/ionHeaderBar/ionHeaderBar.html rename to packages/meteoric_ionic/components/ionHeaderBar/ionHeaderBar.html diff --git a/packages/meteoric:ionic/components/ionHeaderBar/ionHeaderBar.js b/packages/meteoric_ionic/components/ionHeaderBar/ionHeaderBar.js similarity index 100% rename from packages/meteoric:ionic/components/ionHeaderBar/ionHeaderBar.js rename to packages/meteoric_ionic/components/ionHeaderBar/ionHeaderBar.js diff --git a/packages/meteoric:ionic/components/ionIcon/ionIcon.html b/packages/meteoric_ionic/components/ionIcon/ionIcon.html similarity index 100% rename from packages/meteoric:ionic/components/ionIcon/ionIcon.html rename to packages/meteoric_ionic/components/ionIcon/ionIcon.html diff --git a/packages/meteoric:ionic/components/ionIcon/ionIcon.js b/packages/meteoric_ionic/components/ionIcon/ionIcon.js similarity index 100% rename from packages/meteoric:ionic/components/ionIcon/ionIcon.js rename to packages/meteoric_ionic/components/ionIcon/ionIcon.js diff --git a/packages/meteoric:ionic/components/ionItem/ionItem.html b/packages/meteoric_ionic/components/ionItem/ionItem.html similarity index 100% rename from packages/meteoric:ionic/components/ionItem/ionItem.html rename to packages/meteoric_ionic/components/ionItem/ionItem.html diff --git a/packages/meteoric:ionic/components/ionItem/ionItem.js b/packages/meteoric_ionic/components/ionItem/ionItem.js similarity index 100% rename from packages/meteoric:ionic/components/ionItem/ionItem.js rename to packages/meteoric_ionic/components/ionItem/ionItem.js diff --git a/packages/meteoric:ionic/components/ionKeyboard/ionInputFocus.js b/packages/meteoric_ionic/components/ionKeyboard/ionInputFocus.js similarity index 100% rename from packages/meteoric:ionic/components/ionKeyboard/ionInputFocus.js rename to packages/meteoric_ionic/components/ionKeyboard/ionInputFocus.js diff --git a/packages/meteoric:ionic/components/ionKeyboard/ionKeyboard.js b/packages/meteoric_ionic/components/ionKeyboard/ionKeyboard.js similarity index 100% rename from packages/meteoric:ionic/components/ionKeyboard/ionKeyboard.js rename to packages/meteoric_ionic/components/ionKeyboard/ionKeyboard.js diff --git a/packages/meteoric:ionic/components/ionList/ionList.html b/packages/meteoric_ionic/components/ionList/ionList.html similarity index 100% rename from packages/meteoric:ionic/components/ionList/ionList.html rename to packages/meteoric_ionic/components/ionList/ionList.html diff --git a/packages/meteoric:ionic/components/ionList/ionList.js b/packages/meteoric_ionic/components/ionList/ionList.js similarity index 100% rename from packages/meteoric:ionic/components/ionList/ionList.js rename to packages/meteoric_ionic/components/ionList/ionList.js diff --git a/packages/meteoric:ionic/components/ionListButton/ionListButton.html b/packages/meteoric_ionic/components/ionListButton/ionListButton.html similarity index 100% rename from packages/meteoric:ionic/components/ionListButton/ionListButton.html rename to packages/meteoric_ionic/components/ionListButton/ionListButton.html diff --git a/packages/meteoric:ionic/components/ionListButton/ionListButton.js b/packages/meteoric_ionic/components/ionListButton/ionListButton.js similarity index 100% rename from packages/meteoric:ionic/components/ionListButton/ionListButton.js rename to packages/meteoric_ionic/components/ionListButton/ionListButton.js diff --git a/packages/meteoric:ionic/components/ionLoading/ionLoading.html b/packages/meteoric_ionic/components/ionLoading/ionLoading.html similarity index 100% rename from packages/meteoric:ionic/components/ionLoading/ionLoading.html rename to packages/meteoric_ionic/components/ionLoading/ionLoading.html diff --git a/packages/meteoric:ionic/components/ionLoading/ionLoading.js b/packages/meteoric_ionic/components/ionLoading/ionLoading.js similarity index 100% rename from packages/meteoric:ionic/components/ionLoading/ionLoading.js rename to packages/meteoric_ionic/components/ionLoading/ionLoading.js diff --git a/packages/meteoric:ionic/components/ionModal/ionModal.html b/packages/meteoric_ionic/components/ionModal/ionModal.html similarity index 100% rename from packages/meteoric:ionic/components/ionModal/ionModal.html rename to packages/meteoric_ionic/components/ionModal/ionModal.html diff --git a/packages/meteoric:ionic/components/ionModal/ionModal.js b/packages/meteoric_ionic/components/ionModal/ionModal.js similarity index 100% rename from packages/meteoric:ionic/components/ionModal/ionModal.js rename to packages/meteoric_ionic/components/ionModal/ionModal.js diff --git a/packages/meteoric:ionic/components/ionNavBackButton/ionNavBackButton.html b/packages/meteoric_ionic/components/ionNavBackButton/ionNavBackButton.html similarity index 100% rename from packages/meteoric:ionic/components/ionNavBackButton/ionNavBackButton.html rename to packages/meteoric_ionic/components/ionNavBackButton/ionNavBackButton.html diff --git a/packages/meteoric:ionic/components/ionNavBackButton/ionNavBackButton.js b/packages/meteoric_ionic/components/ionNavBackButton/ionNavBackButton.js similarity index 100% rename from packages/meteoric:ionic/components/ionNavBackButton/ionNavBackButton.js rename to packages/meteoric_ionic/components/ionNavBackButton/ionNavBackButton.js diff --git a/packages/meteoric:ionic/components/ionNavBar/ionNavBar.html b/packages/meteoric_ionic/components/ionNavBar/ionNavBar.html similarity index 100% rename from packages/meteoric:ionic/components/ionNavBar/ionNavBar.html rename to packages/meteoric_ionic/components/ionNavBar/ionNavBar.html diff --git a/packages/meteoric:ionic/components/ionNavBar/ionNavBar.js b/packages/meteoric_ionic/components/ionNavBar/ionNavBar.js similarity index 100% rename from packages/meteoric:ionic/components/ionNavBar/ionNavBar.js rename to packages/meteoric_ionic/components/ionNavBar/ionNavBar.js diff --git a/packages/meteoric:ionic/components/ionNavView/ionNavView.html b/packages/meteoric_ionic/components/ionNavView/ionNavView.html similarity index 100% rename from packages/meteoric:ionic/components/ionNavView/ionNavView.html rename to packages/meteoric_ionic/components/ionNavView/ionNavView.html diff --git a/packages/meteoric:ionic/components/ionNavView/ionNavView.js b/packages/meteoric_ionic/components/ionNavView/ionNavView.js similarity index 100% rename from packages/meteoric:ionic/components/ionNavView/ionNavView.js rename to packages/meteoric_ionic/components/ionNavView/ionNavView.js diff --git a/packages/meteoric:ionic/components/ionPane/ionPane.html b/packages/meteoric_ionic/components/ionPane/ionPane.html similarity index 100% rename from packages/meteoric:ionic/components/ionPane/ionPane.html rename to packages/meteoric_ionic/components/ionPane/ionPane.html diff --git a/packages/meteoric:ionic/components/ionPane/ionPane.js b/packages/meteoric_ionic/components/ionPane/ionPane.js similarity index 100% rename from packages/meteoric:ionic/components/ionPane/ionPane.js rename to packages/meteoric_ionic/components/ionPane/ionPane.js diff --git a/packages/meteoric:ionic/components/ionPopover/ionPopover.html b/packages/meteoric_ionic/components/ionPopover/ionPopover.html similarity index 100% rename from packages/meteoric:ionic/components/ionPopover/ionPopover.html rename to packages/meteoric_ionic/components/ionPopover/ionPopover.html diff --git a/packages/meteoric:ionic/components/ionPopover/ionPopover.js b/packages/meteoric_ionic/components/ionPopover/ionPopover.js similarity index 100% rename from packages/meteoric:ionic/components/ionPopover/ionPopover.js rename to packages/meteoric_ionic/components/ionPopover/ionPopover.js diff --git a/packages/meteoric:ionic/components/ionPopup/ionPopup.html b/packages/meteoric_ionic/components/ionPopup/ionPopup.html similarity index 100% rename from packages/meteoric:ionic/components/ionPopup/ionPopup.html rename to packages/meteoric_ionic/components/ionPopup/ionPopup.html diff --git a/packages/meteoric:ionic/components/ionPopup/ionPopup.js b/packages/meteoric_ionic/components/ionPopup/ionPopup.js similarity index 100% rename from packages/meteoric:ionic/components/ionPopup/ionPopup.js rename to packages/meteoric_ionic/components/ionPopup/ionPopup.js diff --git a/packages/meteoric:ionic/components/ionRadio/ionRadio.html b/packages/meteoric_ionic/components/ionRadio/ionRadio.html similarity index 100% rename from packages/meteoric:ionic/components/ionRadio/ionRadio.html rename to packages/meteoric_ionic/components/ionRadio/ionRadio.html diff --git a/packages/meteoric:ionic/components/ionRadio/ionRadio.js b/packages/meteoric_ionic/components/ionRadio/ionRadio.js similarity index 100% rename from packages/meteoric:ionic/components/ionRadio/ionRadio.js rename to packages/meteoric_ionic/components/ionRadio/ionRadio.js diff --git a/packages/meteoric:ionic/components/ionSideMenu/ionSideMenu.html b/packages/meteoric_ionic/components/ionSideMenu/ionSideMenu.html similarity index 100% rename from packages/meteoric:ionic/components/ionSideMenu/ionSideMenu.html rename to packages/meteoric_ionic/components/ionSideMenu/ionSideMenu.html diff --git a/packages/meteoric:ionic/components/ionSideMenu/ionSideMenu.js b/packages/meteoric_ionic/components/ionSideMenu/ionSideMenu.js similarity index 100% rename from packages/meteoric:ionic/components/ionSideMenu/ionSideMenu.js rename to packages/meteoric_ionic/components/ionSideMenu/ionSideMenu.js diff --git a/packages/meteoric:ionic/components/ionSideMenuContainer/ionSideMenuContainer.html b/packages/meteoric_ionic/components/ionSideMenuContainer/ionSideMenuContainer.html similarity index 100% rename from packages/meteoric:ionic/components/ionSideMenuContainer/ionSideMenuContainer.html rename to packages/meteoric_ionic/components/ionSideMenuContainer/ionSideMenuContainer.html diff --git a/packages/meteoric:ionic/components/ionSideMenuContainer/ionSideMenuContainer.js b/packages/meteoric_ionic/components/ionSideMenuContainer/ionSideMenuContainer.js similarity index 100% rename from packages/meteoric:ionic/components/ionSideMenuContainer/ionSideMenuContainer.js rename to packages/meteoric_ionic/components/ionSideMenuContainer/ionSideMenuContainer.js diff --git a/packages/meteoric:ionic/components/ionSideMenuContent/ionSideMenuContent.html b/packages/meteoric_ionic/components/ionSideMenuContent/ionSideMenuContent.html similarity index 100% rename from packages/meteoric:ionic/components/ionSideMenuContent/ionSideMenuContent.html rename to packages/meteoric_ionic/components/ionSideMenuContent/ionSideMenuContent.html diff --git a/packages/meteoric:ionic/components/ionSideMenuContent/ionSideMenuContent.js b/packages/meteoric_ionic/components/ionSideMenuContent/ionSideMenuContent.js similarity index 100% rename from packages/meteoric:ionic/components/ionSideMenuContent/ionSideMenuContent.js rename to packages/meteoric_ionic/components/ionSideMenuContent/ionSideMenuContent.js diff --git a/packages/meteoric:ionic/components/ionSideMenus/ionSideMenus.html b/packages/meteoric_ionic/components/ionSideMenus/ionSideMenus.html similarity index 100% rename from packages/meteoric:ionic/components/ionSideMenus/ionSideMenus.html rename to packages/meteoric_ionic/components/ionSideMenus/ionSideMenus.html diff --git a/packages/meteoric:ionic/components/ionSideMenus/ionSideMenus.js b/packages/meteoric_ionic/components/ionSideMenus/ionSideMenus.js similarity index 100% rename from packages/meteoric:ionic/components/ionSideMenus/ionSideMenus.js rename to packages/meteoric_ionic/components/ionSideMenus/ionSideMenus.js diff --git a/packages/meteoric:ionic/components/ionSlide/ionSlide.html b/packages/meteoric_ionic/components/ionSlide/ionSlide.html similarity index 100% rename from packages/meteoric:ionic/components/ionSlide/ionSlide.html rename to packages/meteoric_ionic/components/ionSlide/ionSlide.html diff --git a/packages/meteoric:ionic/components/ionSlide/ionSlide.js b/packages/meteoric_ionic/components/ionSlide/ionSlide.js similarity index 100% rename from packages/meteoric:ionic/components/ionSlide/ionSlide.js rename to packages/meteoric_ionic/components/ionSlide/ionSlide.js diff --git a/packages/meteoric:ionic/components/ionSlideBox/ionSlideBox.html b/packages/meteoric_ionic/components/ionSlideBox/ionSlideBox.html similarity index 100% rename from packages/meteoric:ionic/components/ionSlideBox/ionSlideBox.html rename to packages/meteoric_ionic/components/ionSlideBox/ionSlideBox.html diff --git a/packages/meteoric:ionic/components/ionSlideBox/ionSlideBox.js b/packages/meteoric_ionic/components/ionSlideBox/ionSlideBox.js similarity index 100% rename from packages/meteoric:ionic/components/ionSlideBox/ionSlideBox.js rename to packages/meteoric_ionic/components/ionSlideBox/ionSlideBox.js diff --git a/packages/meteoric:ionic/components/ionSpinner/ionSpinner.html b/packages/meteoric_ionic/components/ionSpinner/ionSpinner.html similarity index 100% rename from packages/meteoric:ionic/components/ionSpinner/ionSpinner.html rename to packages/meteoric_ionic/components/ionSpinner/ionSpinner.html diff --git a/packages/meteoric:ionic/components/ionSpinner/ionSpinner.js b/packages/meteoric_ionic/components/ionSpinner/ionSpinner.js similarity index 100% rename from packages/meteoric:ionic/components/ionSpinner/ionSpinner.js rename to packages/meteoric_ionic/components/ionSpinner/ionSpinner.js diff --git a/packages/meteoric:ionic/components/ionSubfooterBar/ionSubfooterBar.html b/packages/meteoric_ionic/components/ionSubfooterBar/ionSubfooterBar.html similarity index 100% rename from packages/meteoric:ionic/components/ionSubfooterBar/ionSubfooterBar.html rename to packages/meteoric_ionic/components/ionSubfooterBar/ionSubfooterBar.html diff --git a/packages/meteoric:ionic/components/ionSubfooterBar/ionSubfooterBar.js b/packages/meteoric_ionic/components/ionSubfooterBar/ionSubfooterBar.js similarity index 100% rename from packages/meteoric:ionic/components/ionSubfooterBar/ionSubfooterBar.js rename to packages/meteoric_ionic/components/ionSubfooterBar/ionSubfooterBar.js diff --git a/packages/meteoric:ionic/components/ionSubheaderBar/ionSubheaderBar.html b/packages/meteoric_ionic/components/ionSubheaderBar/ionSubheaderBar.html similarity index 100% rename from packages/meteoric:ionic/components/ionSubheaderBar/ionSubheaderBar.html rename to packages/meteoric_ionic/components/ionSubheaderBar/ionSubheaderBar.html diff --git a/packages/meteoric:ionic/components/ionSubheaderBar/ionSubheaderBar.js b/packages/meteoric_ionic/components/ionSubheaderBar/ionSubheaderBar.js similarity index 100% rename from packages/meteoric:ionic/components/ionSubheaderBar/ionSubheaderBar.js rename to packages/meteoric_ionic/components/ionSubheaderBar/ionSubheaderBar.js diff --git a/packages/meteoric:ionic/components/ionTab/ionTab.html b/packages/meteoric_ionic/components/ionTab/ionTab.html similarity index 100% rename from packages/meteoric:ionic/components/ionTab/ionTab.html rename to packages/meteoric_ionic/components/ionTab/ionTab.html diff --git a/packages/meteoric:ionic/components/ionTab/ionTab.js b/packages/meteoric_ionic/components/ionTab/ionTab.js similarity index 100% rename from packages/meteoric:ionic/components/ionTab/ionTab.js rename to packages/meteoric_ionic/components/ionTab/ionTab.js diff --git a/packages/meteoric:ionic/components/ionTabs/ionTabs.html b/packages/meteoric_ionic/components/ionTabs/ionTabs.html similarity index 100% rename from packages/meteoric:ionic/components/ionTabs/ionTabs.html rename to packages/meteoric_ionic/components/ionTabs/ionTabs.html diff --git a/packages/meteoric:ionic/components/ionTabs/ionTabs.js b/packages/meteoric_ionic/components/ionTabs/ionTabs.js similarity index 100% rename from packages/meteoric:ionic/components/ionTabs/ionTabs.js rename to packages/meteoric_ionic/components/ionTabs/ionTabs.js diff --git a/packages/meteoric:ionic/components/ionView/ionView.html b/packages/meteoric_ionic/components/ionView/ionView.html similarity index 100% rename from packages/meteoric:ionic/components/ionView/ionView.html rename to packages/meteoric_ionic/components/ionView/ionView.html diff --git a/packages/meteoric:ionic/components/ionView/ionView.js b/packages/meteoric_ionic/components/ionView/ionView.js similarity index 100% rename from packages/meteoric:ionic/components/ionView/ionView.js rename to packages/meteoric_ionic/components/ionView/ionView.js diff --git a/packages/meteoric:ionic/package.js b/packages/meteoric_ionic/package.js similarity index 100% rename from packages/meteoric:ionic/package.js rename to packages/meteoric_ionic/package.js diff --git a/packages/meteoric:ionic/vendor/slick.css b/packages/meteoric_ionic/vendor/slick.css similarity index 100% rename from packages/meteoric:ionic/vendor/slick.css rename to packages/meteoric_ionic/vendor/slick.css diff --git a/packages/meteoric:ionic/vendor/slick.js b/packages/meteoric_ionic/vendor/slick.js similarity index 100% rename from packages/meteoric:ionic/vendor/slick.js rename to packages/meteoric_ionic/vendor/slick.js diff --git a/packages/meteoric:ionic/vendor/slip.js b/packages/meteoric_ionic/vendor/slip.js similarity index 100% rename from packages/meteoric:ionic/vendor/slip.js rename to packages/meteoric_ionic/vendor/slip.js diff --git a/packages/meteoric:ionic/vendor/snap.css b/packages/meteoric_ionic/vendor/snap.css similarity index 100% rename from packages/meteoric:ionic/vendor/snap.css rename to packages/meteoric_ionic/vendor/snap.css diff --git a/packages/meteoric:ionic/vendor/snap.js b/packages/meteoric_ionic/vendor/snap.js similarity index 100% rename from packages/meteoric:ionic/vendor/snap.js rename to packages/meteoric_ionic/vendor/snap.js diff --git a/packages/meteoric:ionic/versions.json b/packages/meteoric_ionic/versions.json similarity index 100% rename from packages/meteoric:ionic/versions.json rename to packages/meteoric_ionic/versions.json diff --git a/project-tap.i18n b/project-tap.i18n index 4995e562cd3df653608a6434c9b570354deb7ef1..1792dbfc468f3a5c6f9d902c3c44e7450c747acd 100644 --- a/project-tap.i18n +++ b/project-tap.i18n @@ -1,5 +1,6 @@ // project-root/project-tap.i18n { "supported_languages": ["en","fr"], - "i18n_files_route": "/i18n" + "cdn_path" : "i18n", + "preloaded_langs": ["*"] } diff --git a/server/main.js b/server/main.js index 2c0b3d339e6dbfea62bac3599fca6562e4101244..795bc41ee41ee59f498ce0a437da687a47437195 100644 --- a/server/main.js +++ b/server/main.js @@ -1,6 +1,6 @@ import '../imports/startup/server'; import '../imports/api/server/config.js'; -import '../imports/api/server/kadira.js'; +// import '../imports/api/server/kadira.js'; import '../imports/api/server/publish.js'; import '../imports/api/server/method.js';