Version Description
- bugfix: compatibility with ACF 5.7.11
Download this release
Release Info
Developer | soflyy |
Plugin | ![]() |
Version | 1.2.3 |
Comparing to | |
See all releases |
Code changes from version 1.2.2 to 1.2.3
- frontend/.sass-cache/1e8d17c61c30578de9119afabf0505c45d305ebe/availabilityPrice.scssc +0 -0
- frontend/.sass-cache/1e8d17c61c30578de9119afabf0505c45d305ebe/basicInformation.scssc +0 -0
- frontend/.sass-cache/3d0d747a53a7fe6533c7b81385e4330be65ef070/categorySelector.scssc +0 -0
- frontend/.sass-cache/437041dae9230ed3512a93b84abfce7cea94ee50/categorySelector.scssc +0 -0
- frontend/.sass-cache/437041dae9230ed3512a93b84abfce7cea94ee50/googleCategorySelector.scssc +0 -0
- frontend/.sass-cache/59fb0579c0803eea727968c98dc5a2535eabfa60/availabilityPrice.scssc +0 -0
- frontend/.sass-cache/59fb0579c0803eea727968c98dc5a2535eabfa60/uniqueIdentifiers.scssc +0 -0
- frontend/.sass-cache/7a42ac8998aa7c8ba9ac04eeb0ae839b5c898de3/basicInformation.scssc +0 -0
- frontend/.sass-cache/7a42ac8998aa7c8ba9ac04eeb0ae839b5c898de3/productCategories.scssc +0 -0
- frontend/.sass-cache/83142009718bd5978df62c210f1221d16d96a9dd/advancedAttributes.scssc +0 -0
- frontend/.sass-cache/83142009718bd5978df62c210f1221d16d96a9dd/shipping.scssc +0 -0
- frontend/.sass-cache/8691e535e69e189796af67f73114fb9c83d3e1e3/advancedAttributes.scssc +0 -0
- frontend/.sass-cache/8691e535e69e189796af67f73114fb9c83d3e1e3/detailedInformation.scssc +0 -0
- frontend/.sass-cache/98eff1feffa48ac878eefb0682a97fef76be0920/common.scssc +0 -0
- frontend/.sass-cache/98eff1feffa48ac878eefb0682a97fef76be0920/styles.scssc +0 -0
- frontend/.sass-cache/a5847f4bee0f85a5055f3ae124f32b0d1d6c1685/categoryMapper.scssc +0 -0
- frontend/.sass-cache/be652ce12cf55d407d37b54be031acf64008ba1b/basicInformation.scssc +0 -0
- frontend/.sass-cache/c0fa2026c2e5c0de4b27eb6d0e10642433a23d40/basicInformation.scssc +0 -0
- frontend/.sass-cache/c0fa2026c2e5c0de4b27eb6d0e10642433a23d40/detailedInformation.scssc +0 -0
- frontend/.sass-cache/eff9f42b8d50360960249617449f0a81611d4f48/categoryMapper.scssc +0 -0
- frontend/.sass-cache/f5538c7683a05e133bbb60616c8fd20f4f6c3b9a/categorySelector.scssc +0 -0
- frontend/.sass-cache/fa29827343a974f0ae49e77fc20d63f4e80aaca2/detailedInformation.scssc +0 -0
- frontend/.sass-cache/fa29827343a974f0ae49e77fc20d63f4e80aaca2/mapping.scssc +0 -0
- frontend/Gruntfile.js +0 -144
- frontend/package.json +0 -36
- frontend/src/advancedAttributes/advancedAttributes.controller.js +0 -9
- frontend/src/advancedAttributes/advancedAttributes.directive.js +0 -10
- frontend/src/advancedAttributes/advancedAttributes.scss +0 -9
- frontend/src/advancedAttributes/advancedAttributes.tpl.html +0 -156
- frontend/src/app.js +0 -7
- frontend/src/availabilityPrice/availabilityPrice.controller.js +0 -5
- frontend/src/availabilityPrice/availabilityPrice.directive.js +0 -10
- frontend/src/availabilityPrice/availabilityPrice.scss +0 -27
- frontend/src/availabilityPrice/availabilityPrice.tpl.html +0 -137
- frontend/src/basicInformation/basicInformation.controller.js +0 -3
- frontend/src/basicInformation/basicInformation.directive.js +0 -10
- frontend/src/basicInformation/basicInformation.scss +0 -13
- frontend/src/basicInformation/basicInformation.tpl.html +0 -123
- frontend/src/common.scss +0 -25
- frontend/src/common/angular-chosen.directive.js +0 -110
- frontend/src/common/attributes.service.js +0 -17
- frontend/src/common/autodetect.directive.js +0 -21
- frontend/src/common/cascade.directive.js +0 -35
- frontend/src/common/contenteditable.directive.js +0 -31
- frontend/src/common/currency.service.js +0 -18
- frontend/src/common/droppable.directive.js +0 -85
- frontend/src/common/export.service.js +0 -41
- frontend/src/common/focusMeWhenEnabled.directive.js +0 -16
- frontend/src/common/googleCategoriesService.js +0 -20
- frontend/src/common/main.controller.js +0 -219
- frontend/src/common/mapping/mapping.controller.js +0 -34
- frontend/src/common/mapping/mapping.directive.js +0 -12
- frontend/src/common/mapping/mapping.scss +0 -40
- frontend/src/common/mapping/mapping.tpl.html +0 -67
- frontend/src/common/styledInput.directive.js +0 -35
- frontend/src/common/template.service.js +0 -19
- frontend/src/common/tipsy.directive.js +0 -26
- frontend/src/common/wpHttp.service.js +0 -31
- frontend/src/detailedInformation/detailedInformation.controller.js +0 -8
- frontend/src/detailedInformation/detailedInformation.directive.js +0 -10
- frontend/src/detailedInformation/detailedInformation.scss +0 -5
- frontend/src/detailedInformation/detailedInformation.tpl.html +0 -210
- frontend/src/productCategories/categoryMapper/categoryMapper.controller.js +0 -32
- frontend/src/productCategories/categoryMapper/categoryMapper.directive.js +0 -13
- frontend/src/productCategories/categoryMapper/categoryMapper.scss +0 -201
- frontend/src/productCategories/categoryMapper/categoryMapper.tpl.html +0 -80
- frontend/src/productCategories/categoryMapper/noCategoriesNotice.tpl.html +0 -11
- frontend/src/productCategories/googleCategorySelector/googleCategorySelector.controller.js +0 -127
- frontend/src/productCategories/googleCategorySelector/googleCategorySelector.directive.js +0 -9
- frontend/src/productCategories/googleCategorySelector/googleCategorySelector.scss +0 -105
- frontend/src/productCategories/googleCategorySelector/googleCategorySelector.tpl.html +0 -22
- frontend/src/productCategories/googleCategorySelector/googleCategorySelectorAdder.directive.js +0 -22
- frontend/src/productCategories/googleCategorySelector/googleCategorySelectorAdder.tpl.html +0 -11
- frontend/src/productCategories/productCategories.controller.js +0 -3
- frontend/src/productCategories/productCategories.directive.js +0 -10
- frontend/src/productCategories/productCategories.scss +0 -0
- frontend/src/productCategories/productCategories.tpl.html +0 -61
- frontend/src/shipping/shipping.controller.js +0 -5
- frontend/src/shipping/shipping.directive.js +0 -10
- frontend/src/shipping/shipping.scss +0 -0
- frontend/src/shipping/shipping.tpl.html +0 -60
- frontend/src/styles.scss +0 -278
- frontend/src/styles/bootstrap-chosen-variables.scss +0 -18
- frontend/src/styles/bootstrap-chosen.scss +0 -459
- frontend/src/styles/bootstrap-variables.scss +0 -921
- frontend/src/styles/chosen-sprite.png +0 -0
- frontend/src/styles/chosen-sprite@2x.png +0 -0
- frontend/src/uniqueIdentifiers/uniqueIdentifiers.controller.js +0 -3
- frontend/src/uniqueIdentifiers/uniqueIdentifiers.directive.js +0 -10
- frontend/src/uniqueIdentifiers/uniqueIdentifiers.scss +0 -18
- frontend/src/uniqueIdentifiers/uniqueIdentifiers.tpl.html +0 -45
- frontend/taxonomies/googleTaxonomies.json +0 -1
- frontend/taxonomies/taxonomies_multilevel.json +0 -1
- libraries/XmlExportACF.php +12 -2
- readme.txt +5 -2
- wp-all-export.php +2 -15
frontend/.sass-cache/1e8d17c61c30578de9119afabf0505c45d305ebe/availabilityPrice.scssc
DELETED
Binary file
|
frontend/.sass-cache/1e8d17c61c30578de9119afabf0505c45d305ebe/basicInformation.scssc
DELETED
Binary file
|
frontend/.sass-cache/3d0d747a53a7fe6533c7b81385e4330be65ef070/categorySelector.scssc
DELETED
Binary file
|
frontend/.sass-cache/437041dae9230ed3512a93b84abfce7cea94ee50/categorySelector.scssc
DELETED
Binary file
|
frontend/.sass-cache/437041dae9230ed3512a93b84abfce7cea94ee50/googleCategorySelector.scssc
DELETED
Binary file
|
frontend/.sass-cache/59fb0579c0803eea727968c98dc5a2535eabfa60/availabilityPrice.scssc
DELETED
Binary file
|
frontend/.sass-cache/59fb0579c0803eea727968c98dc5a2535eabfa60/uniqueIdentifiers.scssc
DELETED
Binary file
|
frontend/.sass-cache/7a42ac8998aa7c8ba9ac04eeb0ae839b5c898de3/basicInformation.scssc
DELETED
Binary file
|
frontend/.sass-cache/7a42ac8998aa7c8ba9ac04eeb0ae839b5c898de3/productCategories.scssc
DELETED
Binary file
|
frontend/.sass-cache/83142009718bd5978df62c210f1221d16d96a9dd/advancedAttributes.scssc
DELETED
Binary file
|
frontend/.sass-cache/83142009718bd5978df62c210f1221d16d96a9dd/shipping.scssc
DELETED
Binary file
|
frontend/.sass-cache/8691e535e69e189796af67f73114fb9c83d3e1e3/advancedAttributes.scssc
DELETED
Binary file
|
frontend/.sass-cache/8691e535e69e189796af67f73114fb9c83d3e1e3/detailedInformation.scssc
DELETED
Binary file
|
frontend/.sass-cache/98eff1feffa48ac878eefb0682a97fef76be0920/common.scssc
DELETED
Binary file
|
frontend/.sass-cache/98eff1feffa48ac878eefb0682a97fef76be0920/styles.scssc
DELETED
Binary file
|
frontend/.sass-cache/a5847f4bee0f85a5055f3ae124f32b0d1d6c1685/categoryMapper.scssc
DELETED
Binary file
|
frontend/.sass-cache/be652ce12cf55d407d37b54be031acf64008ba1b/basicInformation.scssc
DELETED
Binary file
|
frontend/.sass-cache/c0fa2026c2e5c0de4b27eb6d0e10642433a23d40/basicInformation.scssc
DELETED
Binary file
|
frontend/.sass-cache/c0fa2026c2e5c0de4b27eb6d0e10642433a23d40/detailedInformation.scssc
DELETED
Binary file
|
frontend/.sass-cache/eff9f42b8d50360960249617449f0a81611d4f48/categoryMapper.scssc
DELETED
Binary file
|
frontend/.sass-cache/f5538c7683a05e133bbb60616c8fd20f4f6c3b9a/categorySelector.scssc
DELETED
Binary file
|
frontend/.sass-cache/fa29827343a974f0ae49e77fc20d63f4e80aaca2/detailedInformation.scssc
DELETED
Binary file
|
frontend/.sass-cache/fa29827343a974f0ae49e77fc20d63f4e80aaca2/mapping.scssc
DELETED
Binary file
|
frontend/Gruntfile.js
DELETED
@@ -1,144 +0,0 @@
|
|
1 |
-
/*jslint node: true */
|
2 |
-
"use strict";
|
3 |
-
|
4 |
-
|
5 |
-
module.exports = function(grunt) {
|
6 |
-
|
7 |
-
grunt.initConfig({
|
8 |
-
pkg: grunt.file.readJSON('package.json'),
|
9 |
-
|
10 |
-
uglify: {
|
11 |
-
dist: {
|
12 |
-
files: {
|
13 |
-
'../dist/app.min.js': [ '../dist/app.js' ]
|
14 |
-
},
|
15 |
-
options: {
|
16 |
-
mangle: true
|
17 |
-
}
|
18 |
-
}
|
19 |
-
},
|
20 |
-
|
21 |
-
html2js: {
|
22 |
-
dist: {
|
23 |
-
src: [ 'src/**/*.tpl.html' ],
|
24 |
-
dest: 'tmp/templates.js'
|
25 |
-
}
|
26 |
-
},
|
27 |
-
|
28 |
-
clean: {
|
29 |
-
temp: {
|
30 |
-
src: [ 'tmp' ]
|
31 |
-
}
|
32 |
-
},
|
33 |
-
|
34 |
-
concat: {
|
35 |
-
dist: {
|
36 |
-
src: [
|
37 |
-
//NOTE: Tipsy is already loaded in admin js, if we remove it from there don't forget to
|
38 |
-
// add it here
|
39 |
-
'node_modules/angular/angular.js',
|
40 |
-
'node_modules/ng-slide-down/dist/ng-slide-down.js',
|
41 |
-
'node_modules/angular-animate/angular-animate.js',
|
42 |
-
'node_modules/angular-chosen-localytics/dist/angular-chosen.js',
|
43 |
-
'node_modules/angular-sanitize/angular-sanitize.js',
|
44 |
-
'node_modules/dotjem-angular-tree/src/directives/dxTree.js',
|
45 |
-
'node_modules/@iamadamjowett/angular-click-outside/clickoutside.directive.js',
|
46 |
-
'src/app.js',
|
47 |
-
'src/**/*.js',
|
48 |
-
'tmp/*.js'
|
49 |
-
],
|
50 |
-
dest: '../dist/app.js'
|
51 |
-
},
|
52 |
-
css: {
|
53 |
-
src: ['tmp/**/*.css'],
|
54 |
-
dest: '../dist/styles.css'
|
55 |
-
}
|
56 |
-
},
|
57 |
-
|
58 |
-
connect: {
|
59 |
-
server: {
|
60 |
-
options: {
|
61 |
-
hostname: 'localhost',
|
62 |
-
port: 8080
|
63 |
-
}
|
64 |
-
}
|
65 |
-
},
|
66 |
-
|
67 |
-
watch: {
|
68 |
-
dev: {
|
69 |
-
files: [ 'Gruntfile.js', 'src/**/*.js', 'src/**/*.html', 'src/**/*.scss' ],
|
70 |
-
tasks: [ 'html2js:dist', 'sass', 'concat:css', 'concat:dist', 'clean:temp', 'package' ],
|
71 |
-
options: {
|
72 |
-
atBegin: true,
|
73 |
-
livereload:true
|
74 |
-
}
|
75 |
-
},
|
76 |
-
min: {
|
77 |
-
files: [ 'Gruntfile.js', 'src/*.js', '*.html' ],
|
78 |
-
tasks: [ 'jshint', 'karma:unit', 'html2js:dist', 'concat:dist', 'clean:temp', 'uglify:dist' ],
|
79 |
-
options: {
|
80 |
-
atBegin: true
|
81 |
-
}
|
82 |
-
}
|
83 |
-
},
|
84 |
-
|
85 |
-
compress: {
|
86 |
-
dist: {
|
87 |
-
options: {
|
88 |
-
archive: '../dist/<%= pkg.name %>-<%= pkg.version %>.zip'
|
89 |
-
},
|
90 |
-
files: [{
|
91 |
-
src: [ 'index.html' ],
|
92 |
-
dest: '/'
|
93 |
-
}, {
|
94 |
-
src: [ '../dist/**' ],
|
95 |
-
dest: '../dist/'
|
96 |
-
}, {
|
97 |
-
src: [ 'assets/**' ],
|
98 |
-
dest: 'assets/'
|
99 |
-
}, {
|
100 |
-
src: [ 'libs/**' ],
|
101 |
-
dest: 'libs/'
|
102 |
-
}]
|
103 |
-
}
|
104 |
-
},
|
105 |
-
sass: {
|
106 |
-
files: {
|
107 |
-
expand: true,
|
108 |
-
cwd: 'src',
|
109 |
-
src: ['**/*.scss'],
|
110 |
-
dest: 'tmp/',
|
111 |
-
ext: '.css'
|
112 |
-
}
|
113 |
-
},
|
114 |
-
karma: {
|
115 |
-
options: {
|
116 |
-
configFile: 'config/karma.conf.js'
|
117 |
-
},
|
118 |
-
unit: {
|
119 |
-
singleRun: true
|
120 |
-
},
|
121 |
-
|
122 |
-
continuous: {
|
123 |
-
singleRun: false,
|
124 |
-
autoWatch: true
|
125 |
-
}
|
126 |
-
}
|
127 |
-
});
|
128 |
-
|
129 |
-
grunt.loadNpmTasks('grunt-contrib-watch');
|
130 |
-
grunt.loadNpmTasks('grunt-contrib-clean');
|
131 |
-
grunt.loadNpmTasks('grunt-contrib-connect');
|
132 |
-
grunt.loadNpmTasks('grunt-contrib-compress');
|
133 |
-
grunt.loadNpmTasks('grunt-contrib-concat');
|
134 |
-
grunt.loadNpmTasks('grunt-contrib-uglify');
|
135 |
-
grunt.loadNpmTasks('grunt-html2js');
|
136 |
-
grunt.loadNpmTasks('grunt-contrib-watch');
|
137 |
-
grunt.loadNpmTasks('grunt-bower-task');
|
138 |
-
grunt.loadNpmTasks('grunt-contrib-sass');
|
139 |
-
|
140 |
-
grunt.registerTask('dev', ['connect:server', 'watch:dev' ]);
|
141 |
-
grunt.registerTask('test', [ 'bower', 'jshint', 'karma:continuous' ]);
|
142 |
-
grunt.registerTask('minified', ['connect:server', 'watch:min' ]);
|
143 |
-
grunt.registerTask('package', [ 'html2js:dist', 'sass', 'concat:css', 'concat:dist', 'clean:temp', 'uglify:dist']);
|
144 |
-
};
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
frontend/package.json
DELETED
@@ -1,36 +0,0 @@
|
|
1 |
-
{
|
2 |
-
"name": "wpae-frontend",
|
3 |
-
"version": "1.0.0",
|
4 |
-
"description": "WordPress All Export Frontend Build Script",
|
5 |
-
"main": "index.js",
|
6 |
-
"scripts": {
|
7 |
-
"test": "echo \"Error: no test specified\" && exit 1"
|
8 |
-
},
|
9 |
-
"author": "Ovidiu Maghetiu",
|
10 |
-
"license": "ISC",
|
11 |
-
"devDependencies": {
|
12 |
-
"grunt": "^1.0.1",
|
13 |
-
"grunt-bower-task": "^0.4.0",
|
14 |
-
"grunt-contrib-clean": "^1.0.0",
|
15 |
-
"grunt-contrib-compress": "^1.3.0",
|
16 |
-
"grunt-contrib-concat": "^1.0.1",
|
17 |
-
"grunt-contrib-uglify": "^2.0.0",
|
18 |
-
"grunt-contrib-watch": "^1.0.0",
|
19 |
-
"grunt-html2js": "^0.3.6",
|
20 |
-
"grunt-ng-annotate": "^2.0.2",
|
21 |
-
"grunt-serve": "^0.1.6",
|
22 |
-
"grunt-contrib-connect": "^1.0.2"
|
23 |
-
},
|
24 |
-
"dependencies": {
|
25 |
-
"@iamadamjowett/angular-click-outside": "^2.10.1",
|
26 |
-
"angucomplete-alt": "^2.5.0",
|
27 |
-
"angular": "^1.5.8",
|
28 |
-
"angular-sanitize": "^1.5.8",
|
29 |
-
"dotjem-angular-tree": "git+https://github.com/dotJEM/angular-tree.git",
|
30 |
-
"grunt-contrib-sass": "^1.0.0",
|
31 |
-
"install": "^0.8.2",
|
32 |
-
"jquery.tipsy": "^1.0.3",
|
33 |
-
"ng-slide-down": "^0.4.2",
|
34 |
-
"npm": "^3.10.9"
|
35 |
-
}
|
36 |
-
}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
frontend/src/advancedAttributes/advancedAttributes.controller.js
DELETED
@@ -1,9 +0,0 @@
|
|
1 |
-
GoogleMerchants.controller('advancedAttributesController', ['$scope', '$log', 'attributesService', function($scope, $log, attributesService){
|
2 |
-
|
3 |
-
$scope.attributes = [];
|
4 |
-
|
5 |
-
$scope.cats = [];
|
6 |
-
|
7 |
-
$scope.attributes = attributesService.getAttributes();
|
8 |
-
|
9 |
-
}]);
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
frontend/src/advancedAttributes/advancedAttributes.directive.js
DELETED
@@ -1,10 +0,0 @@
|
|
1 |
-
GoogleMerchants.directive('advancedAttributes', function() {
|
2 |
-
return {
|
3 |
-
restrict: 'E',
|
4 |
-
scope: {
|
5 |
-
'advancedAttributes' : '=information'
|
6 |
-
},
|
7 |
-
templateUrl: 'advancedAttributes/advancedAttributes.tpl.html',
|
8 |
-
controller: 'advancedAttributesController'
|
9 |
-
};
|
10 |
-
});
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
frontend/src/advancedAttributes/advancedAttributes.scss
DELETED
@@ -1,9 +0,0 @@
|
|
1 |
-
#advanced-attributes {
|
2 |
-
hr {
|
3 |
-
margin-top: 30px;
|
4 |
-
}
|
5 |
-
|
6 |
-
h3.inner-title {
|
7 |
-
color: #425e99;
|
8 |
-
}
|
9 |
-
}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
frontend/src/advancedAttributes/advancedAttributes.tpl.html
DELETED
@@ -1,156 +0,0 @@
|
|
1 |
-
<div class="wpallexport-collapsed wpallexport-section" ng-class="{closed: !advancedAttributes.open }">
|
2 |
-
<div class="wpallexport-content-section">
|
3 |
-
<div class="wpallexport-collapsed-header disable-jquery"
|
4 |
-
ng-click="advancedAttributes.open = !advancedAttributes.open">
|
5 |
-
<h3>Advanced Attributes</h3>
|
6 |
-
</div>
|
7 |
-
<div class="wpallexport-collapsed-content" id="advanced-attributes"
|
8 |
-
ng-slide-down="advancedAttributes.open" duration="0.5">
|
9 |
-
<div class="wpallexport-collapsed-content-inner">
|
10 |
-
<h3 class="inner-title">Product Type</h3>
|
11 |
-
<h4>Multipack</h4>
|
12 |
-
<p>
|
13 |
-
Multipacks are packages that include several identical products to create a larger unit of sale,
|
14 |
-
submitted as a single item.
|
15 |
-
For example, if the product for sale is a 6-pack of soda, the multipack value would be 6.
|
16 |
-
</p>
|
17 |
-
<div class="input">
|
18 |
-
<label><input type="text" ng-model="advancedAttributes.multipack" class="wpae-default-input" droppable/></label>
|
19 |
-
</div>
|
20 |
-
|
21 |
-
<h4>Adult</h4>
|
22 |
-
<div class="input">
|
23 |
-
<label><input type="radio" ng-model="advancedAttributes.adult" value="no"/>False</label>
|
24 |
-
</div>
|
25 |
-
<div class="input">
|
26 |
-
<label><input type="radio" ng-model="advancedAttributes.adult" value="yes"/>True</label>
|
27 |
-
</div>
|
28 |
-
<div class="input">
|
29 |
-
<label><input type="radio" ng-model="advancedAttributes.adult" value="customValue"/>Custom data</label>
|
30 |
-
<div ng-slide-down="advancedAttributes.adult == 'customValue'" duration="0.2" class="input inner">
|
31 |
-
<input type="text" class="wpae-default-input" ng-model="advancedAttributes.adultCV" droppable />
|
32 |
-
</div>
|
33 |
-
</div>
|
34 |
-
|
35 |
-
<h3 class="inner-title">Adwords & Shopping Campaigns</h3>
|
36 |
-
<h4>Adwords Redirect</h4>
|
37 |
-
<p>If provided, make sure that the URL redirects to the same URL as given in the 'link' attribute.</p>
|
38 |
-
<div class="input">
|
39 |
-
<input type="text" class="wpae-default-input" ng-model="advancedAttributes.adwordsRedirect" droppable />
|
40 |
-
</div>
|
41 |
-
|
42 |
-
<h4>Custom Labels</h4>
|
43 |
-
<p>
|
44 |
-
You can use custom labels to subdivide products in your campaign using any values
|
45 |
-
of your choosing. For example, you can use custom labels to indicate that products
|
46 |
-
are seasonal, on clearance, best sellers, etc. (<a href="https://support.google.com/adwords/answer/6275295" target="_blank">Learn more about how to set up Shopping campaigns.</a>)
|
47 |
-
</p>
|
48 |
-
<div style="margin-top:10px;">Custom Label 0</div>
|
49 |
-
<div class="input">
|
50 |
-
<input type="text" class="wpae-default-input" ng-model="advancedAttributes.customLabel0" droppable />
|
51 |
-
<a href="" class="wpae-field-mapping" ng-click="showCustomLabel0Mappings=true">Field Options...</a>
|
52 |
-
<div style="position: relative">
|
53 |
-
<mapping mappings="advancedAttributes.customLabel0Mappings" show="showCustomLabel0Mappings" context="text" />
|
54 |
-
</div>
|
55 |
-
</div>
|
56 |
-
<div style="margin-top:10px;">Custom Label 1</div>
|
57 |
-
<div class="input">
|
58 |
-
<input type="text" class="wpae-default-input" ng-model="advancedAttributes.customLabel1" droppable />
|
59 |
-
<a href="" class="wpae-field-mapping" ng-click="showCustomLabel1Mappings=true">Field Options...</a>
|
60 |
-
<div style="position: relative">
|
61 |
-
<mapping mappings="advancedAttributes.customLabel1Mappings" show="showCustomLabel1Mappings" context="text" />
|
62 |
-
</div>
|
63 |
-
</div>
|
64 |
-
<div style="margin-top:10px;">Custom Label 2</div>
|
65 |
-
<div class="input">
|
66 |
-
<input type="text" class="wpae-default-input" ng-model="advancedAttributes.customLabel2" droppable />
|
67 |
-
<a href="" class="wpae-field-mapping" ng-click="showCustomLabel2Mappings=true">Field Options...</a>
|
68 |
-
<div style="position: relative">
|
69 |
-
<mapping mappings="advancedAttributes.customLabel2Mappings" show="showCustomLabel2Mappings" context="text" />
|
70 |
-
</div>
|
71 |
-
</div>
|
72 |
-
<div style="margin-top:10px;">Custom Label 3</div>
|
73 |
-
<div class="input">
|
74 |
-
<input type="text" class="wpae-default-input" ng-model="advancedAttributes.customLabel3" droppable />
|
75 |
-
<a href="" class="wpae-field-mapping" ng-click="showCustomLabel3Mappings=true">Field Options...</a>
|
76 |
-
<div style="position: relative">
|
77 |
-
<mapping mappings="advancedAttributes.customLabel3Mappings" show="showCustomLabel3Mappings" context="text" />
|
78 |
-
</div>
|
79 |
-
</div>
|
80 |
-
<div style="margin-top:10px;">Custom Label 4</div>
|
81 |
-
<div class="input">
|
82 |
-
<input type="text" class="wpae-default-input" ng-model="advancedAttributes.customLabel4" droppable />
|
83 |
-
<a href="" class="wpae-field-mapping" ng-click="showCustomLabel4Mappings=true">Field Options...</a>
|
84 |
-
<div style="position: relative">
|
85 |
-
<mapping mappings="advancedAttributes.customLabel4Mappings" show="showCustomLabel4Mappings" context="text" />
|
86 |
-
</div>
|
87 |
-
</div>
|
88 |
-
|
89 |
-
<hr/>
|
90 |
-
|
91 |
-
<h3 class="inner-title">Unit Prices</h3>
|
92 |
-
<p>
|
93 |
-
These attributes allow you to submit pricing for products that rely on unit pricing.
|
94 |
-
The 'unit pricing measure' attribute defines the measure and dimension of an item (e.g. 150g).
|
95 |
-
The 'unit pricing base measure attribute specifies your preference of the denominator of the unit price (e.g. 100g).
|
96 |
-
</p>
|
97 |
-
<p>
|
98 |
-
For example, if the 'price' is 3 USD, 'unit pricing measure' is 150g and 'unit pricing base measure' is 100g, the unit price would be '2 USD/200g'.
|
99 |
-
</p>
|
100 |
-
|
101 |
-
<h4>Unit Pricing Measure</h4>
|
102 |
-
<div class="input">
|
103 |
-
<input type="text" ng-model="advancedAttributes.unitPricingMeasure" class="wpae-default-input" droppable />
|
104 |
-
</div>
|
105 |
-
<h4>Unit Pricing Base Measure</h4>
|
106 |
-
<div class="input">
|
107 |
-
<input type="text" ng-model="advancedAttributes.unitPricingBaseMeasure" class="wpae-default-input" droppable />
|
108 |
-
<select style="width: 170px;" ng-model="advancedAttributes.unitPricingBaseMeasureUnit">
|
109 |
-
<option value="kg">Kilograms (kg)</option>
|
110 |
-
<option value="g">Ounces (oz)</option>
|
111 |
-
<option value="lb">Pounds (lb)</option>
|
112 |
-
<option value="mg">Milligrams (mg)</option>
|
113 |
-
<option value="g">Grams (g)</option>
|
114 |
-
</select>
|
115 |
-
</div>
|
116 |
-
<hr/>
|
117 |
-
<h3 class="inner-title">Additional Attributes</h3>
|
118 |
-
<h4>Expiration Date</h4>
|
119 |
-
<p>
|
120 |
-
This is the date that an item listing will expire. If you do not provide this attribute, items
|
121 |
-
will expire and no longer appear in Google Shopping results after 30 days.
|
122 |
-
<strong>You cannot use thi attribute to extend the expiration period to longer than 30 days.</strong>
|
123 |
-
</p>
|
124 |
-
<div class="input">
|
125 |
-
<input type="text" class="wpae-default-input" ng-model="advancedAttributes.expirationDate" droppable />
|
126 |
-
</div>
|
127 |
-
|
128 |
-
<h4>Energy Efficiency Class</h4>
|
129 |
-
<p>
|
130 |
-
This attribute allows you to submit the energy label for your applicable products in feeds targeting
|
131 |
-
European Union countries and switzerland.
|
132 |
-
</p>
|
133 |
-
<div class="input">
|
134 |
-
<input type="text" class="wpae-default-input" ng-model="advancedAttributes.energyEfficiencyClass" droppable />
|
135 |
-
<a href="" class="wpae-field-mapping" ng-click="showEnergyEfficiencyMappings=true">Field Options...</a>
|
136 |
-
<div style="position: relative">
|
137 |
-
<mapping mappings="advancedAttributes.energyEfficiencyClassMappings" show="showEnergyEfficiencyMappings" />
|
138 |
-
</div>
|
139 |
-
</div>
|
140 |
-
<h4>Promotion ID</h4>
|
141 |
-
<p>
|
142 |
-
If using Merchant Promotions, the 'promotion id' attribute is used in both your products
|
143 |
-
feed and your promotions feed to match products to promotions across the two feeds.
|
144 |
-
</p>
|
145 |
-
<div class="input">
|
146 |
-
<input type="text" class="wpae-default-input" ng-model="advancedAttributes.promotionId" droppable />
|
147 |
-
<a href="" class="wpae-field-mapping" ng-click="showPromotionIdMappings=true">Field Options...</a>
|
148 |
-
<div style="position: relative">
|
149 |
-
<mapping mappings="advancedAttributes.promotionIdMappings" show="showPromotionIdMappings" />
|
150 |
-
</div>
|
151 |
-
</div>
|
152 |
-
|
153 |
-
</div>
|
154 |
-
</div>
|
155 |
-
</div>
|
156 |
-
</div>
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
frontend/src/app.js
DELETED
@@ -1,7 +0,0 @@
|
|
1 |
-
var GoogleMerchants = angular.module('GoogleMerchants', ['templates-dist','dotjem.angular.tree', 'ngSanitize', 'ngAnimate', 'ng-slide-down', 'angular-click-outside']);
|
2 |
-
|
3 |
-
GoogleMerchants.constant('BACKEND', ajaxurl+'?action=wpae_api&q=');
|
4 |
-
|
5 |
-
GoogleMerchants.filter('safe', ['$sce', function($sce) {
|
6 |
-
return $sce.trustAsHtml;
|
7 |
-
}]);
|
|
|
|
|
|
|
|
|
|
|
|
|
|
frontend/src/availabilityPrice/availabilityPrice.controller.js
DELETED
@@ -1,5 +0,0 @@
|
|
1 |
-
GoogleMerchants.controller('availabilityPriceController', ['$scope', 'currencyService', function($scope, currencyService){
|
2 |
-
|
3 |
-
$scope.currency = currencyService.getCurrency();
|
4 |
-
|
5 |
-
}]);
|
|
|
|
|
|
|
|
|
|
frontend/src/availabilityPrice/availabilityPrice.directive.js
DELETED
@@ -1,10 +0,0 @@
|
|
1 |
-
GoogleMerchants.directive('availabilityPrice', function() {
|
2 |
-
return {
|
3 |
-
restrict: 'E',
|
4 |
-
scope: {
|
5 |
-
'availabilityPrice' : '=information'
|
6 |
-
},
|
7 |
-
templateUrl: 'availabilityPrice/availabilityPrice.tpl.html',
|
8 |
-
controller: 'availabilityPriceController'
|
9 |
-
};
|
10 |
-
});
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
frontend/src/availabilityPrice/availabilityPrice.scss
DELETED
@@ -1,27 +0,0 @@
|
|
1 |
-
#availability-price {
|
2 |
-
|
3 |
-
.input.checkbox {
|
4 |
-
padding-left: 4px;
|
5 |
-
}
|
6 |
-
|
7 |
-
.input.inner {
|
8 |
-
margin-left: 10px;
|
9 |
-
}
|
10 |
-
|
11 |
-
.input.inner h4 {
|
12 |
-
margin-top: 5px;
|
13 |
-
}
|
14 |
-
|
15 |
-
h4 {
|
16 |
-
margin-bottom: 5px;
|
17 |
-
}
|
18 |
-
|
19 |
-
.input {
|
20 |
-
margin-bottom: 5px;
|
21 |
-
}
|
22 |
-
|
23 |
-
.open-indicator {
|
24 |
-
display: inline-block;
|
25 |
-
width: 7px;
|
26 |
-
}
|
27 |
-
}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
frontend/src/availabilityPrice/availabilityPrice.tpl.html
DELETED
@@ -1,137 +0,0 @@
|
|
1 |
-
<div class="wpallexport-collapsed wpallexport-section" ng-class="{closed: !availabilityPrice.open}">
|
2 |
-
<div class="wpallexport-content-section">
|
3 |
-
<div class="wpallexport-collapsed-header disable-jquery" ng-click="availabilityPrice.open = !availabilityPrice.open">
|
4 |
-
<h3>Availability & Price</h3>
|
5 |
-
</div>
|
6 |
-
<div class="wpallexport-collapsed-content" id="availability-price" ng-slide-down="availabilityPrice.open" duration="0.5">
|
7 |
-
<div class="wpallexport-collapsed-content-inner">
|
8 |
-
<h4>Price</h4>
|
9 |
-
<div class="input">
|
10 |
-
<label><input type="radio" ng-model="availabilityPrice.price" value="useProductPrice" /> Use the product's price</label>
|
11 |
-
</div>
|
12 |
-
<div class="input">
|
13 |
-
<label><input type="radio" ng-model="availabilityPrice.price" value="customValue" /> Custom data</label>
|
14 |
-
|
15 |
-
<div class="input inner" ng-slide-down="availabilityPrice.price == 'customValue'" duration="0.2">
|
16 |
-
<input type="text" class="wpae-default-input" ng-model="availabilityPrice.priceCV" droppable />
|
17 |
-
</div>
|
18 |
-
</div>
|
19 |
-
|
20 |
-
<div class="input inner">
|
21 |
-
<a href="" ng-click="availabilityPrice.adjustPrice = !availabilityPrice.adjustPrice" class="adjust-price-link">
|
22 |
-
<span class="open-indicator" ng-if="availabilityPrice.adjustPrice">-</span>
|
23 |
-
<span class="open-indicator" ng-if="!availabilityPrice.adjustPrice">+</span> Adjust Price
|
24 |
-
</a>
|
25 |
-
<div ng-slide-down="availabilityPrice.adjustPrice" class="adjust-price" duration="0.2">
|
26 |
-
<div class="input">
|
27 |
-
<input type="text" class="wpae-default-input" ng-model="availabilityPrice.adjustPriceValue" droppable /><select ng-model="availabilityPrice.adjustPriceType">
|
28 |
-
<option value="%">%</option>
|
29 |
-
<option value="USD">{{currency}}</option>
|
30 |
-
</select>
|
31 |
-
|
32 |
-
<div ng-show="availabilityPrice.adjustPriceType == '%'" class="tooltip-container">
|
33 |
-
<a href="#" ng-cloak="" class="wpallexport-help"
|
34 |
-
tipsy="Leave blank or enter in 100% to keep the price as is. Enter in 110% to markup by 10%. Enter in 50% to cut prices in half.">?</a>
|
35 |
-
</div>
|
36 |
-
<div ng-show="availabilityPrice.adjustPriceType == 'USD'" class="tooltip-container">
|
37 |
-
<a href="#" ng-cloak="" class="wpallexport-help"
|
38 |
-
tipsy="Enter a negative number to reduce prices.">?</a>
|
39 |
-
</div>
|
40 |
-
</div>
|
41 |
-
</div>
|
42 |
-
</div>
|
43 |
-
<h4>Sale Price</h4>
|
44 |
-
<div class="input">
|
45 |
-
<label><input type="radio" ng-model="availabilityPrice.salePrice" value="useProductSalePrice"/>Use the product's sale price</label>
|
46 |
-
</div>
|
47 |
-
<div class="input">
|
48 |
-
<div class="input">
|
49 |
-
<label><input type="radio" ng-model="availabilityPrice.salePrice" value="customValue" />Custom data</label>
|
50 |
-
<div class="input inner" ng-slide-down="availabilityPrice.salePrice == 'customValue'" duration="0.2">
|
51 |
-
<input type="text" class="wpae-default-input" ng-model="availabilityPrice.salePriceCV" droppable/>
|
52 |
-
</div>
|
53 |
-
</div>
|
54 |
-
</div>
|
55 |
-
<div class="input inner">
|
56 |
-
<a href="" ng-click="availabilityPrice.adjustSalePrice = !availabilityPrice.adjustSalePrice" ng-init="availabilityPrice.adjustSalePrice= false" class="adjust-price-link">
|
57 |
-
<span class="open-indicator" ng-if="availabilityPrice.adjustSalePrice">-</span>
|
58 |
-
<span class="open-indicator" ng-if="!availabilityPrice.adjustSalePrice">+</span> Adjust Sale Price
|
59 |
-
</a>
|
60 |
-
<div ng-slide-down="availabilityPrice.adjustSalePrice" class="adjust-price" duration="0.2">
|
61 |
-
<div class="input">
|
62 |
-
<input type="text" class="wpae-default-input" ng-model="availabilityPrice.adjustSalePriceValue" droppable /><select ng-model="availabilityPrice.adjustSalePriceType">
|
63 |
-
<option value="%">%</option>
|
64 |
-
<option value="USD">{{currency}}</option>
|
65 |
-
</select>
|
66 |
-
<div ng-show="availabilityPrice.adjustSalePriceType == '%'" class="tooltip-container">
|
67 |
-
<a href="#" ng-cloak="" class="wpallexport-help"
|
68 |
-
tipsy="Leave blank or enter in 100% to keep the price as is. Enter in 110% to markup by 10%. Enter in 50% to cut prices in half.">?</a>
|
69 |
-
</div>
|
70 |
-
<div ng-show="availabilityPrice.adjustSalePriceType == 'USD'" class="tooltip-container">
|
71 |
-
<a href="#" ng-cloak="" class="wpallexport-help"
|
72 |
-
tipsy="Enter a negative number to reduce prices.">?</a>
|
73 |
-
</div>
|
74 |
-
</div>
|
75 |
-
</div>
|
76 |
-
</div>
|
77 |
-
<h4>Availability</h4>
|
78 |
-
<div class="input">
|
79 |
-
<label><input type="radio" ng-model="availabilityPrice.availability" value="useWooCommerceStockValues"/>Use WooCommerce stock values</label>
|
80 |
-
</div>
|
81 |
-
<div class="input">
|
82 |
-
<label><input type="radio" ng-model="availabilityPrice.availability" value="customValue" />Custom data</label>
|
83 |
-
<div class="input inner" ng-slide-down="availabilityPrice.availability == 'customValue'" duration="0.2">
|
84 |
-
<input type="text" class="wpae-default-input" ng-model="availabilityPrice.availabilityCV" droppable />
|
85 |
-
</div>
|
86 |
-
</div>
|
87 |
-
</div>
|
88 |
-
<div class="wpallexport-collapsed wpallexport-section wpallexport-google-merchants-advanced-options" ng-init="advancedOptionsOpen = false" ng-class="{closed: !advancedOptionsOpen} ">
|
89 |
-
<div class="wpallexport-content-section rad0">
|
90 |
-
<div class="wpallexport-collapsed-header wpallexport-advanced-options-header disable-jquery" ng-click="advancedOptionsOpen = !advancedOptionsOpen">
|
91 |
-
<h3 class="advanced-options">Advanced Options</h3>
|
92 |
-
</div>
|
93 |
-
<div class="wpallexport-collapsed-content wpallexport-advanced-options-content" ng-slide-down="advancedOptionsOpen" duration="0.5">
|
94 |
-
<div class="wpallexport-collapsed-content-inner">
|
95 |
-
<div class="input">
|
96 |
-
<h4>Currency</h4>
|
97 |
-
<div class="input">
|
98 |
-
<div class="select-container" style="padding-left: 0px;">
|
99 |
-
<select class="custom-value" chosen ng-model="availabilityPrice.currency">
|
100 |
-
<option value="AUD">Australian Dollars (AUD)</option>
|
101 |
-
<option value="BRL">Brazilian Reals (BRL)</option>
|
102 |
-
<option value="GBP">British Pounds (GBP)</option>
|
103 |
-
<option value="CAD">Canadian Dollars (CAD)</option>
|
104 |
-
<option value="CZK">Czech Crowns (CZK)</option>
|
105 |
-
<option value="DKK">Danish Krone (DKK)</option>
|
106 |
-
<option value="EUR">Euros (EUR)</option>
|
107 |
-
<option value="INR">Indian Rupees (INR)</option>
|
108 |
-
<option value="JPY">Japanese Yen (JPY)</option>
|
109 |
-
<option value="MXN">Mexican Pesos (MXN)</option>
|
110 |
-
<option value="NZD">New Zealand Dollars (NZD)</option>
|
111 |
-
<option value="NOK">Norwegian Krone (NOK)</option>
|
112 |
-
<option value="PLN">Polish Złoty (PLN)</option>
|
113 |
-
<option value="RUB">Russian Rubles (RUB)</option>
|
114 |
-
<option value="SGD">Singapore Dollars (SGD)</option>
|
115 |
-
<option value="ZAR">South Africa Rand (ZAR)</option>
|
116 |
-
<option value="SEK">Swedish Krona (SEK)</option>
|
117 |
-
<option value="TRY">Turkish Lira (TRY)</option>
|
118 |
-
<option value="USD">United States Dollars (USD)</option>
|
119 |
-
</select>
|
120 |
-
</div>
|
121 |
-
</div>
|
122 |
-
<h4>Availability Date</h4>
|
123 |
-
<div class="input">
|
124 |
-
<input type="text" class="wpae-default-input" ng-model="availabilityPrice.availabilityDate" droppable />
|
125 |
-
</div>
|
126 |
-
<h4>Sale Price Effective Date</h4>
|
127 |
-
<div class="input">
|
128 |
-
<input type="text" class="wpae-default-input" ng-model="availabilityPrice.salePriceEffectiveDate" droppable />
|
129 |
-
</div>
|
130 |
-
</div>
|
131 |
-
</div>
|
132 |
-
</div>
|
133 |
-
</div>
|
134 |
-
</div>
|
135 |
-
</div>
|
136 |
-
</div>
|
137 |
-
</div>
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
frontend/src/basicInformation/basicInformation.controller.js
DELETED
@@ -1,3 +0,0 @@
|
|
1 |
-
GoogleMerchants.controller('basicInformationController', ['$scope', function($scope){
|
2 |
-
|
3 |
-
}]);
|
|
|
|
|
|
frontend/src/basicInformation/basicInformation.directive.js
DELETED
@@ -1,10 +0,0 @@
|
|
1 |
-
GoogleMerchants.directive('basicInformation', function() {
|
2 |
-
return {
|
3 |
-
restrict: 'E',
|
4 |
-
scope: {
|
5 |
-
'basicInformation' : '=information'
|
6 |
-
},
|
7 |
-
templateUrl: 'basicInformation/basicInformation.tpl.html',
|
8 |
-
controller: 'basicInformationController',
|
9 |
-
};
|
10 |
-
});
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
frontend/src/basicInformation/basicInformation.scss
DELETED
@@ -1,13 +0,0 @@
|
|
1 |
-
#basic-product-information{
|
2 |
-
.input.checkbox {
|
3 |
-
padding-left: 4px;
|
4 |
-
}
|
5 |
-
|
6 |
-
h4 {
|
7 |
-
margin-bottom: 5px;
|
8 |
-
}
|
9 |
-
|
10 |
-
.input {
|
11 |
-
margin-bottom: 5px;
|
12 |
-
}
|
13 |
-
}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
frontend/src/basicInformation/basicInformation.tpl.html
DELETED
@@ -1,123 +0,0 @@
|
|
1 |
-
<div class="wpallexport-collapsed wpallexport-section" ng-class="{closed: !basicInformation.open}">
|
2 |
-
<div class="wpallexport-content-section">
|
3 |
-
<div class="wpallexport-collapsed-header disable-jquery" ng-click="basicInformation.open = !basicInformation.open">
|
4 |
-
<h3>Basic Product Information</h3>
|
5 |
-
</div>
|
6 |
-
<div class="wpallexport-collapsed-content" id="basic-product-information" ng-slide-down="basicInformation.open" duration="0.5">
|
7 |
-
<div class="wpallexport-collapsed-content-inner">
|
8 |
-
|
9 |
-
<h4>Item Title</h4>
|
10 |
-
<div class="input">
|
11 |
-
<label><input type="radio" ng-model="basicInformation.itemTitle" value="productTitle"/>Use the product title</label>
|
12 |
-
</div>
|
13 |
-
<div class="input">
|
14 |
-
<label><input type="radio" ng-model="basicInformation.itemTitle" value="customValue" />Custom data</label>
|
15 |
-
<div class="input inner" ng-slide-down="basicInformation.itemTitle == 'customValue'" duration="0.2">
|
16 |
-
<input type="text" class="wpae-default-input" ng-model="basicInformation.itemTitleCV" droppable />
|
17 |
-
</div>
|
18 |
-
</div>
|
19 |
-
|
20 |
-
<div class="input checkbox" ng-if="basicInformation.hasVariations">
|
21 |
-
<label><input type="checkbox" ng-model="basicInformation.useParentTitleForVariableProducts" value="1" />For variable products, use the parent product title</label>
|
22 |
-
</div>
|
23 |
-
|
24 |
-
<h4>Item Description</h4>
|
25 |
-
<div class="input">
|
26 |
-
<label><input type="radio" ng-model="basicInformation.itemDescription" value="productDescription"/>Use the product description</label>
|
27 |
-
</div>
|
28 |
-
<div class="input">
|
29 |
-
<label><input type="radio" ng-model="basicInformation.itemDescription" value="productShortDescription"/>Use the product short description</label>
|
30 |
-
</div>
|
31 |
-
<div class="input">
|
32 |
-
<label><input type="radio" ng-model="basicInformation.itemDescription" value="customValue" />Custom data</label>
|
33 |
-
<div class="input inner" ng-slide-down="basicInformation.itemDescription == 'customValue'" duration="0.2">
|
34 |
-
<input type="text" class="wpae-default-input" ng-model="basicInformation.itemDescriptionCV" droppable />
|
35 |
-
</div>
|
36 |
-
</div>
|
37 |
-
|
38 |
-
<div class="input checkbox">
|
39 |
-
<label><input type="checkbox" ng-model="basicInformation.useVariationDescriptionForVariableProducts" value="1" />Use the variation description for variable products</label>
|
40 |
-
</div>
|
41 |
-
<div class="input checkbox inner" ng-slide-down="basicInformation.useVariationDescriptionForVariableProducts" duration="0.2">
|
42 |
-
<label><input type="checkbox" ng-model="basicInformation.useParentDescirptionIfThereIsNoVariationDescirption" value="1" />If there is no variation description, use the parent product description</label>
|
43 |
-
</div>
|
44 |
-
|
45 |
-
<h4>Link</h4>
|
46 |
-
<div class="input">
|
47 |
-
<label><input type="radio" ng-model="basicInformation.itemLink" value="productLink"/>Use the product permalink</label>
|
48 |
-
</div>
|
49 |
-
|
50 |
-
<div class="input">
|
51 |
-
<label><input type="radio" ng-model="basicInformation.itemLink" value="customValue" />Custom data</label>
|
52 |
-
<div class="input inner" ng-slide-down="basicInformation.itemLink == 'customValue'" duration="0.2">
|
53 |
-
<input type="text" class="wpae-default-input" ng-model="basicInformation.itemLinkCV" droppable />
|
54 |
-
</div>
|
55 |
-
</div>
|
56 |
-
|
57 |
-
<div class="input checkbox">
|
58 |
-
<label><input type="checkbox" ng-model="basicInformation.addVariationAttributesToProductUrl" />For variable products, add variation attributes to product URL</label>
|
59 |
-
</div>
|
60 |
-
|
61 |
-
<h4>Main Image Link</h4>
|
62 |
-
<div class="input">
|
63 |
-
<label><input type="radio" ng-model="basicInformation.itemImageLink" value="useProductFeaturedImage"/>Use product featured image</label>
|
64 |
-
</div>
|
65 |
-
|
66 |
-
<div class="input">
|
67 |
-
<label><input type="radio" ng-model="basicInformation.itemImageLink" value="customValue" />Custom data</label>
|
68 |
-
<div class="input inner" ng-slide-down="basicInformation.itemImageLink == 'customValue'" duration="0.2">
|
69 |
-
<input type="text" class="wpae-default-input" ng-model="basicInformation.itemImageLinkCV" droppable />
|
70 |
-
</div>
|
71 |
-
</div>
|
72 |
-
|
73 |
-
<div class="input checkbox">
|
74 |
-
<label><input type="checkbox" ng-model="basicInformation.useVariationImage" />For variable products, use variation image</label>
|
75 |
-
</div>
|
76 |
-
|
77 |
-
<div class="input checkbox inner" ng-slide-down="basicInformation.useVariationImage" duration="0.2">
|
78 |
-
<label><input type="checkbox" ng-model="basicInformation.useFeaturedImageIfThereIsNoVariationImage" value="1" />If there is no variation image, use the featured image</label>
|
79 |
-
</div>
|
80 |
-
|
81 |
-
<h4>Additional Image Link</h4>
|
82 |
-
<div class="input">
|
83 |
-
<label><input type="radio" ng-model="basicInformation.additionalImageLink" value="productImages"/>Use images from product gallery</label>
|
84 |
-
</div>
|
85 |
-
|
86 |
-
<div class="input">
|
87 |
-
<label><input type="radio" ng-model="basicInformation.additionalImageLink" value="customValue" />Custom data</label>
|
88 |
-
<div class="input inner" ng-slide-down="basicInformation.additionalImageLink == 'customValue'" duration="0.2">
|
89 |
-
<input type="text"class="wpae-default-input" ng-model="basicInformation.additionalImageLinkCV" droppable />
|
90 |
-
</div>
|
91 |
-
</div>
|
92 |
-
</div>
|
93 |
-
<div class="wpallexport-collapsed wpallexport-section wpallexport-google-merchants-advanced-options" ng-init="advancedOptionsOpen = false" ng-class="{closed: !advancedOptionsOpen}">
|
94 |
-
<div class="wpallexport-content-section rad0">
|
95 |
-
<div class="wpallexport-collapsed-header wpallexport-advanced-options-header disable-jquery" ng-click="advancedOptionsOpen = !advancedOptionsOpen">
|
96 |
-
<h3>Advanced Options</h3>
|
97 |
-
</div>
|
98 |
-
<div class="wpallexport-collapsed-content wpallexport-advanced-options-content" ng-slide-down="advancedOptionsOpen" duration="0.5">
|
99 |
-
<div class="wpallexport-collapsed-content-inner">
|
100 |
-
<div class="input">
|
101 |
-
<h4>Item ID</h4>
|
102 |
-
<div class="input">
|
103 |
-
<input type="text" class="wpae-default-input" ng-model="basicInformation.itemId" droppable />
|
104 |
-
</div>
|
105 |
-
<h4>Item Condition</h4>
|
106 |
-
<div class="input">
|
107 |
-
<input type="text" class="wpae-default-input" ng-model="basicInformation.condition" droppable />
|
108 |
-
<a href="" class="wpae-field-mapping" ng-click="showConditionMappings=true">Field Options...</a>
|
109 |
-
<mapping mappings="basicInformation.conditionMappings" show="showConditionMappings" context="condition" />
|
110 |
-
<a style="margin-top: 7px;" class="wpallexport-help" tipsy="The condition or state of the item. Google Shopping allows the promotion of quality second-hand items. There are only 3 accepted values: 'new', 'refurbished', and 'used'">?</a>
|
111 |
-
</div>
|
112 |
-
<h4>Mobile Link</h4>
|
113 |
-
<div class="input">
|
114 |
-
<input type="text" class="wpae-default-input" ng-model="basicInformation.mobileLink" droppable />
|
115 |
-
</div>
|
116 |
-
</div>
|
117 |
-
</div>
|
118 |
-
</div>
|
119 |
-
</div>
|
120 |
-
</div>
|
121 |
-
</div>
|
122 |
-
</div>
|
123 |
-
</div>
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
frontend/src/common.scss
DELETED
@@ -1,25 +0,0 @@
|
|
1 |
-
$accent-color: #40acad;
|
2 |
-
|
3 |
-
@mixin flexbox() {
|
4 |
-
display: -webkit-box;
|
5 |
-
display: -moz-box;
|
6 |
-
display: -ms-flexbox;
|
7 |
-
display: -webkit-flex;
|
8 |
-
display: flex;
|
9 |
-
}
|
10 |
-
|
11 |
-
@mixin flex($values) {
|
12 |
-
-webkit-box-flex: $values;
|
13 |
-
-moz-box-flex: $values;
|
14 |
-
-webkit-flex: $values;
|
15 |
-
-ms-flex: $values;
|
16 |
-
flex: $values;
|
17 |
-
}
|
18 |
-
|
19 |
-
@mixin order($val) {
|
20 |
-
-webkit-box-ordinal-group: $val;
|
21 |
-
-moz-box-ordinal-group: $val;
|
22 |
-
-ms-flex-order: $val;
|
23 |
-
-webkit-order: $val;
|
24 |
-
order: $val;
|
25 |
-
}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
frontend/src/common/angular-chosen.directive.js
DELETED
@@ -1,110 +0,0 @@
|
|
1 |
-
function chosen($timeout) {
|
2 |
-
var EVENTS, scope, linker, watchCollection;
|
3 |
-
|
4 |
-
/*
|
5 |
-
* List of events and the alias used for binding with angularJS
|
6 |
-
*/
|
7 |
-
EVENTS = [{
|
8 |
-
onChange: 'change'
|
9 |
-
}, {
|
10 |
-
onReady: 'chosen:ready'
|
11 |
-
}, {
|
12 |
-
onMaxSelected: 'chosen:maxselected'
|
13 |
-
}, {
|
14 |
-
onShowDropdown: 'chosen:showing_dropdown'
|
15 |
-
}, {
|
16 |
-
onHideDropdown: 'chosen:hiding_dropdown'
|
17 |
-
}, {
|
18 |
-
onNoResult: 'chosen:no_results'
|
19 |
-
}];
|
20 |
-
|
21 |
-
/*
|
22 |
-
* Items to be added in the scope of the directive
|
23 |
-
*/
|
24 |
-
scope = {
|
25 |
-
options: '=', // the options array
|
26 |
-
ngModel: '=', // the model to bind to,,
|
27 |
-
ngDisabled: '='
|
28 |
-
};
|
29 |
-
|
30 |
-
/*
|
31 |
-
* initialize the list of items
|
32 |
-
* to watch to trigger the chosen:updated event
|
33 |
-
*/
|
34 |
-
watchCollection = [];
|
35 |
-
Object.keys(scope).forEach(function (scopeName) {
|
36 |
-
watchCollection.push(scopeName);
|
37 |
-
});
|
38 |
-
|
39 |
-
/*
|
40 |
-
* Add the list of event handler of the chosen
|
41 |
-
* in the scope.
|
42 |
-
*/
|
43 |
-
EVENTS.forEach(function (event) {
|
44 |
-
var eventNameAlias = Object.keys(event)[0];
|
45 |
-
scope[eventNameAlias] = '=';
|
46 |
-
});
|
47 |
-
|
48 |
-
/* Linker for the directive */
|
49 |
-
linker = function ($scope, iElm, iAttr) {
|
50 |
-
var maxSelection = parseInt(iAttr.maxSelection, 10),
|
51 |
-
searchThreshold = parseInt(iAttr.searchThreshold, 10);
|
52 |
-
|
53 |
-
if (isNaN(maxSelection) || maxSelection === Infinity) {
|
54 |
-
maxSelection = undefined;
|
55 |
-
}
|
56 |
-
|
57 |
-
if (isNaN(searchThreshold) || searchThreshold === Infinity) {
|
58 |
-
searchThreshold = undefined;
|
59 |
-
}
|
60 |
-
|
61 |
-
var allowSingleDeselect = iElm.attr('allow-single-deselect') !== undefined ? true : false;
|
62 |
-
var noResultsText = iElm.attr('no-results-text') !== undefined ? iAttr.noResultsText : "No results found.";
|
63 |
-
|
64 |
-
iElm.chosen({
|
65 |
-
width: '100%',
|
66 |
-
max_selected_options: maxSelection,
|
67 |
-
disable_search_threshold: searchThreshold,
|
68 |
-
search_contains: true,
|
69 |
-
allow_single_deselect: allowSingleDeselect,
|
70 |
-
no_results_text: noResultsText
|
71 |
-
});
|
72 |
-
|
73 |
-
iElm.on('change', function () {
|
74 |
-
iElm.trigger('chosen:updated');
|
75 |
-
});
|
76 |
-
|
77 |
-
$scope.$watchGroup(watchCollection, function () {
|
78 |
-
$timeout(function () {
|
79 |
-
iElm.trigger('chosen:updated');
|
80 |
-
}, 100);
|
81 |
-
});
|
82 |
-
|
83 |
-
$scope.$on('chosen:updated', function() {
|
84 |
-
iElm.trigger('chosen:updated');
|
85 |
-
});
|
86 |
-
|
87 |
-
// assign event handlers
|
88 |
-
EVENTS.forEach(function (event) {
|
89 |
-
var eventNameAlias = Object.keys(event)[0];
|
90 |
-
|
91 |
-
if (typeof $scope[eventNameAlias] === 'function') { // check if the handler is a function
|
92 |
-
iElm.on(event[eventNameAlias], function (event) {
|
93 |
-
$scope.$apply(function () {
|
94 |
-
$scope[eventNameAlias](event);
|
95 |
-
});
|
96 |
-
}); // listen to the event triggered by chosen
|
97 |
-
}
|
98 |
-
});
|
99 |
-
};
|
100 |
-
|
101 |
-
// return the directive
|
102 |
-
return {
|
103 |
-
name: 'chosen',
|
104 |
-
scope: scope,
|
105 |
-
restrict: 'A',
|
106 |
-
link: linker
|
107 |
-
};
|
108 |
-
}
|
109 |
-
|
110 |
-
GoogleMerchants.directive('chosen', ['$timeout', chosen]);
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
frontend/src/common/attributes.service.js
DELETED
@@ -1,17 +0,0 @@
|
|
1 |
-
GoogleMerchants.factory('attributesService', ['$rootScope', '$q', '$log', 'wpHttp', function($rootScope, $q, $log, wpHttp){
|
2 |
-
|
3 |
-
var attributes = false;
|
4 |
-
|
5 |
-
var setAttributes = function(productAttributes) {
|
6 |
-
attributes = productAttributes;
|
7 |
-
};
|
8 |
-
|
9 |
-
var getAttributes = function() {
|
10 |
-
return attributes;
|
11 |
-
};
|
12 |
-
|
13 |
-
return {
|
14 |
-
setAttributes: setAttributes,
|
15 |
-
getAttributes: getAttributes
|
16 |
-
}
|
17 |
-
}]);
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
frontend/src/common/autodetect.directive.js
DELETED
@@ -1,21 +0,0 @@
|
|
1 |
-
GoogleMerchants.directive('autodetect', ['attributesService', function(attributesService) {
|
2 |
-
return {
|
3 |
-
restrict: 'A',
|
4 |
-
require: '^ngModel',
|
5 |
-
link: {
|
6 |
-
post: function (scope, element, attributes, ngModelCtrl) {
|
7 |
-
|
8 |
-
var autodetectValue = attributes.autodetect;
|
9 |
-
|
10 |
-
attributes = attributesService.getAttributes();
|
11 |
-
|
12 |
-
angular.forEach(attributes, function (attribute) {
|
13 |
-
if (attribute.label.toLowerCase() == autodetectValue.toLowerCase() || attribute.name.toLowerCase() == autodetectValue.toLowerCase()) {
|
14 |
-
ngModelCtrl.$setViewValue('{' + attribute.name + '}');
|
15 |
-
ngModelCtrl.$render();
|
16 |
-
}
|
17 |
-
})
|
18 |
-
}
|
19 |
-
}
|
20 |
-
};
|
21 |
-
}]);
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
frontend/src/common/cascade.directive.js
DELETED
@@ -1,35 +0,0 @@
|
|
1 |
-
GoogleMerchants.directive('cascade', [function() {
|
2 |
-
return {
|
3 |
-
restrict: 'A',
|
4 |
-
controller: ['$scope', function($scope) {
|
5 |
-
|
6 |
-
var uniqueId = function() {
|
7 |
-
return 'id-' + Math.random().toString(36).substr(2, 16);
|
8 |
-
};
|
9 |
-
|
10 |
-
$scope.$on('wpae.gender.changed', function(event, scopeId, selectedGender){
|
11 |
-
if($scope.$id != scopeId) {
|
12 |
-
$scope.node.selectedGender = selectedGender;
|
13 |
-
}
|
14 |
-
});
|
15 |
-
|
16 |
-
$scope.$on('wpae.ageGroup.changed', function(event, scopeId, selectedAgeGroup){
|
17 |
-
if($scope.$id != scopeId) {
|
18 |
-
$scope.node.selectedAgeGroup = selectedAgeGroup;
|
19 |
-
}
|
20 |
-
});
|
21 |
-
|
22 |
-
$scope.selectGender = function() {
|
23 |
-
$scope.$parent.$broadcast('wpae.gender.changed', $scope.$id, $scope.node.selectedGender);
|
24 |
-
};
|
25 |
-
|
26 |
-
$scope.selectAgeGroup = function() {
|
27 |
-
$scope.$parent.$broadcast('wpae.ageGroup.changed', $scope.$id, $scope.node.selectedAgeGroup);
|
28 |
-
};
|
29 |
-
|
30 |
-
}],
|
31 |
-
link: function (scope, element, attributes) {
|
32 |
-
scope.cascadeName = attributes.$attr.cascade;
|
33 |
-
}
|
34 |
-
};
|
35 |
-
}]);
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
frontend/src/common/contenteditable.directive.js
DELETED
@@ -1,31 +0,0 @@
|
|
1 |
-
GoogleMerchants.directive('contenteditable', ['$sce', function($sce) {
|
2 |
-
return {
|
3 |
-
restrict: 'A', // only activate on element attribute
|
4 |
-
require: '?ngModel', // get a hold of NgModelController
|
5 |
-
link: function(scope, element, attrs, ngModel) {
|
6 |
-
if (!ngModel) return; // do nothing if no ng-model
|
7 |
-
|
8 |
-
// Specify how UI should be updated
|
9 |
-
ngModel.$render = function() {
|
10 |
-
element.html($sce.getTrustedHtml(ngModel.$viewValue || ''));
|
11 |
-
};
|
12 |
-
|
13 |
-
// Listen for change events to enable binding
|
14 |
-
element.on('blur keyup change', function() {
|
15 |
-
scope.$evalAsync(read);
|
16 |
-
});
|
17 |
-
read(); // initialize
|
18 |
-
|
19 |
-
// Write data to the model
|
20 |
-
function read() {
|
21 |
-
var html = element.html();
|
22 |
-
// When we clear the content editable the browser leaves a <br> behind
|
23 |
-
// If strip-br attribute is provided then we strip this out
|
24 |
-
if (attrs.stripBr && html === '<br>') {
|
25 |
-
html = '';
|
26 |
-
}
|
27 |
-
ngModel.$setViewValue(html);
|
28 |
-
}
|
29 |
-
}
|
30 |
-
};
|
31 |
-
}]);
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
frontend/src/common/currency.service.js
DELETED
@@ -1,18 +0,0 @@
|
|
1 |
-
GoogleMerchants.factory('currencyService', [function(){
|
2 |
-
|
3 |
-
var internalCurrency = null;
|
4 |
-
var internalCurrencyCode = null;
|
5 |
-
|
6 |
-
return {
|
7 |
-
setCurrency: function(currencySymbol, currencyCode) {
|
8 |
-
internalCurrency = currencySymbol;
|
9 |
-
internalCurrencyCode = currencyCode;
|
10 |
-
},
|
11 |
-
getCurrency: function() {
|
12 |
-
return internalCurrency;
|
13 |
-
},
|
14 |
-
getCurrencyCode: function() {
|
15 |
-
return internalCurrencyCode;
|
16 |
-
}
|
17 |
-
}
|
18 |
-
}]);
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
frontend/src/common/droppable.directive.js
DELETED
@@ -1,85 +0,0 @@
|
|
1 |
-
GoogleMerchants.directive('droppable', [function() {
|
2 |
-
return {
|
3 |
-
restrict: 'A',
|
4 |
-
require: '^ngModel',
|
5 |
-
link: function (scope, element, attributes, ngModelCtrl) {
|
6 |
-
|
7 |
-
function placeCaretAtEnd(el) {
|
8 |
-
el.focus();
|
9 |
-
if (typeof window.getSelection != "undefined"
|
10 |
-
&& typeof document.createRange != "undefined") {
|
11 |
-
var range = document.createRange();
|
12 |
-
range.selectNodeContents(el);
|
13 |
-
range.collapse(false);
|
14 |
-
var sel = window.getSelection();
|
15 |
-
sel.removeAllRanges();
|
16 |
-
sel.addRange(range);
|
17 |
-
} else if (typeof document.body.createTextRange != "undefined") {
|
18 |
-
var textRange = document.body.createTextRange();
|
19 |
-
textRange.moveToElementText(el);
|
20 |
-
textRange.collapse(false);
|
21 |
-
textRange.select();
|
22 |
-
}
|
23 |
-
}
|
24 |
-
|
25 |
-
|
26 |
-
function processElementName($element, elementName){
|
27 |
-
|
28 |
-
if ( $element.find('input[name^=cc_type]').val().indexOf('image_') !== -1 )
|
29 |
-
{
|
30 |
-
elementName = 'Image ' + elementName;
|
31 |
-
}
|
32 |
-
if ( $element.find('input[name^=cc_type]').val().indexOf('attachment_') !== -1 )
|
33 |
-
{
|
34 |
-
elementName = 'Attachment ' + elementName;
|
35 |
-
}
|
36 |
-
return elementName;
|
37 |
-
}
|
38 |
-
|
39 |
-
var $element;
|
40 |
-
|
41 |
-
if(element[[0]].nodeName == 'STYLED-INPUT') {
|
42 |
-
$element = angular.element(element).find('div');
|
43 |
-
|
44 |
-
$element.droppable({
|
45 |
-
over: function(event, ui) {
|
46 |
-
jQuery('body').css('cursor','copy');
|
47 |
-
},
|
48 |
-
drop: function( event, ui ) {
|
49 |
-
|
50 |
-
var $droppedElement = ui.draggable.find('.custom_column');
|
51 |
-
var elementName = $droppedElement.find('input[name^=cc_name]').val();
|
52 |
-
elementName = processElementName($droppedElement, elementName);
|
53 |
-
$element.html($element.html() + '<strong>{' + elementName + '}</strong>​');
|
54 |
-
placeCaretAtEnd($element[0]);
|
55 |
-
$element.focus();
|
56 |
-
//ngModelCtrl.$setViewValue($element.val());
|
57 |
-
//ngModelCtrl.$render();
|
58 |
-
}
|
59 |
-
});
|
60 |
-
} else {
|
61 |
-
$element = angular.element(element);
|
62 |
-
|
63 |
-
$element.droppable({
|
64 |
-
over: function(event, ui) {
|
65 |
-
jQuery(this).css("cursor", "copy");
|
66 |
-
},
|
67 |
-
out: function(event, ui) {
|
68 |
-
jQuery(this).css("cursor", "initial");
|
69 |
-
},
|
70 |
-
drop: function( event, ui ) {
|
71 |
-
jQuery(this).css("cursor", "initial");
|
72 |
-
var $droppedElement = ui.draggable.find('.custom_column');
|
73 |
-
var elementName = $droppedElement.find('input[name^=cc_name]').val();
|
74 |
-
elementName = processElementName($droppedElement, elementName);
|
75 |
-
$element.val($element.val() + '{' + elementName + '}');
|
76 |
-
ngModelCtrl.$setViewValue($element.val());
|
77 |
-
ngModelCtrl.$render();
|
78 |
-
}
|
79 |
-
});
|
80 |
-
}
|
81 |
-
|
82 |
-
|
83 |
-
}
|
84 |
-
};
|
85 |
-
}]);
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
frontend/src/common/export.service.js
DELETED
@@ -1,41 +0,0 @@
|
|
1 |
-
GoogleMerchants.factory('exportService', ['$q', '$log', 'wpHttp', function($q, $log, wpHttp){
|
2 |
-
|
3 |
-
var getExport = function(id) {
|
4 |
-
|
5 |
-
var deferred = $q.defer();
|
6 |
-
|
7 |
-
var query = 'export/get';
|
8 |
-
|
9 |
-
if(id !== null) {
|
10 |
-
query = query + '&id='+id;
|
11 |
-
}
|
12 |
-
wpHttp.get(query).then(function(data){
|
13 |
-
deferred.resolve(data);
|
14 |
-
}, function(msg, code){
|
15 |
-
deferred.reject(msg,code);
|
16 |
-
$log.error('There was a problem getting the export');
|
17 |
-
});
|
18 |
-
|
19 |
-
return deferred.promise;
|
20 |
-
};
|
21 |
-
|
22 |
-
var saveExport = function(exportData) {
|
23 |
-
var deferred = $q.defer();
|
24 |
-
|
25 |
-
var url = 'export/save';
|
26 |
-
|
27 |
-
wpHttp.post(url , exportData).then(function(data){
|
28 |
-
deferred.resolve(data);
|
29 |
-
},function(msg,code){
|
30 |
-
deferred.reject(msg);
|
31 |
-
$log.error(msg,code);
|
32 |
-
});
|
33 |
-
|
34 |
-
return deferred.promise;
|
35 |
-
};
|
36 |
-
|
37 |
-
return {
|
38 |
-
getExport: getExport,
|
39 |
-
saveExport: saveExport
|
40 |
-
}
|
41 |
-
}]);
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
frontend/src/common/focusMeWhenEnabled.directive.js
DELETED
@@ -1,16 +0,0 @@
|
|
1 |
-
GoogleMerchants.directive('focusMeWhenEnabled', function($timeout) {
|
2 |
-
return {
|
3 |
-
priority: -1,
|
4 |
-
link: function(scope, element) {
|
5 |
-
scope.$watch(function() {
|
6 |
-
return scope.$eval(element.attr('ng-disabled')); //this will evaluate attribute value `{{}}``
|
7 |
-
}, function(newValue){
|
8 |
-
if(newValue == false) {
|
9 |
-
$timeout(function(){
|
10 |
-
element[0].focus();
|
11 |
-
});
|
12 |
-
}
|
13 |
-
});
|
14 |
-
}
|
15 |
-
};
|
16 |
-
});
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
frontend/src/common/googleCategoriesService.js
DELETED
@@ -1,20 +0,0 @@
|
|
1 |
-
GoogleMerchants.factory('googleCategoriesService', ['$rootScope', '$q', '$log', 'wpHttp', function($rootScope, $q, $log, wpHttp){
|
2 |
-
|
3 |
-
var searchCategories = function(searchQuery) {
|
4 |
-
return wpHttp.get('googleCategories/get&parent=0' + searchQuery);
|
5 |
-
};
|
6 |
-
|
7 |
-
var getChildCategories = function(parentId) {
|
8 |
-
return wpHttp.get('googleCategories/get&parent=' + parentId);
|
9 |
-
};
|
10 |
-
|
11 |
-
var categorySelected = function(category) {
|
12 |
-
$rootScope.$broadcast('wpae.category.selected', category);
|
13 |
-
};
|
14 |
-
|
15 |
-
return {
|
16 |
-
searchCategories: searchCategories,
|
17 |
-
getChildCategories: getChildCategories,
|
18 |
-
categorySelected: categorySelected
|
19 |
-
}
|
20 |
-
}]);
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
frontend/src/common/main.controller.js
DELETED
@@ -1,219 +0,0 @@
|
|
1 |
-
GoogleMerchants.controller('mainController', ['$scope', '$timeout', '$window', '$document', '$location', 'templateService', 'exportService', 'currencyService', 'attributesService', 'wpHttp', function ($scope, $timeout, $window, $document, $location, templateService, exportService, currencyService, attributesService, wpHttp) {
|
2 |
-
|
3 |
-
var defaultMappings = [{mapFrom : '', mapTo: ''}];
|
4 |
-
|
5 |
-
$scope.merchantsFeedData = {
|
6 |
-
|
7 |
-
basicInformation: {
|
8 |
-
open: true,
|
9 |
-
itemTitle: "productTitle",
|
10 |
-
hasVariations: true,
|
11 |
-
useParentTitleForVariableProducts: true,
|
12 |
-
additionalImageLink: "productImages",
|
13 |
-
itemDescription: "productDescription",
|
14 |
-
itemImageLink: "useProductFeaturedImage",
|
15 |
-
itemLink: "productLink",
|
16 |
-
condition: 'new',
|
17 |
-
conditionMappings: defaultMappings,
|
18 |
-
userVariationDescriptionForVariableProducts: true,
|
19 |
-
addVariationAttributesToProductUrl: true,
|
20 |
-
useVariationImage: true,
|
21 |
-
useFeaturedImageIfThereIsNoVariationImage: true,
|
22 |
-
useParentDescirptionIfThereIsNoVariationDescirption: true
|
23 |
-
},
|
24 |
-
detailedInformation: {
|
25 |
-
open: false,
|
26 |
-
color: 'selectFromWooCommerceProductAttributes',
|
27 |
-
size: 'selectFromWooCommerceProductAttributes',
|
28 |
-
gender: 'selectFromWooCommerceProductAttributes',
|
29 |
-
setTheGroupId: 'automatically',
|
30 |
-
mappings: defaultMappings,
|
31 |
-
ageGroup: 'selectFromWooCommerceProductAttributes',
|
32 |
-
material: 'selectFromWooCommerceProductAttributes',
|
33 |
-
pattern: 'selectFromWooCommerceProductAttributes',
|
34 |
-
genderAutodetect: 'keepBlank',
|
35 |
-
sizeSystem: '',
|
36 |
-
adjustPrice: false,
|
37 |
-
adjustSalePrice: false
|
38 |
-
|
39 |
-
},
|
40 |
-
availabilityPrice: {
|
41 |
-
open: false,
|
42 |
-
price: 'useProductPrice',
|
43 |
-
salePrice: 'useProductSalePrice',
|
44 |
-
availability: 'useWooCommerceStockValues',
|
45 |
-
adjustPriceValue: '',
|
46 |
-
adjustPriceType: '%',
|
47 |
-
adjustSalePriceType: '%',
|
48 |
-
adjustSalePriceValue: '',
|
49 |
-
currency: null
|
50 |
-
},
|
51 |
-
productCategories: {
|
52 |
-
open: false,
|
53 |
-
productType: 'useWooCommerceProductCategories',
|
54 |
-
productCategories: 'mapProductCategories'
|
55 |
-
},
|
56 |
-
uniqueIdentifiers: {
|
57 |
-
open: false,
|
58 |
-
identifierExists: 1
|
59 |
-
},
|
60 |
-
shipping: {
|
61 |
-
dimensions: 'useWooCommerceProductValues',
|
62 |
-
convertTo: 'cm',
|
63 |
-
adjustPriceType: '%'
|
64 |
-
},
|
65 |
-
template: {
|
66 |
-
save: false,
|
67 |
-
name: ''
|
68 |
-
},
|
69 |
-
advancedAttributes: {
|
70 |
-
adult: 'no',
|
71 |
-
unitPricingBaseMeasureUnit: 'kg',
|
72 |
-
excludedDestination: 'no',
|
73 |
-
customLabel0Mappings: defaultMappings,
|
74 |
-
customLabel1Mappings: defaultMappings,
|
75 |
-
customLabel2Mappings: defaultMappings,
|
76 |
-
customLabel3Mappings: defaultMappings,
|
77 |
-
customLabel4Mappings: defaultMappings,
|
78 |
-
energyEfficiencyClassMappings: defaultMappings,
|
79 |
-
promotionIdMappings: defaultMappings
|
80 |
-
}
|
81 |
-
};
|
82 |
-
|
83 |
-
function getParameterByName(name, url) {
|
84 |
-
if (!url) {
|
85 |
-
url = window.location.href;
|
86 |
-
}
|
87 |
-
name = name.replace(/[\[\]]/g, "\\$&");
|
88 |
-
var regex = new RegExp("[?&]" + name + "(=([^&#]*)|&|#|$)"),
|
89 |
-
results = regex.exec(url);
|
90 |
-
if (!results) return null;
|
91 |
-
if (!results[2]) return '';
|
92 |
-
return decodeURIComponent(results[2].replace(/\+/g, " "));
|
93 |
-
}
|
94 |
-
|
95 |
-
function setCategoriesToCustomDataIfProductsNotCategorized() {
|
96 |
-
|
97 |
-
if (!$scope.merchantsFeedData.productCategories.cats.children.length) {
|
98 |
-
$scope.merchantsFeedData.productCategories.productCategories = 'customValue';
|
99 |
-
}
|
100 |
-
}
|
101 |
-
|
102 |
-
$scope.init = function (currencySymbol, currencyCode) {
|
103 |
-
|
104 |
-
attributesService.setAttributes(wpae_product_attributes);
|
105 |
-
|
106 |
-
$scope.isGoogleMerchantExport = false;
|
107 |
-
|
108 |
-
currencyService.setCurrency(currencySymbol, currencyCode);
|
109 |
-
};
|
110 |
-
|
111 |
-
$scope.selectGoogleMerchantsInitially = function() {
|
112 |
-
$scope.selectGoogleMerchants();
|
113 |
-
};
|
114 |
-
|
115 |
-
$scope.selectGoogleMerchants = function () {
|
116 |