all working after migration
|
@ -1,12 +0,0 @@
|
||||||
{
|
|
||||||
"name": "migration",
|
|
||||||
"paths": [
|
|
||||||
"hooks",
|
|
||||||
"webpack.config.js",
|
|
||||||
"package.json",
|
|
||||||
"package-lock.json",
|
|
||||||
"app/package.json",
|
|
||||||
"package.json",
|
|
||||||
"app/package.json"
|
|
||||||
]
|
|
||||||
}
|
|
|
@ -1,9 +0,0 @@
|
||||||
{
|
|
||||||
"android": {
|
|
||||||
"v8Flags": "--expose_gc",
|
|
||||||
"markingMode": "none"
|
|
||||||
},
|
|
||||||
"main": "main",
|
|
||||||
"name": "ns",
|
|
||||||
"version": "1.0.0"
|
|
||||||
}
|
|
8541
.migration_backup/package-lock.json
generated
|
@ -1,45 +0,0 @@
|
||||||
{
|
|
||||||
"name": "ns",
|
|
||||||
"version": "1.0.0",
|
|
||||||
"description": "A native application built with NativeScript-Vue",
|
|
||||||
"author": "Vishnu Raghav B <design@vishnuraghav.com>",
|
|
||||||
"license": "GPL",
|
|
||||||
"nativescript": {
|
|
||||||
"id": "com.vishnuraghav.enrecipes",
|
|
||||||
"templateVersion": "v2",
|
|
||||||
"tns-android": {
|
|
||||||
"version": "6.5.0"
|
|
||||||
},
|
|
||||||
"tns-ios": {
|
|
||||||
"version": "6.5.0"
|
|
||||||
}
|
|
||||||
},
|
|
||||||
"scripts": {
|
|
||||||
"run": "tns run"
|
|
||||||
},
|
|
||||||
"dependencies": {
|
|
||||||
"@nativescript/theme": "^2.2.1",
|
|
||||||
"nativescript-camera": "^4.5.0",
|
|
||||||
"nativescript-couchbase-plugin": "^0.9.6",
|
|
||||||
"nativescript-datetimepicker": "^1.2.3",
|
|
||||||
"nativescript-mediafilepicker": "^4.0.0",
|
|
||||||
"nativescript-permissions": "^1.3.9",
|
|
||||||
"nativescript-toast": "^2.0.0",
|
|
||||||
"nativescript-ui-listview": "^8.2.0",
|
|
||||||
"nativescript-ui-sidedrawer": "^8.0.1",
|
|
||||||
"nativescript-vue": "^2.6.1",
|
|
||||||
"tns-core-modules": "^6.5.1",
|
|
||||||
"vuex": "^3.3.0"
|
|
||||||
},
|
|
||||||
"devDependencies": {
|
|
||||||
"@babel/core": "^7.0.0",
|
|
||||||
"@babel/preset-env": "^7.0.0",
|
|
||||||
"@types/node": "^14.0.27",
|
|
||||||
"babel-loader": "^8.1.0",
|
|
||||||
"nativescript-dev-webpack": "^1.5.1",
|
|
||||||
"nativescript-vue-template-compiler": "^2.6.0",
|
|
||||||
"nativescript-worker-loader": "~0.11.0",
|
|
||||||
"node-sass": "^4.13.1",
|
|
||||||
"vue-loader": "^15.9.1"
|
|
||||||
}
|
|
||||||
}
|
|
|
@ -1,353 +0,0 @@
|
||||||
const { join, relative, resolve, sep } = require("path");
|
|
||||||
|
|
||||||
const webpack = require("webpack");
|
|
||||||
const CleanWebpackPlugin = require("clean-webpack-plugin");
|
|
||||||
const CopyWebpackPlugin = require("copy-webpack-plugin");
|
|
||||||
const { BundleAnalyzerPlugin } = require("webpack-bundle-analyzer");
|
|
||||||
const TerserPlugin = require("terser-webpack-plugin");
|
|
||||||
|
|
||||||
const VueLoaderPlugin = require('vue-loader/lib/plugin');
|
|
||||||
const NsVueTemplateCompiler = require("nativescript-vue-template-compiler");
|
|
||||||
|
|
||||||
const nsWebpack = require("nativescript-dev-webpack");
|
|
||||||
const nativescriptTarget = require("nativescript-dev-webpack/nativescript-target");
|
|
||||||
const { NativeScriptWorkerPlugin } = require("nativescript-worker-loader/NativeScriptWorkerPlugin");
|
|
||||||
const hashSalt = Date.now().toString();
|
|
||||||
|
|
||||||
module.exports = env => {
|
|
||||||
// Add your custom Activities, Services and other android app components here.
|
|
||||||
const appComponents = env.appComponents || [];
|
|
||||||
appComponents.push(...[
|
|
||||||
"tns-core-modules/ui/frame",
|
|
||||||
"tns-core-modules/ui/frame/activity",
|
|
||||||
]);
|
|
||||||
|
|
||||||
const platform = env && (env.android && "android" || env.ios && "ios" || env.platform);
|
|
||||||
if (!platform) {
|
|
||||||
throw new Error("You need to provide a target platform!");
|
|
||||||
}
|
|
||||||
|
|
||||||
const platforms = ["ios", "android"];
|
|
||||||
const projectRoot = __dirname;
|
|
||||||
|
|
||||||
if (env.platform) {
|
|
||||||
platforms.push(env.platform);
|
|
||||||
}
|
|
||||||
|
|
||||||
// Default destination inside platforms/<platform>/...
|
|
||||||
const dist = resolve(projectRoot, nsWebpack.getAppPath(platform, projectRoot));
|
|
||||||
|
|
||||||
const {
|
|
||||||
// The 'appPath' and 'appResourcesPath' values are fetched from
|
|
||||||
// the nsconfig.json configuration file.
|
|
||||||
appPath = "app",
|
|
||||||
appResourcesPath = "app/App_Resources",
|
|
||||||
|
|
||||||
// You can provide the following flags when running 'tns run android|ios'
|
|
||||||
snapshot, // --env.snapshot
|
|
||||||
production, // --env.production
|
|
||||||
report, // --env.report
|
|
||||||
hmr, // --env.hmr
|
|
||||||
sourceMap, // --env.sourceMap
|
|
||||||
hiddenSourceMap, // --env.hiddenSourceMap
|
|
||||||
unitTesting, // --env.unitTesting
|
|
||||||
verbose, // --env.verbose
|
|
||||||
snapshotInDocker, // --env.snapshotInDocker
|
|
||||||
skipSnapshotTools, // --env.skipSnapshotTools
|
|
||||||
compileSnapshot // --env.compileSnapshot
|
|
||||||
} = env;
|
|
||||||
|
|
||||||
const useLibs = compileSnapshot;
|
|
||||||
const isAnySourceMapEnabled = !!sourceMap || !!hiddenSourceMap;
|
|
||||||
const externals = nsWebpack.getConvertedExternals(env.externals);
|
|
||||||
|
|
||||||
const mode = production ? "production" : "development"
|
|
||||||
|
|
||||||
const appFullPath = resolve(projectRoot, appPath);
|
|
||||||
const hasRootLevelScopedModules = nsWebpack.hasRootLevelScopedModules({ projectDir: projectRoot });
|
|
||||||
let coreModulesPackageName = "tns-core-modules";
|
|
||||||
const alias = env.alias || {};
|
|
||||||
alias['~'] = appFullPath;
|
|
||||||
alias['@'] = appFullPath;
|
|
||||||
alias['vue'] = 'nativescript-vue';
|
|
||||||
|
|
||||||
if (hasRootLevelScopedModules) {
|
|
||||||
coreModulesPackageName = "@nativescript/core";
|
|
||||||
alias["tns-core-modules"] = coreModulesPackageName;
|
|
||||||
}
|
|
||||||
|
|
||||||
const appResourcesFullPath = resolve(projectRoot, appResourcesPath);
|
|
||||||
|
|
||||||
const entryModule = nsWebpack.getEntryModule(appFullPath, platform);
|
|
||||||
const entryPath = `.${sep}${entryModule}`;
|
|
||||||
const entries = env.entries || {};
|
|
||||||
entries.bundle = entryPath;
|
|
||||||
|
|
||||||
const areCoreModulesExternal = Array.isArray(env.externals) && env.externals.some(e => e.indexOf("tns-core-modules") > -1);
|
|
||||||
if (platform === "ios" && !areCoreModulesExternal) {
|
|
||||||
entries["tns_modules/tns-core-modules/inspector_modules"] = "inspector_modules";
|
|
||||||
};
|
|
||||||
console.log(`Bundling application for entryPath ${entryPath}...`);
|
|
||||||
|
|
||||||
let sourceMapFilename = nsWebpack.getSourceMapFilename(hiddenSourceMap, __dirname, dist);
|
|
||||||
|
|
||||||
const itemsToClean = [`${dist}/**/*`];
|
|
||||||
if (platform === "android") {
|
|
||||||
itemsToClean.push(`${join(projectRoot, "platforms", "android", "app", "src", "main", "assets", "snapshots")}`);
|
|
||||||
itemsToClean.push(`${join(projectRoot, "platforms", "android", "app", "build", "configurations", "nativescript-android-snapshot")}`);
|
|
||||||
}
|
|
||||||
|
|
||||||
nsWebpack.processAppComponents(appComponents, platform);
|
|
||||||
const config = {
|
|
||||||
mode: mode,
|
|
||||||
context: appFullPath,
|
|
||||||
externals,
|
|
||||||
watchOptions: {
|
|
||||||
ignored: [
|
|
||||||
appResourcesFullPath,
|
|
||||||
// Don't watch hidden files
|
|
||||||
"**/.*",
|
|
||||||
],
|
|
||||||
},
|
|
||||||
target: nativescriptTarget,
|
|
||||||
// target: nativeScriptVueTarget,
|
|
||||||
entry: entries,
|
|
||||||
output: {
|
|
||||||
pathinfo: false,
|
|
||||||
path: dist,
|
|
||||||
sourceMapFilename,
|
|
||||||
libraryTarget: "commonjs2",
|
|
||||||
filename: "[name].js",
|
|
||||||
globalObject: "global",
|
|
||||||
hashSalt
|
|
||||||
},
|
|
||||||
resolve: {
|
|
||||||
extensions: [".vue", ".ts", ".js", ".scss", ".css"],
|
|
||||||
// Resolve {N} system modules from tns-core-modules
|
|
||||||
modules: [
|
|
||||||
resolve(__dirname, `node_modules/${coreModulesPackageName}`),
|
|
||||||
resolve(__dirname, "node_modules"),
|
|
||||||
`node_modules/${coreModulesPackageName}`,
|
|
||||||
"node_modules",
|
|
||||||
],
|
|
||||||
alias,
|
|
||||||
// resolve symlinks to symlinked modules
|
|
||||||
symlinks: true,
|
|
||||||
},
|
|
||||||
resolveLoader: {
|
|
||||||
// don't resolve symlinks to symlinked loaders
|
|
||||||
symlinks: false,
|
|
||||||
},
|
|
||||||
node: {
|
|
||||||
// Disable node shims that conflict with NativeScript
|
|
||||||
"http": false,
|
|
||||||
"timers": false,
|
|
||||||
"setImmediate": false,
|
|
||||||
"fs": "empty",
|
|
||||||
"__dirname": false,
|
|
||||||
},
|
|
||||||
devtool: hiddenSourceMap ? "hidden-source-map" : (sourceMap ? "inline-source-map" : "none"),
|
|
||||||
optimization: {
|
|
||||||
runtimeChunk: "single",
|
|
||||||
noEmitOnErrors: true,
|
|
||||||
splitChunks: {
|
|
||||||
cacheGroups: {
|
|
||||||
vendor: {
|
|
||||||
name: "vendor",
|
|
||||||
chunks: "all",
|
|
||||||
test: (module) => {
|
|
||||||
const moduleName = module.nameForCondition ? module.nameForCondition() : '';
|
|
||||||
return /[\\/]node_modules[\\/]/.test(moduleName) ||
|
|
||||||
appComponents.some(comp => comp === moduleName);
|
|
||||||
|
|
||||||
},
|
|
||||||
enforce: true,
|
|
||||||
},
|
|
||||||
},
|
|
||||||
},
|
|
||||||
minimize: Boolean(production),
|
|
||||||
minimizer: [
|
|
||||||
new TerserPlugin({
|
|
||||||
parallel: true,
|
|
||||||
cache: true,
|
|
||||||
sourceMap: isAnySourceMapEnabled,
|
|
||||||
terserOptions: {
|
|
||||||
output: {
|
|
||||||
comments: false,
|
|
||||||
semicolons: !isAnySourceMapEnabled
|
|
||||||
},
|
|
||||||
compress: {
|
|
||||||
// The Android SBG has problems parsing the output
|
|
||||||
// when these options are enabled
|
|
||||||
'collapse_vars': platform !== "android",
|
|
||||||
sequences: platform !== "android",
|
|
||||||
},
|
|
||||||
keep_fnames: true,
|
|
||||||
},
|
|
||||||
}),
|
|
||||||
],
|
|
||||||
},
|
|
||||||
module: {
|
|
||||||
rules: [{
|
|
||||||
include: [join(appFullPath, entryPath + ".js"), join(appFullPath, entryPath + ".ts")],
|
|
||||||
use: [
|
|
||||||
// Require all Android app components
|
|
||||||
platform === "android" && {
|
|
||||||
loader: "nativescript-dev-webpack/android-app-components-loader",
|
|
||||||
options: { modules: appComponents },
|
|
||||||
},
|
|
||||||
|
|
||||||
{
|
|
||||||
loader: "nativescript-dev-webpack/bundle-config-loader",
|
|
||||||
options: {
|
|
||||||
registerPages: true, // applicable only for non-angular apps
|
|
||||||
loadCss: !snapshot, // load the application css if in debug mode
|
|
||||||
unitTesting,
|
|
||||||
appFullPath,
|
|
||||||
projectRoot,
|
|
||||||
ignoredFiles: nsWebpack.getUserDefinedEntries(entries, platform)
|
|
||||||
},
|
|
||||||
},
|
|
||||||
].filter(loader => Boolean(loader)),
|
|
||||||
},
|
|
||||||
{
|
|
||||||
test: /[\/|\\]app\.css$/,
|
|
||||||
use: [
|
|
||||||
'nativescript-dev-webpack/style-hot-loader',
|
|
||||||
{
|
|
||||||
loader: "nativescript-dev-webpack/css2json-loader",
|
|
||||||
options: { useForImports: true }
|
|
||||||
},
|
|
||||||
],
|
|
||||||
},
|
|
||||||
{
|
|
||||||
test: /[\/|\\]app\.scss$/,
|
|
||||||
use: [
|
|
||||||
'nativescript-dev-webpack/style-hot-loader',
|
|
||||||
{
|
|
||||||
loader: "nativescript-dev-webpack/css2json-loader",
|
|
||||||
options: { useForImports: true }
|
|
||||||
},
|
|
||||||
'sass-loader',
|
|
||||||
],
|
|
||||||
},
|
|
||||||
{
|
|
||||||
test: /\.css$/,
|
|
||||||
exclude: /[\/|\\]app\.css$/,
|
|
||||||
use: [
|
|
||||||
'nativescript-dev-webpack/style-hot-loader',
|
|
||||||
'nativescript-dev-webpack/apply-css-loader.js',
|
|
||||||
{ loader: "css-loader", options: { url: false } },
|
|
||||||
],
|
|
||||||
},
|
|
||||||
{
|
|
||||||
test: /\.scss$/,
|
|
||||||
exclude: /[\/|\\]app\.scss$/,
|
|
||||||
use: [
|
|
||||||
'nativescript-dev-webpack/style-hot-loader',
|
|
||||||
'nativescript-dev-webpack/apply-css-loader.js',
|
|
||||||
{ loader: "css-loader", options: { url: false } },
|
|
||||||
'sass-loader',
|
|
||||||
],
|
|
||||||
},
|
|
||||||
{
|
|
||||||
test: /\.js$/,
|
|
||||||
loader: 'babel-loader',
|
|
||||||
},
|
|
||||||
{
|
|
||||||
test: /\.ts$/,
|
|
||||||
loader: 'ts-loader',
|
|
||||||
options: {
|
|
||||||
appendTsSuffixTo: [/\.vue$/],
|
|
||||||
allowTsInNodeModules: true,
|
|
||||||
compilerOptions: {
|
|
||||||
declaration: false
|
|
||||||
}
|
|
||||||
},
|
|
||||||
},
|
|
||||||
{
|
|
||||||
test: /\.vue$/,
|
|
||||||
loader: "vue-loader",
|
|
||||||
options: {
|
|
||||||
compiler: NsVueTemplateCompiler,
|
|
||||||
},
|
|
||||||
},
|
|
||||||
],
|
|
||||||
},
|
|
||||||
plugins: [
|
|
||||||
// ... Vue Loader plugin omitted
|
|
||||||
// make sure to include the plugin!
|
|
||||||
new VueLoaderPlugin(),
|
|
||||||
// Define useful constants like TNS_WEBPACK
|
|
||||||
new webpack.DefinePlugin({
|
|
||||||
"global.TNS_WEBPACK": "true",
|
|
||||||
"TNS_ENV": JSON.stringify(mode),
|
|
||||||
"process": "global.process"
|
|
||||||
}),
|
|
||||||
// Remove all files from the out dir.
|
|
||||||
new CleanWebpackPlugin(itemsToClean, { verbose: !!verbose }),
|
|
||||||
// Copy assets to out dir. Add your own globs as needed.
|
|
||||||
new CopyWebpackPlugin([
|
|
||||||
{ from: { glob: "fonts/**" } },
|
|
||||||
{ from: { glob: "**/*.+(jpg|png)" } },
|
|
||||||
{ from: { glob: "assets/**/*" } },
|
|
||||||
], { ignore: [`${relative(appPath, appResourcesFullPath)}/**`] }),
|
|
||||||
new nsWebpack.GenerateNativeScriptEntryPointsPlugin("bundle"),
|
|
||||||
// For instructions on how to set up workers with webpack
|
|
||||||
// check out https://github.com/nativescript/worker-loader
|
|
||||||
new NativeScriptWorkerPlugin(),
|
|
||||||
new nsWebpack.PlatformFSPlugin({
|
|
||||||
platform,
|
|
||||||
platforms,
|
|
||||||
}),
|
|
||||||
// Does IPC communication with the {N} CLI to notify events when running in watch mode.
|
|
||||||
new nsWebpack.WatchStateLoggerPlugin()
|
|
||||||
],
|
|
||||||
};
|
|
||||||
|
|
||||||
if (unitTesting) {
|
|
||||||
config.module.rules.push(
|
|
||||||
{
|
|
||||||
test: /-page\.js$/,
|
|
||||||
use: "nativescript-dev-webpack/script-hot-loader"
|
|
||||||
},
|
|
||||||
{
|
|
||||||
test: /\.(html|xml)$/,
|
|
||||||
use: "nativescript-dev-webpack/markup-hot-loader"
|
|
||||||
},
|
|
||||||
|
|
||||||
{ test: /\.(html|xml)$/, use: "nativescript-dev-webpack/xml-namespace-loader" }
|
|
||||||
);
|
|
||||||
}
|
|
||||||
|
|
||||||
if (report) {
|
|
||||||
// Generate report files for bundles content
|
|
||||||
config.plugins.push(new BundleAnalyzerPlugin({
|
|
||||||
analyzerMode: "static",
|
|
||||||
openAnalyzer: false,
|
|
||||||
generateStatsFile: true,
|
|
||||||
reportFilename: resolve(projectRoot, "report", `report.html`),
|
|
||||||
statsFilename: resolve(projectRoot, "report", `stats.json`),
|
|
||||||
}));
|
|
||||||
}
|
|
||||||
|
|
||||||
if (snapshot) {
|
|
||||||
config.plugins.push(new nsWebpack.NativeScriptSnapshotPlugin({
|
|
||||||
chunk: "vendor",
|
|
||||||
requireModules: [
|
|
||||||
"tns-core-modules/bundle-entry-points",
|
|
||||||
],
|
|
||||||
projectRoot,
|
|
||||||
webpackConfig: config,
|
|
||||||
snapshotInDocker,
|
|
||||||
skipSnapshotTools,
|
|
||||||
useLibs
|
|
||||||
}));
|
|
||||||
}
|
|
||||||
|
|
||||||
if (hmr) {
|
|
||||||
config.plugins.push(new webpack.HotModuleReplacementPlugin());
|
|
||||||
}
|
|
||||||
|
|
||||||
return config;
|
|
||||||
};
|
|
8469
.update_backup/package-lock.json
generated
|
@ -1,36 +0,0 @@
|
||||||
{
|
|
||||||
"name": "ns",
|
|
||||||
"version": "1.0.0",
|
|
||||||
"description": "A native application built with NativeScript-Vue",
|
|
||||||
"author": "Vishnu Raghav B <design@vishnuraghav.com>",
|
|
||||||
"license": "GPL",
|
|
||||||
"scripts": {
|
|
||||||
"run": "ns run android"
|
|
||||||
},
|
|
||||||
"dependencies": {
|
|
||||||
"@nativescript/theme": "^2.2.1",
|
|
||||||
"nativescript-camera": "^4.5.0",
|
|
||||||
"nativescript-couchbase-plugin": "^0.9.6",
|
|
||||||
"nativescript-datetimepicker": "^1.2.3",
|
|
||||||
"nativescript-mediafilepicker": "^4.0.0",
|
|
||||||
"nativescript-permissions": "^1.3.9",
|
|
||||||
"nativescript-toast": "^2.0.0",
|
|
||||||
"nativescript-ui-listview": "^8.2.0",
|
|
||||||
"nativescript-ui-sidedrawer": "^8.0.1",
|
|
||||||
"nativescript-vue": "^2.6.1",
|
|
||||||
"vuex": "^3.3.0",
|
|
||||||
"@nativescript/core": "7.0.0",
|
|
||||||
"@nativescript/webpack": "3.0.0"
|
|
||||||
},
|
|
||||||
"devDependencies": {
|
|
||||||
"@babel/core": "^7.0.0",
|
|
||||||
"@babel/preset-env": "^7.0.0",
|
|
||||||
"@nativescript/android": "7.0.1",
|
|
||||||
"@types/node": "^14.0.27",
|
|
||||||
"babel-loader": "^8.1.0",
|
|
||||||
"nativescript-vue-template-compiler": "^2.6.0",
|
|
||||||
"node-sass": "^4.13.1",
|
|
||||||
"vue-loader": "^15.9.1"
|
|
||||||
},
|
|
||||||
"main": "main"
|
|
||||||
}
|
|
|
@ -1,369 +0,0 @@
|
||||||
const { join, relative, resolve, sep } = require("path");
|
|
||||||
|
|
||||||
const webpack = require("webpack");
|
|
||||||
const { CleanWebpackPlugin } = require("clean-webpack-plugin");
|
|
||||||
const CopyWebpackPlugin = require("copy-webpack-plugin");
|
|
||||||
const { BundleAnalyzerPlugin } = require("webpack-bundle-analyzer");
|
|
||||||
const TerserPlugin = require("terser-webpack-plugin");
|
|
||||||
|
|
||||||
const VueLoaderPlugin = require('vue-loader/lib/plugin');
|
|
||||||
const NsVueTemplateCompiler = require("nativescript-vue-template-compiler");
|
|
||||||
|
|
||||||
const nsWebpack = require("@nativescript/webpack");
|
|
||||||
const nativescriptTarget = require("@nativescript/webpack/nativescript-target");
|
|
||||||
const { NativeScriptWorkerPlugin } = require("nativescript-worker-loader/NativeScriptWorkerPlugin");
|
|
||||||
const hashSalt = Date.now().toString();
|
|
||||||
|
|
||||||
module.exports = env => {
|
|
||||||
// Add your custom Activities, Services and other android app components here.
|
|
||||||
const appComponents = env.appComponents || [];
|
|
||||||
appComponents.push(...[
|
|
||||||
"@nativescript/core/ui/frame",
|
|
||||||
"@nativescript/core/ui/frame/activity",
|
|
||||||
]);
|
|
||||||
|
|
||||||
const platform = env && (env.android && "android" || env.ios && "ios" || env.platform);
|
|
||||||
if (!platform) {
|
|
||||||
throw new Error("You need to provide a target platform!");
|
|
||||||
}
|
|
||||||
|
|
||||||
const platforms = ["ios", "android"];
|
|
||||||
const projectRoot = __dirname;
|
|
||||||
|
|
||||||
if (env.platform) {
|
|
||||||
platforms.push(env.platform);
|
|
||||||
}
|
|
||||||
|
|
||||||
// Default destination inside platforms/<platform>/...
|
|
||||||
const dist = resolve(projectRoot, nsWebpack.getAppPath(platform, projectRoot));
|
|
||||||
|
|
||||||
const {
|
|
||||||
// The 'appPath' and 'appResourcesPath' values are fetched from
|
|
||||||
// the nsconfig.json configuration file.
|
|
||||||
appPath = "app",
|
|
||||||
appResourcesPath = "app/App_Resources",
|
|
||||||
|
|
||||||
// You can provide the following flags when running 'tns run android|ios'
|
|
||||||
snapshot, // --env.snapshot
|
|
||||||
production, // --env.production
|
|
||||||
report, // --env.report
|
|
||||||
hmr, // --env.hmr
|
|
||||||
sourceMap, // --env.sourceMap
|
|
||||||
hiddenSourceMap, // --env.hiddenSourceMap
|
|
||||||
unitTesting, // --env.unitTesting
|
|
||||||
testing, // --env.testing
|
|
||||||
verbose, // --env.verbose
|
|
||||||
snapshotInDocker, // --env.snapshotInDocker
|
|
||||||
skipSnapshotTools, // --env.skipSnapshotTools
|
|
||||||
compileSnapshot // --env.compileSnapshot
|
|
||||||
} = env;
|
|
||||||
|
|
||||||
const useLibs = compileSnapshot;
|
|
||||||
const isAnySourceMapEnabled = !!sourceMap || !!hiddenSourceMap;
|
|
||||||
const externals = nsWebpack.getConvertedExternals(env.externals);
|
|
||||||
|
|
||||||
const mode = production ? "production" : "development"
|
|
||||||
|
|
||||||
const appFullPath = resolve(projectRoot, appPath);
|
|
||||||
const hasRootLevelScopedModules = nsWebpack.hasRootLevelScopedModules({ projectDir: projectRoot });
|
|
||||||
let coreModulesPackageName = "tns-core-modules";
|
|
||||||
const alias = env.alias || {};
|
|
||||||
alias['~/package.json'] = resolve(projectRoot, 'package.json');
|
|
||||||
alias['~'] = appFullPath;
|
|
||||||
alias['@'] = appFullPath;
|
|
||||||
alias['vue'] = 'nativescript-vue';
|
|
||||||
|
|
||||||
if (hasRootLevelScopedModules) {
|
|
||||||
coreModulesPackageName = "@nativescript/core";
|
|
||||||
alias["tns-core-modules"] = coreModulesPackageName;
|
|
||||||
}
|
|
||||||
|
|
||||||
const appResourcesFullPath = resolve(projectRoot, appResourcesPath);
|
|
||||||
|
|
||||||
const copyIgnore = { ignore: [`${relative(appPath, appResourcesFullPath)}/**`] };
|
|
||||||
|
|
||||||
const entryModule = nsWebpack.getEntryModule(appFullPath, platform);
|
|
||||||
const entryPath = `.${sep}${entryModule}`;
|
|
||||||
const entries = env.entries || {};
|
|
||||||
entries.bundle = entryPath;
|
|
||||||
|
|
||||||
const areCoreModulesExternal = Array.isArray(env.externals) && env.externals.some(e => e.indexOf("@nativescript") > -1);
|
|
||||||
if (platform === "ios" && !areCoreModulesExternal && !testing) {
|
|
||||||
entries["tns_modules/@nativescript/core/inspector_modules"] = "inspector_modules";
|
|
||||||
};
|
|
||||||
console.log(`Bundling application for entryPath ${entryPath}...`);
|
|
||||||
|
|
||||||
let sourceMapFilename = nsWebpack.getSourceMapFilename(hiddenSourceMap, __dirname, dist);
|
|
||||||
|
|
||||||
const itemsToClean = [`${dist}/**/*`];
|
|
||||||
if (platform === "android") {
|
|
||||||
itemsToClean.push(`${join(projectRoot, "platforms", "android", "app", "src", "main", "assets", "snapshots")}`);
|
|
||||||
itemsToClean.push(`${join(projectRoot, "platforms", "android", "app", "build", "configurations", "nativescript-android-snapshot")}`);
|
|
||||||
}
|
|
||||||
|
|
||||||
nsWebpack.processAppComponents(appComponents, platform);
|
|
||||||
const config = {
|
|
||||||
mode: mode,
|
|
||||||
context: appFullPath,
|
|
||||||
externals,
|
|
||||||
watchOptions: {
|
|
||||||
ignored: [
|
|
||||||
appResourcesFullPath,
|
|
||||||
// Don't watch hidden files
|
|
||||||
"**/.*",
|
|
||||||
],
|
|
||||||
},
|
|
||||||
target: nativescriptTarget,
|
|
||||||
// target: nativeScriptVueTarget,
|
|
||||||
entry: entries,
|
|
||||||
output: {
|
|
||||||
pathinfo: false,
|
|
||||||
path: dist,
|
|
||||||
sourceMapFilename,
|
|
||||||
libraryTarget: "commonjs2",
|
|
||||||
filename: "[name].js",
|
|
||||||
globalObject: "global",
|
|
||||||
hashSalt
|
|
||||||
},
|
|
||||||
resolve: {
|
|
||||||
extensions: [".vue", ".ts", ".js", ".scss", ".css"],
|
|
||||||
// Resolve {N} system modules from @nativescript/core
|
|
||||||
modules: [
|
|
||||||
resolve(__dirname, `node_modules/${coreModulesPackageName}`),
|
|
||||||
resolve(__dirname, "node_modules"),
|
|
||||||
`node_modules/${coreModulesPackageName}`,
|
|
||||||
"node_modules",
|
|
||||||
],
|
|
||||||
alias,
|
|
||||||
// resolve symlinks to symlinked modules
|
|
||||||
symlinks: true,
|
|
||||||
},
|
|
||||||
resolveLoader: {
|
|
||||||
// don't resolve symlinks to symlinked loaders
|
|
||||||
symlinks: false,
|
|
||||||
},
|
|
||||||
node: {
|
|
||||||
// Disable node shims that conflict with NativeScript
|
|
||||||
"http": false,
|
|
||||||
"timers": false,
|
|
||||||
"setImmediate": false,
|
|
||||||
"fs": "empty",
|
|
||||||
"__dirname": false,
|
|
||||||
},
|
|
||||||
devtool: hiddenSourceMap ? "hidden-source-map" : (sourceMap ? "inline-source-map" : "none"),
|
|
||||||
optimization: {
|
|
||||||
runtimeChunk: "single",
|
|
||||||
noEmitOnErrors: true,
|
|
||||||
splitChunks: {
|
|
||||||
cacheGroups: {
|
|
||||||
vendor: {
|
|
||||||
name: "vendor",
|
|
||||||
chunks: "all",
|
|
||||||
test: (module) => {
|
|
||||||
const moduleName = module.nameForCondition ? module.nameForCondition() : '';
|
|
||||||
return /[\\/]node_modules[\\/]/.test(moduleName) ||
|
|
||||||
appComponents.some(comp => comp === moduleName);
|
|
||||||
|
|
||||||
},
|
|
||||||
enforce: true,
|
|
||||||
},
|
|
||||||
},
|
|
||||||
},
|
|
||||||
minimize: Boolean(production),
|
|
||||||
minimizer: [
|
|
||||||
new TerserPlugin({
|
|
||||||
parallel: true,
|
|
||||||
cache: true,
|
|
||||||
sourceMap: isAnySourceMapEnabled,
|
|
||||||
terserOptions: {
|
|
||||||
output: {
|
|
||||||
comments: false,
|
|
||||||
semicolons: !isAnySourceMapEnabled
|
|
||||||
},
|
|
||||||
compress: {
|
|
||||||
// The Android SBG has problems parsing the output
|
|
||||||
// when these options are enabled
|
|
||||||
'collapse_vars': platform !== "android",
|
|
||||||
sequences: platform !== "android",
|
|
||||||
},
|
|
||||||
keep_fnames: true,
|
|
||||||
},
|
|
||||||
}),
|
|
||||||
],
|
|
||||||
},
|
|
||||||
module: {
|
|
||||||
rules: [{
|
|
||||||
include: [join(appFullPath, entryPath + ".js"), join(appFullPath, entryPath + ".ts")],
|
|
||||||
use: [
|
|
||||||
// Require all Android app components
|
|
||||||
platform === "android" && {
|
|
||||||
loader: "@nativescript/webpack/helpers/android-app-components-loader",
|
|
||||||
options: { modules: appComponents },
|
|
||||||
},
|
|
||||||
|
|
||||||
{
|
|
||||||
loader: "@nativescript/webpack/bundle-config-loader",
|
|
||||||
options: {
|
|
||||||
registerPages: true, // applicable only for non-angular apps
|
|
||||||
loadCss: !snapshot, // load the application css if in debug mode
|
|
||||||
unitTesting,
|
|
||||||
appFullPath,
|
|
||||||
projectRoot,
|
|
||||||
ignoredFiles: nsWebpack.getUserDefinedEntries(entries, platform)
|
|
||||||
},
|
|
||||||
},
|
|
||||||
].filter(loader => Boolean(loader)),
|
|
||||||
},
|
|
||||||
{
|
|
||||||
test: /[\/|\\]app\.css$/,
|
|
||||||
use: [
|
|
||||||
'@nativescript/webpack/helpers/style-hot-loader',
|
|
||||||
{
|
|
||||||
loader: "@nativescript/webpack/helpers/css2json-loader",
|
|
||||||
options: { useForImports: true }
|
|
||||||
},
|
|
||||||
],
|
|
||||||
},
|
|
||||||
{
|
|
||||||
test: /[\/|\\]app\.scss$/,
|
|
||||||
use: [
|
|
||||||
'@nativescript/webpack/helpers/style-hot-loader',
|
|
||||||
{
|
|
||||||
loader: "@nativescript/webpack/helpers/css2json-loader",
|
|
||||||
options: { useForImports: true }
|
|
||||||
},
|
|
||||||
'sass-loader',
|
|
||||||
],
|
|
||||||
},
|
|
||||||
{
|
|
||||||
test: /\.css$/,
|
|
||||||
exclude: /[\/|\\]app\.css$/,
|
|
||||||
use: [
|
|
||||||
'@nativescript/webpack/helpers/style-hot-loader',
|
|
||||||
'@nativescript/webpack/helpers/apply-css-loader.js',
|
|
||||||
{ loader: "css-loader", options: { url: false } },
|
|
||||||
],
|
|
||||||
},
|
|
||||||
{
|
|
||||||
test: /\.scss$/,
|
|
||||||
exclude: /[\/|\\]app\.scss$/,
|
|
||||||
use: [
|
|
||||||
'@nativescript/webpack/helpers/style-hot-loader',
|
|
||||||
'@nativescript/webpack/helpers/apply-css-loader.js',
|
|
||||||
{ loader: "css-loader", options: { url: false } },
|
|
||||||
'sass-loader',
|
|
||||||
],
|
|
||||||
},
|
|
||||||
{
|
|
||||||
test: /\.js$/,
|
|
||||||
loader: 'babel-loader',
|
|
||||||
},
|
|
||||||
{
|
|
||||||
test: /\.ts$/,
|
|
||||||
loader: 'ts-loader',
|
|
||||||
options: {
|
|
||||||
appendTsSuffixTo: [/\.vue$/],
|
|
||||||
allowTsInNodeModules: true,
|
|
||||||
compilerOptions: {
|
|
||||||
declaration: false
|
|
||||||
},
|
|
||||||
getCustomTransformers: (program) => ({
|
|
||||||
before: [
|
|
||||||
require("@nativescript/webpack/transformers/ns-transform-native-classes").default
|
|
||||||
]
|
|
||||||
})
|
|
||||||
},
|
|
||||||
},
|
|
||||||
{
|
|
||||||
test: /\.vue$/,
|
|
||||||
loader: "vue-loader",
|
|
||||||
options: {
|
|
||||||
compiler: NsVueTemplateCompiler,
|
|
||||||
},
|
|
||||||
},
|
|
||||||
],
|
|
||||||
},
|
|
||||||
plugins: [
|
|
||||||
// ... Vue Loader plugin omitted
|
|
||||||
// make sure to include the plugin!
|
|
||||||
new VueLoaderPlugin(),
|
|
||||||
// Define useful constants like TNS_WEBPACK
|
|
||||||
new webpack.DefinePlugin({
|
|
||||||
"global.TNS_WEBPACK": "true",
|
|
||||||
"global.isAndroid": platform === 'android',
|
|
||||||
"global.isIOS": platform === 'ios',
|
|
||||||
"TNS_ENV": JSON.stringify(mode),
|
|
||||||
"process": "global.process"
|
|
||||||
}),
|
|
||||||
// Remove all files from the out dir.
|
|
||||||
new CleanWebpackPlugin({
|
|
||||||
cleanOnceBeforeBuildPatterns: itemsToClean,
|
|
||||||
verbose: !!verbose
|
|
||||||
}),
|
|
||||||
// Copy assets
|
|
||||||
new CopyWebpackPlugin({
|
|
||||||
patterns: [
|
|
||||||
{ from: 'assets/**', noErrorOnMissing: true, globOptions: { dot: false, ...copyIgnore } },
|
|
||||||
{ from: 'fonts/**', noErrorOnMissing: true, globOptions: { dot: false, ...copyIgnore } },
|
|
||||||
{ from: '**/*.+(jpg|png)', noErrorOnMissing: true, globOptions: { dot: false, ...copyIgnore } }
|
|
||||||
],
|
|
||||||
}),
|
|
||||||
new nsWebpack.GenerateNativeScriptEntryPointsPlugin("bundle"),
|
|
||||||
// For instructions on how to set up workers with webpack
|
|
||||||
// check out https://github.com/nativescript/worker-loader
|
|
||||||
new NativeScriptWorkerPlugin(),
|
|
||||||
new nsWebpack.PlatformFSPlugin({
|
|
||||||
platform,
|
|
||||||
platforms,
|
|
||||||
}),
|
|
||||||
// Does IPC communication with the {N} CLI to notify events when running in watch mode.
|
|
||||||
new nsWebpack.WatchStateLoggerPlugin()
|
|
||||||
],
|
|
||||||
};
|
|
||||||
|
|
||||||
if (unitTesting) {
|
|
||||||
config.module.rules.push(
|
|
||||||
{
|
|
||||||
test: /-page\.js$/,
|
|
||||||
use: "@nativescript/webpack/helpers/script-hot-loader"
|
|
||||||
},
|
|
||||||
{
|
|
||||||
test: /\.(html|xml)$/,
|
|
||||||
use: "@nativescript/webpack/helpers/markup-hot-loader"
|
|
||||||
},
|
|
||||||
|
|
||||||
{ test: /\.(html|xml)$/, use: "@nativescript/webpack/helpers/xml-namespace-loader" }
|
|
||||||
);
|
|
||||||
}
|
|
||||||
|
|
||||||
if (report) {
|
|
||||||
// Generate report files for bundles content
|
|
||||||
config.plugins.push(new BundleAnalyzerPlugin({
|
|
||||||
analyzerMode: "static",
|
|
||||||
openAnalyzer: false,
|
|
||||||
generateStatsFile: true,
|
|
||||||
reportFilename: resolve(projectRoot, "report", `report.html`),
|
|
||||||
statsFilename: resolve(projectRoot, "report", `stats.json`),
|
|
||||||
}));
|
|
||||||
}
|
|
||||||
|
|
||||||
if (snapshot) {
|
|
||||||
config.plugins.push(new nsWebpack.NativeScriptSnapshotPlugin({
|
|
||||||
chunk: "vendor",
|
|
||||||
requireModules: [
|
|
||||||
"@nativescript/core/bundle-entry-points",
|
|
||||||
],
|
|
||||||
projectRoot,
|
|
||||||
webpackConfig: config,
|
|
||||||
snapshotInDocker,
|
|
||||||
skipSnapshotTools,
|
|
||||||
useLibs
|
|
||||||
}));
|
|
||||||
}
|
|
||||||
|
|
||||||
if (hmr) {
|
|
||||||
config.plugins.push(new webpack.HotModuleReplacementPlugin());
|
|
||||||
}
|
|
||||||
|
|
||||||
return config;
|
|
||||||
};
|
|
|
@ -5,7 +5,7 @@
|
||||||
<solid android:color="#ff7043" />
|
<solid android:color="#ff7043" />
|
||||||
</shape>
|
</shape>
|
||||||
</item>
|
</item>
|
||||||
<item android:left="64dp" android:right="64dp">
|
<item>
|
||||||
<bitmap android:gravity="center" android:src="@drawable/logo" />
|
<bitmap android:gravity="center" android:src="@drawable/logo" />
|
||||||
</item>
|
</item>
|
||||||
</layer-list>
|
</layer-list>
|
||||||
|
|
|
@ -20,12 +20,12 @@
|
||||||
|
|
||||||
<!-- theme to use AFTER launch screen is loaded-->
|
<!-- theme to use AFTER launch screen is loaded-->
|
||||||
<style name="AppThemeBase" parent="Theme.AppCompat.Light.NoActionBar">
|
<style name="AppThemeBase" parent="Theme.AppCompat.Light.NoActionBar">
|
||||||
|
<item name="android:forceDarkAllowed">true</item>
|
||||||
<item name="toolbarStyle">@style/NativeScriptToolbarStyle</item>
|
<item name="toolbarStyle">@style/NativeScriptToolbarStyle</item>
|
||||||
|
|
||||||
<item name="colorPrimary">@color/ns_primary</item>
|
<item name="colorPrimary">@color/ns_primary</item>
|
||||||
<item name="colorPrimaryDark">@color/ns_primaryDark</item>
|
<item name="colorPrimaryDark">@color/ns_primaryDark</item>
|
||||||
<item name="colorAccent">@color/ns_accent</item>
|
<item name="colorAccent">@color/ns_accent</item>
|
||||||
<item name="android:forceDarkAllowed">true</item>
|
|
||||||
</style>
|
</style>
|
||||||
|
|
||||||
<style name="AppTheme" parent="AppThemeBase">
|
<style name="AppTheme" parent="AppThemeBase">
|
||||||
|
|
|
@ -1,122 +0,0 @@
|
||||||
{
|
|
||||||
"images" : [
|
|
||||||
{
|
|
||||||
"size" : "20x20",
|
|
||||||
"idiom" : "iphone",
|
|
||||||
"filename" : "icon-20@2x.png",
|
|
||||||
"scale" : "2x"
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"size" : "20x20",
|
|
||||||
"idiom" : "iphone",
|
|
||||||
"filename" : "icon-20@3x.png",
|
|
||||||
"scale" : "3x"
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"size" : "29x29",
|
|
||||||
"idiom" : "iphone",
|
|
||||||
"filename" : "icon-29.png",
|
|
||||||
"scale" : "1x"
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"size" : "29x29",
|
|
||||||
"idiom" : "iphone",
|
|
||||||
"filename" : "icon-29@2x.png",
|
|
||||||
"scale" : "2x"
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"size" : "29x29",
|
|
||||||
"idiom" : "iphone",
|
|
||||||
"filename" : "icon-29@3x.png",
|
|
||||||
"scale" : "3x"
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"size" : "40x40",
|
|
||||||
"idiom" : "iphone",
|
|
||||||
"filename" : "icon-40@2x.png",
|
|
||||||
"scale" : "2x"
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"size" : "40x40",
|
|
||||||
"idiom" : "iphone",
|
|
||||||
"filename" : "icon-40@3x.png",
|
|
||||||
"scale" : "3x"
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"size" : "60x60",
|
|
||||||
"idiom" : "iphone",
|
|
||||||
"filename" : "icon-60@2x.png",
|
|
||||||
"scale" : "2x"
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"size" : "60x60",
|
|
||||||
"idiom" : "iphone",
|
|
||||||
"filename" : "icon-60@3x.png",
|
|
||||||
"scale" : "3x"
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"size" : "20x20",
|
|
||||||
"idiom" : "ipad",
|
|
||||||
"filename" : "icon-20.png",
|
|
||||||
"scale" : "1x"
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"size" : "20x20",
|
|
||||||
"idiom" : "ipad",
|
|
||||||
"filename" : "icon-20@2x.png",
|
|
||||||
"scale" : "2x"
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"size" : "29x29",
|
|
||||||
"idiom" : "ipad",
|
|
||||||
"filename" : "icon-29.png",
|
|
||||||
"scale" : "1x"
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"size" : "29x29",
|
|
||||||
"idiom" : "ipad",
|
|
||||||
"filename" : "icon-29@2x.png",
|
|
||||||
"scale" : "2x"
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"size" : "40x40",
|
|
||||||
"idiom" : "ipad",
|
|
||||||
"filename" : "icon-40.png",
|
|
||||||
"scale" : "1x"
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"size" : "40x40",
|
|
||||||
"idiom" : "ipad",
|
|
||||||
"filename" : "icon-40@2x.png",
|
|
||||||
"scale" : "2x"
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"size" : "76x76",
|
|
||||||
"idiom" : "ipad",
|
|
||||||
"filename" : "icon-76.png",
|
|
||||||
"scale" : "1x"
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"size" : "76x76",
|
|
||||||
"idiom" : "ipad",
|
|
||||||
"filename" : "icon-76@2x.png",
|
|
||||||
"scale" : "2x"
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"size" : "83.5x83.5",
|
|
||||||
"idiom" : "ipad",
|
|
||||||
"filename" : "icon-83.5@2x.png",
|
|
||||||
"scale" : "2x"
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"size" : "1024x1024",
|
|
||||||
"idiom" : "ios-marketing",
|
|
||||||
"filename" : "icon-1024.png",
|
|
||||||
"scale" : "1x"
|
|
||||||
}
|
|
||||||
],
|
|
||||||
"info" : {
|
|
||||||
"version" : 1,
|
|
||||||
"author" : "xcode"
|
|
||||||
}
|
|
||||||
}
|
|
Before Width: | Height: | Size: 57 KiB |
Before Width: | Height: | Size: 1.1 KiB |
Before Width: | Height: | Size: 2.7 KiB |
Before Width: | Height: | Size: 4.5 KiB |
Before Width: | Height: | Size: 1.6 KiB |
Before Width: | Height: | Size: 3.1 KiB |
Before Width: | Height: | Size: 4.4 KiB |
Before Width: | Height: | Size: 2.3 KiB |
Before Width: | Height: | Size: 4.5 KiB |
Before Width: | Height: | Size: 6.4 KiB |
Before Width: | Height: | Size: 6.4 KiB |
Before Width: | Height: | Size: 9.1 KiB |
Before Width: | Height: | Size: 4.2 KiB |
Before Width: | Height: | Size: 8.7 KiB |
Before Width: | Height: | Size: 9.7 KiB |
|
@ -1,6 +0,0 @@
|
||||||
{
|
|
||||||
"info" : {
|
|
||||||
"version" : 1,
|
|
||||||
"author" : "xcode"
|
|
||||||
}
|
|
||||||
}
|
|
|
@ -1,212 +0,0 @@
|
||||||
{
|
|
||||||
"images" : [
|
|
||||||
{
|
|
||||||
"extent" : "full-screen",
|
|
||||||
"idiom" : "iphone",
|
|
||||||
"subtype" : "2688h",
|
|
||||||
"filename" : "Default-Portrait-XS-Max.png",
|
|
||||||
"minimum-system-version" : "12.0",
|
|
||||||
"orientation" : "portrait",
|
|
||||||
"scale" : "3x"
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"extent" : "full-screen",
|
|
||||||
"idiom" : "iphone",
|
|
||||||
"subtype" : "2688h",
|
|
||||||
"filename" : "Default-Landscape-XS-Max.png",
|
|
||||||
"minimum-system-version" : "12.0",
|
|
||||||
"orientation" : "landscape",
|
|
||||||
"scale" : "3x"
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"extent" : "full-screen",
|
|
||||||
"idiom" : "iphone",
|
|
||||||
"subtype" : "1792h",
|
|
||||||
"filename" : "Default-Portrait-XR.png",
|
|
||||||
"minimum-system-version" : "12.0",
|
|
||||||
"orientation" : "portrait",
|
|
||||||
"scale" : "2x"
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"extent" : "full-screen",
|
|
||||||
"idiom" : "iphone",
|
|
||||||
"subtype" : "1792h",
|
|
||||||
"filename" : "Default-Landscape-XR.png",
|
|
||||||
"minimum-system-version" : "12.0",
|
|
||||||
"orientation" : "landscape",
|
|
||||||
"scale" : "2x"
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"extent" : "full-screen",
|
|
||||||
"idiom" : "iphone",
|
|
||||||
"subtype" : "2436h",
|
|
||||||
"filename" : "Default-1125h.png",
|
|
||||||
"minimum-system-version" : "11.0",
|
|
||||||
"orientation" : "portrait",
|
|
||||||
"scale" : "3x"
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"extent" : "full-screen",
|
|
||||||
"idiom" : "iphone",
|
|
||||||
"subtype" : "2436h",
|
|
||||||
"filename" : "Default-Landscape-X.png",
|
|
||||||
"minimum-system-version" : "11.0",
|
|
||||||
"orientation" : "landscape",
|
|
||||||
"scale" : "3x"
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"extent" : "full-screen",
|
|
||||||
"idiom" : "iphone",
|
|
||||||
"subtype" : "736h",
|
|
||||||
"filename" : "Default-736h@3x.png",
|
|
||||||
"minimum-system-version" : "8.0",
|
|
||||||
"orientation" : "portrait",
|
|
||||||
"scale" : "3x"
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"extent" : "full-screen",
|
|
||||||
"idiom" : "iphone",
|
|
||||||
"subtype" : "736h",
|
|
||||||
"filename" : "Default-Landscape@3x.png",
|
|
||||||
"minimum-system-version" : "8.0",
|
|
||||||
"orientation" : "landscape",
|
|
||||||
"scale" : "3x"
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"extent" : "full-screen",
|
|
||||||
"idiom" : "iphone",
|
|
||||||
"subtype" : "667h",
|
|
||||||
"filename" : "Default-667h@2x.png",
|
|
||||||
"minimum-system-version" : "8.0",
|
|
||||||
"orientation" : "portrait",
|
|
||||||
"scale" : "2x"
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"orientation" : "portrait",
|
|
||||||
"idiom" : "iphone",
|
|
||||||
"filename" : "Default@2x.png",
|
|
||||||
"extent" : "full-screen",
|
|
||||||
"minimum-system-version" : "7.0",
|
|
||||||
"scale" : "2x"
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"extent" : "full-screen",
|
|
||||||
"idiom" : "iphone",
|
|
||||||
"subtype" : "retina4",
|
|
||||||
"filename" : "Default-568h@2x.png",
|
|
||||||
"minimum-system-version" : "7.0",
|
|
||||||
"orientation" : "portrait",
|
|
||||||
"scale" : "2x"
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"orientation" : "portrait",
|
|
||||||
"idiom" : "ipad",
|
|
||||||
"filename" : "Default-Portrait.png",
|
|
||||||
"extent" : "full-screen",
|
|
||||||
"minimum-system-version" : "7.0",
|
|
||||||
"scale" : "1x"
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"orientation" : "landscape",
|
|
||||||
"idiom" : "ipad",
|
|
||||||
"filename" : "Default-Landscape.png",
|
|
||||||
"extent" : "full-screen",
|
|
||||||
"minimum-system-version" : "7.0",
|
|
||||||
"scale" : "1x"
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"orientation" : "portrait",
|
|
||||||
"idiom" : "ipad",
|
|
||||||
"filename" : "Default-Portrait@2x.png",
|
|
||||||
"extent" : "full-screen",
|
|
||||||
"minimum-system-version" : "7.0",
|
|
||||||
"scale" : "2x"
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"orientation" : "landscape",
|
|
||||||
"idiom" : "ipad",
|
|
||||||
"filename" : "Default-Landscape@2x.png",
|
|
||||||
"extent" : "full-screen",
|
|
||||||
"minimum-system-version" : "7.0",
|
|
||||||
"scale" : "2x"
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"orientation" : "portrait",
|
|
||||||
"idiom" : "iphone",
|
|
||||||
"filename" : "Default.png",
|
|
||||||
"extent" : "full-screen",
|
|
||||||
"scale" : "1x"
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"orientation" : "portrait",
|
|
||||||
"idiom" : "iphone",
|
|
||||||
"filename" : "Default@2x.png",
|
|
||||||
"extent" : "full-screen",
|
|
||||||
"scale" : "2x"
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"orientation" : "portrait",
|
|
||||||
"idiom" : "iphone",
|
|
||||||
"filename" : "Default-568h@2x.png",
|
|
||||||
"extent" : "full-screen",
|
|
||||||
"subtype" : "retina4",
|
|
||||||
"scale" : "2x"
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"orientation" : "portrait",
|
|
||||||
"idiom" : "ipad",
|
|
||||||
"extent" : "to-status-bar",
|
|
||||||
"scale" : "1x"
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"orientation" : "portrait",
|
|
||||||
"idiom" : "ipad",
|
|
||||||
"filename" : "Default-Portrait.png",
|
|
||||||
"extent" : "full-screen",
|
|
||||||
"scale" : "1x"
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"orientation" : "landscape",
|
|
||||||
"idiom" : "ipad",
|
|
||||||
"extent" : "to-status-bar",
|
|
||||||
"scale" : "1x"
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"orientation" : "landscape",
|
|
||||||
"idiom" : "ipad",
|
|
||||||
"filename" : "Default-Landscape.png",
|
|
||||||
"extent" : "full-screen",
|
|
||||||
"scale" : "1x"
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"orientation" : "portrait",
|
|
||||||
"idiom" : "ipad",
|
|
||||||
"extent" : "to-status-bar",
|
|
||||||
"scale" : "2x"
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"orientation" : "portrait",
|
|
||||||
"idiom" : "ipad",
|
|
||||||
"filename" : "Default-Portrait@2x.png",
|
|
||||||
"extent" : "full-screen",
|
|
||||||
"scale" : "2x"
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"orientation" : "landscape",
|
|
||||||
"idiom" : "ipad",
|
|
||||||
"extent" : "to-status-bar",
|
|
||||||
"scale" : "2x"
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"orientation" : "landscape",
|
|
||||||
"idiom" : "ipad",
|
|
||||||
"filename" : "Default-Landscape@2x.png",
|
|
||||||
"extent" : "full-screen",
|
|
||||||
"scale" : "2x"
|
|
||||||
}
|
|
||||||
],
|
|
||||||
"info" : {
|
|
||||||
"version" : 1,
|
|
||||||
"author" : "xcode"
|
|
||||||
}
|
|
||||||
}
|
|
Before Width: | Height: | Size: 110 KiB |
Before Width: | Height: | Size: 32 KiB |
Before Width: | Height: | Size: 51 KiB |
Before Width: | Height: | Size: 99 KiB |
Before Width: | Height: | Size: 111 KiB |
Before Width: | Height: | Size: 49 KiB |
Before Width: | Height: | Size: 100 KiB |
Before Width: | Height: | Size: 28 KiB |
Before Width: | Height: | Size: 105 KiB |
Before Width: | Height: | Size: 97 KiB |
Before Width: | Height: | Size: 51 KiB |
Before Width: | Height: | Size: 101 KiB |
Before Width: | Height: | Size: 31 KiB |
Before Width: | Height: | Size: 104 KiB |
Before Width: | Height: | Size: 10 KiB |
Before Width: | Height: | Size: 29 KiB |
|
@ -1,23 +0,0 @@
|
||||||
{
|
|
||||||
"images" : [
|
|
||||||
{
|
|
||||||
"idiom" : "universal",
|
|
||||||
"filename" : "LaunchScreen-AspectFill.png",
|
|
||||||
"scale" : "1x"
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"idiom" : "universal",
|
|
||||||
"filename" : "LaunchScreen-AspectFill@2x.png",
|
|
||||||
"scale" : "2x"
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"idiom" : "universal",
|
|
||||||
"filename" : "LaunchScreen-AspectFill@3x.png",
|
|
||||||
"scale" : "3x"
|
|
||||||
}
|
|
||||||
],
|
|
||||||
"info" : {
|
|
||||||
"version" : 1,
|
|
||||||
"author" : "xcode"
|
|
||||||
}
|
|
||||||
}
|
|
Before Width: | Height: | Size: 15 KiB |
Before Width: | Height: | Size: 58 KiB |
Before Width: | Height: | Size: 128 KiB |
|
@ -1,23 +0,0 @@
|
||||||
{
|
|
||||||
"images" : [
|
|
||||||
{
|
|
||||||
"idiom" : "universal",
|
|
||||||
"filename" : "LaunchScreen-Center.png",
|
|
||||||
"scale" : "1x"
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"idiom" : "universal",
|
|
||||||
"filename" : "LaunchScreen-Center@2x.png",
|
|
||||||
"scale" : "2x"
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"idiom" : "universal",
|
|
||||||
"filename" : "LaunchScreen-Center@3x.png",
|
|
||||||
"scale" : "3x"
|
|
||||||
}
|
|
||||||
],
|
|
||||||
"info" : {
|
|
||||||
"version" : 1,
|
|
||||||
"author" : "xcode"
|
|
||||||
}
|
|
||||||
}
|
|
Before Width: | Height: | Size: 15 KiB |
Before Width: | Height: | Size: 58 KiB |
Before Width: | Height: | Size: 108 KiB |
|
@ -1,51 +0,0 @@
|
||||||
<?xml version="1.0" encoding="UTF-8"?>
|
|
||||||
<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
|
|
||||||
<plist version="1.0">
|
|
||||||
<dict>
|
|
||||||
<key>CFBundleDevelopmentRegion</key>
|
|
||||||
<string>en</string>
|
|
||||||
<key>CFBundleDisplayName</key>
|
|
||||||
<string>${PRODUCT_NAME}</string>
|
|
||||||
<key>CFBundleExecutable</key>
|
|
||||||
<string>${EXECUTABLE_NAME}</string>
|
|
||||||
<key>CFBundleInfoDictionaryVersion</key>
|
|
||||||
<string>6.0</string>
|
|
||||||
<key>CFBundleName</key>
|
|
||||||
<string>${PRODUCT_NAME}</string>
|
|
||||||
<key>CFBundlePackageType</key>
|
|
||||||
<string>APPL</string>
|
|
||||||
<key>CFBundleShortVersionString</key>
|
|
||||||
<string>1.0</string>
|
|
||||||
<key>CFBundleSignature</key>
|
|
||||||
<string>????</string>
|
|
||||||
<key>CFBundleVersion</key>
|
|
||||||
<string>1.0</string>
|
|
||||||
<key>LSRequiresIPhoneOS</key>
|
|
||||||
<true/>
|
|
||||||
<key>UILaunchStoryboardName</key>
|
|
||||||
<string>LaunchScreen</string>
|
|
||||||
<key>UIRequiresFullScreen</key>
|
|
||||||
<true/>
|
|
||||||
<key>UIRequiredDeviceCapabilities</key>
|
|
||||||
<array>
|
|
||||||
<string>armv7</string>
|
|
||||||
</array>
|
|
||||||
<key>UISupportedInterfaceOrientations</key>
|
|
||||||
<array>
|
|
||||||
<string>UIInterfaceOrientationPortrait</string>
|
|
||||||
<string>UIInterfaceOrientationLandscapeLeft</string>
|
|
||||||
<string>UIInterfaceOrientationLandscapeRight</string>
|
|
||||||
</array>
|
|
||||||
<key>UISupportedInterfaceOrientations~ipad</key>
|
|
||||||
<array>
|
|
||||||
<string>UIInterfaceOrientationPortrait</string>
|
|
||||||
<string>UIInterfaceOrientationPortraitUpsideDown</string>
|
|
||||||
<string>UIInterfaceOrientationLandscapeLeft</string>
|
|
||||||
<string>UIInterfaceOrientationLandscapeRight</string>
|
|
||||||
</array>
|
|
||||||
<key>UIStatusBarStyle</key>
|
|
||||||
<string>UIStatusBarStyleLightContent</string>
|
|
||||||
<key>UIViewControllerBasedStatusBarAppearance</key>
|
|
||||||
<false/>
|
|
||||||
</dict>
|
|
||||||
</plist>
|
|
|
@ -1,53 +0,0 @@
|
||||||
<?xml version="1.0" encoding="UTF-8"?>
|
|
||||||
<document type="com.apple.InterfaceBuilder3.CocoaTouch.Storyboard.XIB" version="3.0" toolsVersion="13771" targetRuntime="iOS.CocoaTouch" propertyAccessControl="none" useAutolayout="YES" launchScreen="YES" useTraitCollections="YES" colorMatched="YES" initialViewController="01J-lp-oVM">
|
|
||||||
<device id="retina5_9" orientation="portrait">
|
|
||||||
<adaptation id="fullscreen"/>
|
|
||||||
</device>
|
|
||||||
<dependencies>
|
|
||||||
<deployment identifier="iOS"/>
|
|
||||||
<plugIn identifier="com.apple.InterfaceBuilder.IBCocoaTouchPlugin" version="13772"/>
|
|
||||||
<capability name="documents saved in the Xcode 8 format" minToolsVersion="8.0"/>
|
|
||||||
</dependencies>
|
|
||||||
<scenes>
|
|
||||||
<!--View Controller-->
|
|
||||||
<scene sceneID="EHf-IW-A2E">
|
|
||||||
<objects>
|
|
||||||
<viewController id="01J-lp-oVM" sceneMemberID="viewController">
|
|
||||||
<layoutGuides>
|
|
||||||
<viewControllerLayoutGuide type="top" id="Llm-lL-Icb"/>
|
|
||||||
<viewControllerLayoutGuide type="bottom" id="xb3-aO-Qok"/>
|
|
||||||
</layoutGuides>
|
|
||||||
<view key="view" contentMode="scaleToFill" id="Ze5-6b-2t3">
|
|
||||||
<rect key="frame" x="0.0" y="0.0" width="375" height="812"/>
|
|
||||||
<autoresizingMask key="autoresizingMask" widthSizable="YES" heightSizable="YES"/>
|
|
||||||
<subviews>
|
|
||||||
<imageView userInteractionEnabled="NO" contentMode="scaleAspectFill" horizontalHuggingPriority="251" verticalHuggingPriority="251" image="LaunchScreen.AspectFill" translatesAutoresizingMaskIntoConstraints="NO" id="wtH-rr-YfP">
|
|
||||||
<rect key="frame" x="0.0" y="0.0" width="375" height="812"/>
|
|
||||||
</imageView>
|
|
||||||
<imageView userInteractionEnabled="NO" contentMode="center" horizontalHuggingPriority="251" verticalHuggingPriority="251" image="LaunchScreen.Center" translatesAutoresizingMaskIntoConstraints="NO" id="s1z-aa-wYv">
|
|
||||||
<rect key="frame" x="0.0" y="150" width="375" height="512"/>
|
|
||||||
</imageView>
|
|
||||||
</subviews>
|
|
||||||
<color key="backgroundColor" red="1" green="1" blue="1" alpha="1" colorSpace="custom" customColorSpace="sRGB"/>
|
|
||||||
<constraints>
|
|
||||||
<constraint firstAttribute="trailing" secondItem="s1z-aa-wYv" secondAttribute="trailing" id="4Rf-kf-vql"/>
|
|
||||||
<constraint firstAttribute="bottom" secondItem="wtH-rr-YfP" secondAttribute="bottom" id="5CS-At-4ka"/>
|
|
||||||
<constraint firstItem="wtH-rr-YfP" firstAttribute="top" secondItem="Ze5-6b-2t3" secondAttribute="top" id="Awn-b8-xf1"/>
|
|
||||||
<constraint firstItem="s1z-aa-wYv" firstAttribute="leading" secondItem="Ze5-6b-2t3" secondAttribute="leading" id="BpJ-vb-eKA"/>
|
|
||||||
<constraint firstItem="s1z-aa-wYv" firstAttribute="trailing" secondItem="wtH-rr-YfP" secondAttribute="trailing" id="QIM-7J-OZz"/>
|
|
||||||
<constraint firstAttribute="trailing" secondItem="wtH-rr-YfP" secondAttribute="trailing" id="RXg-rW-UK8"/>
|
|
||||||
<constraint firstItem="s1z-aa-wYv" firstAttribute="centerY" secondItem="Ze5-6b-2t3" secondAttribute="centerY" id="Rcp-LG-48z"/>
|
|
||||||
<constraint firstItem="wtH-rr-YfP" firstAttribute="leading" secondItem="Ze5-6b-2t3" secondAttribute="leading" id="cch-8E-tYu"/>
|
|
||||||
</constraints>
|
|
||||||
</view>
|
|
||||||
</viewController>
|
|
||||||
<placeholder placeholderIdentifier="IBFirstResponder" id="iYj-Kq-Ea1" userLabel="First Responder" sceneMemberID="firstResponder"/>
|
|
||||||
</objects>
|
|
||||||
<point key="canvasLocation" x="509.60000000000002" y="237.93103448275863"/>
|
|
||||||
</scene>
|
|
||||||
</scenes>
|
|
||||||
<resources>
|
|
||||||
<image name="LaunchScreen.AspectFill" width="768" height="1024"/>
|
|
||||||
<image name="LaunchScreen.Center" width="384" height="512"/>
|
|
||||||
</resources>
|
|
||||||
</document>
|
|
|
@ -1,7 +0,0 @@
|
||||||
// You can add custom settings here
|
|
||||||
// for example you can uncomment the following line to force distribution code signing
|
|
||||||
// CODE_SIGN_IDENTITY = iPhone Distribution
|
|
||||||
// To build for device with Xcode 8 you need to specify your development team. More info: https://developer.apple.com/library/prerelease/content/releasenotes/DeveloperTools/RN-Xcode/Introduction.html
|
|
||||||
// DEVELOPMENT_TEAM = YOUR_TEAM_ID;
|
|
||||||
ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon;
|
|
||||||
ASSETCATALOG_COMPILER_LAUNCHIMAGE_NAME = LaunchImage;
|
|
112
app/app.scss
|
@ -39,22 +39,16 @@ Page {
|
||||||
ActionBar,
|
ActionBar,
|
||||||
SearchBar,
|
SearchBar,
|
||||||
TabView {
|
TabView {
|
||||||
background: $grayL4;
|
|
||||||
color: $grayD4;
|
color: $grayD4;
|
||||||
|
background: $grayL4;
|
||||||
}
|
}
|
||||||
TabView {
|
TabView {
|
||||||
tab-background-color: $grayL4;
|
tab-background-color: $grayL4;
|
||||||
tab-text-color: $gray;
|
|
||||||
selected-tab-text-color: $grayD4;
|
selected-tab-text-color: $grayD4;
|
||||||
}
|
}
|
||||||
.hr {
|
.hr {
|
||||||
border-color: $grayL2;
|
border-color: $grayL2;
|
||||||
}
|
}
|
||||||
TextField,
|
|
||||||
TextView,
|
|
||||||
TimePickerField {
|
|
||||||
border-color: $gray;
|
|
||||||
}
|
|
||||||
.sd,
|
.sd,
|
||||||
.fieldLabel {
|
.fieldLabel {
|
||||||
background: $grayL4;
|
background: $grayL4;
|
||||||
|
@ -62,18 +56,11 @@ Page {
|
||||||
.option-highlight {
|
.option-highlight {
|
||||||
background: $grayL2;
|
background: $grayL2;
|
||||||
}
|
}
|
||||||
.recipe-li {
|
|
||||||
background: white;
|
|
||||||
}
|
|
||||||
.sd-item,
|
.sd-item,
|
||||||
.sd-group-header,
|
.sd-group-header,
|
||||||
.recipe-time {
|
.recipe-time {
|
||||||
color: $grayD2;
|
color: $grayD2;
|
||||||
}
|
}
|
||||||
.selected-sd-item {
|
|
||||||
background: $paleOrange;
|
|
||||||
color: $orange;
|
|
||||||
}
|
|
||||||
.option,
|
.option,
|
||||||
.icon-option {
|
.icon-option {
|
||||||
.bx,
|
.bx,
|
||||||
|
@ -85,8 +72,8 @@ Page {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
.view-imageHolder {
|
.view-imageHolder {
|
||||||
background: $grayL2;
|
|
||||||
color: $grayL1;
|
color: $grayL1;
|
||||||
|
background: $grayL2;
|
||||||
}
|
}
|
||||||
.view-other {
|
.view-other {
|
||||||
color: $grayD2;
|
color: $grayD2;
|
||||||
|
@ -98,31 +85,23 @@ Page {
|
||||||
.view-instruction {
|
.view-instruction {
|
||||||
border-color: $grayD4;
|
border-color: $grayD4;
|
||||||
}
|
}
|
||||||
.instructionWOBorder {
|
|
||||||
border-color: transparent;
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
.ns-dark {
|
.ns-dark {
|
||||||
Page,
|
Page,
|
||||||
ActionBar,
|
ActionBar,
|
||||||
SearchBar,
|
SearchBar,
|
||||||
TabView {
|
TabView {
|
||||||
background: $grayD4;
|
|
||||||
color: $grayL4;
|
color: $grayL4;
|
||||||
|
background: $grayD4;
|
||||||
}
|
}
|
||||||
TabView {
|
TabView {
|
||||||
tab-background-color: $grayD4;
|
tab-background-color: $grayD4;
|
||||||
tab-text-color: $gray;
|
|
||||||
selected-tab-text-color: $grayL4;
|
selected-tab-text-color: $grayL4;
|
||||||
}
|
}
|
||||||
.hr {
|
.hr {
|
||||||
border-color: #111;
|
border-color: #111;
|
||||||
}
|
}
|
||||||
TextField,
|
|
||||||
TextView,
|
|
||||||
TimePickerField {
|
|
||||||
border-color: $gray;
|
|
||||||
}
|
|
||||||
.sd,
|
.sd,
|
||||||
.fieldLabel {
|
.fieldLabel {
|
||||||
background: $grayD4;
|
background: $grayD4;
|
||||||
|
@ -136,10 +115,7 @@ Page {
|
||||||
.recipe-time {
|
.recipe-time {
|
||||||
color: $grayL2;
|
color: $grayL2;
|
||||||
}
|
}
|
||||||
.selected-sd-item {
|
|
||||||
background: $paleOrange;
|
|
||||||
color: $orange;
|
|
||||||
}
|
|
||||||
.option,
|
.option,
|
||||||
.icon-option {
|
.icon-option {
|
||||||
.bx,
|
.bx,
|
||||||
|
@ -151,8 +127,8 @@ Page {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
.view-imageHolder {
|
.view-imageHolder {
|
||||||
background: black;
|
|
||||||
color: $grayD4;
|
color: $grayD4;
|
||||||
|
background: #111;
|
||||||
}
|
}
|
||||||
.view-other {
|
.view-other {
|
||||||
color: $grayL2;
|
color: $grayL2;
|
||||||
|
@ -164,9 +140,6 @@ Page {
|
||||||
.view-instruction {
|
.view-instruction {
|
||||||
border-color: $grayL4;
|
border-color: $grayL4;
|
||||||
}
|
}
|
||||||
.instructionWOBorder {
|
|
||||||
border-color: transparent;
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
// Elements
|
// Elements
|
||||||
|
@ -179,11 +152,15 @@ TimePickerField {
|
||||||
padding: 14;
|
padding: 14;
|
||||||
margin: 8 0 0 0;
|
margin: 8 0 0 0;
|
||||||
border-radius: 4;
|
border-radius: 4;
|
||||||
|
border-color: $gray;
|
||||||
placeholder-color: $gray;
|
placeholder-color: $gray;
|
||||||
}
|
}
|
||||||
TextView {
|
TextView {
|
||||||
line-height: 12;
|
line-height: 12;
|
||||||
}
|
}
|
||||||
|
TabView {
|
||||||
|
tab-text-color: $gray;
|
||||||
|
}
|
||||||
.inputField {
|
.inputField {
|
||||||
margin-top: 16;
|
margin-top: 16;
|
||||||
}
|
}
|
||||||
|
@ -192,7 +169,16 @@ TextView {
|
||||||
margin-left: 8;
|
margin-left: 8;
|
||||||
padding: 0 8;
|
padding: 0 8;
|
||||||
}
|
}
|
||||||
|
// DateTimePicker
|
||||||
|
.date-time-picker,
|
||||||
|
.date-time-picker-spinners {
|
||||||
|
color: $grayD4;
|
||||||
|
background: $grayL4;
|
||||||
|
&.ns-dark {
|
||||||
|
color: $grayL4;
|
||||||
|
background: $grayD4;
|
||||||
|
}
|
||||||
|
}
|
||||||
// ActionBar
|
// ActionBar
|
||||||
ActionBar {
|
ActionBar {
|
||||||
width: 100%;
|
width: 100%;
|
||||||
|
@ -233,6 +219,10 @@ SearchBar {
|
||||||
.bx, Label {
|
.bx, Label {
|
||||||
vertical-alignment: center;
|
vertical-alignment: center;
|
||||||
}
|
}
|
||||||
|
&.selected-sd-item {
|
||||||
|
background: $paleOrange;
|
||||||
|
color: $orange;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
.sd-group-header {
|
.sd-group-header {
|
||||||
width: 100%;
|
width: 100%;
|
||||||
|
@ -245,6 +235,7 @@ RadListView {
|
||||||
margin-bottom: 128;
|
margin-bottom: 128;
|
||||||
}
|
}
|
||||||
.recipe-li {
|
.recipe-li {
|
||||||
|
background: white;
|
||||||
margin: 8 16;
|
margin: 8 16;
|
||||||
border-radius: 6;
|
border-radius: 6;
|
||||||
.recipe-info {
|
.recipe-info {
|
||||||
|
@ -365,6 +356,9 @@ RadListView {
|
||||||
margin: 0 0 0 15;
|
margin: 0 0 0 15;
|
||||||
border-width: 0 0 0 2;
|
border-width: 0 0 0 2;
|
||||||
}
|
}
|
||||||
|
.view-instruction.instructionWOBorder {
|
||||||
|
border-color: transparent;
|
||||||
|
}
|
||||||
|
|
||||||
.view-note {
|
.view-note {
|
||||||
border-width: 0;
|
border-width: 0;
|
||||||
|
@ -372,9 +366,20 @@ RadListView {
|
||||||
.view-reference {
|
.view-reference {
|
||||||
border-width: 0;
|
border-width: 0;
|
||||||
}
|
}
|
||||||
|
#btnFabContainer {
|
||||||
|
width: 100%;
|
||||||
|
height: 100%;
|
||||||
|
}
|
||||||
// Edit Recipe
|
// Edit Recipe
|
||||||
.btnFab {
|
.fab-button {
|
||||||
|
color: white;
|
||||||
|
height: 56;
|
||||||
|
width: 56;
|
||||||
|
background-color: #ff7043;
|
||||||
|
horizontal-align: center;
|
||||||
|
vertical-align: center;
|
||||||
|
border-radius: 100;
|
||||||
|
padding: 16;
|
||||||
margin: 16;
|
margin: 16;
|
||||||
}
|
}
|
||||||
.sectionTitle {
|
.sectionTitle {
|
||||||
|
@ -391,3 +396,38 @@ RadListView {
|
||||||
padding: 4;
|
padding: 4;
|
||||||
margin-top: 16;
|
margin-top: 16;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// Dialogs
|
||||||
|
.dialogContainer {
|
||||||
|
&.light {
|
||||||
|
color: $grayD4;
|
||||||
|
background: $grayL4;
|
||||||
|
}
|
||||||
|
&.dark {
|
||||||
|
color: $grayL4;
|
||||||
|
background: $grayD4;
|
||||||
|
}
|
||||||
|
.dialogTitle {
|
||||||
|
padding: 24 24 12;
|
||||||
|
font-size: 20;
|
||||||
|
}
|
||||||
|
.dialogDescription {
|
||||||
|
font-size: 16;
|
||||||
|
padding: 0 24 16;
|
||||||
|
}
|
||||||
|
.action {
|
||||||
|
padding: 24 24 24 8;
|
||||||
|
font-size: 12;
|
||||||
|
color: #ff7043;
|
||||||
|
}
|
||||||
|
.actionItem {
|
||||||
|
width: 100%;
|
||||||
|
font-size: 16;
|
||||||
|
padding: 8 20;
|
||||||
|
}
|
||||||
|
.cancel {
|
||||||
|
padding: 24;
|
||||||
|
font-size: 12;
|
||||||
|
color: #ff7043;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
Before Width: | Height: | Size: 8.2 KiB |
|
@ -1,5 +1,5 @@
|
||||||
<template>
|
<template>
|
||||||
<Page @loaded="setCurrentComponent">
|
<Page @loaded="initializePage">
|
||||||
<ActionBar :flat="viewIsScrolled ? false : true">
|
<ActionBar :flat="viewIsScrolled ? false : true">
|
||||||
<!-- Settings Actionbar -->
|
<!-- Settings Actionbar -->
|
||||||
<GridLayout rows="*" columns="auto, *" class="actionBarContainer">
|
<GridLayout rows="*" columns="auto, *" class="actionBarContainer">
|
||||||
|
@ -80,20 +80,21 @@
|
||||||
</template>
|
</template>
|
||||||
|
|
||||||
<script>
|
<script>
|
||||||
import * as utils from "tns-core-modules/utils/utils"
|
import { Utils } from "@nativescript/core"
|
||||||
import { mapState, mapActions } from "vuex"
|
import { mapState, mapActions } from "vuex"
|
||||||
export default {
|
export default {
|
||||||
props: ["highlight", "viewIsScrolled", "showDrawer", "title"],
|
props: ["highlight", "viewIsScrolled", "showDrawer", "title"],
|
||||||
computed: {
|
computed: {
|
||||||
...mapState(["icon",'currentComponent']),
|
...mapState(["icon", "currentComponent"]),
|
||||||
},
|
},
|
||||||
methods: {
|
methods: {
|
||||||
setCurrentComponent() {
|
...mapActions(["setCurrentComponentAction"]),
|
||||||
this.$store.dispatch("setCurrentComponent", "About")
|
initializePage() {
|
||||||
|
this.setCurrentComponentAction("About")
|
||||||
},
|
},
|
||||||
openURL(args, url) {
|
openURL(args, url) {
|
||||||
this.highlight(args)
|
this.highlight(args)
|
||||||
utils.openUrl(url)
|
Utils.openUrl(url)
|
||||||
},
|
},
|
||||||
},
|
},
|
||||||
}
|
}
|
||||||
|
|
|
@ -117,20 +117,23 @@
|
||||||
</template>
|
</template>
|
||||||
|
|
||||||
<script>
|
<script>
|
||||||
import * as utils from "tns-core-modules/utils/utils"
|
import {
|
||||||
import * as application from "tns-core-modules/application"
|
Utils,
|
||||||
|
ApplicationSettings,
|
||||||
|
AndroidApplication,
|
||||||
|
} from "@nativescript/core"
|
||||||
|
|
||||||
import { getString } from "application-settings"
|
|
||||||
import Theme from "@nativescript/theme"
|
import Theme from "@nativescript/theme"
|
||||||
import * as Toast from "nativescript-toast"
|
import * as Toast from "nativescript-toast"
|
||||||
|
import * as application from "tns-core-modules/application"
|
||||||
import EnRecipes from "./EnRecipes.vue"
|
import EnRecipes from "./EnRecipes.vue"
|
||||||
import Settings from "./Settings.vue"
|
import Settings from "./Settings.vue"
|
||||||
import About from "./About.vue"
|
import About from "./About.vue"
|
||||||
import PromptDialog from "./modal/PromptDialog.vue"
|
import PromptDialog from "./modal/PromptDialog.vue"
|
||||||
import { mapState } from "vuex"
|
import { mapState, mapActions } from "vuex"
|
||||||
|
|
||||||
import { Couchbase, ConcurrencyMode } from "nativescript-couchbase-plugin"
|
import { Couchbase, ConcurrencyMode } from "nativescript-couchbase-plugin"
|
||||||
|
const cb = new Couchbase("enrecipes")
|
||||||
|
|
||||||
let page
|
let page
|
||||||
export default {
|
export default {
|
||||||
|
@ -186,6 +189,7 @@ export default {
|
||||||
},
|
},
|
||||||
},
|
},
|
||||||
methods: {
|
methods: {
|
||||||
|
...mapActions(["setCurrentComponentAction", "renameCategoryAction"]),
|
||||||
toggleCatEdit() {
|
toggleCatEdit() {
|
||||||
this.catEditMode = !this.catEditMode
|
this.catEditMode = !this.catEditMode
|
||||||
this.setComponent("EnRecipes")
|
this.setComponent("EnRecipes")
|
||||||
|
@ -194,7 +198,7 @@ export default {
|
||||||
this.$refs.enrecipes.updateFilter()
|
this.$refs.enrecipes.updateFilter()
|
||||||
},
|
},
|
||||||
setComponent(comp) {
|
setComponent(comp) {
|
||||||
this.$store.dispatch("setCurrentComponent", comp)
|
this.setCurrentComponentAction(comp)
|
||||||
},
|
},
|
||||||
editCategory(item) {
|
editCategory(item) {
|
||||||
this.releaseGlobalBackEvent()
|
this.releaseGlobalBackEvent()
|
||||||
|
@ -210,7 +214,7 @@ export default {
|
||||||
if (this.categories.includes(result)) {
|
if (this.categories.includes(result)) {
|
||||||
Toast.makeText("Category already exists!", "long").show()
|
Toast.makeText("Category already exists!", "long").show()
|
||||||
} else {
|
} else {
|
||||||
this.$store.dispatch("renameCategory", {
|
this.renameCategoryAction({
|
||||||
current: item,
|
current: item,
|
||||||
updated: result,
|
updated: result,
|
||||||
})
|
})
|
||||||
|
@ -232,14 +236,14 @@ export default {
|
||||||
this.closeDrawer()
|
this.closeDrawer()
|
||||||
},
|
},
|
||||||
hijackGlobalBackEvent() {
|
hijackGlobalBackEvent() {
|
||||||
application.android.on(
|
AndroidApplication.on(
|
||||||
application.AndroidApplication.activityBackPressedEvent,
|
AndroidApplication.activityBackPressedEvent,
|
||||||
this.globalBackEvent
|
this.globalBackEvent
|
||||||
)
|
)
|
||||||
},
|
},
|
||||||
releaseGlobalBackEvent() {
|
releaseGlobalBackEvent() {
|
||||||
application.android.off(
|
AndroidApplication.off(
|
||||||
application.AndroidApplication.activityBackPressedEvent,
|
AndroidApplication.activityBackPressedEvent,
|
||||||
this.globalBackEvent
|
this.globalBackEvent
|
||||||
)
|
)
|
||||||
},
|
},
|
||||||
|
@ -332,12 +336,12 @@ export default {
|
||||||
},
|
},
|
||||||
donate(args) {
|
donate(args) {
|
||||||
this.highlight(args)
|
this.highlight(args)
|
||||||
utils.openUrl("https://www.vishnuraghav.com/donate/")
|
Utils.openUrl("https://www.vishnuraghav.com/donate/")
|
||||||
},
|
},
|
||||||
},
|
},
|
||||||
created() {
|
created() {
|
||||||
let themeName = getString("application-theme", "Light")
|
let themeName = ApplicationSettings.getString("application-theme", "Light")
|
||||||
Theme.setMode(Theme[themeName])
|
setTimeout((e) => Theme.setMode(Theme[themeName]), 50)
|
||||||
},
|
},
|
||||||
}
|
}
|
||||||
</script>
|
</script>
|
||||||
|
|
|
@ -1,5 +1,5 @@
|
||||||
<template>
|
<template>
|
||||||
<Page @loaded="setCurrentComponent" @unloaded="releaseBackEvent">
|
<Page @loaded="initializePage" @unloaded="releaseBackEvent">
|
||||||
<ActionBar :flat="viewIsScrolled ? false : true">
|
<ActionBar :flat="viewIsScrolled ? false : true">
|
||||||
<GridLayout rows="*" columns="auto, *, auto," class="actionBarContainer">
|
<GridLayout rows="*" columns="auto, *, auto," class="actionBarContainer">
|
||||||
<Label
|
<Label
|
||||||
|
@ -57,17 +57,17 @@
|
||||||
>
|
>
|
||||||
<Label
|
<Label
|
||||||
v-if="recipeContent.imageSrc"
|
v-if="recipeContent.imageSrc"
|
||||||
class="bx btnFab"
|
@tap="removePicture"
|
||||||
|
class="bx fab-button"
|
||||||
:text="icon.close"
|
:text="icon.close"
|
||||||
androidElevation="8"
|
androidElevation="8"
|
||||||
@tap="removePicture()"
|
|
||||||
/>
|
/>
|
||||||
<Label
|
<Label
|
||||||
v-else
|
v-else
|
||||||
class="bx btnFab"
|
@tap="takePicture"
|
||||||
|
class="bx fab-button"
|
||||||
:text="icon.camera"
|
:text="icon.camera"
|
||||||
androidElevation="8"
|
androidElevation="8"
|
||||||
@tap="takePicture()"
|
|
||||||
/>
|
/>
|
||||||
</StackLayout>
|
</StackLayout>
|
||||||
</AbsoluteLayout>
|
</AbsoluteLayout>
|
||||||
|
@ -93,6 +93,7 @@
|
||||||
<GridLayout columns="*, 8, *">
|
<GridLayout columns="*, 8, *">
|
||||||
<AbsoluteLayout class="inputField" col="0">
|
<AbsoluteLayout class="inputField" col="0">
|
||||||
<TimePickerField
|
<TimePickerField
|
||||||
|
titleTextColor="red"
|
||||||
timeFormat="HH:mm"
|
timeFormat="HH:mm"
|
||||||
pickerTitle="Approx. preparation time"
|
pickerTitle="Approx. preparation time"
|
||||||
@timeChange="onPrepTimeChange"
|
@timeChange="onPrepTimeChange"
|
||||||
|
@ -259,10 +260,11 @@
|
||||||
</template>
|
</template>
|
||||||
|
|
||||||
<script>
|
<script>
|
||||||
import { screen } from "tns-core-modules/platform"
|
import { Screen, AndroidApplication } from "@nativescript/core"
|
||||||
import { Mediafilepicker } from "nativescript-mediafilepicker"
|
import { Mediafilepicker } from "nativescript-mediafilepicker"
|
||||||
|
|
||||||
import { mapState, mapActions } from "vuex"
|
import { mapState, mapActions } from "vuex"
|
||||||
import * as application from "tns-core-modules/application"
|
|
||||||
import ActionDialog from "./modal/ActionDialog.vue"
|
import ActionDialog from "./modal/ActionDialog.vue"
|
||||||
import PromptDialog from "./modal/PromptDialog.vue"
|
import PromptDialog from "./modal/PromptDialog.vue"
|
||||||
import ConfirmDialog from "./modal/ConfirmDialog.vue"
|
import ConfirmDialog from "./modal/ConfirmDialog.vue"
|
||||||
|
@ -301,7 +303,7 @@ export default {
|
||||||
computed: {
|
computed: {
|
||||||
...mapState(["icon", "units", "categories", "currentComponent", "recipes"]),
|
...mapState(["icon", "units", "categories", "currentComponent", "recipes"]),
|
||||||
screenWidth() {
|
screenWidth() {
|
||||||
return screen.mainScreen.widthDIPs
|
return Screen.mainScreen.widthDIPs
|
||||||
},
|
},
|
||||||
hasEnoughDetails() {
|
hasEnoughDetails() {
|
||||||
if (this.recipeIndex) {
|
if (this.recipeIndex) {
|
||||||
|
@ -315,9 +317,15 @@ export default {
|
||||||
},
|
},
|
||||||
},
|
},
|
||||||
methods: {
|
methods: {
|
||||||
setCurrentComponent() {
|
...mapActions([
|
||||||
|
"setCurrentComponentAction",
|
||||||
|
"overwriteRecipeAction",
|
||||||
|
"addRecipeAction",
|
||||||
|
"addCategoryAction",
|
||||||
|
]),
|
||||||
|
initializePage() {
|
||||||
setTimeout((e) => {
|
setTimeout((e) => {
|
||||||
this.$store.dispatch("setCurrentComponent", "EditRecipe")
|
this.setCurrentComponentAction("EditRecipe")
|
||||||
}, 500)
|
}, 500)
|
||||||
this.title = this.recipeIndex >= 0 ? "Edit recipe" : "New recipe"
|
this.title = this.recipeIndex >= 0 ? "Edit recipe" : "New recipe"
|
||||||
if (this.recipeIndex >= 0) {
|
if (this.recipeIndex >= 0) {
|
||||||
|
@ -368,12 +376,12 @@ export default {
|
||||||
this.clearEmptyFields()
|
this.clearEmptyFields()
|
||||||
this.recipeContent.lastModified = new Date()
|
this.recipeContent.lastModified = new Date()
|
||||||
if (this.recipeIndex >= 0) {
|
if (this.recipeIndex >= 0) {
|
||||||
this.$store.dispatch("overwriteRecipe", {
|
this.overwriteRecipeAction({
|
||||||
index: this.recipeIndex,
|
index: this.recipeIndex,
|
||||||
recipe: this.recipeContent,
|
recipe: this.recipeContent,
|
||||||
})
|
})
|
||||||
} else {
|
} else {
|
||||||
this.$store.dispatch("addRecipe", this.recipeContent)
|
this.addRecipeAction(this.recipeContent)
|
||||||
}
|
}
|
||||||
this.$navigateBack()
|
this.$navigateBack()
|
||||||
},
|
},
|
||||||
|
@ -394,7 +402,7 @@ export default {
|
||||||
props: {
|
props: {
|
||||||
title: "Category",
|
title: "Category",
|
||||||
list: [...this.categories],
|
list: [...this.categories],
|
||||||
height: "75%",
|
height: "60%",
|
||||||
action: "NEW CATEGORY",
|
action: "NEW CATEGORY",
|
||||||
},
|
},
|
||||||
}).then((action) => {
|
}).then((action) => {
|
||||||
|
@ -408,7 +416,7 @@ export default {
|
||||||
this.hijackBackEvent()
|
this.hijackBackEvent()
|
||||||
if (result.length) {
|
if (result.length) {
|
||||||
this.recipeContent.category = result
|
this.recipeContent.category = result
|
||||||
this.$store.dispatch("addCategory", result)
|
this.addCategoryAction(result)
|
||||||
}
|
}
|
||||||
})
|
})
|
||||||
} else if (action) {
|
} else if (action) {
|
||||||
|
@ -443,14 +451,14 @@ export default {
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
hijackBackEvent() {
|
hijackBackEvent() {
|
||||||
application.android.on(
|
AndroidApplication.on(
|
||||||
application.AndroidApplication.activityBackPressedEvent,
|
AndroidApplication.activityBackPressedEvent,
|
||||||
this.backEvent
|
this.backEvent
|
||||||
)
|
)
|
||||||
},
|
},
|
||||||
releaseBackEvent() {
|
releaseBackEvent() {
|
||||||
application.android.off(
|
AndroidApplication.off(
|
||||||
application.AndroidApplication.activityBackPressedEvent,
|
AndroidApplication.activityBackPressedEvent,
|
||||||
this.backEvent
|
this.backEvent
|
||||||
)
|
)
|
||||||
},
|
},
|
||||||
|
|
|
@ -1,5 +1,5 @@
|
||||||
<template>
|
<template>
|
||||||
<Page @loaded="setCurrentComponent">
|
<Page @loaded="initializePage">
|
||||||
<ActionBar :flat="viewIsScrolled ? false : true">
|
<ActionBar :flat="viewIsScrolled ? false : true">
|
||||||
<!-- Search Actionbar -->
|
<!-- Search Actionbar -->
|
||||||
<GridLayout
|
<GridLayout
|
||||||
|
@ -123,7 +123,7 @@
|
||||||
<Label
|
<Label
|
||||||
row="1"
|
row="1"
|
||||||
col="1"
|
col="1"
|
||||||
class="bx btnFab"
|
class="bx fab-button"
|
||||||
:text="icon.plus"
|
:text="icon.plus"
|
||||||
androidElevation="8"
|
androidElevation="8"
|
||||||
@tap="addRecipe"
|
@tap="addRecipe"
|
||||||
|
@ -134,13 +134,9 @@
|
||||||
</template>
|
</template>
|
||||||
|
|
||||||
<script>
|
<script>
|
||||||
import * as utils from "tns-core-modules/utils/utils"
|
import { Utils, AndroidApplication } from "@nativescript/core"
|
||||||
import * as application from "tns-core-modules/application"
|
|
||||||
import * as gestures from "tns-core-modules/ui/gestures"
|
|
||||||
import * as Toast from "nativescript-toast"
|
import * as Toast from "nativescript-toast"
|
||||||
|
|
||||||
import { ObservableArray } from "tns-core-modules/data/observable-array"
|
|
||||||
|
|
||||||
import EditRecipe from "./EditRecipe.vue"
|
import EditRecipe from "./EditRecipe.vue"
|
||||||
import ViewRecipe from "./ViewRecipe.vue"
|
import ViewRecipe from "./ViewRecipe.vue"
|
||||||
import ActionDialog from "./modal/ActionDialog.vue"
|
import ActionDialog from "./modal/ActionDialog.vue"
|
||||||
|
@ -196,20 +192,21 @@ export default {
|
||||||
},
|
},
|
||||||
},
|
},
|
||||||
methods: {
|
methods: {
|
||||||
|
...mapActions(["setCurrentComponentAction", "deleteRecipeAction"]),
|
||||||
openSearch() {
|
openSearch() {
|
||||||
this.showSearch = true
|
this.showSearch = true
|
||||||
this.hijackLocalBackEvent()
|
this.hijackLocalBackEvent()
|
||||||
},
|
},
|
||||||
hijackLocalBackEvent() {
|
hijackLocalBackEvent() {
|
||||||
this.releaseGlobalBackEvent()
|
this.releaseGlobalBackEvent()
|
||||||
application.android.on(
|
AndroidApplication.on(
|
||||||
application.AndroidApplication.activityBackPressedEvent,
|
AndroidApplication.activityBackPressedEvent,
|
||||||
this.searchBackEvent
|
this.searchBackEvent
|
||||||
)
|
)
|
||||||
},
|
},
|
||||||
releaseLocalBackEvent() {
|
releaseLocalBackEvent() {
|
||||||
application.android.off(
|
AndroidApplication.off(
|
||||||
application.AndroidApplication.activityBackPressedEvent,
|
AndroidApplication.activityBackPressedEvent,
|
||||||
this.searchBackEvent
|
this.searchBackEvent
|
||||||
)
|
)
|
||||||
this.hijackGlobalBackEvent()
|
this.hijackGlobalBackEvent()
|
||||||
|
@ -220,7 +217,7 @@ export default {
|
||||||
},
|
},
|
||||||
closeSearch() {
|
closeSearch() {
|
||||||
this.searchQuery = ""
|
this.searchQuery = ""
|
||||||
utils.ad.dismissSoftInput()
|
Utils.ad.dismissSoftInput()
|
||||||
this.showSearch = false
|
this.showSearch = false
|
||||||
this.updateFilter()
|
this.updateFilter()
|
||||||
this.releaseLocalBackEvent()
|
this.releaseLocalBackEvent()
|
||||||
|
@ -231,7 +228,7 @@ export default {
|
||||||
props: {
|
props: {
|
||||||
title: "Sort by",
|
title: "Sort by",
|
||||||
list: ["Natural order", "Title", "Duration", "Last modified"],
|
list: ["Natural order", "Title", "Duration", "Last modified"],
|
||||||
height: "auto",
|
height: "195", // 48*4 + 3 1dip separators
|
||||||
},
|
},
|
||||||
}).then((action) => {
|
}).then((action) => {
|
||||||
if (action && action !== "Cancel" && this.sortType !== action) {
|
if (action && action !== "Cancel" && this.sortType !== action) {
|
||||||
|
@ -272,7 +269,7 @@ export default {
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
setComponent(comp) {
|
setComponent(comp) {
|
||||||
this.$store.dispatch("setCurrentComponent", comp)
|
this.setCurrentComponentAction(comp)
|
||||||
this.hijackGlobalBackEvent()
|
this.hijackGlobalBackEvent()
|
||||||
},
|
},
|
||||||
updateFilter() {
|
updateFilter() {
|
||||||
|
@ -300,7 +297,7 @@ export default {
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
|
|
||||||
setCurrentComponent() {
|
initializePage() {
|
||||||
this.filterFavorites
|
this.filterFavorites
|
||||||
? this.setComponent("Favorites")
|
? this.setComponent("Favorites")
|
||||||
: this.filterMustTry
|
: this.filterMustTry
|
||||||
|
@ -334,7 +331,7 @@ export default {
|
||||||
},
|
},
|
||||||
}).then((action) => {
|
}).then((action) => {
|
||||||
if (action) {
|
if (action) {
|
||||||
this.$store.dispatch("deleteRecipe", index)
|
this.deleteRecipeAction(index)
|
||||||
}
|
}
|
||||||
})
|
})
|
||||||
},
|
},
|
||||||
|
|
|
@ -1,5 +1,5 @@
|
||||||
<template>
|
<template>
|
||||||
<Page @loaded="setCurrentComponent">
|
<Page @loaded="initializePage">
|
||||||
<ActionBar :flat="viewIsScrolled ? false : true">
|
<ActionBar :flat="viewIsScrolled ? false : true">
|
||||||
<!-- Settings Actionbar -->
|
<!-- Settings Actionbar -->
|
||||||
<GridLayout rows="*" columns="auto, *" class="actionBarContainer">
|
<GridLayout rows="*" columns="auto, *" class="actionBarContainer">
|
||||||
|
@ -58,10 +58,9 @@
|
||||||
</template>
|
</template>
|
||||||
|
|
||||||
<script>
|
<script>
|
||||||
|
import { ApplicationSettings } from "@nativescript/core"
|
||||||
import * as permissions from "nativescript-permissions"
|
import * as permissions from "nativescript-permissions"
|
||||||
import * as application from "tns-core-modules/application"
|
|
||||||
|
|
||||||
import { getString, setString } from "application-settings"
|
|
||||||
import Theme from "@nativescript/theme"
|
import Theme from "@nativescript/theme"
|
||||||
import ActionDialog from "./modal/ActionDialog.vue"
|
import ActionDialog from "./modal/ActionDialog.vue"
|
||||||
import ConfirmDialog from "./modal/ConfirmDialog.vue"
|
import ConfirmDialog from "./modal/ConfirmDialog.vue"
|
||||||
|
@ -110,8 +109,9 @@ export default {
|
||||||
...mapState(["icon", "currentComponent"]),
|
...mapState(["icon", "currentComponent"]),
|
||||||
},
|
},
|
||||||
methods: {
|
methods: {
|
||||||
setCurrentComponent() {
|
...mapActions(["setCurrentComponentAction"]),
|
||||||
this.$store.dispatch("setCurrentComponent", "Settings")
|
initializePage() {
|
||||||
|
this.setCurrentComponentAction("Settings")
|
||||||
this.releaseGlobalBackEvent()
|
this.releaseGlobalBackEvent()
|
||||||
},
|
},
|
||||||
showDialog(args) {
|
showDialog(args) {
|
||||||
|
@ -124,7 +124,7 @@ export default {
|
||||||
props: {
|
props: {
|
||||||
title: "Theme",
|
title: "Theme",
|
||||||
list: ["Light", "Dark"],
|
list: ["Light", "Dark"],
|
||||||
height: "96",
|
height: "97",
|
||||||
},
|
},
|
||||||
}).then((action) => {
|
}).then((action) => {
|
||||||
if (action && action !== "Cancel" && this.themeName !== action) {
|
if (action && action !== "Cancel" && this.themeName !== action) {
|
||||||
|
@ -139,7 +139,7 @@ export default {
|
||||||
}).then((result) => {
|
}).then((result) => {
|
||||||
if (result) {
|
if (result) {
|
||||||
this.interface.theme.subTitle = this.themeName = action
|
this.interface.theme.subTitle = this.themeName = action
|
||||||
setString("application-theme", action)
|
ApplicationSettings.setString("application-theme", action)
|
||||||
setTimeout((e) => this.restartApp(), 250)
|
setTimeout((e) => this.restartApp(), 250)
|
||||||
}
|
}
|
||||||
})
|
})
|
||||||
|
@ -184,7 +184,7 @@ export default {
|
||||||
},
|
},
|
||||||
},
|
},
|
||||||
created() {
|
created() {
|
||||||
this.interface.theme.subTitle = this.themeName = getString(
|
this.interface.theme.subTitle = this.themeName = ApplicationSettings.getString(
|
||||||
"application-theme",
|
"application-theme",
|
||||||
"Light"
|
"Light"
|
||||||
)
|
)
|
||||||
|
|
|
@ -1,5 +1,5 @@
|
||||||
<template>
|
<template>
|
||||||
<Page @loaded="setCurrentComponent">
|
<Page @loaded="initializePage">
|
||||||
<ActionBar height="128" margin="0" flat="true">
|
<ActionBar height="128" margin="0" flat="true">
|
||||||
<GridLayout
|
<GridLayout
|
||||||
rows="64, 64"
|
rows="64, 64"
|
||||||
|
@ -222,12 +222,12 @@
|
||||||
<GridLayout id="btnFabContainer" rows="*,88" columns="*,88">
|
<GridLayout id="btnFabContainer" rows="*,88" columns="*,88">
|
||||||
<Label
|
<Label
|
||||||
v-if="!busy"
|
v-if="!busy"
|
||||||
|
@tap="editRecipe"
|
||||||
row="1"
|
row="1"
|
||||||
col="1"
|
col="1"
|
||||||
class="bx btnFab"
|
class="bx fab-button"
|
||||||
:text="icon.edit"
|
:text="icon.edit"
|
||||||
androidElevation="8"
|
androidElevation="8"
|
||||||
@tap="editRecipe"
|
|
||||||
/>
|
/>
|
||||||
<ActivityIndicator v-else row="1" col="1" :busy="busy" />
|
<ActivityIndicator v-else row="1" col="1" :busy="busy" />
|
||||||
</GridLayout>
|
</GridLayout>
|
||||||
|
@ -236,15 +236,13 @@
|
||||||
</template>
|
</template>
|
||||||
|
|
||||||
<script>
|
<script>
|
||||||
import { screen } from "tns-core-modules/platform"
|
import { Screen, Utils } from "@nativescript/core"
|
||||||
import * as utils from "tns-core-modules/utils/utils"
|
|
||||||
import { getNumber, setNumber } from "application-settings"
|
|
||||||
import * as Toast from "nativescript-toast"
|
import * as Toast from "nativescript-toast"
|
||||||
|
|
||||||
import EditRecipe from "./EditRecipe.vue"
|
|
||||||
|
|
||||||
import { mapState, mapActions } from "vuex"
|
import { mapState, mapActions } from "vuex"
|
||||||
|
|
||||||
|
import EditRecipe from "./EditRecipe.vue"
|
||||||
|
|
||||||
export default {
|
export default {
|
||||||
props: ["recipeIndex", "hijackGlobalBackEvent", "releaseGlobalBackEvent"],
|
props: ["recipeIndex", "hijackGlobalBackEvent", "releaseGlobalBackEvent"],
|
||||||
data() {
|
data() {
|
||||||
|
@ -259,7 +257,7 @@ export default {
|
||||||
return this.recipes[this.recipeIndex]
|
return this.recipes[this.recipeIndex]
|
||||||
},
|
},
|
||||||
screenWidth() {
|
screenWidth() {
|
||||||
return screen.mainScreen.widthDIPs
|
return Screen.mainScreen.widthDIPs
|
||||||
},
|
},
|
||||||
isPortionScalePositive() {
|
isPortionScalePositive() {
|
||||||
return this.portionScale && !isNaN(this.portionScale)
|
return this.portionScale && !isNaN(this.portionScale)
|
||||||
|
@ -268,6 +266,11 @@ export default {
|
||||||
},
|
},
|
||||||
},
|
},
|
||||||
methods: {
|
methods: {
|
||||||
|
...mapActions([
|
||||||
|
"toggleFavoriteAction",
|
||||||
|
"toggleMustTryAction",
|
||||||
|
"setCurrentComponentAction",
|
||||||
|
]),
|
||||||
roundedQuantity(quantity, unit) {
|
roundedQuantity(quantity, unit) {
|
||||||
return Math.round(quantity * this.isPortionScalePositive * 100) / 100
|
return Math.round(quantity * this.isPortionScalePositive * 100) / 100
|
||||||
},
|
},
|
||||||
|
@ -290,14 +293,14 @@ export default {
|
||||||
? Toast.makeText("Removed from Favorites").show()
|
? Toast.makeText("Removed from Favorites").show()
|
||||||
: Toast.makeText("Added to Favorites").show()
|
: Toast.makeText("Added to Favorites").show()
|
||||||
|
|
||||||
this.$store.dispatch("toggleFavorite", this.recipeIndex)
|
this.toggleFavoriteAction(this.recipeIndex)
|
||||||
},
|
},
|
||||||
toggleMustTry() {
|
toggleMustTry() {
|
||||||
this.recipe.tried
|
this.recipe.tried
|
||||||
? Toast.makeText("Added to Must-Try").show()
|
? Toast.makeText("Added to Must-Try").show()
|
||||||
: Toast.makeText("Removed from Must-Try").show()
|
: Toast.makeText("Removed from Must-Try").show()
|
||||||
|
|
||||||
this.$store.dispatch("toggleMustTry", this.recipeIndex)
|
this.toggleMustTryAction(this.recipeIndex)
|
||||||
},
|
},
|
||||||
getTime(time) {
|
getTime(time) {
|
||||||
let t = time.split(":")
|
let t = time.split(":")
|
||||||
|
@ -306,13 +309,13 @@ export default {
|
||||||
return h !== "00" ? `${h}h ${m}m` : `${m}m`
|
return h !== "00" ? `${h}h ${m}m` : `${m}m`
|
||||||
},
|
},
|
||||||
openURL(args, url) {
|
openURL(args, url) {
|
||||||
utils.openUrl(url)
|
Utils.openUrl(url)
|
||||||
},
|
},
|
||||||
setCurrentComponent() {
|
initializePage() {
|
||||||
this.releaseGlobalBackEvent()
|
this.releaseGlobalBackEvent()
|
||||||
this.busy = false
|
this.busy = false
|
||||||
setTimeout((e) => {
|
setTimeout((e) => {
|
||||||
this.$store.dispatch("setCurrentComponent", "ViewRecipe")
|
this.setCurrentComponentAction("ViewRecipe")
|
||||||
}, 500)
|
}, 500)
|
||||||
},
|
},
|
||||||
},
|
},
|
||||||
|
|
|
@ -1,8 +1,10 @@
|
||||||
<template>
|
<template>
|
||||||
<Page>
|
<Page>
|
||||||
<StackLayout class="dialogContainer">
|
<StackLayout
|
||||||
|
class="dialogContainer"
|
||||||
|
:class="isLightTheme ? 'light' : 'dark'"
|
||||||
|
>
|
||||||
<Label class="dialogTitle orkm" :text="title" />
|
<Label class="dialogTitle orkm" :text="title" />
|
||||||
<StackLayout class="actionsContainer">
|
|
||||||
<ListView
|
<ListView
|
||||||
width="100%"
|
width="100%"
|
||||||
:height="height"
|
:height="height"
|
||||||
|
@ -16,7 +18,6 @@
|
||||||
</StackLayout>
|
</StackLayout>
|
||||||
</v-template>
|
</v-template>
|
||||||
</ListView>
|
</ListView>
|
||||||
</StackLayout>
|
|
||||||
<GridLayout rows="auto" columns="auto, *, auto">
|
<GridLayout rows="auto" columns="auto, *, auto">
|
||||||
<Label
|
<Label
|
||||||
v-if="action"
|
v-if="action"
|
||||||
|
@ -37,28 +38,21 @@
|
||||||
</template>
|
</template>
|
||||||
|
|
||||||
<script>
|
<script>
|
||||||
|
import Theme from "@nativescript/theme"
|
||||||
export default {
|
export default {
|
||||||
props: ["title", "list", "height", "action"],
|
props: ["title", "list", "height", "action"],
|
||||||
|
data() {
|
||||||
|
return {
|
||||||
|
isLightTheme: true,
|
||||||
|
}
|
||||||
|
},
|
||||||
methods: {
|
methods: {
|
||||||
tapAction({ item }) {
|
tapAction({ item }) {
|
||||||
this.$modal.close(item)
|
this.$modal.close(item)
|
||||||
},
|
},
|
||||||
},
|
},
|
||||||
|
created() {
|
||||||
|
this.isLightTheme = Theme.getMode() == "ns-light" ? true : false
|
||||||
|
},
|
||||||
}
|
}
|
||||||
</script>
|
</script>
|
||||||
<style lang="scss" scoped>
|
|
||||||
.dialogTitle {
|
|
||||||
padding: 24 24 12;
|
|
||||||
font-size: 20;
|
|
||||||
}
|
|
||||||
.actionItem {
|
|
||||||
width: 100%;
|
|
||||||
font-size: 16;
|
|
||||||
padding: 8 20;
|
|
||||||
}
|
|
||||||
.cancel {
|
|
||||||
padding: 24;
|
|
||||||
font-size: 12;
|
|
||||||
color: #ff7043;
|
|
||||||
}
|
|
||||||
</style>
|
|
||||||
|
|
|
@ -1,6 +1,9 @@
|
||||||
<template>
|
<template>
|
||||||
<Page>
|
<Page>
|
||||||
<StackLayout class="dialogContainer">
|
<StackLayout
|
||||||
|
class="dialogContainer"
|
||||||
|
:class="isLightTheme ? 'light' : 'dark'"
|
||||||
|
>
|
||||||
<Label class="dialogTitle orkm" :text="title" />
|
<Label class="dialogTitle orkm" :text="title" />
|
||||||
<Label class="dialogDescription" :text="description" textWrap="true" />
|
<Label class="dialogDescription" :text="description" textWrap="true" />
|
||||||
<StackLayout
|
<StackLayout
|
||||||
|
@ -9,12 +12,12 @@
|
||||||
horizontalAlignment="right"
|
horizontalAlignment="right"
|
||||||
>
|
>
|
||||||
<Label
|
<Label
|
||||||
class="action orkm pull-right"
|
class="action orkm"
|
||||||
:text="cancelButtonText"
|
:text="cancelButtonText"
|
||||||
@tap="$modal.close(false)"
|
@tap="$modal.close(false)"
|
||||||
/>
|
/>
|
||||||
<Label
|
<Label
|
||||||
class="action orkm pull-right"
|
class="action orkm"
|
||||||
:text="okButtonText"
|
:text="okButtonText"
|
||||||
@tap="$modal.close(true)"
|
@tap="$modal.close(true)"
|
||||||
/>
|
/>
|
||||||
|
@ -24,22 +27,16 @@
|
||||||
</template>
|
</template>
|
||||||
|
|
||||||
<script>
|
<script>
|
||||||
|
import Theme from "@nativescript/theme"
|
||||||
export default {
|
export default {
|
||||||
props: ["title", "description", "cancelButtonText", "okButtonText"],
|
props: ["title", "description", "cancelButtonText", "okButtonText"],
|
||||||
|
data() {
|
||||||
|
return {
|
||||||
|
isLightTheme: true,
|
||||||
|
}
|
||||||
|
},
|
||||||
|
created() {
|
||||||
|
this.isLightTheme = Theme.getMode() == "ns-light" ? true : false
|
||||||
|
},
|
||||||
}
|
}
|
||||||
</script>
|
</script>
|
||||||
<style lang="scss" scoped>
|
|
||||||
.dialogTitle {
|
|
||||||
padding: 24 24 12;
|
|
||||||
font-size: 20;
|
|
||||||
}
|
|
||||||
.dialogDescription {
|
|
||||||
font-size: 16;
|
|
||||||
padding: 0 24 16;
|
|
||||||
}
|
|
||||||
.action {
|
|
||||||
padding: 24 24 24 8;
|
|
||||||
font-size: 12;
|
|
||||||
color: #ff7043;
|
|
||||||
}
|
|
||||||
</style>
|
|
||||||
|
|
|
@ -1,6 +1,9 @@
|
||||||
<template>
|
<template>
|
||||||
<Page>
|
<Page>
|
||||||
<StackLayout class="dialogContainer">
|
<StackLayout
|
||||||
|
class="dialogContainer"
|
||||||
|
:class="isLightTheme ? 'light' : 'dark'"
|
||||||
|
>
|
||||||
<Label class="dialogTitle orkm" :text="title" />
|
<Label class="dialogTitle orkm" :text="title" />
|
||||||
<TextField
|
<TextField
|
||||||
width="100%"
|
width="100%"
|
||||||
|
@ -21,13 +24,18 @@
|
||||||
</template>
|
</template>
|
||||||
|
|
||||||
<script>
|
<script>
|
||||||
|
import Theme from "@nativescript/theme"
|
||||||
export default {
|
export default {
|
||||||
props: ["title", "hint", "action"],
|
props: ["title", "hint", "action"],
|
||||||
data() {
|
data() {
|
||||||
return {
|
return {
|
||||||
category: null,
|
category: null,
|
||||||
|
isLightTheme: true,
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
|
created() {
|
||||||
|
this.isLightTheme = Theme.getMode() == "ns-light" ? true : false
|
||||||
|
},
|
||||||
}
|
}
|
||||||
</script>
|
</script>
|
||||||
<style lang="scss" scoped>
|
<style lang="scss" scoped>
|
||||||
|
|
|
@ -5,7 +5,7 @@ import store from "./store"
|
||||||
import RadListView from "nativescript-ui-listview/vue"
|
import RadListView from "nativescript-ui-listview/vue"
|
||||||
Vue.use(RadListView)
|
Vue.use(RadListView)
|
||||||
|
|
||||||
import DateTimePicker from "nativescript-datetimepicker/vue"
|
import DateTimePicker from "@nativescript/datetimepicker/vue"
|
||||||
Vue.use(DateTimePicker)
|
Vue.use(DateTimePicker)
|
||||||
|
|
||||||
Vue.registerElement(
|
Vue.registerElement(
|
||||||
|
@ -13,6 +13,11 @@ Vue.registerElement(
|
||||||
() => require("nativescript-ui-sidedrawer").RadSideDrawer
|
() => require("nativescript-ui-sidedrawer").RadSideDrawer
|
||||||
)
|
)
|
||||||
|
|
||||||
|
Vue.registerElement(
|
||||||
|
"Fab",
|
||||||
|
() => require("@nstudio/nativescript-floatingactionbutton").Fab
|
||||||
|
)
|
||||||
|
|
||||||
if (TNS_ENV !== "production") {
|
if (TNS_ENV !== "production") {
|
||||||
// Vue.use(VueDevtools)
|
// Vue.use(VueDevtools)
|
||||||
}
|
}
|
||||||
|
|
360
app/store.js
|
@ -6,178 +6,178 @@ Vue.use(Vuex)
|
||||||
export default new Vuex.Store({
|
export default new Vuex.Store({
|
||||||
state: {
|
state: {
|
||||||
recipes: [
|
recipes: [
|
||||||
// {
|
{
|
||||||
// imageSrc: null,
|
imageSrc: null,
|
||||||
// title: "Mediterranean Salad",
|
title: "Mediterranean Salad",
|
||||||
// category: "Salads",
|
category: "Salads",
|
||||||
// prepTime: "12:25",
|
prepTime: "12:25",
|
||||||
// cookTime: "00:30",
|
cookTime: "00:30",
|
||||||
// portionSize: 1,
|
portionSize: 1,
|
||||||
// ingredients: [
|
ingredients: [
|
||||||
// {
|
{
|
||||||
// item: "Cucumbers, Seeded And Sliced",
|
item: "Cucumbers, Seeded And Sliced",
|
||||||
// quantity: 3,
|
quantity: 3,
|
||||||
// unit: "unit",
|
unit: "unit",
|
||||||
// },
|
},
|
||||||
// {
|
{
|
||||||
// item: "Crumbled Feta Cheese",
|
item: "Crumbled Feta Cheese",
|
||||||
// quantity: 1.5,
|
quantity: 1.5,
|
||||||
// unit: "cup",
|
unit: "cup",
|
||||||
// },
|
},
|
||||||
// {
|
{
|
||||||
// item: "Black Olives, Pitted And Sliced",
|
item: "Black Olives, Pitted And Sliced",
|
||||||
// quantity: 1,
|
quantity: 1,
|
||||||
// unit: "cup",
|
unit: "cup",
|
||||||
// },
|
},
|
||||||
// {
|
{
|
||||||
// item: "Diced Roma Tomatoes",
|
item: "Diced Roma Tomatoes",
|
||||||
// quantity: 3,
|
quantity: 3,
|
||||||
// unit: "cup",
|
unit: "cup",
|
||||||
// },
|
},
|
||||||
// {
|
{
|
||||||
// item: "Diced Oil Packed Sun Dried Tomatoes, Drained, Oil Reserved",
|
item: "Diced Oil Packed Sun Dried Tomatoes, Drained, Oil Reserved",
|
||||||
// quantity: 0.3,
|
quantity: 0.3,
|
||||||
// unit: "cup",
|
unit: "cup",
|
||||||
// },
|
},
|
||||||
// {
|
{
|
||||||
// item: "Onion, Sliced",
|
item: "Onion, Sliced",
|
||||||
// quantity: 1.5,
|
quantity: 1.5,
|
||||||
// unit: "unit",
|
unit: "unit",
|
||||||
// },
|
},
|
||||||
// {
|
{
|
||||||
// item: "Cucumbers, Seeded And Sliced",
|
item: "Cucumbers, Seeded And Sliced",
|
||||||
// quantity: 3,
|
quantity: 3,
|
||||||
// unit: "unit",
|
unit: "unit",
|
||||||
// },
|
},
|
||||||
// {
|
{
|
||||||
// item: "Crumbled Feta Cheese",
|
item: "Crumbled Feta Cheese",
|
||||||
// quantity: 1.5,
|
quantity: 1.5,
|
||||||
// unit: "cup",
|
unit: "cup",
|
||||||
// },
|
},
|
||||||
// {
|
{
|
||||||
// item: "Black Olives, Pitted And Sliced",
|
item: "Black Olives, Pitted And Sliced",
|
||||||
// quantity: 1,
|
quantity: 1,
|
||||||
// unit: "cup",
|
unit: "cup",
|
||||||
// },
|
},
|
||||||
// {
|
{
|
||||||
// item: "Diced Roma Tomatoes",
|
item: "Diced Roma Tomatoes",
|
||||||
// quantity: 3,
|
quantity: 3,
|
||||||
// unit: "cup",
|
unit: "cup",
|
||||||
// },
|
},
|
||||||
// {
|
{
|
||||||
// item: "Diced Oil Packed Sun Dried Tomatoes, Drained, Oil Reserved",
|
item: "Diced Oil Packed Sun Dried Tomatoes, Drained, Oil Reserved",
|
||||||
// quantity: 0.3,
|
quantity: 0.3,
|
||||||
// unit: "cup",
|
unit: "cup",
|
||||||
// },
|
},
|
||||||
// {
|
{
|
||||||
// item: "Onion, Sliced",
|
item: "Onion, Sliced",
|
||||||
// quantity: 1.5,
|
quantity: 1.5,
|
||||||
// unit: "unit",
|
unit: "unit",
|
||||||
// },
|
},
|
||||||
// {
|
{
|
||||||
// item: "Cucumbers, Seeded And Sliced",
|
item: "Cucumbers, Seeded And Sliced",
|
||||||
// quantity: 3,
|
quantity: 3,
|
||||||
// unit: "unit",
|
unit: "unit",
|
||||||
// },
|
},
|
||||||
// {
|
{
|
||||||
// item: "Crumbled Feta Cheese",
|
item: "Crumbled Feta Cheese",
|
||||||
// quantity: 1.5,
|
quantity: 1.5,
|
||||||
// unit: "cup",
|
unit: "cup",
|
||||||
// },
|
},
|
||||||
// {
|
{
|
||||||
// item: "Black Olives, Pitted And Sliced",
|
item: "Black Olives, Pitted And Sliced",
|
||||||
// quantity: 1,
|
quantity: 1,
|
||||||
// unit: "cup",
|
unit: "cup",
|
||||||
// },
|
},
|
||||||
// {
|
{
|
||||||
// item: "Diced Roma Tomatoes",
|
item: "Diced Roma Tomatoes",
|
||||||
// quantity: 3,
|
quantity: 3,
|
||||||
// unit: "cup",
|
unit: "cup",
|
||||||
// },
|
},
|
||||||
// {
|
{
|
||||||
// item: "Diced Oil Packed Sun Dried Tomatoes, Drained, Oil Reserved",
|
item: "Diced Oil Packed Sun Dried Tomatoes, Drained, Oil Reserved",
|
||||||
// quantity: 0.3,
|
quantity: 0.3,
|
||||||
// unit: "cup",
|
unit: "cup",
|
||||||
// },
|
},
|
||||||
// {
|
{
|
||||||
// item: "Onion, Sliced",
|
item: "Onion, Sliced",
|
||||||
// quantity: 1.5,
|
quantity: 1.5,
|
||||||
// unit: "unit",
|
unit: "unit",
|
||||||
// },
|
},
|
||||||
// ],
|
],
|
||||||
// instructions: [
|
instructions: [
|
||||||
// "In a large salad bowl, toss together the cucumbers, feta cheese, olives, roma tomatoes, sun-dried tomatoes, 2 tablespoons reserved sun-dried tomato oil, and red onion.",
|
"In a large salad bowl, toss together the cucumbers, feta cheese, olives, roma tomatoes, sun-dried tomatoes, 2 tablespoons reserved sun-dried tomato oil, and red onion.",
|
||||||
// "Chill until serving.",
|
"Chill until serving.",
|
||||||
// "In a large salad bowl, toss together the cucumbers, feta cheese, olives, roma tomatoes, sun-dried tomatoes, 2 tablespoons reserved sun-dried tomato oil, and red onion. In a large salad bowl, toss together the cucumbers, feta cheese, olives, roma tomatoes, sun-dried tomatoes, 2 tablespoons reserved sun-dried tomato oil, and red onion.",
|
"In a large salad bowl, toss together the cucumbers, feta cheese, olives, roma tomatoes, sun-dried tomatoes, 2 tablespoons reserved sun-dried tomato oil, and red onion. In a large salad bowl, toss together the cucumbers, feta cheese, olives, roma tomatoes, sun-dried tomatoes, 2 tablespoons reserved sun-dried tomato oil, and red onion.",
|
||||||
// "Chill until serving.",
|
"Chill until serving.",
|
||||||
// "Chill until serving.",
|
"Chill until serving.",
|
||||||
// "In a large salad bowl, toss together the cucumbers, feta cheese, olives, roma tomatoes, sun-dried tomatoes, 2 tablespoons reserved sun-dried tomato oil, and red onion.",
|
"In a large salad bowl, toss together the cucumbers, feta cheese, olives, roma tomatoes, sun-dried tomatoes, 2 tablespoons reserved sun-dried tomato oil, and red onion.",
|
||||||
// "Chill until serving.",
|
"Chill until serving.",
|
||||||
// "Chill until serving.",
|
"Chill until serving.",
|
||||||
// "Chill until serving.",
|
"Chill until serving.",
|
||||||
// "Chill until serving.",
|
"Chill until serving.",
|
||||||
// "Chill until serving.",
|
"Chill until serving.",
|
||||||
// ],
|
],
|
||||||
// notes: [
|
notes: [
|
||||||
// "Per Serving: 130.6 calories; protein 5.5g 11% DV; carbohydrates 9.3g 3% DV; fat 8.8g 14% DV; cholesterol 25mg 8% DV; sodium 486.4mg 20% DV.",
|
"Per Serving: 130.6 calories; protein 5.5g 11% DV; carbohydrates 9.3g 3% DV; fat 8.8g 14% DV; cholesterol 25mg 8% DV; sodium 486.4mg 20% DV.",
|
||||||
// "Per Serving: 130.6 calories; protein 5.5g 11% DV; carbohydrates 9.3g 3% DV; fat 8.8g 14% DV; cholesterol 25mg 8% DV; sodium 486.4mg 20% DV.",
|
"Per Serving: 130.6 calories; protein 5.5g 11% DV; carbohydrates 9.3g 3% DV; fat 8.8g 14% DV; cholesterol 25mg 8% DV; sodium 486.4mg 20% DV.",
|
||||||
// "Per Serving: 130.6 calories; protein 5.5g 11% DV; carbohydrates 9.3g 3% DV; fat 8.8g 14% DV; cholesterol 25mg 8% DV; sodium 486.4mg 20% DV.",
|
"Per Serving: 130.6 calories; protein 5.5g 11% DV; carbohydrates 9.3g 3% DV; fat 8.8g 14% DV; cholesterol 25mg 8% DV; sodium 486.4mg 20% DV.",
|
||||||
// ],
|
],
|
||||||
// references: [
|
references: [
|
||||||
// "https://www.allrecipes.com/recipe/14403/mediterranean-greek-salad/",
|
"https://www.allrecipes.com/recipe/14403/mediterranean-greek-salad/",
|
||||||
// "https://www.allrecipes.com/recipe/14403/mediterranean-greek-salad/",
|
"https://www.allrecipes.com/recipe/14403/mediterranean-greek-salad/",
|
||||||
// "https://www.allrecipes.com/recipe/14403/mediterranean-greek-salad/",
|
"https://www.allrecipes.com/recipe/14403/mediterranean-greek-salad/",
|
||||||
// "https://www.allrecipes.com/recipe/14403/mediterranean-greek-salad/",
|
"https://www.allrecipes.com/recipe/14403/mediterranean-greek-salad/",
|
||||||
// ],
|
],
|
||||||
// isFavorite: true,
|
isFavorite: true,
|
||||||
// tried: false,
|
tried: false,
|
||||||
// lastModified: "2020-10-18T17:37:51.798Z",
|
lastModified: "2020-10-18T17:37:51.798Z",
|
||||||
// },
|
},
|
||||||
// {
|
{
|
||||||
// imageSrc: null,
|
imageSrc: null,
|
||||||
// title: "Fresh Tomato Sauce",
|
title: "Fresh Tomato Sauce",
|
||||||
// category: "Sauces",
|
category: "Sauces",
|
||||||
// prepTime: "00:45",
|
prepTime: "00:45",
|
||||||
// cookTime: "00:35",
|
cookTime: "00:35",
|
||||||
// portionSize: 1,
|
portionSize: 1,
|
||||||
// ingredients: [],
|
ingredients: [],
|
||||||
// instructions: [],
|
instructions: [],
|
||||||
// notes: [],
|
notes: [],
|
||||||
// references: [],
|
references: [],
|
||||||
// isFavorite: true,
|
isFavorite: true,
|
||||||
// tried: true,
|
tried: true,
|
||||||
// lastModified: "2020-10-15T17:37:51.798Z",
|
lastModified: "2020-10-15T17:37:51.798Z",
|
||||||
// },
|
},
|
||||||
// {
|
{
|
||||||
// imageSrc: null,
|
imageSrc: null,
|
||||||
// title: "Creamy Mushroom Herb Pasta",
|
title: "Creamy Mushroom Herb Pasta",
|
||||||
// category: "Lunch",
|
category: "Lunch",
|
||||||
// prepTime: "00:10",
|
prepTime: "00:10",
|
||||||
// cookTime: "00:15",
|
cookTime: "00:15",
|
||||||
// portionSize: 1,
|
portionSize: 1,
|
||||||
// ingredients: [],
|
ingredients: [],
|
||||||
// instructions: [],
|
instructions: [],
|
||||||
// notes: [],
|
notes: [],
|
||||||
// references: [],
|
references: [],
|
||||||
// isFavorite: false,
|
isFavorite: false,
|
||||||
// tried: false,
|
tried: false,
|
||||||
// lastModified: "2020-10-12T17:37:51.798Z",
|
lastModified: "2020-10-12T17:37:51.798Z",
|
||||||
// },
|
},
|
||||||
// {
|
{
|
||||||
// imageSrc: null,
|
imageSrc: null,
|
||||||
// title: "Grilled Cheese Sandwich",
|
title: "Grilled Cheese Sandwich",
|
||||||
// category: "Lunch",
|
category: "Lunch",
|
||||||
// prepTime: "00:50",
|
prepTime: "00:50",
|
||||||
// cookTime: "00:12",
|
cookTime: "00:12",
|
||||||
// portionSize: 1,
|
portionSize: 1,
|
||||||
// ingredients: [],
|
ingredients: [],
|
||||||
// instructions: [],
|
instructions: [],
|
||||||
// notes: [],
|
notes: [],
|
||||||
// references: [],
|
references: [],
|
||||||
// isFavorite: false,
|
isFavorite: false,
|
||||||
// tried: true,
|
tried: true,
|
||||||
// lastModified: "2020-10-03T17:37:51.798Z",
|
lastModified: "2020-10-03T17:37:51.798Z",
|
||||||
// },
|
},
|
||||||
],
|
],
|
||||||
viewIsScrolled: false,
|
viewIsScrolled: false,
|
||||||
icon: {
|
icon: {
|
||||||
|
@ -304,28 +304,28 @@ export default new Vuex.Store({
|
||||||
},
|
},
|
||||||
},
|
},
|
||||||
actions: {
|
actions: {
|
||||||
addRecipe({ commit }, recipe) {
|
addRecipeAction({ commit }, recipe) {
|
||||||
commit("addRecipe", recipe)
|
commit("addRecipe", recipe)
|
||||||
},
|
},
|
||||||
addCategory({ commit }, category) {
|
addCategoryAction({ commit }, category) {
|
||||||
commit("addCategory", category)
|
commit("addCategory", category)
|
||||||
},
|
},
|
||||||
overwriteRecipe({ commit }, updatedRecipe) {
|
overwriteRecipeAction({ commit }, updatedRecipe) {
|
||||||
commit("overwriteRecipe", updatedRecipe)
|
commit("overwriteRecipe", updatedRecipe)
|
||||||
},
|
},
|
||||||
deleteRecipe({ commit }, index) {
|
deleteRecipeAction({ commit }, index) {
|
||||||
commit("deleteRecipe", index)
|
commit("deleteRecipe", index)
|
||||||
},
|
},
|
||||||
toggleFavorite({ commit }, index) {
|
toggleFavoriteAction({ commit }, index) {
|
||||||
commit("toggleFavorite", index)
|
commit("toggleFavorite", index)
|
||||||
},
|
},
|
||||||
toggleMustTry({ commit }, index) {
|
toggleMustTryAction({ commit }, index) {
|
||||||
commit("toggleMustTry", index)
|
commit("toggleMustTry", index)
|
||||||
},
|
},
|
||||||
setCurrentComponent({ commit }, comp) {
|
setCurrentComponentAction({ commit }, comp) {
|
||||||
commit("setCurrentComponent", comp)
|
commit("setCurrentComponent", comp)
|
||||||
},
|
},
|
||||||
renameCategory({ commit }, category) {
|
renameCategoryAction({ commit }, category) {
|
||||||
commit("renameCategory", category)
|
commit("renameCategory", category)
|
||||||
},
|
},
|
||||||
},
|
},
|
||||||
|
|
2558
package-lock.json
generated
13
package.json
|
@ -9,27 +9,26 @@
|
||||||
},
|
},
|
||||||
"dependencies": {
|
"dependencies": {
|
||||||
"@nativescript/core": "~7.0.0",
|
"@nativescript/core": "~7.0.0",
|
||||||
"@nativescript/theme": "^2.2.1",
|
"@nativescript/datetimepicker": "^2.0.4",
|
||||||
|
"@nativescript/theme": "^3.0.0",
|
||||||
|
"@nstudio/nativescript-floatingactionbutton": "^3.0.3",
|
||||||
"nativescript-camera": "^4.5.0",
|
"nativescript-camera": "^4.5.0",
|
||||||
"nativescript-couchbase-plugin": "^0.9.6",
|
"nativescript-couchbase-plugin": "^0.9.6",
|
||||||
"nativescript-datetimepicker": "^1.2.3",
|
|
||||||
"nativescript-mediafilepicker": "^4.0.0",
|
"nativescript-mediafilepicker": "^4.0.0",
|
||||||
"nativescript-permissions": "^1.3.9",
|
"nativescript-permissions": "^1.3.9",
|
||||||
"nativescript-toast": "^2.0.0",
|
"nativescript-toast": "^2.0.0",
|
||||||
"nativescript-ui-listview": "^8.2.0",
|
"nativescript-ui-listview": "^9.0.4",
|
||||||
"nativescript-ui-sidedrawer": "^8.0.1",
|
"nativescript-ui-sidedrawer": "^9.0.3",
|
||||||
"nativescript-vue": "^2.6.1",
|
"nativescript-vue": "^2.6.1",
|
||||||
"tns-core-modules": "^6.5.20",
|
|
||||||
"vuex": "^3.3.0"
|
"vuex": "^3.3.0"
|
||||||
},
|
},
|
||||||
"devDependencies": {
|
"devDependencies": {
|
||||||
"@babel/core": "^7.0.0",
|
"@babel/core": "^7.0.0",
|
||||||
"@babel/preset-env": "^7.0.0",
|
"@babel/preset-env": "^7.0.0",
|
||||||
"@nativescript/android": "7.0.1",
|
"@nativescript/android": "7.0.1",
|
||||||
"@nativescript/webpack": "~3.0.0",
|
"@nativescript/webpack": "^3.0.8",
|
||||||
"@types/node": "^14.0.27",
|
"@types/node": "^14.0.27",
|
||||||
"babel-loader": "^8.1.0",
|
"babel-loader": "^8.1.0",
|
||||||
"nativescript-dev-webpack": "^1.5.1",
|
|
||||||
"nativescript-vue-template-compiler": "^2.6.0",
|
"nativescript-vue-template-compiler": "^2.6.0",
|
||||||
"node-sass": "^4.13.1",
|
"node-sass": "^4.13.1",
|
||||||
"vue-loader": "^15.9.1"
|
"vue-loader": "^15.9.1"
|
||||||
|
|