Export WordPress data to XML/CSV - Version 1.2.3

Version Description

  • bugfix: compatibility with ACF 5.7.11
Download this release

Release Info

Developer soflyy
Plugin Icon 128x128 Export WordPress data to XML/CSV
Version 1.2.3
Comparing to
See all releases

Code changes from version 1.2.2 to 1.2.3

Files changed (96) hide show
  1. frontend/.sass-cache/1e8d17c61c30578de9119afabf0505c45d305ebe/availabilityPrice.scssc +0 -0
  2. frontend/.sass-cache/1e8d17c61c30578de9119afabf0505c45d305ebe/basicInformation.scssc +0 -0
  3. frontend/.sass-cache/3d0d747a53a7fe6533c7b81385e4330be65ef070/categorySelector.scssc +0 -0
  4. frontend/.sass-cache/437041dae9230ed3512a93b84abfce7cea94ee50/categorySelector.scssc +0 -0
  5. frontend/.sass-cache/437041dae9230ed3512a93b84abfce7cea94ee50/googleCategorySelector.scssc +0 -0
  6. frontend/.sass-cache/59fb0579c0803eea727968c98dc5a2535eabfa60/availabilityPrice.scssc +0 -0
  7. frontend/.sass-cache/59fb0579c0803eea727968c98dc5a2535eabfa60/uniqueIdentifiers.scssc +0 -0
  8. frontend/.sass-cache/7a42ac8998aa7c8ba9ac04eeb0ae839b5c898de3/basicInformation.scssc +0 -0
  9. frontend/.sass-cache/7a42ac8998aa7c8ba9ac04eeb0ae839b5c898de3/productCategories.scssc +0 -0
  10. frontend/.sass-cache/83142009718bd5978df62c210f1221d16d96a9dd/advancedAttributes.scssc +0 -0
  11. frontend/.sass-cache/83142009718bd5978df62c210f1221d16d96a9dd/shipping.scssc +0 -0
  12. frontend/.sass-cache/8691e535e69e189796af67f73114fb9c83d3e1e3/advancedAttributes.scssc +0 -0
  13. frontend/.sass-cache/8691e535e69e189796af67f73114fb9c83d3e1e3/detailedInformation.scssc +0 -0
  14. frontend/.sass-cache/98eff1feffa48ac878eefb0682a97fef76be0920/common.scssc +0 -0
  15. frontend/.sass-cache/98eff1feffa48ac878eefb0682a97fef76be0920/styles.scssc +0 -0
  16. frontend/.sass-cache/a5847f4bee0f85a5055f3ae124f32b0d1d6c1685/categoryMapper.scssc +0 -0
  17. frontend/.sass-cache/be652ce12cf55d407d37b54be031acf64008ba1b/basicInformation.scssc +0 -0
  18. frontend/.sass-cache/c0fa2026c2e5c0de4b27eb6d0e10642433a23d40/basicInformation.scssc +0 -0
  19. frontend/.sass-cache/c0fa2026c2e5c0de4b27eb6d0e10642433a23d40/detailedInformation.scssc +0 -0
  20. frontend/.sass-cache/eff9f42b8d50360960249617449f0a81611d4f48/categoryMapper.scssc +0 -0
  21. frontend/.sass-cache/f5538c7683a05e133bbb60616c8fd20f4f6c3b9a/categorySelector.scssc +0 -0
  22. frontend/.sass-cache/fa29827343a974f0ae49e77fc20d63f4e80aaca2/detailedInformation.scssc +0 -0
  23. frontend/.sass-cache/fa29827343a974f0ae49e77fc20d63f4e80aaca2/mapping.scssc +0 -0
  24. frontend/Gruntfile.js +0 -144
  25. frontend/package.json +0 -36
  26. frontend/src/advancedAttributes/advancedAttributes.controller.js +0 -9
  27. frontend/src/advancedAttributes/advancedAttributes.directive.js +0 -10
  28. frontend/src/advancedAttributes/advancedAttributes.scss +0 -9
  29. frontend/src/advancedAttributes/advancedAttributes.tpl.html +0 -156
  30. frontend/src/app.js +0 -7
  31. frontend/src/availabilityPrice/availabilityPrice.controller.js +0 -5
  32. frontend/src/availabilityPrice/availabilityPrice.directive.js +0 -10
  33. frontend/src/availabilityPrice/availabilityPrice.scss +0 -27
  34. frontend/src/availabilityPrice/availabilityPrice.tpl.html +0 -137
  35. frontend/src/basicInformation/basicInformation.controller.js +0 -3
  36. frontend/src/basicInformation/basicInformation.directive.js +0 -10
  37. frontend/src/basicInformation/basicInformation.scss +0 -13
  38. frontend/src/basicInformation/basicInformation.tpl.html +0 -123
  39. frontend/src/common.scss +0 -25
  40. frontend/src/common/angular-chosen.directive.js +0 -110
  41. frontend/src/common/attributes.service.js +0 -17
  42. frontend/src/common/autodetect.directive.js +0 -21
  43. frontend/src/common/cascade.directive.js +0 -35
  44. frontend/src/common/contenteditable.directive.js +0 -31
  45. frontend/src/common/currency.service.js +0 -18
  46. frontend/src/common/droppable.directive.js +0 -85
  47. frontend/src/common/export.service.js +0 -41
  48. frontend/src/common/focusMeWhenEnabled.directive.js +0 -16
  49. frontend/src/common/googleCategoriesService.js +0 -20
  50. frontend/src/common/main.controller.js +0 -219
  51. frontend/src/common/mapping/mapping.controller.js +0 -34
  52. frontend/src/common/mapping/mapping.directive.js +0 -12
  53. frontend/src/common/mapping/mapping.scss +0 -40
  54. frontend/src/common/mapping/mapping.tpl.html +0 -67
  55. frontend/src/common/styledInput.directive.js +0 -35
  56. frontend/src/common/template.service.js +0 -19
  57. frontend/src/common/tipsy.directive.js +0 -26
  58. frontend/src/common/wpHttp.service.js +0 -31
  59. frontend/src/detailedInformation/detailedInformation.controller.js +0 -8
  60. frontend/src/detailedInformation/detailedInformation.directive.js +0 -10
  61. frontend/src/detailedInformation/detailedInformation.scss +0 -5
  62. frontend/src/detailedInformation/detailedInformation.tpl.html +0 -210
  63. frontend/src/productCategories/categoryMapper/categoryMapper.controller.js +0 -32
  64. frontend/src/productCategories/categoryMapper/categoryMapper.directive.js +0 -13
  65. frontend/src/productCategories/categoryMapper/categoryMapper.scss +0 -201
  66. frontend/src/productCategories/categoryMapper/categoryMapper.tpl.html +0 -80
  67. frontend/src/productCategories/categoryMapper/noCategoriesNotice.tpl.html +0 -11
  68. frontend/src/productCategories/googleCategorySelector/googleCategorySelector.controller.js +0 -127
  69. frontend/src/productCategories/googleCategorySelector/googleCategorySelector.directive.js +0 -9
  70. frontend/src/productCategories/googleCategorySelector/googleCategorySelector.scss +0 -105
  71. frontend/src/productCategories/googleCategorySelector/googleCategorySelector.tpl.html +0 -22
  72. frontend/src/productCategories/googleCategorySelector/googleCategorySelectorAdder.directive.js +0 -22
  73. frontend/src/productCategories/googleCategorySelector/googleCategorySelectorAdder.tpl.html +0 -11
  74. frontend/src/productCategories/productCategories.controller.js +0 -3
  75. frontend/src/productCategories/productCategories.directive.js +0 -10
  76. frontend/src/productCategories/productCategories.scss +0 -0
  77. frontend/src/productCategories/productCategories.tpl.html +0 -61
  78. frontend/src/shipping/shipping.controller.js +0 -5
  79. frontend/src/shipping/shipping.directive.js +0 -10
  80. frontend/src/shipping/shipping.scss +0 -0
  81. frontend/src/shipping/shipping.tpl.html +0 -60
  82. frontend/src/styles.scss +0 -278
  83. frontend/src/styles/bootstrap-chosen-variables.scss +0 -18
  84. frontend/src/styles/bootstrap-chosen.scss +0 -459
  85. frontend/src/styles/bootstrap-variables.scss +0 -921
  86. frontend/src/styles/chosen-sprite.png +0 -0
  87. frontend/src/styles/chosen-sprite@2x.png +0 -0
  88. frontend/src/uniqueIdentifiers/uniqueIdentifiers.controller.js +0 -3
  89. frontend/src/uniqueIdentifiers/uniqueIdentifiers.directive.js +0 -10
  90. frontend/src/uniqueIdentifiers/uniqueIdentifiers.scss +0 -18
  91. frontend/src/uniqueIdentifiers/uniqueIdentifiers.tpl.html +0 -45
  92. frontend/taxonomies/googleTaxonomies.json +0 -1
  93. frontend/taxonomies/taxonomies_multilevel.json +0 -1
  94. libraries/XmlExportACF.php +12 -2
  95. readme.txt +5 -2
  96. 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 &amp; 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 &amp; 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>&#8203;');
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