Export WordPress data to XML/CSV - Version 1.2.1

Version Description

  • new filter: added pmxe_after_iteration action
  • bugfix: increase custom query meta limit
  • bugfix: remove deprecated function calls for PHP 7.2 compatibility
  • bugfix: address various PHP warnings and notices
  • bugfix: graceful failure for non:writable uploads folder
  • bugfix: warning when exporting WooCommerce orders using Automatic Scheduling
  • bugfix: WooCommerce product variations exported as separate products when adding product attributes to custom export fields
  • bugfix: small UI and spacing issues
  • bugfix: prices with more than two decimal places are not exported correctly
  • bugfix: exporting empty ACF values shifts rows in CSV exports
  • bugfix: Australia missing from scheduling timezones
  • bugfix: unable to filter or export WooCommerce product visibility data
  • bugfix: Automatic scheduling UI spacing issues
  • bugfix: unrelated errors are reported in functions.php file
Download this release

Release Info

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

Code changes from version 1.2.0 to 1.2.1

Files changed (41) hide show
  1. actions/wp_ajax_scheduling_dialog_content.php +13 -16
  2. actions/wp_ajax_wpae_filtering.php +4 -0
  3. classes/config.php +32 -24
  4. classes/input.php +2 -3
  5. classes/wpallimport.php +4 -2
  6. controllers/admin/export.php +6 -4
  7. controllers/admin/manage.php +42 -8
  8. controllers/controller/admin.php +1 -1
  9. dist/app.js +13 -10
  10. dist/app.min.js +4 -4
  11. filters/pmxe_url_filter.php +5 -0
  12. libraries/WpaeXmlProcessor.php +6 -4
  13. libraries/XmlCsvExport.php +1 -1
  14. libraries/XmlExportACF.php +7 -3
  15. libraries/XmlExportCpt.php +4 -0
  16. libraries/XmlExportEngine.php +7 -7
  17. libraries/XmlExportMediaGallery.php +10 -6
  18. libraries/XmlExportWooCommerce.php +5 -10
  19. libraries/XmlExportWooCommerceOrder.php +18 -2
  20. models/export/record.php +5 -5
  21. readme.txt +18 -2
  22. src/App/Controller/SchedulingLicenseController.php +14 -0
  23. src/App/Service/Pro/VariationOptions/VariationOptions.php +6 -2
  24. src/App/Service/VariationOptions/VariationOptions.php +23 -6
  25. src/App/Specification/IsImportAllowed.php +53 -0
  26. src/App/UnsecuredController/SchedulingController.php +3 -1
  27. src/Pro/Filtering/FilteringBase.php +1 -1
  28. src/Scheduling/Export.php +1 -1
  29. src/Scheduling/Timezone/TimezoneSelect.php +2 -0
  30. src/Scheduling/views/ConnectionIcon.php +24 -12
  31. src/Scheduling/views/SchedulingHelp.php +1 -1
  32. src/Scheduling/views/SchedulingOptions.php +14 -16
  33. src/Scheduling/views/SchedulingUI.php +13 -15
  34. static/css/admin.css +11 -2
  35. static/js/admin.js +49 -4
  36. views/admin/export/options.php +29 -8
  37. views/admin/export/process.php +17 -34
  38. views/admin/export/success_page.php +132 -0
  39. views/admin/export/template.php +22 -22
  40. views/admin/manage/update.php +5 -2
  41. wp-all-export.php +93 -76
actions/wp_ajax_scheduling_dialog_content.php CHANGED
@@ -195,7 +195,7 @@ function pmxe_wp_ajax_scheduling_dialog_content()
195
196
#add-subscription-field {
197
position: absolute;
198
- left: -152px;
199
top: -1px;
200
height: 46px;
201
border-radius: 5px;
@@ -242,12 +242,12 @@ function pmxe_wp_ajax_scheduling_dialog_content()
242
margin-bottom: 5px;
243
color: #40acad;
244
text-decoration: none;
245
}
246
247
.manual-scheduling {
248
margin-left: 26px;
249
}
250
-
251
.chosen-container .chosen-results {
252
253
margin: 0 4px 4px 0 !important;
@@ -549,6 +549,8 @@ function pmxe_wp_ajax_scheduling_dialog_content()
549
$('.save-changes').removeClass('disabled');
550
window.pmxeHasSchedulingSubscription = true;
551
552
} else {
553
554
$('#subscribe-button .easing-spinner').hide();
@@ -567,7 +569,7 @@ function pmxe_wp_ajax_scheduling_dialog_content()
567
568
setTimeout(function () {
569
$('#add-subscription-field').animate({width: '140px'}, 225);
570
- $('#add-subscription-field').animate({left: '-152px'}, 225);
571
}, 300);
572
573
$('#add-subscription-field').val('');
@@ -624,7 +626,7 @@ function pmxe_wp_ajax_scheduling_dialog_content()
624
<?php require __DIR__ . '/../src/Scheduling/views/CommonJs.php'; ?>
625
<div id="post-preview" class="wpallexport-preview wpallexport-scheduling-dialog">
626
<p class="wpallexport-preview-title"><strong>Scheduling Options</strong></p>
627
- <div class="wpallexport-preview-content" style="max-height: 900px; overflow: visible;">
628
629
<div style="margin-bottom: 20px;">
630
<label>
@@ -637,17 +639,12 @@ function pmxe_wp_ajax_scheduling_dialog_content()
637
<label>
638
<input type="radio" name="scheduling_enable"
639
value="1" <?php if ($post['scheduling_enable'] == 1) { ?> checked="checked" <?php } ?>/>
640
- <h4 style="margin-top: 0; position: relative; display: inline-block;"><?php _e('Automatic Scheduling', PMXE_Plugin::LANGUAGE_DOMAIN); ?>
641
- <span class="connection-icon" style="position: absolute; top:-1px; left: 152px;">
642
- <?php include __DIR__ . '/../src/Scheduling/views/ConnectionIcon.php'; ?>
643
- </span>
644
- <?php if (!$scheduling->checkConnection() && $hasActiveLicense) { ?>
645
- <span style="margin-left: 25px; display: inline-block; font-weight: normal;">
646
- <span <?php if (!$scheduling->checkConnection() && $scheduling->checkLicense()) { ?> style="color: #f2b03d;" <?php } ?>>Unable to connect -</span>
647
- <a style="text-decoration: underline; color: #0073aa;"
648
- href="http://wpallimport.com/support"
649
- target="_blank">please contact support</a>.
650
- </span>
651
<?php } ?>
652
</h4>
653
</label>
@@ -714,7 +711,7 @@ function pmxe_wp_ajax_scheduling_dialog_content()
714
</label>
715
</div>
716
<input type="hidden" name="scheduling_monthly_days"
717
- value="<?php echo $post['scheduling_monthly_days']; ?>" id="monthly_days"/>
718
<?php
719
if (isset($post['scheduling_monthly_days'])) {
720
$monthlyArray = explode(',', $post['scheduling_monthly_days']);
195
196
#add-subscription-field {
197
position: absolute;
198
+ left: -155px;
199
top: -1px;
200
height: 46px;
201
border-radius: 5px;
242
margin-bottom: 5px;
243
color: #40acad;
244
text-decoration: none;
245
+ margin-left: 0;
246
}
247
248
.manual-scheduling {
249
margin-left: 26px;
250
}
251
.chosen-container .chosen-results {
252
253
margin: 0 4px 4px 0 !important;
549
$('.save-changes').removeClass('disabled');
550
window.pmxeHasSchedulingSubscription = true;
551
552
+ $('.wpai-no-license').hide();
553
+ $('.wpai-license').show();
554
} else {
555
556
$('#subscribe-button .easing-spinner').hide();
569
570
setTimeout(function () {
571
$('#add-subscription-field').animate({width: '140px'}, 225);
572
+ $('#add-subscription-field').animate({left: '-155px'}, 225);
573
}, 300);
574
575
$('#add-subscription-field').val('');
626
<?php require __DIR__ . '/../src/Scheduling/views/CommonJs.php'; ?>
627
<div id="post-preview" class="wpallexport-preview wpallexport-scheduling-dialog">
628
<p class="wpallexport-preview-title"><strong>Scheduling Options</strong></p>
629
+ <div class="wpallexport-preview-content" style="max-height: 700px; overflow: visible;">
630
631
<div style="margin-bottom: 20px;">
632
<label>
639
<label>
640
<input type="radio" name="scheduling_enable"
641
value="1" <?php if ($post['scheduling_enable'] == 1) { ?> checked="checked" <?php } ?>/>
642
+ <h4 style="margin: 0; position: relative; display: inline-block;"><?php _e('Automatic Scheduling', PMXE_Plugin::LANGUAGE_DOMAIN); ?>
643
+ <span class="connection-icon">
644
+ <?php include __DIR__ . '/../src/Scheduling/views/ConnectionIcon.php'; ?>
645
+ </span>
646
+ <?php if (!$scheduling->checkConnection()) { ?>
647
+ <span class="wpai-license wpai-license-text" style="display: inline-block; font-weight: normal; <?php if(!$hasActiveLicense) { ?> display: none; <?php }?> color: #f2b03d; ">Unable to connect - <a target="_blank" style="text-decoration: underline;" href="http://wpallimport.com/support">please contact support</a>.</span>
648
<?php } ?>
649
</h4>
650
</label>
711
</label>
712
</div>
713
<input type="hidden" name="scheduling_monthly_days"
714
+ value="<?php if(isset($post['scheduling_monthly_days'])) echo $post['scheduling_monthly_days']; ?>" id="monthly_days"/>
715
<?php
716
if (isset($post['scheduling_monthly_days'])) {
717
$monthlyArray = explode(',', $post['scheduling_monthly_days']);
actions/wp_ajax_wpae_filtering.php CHANGED
@@ -55,6 +55,10 @@ function pmxe_wp_ajax_wpae_filtering(){
55
56
if ( XmlExportEngine::$is_auto_generate_enabled ):
57
?>
58
<?php if(isset($post['cpt'])) { ?>
59
<span class="wp_all_export_btn_with_note">
60
<a href="javascript:void(0);" class="back rad3 auto-generate-template" style="float:none; background: #425f9a; padding: 0 50px; margin-right: 10px; color: #fff; font-weight: normal;"><?php printf(__('Migrate %s', 'wp_all_export_plugin'), wp_all_export_get_cpt_name(array($post['cpt']), 2, $post)); ?></a>
55
56
if ( XmlExportEngine::$is_auto_generate_enabled ):
57
?>
58
+ <div class="wpallexport-free-edition-notice" id="migrate-orders-notice" style="padding: 20px; margin-bottom: 10px; display: none;">
59
+ <a class="upgrade_link" target="_blank" href="https://www.wpallimport.com/checkout/?edd_action=add_to_cart&download_id=118611&edd_options%5Bprice_id%5D=1&utm_source=wordpress.org&utm_medium=migrate+orders&utm_campaign=free+wp+all+export+plugin"><?php _e('Upgrade to the Pro edition of WP All Export to Migrate Orders', PMXE_Plugin::LANGUAGE_DOMAIN);?></a>
60
+ <p><?php _e('If you already own it, remove the free edition and install the Pro edition.', PMXE_Plugin::LANGUAGE_DOMAIN);?></p>
61
+ </div>
62
<?php if(isset($post['cpt'])) { ?>
63
<span class="wp_all_export_btn_with_note">
64
<a href="javascript:void(0);" class="back rad3 auto-generate-template" style="float:none; background: #425f9a; padding: 0 50px; margin-right: 10px; color: #fff; font-weight: normal;"><?php printf(__('Migrate %s', 'wp_all_export_plugin'), wp_all_export_get_cpt_name(array($post['cpt']), 2, $post)); ?></a>
classes/config.php CHANGED
@@ -1,15 +1,18 @@
1
<?php
2
/**
3
* Class to load config files
4
- *
5
* @author Pavel Kulbakin <p.kulbakin@gmail.com>
6
*/
7
class PMXE_Config implements IteratorAggregate {
8
/**
9
* Config variables stored
10
* @var array
11
*/
12
protected $config = array();
13
/**
14
* List of loaded files in order to avoid loading same file several times
15
* @var array
@@ -26,29 +29,33 @@ class PMXE_Config implements IteratorAggregate {
26
$config = new self();
27
return $config->loadFromFile($filePath, $section);
28
}
29
-
30
- /**
31
- * Load config file
32
- * @param string $filePath
33
- * @param string[optional] $section
34
- * @return PMXE_Config
35
- */
36
- public function loadFromFile($filePath, $section = NULL) {
37
- if ( ! is_null($section)) {
38
- $this->config[$section] = self::createFromFile($filePath);
39
- } else {
40
- $filePath = realpath($filePath);
41
- if ($filePath and ! in_array($filePath, $this->loaded)) {
42
- require $filePath;
43
-
44
- $sandbox = create_function('', "require '$filePath'; if(array_keys(get_defined_vars()) != array('config')) return array(); return \$config;");
45
- $config = $sandbox();
46
- $this->loaded[] = $filePath;
47
- $this->config = array_merge($this->config, $config);
48
- }
49
- }
50
- return $this;
51
- }
52
/**
53
* Return value of setting with specified name
54
* @param string $field Setting name
@@ -67,6 +74,7 @@ class PMXE_Config implements IteratorAggregate {
67
public function __isset($field) {
68
return isset($this->config[$field]);
69
}
70
/**
71
* Magic method to implement object-like access to config parameters
72
* @param string $field
1
<?php
2
+
3
/**
4
* Class to load config files
5
+ *
6
* @author Pavel Kulbakin <p.kulbakin@gmail.com>
7
*/
8
class PMXE_Config implements IteratorAggregate {
9
+
10
/**
11
* Config variables stored
12
* @var array
13
*/
14
protected $config = array();
15
+
16
/**
17
* List of loaded files in order to avoid loading same file several times
18
* @var array
29
$config = new self();
30
return $config->loadFromFile($filePath, $section);
31
}
32
+
33
+ /**
34
+ * Load config file
35
+ * @param string $filePath
36
+ * @param string [optional] $section
37
+ * @return PMXE_Config
38
+ */
39
+ public function loadFromFile($filePath, $section = NULL)
40
+ {
41
+ if (!is_null($section)) {
42
+ $this->config[$section] = self::createFromFile($filePath);
43
+ } else {
44
+ $filePath = realpath($filePath);
45
+ if ($filePath and !in_array($filePath, $this->loaded)) {
46
+
47
+ require $filePath;
48
+
49
+ if (!isset($config)) {
50
+ $config = array();
51
+ }
52
+ }
53
+ $this->loaded[] = $filePath;
54
+ $this->config = array_merge($this->config, $config);
55
+ }
56
+ return $this;
57
+ }
58
+
59
/**
60
* Return value of setting with specified name
61
* @param string $field Setting name
74
public function __isset($field) {
75
return isset($this->config[$field]);
76
}
77
+
78
/**
79
* Magic method to implement object-like access to config parameters
80
* @param string $field
classes/input.php CHANGED
@@ -23,13 +23,12 @@ class PMXE_Input {
23
$this->addFilter('strip_tags');
24
$this->addFilter('esc_sql');
25
$this->addFilter('esc_js');
26
- $result = $this->read($_GET, $paramName, $default);
27
$this->removeFilter('htmlspecialchars');
28
$this->removeFilter('strip_tags');
29
$this->removeFilter('esc_sql');
30
$this->removeFilter('esc_js');
31
-
32
- return $result;
33
}
34
35
public function post($paramName, $default = NULL) {
23
$this->addFilter('strip_tags');
24
$this->addFilter('esc_sql');
25
$this->addFilter('esc_js');
26
+ $result = $this->read($_GET, $paramName, $default);
27
$this->removeFilter('htmlspecialchars');
28
$this->removeFilter('strip_tags');
29
$this->removeFilter('esc_sql');
30
$this->removeFilter('esc_js');
31
+ return $result;
32
}
33
34
public function post($paramName, $default = NULL) {
classes/wpallimport.php CHANGED
@@ -144,6 +144,8 @@ final class PMXE_Wpallimport
144
'is_update_parent' => 0,
145
'is_update_attachments' => 0,
146
'is_update_acf' => 0,
147
'update_acf_logic' => 'only',
148
'acf_list' => '',
149
'is_update_product_type' => 1,
@@ -243,12 +245,12 @@ final class PMXE_Wpallimport
243
self::$templateOptions['pmwi_order']['is_update_taxes'] = 0;
244
self::$templateOptions['pmwi_order']['is_update_refunds'] = 0;
245
self::$templateOptions['pmwi_order']['is_update_total'] = 0;
246
- self::$templateOptions['pmwi_order']['is_guest_matching'] = 1;
247
self::$templateOptions['pmwi_order']['status'] = 'wc-pending';
248
self::$templateOptions['pmwi_order']['billing_source'] = 'existing';
249
self::$templateOptions['pmwi_order']['billing_source_match_by'] = 'username';
250
self::$templateOptions['pmwi_order']['shipping_source'] = 'guest';
251
- self::$templateOptions['pmwi_order']['copy_from_billing'] = 1;
252
self::$templateOptions['pmwi_order']['products_repeater_mode'] = 'csv';
253
self::$templateOptions['pmwi_order']['products_repeater_mode_separator'] = '|';
254
self::$templateOptions['pmwi_order']['products_source'] = 'existing';
144
'is_update_parent' => 0,
145
'is_update_attachments' => 0,
146
'is_update_acf' => 0,
147
+ 'is_update_comment_status' => 0,
148
+ 'import_img_tags' => 1,
149
'update_acf_logic' => 'only',
150
'acf_list' => '',
151
'is_update_product_type' => 1,
245
self::$templateOptions['pmwi_order']['is_update_taxes'] = 0;
246
self::$templateOptions['pmwi_order']['is_update_refunds'] = 0;
247
self::$templateOptions['pmwi_order']['is_update_total'] = 0;
248
+ self::$templateOptions['pmwi_order']['is_guest_matching'] = 1;
249
self::$templateOptions['pmwi_order']['status'] = 'wc-pending';
250
self::$templateOptions['pmwi_order']['billing_source'] = 'existing';
251
self::$templateOptions['pmwi_order']['billing_source_match_by'] = 'username';
252
self::$templateOptions['pmwi_order']['shipping_source'] = 'guest';
253
+ self::$templateOptions['pmwi_order']['copy_from_billing'] = 1;
254
self::$templateOptions['pmwi_order']['products_repeater_mode'] = 'csv';
255
self::$templateOptions['pmwi_order']['products_repeater_mode_separator'] = '|';
256
self::$templateOptions['pmwi_order']['products_source'] = 'existing';
controllers/admin/export.php CHANGED
@@ -110,10 +110,12 @@ class PMXE_Admin_Export extends PMXE_Controller_Admin
110
if (is_array($this->data['post']['cpt'])) $this->data['post']['cpt'] = $this->data['post']['cpt'][0];
111
112
// Delete history
113
- $history_files = PMXE_Helper::safe_glob(PMXE_ROOT_DIR . '/history/*', PMXE_Helper::GLOB_RECURSE | PMXE_Helper::GLOB_PATH);
114
- if (!empty($history_files)) {
115
- foreach ($history_files as $filePath) {
116
- @file_exists($filePath) and @unlink($filePath);
117
}
118
}
119
110
if (is_array($this->data['post']['cpt'])) $this->data['post']['cpt'] = $this->data['post']['cpt'][0];
111
112
// Delete history
113
+ if(is_dir(PMXE_ROOT_DIR.'/history')) {
114
+ $history_files = PMXE_Helper::safe_glob(PMXE_ROOT_DIR . '/history/*', PMXE_Helper::GLOB_RECURSE | PMXE_Helper::GLOB_PATH);
115
+ if (!empty($history_files)) {
116
+ foreach ($history_files as $filePath) {
117
+ @file_exists($filePath) and @unlink($filePath);
118
+ }
119
}
120
}
121
controllers/admin/manage.php CHANGED
@@ -218,7 +218,7 @@ class PMXE_Admin_Manage extends PMXE_Controller_Admin {
218
219
PMXE_Plugin::$session->save_data();
220
221
- if ( ! $this->errors->get_error_codes()) {
222
223
// deligate operation to other controller
224
$controller = new PMXE_Admin_Export();
@@ -230,12 +230,8 @@ class PMXE_Admin_Manage extends PMXE_Controller_Admin {
230
231
$this->errors->remove('count-validation');
232
if ( ! $this->errors->get_error_codes()) {
233
- ?>
234
- <script type="text/javascript">
235
- window.location.href = "<?php echo add_query_arg('pmxe_nt', urlencode(__('Options updated', 'wp_all_export_plugin')), $this->baseUrl); ?>";
236
- </script>
237
- <?php
238
- die();
239
}
240
241
}
@@ -342,7 +338,7 @@ class PMXE_Admin_Manage extends PMXE_Controller_Admin {
342
} else {
343
344
$uploads = wp_upload_dir();
345
-
346
$id = $this->input->get('id');
347
348
$export = new PMXE_Export_Record();
@@ -489,4 +485,42 @@ class PMXE_Admin_Manage extends PMXE_Controller_Admin {
489
}
490
}
491
492
}
218
219
PMXE_Plugin::$session->save_data();
220
221
+ if ( ! $this->errors->get_error_codes() && $this->input->post('record-count')) {
222
223
// deligate operation to other controller
224
$controller = new PMXE_Admin_Export();
230
231
$this->errors->remove('count-validation');
232
if ( ! $this->errors->get_error_codes()) {
233
+ wp_redirect(add_query_arg('pmxe_nt', urlencode(__('Options updated', 'wp_all_export_plugin')), $this->baseUrl));
234
+ die();
235
}
236
237
}
338
} else {
339
340
$uploads = wp_upload_dir();
341
+
342
$id = $this->input->get('id');
343
344
$export = new PMXE_Export_Record();
485
}
486
}
487
488
+ /**
489
+ * @param $post
490
+ * @return string
491
+ */
492
+ protected function getFriendlyName($post)
493
+ {
494
+ $friendly_name = '';
495
+ $post_types = PMXE_Plugin::$session->get('cpt');
496
+ if (!empty($post_types)) {
497
+ if (in_array('users', $post_types)) {
498
+ $friendly_name = 'Users Export - ' . date("Y F d H:i");
499
+ return $friendly_name;
500
+ } elseif (in_array('shop_customer', $post_types)) {
501
+ $friendly_name = 'Customers Export - ' . date("Y F d H:i");
502
+ return $friendly_name;
503
+ } elseif (in_array('comments', $post_types)) {
504
+ $friendly_name = 'Comments Export - ' . date("Y F d H:i");
505
+ return $friendly_name;
506
+ } elseif (in_array('taxonomies', $post_types)) {
507
+ $tx = get_taxonomy($post['taxonomy_to_export']);
508
+ if (!empty($tx->labels->name)) {
509
+ $friendly_name = $tx->labels->name . ' Export - ' . date("Y F d H:i");
510
+ return $friendly_name;
511
+ } else {
512
+ $friendly_name = 'Taxonomy Terms Export - ' . date("Y F d H:i");
513
+ return $friendly_name;
514
+ }
515
+ } else {
516
+ $post_type_details = get_post_type_object(array_shift($post_types));
517
+ $friendly_name = $post_type_details->labels->name . ' Export - ' . date("Y F d H:i");
518
+ return $friendly_name;
519
+ }
520
+ } else {
521
+ $friendly_name = 'WP_Query Export - ' . date("Y F d H:i");
522
+ return $friendly_name;
523
+ }
524
+ }
525
+
526
}
controllers/controller/admin.php CHANGED
@@ -34,7 +34,7 @@ abstract class PMXE_Controller_Admin extends PMXE_Controller {
34
parent::__construct();
35
36
// add special filter for url fields
37
- $this->input->addFilter(create_function('$str', 'return "http://" == $str || "ftp://" == $str ? "" : $str;'));
38
39
// enqueue required sripts and styles
40
global $wp_styles;
34
parent::__construct();
35
36
// add special filter for url fields
37
+ $this->input->addFilter('pmxe_url_filter');
38
39
// enqueue required sripts and styles
40
global $wp_styles;
dist/app.js CHANGED
@@ -39626,7 +39626,10 @@ GoogleMerchants.controller('mainController', ['$scope', '$rootScope', '$timeout'
39626
dimensions: 'useWooCommerceProductValues',
39627
convertTo: 'cm',
39628
adjustPriceType: '%',
39629
- weight: ''
39630
},
39631
template: {
39632
save: false,
@@ -40079,11 +40082,13 @@ GoogleMerchants.controller('googleCategorySelectorController', ['$scope', '$log'
40079
if(angular.isDefined($scope.mappings[currentChild.id])){
40080
// but not by the user
40081
if(!$scope.mappings[currentChild.id].byUser) {
40082
- $scope.mappings[currentChild.id] = {
40083
id: catId,
40084
name: catName,
40085
byUser: false
40086
};
40087
}
40088
} else {
40089
$scope.mappings[currentChild.id] = {
@@ -40110,16 +40115,11 @@ GoogleMerchants.controller('googleCategorySelectorController', ['$scope', '$log'
40110
40111
$scope.visible = false;
40112
40113
- var categoryData = {
40114
- id: category.id,
40115
- name: categoryName
40116
- };
40117
-
40118
$scope.selectedCategory = categoryName;
40119
$scope.mappings[$scope.node.id] = {id: category.id, name: categoryName, byUser: true};
40120
40121
// New cascade logic
40122
- selectCategoryRecursive(category.Id, categoryName, $scope.node);
40123
};
40124
40125
$scope.loadCategories = function(search) {
@@ -40571,7 +40571,7 @@ angular.module("basicInformation/basicInformation.tpl.html", []).run(["$template
40571
" <div class=\"wpallexport-collapsed-content\" id=\"basic-product-information\" ng-slide-down=\"basicInformation.open\" duration=\"0.5\">\n" +
40572
" <div class=\"wpallexport-collapsed-content-inner\">\n" +
40573
"\n" +
40574
- " <h4>Item Title</h4>\n" +
40575
" <div class=\"input\">\n" +
40576
" <label><input type=\"radio\" ng-model=\"basicInformation.itemTitle\" value=\"productTitle\"/>Use the product title</label>\n" +
40577
" </div>\n" +
@@ -41226,6 +41226,9 @@ angular.module("shipping/shipping.tpl.html", []).run(["$templateCache", function
41226
" <span ng-if=\"!shipping.adjustShippingPrice\" style=\"width: 6px; display: inline-block;\">+</span>\n" +
41227
" <span ng-if=\"shipping.adjustShippingPrice\" style=\"width: 6px; display: inline-block;\">-</span>\n" +
41228
" Adjust Shipping Price</a>\n" +
41229
" <div ng-slide-down=\"shipping.adjustShippingPrice\" class=\"adjust-price\" duration=\"0.2\" style=\"margin-top: 5px; \">\n" +
41230
" <input type=\"text\" style=\"margin-top: 0; margin-right: 0;\" class=\"wpae-default-input\" ng-model=\"shipping.adjustShippingPriceValue\" droppable /><select style=\"margin-top:5px;\" ng-model=\"shipping.adjustPriceType\">\n" +
41231
" <option value=\"%\">%</option>\n" +
@@ -41248,7 +41251,7 @@ angular.module("shipping/shipping.tpl.html", []).run(["$templateCache", function
41248
" <input type=\"radio\" ng-model=\"shipping.dimensions\" value=\"useWooCommerceProductValues\"/>Use WooCommerce's product values and convert them to\n" +
41249
" <select ng-model=\"shipping.convertTo\" style=\"width: 175px; height: 30px; padding: 0 0 0 8px; margin-left: 5px; margin-top: 5px; \">\n" +
41250
" <option value=\"cm\">Centimeters (cm)</option>\n" +
41251
- " <option value=\"inches\">Inches (in)</option>\n" +
41252
" </select>\n" +
41253
" </label>\n" +
41254
" </div>\n" +
39626
dimensions: 'useWooCommerceProductValues',
39627
convertTo: 'cm',
39628
adjustPriceType: '%',
39629
+ weight: '',
39630
+ shippingHeight: '',
39631
+ shippingLength: '',
39632
+ shippingWidth: ''
39633
},
39634
template: {
39635
save: false,
40082
if(angular.isDefined($scope.mappings[currentChild.id])){
40083
// but not by the user
40084
if(!$scope.mappings[currentChild.id].byUser) {
40085
+ var newCategory = {
40086
id: catId,
40087
name: catName,
40088
byUser: false
40089
};
40090
+
40091
+ $scope.mappings[currentChild.id] = newCategory;
40092
}
40093
} else {
40094
$scope.mappings[currentChild.id] = {
40115
40116
$scope.visible = false;
40117
40118
$scope.selectedCategory = categoryName;
40119
$scope.mappings[$scope.node.id] = {id: category.id, name: categoryName, byUser: true};
40120
40121
// New cascade logic
40122
+ selectCategoryRecursive(category.id, categoryName, $scope.node);
40123
};
40124
40125
$scope.loadCategories = function(search) {
40571
" <div class=\"wpallexport-collapsed-content\" id=\"basic-product-information\" ng-slide-down=\"basicInformation.open\" duration=\"0.5\">\n" +
40572
" <div class=\"wpallexport-collapsed-content-inner\">\n" +
40573
"\n" +
40574
+ " <h4>Item Title <a style=\"margin-top: 7px;\" class=\"wpallexport-help\" tipsy=\"Google Merchant Center only shows the first 70 characters of titles and crops everything over 150 characters.\">?</a></h4>\n" +
40575
" <div class=\"input\">\n" +
40576
" <label><input type=\"radio\" ng-model=\"basicInformation.itemTitle\" value=\"productTitle\"/>Use the product title</label>\n" +
40577
" </div>\n" +
41226
" <span ng-if=\"!shipping.adjustShippingPrice\" style=\"width: 6px; display: inline-block;\">+</span>\n" +
41227
" <span ng-if=\"shipping.adjustShippingPrice\" style=\"width: 6px; display: inline-block;\">-</span>\n" +
41228
" Adjust Shipping Price</a>\n" +
41229
+ " <input type=\"hidden\" ng-model=\"shipping.shippingHeight\"/>\n" +
41230
+ " <input type=\"hidden\" ng-model=\"shipping.shippingLength\"/>\n" +
41231
+ " <input type=\"hidden\" ng-model=\"shipping.shippingWidth\"/>\n" +
41232
" <div ng-slide-down=\"shipping.adjustShippingPrice\" class=\"adjust-price\" duration=\"0.2\" style=\"margin-top: 5px; \">\n" +
41233
" <input type=\"text\" style=\"margin-top: 0; margin-right: 0;\" class=\"wpae-default-input\" ng-model=\"shipping.adjustShippingPriceValue\" droppable /><select style=\"margin-top:5px;\" ng-model=\"shipping.adjustPriceType\">\n" +
41234
" <option value=\"%\">%</option>\n" +
41251
" <input type=\"radio\" ng-model=\"shipping.dimensions\" value=\"useWooCommerceProductValues\"/>Use WooCommerce's product values and convert them to\n" +
41252
" <select ng-model=\"shipping.convertTo\" style=\"width: 175px; height: 30px; padding: 0 0 0 8px; margin-left: 5px; margin-top: 5px; \">\n" +
41253
" <option value=\"cm\">Centimeters (cm)</option>\n" +
41254
+ " <option value=\"in\">Inches (in)</option>\n" +
41255
" </select>\n" +
41256
" </label>\n" +
41257
" </div>\n" +
dist/app.min.js CHANGED
@@ -4,7 +4,7 @@ debug:function(){var c=e("debug");return function(){a&&c.apply(b,arguments)}}()}
4
h=b.getSeconds(),i=b.getMilliseconds()),new Date(d,0,j.getDate()+k,f,g,h,i)}}return NaN}function Bd(a,b){return function(c,d){var e,g;if(z(c))return c;if(x(c)){if('"'===c.charAt(0)&&'"'===c.charAt(c.length-1)&&(c=c.substring(1,c.length-1)),hg.test(c))return new Date(c);if(a.lastIndex=0,e=a.exec(c))return e.shift(),g=d?{yyyy:d.getFullYear(),MM:d.getMonth()+1,dd:d.getDate(),HH:d.getHours(),mm:d.getMinutes(),ss:d.getSeconds(),sss:d.getMilliseconds()/1e3}:{yyyy:1970,MM:1,dd:1,HH:0,mm:0,ss:0,sss:0},f(e,function(a,c){c<b.length&&(g[b[c]]=+a)}),new Date(g.yyyy,g.MM-1,g.dd,g.HH,g.mm,g.ss||0,1e3*g.sss||0)}return NaN}}function Cd(a,b,c,d){return function(e,f,g,h,i,j,k){function l(a){return a&&!(a.getTime&&a.getTime()!==a.getTime())}function m(a){return u(a)&&!z(a)?c(a)||void 0:a}Dd(e,f,g,h),zd(e,f,g,h,i,j);var n,o=h&&h.$options.getOption("timezone");if(h.$parserName=a,h.$parsers.push(function(a){if(h.$isEmpty(a))return null;if(b.test(a)){var d=c(a,n);return o&&(d=aa(d,o)),d}}),h.$formatters.push(function(a){if(a&&!z(a))throw Qg("datefmt","Expected `{0}` to be a date",a);return l(a)?(n=a,n&&o&&(n=aa(n,o,!0)),k("date")(a,d,o)):(n=null,"")}),u(g.min)||g.ngMin){var p;h.$validators.min=function(a){return!l(a)||t(p)||c(a)>=p},g.$observe("min",function(a){p=m(a),h.$validate()})}if(u(g.max)||g.ngMax){var q;h.$validators.max=function(a){return!l(a)||t(q)||c(a)<=q},g.$observe("max",function(a){q=m(a),h.$validate()})}}}function Dd(a,b,c,d){var e=b[0];(d.$hasNativeValidators=v(e.validity))&&d.$parsers.push(function(a){var c=b.prop(Yd)||{};return c.badInput||c.typeMismatch?void 0:a})}function Ed(a){a.$parserName="number",a.$parsers.push(function(b){return a.$isEmpty(b)?null:kg.test(b)?parseFloat(b):void 0}),a.$formatters.push(function(b){if(!a.$isEmpty(b)){if(!y(b))throw Qg("numfmt","Expected `{0}` to be a number",b);b=b.toString()}return b})}function Fd(a){return u(a)&&!y(a)&&(a=parseFloat(a)),oe(a)?void 0:a}function Gd(a){return(0|a)===a}function Hd(a){var b=a.toString(),c=b.indexOf(".");if(-1===c){if(-1<a&&a<1){var d=/e-(\d+)#x2F;.exec(b);if(d)return Number(d[1])}return 0}return b.length-c-1}function Id(a,b,c){var d=Number(a),e=!Gd(d),f=!Gd(b),g=!Gd(c);if(e||f||g){var h=e?Hd(d):0,i=f?Hd(b):0,j=g?Hd(c):0,k=Math.max(h,i,j),l=Math.pow(10,k);d*=l,b*=l,c*=l,e&&(d=Math.round(d)),f&&(b=Math.round(b)),g&&(c=Math.round(c))}return(d-b)%c==0}function Jd(a,b,c,d,e,f){Dd(a,b,c,d),Ed(d),zd(a,b,c,d,e,f);var g,h;if((u(c.min)||c.ngMin)&&(d.$validators.min=function(a){return d.$isEmpty(a)||t(g)||a>=g},c.$observe("min",function(a){g=Fd(a),d.$validate()})),(u(c.max)||c.ngMax)&&(d.$validators.max=function(a){return d.$isEmpty(a)||t(h)||a<=h},c.$observe("max",function(a){h=Fd(a),d.$validate()})),u(c.step)||c.ngStep){var i;d.$validators.step=function(a,b){return d.$isEmpty(b)||t(i)||Id(b,g||0,i)},c.$observe("step",function(a){i=Fd(a),d.$validate()})}}function Kd(a,b,c,d,e,f){function g(a,d){b.attr(a,c[a]),c.$observe(a,d)}function h(a){if(l=Fd(a),!oe(d.$modelValue))if(k){var c=b.val();l>c&&(c=l,b.val(c)),d.$setViewValue(c)}else d.$validate()}function i(a){if(m=Fd(a),!oe(d.$modelValue))if(k){var c=b.val();m<c&&(b.val(m),c=m<l?l:m),d.$setViewValue(c)}else d.$validate()}function j(a){n=Fd(a),oe(d.$modelValue)||(k&&d.$viewValue!==b.val()?d.$setViewValue(b.val()):d.$validate())}Dd(a,b,c,d),Ed(d),zd(a,b,c,d,e,f);var k=d.$hasNativeValidators&&"range"===b[0].type,l=k?0:void 0,m=k?100:void 0,n=k?1:void 0,o=b[0].validity,p=u(c.min),q=u(c.max),r=u(c.step),s=d.$render;d.$render=k&&u(o.rangeUnderflow)&&u(o.rangeOverflow)?function(){s(),d.$setViewValue(b.val())}:s,p&&(d.$validators.min=k?function(){return!0}:function(a,b){return d.$isEmpty(b)||t(l)||b>=l},g("min",h)),q&&(d.$validators.max=k?function(){return!0}:function(a,b){return d.$isEmpty(b)||t(m)||b<=m},g("max",i)),r&&(d.$validators.step=k?function(){return!o.stepMismatch}:function(a,b){return d.$isEmpty(b)||t(n)||Id(b,l||0,n)},g("step",j))}function Ld(a,b,c,d,e,f){zd(a,b,c,d,e,f),xd(d),d.$parserName="url",d.$validators.url=function(a,b){var c=a||b;return d.$isEmpty(c)||ig.test(c)}}function Md(a,b,c,d,e,f){zd(a,b,c,d,e,f),xd(d),d.$parserName="email",d.$validators.email=function(a,b){var c=a||b;return d.$isEmpty(c)||jg.test(c)}}function Nd(a,b,c,d){var e=!c.ngTrim||"false"!==re(c.ngTrim);t(c.name)&&b.attr("name",i());var f=function(a){var f;b[0].checked&&(f=c.value,e&&(f=re(f)),d.$setViewValue(f,a&&a.type))};b.on("click",f),d.$render=function(){var a=c.value;e&&(a=re(a)),b[0].checked=a===d.$viewValue},c.$observe("value",d.$render)}function Od(a,b,c,d,e){var f;if(u(d)){if(f=a(d),!f.constant)throw Qg("constexpr","Expected constant expression for `{0}`, but saw `{1}`.",c,d);return f(b)}return e}function Pd(a,b,c,d,e,f,g,h){var i=Od(h,a,"ngTrueValue",c.ngTrueValue,!0),j=Od(h,a,"ngFalseValue",c.ngFalseValue,!1),k=function(a){d.$setViewValue(b[0].checked,a&&a.type)};b.on("click",k),d.$render=function(){b[0].checked=d.$viewValue},d.$isEmpty=function(a){return!1===a},d.$formatters.push(function(a){return T(a,i)}),d.$parsers.push(function(a){return a?i:j})}function Qd(a,b){function c(a,b){if(!a||!a.length)return[];if(!b||!b.length)return a;var c=[];a:for(var d=0;d<a.length;d++){for(var e=a[d],f=0;f<b.length;f++)if(e===b[f])continue a;c.push(e)}return c}function d(a){return a&&a.split(" ")}function e(a){var b=a;return pe(a)?b=a.map(e).join(" "):v(a)&&(b=Object.keys(a).filter(function(b){return a[b]}).join(" ")),b}function g(a){var b=a;if(pe(a))b=a.map(g);else if(v(a)){var c=!1;b=Object.keys(a).filter(function(b){var d=a[b];return!c&&t(d)&&(c=!0),d}),c&&b.push(void 0)}return b}a="ngClass"+a;var h;return["$parse",function(i){return{restrict:"AC",link:function(j,k,l){function m(a){a=p(d(a),1),l.$addClass(a)}function n(a){a=p(d(a),-1),l.$removeClass(a)}function o(a,b){var e=d(a),f=d(b),g=c(e,f),h=c(f,e),i=p(g,-1),j=p(h,1);l.$addClass(j),l.$removeClass(i)}function p(a,b){var c=[];return f(a,function(a){(b>0||z[a])&&(z[a]=(z[a]||0)+b,z[a]===+(b>0)&&c.push(a))}),c.join(" ")}function q(a){a===b?m(t):n(t),A=a}function r(a){var b=e(a);b!==t&&s(b)}function s(a){A===b&&o(t,a),t=a}var t,u=l[a].trim(),v=":"===u.charAt(0)&&":"===u.charAt(1),w=v?g:e,x=i(u,w),y=v?r:s,z=k.data("$classCounts"),A=!0;z||(z=sa(),k.data("$classCounts",z)),"ngClass"!==a&&(h||(h=i("$index",function(a){return 1&a})),j.$watch(h,q)),j.$watch(x,y,v)}}}]}function Rd(a,b,c,d,e,f,g,h,i){this.$viewValue=Number.NaN,this.$modelValue=Number.NaN,this.$rawModelValue=void 0,this.$validators={},this.$asyncValidators={},this.$parsers=[],this.$formatters=[],this.$viewChangeListeners=[],this.$untouched=!0,this.$touched=!1,this.$pristine=!0,this.$dirty=!1,this.$valid=!0,this.$invalid=!1,this.$error={},this.$success={},this.$pending=void 0,this.$name=i(c.name||"",!1)(a),this.$parentForm=cg,this.$options=Rg,this.$parsedNgModel=e(c.ngModel),this.$parsedNgModelAssign=this.$parsedNgModel.assign,this.$ngModelGet=this.$parsedNgModel,this.$ngModelSet=this.$parsedNgModelAssign,this.$pendingDebounce=null,this.$parserValid=void 0,this.$currentValidationRunId=0,Object.defineProperty(this,"$scope",{value:a}),this.$attr=c,this.$element=d,this.$animate=f,this.$timeout=g,this.$parse=e,this.$q=h,this.$exceptionHandler=b,ud(this),Sd(this)}function Sd(a){a.$scope.$watch(function(b){var c=a.$ngModelGet(b);if(c!==a.$modelValue&&(a.$modelValue===a.$modelValue||c===c)){a.$modelValue=a.$rawModelValue=c,a.$parserValid=void 0;for(var d=a.$formatters,e=d.length,f=c;e--;)f=d[e](f);a.$viewValue!==f&&(a.$updateEmptyClasses(f),a.$viewValue=a.$lastCommittedViewValue=f,a.$render(),a.$runValidators(a.$modelValue,a.$viewValue,p))}return c})}function Td(a){this.$options=a}function Ud(a,b){f(b,function(b,c){u(a[c])||(a[c]=b)})}function Vd(a,b){a.prop("selected",b),a.attr("selected",b)}var Wd={objectMaxDepth:5},Xd=/^\/(.+)\/([a-z]*)#x2F;,Yd="validity",Zd=Object.prototype.hasOwnProperty,$d=function(a){return x(a)?a.toLowerCase():a},_d=function(a){return x(a)?a.toUpperCase():a},ae=function(a){return x(a)?a.replace(/[A-Z]/g,function(a){return String.fromCharCode(32|a.charCodeAt(0))}):a},be=function(a){return x(a)?a.replace(/[a-z]/g,function(a){return String.fromCharCode(-33&a.charCodeAt(0))}):a};"i"!=="I".toLowerCase()&&($d=ae,_d=be);var ce,de,ee,fe,ge=[].slice,he=[].splice,ie=[].push,je=Object.prototype.toString,ke=Object.getPrototypeOf,le=d("ng"),me=a.angular||(a.angular={}),ne=0;ce=a.document.documentMode;var oe=Number.isNaN||function(a){return a!==a};p.$inject=[],q.$inject=[];var pe=Array.isArray,qe=/^\[object (?:Uint8|Uint8Clamped|Uint16|Uint32|Int8|Int16|Int32|Float32|Float64)Array]#x2F;,re=function(a){return x(a)?a.trim():a},se=function(a){return a.replace(/([-()[\]{}+?*.$^|,:#<!\\])/g,"\\$1").replace(/\x08/g,"\\x08")},te=function(){if(!u(te.rules)){var b=a.document.querySelector("[ng-csp]")||a.document.querySelector("[data-ng-csp]");if(b){var c=b.getAttribute("ng-csp")||b.getAttribute("data-ng-csp");te.rules={noUnsafeEval:!c||-1!==c.indexOf("no-unsafe-eval"),noInlineStyle:!c||-1!==c.indexOf("no-inline-style")}}else te.rules={noUnsafeEval:function(){try{return new Function(""),!1}catch(a){return!0}}(),noInlineStyle:!1}}return te.rules},ue=function(){if(u(ue.name_))return ue.name_;var b,c,d,e,f=we.length;for(c=0;c<f;++c)if(d=we[c],b=a.document.querySelector("["+d.replace(":","\\:")+"jq]")){e=b.getAttribute(d+"jq");break}return ue.name_=e},ve=/:/g,we=["ng-","data-ng-","ng:","x-ng-"],xe=function(b){var c=b.currentScript;if(!c)return!0;if(!(c instanceof a.HTMLScriptElement||c instanceof a.SVGScriptElement))return!1;var d=c.attributes;return[d.getNamedItem("src"),d.getNamedItem("href"),d.getNamedItem("xlink:href")].every(function(a){if(!a)return!0;if(!a.value)return!1;var c=b.createElement("a");if(c.href=a.value,b.location.origin===c.origin)return!0;switch(c.protocol){case"http:":case"https:":case"ftp:":case"blob:":case"file:":case"data:":return!0;default:return!1}})}(a.document),ye=/[A-Z]/g,ze=!1,Ae=1,Be=3,Ce=8,De=9,Ee=11,Fe={full:"1.6.6",major:1,minor:6,dot:6,codeName:"interdimensional-cable"};Ia.expando="ng339";var Ge=Ia.cache={},He=1;Ia._data=function(a){return this.cache[a[this.expando]]||{}};var Ie=/-([a-z])/g,Je=/^-ms-/,Ke={mouseleave:"mouseout",mouseenter:"mouseover"},Le=d("jqLite"),Me=/^<([\w-]+)\s*\/?>(?:<\/\1>|)#x2F;,Ne=/<|&#?\w+;/,Oe=/<([\w:-]+)/,Pe=/<(?!area|br|col|embed|hr|img|input|link|meta|param)(([\w:-]+)[^>]*)\/>/gi,Qe={option:[1,'<select multiple="multiple">',"</select>"],thead:[1,"<table>","</table>"],col:[2,"<table><colgroup>","</colgroup></table>"],tr:[2,"<table><tbody>","</tbody></table>"],td:[3,"<table><tbody><tr>","</tr></tbody></table>"],_default:[0,"",""]};Qe.optgroup=Qe.option,Qe.tbody=Qe.tfoot=Qe.colgroup=Qe.caption=Qe.thead,Qe.th=Qe.td;var Re=a.Node.prototype.contains||function(a){return!!(16&this.compareDocumentPosition(a))},Se=Ia.prototype={ready:Ya,toString:function(){var a=[];return f(this,function(b){a.push(""+b)}),"["+a.join(", ")+"]"},eq:function(a){return de(a>=0?this[a]:this[this.length+a])},length:0,push:ie,sort:[].sort,splice:[].splice},Te={};f("multiple,selected,checked,disabled,readOnly,required,open".split(","),function(a){Te[$d(a)]=a});var Ue={};f("input,select,option,textarea,button,form,details".split(","),function(a){Ue[a]=!0});var Ve={ngMinlength:"minlength",ngMaxlength:"maxlength",ngMin:"min",ngMax:"max",ngPattern:"pattern",ngStep:"step"};f({data:Oa,removeData:Ma,hasData:Ea,cleanData:function(a){for(var b=0,c=a.length;b<c;b++)Ma(a[b])}},function(a,b){Ia[b]=a}),f({data:Oa,inheritedData:Ua,scope:function(a){return de.data(a,"$scope")||Ua(a.parentNode||a,["$isolateScope","$scope"])},isolateScope:function(a){return de.data(a,"$isolateScope")||de.data(a,"$isolateScopeNoTemplate")},controller:Ta,injector:function(a){return Ua(a,"$injector")},removeAttr:function(a,b){a.removeAttribute(b)},hasClass:Pa,css:function(a,b,c){if(b=za(b),!u(c))return a.style[b];a.style[b]=c},attr:function(a,b,c){var d,e=a.nodeType;if(e!==Be&&2!==e&&e!==Ce&&a.getAttribute){var f=$d(b),g=Te[f];if(!u(c))return d=a.getAttribute(b),g&&null!==d&&(d=f),null===d?void 0:d;null===c||!1===c&&g?a.removeAttribute(b):a.setAttribute(b,g?f:c)}},prop:function(a,b,c){if(!u(c))return a[b];a[b]=c},text:function(){function a(a,b){if(t(b)){var c=a.nodeType;return c===Ae||c===Be?a.textContent:""}a.textContent=b}return a.$dv="",a}(),val:function(a,b){if(t(b)){if(a.multiple&&"select"===O(a)){var c=[];return f(a.options,function(a){a.selected&&c.push(a.value||a.text)}),c}return a.value}a.value=b},html:function(a,b){if(t(b))return a.innerHTML;Ka(a,!0),a.innerHTML=b},empty:Va},function(a,b){Ia.prototype[b]=function(b,c){var d,e,f=this.length;if(a!==Va&&t(2===a.length&&a!==Pa&&a!==Ta?b:c)){if(v(b)){for(d=0;d<f;d++)if(a===Oa)a(this[d],b);else for(e in b)a(this[d],e,b[e]);return this}for(var g=a.$dv,h=t(g)?Math.min(f,1):f,i=0;i<h;i++){var j=a(this[i],b,c);g=g?g+j:j}return g}for(d=0;d<f;d++)a(this[d],b,c);return this}}),f({removeData:Ma,on:function(a,b,c,d){if(u(d))throw Le("onargs","jqLite#on() does not support the `selector` or `eventData` parameters");if(Da(a)){var e=Na(a,!0),f=e.events,g=e.handle;g||(g=e.handle=_a(a,f));for(var h=b.indexOf(" ")>=0?b.split(" "):[b],i=h.length,j=function(b,d,e){var h=f[b];h||(h=f[b]=[],h.specialHandlerWrapper=d,"$destroy"===b||e||a.addEventListener(b,g)),h.push(c)};i--;)b=h[i],Ke[b]?(j(Ke[b],bb),j(b,void 0,!0)):j(b)}},off:La,one:function(a,b,c){a=de(a),a.on(b,function d(){a.off(b,c),a.off(b,d)}),a.on(b,c)},replaceWith:function(a,b){var c,d=a.parentNode;Ka(a),f(new Ia(b),function(b){c?d.insertBefore(b,c.nextSibling):d.replaceChild(b,a),c=b})},children:function(a){var b=[];return f(a.childNodes,function(a){a.nodeType===Ae&&b.push(a)}),b},contents:function(a){return a.contentDocument||a.childNodes||[]},append:function(a,b){var c=a.nodeType;if(c===Ae||c===Ee){b=new Ia(b);for(var d=0,e=b.length;d<e;d++){var f=b[d];a.appendChild(f)}}},prepend:function(a,b){if(a.nodeType===Ae){var c=a.firstChild;f(new Ia(b),function(b){a.insertBefore(b,c)})}},wrap:function(a,b){Ha(a,de(b).eq(0).clone()[0])},remove:Wa,detach:function(a){Wa(a,!0)},after:function(a,b){var c=a,d=a.parentNode;if(d){b=new Ia(b);for(var e=0,f=b.length;e<f;e++){var g=b[e];d.insertBefore(g,c.nextSibling),c=g}}},addClass:Ra,removeClass:Qa,toggleClass:function(a,b,c){b&&f(b.split(" "),function(b){var d=c;t(d)&&(d=!Pa(a,b)),(d?Ra:Qa)(a,b)})},parent:function(a){var b=a.parentNode;return b&&b.nodeType!==Ee?b:null},next:function(a){return a.nextElementSibling},find:function(a,b){return a.getElementsByTagName?a.getElementsByTagName(b):[]},clone:Ja,triggerHandler:function(a,b,c){var d,e,g,h=b.type||b,i=Na(a),j=i&&i.events,k=j&&j[h];k&&(d={preventDefault:function(){this.defaultPrevented=!0},isDefaultPrevented:function(){return!0===this.defaultPrevented},stopImmediatePropagation:function(){this.immediatePropagationStopped=!0},isImmediatePropagationStopped:function(){return!0===this.immediatePropagationStopped},stopPropagation:p,type:h,target:a},b.type&&(d=l(d,b)),e=va(k),g=c?[d].concat(c):[d],f(e,function(b){d.isImmediatePropagationStopped()||b.apply(a,g)}))}},function(a,b){Ia.prototype[b]=function(b,c,d){for(var e,f=0,g=this.length;f<g;f++)t(e)?(e=a(this[f],b,c,d),u(e)&&(e=de(e))):Sa(e,a(this[f],b,c,d));return u(e)?e:this}}),Ia.prototype.bind=Ia.prototype.on,Ia.prototype.unbind=Ia.prototype.off;var We=Object.create(null);eb.prototype={_idx:function(a){return a===this._lastKey?this._lastIndex:(this._lastKey=a,this._lastIndex=this._keys.indexOf(a),this._lastIndex)},_transformKey:function(a){return oe(a)?We:a},get:function(a){a=this._transformKey(a);var b=this._idx(a);if(-1!==b)return this._values[b]},set:function(a,b){a=this._transformKey(a);var c=this._idx(a);-1===c&&(c=this._lastIndex=this._keys.length),this._keys[c]=a,this._values[c]=b},delete:function(a){a=this._transformKey(a);var b=this._idx(a);return-1!==b&&(this._keys.splice(b,1),this._values.splice(b,1),this._lastKey=NaN,this._lastIndex=-1,!0)}};var Xe=eb,Ye=[function(){this.$get=[function(){return Xe}]}],Ze=/^([^(]+?)=>/,$e=/^[^(]*\(\s*([^)]*)\)/m,_e=/,/,af=/^\s*(_?)(\S+?)\1\s*#x2F;,bf=/((\/\/.*$)|(\/\*[\s\S]*?\*\/))/gm,cf=d("$injector");jb.$annotate=ib;var df=d("$animate"),ef=1,ff=function(){this.$get=p},gf=function(){var a=new Xe,b=[];this.$get=["$AnimateRunner","$rootScope",function(c,d){function e(a,b,c){var d=!1;return b&&(b=x(b)?b.split(" "):pe(b)?b:[],f(b,function(b){b&&(d=!0,a[b]=c)})),d}function g(){f(b,function(b){var c=a.get(b);if(c){var d=nb(b.attr("class")),e="",g="";f(c,function(a,b){a!==!!d[b]&&(a?e+=(e.length?" ":"")+b:g+=(g.length?" ":"")+b)}),f(b,function(a){e&&Ra(a,e),g&&Qa(a,g)}),a.delete(b)}}),b.length=0}function h(c,f,h){var i=a.get(c)||{},j=e(i,f,!0),k=e(i,h,!1);(j||k)&&(a.set(c,i),b.push(c),1===b.length&&d.$postDigest(g))}return{enabled:p,on:p,off:p,pin:p,push:function(a,b,d,e){e&&e(),d=d||{},d.from&&a.css(d.from),d.to&&a.css(d.to),(d.addClass||d.removeClass)&&h(a,d.addClass,d.removeClass);var f=new c;return f.complete(),f}}}]},hf=["$provide",function(a){var b=this,c=null,d=null;this.$registeredAnimations=Object.create(null),this.register=function(c,d){if(c&&"."!==c.charAt(0))throw df("notcsel","Expecting class selector starting with '.' got '{0}'.",c);var e=c+"-animation";b.$registeredAnimations[c.substr(1)]=e,a.factory(e,d)},this.customFilter=function(a){return 1===arguments.length&&(d=B(a)?a:null),d},this.classNameFilter=function(a){if(1===arguments.length&&(c=a instanceof RegExp?a:null)){if(new RegExp("[(\\s|\\/)]ng-animate[(\\s|\\/)]").test(c.toString()))throw c=null,df("nongcls",'$animateProvider.classNameFilter(regex) prohibits accepting a regex value which matches/contains the "{0}" CSS class.',"ng-animate")}return c},this.$get=["$animateQueue",function(a){function b(a,b,c){if(c){var d=mb(c);!d||d.parentNode||d.previousElementSibling||(c=null)}c?c.after(a):b.prepend(a)}return{on:a.on,off:a.off,pin:a.pin,enabled:a.enabled,cancel:function(a){a.end&&a.end()},enter:function(c,d,e,f){return d=d&&de(d),e=e&&de(e),d=d||e.parent(),b(c,d,e),a.push(c,"enter",ob(f))},move:function(c,d,e,f){return d=d&&de(d),e=e&&de(e),d=d||e.parent(),b(c,d,e),a.push(c,"move",ob(f))},leave:function(b,c){return a.push(b,"leave",ob(c),function(){b.remove()})},addClass:function(b,c,d){return d=ob(d),d.addClass=lb(d.addclass,c),a.push(b,"addClass",d)},removeClass:function(b,c,d){return d=ob(d),d.removeClass=lb(d.removeClass,c),a.push(b,"removeClass",d)},setClass:function(b,c,d,e){return e=ob(e),e.addClass=lb(e.addClass,c),e.removeClass=lb(e.removeClass,d),a.push(b,"setClass",e)},animate:function(b,c,d,e,f){return f=ob(f),f.from=f.from?l(f.from,c):c,f.to=f.to?l(f.to,d):d,e=e||"ng-inline-animate",f.tempClasses=lb(f.tempClasses,e),a.push(b,"animate",f)}}}]}],jf=function(){this.$get=["$rAF",function(a){function b(b){c.push(b),c.length>1||a(function(){for(var a=0;a<c.length;a++)c[a]();c=[]})}var c=[];return function(){var a=!1;return b(function(){a=!0}),function(c){a?c():b(c)}}}]},kf=function(){this.$get=["$q","$sniffer","$animateAsyncRun","$isDocumentHidden","$timeout",function(a,b,c,d,e){function g(a){this.setHost(a);var b=c(),f=function(a){e(a,0,!1)};this._doneCallbacks=[],this._tick=function(a){d()?f(a):b(a)},this._state=0}return g.chain=function(a,b){function c(){if(d===a.length)return void b(!0);a[d](function(a){if(!1===a)return void b(!1);d++,c()})}var d=0;c()},g.all=function(a,b){function c(c){e=e&&c,++d===a.length&&b(e)}var d=0,e=!0;f(a,function(a){a.done(c)})},g.prototype={setHost:function(a){this.host=a||{}},done:function(a){2===this._state?a():this._doneCallbacks.push(a)},progress:p,getPromise:function(){if(!this.promise){var b=this;this.promise=a(function(a,c){b.done(function(b){!1===b?c():a()})})}return this.promise},then:function(a,b){return this.getPromise().then(a,b)},catch:function(a){return this.getPromise().catch(a)},finally:function(a){return this.getPromise().finally(a)},pause:function(){this.host.pause&&this.host.pause()},resume:function(){this.host.resume&&this.host.resume()},end:function(){this.host.end&&this.host.end(),this._resolve(!0)},cancel:function(){this.host.cancel&&this.host.cancel(),this._resolve(!1)},complete:function(a){var b=this;0===b._state&&(b._state=1,b._tick(function(){b._resolve(a)}))},_resolve:function(a){2!==this._state&&(f(this._doneCallbacks,function(b){b(a)}),this._doneCallbacks.length=0,this._state=2)}},g}]},lf=function(){this.$get=["$rAF","$q","$AnimateRunner",function(a,b,c){return function(b,d){function e(){return a(function(){f(),h||i.complete(),h=!0}),i}function f(){g.addClass&&(b.addClass(g.addClass),g.addClass=null),g.removeClass&&(b.removeClass(g.removeClass),g.removeClass=null),g.to&&(b.css(g.to),g.to=null)}var g=d||{};g.$prepared||(g=R(g)),g.cleanupStyles&&(g.from=g.to=null),g.from&&(b.css(g.from),g.from=null);var h,i=new c;return{start:e,end:e}}}]},mf=d("$compile"),nf=new tb;ub.$inject=["$provide","$sanitizeUriProvider"],vb.prototype.isFirstChange=function(){return this.previousValue===nf};var of=/^((?:x|data)[:\-_])/i,pf=/[:\-_]+(.)/g,qf=d("$controller"),rf=/^(\S+)(\s+as\s+([\w$]+))?#x2F;,sf=function(){this.$get=["$document",function(a){return function(b){return b?!b.nodeType&&b instanceof de&&(b=b[0]):b=a[0].body,b.offsetWidth+1}}]},tf="application/json",uf={"Content-Type":tf+";charset=utf-8"},vf=/^\[|^\{(?!\{)/,wf={"[":/]#x2F;,"{":/}#x2F;},xf=/^\)]\}',?\n/,yf=d("$http"),zf=me.$interpolateMinErr=d("$interpolate");zf.throwNoconcat=function(a){throw zf("noconcat","Error while interpolating: {0}\nStrict Contextual Escaping disallows interpolations that concatenate multiple expressions when a trusted value is required. See http://docs.angularjs.org/api/ng.$sce",a)},zf.interr=function(a,b){return zf("interr","Can't interpolate: {0}\n{1}",a,b.toString())};var Af=function(){this.$get=function(){function a(a){var b=function(a){b.data=a,b.called=!0};return b.id=a,b}var b=me.callbacks,c={};return{createCallback:function(d){var e="_"+(b.$counter++).toString(36),f="angular.callbacks."+e,g=a(e);return c[f]=b[e]=g,f},wasCalled:function(a){return c[a].called},getResponse:function(a){return c[a].data},removeCallback:function(a){var d=c[a];delete b[d.id],delete c[a]}}}},Bf=/^([^?#]*)(\?([^#]*))?(#(.*))?#x2F;,Cf={http:80,https:443,ftp:21},Df=d("$location"),Ef=/^\s*[\\/]{2,}/,Ff={$absUrl:"",$html5:!1,$replace:!1,absUrl:dc("$absUrl"),url:function(a){if(t(a))return this.$url;var b=Bf.exec(a);return(b[1]||""===a)&&this.path(decodeURIComponent(b[1])),(b[2]||b[1]||""===a)&&this.search(b[3]||""),this.hash(b[5]||""),this},protocol:dc("$protocol"),host:dc("$host"),port:dc("$port"),path:ec("$path",function(a){return a=null!==a?a.toString():"","/"===a.charAt(0)?a:"/"+a}),search:function(a,b){switch(arguments.length){case 0:return this.$search;case 1:if(x(a)||y(a))a=a.toString(),this.$search=da(a);else{if(!v(a))throw Df("isrcharg","The first argument of the `$location#search()` call must be a string or an object.");a=R(a,{}),f(a,function(b,c){null==b&&delete a[c]}),this.$search=a}break;default:t(b)||null===b?delete this.$search[a]:this.$search[a]=b}return this.$compose(),this},hash:ec("$hash",function(a){return null!==a?a.toString():""}),replace:function(){return this.$replace=!0,this}};f([cc,bc,ac],function(a){a.prototype=Object.create(Ff),a.prototype.state=function(b){if(!arguments.length)return this.$state;if(a!==ac||!this.$html5)throw Df("nostate","History API state support is available only in HTML5 mode and only in browsers supporting HTML5 History API");return this.$state=t(b)?null:b,this.$urlUpdatedByLocation=!0,this}});var Gf=d("$parse"),Hf={}.constructor.prototype.valueOf,If=sa();f("+ - * / % === !== == != < > <= >= && || ! = |".split(" "),function(a){If[a]=!0});var Jf={n:"\n",f:"\f",r:"\r",t:"\t",v:"\v","'":"'",'"':'"'},Kf=function(a){this.options=a};Kf.prototype={constructor:Kf,lex:function(a){for(this.text=a,this.index=0,this.tokens=[];this.index<this.text.length;){var b=this.text.charAt(this.index);if('"'===b||"'"===b)this.readString(b);else if(this.isNumber(b)||"."===b&&this.isNumber(this.peek()))this.readNumber();else if(this.isIdentifierStart(this.peekMultichar()))this.readIdent();else if(this.is(b,"(){}[].,;:?"))this.tokens.push({index:this.index,text:b}),this.index++;else if(this.isWhitespace(b))this.index++;else{var c=b+this.peek(),d=c+this.peek(2),e=If[b],f=If[c],g=If[d];if(e||f||g){var h=g?d:f?c:b;this.tokens.push({index:this.index,text:h,operator:!0}),this.index+=h.length}else this.throwError("Unexpected next character ",this.index,this.index+1)}}return this.tokens},is:function(a,b){return-1!==b.indexOf(a)},peek:function(a){var b=a||1;return this.index+b<this.text.length&&this.text.charAt(this.index+b)},isNumber:function(a){return"0"<=a&&a<="9"&&"string"==typeof a},isWhitespace:function(a){return" "===a||"\r"===a||"\t"===a||"\n"===a||"\v"===a||" "===a},isIdentifierStart:function(a){return this.options.isIdentifierStart?this.options.isIdentifierStart(a,this.codePointAt(a)):this.isValidIdentifierStart(a)},isValidIdentifierStart:function(a){return"a"<=a&&a<="z"||"A"<=a&&a<="Z"||"_"===a||"quot;===a},isIdentifierContinue:function(a){return this.options.isIdentifierContinue?this.options.isIdentifierContinue(a,this.codePointAt(a)):this.isValidIdentifierContinue(a)},isValidIdentifierContinue:function(a,b){return this.isValidIdentifierStart(a,b)||this.isNumber(a)},codePointAt:function(a){return 1===a.length?a.charCodeAt(0):(a.charCodeAt(0)<<10)+a.charCodeAt(1)-56613888},peekMultichar:function(){var a=this.text.charAt(this.index),b=this.peek();if(!b)return a;var c=a.charCodeAt(0),d=b.charCodeAt(0);return c>=55296&&c<=56319&&d>=56320&&d<=57343?a+b:a},isExpOperator:function(a){return"-"===a||"+"===a||this.isNumber(a)},throwError:function(a,b,c){c=c||this.index;var d=u(b)?"s "+b+"-"+this.index+" ["+this.text.substring(b,c)+"]":" "+c;throw Gf("lexerr","Lexer Error: {0} at column{1} in expression [{2}].",a,d,this.text)},readNumber:function(){for(var a="",b=this.index;this.index<this.text.length;){var c=$d(this.text.charAt(this.index));if("."===c||this.isNumber(c))a+=c;else{var d=this.peek();if("e"===c&&this.isExpOperator(d))a+=c;else if(this.isExpOperator(c)&&d&&this.isNumber(d)&&"e"===a.charAt(a.length-1))a+=c;else{if(!this.isExpOperator(c)||d&&this.isNumber(d)||"e"!==a.charAt(a.length-1))break;this.throwError("Invalid exponent")}}this.index++}this.tokens.push({index:b,text:a,constant:!0,value:Number(a)})},readIdent:function(){var a=this.index;for(this.index+=this.peekMultichar().length;this.index<this.text.length;){var b=this.peekMultichar();if(!this.isIdentifierContinue(b))break;this.index+=b.length}this.tokens.push({index:a,text:this.text.slice(a,this.index),identifier:!0})},readString:function(a){var b=this.index;this.index++;for(var c="",d=a,e=!1;this.index<this.text.length;){var f=this.text.charAt(this.index);if(d+=f,e){if("u"===f){var g=this.text.substring(this.index+1,this.index+5);g.match(/[\da-f]{4}/i)||this.throwError("Invalid unicode escape [\\u"+g+"]"),this.index+=4,c+=String.fromCharCode(parseInt(g,16))}else{c+=Jf[f]||f}e=!1}else if("\\"===f)e=!0;else{if(f===a)return this.index++,void this.tokens.push({index:b,text:d,constant:!0,value:c});c+=f}this.index++}this.throwError("Unterminated quote",b)}};var Lf=function(a,b){this.lexer=a,this.options=b};Lf.Program="Program",Lf.ExpressionStatement="ExpressionStatement",Lf.AssignmentExpression="AssignmentExpression",Lf.ConditionalExpression="ConditionalExpression",Lf.LogicalExpression="LogicalExpression",Lf.BinaryExpression="BinaryExpression",Lf.UnaryExpression="UnaryExpression",Lf.CallExpression="CallExpression",Lf.MemberExpression="MemberExpression",Lf.Identifier="Identifier",Lf.Literal="Literal",Lf.ArrayExpression="ArrayExpression",Lf.Property="Property",Lf.ObjectExpression="ObjectExpression",Lf.ThisExpression="ThisExpression",Lf.LocalsExpression="LocalsExpression",Lf.NGValueParameter="NGValueParameter",Lf.prototype={ast:function(a){this.text=a,this.tokens=this.lexer.lex(a);var b=this.program();return 0!==this.tokens.length&&this.throwError("is an unexpected token",this.tokens[0]),b},program:function(){for(var a=[];;)if(this.tokens.length>0&&!this.peek("}",")",";","]")&&a.push(this.expressionStatement()),!this.expect(";"))return{type:Lf.Program,body:a}},expressionStatement:function(){return{type:Lf.ExpressionStatement,expression:this.filterChain()}},filterChain:function(){for(var a=this.expression();this.expect("|");)a=this.filter(a);return a},expression:function(){return this.assignment()},assignment:function(){var a=this.ternary();if(this.expect("=")){if(!oc(a))throw Gf("lval","Trying to assign a value to a non l-value");a={type:Lf.AssignmentExpression,left:a,right:this.assignment(),operator:"="}}return a},ternary:function(){var a,b,c=this.logicalOR();return this.expect("?")&&(a=this.expression(),this.consume(":"))?(b=this.expression(),{type:Lf.ConditionalExpression,test:c,alternate:a,consequent:b}):c},logicalOR:function(){for(var a=this.logicalAND();this.expect("||");)a={type:Lf.LogicalExpression,operator:"||",left:a,right:this.logicalAND()};return a},logicalAND:function(){for(var a=this.equality();this.expect("&&");)a={type:Lf.LogicalExpression,operator:"&&",left:a,right:this.equality()};return a},equality:function(){for(var a,b=this.relational();a=this.expect("==","!=","===","!==");)b={type:Lf.BinaryExpression,operator:a.text,left:b,right:this.relational()};return b},relational:function(){for(var a,b=this.additive();a=this.expect("<",">","<=",">=");)b={type:Lf.BinaryExpression,operator:a.text,left:b,right:this.additive()};return b},additive:function(){for(var a,b=this.multiplicative();a=this.expect("+","-");)b={type:Lf.BinaryExpression,operator:a.text,left:b,right:this.multiplicative()};return b},multiplicative:function(){for(var a,b=this.unary();a=this.expect("*","/","%");)b={type:Lf.BinaryExpression,operator:a.text,left:b,right:this.unary()};return b},unary:function(){var a;return(a=this.expect("+","-","!"))?{type:Lf.UnaryExpression,operator:a.text,prefix:!0,argument:this.unary()}:this.primary()},primary:function(){var a;this.expect("(")?(a=this.filterChain(),this.consume(")")):this.expect("[")?a=this.arrayDeclaration():this.expect("{")?a=this.object():this.selfReferential.hasOwnProperty(this.peek().text)?a=R(this.selfReferential[this.consume().text]):this.options.literals.hasOwnProperty(this.peek().text)?a={type:Lf.Literal,value:this.options.literals[this.consume().text]}:this.peek().identifier?a=this.identifier():this.peek().constant?a=this.constant():this.throwError("not a primary expression",this.peek());for(var b;b=this.expect("(","[",".");)"("===b.text?(a={type:Lf.CallExpression,callee:a,arguments:this.parseArguments()},this.consume(")")):"["===b.text?(a={type:Lf.MemberExpression,object:a,property:this.expression(),computed:!0},this.consume("]")):"."===b.text?a={type:Lf.MemberExpression,object:a,property:this.identifier(),computed:!1}:this.throwError("IMPOSSIBLE");return a},filter:function(a){for(var b=[a],c={type:Lf.CallExpression,callee:this.identifier(),arguments:b,filter:!0};this.expect(":");)b.push(this.expression());return c},parseArguments:function(){var a=[];if(")"!==this.peekToken().text)do{a.push(this.filterChain())}while(this.expect(","));return a},identifier:function(){var a=this.consume();return a.identifier||this.throwError("is not a valid identifier",a),{type:Lf.Identifier,name:a.text}},constant:function(){return{type:Lf.Literal,value:this.consume().value}},arrayDeclaration:function(){var a=[];if("]"!==this.peekToken().text)do{if(this.peek("]"))break;a.push(this.expression())}while(this.expect(","));return this.consume("]"),{type:Lf.ArrayExpression,elements:a}},object:function(){var a,b=[];if("}"!==this.peekToken().text)do{if(this.peek("}"))break;a={type:Lf.Property,kind:"init"},this.peek().constant?(a.key=this.constant(),a.computed=!1,this.consume(":"),a.value=this.expression()):this.peek().identifier?(a.key=this.identifier(),a.computed=!1,this.peek(":")?(this.consume(":"),a.value=this.expression()):a.value=a.key):this.peek("[")?(this.consume("["),a.key=this.expression(),this.consume("]"),a.computed=!0,
5
this.consume(":"),a.value=this.expression()):this.throwError("invalid key",this.peek()),b.push(a)}while(this.expect(","));return this.consume("}"),{type:Lf.ObjectExpression,properties:b}},throwError:function(a,b){throw Gf("syntax","Syntax Error: Token '{0}' {1} at column {2} of the expression [{3}] starting at [{4}].",b.text,a,b.index+1,this.text,this.text.substring(b.index))},consume:function(a){if(0===this.tokens.length)throw Gf("ueoe","Unexpected end of expression: {0}",this.text);var b=this.expect(a);return b||this.throwError("is unexpected, expecting ["+a+"]",this.peek()),b},peekToken:function(){if(0===this.tokens.length)throw Gf("ueoe","Unexpected end of expression: {0}",this.text);return this.tokens[0]},peek:function(a,b,c,d){return this.peekAhead(0,a,b,c,d)},peekAhead:function(a,b,c,d,e){if(this.tokens.length>a){var f=this.tokens[a],g=f.text;if(g===b||g===c||g===d||g===e||!b&&!c&&!d&&!e)return f}return!1},expect:function(a,b,c,d){var e=this.peek(a,b,c,d);return!!e&&(this.tokens.shift(),e)},selfReferential:{this:{type:Lf.ThisExpression},$locals:{type:Lf.LocalsExpression}}};var Mf=1,Nf=2;sc.prototype={compile:function(a){var b=this;this.state={nextId:0,filters:{},fn:{vars:[],body:[],own:{}},assign:{vars:[],body:[],own:{}},inputs:[]},mc(a,b.$filter);var c,d="";if(this.stage="assign",c=pc(a)){this.state.computing="assign";var e=this.nextId();this.recurse(c,e),this.return_(e),d="fn.assign="+this.generateFunction("assign","s,v,l")}var g=nc(a.body);b.stage="inputs",f(g,function(a,c){var d="fn"+c;b.state[d]={vars:[],body:[],own:{}},b.state.computing=d;var e=b.nextId();b.recurse(a,e),b.return_(e),b.state.inputs.push({name:d,isPure:a.isPure}),a.watchId=c}),this.state.computing="fn",this.stage="main",this.recurse(a);var h='"'+this.USE+" "+this.STRICT+'";\n'+this.filterPrefix()+"var fn="+this.generateFunction("fn","s,l,a,i")+d+this.watchFns()+"return fn;",i=new Function("$filter","getStringValue","ifDefined","plus",h)(this.$filter,hc,ic,jc);return this.state=this.stage=void 0,i},USE:"use",STRICT:"strict",watchFns:function(){var a=[],b=this.state.inputs,c=this;return f(b,function(b){a.push("var "+b.name+"="+c.generateFunction(b.name,"s")),b.isPure&&a.push(b.name,".isPure="+JSON.stringify(b.isPure)+";")}),b.length&&a.push("fn.inputs=["+b.map(function(a){return a.name}).join(",")+"];"),a.join("")},generateFunction:function(a,b){return"function("+b+"){"+this.varsPrefix(a)+this.body(a)+"};"},filterPrefix:function(){var a=[],b=this;return f(this.state.filters,function(c,d){a.push(c+"=$filter("+b.escape(d)+")")}),a.length?"var "+a.join(",")+";":""},varsPrefix:function(a){return this.state[a].vars.length?"var "+this.state[a].vars.join(",")+";":""},body:function(a){return this.state[a].body.join("")},recurse:function(a,b,c,d,e,g){var h,i,j,k,l,m=this;if(d=d||p,!g&&u(a.watchId))return b=b||this.nextId(),void this.if_("i",this.lazyAssign(b,this.computedMember("i",a.watchId)),this.lazyRecurse(a,b,c,d,e,!0));switch(a.type){case Lf.Program:f(a.body,function(b,c){m.recurse(b.expression,void 0,void 0,function(a){i=a}),c!==a.body.length-1?m.current().body.push(i,";"):m.return_(i)});break;case Lf.Literal:k=this.escape(a.value),this.assign(b,k),d(b||k);break;case Lf.UnaryExpression:this.recurse(a.argument,void 0,void 0,function(a){i=a}),k=a.operator+"("+this.ifDefined(i,0)+")",this.assign(b,k),d(k);break;case Lf.BinaryExpression:this.recurse(a.left,void 0,void 0,function(a){h=a}),this.recurse(a.right,void 0,void 0,function(a){i=a}),k="+"===a.operator?this.plus(h,i):"-"===a.operator?this.ifDefined(h,0)+a.operator+this.ifDefined(i,0):"("+h+")"+a.operator+"("+i+")",this.assign(b,k),d(k);break;case Lf.LogicalExpression:b=b||this.nextId(),m.recurse(a.left,b),m.if_("&&"===a.operator?b:m.not(b),m.lazyRecurse(a.right,b)),d(b);break;case Lf.ConditionalExpression:b=b||this.nextId(),m.recurse(a.test,b),m.if_(b,m.lazyRecurse(a.alternate,b),m.lazyRecurse(a.consequent,b)),d(b);break;case Lf.Identifier:b=b||this.nextId(),c&&(c.context="inputs"===m.stage?"s":this.assign(this.nextId(),this.getHasOwnProperty("l",a.name)+"?l:s"),c.computed=!1,c.name=a.name),m.if_("inputs"===m.stage||m.not(m.getHasOwnProperty("l",a.name)),function(){m.if_("inputs"===m.stage||"s",function(){e&&1!==e&&m.if_(m.isNull(m.nonComputedMember("s",a.name)),m.lazyAssign(m.nonComputedMember("s",a.name),"{}")),m.assign(b,m.nonComputedMember("s",a.name))})},b&&m.lazyAssign(b,m.nonComputedMember("l",a.name))),d(b);break;case Lf.MemberExpression:h=c&&(c.context=this.nextId())||this.nextId(),b=b||this.nextId(),m.recurse(a.object,h,void 0,function(){m.if_(m.notNull(h),function(){a.computed?(i=m.nextId(),m.recurse(a.property,i),m.getStringValue(i),e&&1!==e&&m.if_(m.not(m.computedMember(h,i)),m.lazyAssign(m.computedMember(h,i),"{}")),k=m.computedMember(h,i),m.assign(b,k),c&&(c.computed=!0,c.name=i)):(e&&1!==e&&m.if_(m.isNull(m.nonComputedMember(h,a.property.name)),m.lazyAssign(m.nonComputedMember(h,a.property.name),"{}")),k=m.nonComputedMember(h,a.property.name),m.assign(b,k),c&&(c.computed=!1,c.name=a.property.name))},function(){m.assign(b,"undefined")}),d(b)},!!e);break;case Lf.CallExpression:b=b||this.nextId(),a.filter?(i=m.filter(a.callee.name),j=[],f(a.arguments,function(a){var b=m.nextId();m.recurse(a,b),j.push(b)}),k=i+"("+j.join(",")+")",m.assign(b,k),d(b)):(i=m.nextId(),h={},j=[],m.recurse(a.callee,i,h,function(){m.if_(m.notNull(i),function(){f(a.arguments,function(b){m.recurse(b,a.constant?void 0:m.nextId(),void 0,function(a){j.push(a)})}),k=h.name?m.member(h.context,h.name,h.computed)+"("+j.join(",")+")":i+"("+j.join(",")+")",m.assign(b,k)},function(){m.assign(b,"undefined")}),d(b)}));break;case Lf.AssignmentExpression:i=this.nextId(),h={},this.recurse(a.left,void 0,h,function(){m.if_(m.notNull(h.context),function(){m.recurse(a.right,i),k=m.member(h.context,h.name,h.computed)+a.operator+i,m.assign(b,k),d(b||k)})},1);break;case Lf.ArrayExpression:j=[],f(a.elements,function(b){m.recurse(b,a.constant?void 0:m.nextId(),void 0,function(a){j.push(a)})}),k="["+j.join(",")+"]",this.assign(b,k),d(b||k);break;case Lf.ObjectExpression:j=[],l=!1,f(a.properties,function(a){a.computed&&(l=!0)}),l?(b=b||this.nextId(),this.assign(b,"{}"),f(a.properties,function(a){a.computed?(h=m.nextId(),m.recurse(a.key,h)):h=a.key.type===Lf.Identifier?a.key.name:""+a.key.value,i=m.nextId(),m.recurse(a.value,i),m.assign(m.member(b,h,a.computed),i)})):(f(a.properties,function(b){m.recurse(b.value,a.constant?void 0:m.nextId(),void 0,function(a){j.push(m.escape(b.key.type===Lf.Identifier?b.key.name:""+b.key.value)+":"+a)})}),k="{"+j.join(",")+"}",this.assign(b,k)),d(b||k);break;case Lf.ThisExpression:this.assign(b,"s"),d(b||"s");break;case Lf.LocalsExpression:this.assign(b,"l"),d(b||"l");break;case Lf.NGValueParameter:this.assign(b,"v"),d(b||"v")}},getHasOwnProperty:function(a,b){var c=a+"."+b,d=this.current().own;return d.hasOwnProperty(c)||(d[c]=this.nextId(!1,a+"&&("+this.escape(b)+" in "+a+")")),d[c]},assign:function(a,b){if(a)return this.current().body.push(a,"=",b,";"),a},filter:function(a){return this.state.filters.hasOwnProperty(a)||(this.state.filters[a]=this.nextId(!0)),this.state.filters[a]},ifDefined:function(a,b){return"ifDefined("+a+","+this.escape(b)+")"},plus:function(a,b){return"plus("+a+","+b+")"},return_:function(a){this.current().body.push("return ",a,";")},if_:function(a,b,c){if(!0===a)b();else{var d=this.current().body;d.push("if(",a,"){"),b(),d.push("}"),c&&(d.push("else{"),c(),d.push("}"))}},not:function(a){return"!("+a+")"},isNull:function(a){return a+"==null"},notNull:function(a){return a+"!=null"},nonComputedMember:function(a,b){var c=/^[$_a-zA-Z][$_a-zA-Z0-9]*#x2F;,d=/[^$_a-zA-Z0-9]/g;return c.test(b)?a+"."+b:a+'["'+b.replace(d,this.stringEscapeFn)+'"]'},computedMember:function(a,b){return a+"["+b+"]"},member:function(a,b,c){return c?this.computedMember(a,b):this.nonComputedMember(a,b)},getStringValue:function(a){this.assign(a,"getStringValue("+a+")")},lazyRecurse:function(a,b,c,d,e,f){var g=this;return function(){g.recurse(a,b,c,d,e,f)}},lazyAssign:function(a,b){var c=this;return function(){c.assign(a,b)}},stringEscapeRegex:/[^ a-zA-Z0-9]/g,stringEscapeFn:function(a){return"\\u"+("0000"+a.charCodeAt(0).toString(16)).slice(-4)},escape:function(a){if(x(a))return"'"+a.replace(this.stringEscapeRegex,this.stringEscapeFn)+"'";if(y(a))return a.toString();if(!0===a)return"true";if(!1===a)return"false";if(null===a)return"null";if(void 0===a)return"undefined";throw Gf("esc","IMPOSSIBLE")},nextId:function(a,b){var c="v"+this.state.nextId++;return a||this.current().vars.push(c+(b?"="+b:"")),c},current:function(){return this.state[this.state.computing]}},tc.prototype={compile:function(a){var b=this;mc(a,b.$filter);var c,d;(c=pc(a))&&(d=this.recurse(c));var e,g=nc(a.body);g&&(e=[],f(g,function(a,c){var d=b.recurse(a);d.isPure=a.isPure,a.input=d,e.push(d),a.watchId=c}));var h=[];f(a.body,function(a){h.push(b.recurse(a.expression))});var i=0===a.body.length?p:1===a.body.length?h[0]:function(a,b){var c;return f(h,function(d){c=d(a,b)}),c};return d&&(i.assign=function(a,b,c){return d(a,c,b)}),e&&(i.inputs=e),i},recurse:function(a,b,c){var d,e,g,h=this;if(a.input)return this.inputs(a.input,a.watchId);switch(a.type){case Lf.Literal:return this.value(a.value,b);case Lf.UnaryExpression:return e=this.recurse(a.argument),this["unary"+a.operator](e,b);case Lf.BinaryExpression:case Lf.LogicalExpression:return d=this.recurse(a.left),e=this.recurse(a.right),this["binary"+a.operator](d,e,b);case Lf.ConditionalExpression:return this["ternary?:"](this.recurse(a.test),this.recurse(a.alternate),this.recurse(a.consequent),b);case Lf.Identifier:return h.identifier(a.name,b,c);case Lf.MemberExpression:return d=this.recurse(a.object,!1,!!c),a.computed||(e=a.property.name),a.computed&&(e=this.recurse(a.property)),a.computed?this.computedMember(d,e,b,c):this.nonComputedMember(d,e,b,c);case Lf.CallExpression:return g=[],f(a.arguments,function(a){g.push(h.recurse(a))}),a.filter&&(e=this.$filter(a.callee.name)),a.filter||(e=this.recurse(a.callee,!0)),a.filter?function(a,c,d,f){for(var h=[],i=0;i<g.length;++i)h.push(g[i](a,c,d,f));var j=e.apply(void 0,h,f);return b?{context:void 0,name:void 0,value:j}:j}:function(a,c,d,f){var h,i=e(a,c,d,f);if(null!=i.value){for(var j=[],k=0;k<g.length;++k)j.push(g[k](a,c,d,f));h=i.value.apply(i.context,j)}return b?{value:h}:h};case Lf.AssignmentExpression:return d=this.recurse(a.left,!0,1),e=this.recurse(a.right),function(a,c,f,g){var h=d(a,c,f,g),i=e(a,c,f,g);return h.context[h.name]=i,b?{value:i}:i};case Lf.ArrayExpression:return g=[],f(a.elements,function(a){g.push(h.recurse(a))}),function(a,c,d,e){for(var f=[],h=0;h<g.length;++h)f.push(g[h](a,c,d,e));return b?{value:f}:f};case Lf.ObjectExpression:return g=[],f(a.properties,function(a){a.computed?g.push({key:h.recurse(a.key),computed:!0,value:h.recurse(a.value)}):g.push({key:a.key.type===Lf.Identifier?a.key.name:""+a.key.value,computed:!1,value:h.recurse(a.value)})}),function(a,c,d,e){for(var f={},h=0;h<g.length;++h)g[h].computed?f[g[h].key(a,c,d,e)]=g[h].value(a,c,d,e):f[g[h].key]=g[h].value(a,c,d,e);return b?{value:f}:f};case Lf.ThisExpression:return function(a){return b?{value:a}:a};case Lf.LocalsExpression:return function(a,c){return b?{value:c}:c};case Lf.NGValueParameter:return function(a,c,d){return b?{value:d}:d}}},"unary+":function(a,b){return function(c,d,e,f){var g=a(c,d,e,f);return g=u(g)?+g:0,b?{value:g}:g}},"unary-":function(a,b){return function(c,d,e,f){var g=a(c,d,e,f);return g=u(g)?-g:-0,b?{value:g}:g}},"unary!":function(a,b){return function(c,d,e,f){var g=!a(c,d,e,f);return b?{value:g}:g}},"binary+":function(a,b,c){return function(d,e,f,g){var h=a(d,e,f,g),i=b(d,e,f,g),j=jc(h,i);return c?{value:j}:j}},"binary-":function(a,b,c){return function(d,e,f,g){var h=a(d,e,f,g),i=b(d,e,f,g),j=(u(h)?h:0)-(u(i)?i:0);return c?{value:j}:j}},"binary*":function(a,b,c){return function(d,e,f,g){var h=a(d,e,f,g)*b(d,e,f,g);return c?{value:h}:h}},"binary/":function(a,b,c){return function(d,e,f,g){var h=a(d,e,f,g)/b(d,e,f,g);return c?{value:h}:h}},"binary%":function(a,b,c){return function(d,e,f,g){var h=a(d,e,f,g)%b(d,e,f,g);return c?{value:h}:h}},"binary===":function(a,b,c){return function(d,e,f,g){var h=a(d,e,f,g)===b(d,e,f,g);return c?{value:h}:h}},"binary!==":function(a,b,c){return function(d,e,f,g){var h=a(d,e,f,g)!==b(d,e,f,g);return c?{value:h}:h}},"binary==":function(a,b,c){return function(d,e,f,g){var h=a(d,e,f,g)==b(d,e,f,g);return c?{value:h}:h}},"binary!=":function(a,b,c){return function(d,e,f,g){var h=a(d,e,f,g)!=b(d,e,f,g);return c?{value:h}:h}},"binary<":function(a,b,c){return function(d,e,f,g){var h=a(d,e,f,g)<b(d,e,f,g);return c?{value:h}:h}},"binary>":function(a,b,c){return function(d,e,f,g){var h=a(d,e,f,g)>b(d,e,f,g);return c?{value:h}:h}},"binary<=":function(a,b,c){return function(d,e,f,g){var h=a(d,e,f,g)<=b(d,e,f,g);return c?{value:h}:h}},"binary>=":function(a,b,c){return function(d,e,f,g){var h=a(d,e,f,g)>=b(d,e,f,g);return c?{value:h}:h}},"binary&&":function(a,b,c){return function(d,e,f,g){var h=a(d,e,f,g)&&b(d,e,f,g);return c?{value:h}:h}},"binary||":function(a,b,c){return function(d,e,f,g){var h=a(d,e,f,g)||b(d,e,f,g);return c?{value:h}:h}},"ternary?:":function(a,b,c,d){return function(e,f,g,h){var i=a(e,f,g,h)?b(e,f,g,h):c(e,f,g,h);return d?{value:i}:i}},value:function(a,b){return function(){return b?{context:void 0,name:void 0,value:a}:a}},identifier:function(a,b,c){return function(d,e,f,g){var h=e&&a in e?e:d;c&&1!==c&&h&&null==h[a]&&(h[a]={});var i=h?h[a]:void 0;return b?{context:h,name:a,value:i}:i}},computedMember:function(a,b,c,d){return function(e,f,g,h){var i,j,k=a(e,f,g,h);return null!=k&&(i=b(e,f,g,h),i=hc(i),d&&1!==d&&k&&!k[i]&&(k[i]={}),j=k[i]),c?{context:k,name:i,value:j}:j}},nonComputedMember:function(a,b,c,d){return function(e,f,g,h){var i=a(e,f,g,h);d&&1!==d&&i&&null==i[b]&&(i[b]={});var j=null!=i?i[b]:void 0;return c?{context:i,name:b,value:j}:j}},inputs:function(a,b){return function(c,d,e,f){return f?f[b]:a(c,d,e)}}},uc.prototype={constructor:uc,parse:function(a){var b=this.ast.ast(a),c=this.astCompiler.compile(b);return c.literal=qc(b),c.constant=rc(b),c}};var Of=d("$sce"),Pf={HTML:"html",CSS:"css",URL:"url",RESOURCE_URL:"resourceUrl",JS:"js"},Qf=/_([a-z])/g,Rf=d("$compile"),Sf=a.document.createElement("a"),Tf=Pc(a.location.href);Sc.$inject=["$document"],Uc.$inject=["$provide"];var Uf=22,Vf=".",Wf="0";Zc.$inject=["$locale"],$c.$inject=["$locale"];var Xf={yyyy:dd("FullYear",4,0,!1,!0),yy:dd("FullYear",2,0,!0,!0),y:dd("FullYear",1,0,!1,!0),MMMM:ed("Month"),MMM:ed("Month",!0),MM:dd("Month",2,1),M:dd("Month",1,1),LLLL:ed("Month",!1,!0),dd:dd("Date",2),d:dd("Date",1),HH:dd("Hours",2),H:dd("Hours",1),hh:dd("Hours",2,-12),h:dd("Hours",1,-12),mm:dd("Minutes",2),m:dd("Minutes",1),ss:dd("Seconds",2),s:dd("Seconds",1),sss:dd("Milliseconds",3),EEEE:ed("Day"),EEE:ed("Day",!0),a:jd,Z:fd,ww:id(2),w:id(1),G:kd,GG:kd,GGG:kd,GGGG:ld},Yf=/((?:[^yMLdHhmsaZEwG']+)|(?:'(?:[^']|'')*')|(?:E+|y+|M+|L+|d+|H+|h+|m+|s+|a|Z|G+|w+))([\s\S]*)/,Zf=/^-?\d+#x2F;;md.$inject=["$locale"];var $f=r($d),_f=r(_d);qd.$inject=["$parse"];var ag=r({restrict:"E",compile:function(a,b){if(!b.href&&!b.xlinkHref)return function(a,b){if("a"===b[0].nodeName.toLowerCase()){var c="[object SVGAnimatedString]"===je.call(b.prop("href"))?"xlink:href":"href";b.on("click",function(a){b.attr(c)||a.preventDefault()})}}}}),bg={};f(Te,function(a,b){function c(a,c,e){a.$watch(e[d],function(a){e.$set(b,!!a)})}if("multiple"!==a){var d=wb("ng-"+b),e=c;"checked"===a&&(e=function(a,b,e){e.ngModel!==e[d]&&c(a,b,e)}),bg[d]=function(){return{restrict:"A",priority:100,link:e}}}}),f(Ve,function(a,b){bg[b]=function(){return{priority:100,link:function(a,c,d){if("ngPattern"===b&&"/"===d.ngPattern.charAt(0)){var e=d.ngPattern.match(Xd);if(e)return void d.$set("ngPattern",new RegExp(e[1],e[2]))}a.$watch(d[b],function(a){d.$set(b,a)})}}}}),f(["src","srcset","href"],function(a){var b=wb("ng-"+a);bg[b]=function(){return{priority:99,link:function(c,d,e){var f=a,g=a;"href"===a&&"[object SVGAnimatedString]"===je.call(d.prop("href"))&&(g="xlinkHref",e.$attr[g]="xlink:href",f=null),e.$observe(b,function(b){if(!b)return void("href"===a&&e.$set(g,null));e.$set(g,b),ce&&f&&d.prop(f,e[g])})}}}});var cg={$addControl:p,$renameControl:sd,$removeControl:p,$setValidity:p,$setDirty:p,$setPristine:p,$setSubmitted:p},dg="ng-pending";td.$inject=["$element","$attrs","$scope","$animate","$interpolate"],td.prototype={$rollbackViewValue:function(){f(this.$controls,function(a){a.$rollbackViewValue()})},$commitViewValue:function(){f(this.$controls,function(a){a.$commitViewValue()})},$addControl:function(a){pa(a.$name,"input"),this.$controls.push(a),a.$name&&(this[a.$name]=a),a.$parentForm=this},$renameControl:function(a,b){var c=a.$name;this[c]===a&&delete this[c],this[b]=a,a.$name=b},$removeControl:function(a){a.$name&&this[a.$name]===a&&delete this[a.$name],f(this.$pending,function(b,c){this.$setValidity(c,null,a)},this),f(this.$error,function(b,c){this.$setValidity(c,null,a)},this),f(this.$success,function(b,c){this.$setValidity(c,null,a)},this),Q(this.$controls,a),a.$parentForm=cg},$setDirty:function(){this.$animate.removeClass(this.$element,Og),this.$animate.addClass(this.$element,Pg),this.$dirty=!0,this.$pristine=!1,this.$parentForm.$setDirty()},$setPristine:function(){this.$animate.setClass(this.$element,Og,Pg+" ng-submitted"),this.$dirty=!1,this.$pristine=!0,this.$submitted=!1,f(this.$controls,function(a){a.$setPristine()})},$setUntouched:function(){f(this.$controls,function(a){a.$setUntouched()})},$setSubmitted:function(){this.$animate.addClass(this.$element,"ng-submitted"),this.$submitted=!0,this.$parentForm.$setSubmitted()}},vd({clazz:td,set:function(a,b,c){var d=a[b];if(d){-1===d.indexOf(c)&&d.push(c)}else a[b]=[c]},unset:function(a,b,c){var d=a[b];d&&(Q(d,c),0===d.length&&delete a[b])}});var eg=function(a){return["$timeout","$parse",function(b,c){function d(a){return""===a?c('this[""]').assign:c(a).assign||p}return{name:"form",restrict:a?"EAC":"E",require:["form","^^?form"],controller:td,compile:function(c,e){c.addClass(Og).addClass(Mg);var f=e.name?"name":!(!a||!e.ngForm)&&"ngForm";return{pre:function(a,c,e,g){var h=g[0];if(!("action"in e)){var i=function(b){a.$apply(function(){h.$commitViewValue(),h.$setSubmitted()}),b.preventDefault()};c[0].addEventListener("submit",i),c.on("$destroy",function(){b(function(){c[0].removeEventListener("submit",i)},0,!1)})}(g[1]||h.$parentForm).$addControl(h);var j=f?d(h.$name):p;f&&(j(a,h),e.$observe(f,function(b){h.$name!==b&&(j(a,void 0),h.$parentForm.$renameControl(h,b),(j=d(h.$name))(a,h))})),c.on("$destroy",function(){h.$parentForm.$removeControl(h),j(a,void 0),l(h,cg)})}}}}}]},fg=eg(),gg=eg(!0),hg=/^\d{4,}-[01]\d-[0-3]\dT[0-2]\d:[0-5]\d:[0-5]\d\.\d+(?:[+-][0-2]\d:[0-5]\d|Z)#x2F;,ig=/^[a-z][a-z\d.+-]*:\/*(?:[^:@]+(?::[^@]+)?@)?(?:[^\s:\/?#]+|\[[a-f\d:]+])(?::\d+)?(?:\/[^?#]*)?(?:\?[^#]*)?(?:#.*)?#x2F;i,jg=/^(?=.{1,254}$)(?=.{1,64}@)[-!#$%&'*+\/0-9=?A-Z^_`a-z{|}~]+(\.[-!#$%&'*+\/0-9=?A-Z^_`a-z{|}~]+)*@[A-Za-z0-9]([A-Za-z0-9-]{0,61}[A-Za-z0-9])?(\.[A-Za-z0-9]([A-Za-z0-9-]{0,61}[A-Za-z0-9])?)*#x2F;,kg=/^\s*(-|\+)?(\d+|(\d*(\.\d*)))([eE][+-]?\d+)?\s*#x2F;,lg=/^(\d{4,})-(\d{2})-(\d{2})#x2F;,mg=/^(\d{4,})-(\d\d)-(\d\d)T(\d\d):(\d\d)(?::(\d\d)(\.\d{1,3})?)?#x2F;,ng=/^(\d{4,})-W(\d\d)#x2F;,og=/^(\d{4,})-(\d\d)#x2F;,pg=/^(\d\d):(\d\d)(?::(\d\d)(\.\d{1,3})?)?#x2F;,qg="keydown wheel mousedown",rg=sa();f("date,datetime-local,month,time,week".split(","),function(a){rg[a]=!0});var sg={text:yd,date:Cd("date",lg,Bd(lg,["yyyy","MM","dd"]),"yyyy-MM-dd"),"datetime-local":Cd("datetimelocal",mg,Bd(mg,["yyyy","MM","dd","HH","mm","ss","sss"]),"yyyy-MM-ddTHH:mm:ss.sss"),time:Cd("time",pg,Bd(pg,["HH","mm","ss","sss"]),"HH:mm:ss.sss"),week:Cd("week",ng,Ad,"yyyy-Www"),month:Cd("month",og,Bd(og,["yyyy","MM"]),"yyyy-MM"),number:Jd,url:Ld,email:Md,radio:Nd,range:Kd,checkbox:Pd,hidden:p,button:p,submit:p,reset:p,file:p},tg=["$browser","$sniffer","$filter","$parse",function(a,b,c,d){return{restrict:"E",require:["?ngModel"],link:{pre:function(e,f,g,h){h[0]&&(sg[$d(g.type)]||sg.text)(e,f,g,h[0],b,a,c,d)}}}}],ug=/^(true|false|\d+)#x2F;,vg=function(){function a(a,b,c){var d=u(c)?c:9===ce?"":null;a.prop("value",d),b.$set("value",c)}return{restrict:"A",priority:100,compile:function(b,c){return ug.test(c.ngValue)?function(b,c,d){a(c,d,b.$eval(d.ngValue))}:function(b,c,d){b.$watch(d.ngValue,function(b){a(c,d,b)})}}}},wg=["$compile",function(a){return{restrict:"AC",compile:function(b){return a.$addBindingClass(b),function(b,c,d){a.$addBindingInfo(c,d.ngBind),c=c[0],b.$watch(d.ngBind,function(a){c.textContent=ta(a)})}}}}],xg=["$interpolate","$compile",function(a,b){return{compile:function(c){return b.$addBindingClass(c),function(c,d,e){var f=a(d.attr(e.$attr.ngBindTemplate));b.$addBindingInfo(d,f.expressions),d=d[0],e.$observe("ngBindTemplate",function(a){d.textContent=t(a)?"":a})}}}}],yg=["$sce","$parse","$compile",function(a,b,c){return{restrict:"A",compile:function(d,e){var f=b(e.ngBindHtml),g=b(e.ngBindHtml,function(b){return a.valueOf(b)});return c.$addBindingClass(d),function(b,d,e){c.$addBindingInfo(d,e.ngBindHtml),b.$watch(g,function(){var c=f(b);d.html(a.getTrustedHtml(c)||"")})}}}}],zg=r({restrict:"A",require:"ngModel",link:function(a,b,c,d){d.$viewChangeListeners.push(function(){a.$eval(c.ngChange)})}}),Ag=Qd("",!0),Bg=Qd("Odd",0),Cg=Qd("Even",1),Dg=rd({compile:function(a,b){b.$set("ngCloak",void 0),a.removeClass("ng-cloak")}}),Eg=[function(){return{restrict:"A",scope:!0,controller:"@",priority:500}}],Fg={},Gg={blur:!0,focus:!0};f("click dblclick mousedown mouseup mouseover mouseout mousemove mouseenter mouseleave keydown keyup keypress submit focus blur copy cut paste".split(" "),function(a){var b=wb("ng-"+a);Fg[b]=["$parse","$rootScope",function(c,d){return{restrict:"A",compile:function(e,f){var g=c(f[b]);return function(b,c){c.on(a,function(c){var e=function(){g(b,{$event:c})};Gg[a]&&d.$phase?b.$evalAsync(e):b.$apply(e)})}}}}]});var Hg=["$animate","$compile",function(a,b){return{multiElement:!0,transclude:"element",priority:600,terminal:!0,restrict:"A",$tlb:!0,link:function(c,d,e,f,g){var h,i,j;c.$watch(e.ngIf,function(c){c?i||g(function(c,f){i=f,c[c.length++]=b.$createComment("end ngIf",e.ngIf),h={clone:c},a.enter(c,d.parent(),d)}):(j&&(j.remove(),j=null),i&&(i.$destroy(),i=null),h&&(j=ra(h.clone),a.leave(j).done(function(a){!1!==a&&(j=null)}),h=null))})}}}],Ig=["$templateRequest","$anchorScroll","$animate",function(a,b,c){return{restrict:"ECA",priority:400,terminal:!0,transclude:"element",controller:me.noop,compile:function(d,e){var f=e.ngInclude||e.src,g=e.onload||"",h=e.autoscroll;return function(d,e,i,j,k){var l,m,n,o=0,p=function(){m&&(m.remove(),m=null),l&&(l.$destroy(),l=null),n&&(c.leave(n).done(function(a){!1!==a&&(m=null)}),m=n,n=null)};d.$watch(f,function(f){var i=function(a){!1===a||!u(h)||h&&!d.$eval(h)||b()},m=++o;f?(a(f,!0).then(function(a){if(!d.$destroyed&&m===o){var b=d.$new();j.template=a;var h=k(b,function(a){p(),c.enter(a,null,e).done(i)});l=b,n=h,l.$emit("$includeContentLoaded",f),d.$eval(g)}},function(){d.$destroyed||m===o&&(p(),d.$emit("$includeContentError",f))}),d.$emit("$includeContentRequested",f)):(p(),j.template=null)})}}}}],Jg=["$compile",function(b){return{restrict:"ECA",priority:-400,require:"ngInclude",link:function(c,d,e,f){if(je.call(d[0]).match(/SVG/))return d.empty(),void b(Fa(f.template,a.document).childNodes)(c,function(a){d.append(a)},{futureParentElement:d});d.html(f.template),b(d.contents())(c)}}}],Kg=rd({priority:450,compile:function(){return{pre:function(a,b,c){a.$eval(c.ngInit)}}}}),Lg=function(){return{restrict:"A",priority:100,require:"ngModel",link:function(a,b,c,d){var e=c.ngList||", ",g="false"!==c.ngTrim,h=g?re(e):e,i=function(a){if(!t(a)){var b=[];return a&&f(a.split(h),function(a){a&&b.push(g?re(a):a)}),b}};d.$parsers.push(i),d.$formatters.push(function(a){if(pe(a))return a.join(e)}),d.$isEmpty=function(a){return!a||!a.length}}}},Mg="ng-valid",Ng="ng-invalid",Og="ng-pristine",Pg="ng-dirty",Qg=d("ngModel");Rd.$inject=["$scope","$exceptionHandler","$attrs","$element","$parse","$animate","$timeout","$q","$interpolate"],Rd.prototype={$initGetterSetters:function(){if(this.$options.getOption("getterSetter")){var a=this.$parse(this.$attr.ngModel+"()"),b=this.$parse(this.$attr.ngModel+"($$p)");this.$ngModelGet=function(b){var c=this.$parsedNgModel(b);return B(c)&&(c=a(b)),c},this.$ngModelSet=function(a,c){B(this.$parsedNgModel(a))?b(a,{$$p:c}):this.$parsedNgModelAssign(a,c)}}else if(!this.$parsedNgModel.assign)throw Qg("nonassign","Expression '{0}' is non-assignable. Element: {1}",this.$attr.ngModel,ba(this.$element))},$render:p,$isEmpty:function(a){return t(a)||""===a||null===a||a!==a},$updateEmptyClasses:function(a){this.$isEmpty(a)?(this.$animate.removeClass(this.$element,"ng-not-empty"),this.$animate.addClass(this.$element,"ng-empty")):(this.$animate.removeClass(this.$element,"ng-empty"),this.$animate.addClass(this.$element,"ng-not-empty"))},$setPristine:function(){this.$dirty=!1,this.$pristine=!0,this.$animate.removeClass(this.$element,Pg),this.$animate.addClass(this.$element,Og)},$setDirty:function(){this.$dirty=!0,this.$pristine=!1,this.$animate.removeClass(this.$element,Og),this.$animate.addClass(this.$element,Pg),this.$parentForm.$setDirty()},$setUntouched:function(){this.$touched=!1,this.$untouched=!0,this.$animate.setClass(this.$element,"ng-untouched","ng-touched")},$setTouched:function(){this.$touched=!0,this.$untouched=!1,this.$animate.setClass(this.$element,"ng-touched","ng-untouched")},$rollbackViewValue:function(){this.$timeout.cancel(this.$pendingDebounce),this.$viewValue=this.$lastCommittedViewValue,this.$render()},$validate:function(){if(!oe(this.$modelValue)){var a=this.$lastCommittedViewValue,b=this.$rawModelValue,c=this.$valid,d=this.$modelValue,e=this.$options.getOption("allowInvalid"),f=this;this.$runValidators(b,a,function(a){e||c===a||(f.$modelValue=a?b:void 0,f.$modelValue!==d&&f.$writeModelToScope())})}},$runValidators:function(a,b,c){function d(a,b){g===h.$currentValidationRunId&&h.$setValidity(a,b)}function e(a){g===h.$currentValidationRunId&&c(a)}this.$currentValidationRunId++;var g=this.$currentValidationRunId,h=this;return function(){var a=h.$parserName||"parse";return t(h.$parserValid)?(d(a,null),!0):(h.$parserValid||(f(h.$validators,function(a,b){d(b,null)}),f(h.$asyncValidators,function(a,b){d(b,null)})),d(a,h.$parserValid),h.$parserValid)}()&&function(){var c=!0;return f(h.$validators,function(e,f){var g=Boolean(e(a,b));c=c&&g,d(f,g)}),!!c||(f(h.$asyncValidators,function(a,b){d(b,null)}),!1)}()?void function(){var c=[],g=!0;f(h.$asyncValidators,function(e,f){var h=e(a,b);if(!J(h))throw Qg("nopromise","Expected asynchronous validator to return a promise but got '{0}' instead.",h);d(f,void 0),c.push(h.then(function(){d(f,!0)},function(){g=!1,d(f,!1)}))}),c.length?h.$q.all(c).then(function(){e(g)},p):e(!0)}():void e(!1)},$commitViewValue:function(){var a=this.$viewValue;this.$timeout.cancel(this.$pendingDebounce),(this.$lastCommittedViewValue!==a||""===a&&this.$hasNativeValidators)&&(this.$updateEmptyClasses(a),this.$lastCommittedViewValue=a,this.$pristine&&this.$setDirty(),this.$parseAndValidate())},$parseAndValidate:function(){function a(){d.$modelValue!==f&&d.$writeModelToScope()}var b=this.$lastCommittedViewValue,c=b,d=this;if(this.$parserValid=!t(c)||void 0,this.$parserValid)for(var e=0;e<this.$parsers.length;e++)if(c=this.$parsers[e](c),t(c)){this.$parserValid=!1;break}oe(this.$modelValue)&&(this.$modelValue=this.$ngModelGet(this.$scope));var f=this.$modelValue,g=this.$options.getOption("allowInvalid");this.$rawModelValue=c,g&&(this.$modelValue=c,a()),this.$runValidators(c,this.$lastCommittedViewValue,function(b){g||(d.$modelValue=b?c:void 0,a())})},$writeModelToScope:function(){this.$ngModelSet(this.$scope,this.$modelValue),f(this.$viewChangeListeners,function(a){try{a()}catch(a){this.$exceptionHandler(a)}},this)},$setViewValue:function(a,b){this.$viewValue=a,this.$options.getOption("updateOnDefault")&&this.$debounceViewValueCommit(b)},$debounceViewValueCommit:function(a){var b=this.$options.getOption("debounce");y(b[a])?b=b[a]:y(b.default)&&(b=b.default),this.$timeout.cancel(this.$pendingDebounce);var c=this;b>0?this.$pendingDebounce=this.$timeout(function(){c.$commitViewValue()},b):this.$scope.$root.$phase?this.$commitViewValue():this.$scope.$apply(function(){c.$commitViewValue()})},$overrideModelOptions:function(a){this.$options=this.$options.createChild(a)}},vd({clazz:Rd,set:function(a,b){a[b]=!0},unset:function(a,b){delete a[b]}});var Rg,Sg=["$rootScope",function(a){return{restrict:"A",require:["ngModel","^?form","^?ngModelOptions"],controller:Rd,priority:1,compile:function(b){return b.addClass(Og).addClass("ng-untouched").addClass(Mg),{pre:function(a,b,c,d){var e=d[0],f=d[1]||e.$parentForm,g=d[2];g&&(e.$options=g.$options),e.$initGetterSetters(),f.$addControl(e),c.$observe("name",function(a){e.$name!==a&&e.$parentForm.$renameControl(e,a)}),a.$on("$destroy",function(){e.$parentForm.$removeControl(e)})},post:function(b,c,d,e){function f(){g.$setTouched()}var g=e[0];g.$options.getOption("updateOn")&&c.on(g.$options.getOption("updateOn"),function(a){g.$debounceViewValueCommit(a&&a.type)}),c.on("blur",function(){g.$touched||(a.$phase?b.$evalAsync(f):b.$apply(f))})}}}}}],Tg=/(\s+|^)default(\s+|$)/;Td.prototype={getOption:function(a){return this.$options[a]},createChild:function(a){var b=!1;return a=l({},a),f(a,function(c,d){"$inherit"===c?"*"===d?b=!0:(a[d]=this.$options[d],"updateOn"===d&&(a.updateOnDefault=this.$options.updateOnDefault)):"updateOn"===d&&(a.updateOnDefault=!1,a[d]=re(c.replace(Tg,function(){return a.updateOnDefault=!0," "})))},this),b&&(delete a["*"],Ud(a,this.$options)),Ud(a,Rg.$options),new Td(a)}},Rg=new Td({updateOn:"",updateOnDefault:!0,debounce:0,getterSetter:!1,allowInvalid:!1,timezone:null});var Ug=function(){function a(a,b){this.$attrs=a,this.$scope=b}return a.$inject=["$attrs","$scope"],a.prototype={$onInit:function(){var a=this.parentCtrl?this.parentCtrl.$options:Rg,b=this.$scope.$eval(this.$attrs.ngModelOptions);this.$options=a.createChild(b)}},{restrict:"A",priority:10,require:{parentCtrl:"?^^ngModelOptions"},bindToController:!0,controller:a}},Vg=rd({terminal:!0,priority:1e3}),Wg=d("ngOptions"),Xg=/^\s*([\s\S]+?)(?:\s+as\s+([\s\S]+?))?(?:\s+group\s+by\s+([\s\S]+?))?(?:\s+disable\s+when\s+([\s\S]+?))?\s+for\s+(?:([$\w][$\w]*)|(?:\(\s*([$\w][$\w]*)\s*,\s*([$\w][$\w]*)\s*\)))\s+in\s+([\s\S]+?)(?:\s+track\s+by\s+([\s\S]+?))?#x2F;,Yg=["$compile","$document","$parse",function(b,c,d){function g(a,b,c){function f(a,b,c,d,e){this.selectValue=a,this.viewValue=b,this.label=c,this.group=d,this.disabled=e}function g(a){var b;if(!j&&e(a))b=a;else{b=[];for(var c in a)a.hasOwnProperty(c)&&"quot;!==c.charAt(0)&&b.push(c)}return b}var h=a.match(Xg);if(!h)throw Wg("iexp","Expected expression in form of '_select_ (as _label_)? for (_key_,)?_value_ in _collection_' but got '{0}'. Element: {1}",a,ba(b));var i=h[5]||h[7],j=h[6],k=/ as /.test(h[0])&&h[1],l=h[9],m=d(h[2]?h[1]:i),n=k&&d(k),o=n||m,p=l&&d(l),q=l?function(a,b){return p(c,b)}:function(a){return db(a)},r=function(a,b){return q(a,x(a,b))},s=d(h[2]||h[1]),t=d(h[3]||""),u=d(h[4]||""),v=d(h[8]),w={},x=j?function(a,b){return w[j]=b,w[i]=a,w}:function(a){return w[i]=a,w};return{trackBy:l,getTrackByValue:r,getWatchables:d(v,function(a){var b=[];a=a||[];for(var d=g(a),e=d.length,f=0;f<e;f++){var i=a===d?f:d[f],j=a[i],k=x(j,i),l=q(j,k);if(b.push(l),h[2]||h[1]){var m=s(c,k);b.push(m)}if(h[4]){var n=u(c,k);b.push(n)}}return b}),getOptions:function(){for(var a=[],b={},d=v(c)||[],e=g(d),h=e.length,i=0;i<h;i++){var j=d===e?i:e[i],k=d[j],m=x(k,j),n=o(c,m),p=q(n,m),w=s(c,m),y=t(c,m),z=u(c,m),A=new f(p,n,w,y,z);a.push(A),b[p]=A}return{items:a,selectValueMap:b,getOptionFromViewValue:function(a){return b[r(a)]},
6
getViewValueFromOption:function(a){return l?R(a.viewValue):a.viewValue}}}}}function h(a,d,e,h){function k(a,b){var c=i.cloneNode(!1);b.appendChild(c),m(a,c)}function l(a){var b=w.getOptionFromViewValue(a),c=b&&b.element;return c&&!c.selected&&(c.selected=!0),b}function m(a,b){a.element=b,b.disabled=a.disabled,a.label!==b.label&&(b.label=a.label,b.textContent=a.label),b.value=a.selectValue}function n(){var a=w&&o.readValue();if(w)for(var b=w.items.length-1;b>=0;b--){var c=w.items[b];Wa(u(c.group)?c.element.parentNode:c.element)}w=x.getOptions();var e={};if(w.items.forEach(function(a){var b;u(a.group)?(b=e[a.group],b||(b=j.cloneNode(!1),y.appendChild(b),b.label=null===a.group?"null":a.group,e[a.group]=b),k(a,b)):k(a,y)}),d[0].appendChild(y),p.$render(),!p.$isEmpty(a)){var f=o.readValue();(x.trackBy||q?T(a,f):a===f)||(p.$setViewValue(f),p.$render())}}for(var o=h[0],p=h[1],q=e.multiple,r=0,s=d.children(),t=s.length;r<t;r++)if(""===s[r].value){o.hasEmptyOption=!0,o.emptyOption=s.eq(r);break}d.empty();var v=!!o.emptyOption;de(i.cloneNode(!1)).val("?");var w,x=g(e.ngOptions,d,a),y=c[0].createDocumentFragment();o.generateUnknownOptionValue=function(a){return"?"},q?(o.writeValue=function(a){if(w){var b=a&&a.map(l)||[];w.items.forEach(function(a){a.element.selected&&!P(b,a)&&(a.element.selected=!1)})}},o.readValue=function(){var a=d.val()||[],b=[];return f(a,function(a){var c=w.selectValueMap[a];c&&!c.disabled&&b.push(w.getViewValueFromOption(c))}),b},x.trackBy&&a.$watchCollection(function(){if(pe(p.$viewValue))return p.$viewValue.map(function(a){return x.getTrackByValue(a)})},function(){p.$render()})):(o.writeValue=function(a){if(w){var b=d[0].options[d[0].selectedIndex],c=w.getOptionFromViewValue(a);b&&b.removeAttribute("selected"),c?(d[0].value!==c.selectValue&&(o.removeUnknownOption(),d[0].value=c.selectValue,c.element.selected=!0),c.element.setAttribute("selected","selected")):o.selectUnknownOrEmptyOption(a)}},o.readValue=function(){var a=w.selectValueMap[d.val()];return a&&!a.disabled?(o.unselectEmptyOption(),o.removeUnknownOption(),w.getViewValueFromOption(a)):null},x.trackBy&&a.$watch(function(){return x.getTrackByValue(p.$viewValue)},function(){p.$render()})),v&&(b(o.emptyOption)(a),d.prepend(o.emptyOption),o.emptyOption[0].nodeType===Ce?(o.hasEmptyOption=!1,o.registerOption=function(a,b){""===b.val()&&(o.hasEmptyOption=!0,o.emptyOption=b,o.emptyOption.removeClass("ng-scope"),p.$render(),b.on("$destroy",function(){var a=o.$isEmptyOptionSelected();o.hasEmptyOption=!1,o.emptyOption=void 0,a&&p.$render()}))}):o.emptyOption.removeClass("ng-scope")),a.$watchCollection(x.getWatchables,n)}var i=a.document.createElement("option"),j=a.document.createElement("optgroup");return{restrict:"A",terminal:!0,require:["select","ngModel"],link:{pre:function(a,b,c,d){d[0].registerOption=p},post:h}}}],Zg=["$locale","$interpolate","$log",function(a,b,c){var d=/{}/g,e=/^when(Minus)?(.+)#x2F;;return{link:function(g,h,i){function j(a){h.text(a||"")}var k,l=i.count,m=i.$attr.when&&h.attr(i.$attr.when),n=i.offset||0,o=g.$eval(m)||{},q={},r=b.startSymbol(),s=b.endSymbol(),u=r+l+"-"+n+s,v=me.noop;f(i,function(a,b){var c=e.exec(b);if(c){var d=(c[1]?"-":"")+$d(c[2]);o[d]=h.attr(i.$attr[b])}}),f(o,function(a,c){q[c]=b(a.replace(d,u))}),g.$watch(l,function(b){var d=parseFloat(b),e=oe(d);if(e||d in o||(d=a.pluralCat(d-n)),!(d===k||e&&oe(k))){v();var f=q[d];t(f)?(null!=b&&c.debug("ngPluralize: no rule defined for '"+d+"' in "+m),v=p,j()):v=g.$watch(f,j),k=d}})}}}],$g=["$parse","$animate","$compile",function(a,b,c){var g=d("ngRepeat"),h=function(a,b,c,d,e,f,g){a[c]=d,e&&(a[e]=f),a.$index=b,a.$first=0===b,a.$last=b===g-1,a.$middle=!(a.$first||a.$last),a.$odd=!(a.$even=0==(1&b))},i=function(a){return a.clone[0]},j=function(a){return a.clone[a.clone.length-1]};return{restrict:"A",multiElement:!0,transclude:"element",priority:1e3,terminal:!0,$tlb:!0,compile:function(d,k){var l=k.ngRepeat,m=c.$createComment("end ngRepeat",l),n=l.match(/^\s*([\s\S]+?)\s+in\s+([\s\S]+?)(?:\s+as\s+([\s\S]+?))?(?:\s+track\s+by\s+([\s\S]+?))?\s*#x2F;);if(!n)throw g("iexp","Expected expression in form of '_item_ in _collection_[ track by _id_]' but got '{0}'.",l);var o=n[1],p=n[2],q=n[3],r=n[4];if(!(n=o.match(/^(?:(\s*[$\w]+)|\(\s*([$\w]+)\s*,\s*([$\w]+)\s*\))#x2F;)))throw g("iidexp","'_item_' in '_item_ in _collection_' should be an identifier or '(_key_, _value_)' expression, but got '{0}'.",o);var s=n[3]||n[1],t=n[2];if(q&&(!/^[$a-zA-Z_][$a-zA-Z0-9_]*#x2F;.test(q)||/^(null|undefined|this|\$index|\$first|\$middle|\$last|\$even|\$odd|\$parent|\$root|\$id)#x2F;.test(q)))throw g("badident","alias '{0}' is invalid --- must be a valid JS identifier which is not a reserved name.",q);var u,v,w,x,y={$id:db};return r?u=a(r):(w=function(a,b){return db(b)},x=function(a){return a}),function(a,c,d,k,n){u&&(v=function(b,c,d){return t&&(y[t]=b),y[s]=c,y.$index=d,u(a,y)});var o=sa();a.$watchCollection(p,function(d){var k,p,r,u,y,z,A,B,C,D,E,F,G=c[0],H=sa();if(q&&(a[q]=d),e(d))C=d,B=v||w;else{B=v||x,C=[];for(var I in d)Zd.call(d,I)&&"quot;!==I.charAt(0)&&C.push(I)}for(u=C.length,E=new Array(u),k=0;k<u;k++)if(y=d===C?k:C[k],z=d[y],A=B(y,z,k),o[A])D=o[A],delete o[A],H[A]=D,E[k]=D;else{if(H[A])throw f(E,function(a){a&&a.scope&&(o[a.id]=a)}),g("dupes","Duplicates in a repeater are not allowed. Use 'track by' expression to specify unique keys. Repeater: {0}, Duplicate key: {1}, Duplicate value: {2}",l,A,z);E[k]={id:A,scope:void 0,clone:void 0},H[A]=!0}for(var J in o){if(D=o[J],F=ra(D.clone),b.leave(F),F[0].parentNode)for(k=0,p=F.length;k<p;k++)F[k].$NG_REMOVED=!0;D.scope.$destroy()}for(k=0;k<u;k++)if(y=d===C?k:C[k],z=d[y],D=E[k],D.scope){r=G;do{r=r.nextSibling}while(r&&r.$NG_REMOVED);i(D)!==r&&b.move(ra(D.clone),null,G),G=j(D),h(D.scope,k,s,z,t,y,u)}else n(function(a,c){D.scope=c;var d=m.cloneNode(!1);a[a.length++]=d,b.enter(a,null,G),G=d,D.clone=a,H[D.id]=D,h(D.scope,k,s,z,t,y,u)});o=H})}}}}],_g=["$animate",function(a){return{restrict:"A",multiElement:!0,link:function(b,c,d){b.$watch(d.ngShow,function(b){a[b?"removeClass":"addClass"](c,"ng-hide",{tempClasses:"ng-hide-animate"})})}}}],ah=["$animate",function(a){return{restrict:"A",multiElement:!0,link:function(b,c,d){b.$watch(d.ngHide,function(b){a[b?"addClass":"removeClass"](c,"ng-hide",{tempClasses:"ng-hide-animate"})})}}}],bh=rd(function(a,b,c){a.$watch(c.ngStyle,function(a,c){c&&a!==c&&f(c,function(a,c){b.css(c,"")}),a&&b.css(a)},!0)}),ch=["$animate","$compile",function(a,b){return{require:"ngSwitch",controller:["$scope",function(){this.cases={}}],link:function(c,d,e,g){var h=e.ngSwitch||e.on,i=[],j=[],k=[],l=[],m=function(a,b){return function(c){!1!==c&&a.splice(b,1)}};c.$watch(h,function(c){for(var d,e;k.length;)a.cancel(k.pop());for(d=0,e=l.length;d<e;++d){var h=ra(j[d].clone);l[d].$destroy();(k[d]=a.leave(h)).done(m(k,d))}j.length=0,l.length=0,(i=g.cases["!"+c]||g.cases["?"])&&f(i,function(c){c.transclude(function(d,e){l.push(e);var f=c.element;d[d.length++]=b.$createComment("end ngSwitchWhen");var g={clone:d};j.push(g),a.enter(d,f.parent(),f)})})})}}}],dh=rd({transclude:"element",priority:1200,require:"^ngSwitch",multiElement:!0,link:function(a,b,c,d,e){f(c.ngSwitchWhen.split(c.ngSwitchWhenSeparator).sort().filter(function(a,b,c){return c[b-1]!==a}),function(a){d.cases["!"+a]=d.cases["!"+a]||[],d.cases["!"+a].push({transclude:e,element:b})})}}),eh=rd({transclude:"element",priority:1200,require:"^ngSwitch",multiElement:!0,link:function(a,b,c,d,e){d.cases["?"]=d.cases["?"]||[],d.cases["?"].push({transclude:e,element:b})}}),fh=d("ngTransclude"),gh=["$compile",function(a){return{restrict:"EAC",terminal:!0,compile:function(b){var c=a(b.contents());return b.empty(),function(a,b,d,e,f){function g(a,c){a.length&&i(a)?b.append(a):(h(),c.$destroy())}function h(){c(a,function(a){b.append(a)})}function i(a){for(var b=0,c=a.length;b<c;b++){var d=a[b];if(d.nodeType!==Be||d.nodeValue.trim())return!0}}if(!f)throw fh("orphan","Illegal use of ngTransclude directive in the template! No parent directive that requires a transclusion found. Element: {0}",ba(b));d.ngTransclude===d.$attr.ngTransclude&&(d.ngTransclude="");var j=d.ngTransclude||d.ngTranscludeSlot;f(g,null,j),j&&!f.isSlotFilled(j)&&h()}}}}],hh=["$templateCache",function(a){return{restrict:"E",terminal:!0,compile:function(b,c){if("text/ng-template"===c.type){var d=c.id,e=b[0].text;a.put(d,e)}}}}],ih={$setViewValue:p,$render:p},jh=["$element","$scope",function(b,c){function d(){h||(h=!0,c.$postDigest(function(){h=!1,f.ngModelCtrl.$render()}))}function e(a){i||(i=!0,c.$postDigest(function(){c.$destroyed||(i=!1,f.ngModelCtrl.$setViewValue(f.readValue()),a&&f.ngModelCtrl.$render())}))}var f=this,g=new Xe;f.selectValueMap={},f.ngModelCtrl=ih,f.multiple=!1,f.unknownOption=de(a.document.createElement("option")),f.hasEmptyOption=!1,f.emptyOption=void 0,f.renderUnknownOption=function(a){var c=f.generateUnknownOptionValue(a);f.unknownOption.val(c),b.prepend(f.unknownOption),Vd(f.unknownOption,!0),b.val(c)},f.updateUnknownOption=function(a){var c=f.generateUnknownOptionValue(a);f.unknownOption.val(c),Vd(f.unknownOption,!0),b.val(c)},f.generateUnknownOptionValue=function(a){return"? "+db(a)+" ?"},f.removeUnknownOption=function(){f.unknownOption.parent()&&f.unknownOption.remove()},f.selectEmptyOption=function(){f.emptyOption&&(b.val(""),Vd(f.emptyOption,!0))},f.unselectEmptyOption=function(){f.hasEmptyOption&&Vd(f.emptyOption,!1)},c.$on("$destroy",function(){f.renderUnknownOption=p}),f.readValue=function(){var a=b.val(),c=a in f.selectValueMap?f.selectValueMap[a]:a;return f.hasOption(c)?c:null},f.writeValue=function(a){var c=b[0].options[b[0].selectedIndex];if(c&&Vd(de(c),!1),f.hasOption(a)){f.removeUnknownOption();var d=db(a);b.val(d in f.selectValueMap?d:a);var e=b[0].options[b[0].selectedIndex];Vd(de(e),!0)}else f.selectUnknownOrEmptyOption(a)},f.addOption=function(a,b){if(b[0].nodeType!==Ce){pa(a,'"option value"'),""===a&&(f.hasEmptyOption=!0,f.emptyOption=b);var c=g.get(a)||0;g.set(a,c+1),d()}},f.removeOption=function(a){var b=g.get(a);b&&(1===b?(g.delete(a),""===a&&(f.hasEmptyOption=!1,f.emptyOption=void 0)):g.set(a,b-1))},f.hasOption=function(a){return!!g.get(a)},f.$hasEmptyOption=function(){return f.hasEmptyOption},f.$isUnknownOptionSelected=function(){return b[0].options[0]===f.unknownOption[0]},f.$isEmptyOptionSelected=function(){return f.hasEmptyOption&&b[0].options[b[0].selectedIndex]===f.emptyOption[0]},f.selectUnknownOrEmptyOption=function(a){null==a&&f.emptyOption?(f.removeUnknownOption(),f.selectEmptyOption()):f.unknownOption.parent().length?f.updateUnknownOption(a):f.renderUnknownOption(a)};var h=!1,i=!1;f.registerOption=function(a,b,c,g,h){if(c.$attr.ngValue){var i,j=NaN;c.$observe("value",function(a){var c,d=b.prop("selected");u(j)&&(f.removeOption(i),delete f.selectValueMap[j],c=!0),j=db(a),i=a,f.selectValueMap[j]=a,f.addOption(a,b),b.attr("value",j),c&&d&&e()})}else g?c.$observe("value",function(a){f.readValue();var c,d=b.prop("selected");u(i)&&(f.removeOption(i),c=!0),i=a,f.addOption(a,b),c&&d&&e()}):h?a.$watch(h,function(a,d){c.$set("value",a);var g=b.prop("selected");d!==a&&f.removeOption(d),f.addOption(a,b),d&&g&&e()}):f.addOption(c.value,b);c.$observe("disabled",function(a){("true"===a||a&&b.prop("selected"))&&(f.multiple?e(!0):(f.ngModelCtrl.$setViewValue(null),f.ngModelCtrl.$render()))}),b.on("$destroy",function(){var a=f.readValue(),b=c.value;f.removeOption(b),d(),(f.multiple&&a&&-1!==a.indexOf(b)||a===b)&&e(!0)})}}],kh=function(){function a(a,b,c,d){var e=d[0],g=d[1];if(!g)return void(e.registerOption=p);if(e.ngModelCtrl=g,b.on("change",function(){e.removeUnknownOption(),a.$apply(function(){g.$setViewValue(e.readValue())})}),c.multiple){e.multiple=!0,e.readValue=function(){var a=[];return f(b.find("option"),function(b){if(b.selected&&!b.disabled){var c=b.value;a.push(c in e.selectValueMap?e.selectValueMap[c]:c)}}),a},e.writeValue=function(a){f(b.find("option"),function(b){var c=!!a&&(P(a,b.value)||P(a,e.selectValueMap[b.value]));c!==b.selected&&Vd(de(b),c)})};var h,i=NaN;a.$watch(function(){i!==g.$viewValue||T(h,g.$viewValue)||(h=va(g.$viewValue),g.$render()),i=g.$viewValue}),g.$isEmpty=function(a){return!a||0===a.length}}}function b(a,b,c,d){var e=d[1];if(e){var f=d[0];e.$render=function(){f.writeValue(e.$viewValue)}}}return{restrict:"E",require:["select","?ngModel"],controller:jh,priority:1,link:{pre:a,post:b}}},lh=["$interpolate",function(a){return{restrict:"E",priority:100,compile:function(b,c){var d,e;return u(c.ngValue)||(u(c.value)?d=a(c.value,!0):(e=a(b.text(),!0))||c.$set("value",b.text())),function(a,b,c){var f=b.parent(),g=f.data("$selectController")||f.parent().data("$selectController");g&&g.registerOption(a,b,c,d,e)}}}}],mh=function(){return{restrict:"A",require:"?ngModel",link:function(a,b,c,d){d&&(c.required=!0,d.$validators.required=function(a,b){return!c.required||!d.$isEmpty(b)},c.$observe("required",function(){d.$validate()}))}}},nh=function(){return{restrict:"A",require:"?ngModel",link:function(a,b,c,e){if(e){var f,g=c.ngPattern||c.pattern;c.$observe("pattern",function(a){if(x(a)&&a.length>0&&(a=new RegExp("^"+a+"quot;)),a&&!a.test)throw d("ngPattern")("noregexp","Expected {0} to be a RegExp but was {1}. Element: {2}",g,a,ba(b));f=a||void 0,e.$validate()}),e.$validators.pattern=function(a,b){return e.$isEmpty(b)||t(f)||f.test(b)}}}}},oh=function(){return{restrict:"A",require:"?ngModel",link:function(a,b,c,d){if(d){var e=-1;c.$observe("maxlength",function(a){var b=n(a);e=oe(b)?-1:b,d.$validate()}),d.$validators.maxlength=function(a,b){return e<0||d.$isEmpty(b)||b.length<=e}}}}},ph=function(){return{restrict:"A",require:"?ngModel",link:function(a,b,c,d){if(d){var e=0;c.$observe("minlength",function(a){e=n(a)||0,d.$validate()}),d.$validators.minlength=function(a,b){return d.$isEmpty(b)||b.length>=e}}}}};if(a.angular.bootstrap)return void(a.console&&console.log("WARNING: Tried to load angular more than once."));!function(){var b;if(!ze){var c=ue();ee=t(c)?a.jQuery:c?a[c]:void 0,ee&&ee.fn.on?(de=ee,l(ee.fn,{scope:Se.scope,isolateScope:Se.isolateScope,controller:Se.controller,injector:Se.injector,inheritedData:Se.inheritedData}),b=ee.cleanData,ee.cleanData=function(a){for(var c,d,e=0;null!=(d=a[e]);e++)(c=ee._data(d,"events"))&&c.$destroy&&ee(d).triggerHandler("$destroy");b(a)}):de=Ia,me.element=de,ze=!0}}(),function(c){l(c,{errorHandlingConfig:b,bootstrap:ja,copy:R,extend:l,merge:m,equals:T,element:de,forEach:f,injector:jb,noop:p,bind:W,toJson:Y,fromJson:Z,identity:q,isUndefined:t,isDefined:u,isString:x,isFunction:B,isObject:v,isNumber:y,isElement:M,isArray:pe,version:Fe,isDate:z,lowercase:$d,uppercase:_d,callbacks:{$counter:0},getTestability:la,reloadWithDebugInfo:ka,$minErr:d,$csp:te,$encodeUriSegment:fa,$encodeUriQuery:ga,$stringify:ta}),fe=ua(a),fe("ng",["ngLocale"],["$provide",function(a){a.provider({$sanitizeUri:Fc}),a.provider("$compile",ub).directive({a:ag,input:tg,textarea:tg,form:fg,script:hh,select:kh,option:lh,ngBind:wg,ngBindHtml:yg,ngBindTemplate:xg,ngClass:Ag,ngClassEven:Cg,ngClassOdd:Bg,ngCloak:Dg,ngController:Eg,ngForm:gg,ngHide:ah,ngIf:Hg,ngInclude:Ig,ngInit:Kg,ngNonBindable:Vg,ngPluralize:Zg,ngRepeat:$g,ngShow:_g,ngStyle:bh,ngSwitch:ch,ngSwitchWhen:dh,ngSwitchDefault:eh,ngOptions:Yg,ngTransclude:gh,ngModel:Sg,ngList:Lg,ngChange:zg,pattern:nh,ngPattern:nh,required:mh,ngRequired:mh,minlength:ph,ngMinlength:ph,maxlength:oh,ngMaxlength:oh,ngValue:vg,ngModelOptions:Ug}).directive({ngInclude:Jg}).directive(bg).directive(Fg),a.provider({$anchorScroll:kb,$animate:hf,$animateCss:lf,$animateJs:ff,$animateQueue:gf,$AnimateRunner:kf,$animateAsyncRun:jf,$browser:qb,$cacheFactory:rb,$controller:Ab,$document:Bb,$isDocumentHidden:Cb,$exceptionHandler:Db,$filter:Uc,$forceReflow:sf,$interpolate:Rb,$interval:Sb,$http:Nb,$httpParamSerializer:Fb,$httpParamSerializerJQLike:Gb,$httpBackend:Pb,$xhrFactory:Ob,$jsonpCallbacks:Af,$location:fc,$log:gc,$parse:wc,$rootScope:Ec,$q:xc,$q:yc,$sce:Kc,$sceDelegate:Jc,$sniffer:Lc,$templateCache:sb,$templateRequest:Mc,$testability:Nc,$timeout:Oc,$window:Rc,$rAF:Dc,$jqLite:cb,$Map:Ye,$cookieReader:Tc})}]).info({angularVersion:"1.6.6"})}(me),me.module("ngLocale",[],["$provide",function(a){function b(a){a+="";var b=a.indexOf(".");return-1==b?0:a.length-b-1}function c(a,c){var d=c;void 0===d&&(d=Math.min(b(a),3));var e=Math.pow(10,d);return{v:d,f:(a*e|0)%e}}var d={ZERO:"zero",ONE:"one",TWO:"two",FEW:"few",MANY:"many",OTHER:"other"};a.value("$locale",{DATETIME_FORMATS:{AMPMS:["AM","PM"],DAY:["Sunday","Monday","Tuesday","Wednesday","Thursday","Friday","Saturday"],ERANAMES:["Before Christ","Anno Domini"],ERAS:["BC","AD"],FIRSTDAYOFWEEK:6,MONTH:["January","February","March","April","May","June","July","August","September","October","November","December"],SHORTDAY:["Sun","Mon","Tue","Wed","Thu","Fri","Sat"],SHORTMONTH:["Jan","Feb","Mar","Apr","May","Jun","Jul","Aug","Sep","Oct","Nov","Dec"],STANDALONEMONTH:["January","February","March","April","May","June","July","August","September","October","November","December"],WEEKENDRANGE:[5,6],fullDate:"EEEE, MMMM d, y",longDate:"MMMM d, y",medium:"MMM d, y h:mm:ss a",mediumDate:"MMM d, y",mediumTime:"h:mm:ss a",short:"M/d/yy h:mm a",shortDate:"M/d/yy",shortTime:"h:mm a"},NUMBER_FORMATS:{CURRENCY_SYM:"quot;,DECIMAL_SEP:".",GROUP_SEP:",",PATTERNS:[{gSize:3,lgSize:3,maxFrac:3,minFrac:0,minInt:1,negPre:"-",negSuf:"",posPre:"",posSuf:""},{gSize:3,lgSize:3,maxFrac:2,minFrac:2,minInt:1,negPre:"-¤",negSuf:"",posPre:"¤",posSuf:""}]},id:"en-us",localeID:"en_US",pluralCat:function(a,b){var e=0|a,f=c(a,b);return 1==e&&0==f.v?d.ONE:d.OTHER}})}]),de(function(){ia(a.document,ja)})}(window),!window.angular.$csp().noInlineStyle&&window.angular.element(document.head).prepend('<style type="text/css">@charset "UTF-8";[ng\\:cloak],[ng-cloak],[data-ng-cloak],[x-ng-cloak],.ng-cloak,.x-ng-cloak,.ng-hide:not(.ng-hide-animate){display:none !important;}ng\\:form{display:block;}.ng-animate-shim{visibility:hidden;}.ng-anchor{position:absolute;}</style>'),function(){"use strict";angular.module("ng-slide-down",[]).directive("ngSlideDown",["$timeout",function(a){var b,c;return b=function(a,b){return void 0!==b.lazyRender?"<div ng-if='lazyRender' ng-transclude></div>":"<div ng-transclude></div>"},c=function(b,c,d,e,f){var g,h,i,j,k,l,m,n,o,p,q;return h=d.duration||1,q=d.timingFunction||"ease-in-out",i=c.scope(),j=d.emitOnClose,n=d.onClose,m=void 0!==d.lazyRender,g=null,o=null,k=function(a){var b,d,e,f,g;for(e=0,d=c.children(),f=0,g=d.length;f<g;f++)b=d[f],e+=b.clientHeight;return e+"px"},p=function(){return g&&a.cancel(g),m&&(b.lazyRender=!0),a(function(){return o&&a.cancel(o),c.css({overflow:"hidden",transitionProperty:"height",transitionDuration:h+"s",transitionTimingFunction:q,height:k()}),o=a(function(){return c.css({overflow:"visible",transition:"none",height:"auto"})},1e3*h)})},l=function(){if(o&&a.cancel(o),c.css({overflow:"hidden",transitionProperty:"height",transitionDuration:h+"s",transitionTimingFunction:q,height:"0px"}),j||n||m)return g=a(function(){if(j&&b.$emit(j,{}),n&&i.$eval(n),m)return b.lazyRender=!1},1e3*h)},b.$watch("expanded",function(b,d){return b?a(p):(null!=b&&(c.css({height:k()}),c[0].clientHeight),a(l))})},{restrict:"A",scope:{expanded:"=ngSlideDown"},transclude:!0,link:c,template:function(a,c){return b(a,c)}}}])}.call(this),function(a,b){"use strict";function c(a,b,c){if(!a)throw ia("areq","Argument '{0}' is {1}",b||"?",c||"required");return a}function d(a,b){return a||b?a?b?(U(a)&&(a=a.join(" ")),U(b)&&(b=b.join(" ")),a+" "+b):a:b:""}function e(a){var b={};return a&&(a.to||a.from)&&(b.to=a.to,b.from=a.from),b}function f(a,b,c){var d="";return a=U(a)?a:a&&Z(a)&&a.length?a.split(/\s+/):[],T(a,function(a,e){a&&a.length>0&&(d+=e>0?" ":"",d+=c?b+a:a+b)}),d}function g(a,b){var c=a.indexOf(b);b>=0&&a.splice(c,1)}function h(a){if(a instanceof _)switch(a.length){case 0:return a;case 1:if(a[0].nodeType===L)return a;break;default:return _(i(a))}if(a.nodeType===L)return _(a)}function i(a){if(!a[0])return a;for(var b=0;b<a.length;b++){var c=a[b];if(c.nodeType===L)return c}}function j(a,b,c){T(b,function(b){a.addClass(b,c)})}function k(a,b,c){T(b,function(b){a.removeClass(b,c)})}function l(a){return function(b,c){c.addClass&&(j(a,b,c.addClass),c.addClass=null),c.removeClass&&(k(a,b,c.removeClass),c.removeClass=null)}}function m(a){if(a=a||{},!a.$prepared){var b=a.domOperation||aa;a.domOperation=function(){a.$domOperationFired=!0,b(),b=aa},a.$prepared=!0}return a}function n(a,b){o(a,b),p(a,b)}function o(a,b){b.from&&(a.css(b.from),b.from=null)}function p(a,b){b.to&&(a.css(b.to),b.to=null)}function q(a,b,c){var d=b.options||{},e=c.options||{},f=(d.addClass||"")+" "+(e.addClass||""),g=(d.removeClass||"")+" "+(e.removeClass||""),h=r(a.attr("class"),f,g);e.preparationClasses&&(d.preparationClasses=y(e.preparationClasses,d.preparationClasses),delete e.preparationClasses);var i=d.domOperation!==aa?d.domOperation:null;return S(d,e),i&&(d.domOperation=i),h.addClass?d.addClass=h.addClass:d.addClass=null,h.removeClass?d.removeClass=h.removeClass:d.removeClass=null,b.addClass=d.addClass,b.removeClass=d.removeClass,d}function r(a,b,c){function d(a){Z(a)&&(a=a.split(" "));var b={};return T(a,function(a){a.length&&(b[a]=!0)}),b}var e={};a=d(a),b=d(b),T(b,function(a,b){e[b]=1}),c=d(c),T(c,function(a,b){e[b]=1===e[b]?null:-1});var f={addClass:"",removeClass:""};return T(e,function(b,c){var d,e;1===b?(d="addClass",e=!a[c]||a[c+N]):-1===b&&(d="removeClass",e=a[c]||a[c+M]),e&&(f[d].length&&(f[d]+=" "),f[d]+=c)}),f}function s(a){return a instanceof _?a[0]:a}function t(a,b,c){var d="";b&&(d=f(b,O,!0)),c.addClass&&(d=y(d,f(c.addClass,M))),c.removeClass&&(d=y(d,f(c.removeClass,N))),d.length&&(c.preparationClasses=d,a.addClass(d))}function u(a,b){b.preparationClasses&&(a.removeClass(b.preparationClasses),b.preparationClasses=null),b.activeClasses&&(a.removeClass(b.activeClasses),b.activeClasses=null)}function v(a,b){var c=b?"-"+b+"s":"";return x(a,[ga,c]),[ga,c]}function w(a,b){var c=b?"paused":"",d=J+da;return x(a,[d,c]),[d,c]}function x(a,b){var c=b[0],d=b[1];a.style[c]=d}function y(a,b){return a?b?a+" "+b:a:b}function z(a){return[fa,a+"s"]}function A(a,b){return[b?ea:ga,a+"s"]}function B(a,b,c){var d=Object.create(null),e=a.getComputedStyle(b)||{};return T(c,function(a,b){var c=e[a];if(c){var f=c.charAt(0);("-"===f||"+"===f||f>=0)&&(c=C(c)),0===c&&(c=null),d[b]=c}}),d}function C(a){var b=0,c=a.split(/\s*,\s*/);return T(c,function(a){"s"===a.charAt(a.length-1)&&(a=a.substring(0,a.length-1)),a=parseFloat(a)||0,b=b?Math.max(a,b):a}),b}function D(a){return 0===a||null!=a}function E(a,b){var c=H,d=a+"s";return b?c+=ba:d+=" linear all",[c,d]}function F(){var a=Object.create(null);return{flush:function(){a=Object.create(null)},count:function(b){var c=a[b];return c?c.total:0},get:function(b){var c=a[b];return c&&c.value},put:function(b,c){a[b]?a[b].total++:a[b]={total:1,value:c}}}}function G(a,b,c){T(c,function(c){a[c]=V(a[c])?a[c]:b.style.getPropertyValue(c)})}var H,I,J,K,L=1,M="-add",N="-remove",O="ng-",P="ng-animate",Q="$ngAnimateChildren";void 0===a.ontransitionend&&void 0!==a.onwebkittransitionend?("-webkit-",H="WebkitTransition",I="webkitTransitionEnd transitionend"):(H="transition",I="transitionend"),void 0===a.onanimationend&&void 0!==a.onwebkitanimationend?("-webkit-",J="WebkitAnimation",K="webkitAnimationEnd animationend"):(J="animation",K="animationend");var R,S,T,U,V,W,X,Y,Z,$,_,aa,ba="Duration",ca="TimingFunction",da="PlayState",ea=J+"Delay",fa=J+ba,ga=H+"Delay",ha=H+ba,ia=b.$minErr("ng"),ja=["$rAF",function(a){function b(a){d=d.concat(a),c()}function c(){if(d.length){for(var b=d.shift(),f=0;f<b.length;f++)b[f]();e||a(function(){e||c()})}}var d,e;return d=b.queue=[],b.waitUntilQuiet=function(b){e&&e(),e=a(function(){e=null,b(),c()})},b}],ka=["$interpolate",function(a){return{link:function(b,c,d){function e(a){a="on"===a||"true"===a,c.data(Q,a)}var f=d.ngAnimateChildren;Z(f)&&0===f.length?c.data(Q,!0):(e(a(f)(b)),d.$observe("ngAnimateChildren",e))}}}],la="$animateCss",ma=1e3,na=3,oa=1.5,pa={transitionDuration:ha,transitionDelay:ga,transitionProperty:H+"Property",animationDuration:fa,animationDelay:ea,animationIterationCount:J+"IterationCount"},qa={transitionDuration:ha,transitionDelay:ga,animationDuration:fa,animationDelay:ea},ra=["$animateProvider",function(a){var b=F(),c=F();this.$get=["$window","$jqLite","$AnimateRunner","$timeout","$forceReflow","$sniffer","$rAFScheduler","$animateQueue",function(a,d,h,i,j,k,q,r){function t(a,b){var c="$ngAnimateParentKey",d=a.parentNode;return(d[c]||(d[c]=++P))+"-"+a.getAttribute("class")+"-"+b}function u(c,d,e,f){var g=b.get(e);return g||(g=B(a,c,f),"infinite"===g.animationIterationCount&&(g.animationIterationCount=1)),b.put(e,g),g}function y(e,g,h,i){var j;if(b.count(h)>0&&!(j=c.get(h))){var k=f(g,"-stagger");d.addClass(e,k),j=B(a,e,i),j.animationDuration=Math.max(j.animationDuration,0),j.transitionDuration=Math.max(j.transitionDuration,0),d.removeClass(e,k),c.put(h,j)}return j||{}}function C(a){Q.push(a),q.waitUntilQuiet(function(){b.flush(),c.flush();for(var a=j(),d=0;d<Q.length;d++)Q[d](a);Q.length=0})}function F(a,b,c){var d=u(a,b,c,pa),e=d.animationDelay,f=d.transitionDelay;return d.maxDelay=e&&f?Math.max(e,f):e||f,d.maxDuration=Math.max(d.animationDuration*d.animationIterationCount,d.transitionDuration),d}var L=l(d),P=0,Q=[];return function(a,c){function j(){q()}function l(){q(!0)}function q(b){if(!(X||Z&&Y)){X=!0,Y=!1,S.$skipPreparationClasses||d.removeClass(a,ua),d.removeClass(a,wa),w(W,!1),v(W,!1),T(ha,function(a){W.style[a[0]]=""}),L(a,S),n(a,S),Object.keys(V).length&&T(V,function(a,b){a?W.style.setProperty(b,a):W.style.removeProperty(b)}),S.onDone&&S.onDone(),ka&&ka.length&&a.off(ka.join(" "),P);var c=a.data(la);c&&(i.cancel(c[0].timer),a.removeData(la)),amp;&$.complete(!b)}}function u(a){Ja.blockTransition&&v(W,a),Ja.blockKeyframeAnimation&&w(W,!!a)}function B(){return $=new h({end:j,cancel:l}),C(aa),q(),{$willAnimate:!1,start:function(){return $},end:j}}function P(a){a.stopPropagation();var b=a.originalEvent||a,c=b.$manualTimeStamp||Date.now(),d=parseFloat(b.elapsedTime.toFixed(na));Math.max(c-ga,0)>=da&&d>=ea&&(Z=!0,q())}function Q(){function b(){if(!X){if(u(!1),T(ha,function(a){var b=a[0],c=a[1];W.style[b]=c}),L(a,S),d.addClass(a,wa),Ja.recalculateTimingStyles){if(va=W.getAttribute("class")+" "+ua,ya=t(W,va),Ha=F(W,va,ya),Ia=Ha.maxDelay,ba=Math.max(Ia,0),0===(ea=Ha.maxDuration))return void q();Ja.hasTransitions=Ha.transitionDuration>0,Ja.hasAnimations=Ha.animationDuration>0}if(Ja.applyAnimationDelay&&(Ia="boolean"!=typeof S.delay&&D(S.delay)?parseFloat(S.delay):Ia,ba=Math.max(Ia,0),Ha.animationDelay=Ia,Ka=A(Ia,!0),ha.push(Ka),W.style[Ka[0]]=Ka[1]),da=ba*ma,fa=ea*ma,S.easing){var b,e=S.easing;Ja.hasTransitions&&(b=H+ca,ha.push([b,e]),W.style[b]=e),Ja.hasAnimations&&(b=J+ca,ha.push([b,e]),W.style[b]=e)}Ha.transitionDuration&&ka.push(I),Ha.animationDuration&&ka.push(K),ga=Date.now();var f=da+oa*fa,g=ga+f,h=a.data(la)||[],j=!0;if(h.length){var k=h[0];j=g>k.expectedEndTime,j?i.cancel(k.timer):h.push(q)}if(j){var l=i(c,f,!1);h[0]={timer:l,expectedEndTime:g},h.push(q),a.data(la,h)}ka.length&&a.on(ka.join(" "),P),S.to&&(S.cleanupStyles&&G(V,W,Object.keys(S.to)),p(a,S))}}function c(){var b=a.data(la);if(b){for(var c=1;c<b.length;c++)b[c]();a.removeData(la)}}if(!X){if(!W.parentNode)return void q();var e=function(a){if(Z)Y&&a&&(Y=!1,q());else if(Y=!a,Ha.animationDuration){var b=w(W,Y);Y?ha.push(b):g(ha,b)}},f=Fa>0&&(Ha.transitionDuration&&0===za.transitionDuration||Ha.animationDuration&&0===za.animationDuration)&&Math.max(za.animationDelay,za.transitionDelay);f?i(b,Math.floor(f*Fa*ma),!1):b(),_.resume=function(){e(!0)},_.pause=function(){e(!1)}}}var S=c||{};S.$prepared||(S=m(R(S)));var V={},W=s(a);if(!W||!W.parentNode||!r.enabled())return B();var X,Y,Z,$,_,ba,da,ea,fa,ga,ha=[],ia=a.attr("class"),ja=e(S),ka=[];if(0===S.duration||!k.animations&&!k.transitions)return B();var pa=S.event&&U(S.event)?S.event.join(" "):S.event,ra=pa&&S.structural,sa="",ta="";ra?sa=f(pa,O,!0):pa&&(sa=pa),S.addClass&&(ta+=f(S.addClass,M)),S.removeClass&&(ta.length&&(ta+=" "),ta+=f(S.removeClass,N)),S.applyClassesEarly&&ta.length&&L(a,S);var ua=[sa,ta].join(" ").trim(),va=ia+" "+ua,wa=f(ua,"-active"),xa=ja.to&&Object.keys(ja.to).length>0;if(!((S.keyframeStyle||"").length>0||xa||ua))return B();var ya,za;if(S.stagger>0){var Aa=parseFloat(S.stagger);za={transitionDelay:Aa,animationDelay:Aa,transitionDuration:0,animationDuration:0}}else ya=t(W,va),za=y(W,ua,ya,qa);S.$skipPreparationClasses||d.addClass(a,ua);var Ba;if(S.transitionStyle){var Ca=[H,S.transitionStyle];x(W,Ca),ha.push(Ca)}if(S.duration>=0){Ba=W.style[H].length>0;var Da=E(S.duration,Ba);x(W,Da),ha.push(Da)}if(S.keyframeStyle){var Ea=[J,S.keyframeStyle];x(W,Ea),ha.push(Ea)}var Fa=za?S.staggerIndex>=0?S.staggerIndex:b.count(ya):0,Ga=0===Fa;Ga&&!S.skipBlocking&&v(W,9999);var Ha=F(W,va,ya),Ia=Ha.maxDelay;ba=Math.max(Ia,0),ea=Ha.maxDuration;var Ja={};if(Ja.hasTransitions=Ha.transitionDuration>0,Ja.hasAnimations=Ha.animationDuration>0,Ja.hasTransitionAll=Ja.hasTransitions&&"all"===Ha.transitionProperty,Ja.applyTransitionDuration=xa&&(Ja.hasTransitions&&!Ja.hasTransitionAll||Ja.hasAnimations&&!Ja.hasTransitions),Ja.applyAnimationDuration=S.duration&&Ja.hasAnimations,Ja.applyTransitionDelay=D(S.delay)&&(Ja.applyTransitionDuration||Ja.hasTransitions),Ja.applyAnimationDelay=D(S.delay)&&Ja.hasAnimations,Ja.recalculateTimingStyles=ta.length>0,(Ja.applyTransitionDuration||Ja.applyAnimationDuration)&&(ea=S.duration?parseFloat(S.duration):ea,Ja.applyTransitionDuration&&(Ja.hasTransitions=!0,Ha.transitionDuration=ea,Ba=W.style[H+"Property"].length>0,ha.push(E(ea,Ba))),Ja.applyAnimationDuration&&(Ja.hasAnimations=!0,Ha.animationDuration=ea,ha.push(z(ea)))),0===ea&&!Ja.recalculateTimingStyles)return B();if(null!=S.delay){var Ka;"boolean"!=typeof S.delay&&(Ka=parseFloat(S.delay),ba=Math.max(Ka,0)),Ja.applyTransitionDelay&&ha.push(A(Ka)),Ja.applyAnimationDelay&&ha.push(A(Ka,!0))}return null==S.duration&&Ha.transitionDuration>0&&(Ja.recalculateTimingStyles=Ja.recalculateTimingStyles||Ga),da=ba*ma,fa=ea*ma,S.skipBlocking||(Ja.blockTransition=Ha.transitionDuration>0,Ja.blockKeyframeAnimation=Ha.animationDuration>0&&za.animationDelay>0&&0===za.animationDuration),S.from&&(S.cleanupStyles&&G(V,W,Object.keys(S.from)),o(a,S)),Ja.blockTransition||Ja.blockKeyframeAnimation?u(ea):S.skipBlocking||v(W,!1),{$willAnimate:!0,end:j,start:function(){if(!X)return _={end:j,cancel:l,resume:null,pause:null},$=new h(_),C(Q),$}}}}]}],sa=["$animationProvider",function(a){function b(a){return a.parentNode&&11===a.parentNode.nodeType}a.drivers.push("$animateCssDriver");var c="ng-animate-shim",d="ng-anchor-out";this.$get=["$animateCss","$rootScope","$AnimateRunner","$rootElement","$sniffer","$jqLite","$document",function(a,e,f,g,h,i,j){function k(a){return a.replace(/\bng-\S+\b/g,"")}function l(a,b){return Z(a)&&(a=a.split(" ")),Z(b)&&(b=b.split(" ")),a.filter(function(a){return-1===b.indexOf(a)}).join(" ")}function m(b,e,g){function h(a){var b={},c=s(a).getBoundingClientRect();return T(["width","height","top","left"],function(a){var d=c[a];switch(a){case"top":d+=p.scrollTop;break;case"left":d+=p.scrollLeft}b[a]=Math.floor(d)+"px"}),b}function i(a){return a.attr("class")||""}function j(){var b=k(i(g)),c=l(b,o),e=l(o,b),f=a(n,{to:h(g),addClass:"ng-anchor-in "+c,removeClass:d+" "+e,delay:!0});return f.$willAnimate?f:null}function m(){n.remove(),e.removeClass(c),g.removeClass(c)}var n=_(s(e).cloneNode(!0)),o=k(i(n));e.addClass(c),g.addClass(c),n.addClass("ng-anchor"),r.append(n);var q,t=function(){var b=a(n,{addClass:d,delay:!0,from:h(e)});return b.$willAnimate?b:null}();if(!t&&!(q=j()))return m();var u=t||q;return{start:function(){function a(){c&&c.end()}var b,c=u.start();return c.done(function(){if(c=null,!q&&(q=j()))return c=q.start(),c.done(function(){c=null,m(),b.complete()}),c;m(),b.complete()}),b=new f({end:a,cancel:a})}}}function n(a,b,c,d){
7
- var e=o(a),g=o(b),h=[];if(T(d,function(a){var b=a.out,d=a.in,e=m(c,b,d);e&&h.push(e)}),e||g||0!==h.length)return{start:function(){function a(){T(b,function(a){a.end()})}var b=[];e&&b.push(e.start()),g&&b.push(g.start()),T(h,function(a){b.push(a.start())});var c=new f({end:a,cancel:a});return f.all(b,function(a){c.complete(a)}),c}}}function o(b){var c=b.element,d=b.options||{};b.structural&&(d.event=b.event,d.structural=!0,d.applyClassesEarly=!0,"leave"===b.event&&(d.onDone=d.domOperation)),d.preparationClasses&&(d.event=y(d.event,d.preparationClasses));var e=a(c,d);return e.$willAnimate?e:null}if(!h.animations&&!h.transitions)return aa;var p=j[0].body,q=s(g),r=_(b(q)||p.contains(q)?q:p);return function(a){return a.from&&a.to?n(a.from,a.to,a.classes,a.anchors):o(a)}}]}],ta=["$animateProvider",function(a){this.$get=["$injector","$AnimateRunner","$jqLite",function(b,c,d){function e(c){c=U(c)?c:c.split(" ");for(var d=[],e={},f=0;f<c.length;f++){var g=c[f],h=a.$registeredAnimations[g];h&&!e[g]&&(d.push(b.get(h)),e[g]=!0)}return d}var f=l(d);return function(a,b,d,g){function h(){g.domOperation(),f(a,g)}function i(){o=!0,h(),n(a,g)}function j(a,b,d,e,f){var g;switch(d){case"animate":g=[b,e.from,e.to,f];break;case"setClass":g=[b,r,s,f];break;case"addClass":g=[b,r,f];break;case"removeClass":g=[b,s,f];break;default:g=[b,f]}g.push(e);var h=a.apply(a,g);if(h)if(X(h.start)&&(h=h.start()),h instanceof c)h.done(f);else if(X(h))return h;return aa}function k(a,b,d,e,f){var g=[];return T(e,function(e){var h=e[f];h&&g.push(function(){var e,f,g=!1,i=function(a){g||(g=!0,(f||aa)(a),e.complete(!a))};return e=new c({end:function(){i()},cancel:function(){i(!0)}}),f=j(h,a,b,d,function(a){i(!1===a)}),e})}),g}function l(a,b,d,e,f){var g=k(a,b,d,e,f);if(0===g.length){var h,i;"beforeSetClass"===f?(h=k(a,"removeClass",d,e,"beforeRemoveClass"),i=k(a,"addClass",d,e,"beforeAddClass")):"setClass"===f&&(h=k(a,"removeClass",d,e,"removeClass"),i=k(a,"addClass",d,e,"addClass")),h&&(g=g.concat(h)),i&&(g=g.concat(i))}if(0!==g.length)return function(a){var b=[];return g.length&&T(g,function(a){b.push(a())}),b.length?c.all(b,a):a(),function(a){T(b,function(b){a?b.cancel():b.end()})}}}var o=!1;3===arguments.length&&Y(d)&&(g=d,d=null),g=m(g),d||(d=a.attr("class")||"",g.addClass&&(d+=" "+g.addClass),g.removeClass&&(d+=" "+g.removeClass));var p,q,r=g.addClass,s=g.removeClass,t=e(d);if(t.length){var u,v;"leave"===b?(v="leave",u="afterLeave"):(v="before"+b.charAt(0).toUpperCase()+b.substr(1),u=b),"enter"!==b&&"move"!==b&&(p=l(a,b,g,t,v)),q=l(a,b,g,t,u)}if(p||q){var w;return{$willAnimate:!0,end:function(){return w?w.end():(i(),w=new c,w.complete(!0)),w},start:function(){function a(a){i(a),w.complete(a)}function b(b){o||((d||aa)(b),a(b))}if(w)return w;w=new c;var d,e=[];return p&&e.push(function(a){d=p(a)}),e.length?e.push(function(a){h(),a(!0)}):h(),q&&e.push(function(a){d=q(a)}),w.setHost({end:function(){b()},cancel:function(){b(!0)}}),c.chain(e,a),w}}}}}]}],ua=["$animationProvider",function(a){a.drivers.push("$animateJsDriver"),this.$get=["$animateJs","$AnimateRunner",function(a,b){function c(b){var c=b.element,d=b.event,e=b.options,f=b.classes;return a(c,d,f,e)}return function(a){if(a.from&&a.to){var d=c(a.from),e=c(a.to);if(!d&&!e)return;return{start:function(){function a(){return function(){T(f,function(a){a.end()})}}function c(a){g.complete(a)}var f=[];d&&f.push(d.start()),e&&f.push(e.start()),b.all(f,c);var g=new b({end:a(),cancel:a()});return g}}}return c(a)}}]}],va="data-ng-animate",wa="$ngAnimatePin",xa=["$animateProvider",function(b){function d(a){if(!a)return null;var b=a.split(o),c=Object.create(null);return T(b,function(a){c[a]=!0}),c}function e(a,b){if(a&&b){var c=d(b);return a.split(o).some(function(a){return c[a]})}}function f(a,b,c){return p[a].some(function(a){return a(b,c)})}function g(a,b){var c=(a.addClass||"").length>0,d=(a.removeClass||"").length>0;return b?c&&d:c||d}var j=1,k=2,o=" ",p=this.rules={skip:[],cancel:[],join:[]};p.join.push(function(a,b){return!a.structural&&g(a)}),p.skip.push(function(a,b){return!a.structural&&!g(a)}),p.skip.push(function(a,b){return"leave"===b.event&&a.structural}),p.skip.push(function(a,b){return b.structural&&b.state===k&&!a.structural}),p.cancel.push(function(a,b){return b.structural&&a.structural}),p.cancel.push(function(a,b){return b.state===k&&a.structural}),p.cancel.push(function(a,b){if(b.structural)return!1;var c=a.addClass,d=a.removeClass,f=b.addClass,g=b.removeClass;return!($(c)&&$(d)||$(f)&&$(g))&&(e(c,g)||e(d,f))}),this.$get=["$rAF","$rootScope","$rootElement","$document","$Map","$animation","$AnimateRunner","$templateRequest","$jqLite","$forceReflow","$isDocumentHidden",function(d,e,o,p,r,v,w,x,y,z,A){function B(){var a=!1;return function(b){a?b():e.$postDigest(function(){a=!0,b()})}}function C(a,b){return q(a,b,{})}function D(a,b,c){var d=[],e=X[c];return e&&T(e,function(e){ga.call(e.node,b)?d.push(e.callback):"leave"===c&&ga.call(e.node,a)&&d.push(e.callback)}),d}function E(a,b,c){var d=i(b);return a.filter(function(a){return!(a.node===d&&(!c||a.callback===c))})}function F(a,b){"close"!==a||b.parentNode||ha.off(b)}function G(a,b,c){function i(a,b,c,e){z(function(){var a=D(x,r,b);a.length?d(function(){T(a,function(a){a(p,c,e)}),F(c,r)}):F(c,r)}),a.progress(b,c,e)}function l(a){u(p,o),fa(p,o),n(p,o),o.domOperation(),y.complete(!a)}var o=R(c),p=h(a),r=s(p),x=r&&r.parentNode;o=m(o);var y=new w,z=B();if(U(o.addClass)&&(o.addClass=o.addClass.join(" ")),o.addClass&&!Z(o.addClass)&&(o.addClass=null),U(o.removeClass)&&(o.removeClass=o.removeClass.join(" ")),o.removeClass&&!Z(o.removeClass)&&(o.removeClass=null),o.from&&!Y(o.from)&&(o.from=null),o.to&&!Y(o.to)&&(o.to=null),!(O&&r&&da(r,b,c)&&ea(r,o)))return l(),y;var E=["enter","move","leave"].indexOf(b)>=0,G=A(),L=G||N.get(r),P=!L&&M.get(r)||{},Q=!!P.state;if(L||Q&&P.state===j||(L=!J(r,x,b)),L)return G&&i(y,b,"start"),l(),G&&i(y,b,"close"),y;E&&H(r);var S={structural:E,element:p,event:b,addClass:o.addClass,removeClass:o.removeClass,close:l,options:o,runner:y};if(Q){if(f("skip",S,P))return P.state===k?(l(),y):(q(p,P,S),P.runner);if(f("cancel",S,P))if(P.state===k)P.runner.end();else{if(!P.structural)return q(p,P,S),P.runner;P.close()}else{if(f("join",S,P)){if(P.state!==k)return t(p,E?b:null,o),b=S.event=P.event,o=q(p,P,S),P.runner;C(p,S)}}}else C(p,S);var V=S.structural;if(V||(V="animate"===S.event&&Object.keys(S.options.to||{}).length>0||g(S)),!V)return l(),I(r),y;var W=(P.counter||0)+1;return S.counter=W,K(r,j,S),e.$postDigest(function(){p=h(a);var c=M.get(r),d=!c;c=c||{};var e=p.parent()||[],f=e.length>0&&("animate"===c.event||c.structural||g(c));if(d||c.counter!==W||!f)return d&&(fa(p,o),n(p,o)),(d||E&&c.event!==b)&&(o.domOperation(),y.end()),void(f||I(r));b=!c.structural&&g(c,!0)?"setClass":c.event,K(r,k);var j=v(p,b,c.options);y.setHost(j),i(y,b,"start",{}),j.done(function(a){l(!a);var c=M.get(r);c&&c.counter===W&&I(r),i(y,b,"close",{})})}),y}function H(a){var b=a.querySelectorAll("["+va+"]");T(b,function(a){var b=parseInt(a.getAttribute(va),10),c=M.get(a);if(c)switch(b){case k:c.runner.end();case j:M.delete(a)}})}function I(a){a.removeAttribute(va),M.delete(a)}function J(a,b,c){var d,e=p[0].body,f=s(o),g=a===e||"HTML"===a.nodeName,h=a===f,i=!1,j=N.get(a),k=_.data(a,wa);for(k&&(b=s(k));b&&(h||(h=b===f),b.nodeType===L);){var l=M.get(b)||{};if(!i){var m=N.get(b);if(!0===m&&!1!==j){j=!0;break}!1===m&&(j=!1),i=l.structural}if($(d)||!0===d){var n=_.data(b,Q);V(n)&&(d=n)}if(i&&!1===d)break;if(g||(g=b===e),g&&h)break;b=h||!(k=_.data(b,wa))?b.parentNode:s(k)}return(!i||d)&&!0!==j&&h&&g}function K(a,b,c){c=c||{},c.state=b,a.setAttribute(va,b);var d=M.get(a),e=d?S(d,c):c;M.set(a,e)}var M=new r,N=new r,O=null,P=e.$watch(function(){return 0===x.totalPendingRequests},function(a){a&&(P(),e.$postDigest(function(){e.$postDigest(function(){null===O&&(O=!0)})}))}),X=Object.create(null),aa=b.customFilter(),ba=b.classNameFilter(),ca=function(){return!0},da=aa||ca,ea=ba?function(a,b){var c=[a.getAttribute("class"),b.addClass,b.removeClass].join(" ");return ba.test(c)}:ca,fa=l(y),ga=a.Node.prototype.contains||function(a){return this===a||!!(16&this.compareDocumentPosition(a))},ha={on:function(a,b,c){var d=i(b);X[a]=X[a]||[],X[a].push({node:d,callback:c}),_(b).on("$destroy",function(){M.get(d)||ha.off(a,b,c)})},off:function(a,b,c){if(1!==arguments.length||Z(arguments[0])){var d=X[a];d&&(X[a]=1===arguments.length?null:E(d,b,c))}else{b=arguments[0];for(var e in X)X[e]=E(X[e],b)}},pin:function(a,b){c(W(a),"element","not an element"),c(W(b),"parentElement","not an element"),a.data(wa,b)},push:function(a,b,c,d){return c=c||{},c.domOperation=d,G(a,b,c)},enabled:function(a,b){var c=arguments.length;if(0===c)b=!!O;else{if(W(a)){var d=s(a);1===c?b=!N.get(d):N.set(d,!b)}else b=O=!!a}return b}};return ha}]}],ya=["$animateProvider",function(a){function b(a,b){a.data(h,b)}function c(a){a.removeData(h)}function e(a){return a.data(h)}var f="ng-animate-ref",g=this.drivers=[],h="$animationRunner";this.$get=["$jqLite","$rootScope","$injector","$AnimateRunner","$Map","$rAFScheduler",function(a,h,i,j,k,o){function p(a){function b(a){if(a.processed)return a;a.processed=!0;var c=a.domNode,f=c.parentNode;e.set(c,a);for(var g;f;){if(g=e.get(f)){g.processed||(g=b(g));break}f=f.parentNode}return(g||d).children.push(a),a}var c,d={children:[]},e=new k;for(c=0;c<a.length;c++){var f=a[c];e.set(f.domNode,a[c]={domNode:f.domNode,fn:f.fn,children:[]})}for(c=0;c<a.length;c++)b(a[c]);return function(a){var b,c=[],d=[];for(b=0;b<a.children.length;b++)d.push(a.children[b]);var e=d.length,f=0,g=[];for(b=0;b<d.length;b++){var h=d[b];e<=0&&(e=f,f=0,c.push(g),g=[]),g.push(h.fn),h.children.forEach(function(a){f++,d.push(a)}),e--}return g.length&&c.push(g),c}(d)}var q=[],r=l(a);return function(k,l,t){function u(a){var b="["+f+"]",c=a.hasAttribute(f)?[a]:a.querySelectorAll(b),d=[];return T(c,function(a){var b=a.getAttribute(f);b&&b.length&&d.push(a)}),d}function v(a){var b=[],c={};T(a,function(a,d){var e=a.element,g=s(e),h=a.event,i=["enter","move"].indexOf(h)>=0,j=a.structural?u(g):[];if(j.length){var k=i?"to":"from";T(j,function(a){var b=a.getAttribute(f);c[b]=c[b]||{},c[b][k]={animationID:d,element:_(a)}})}else b.push(a)});var d={},e={};return T(c,function(c,f){var g=c.from,h=c.to;if(!g||!h){var i=g?g.animationID:h.animationID,j=i.toString();return void(d[j]||(d[j]=!0,b.push(a[i])))}var k=a[g.animationID],l=a[h.animationID],m=g.animationID.toString();if(!e[m]){var n=e[m]={structural:!0,beforeStart:function(){k.beforeStart(),l.beforeStart()},close:function(){k.close(),l.close()},classes:w(k.classes,l.classes),from:k,to:l,anchors:[]};n.classes.length?b.push(n):(b.push(k),b.push(l))}e[m].anchors.push({out:g.element,in:h.element})}),b}function w(a,b){a=a.split(" "),b=b.split(" ");for(var c=[],d=0;d<a.length;d++){var e=a[d];if("ng-"!==e.substring(0,3))for(var f=0;f<b.length;f++)if(e===b[f]){c.push(e);break}}return c.join(" ")}function x(a){for(var b=g.length-1;b>=0;b--){var c=g[b],d=i.get(c),e=d(a);if(e)return e}}function y(){k.addClass(P),F&&a.addClass(k,F),G&&(a.removeClass(k,G),G=null)}function z(a,b){function c(a){var c=e(a);c&&c.setHost(b)}a.from&&a.to?(c(a.from.element),c(a.to.element)):c(a.element)}function A(){var a=e(k);!a||"leave"===l&&t.$domOperationFired||a.end()}function B(b){k.off("$destroy",A),c(k),r(k,t),n(k,t),t.domOperation(),F&&a.removeClass(k,F),k.removeClass(P),D.complete(!b)}t=m(t);var C=["enter","move","leave"].indexOf(l)>=0,D=new j({end:function(){B()},cancel:function(){B(!0)}});if(!g.length)return B(),D;b(k,D);var E=d(k.attr("class"),d(t.addClass,t.removeClass)),F=t.tempClasses;F&&(E+=" "+F,t.tempClasses=null);var G;return C&&(G="ng-"+l+"-prepare",a.addClass(k,G)),q.push({element:k,classes:E,event:l,structural:C,options:t,beforeStart:y,close:B}),k.on("$destroy",A),q.length>1?D:(h.$postDigest(function(){var a=[];T(q,function(b){e(b.element)?a.push(b):b.close()}),q.length=0;var b=v(a),c=[];T(b,function(a){c.push({domNode:s(a.from?a.from.element:a.element),fn:function(){a.beforeStart();var b,c=a.close;if(e(a.anchors?a.from.element||a.to.element:a.element)){var d=x(a);d&&(b=d.start)}if(b){var f=b();f.done(function(a){c(!a)}),z(a,f)}else c()}})}),o(p(c))}),D)}}]}],za=["$animate","$rootScope",function(a,b){return{restrict:"A",transclude:"element",terminal:!0,priority:600,link:function(b,c,d,e,f){var g,h;b.$watchCollection(d.ngAnimateSwap||d.for,function(d){g&&a.leave(g),h&&(h.$destroy(),h=null),(d||0===d)&&(h=b.$new(),f(h,function(b){g=b,a.enter(b,null,c)}))})}}}];b.module("ngAnimate",[],function(){aa=b.noop,R=b.copy,S=b.extend,_=b.element,T=b.forEach,U=b.isArray,Z=b.isString,Y=b.isObject,$=b.isUndefined,V=b.isDefined,X=b.isFunction,W=b.isElement}).info({angularVersion:"1.6.6"}).directive("ngAnimateSwap",za).directive("ngAnimateChildren",ka).factory("$rAFScheduler",ja).provider("$animateQueue",xa).provider("$animation",ya).provider("$animateCss",ra).provider("$animateCssDriver",sa).provider("$animateJs",ta).provider("$animateJsDriver",ua)}(window,window.angular),function(a,b){"use strict";function c(){function c(a,b){var c,d={},e=a.split(",");for(c=0;c<e.length;c++)d[b?i(e[c]):e[c]]=!0;return d}function d(a,b){null===a||void 0===a?a="":"string"!=typeof a&&(a=""+a);var c=J(a);if(!c)return"";var d=5;do{if(0===d)throw n("uinput","Failed to sanitize html because the input is unstable");d--,a=c.innerHTML,c=J(a)}while(a!==c.innerHTML);for(var e=c.firstChild;e;){switch(e.nodeType){case 1:b.start(e.nodeName.toLowerCase(),o(e.attributes));break;case 3:b.chars(e.textContent)}var f;if(!((f=e.firstChild)||(1===e.nodeType&&b.end(e.nodeName.toLowerCase()),f=s("nextSibling",e))))for(;null==f&&(e=s("parentNode",e))!==c;)f=s("nextSibling",e),1===e.nodeType&&b.end(e.nodeName.toLowerCase());e=f}for(;e=c.firstChild;)c.removeChild(e)}function o(a){for(var b={},c=0,d=a.length;c<d;c++){var e=a[c];b[e.name]=e.value}return b}function p(a){return a.replace(/&/g,"&amp;").replace(u,function(a){return"&#"+(1024*(a.charCodeAt(0)-55296)+(a.charCodeAt(1)-56320)+65536)+";"}).replace(v,function(a){return"&#"+a.charCodeAt(0)+";"}).replace(/</g,"&lt;").replace(/>/g,"&gt;")}function q(a,b){var c=!1,d=e(a,a.push);return{start:function(a,e){a=i(a),!c&&D[a]&&(c=a),c||!0!==E[a]||(d("<"),d(a),g(e,function(c,e){var f=i(e),g="img"===a&&"src"===f||"background"===f;!0!==I[f]||!0===F[f]&&!b(c,g)||(d(" "),d(e),d('="'),d(p(c)),d('"'))}),d(">"))},end:function(a){a=i(a),c||!0!==E[a]||!0===w[a]||(d("</"),d(a),d(">")),a==c&&(c=!1)},chars:function(a){c||d(p(a))}}}function r(b){for(;b;){if(b.nodeType===a.Node.ELEMENT_NODE)for(var c=b.attributes,d=0,e=c.length;d<e;d++){var f=c[d],g=f.name.toLowerCase();"xmlns:ns1"!==g&&0!==g.lastIndexOf("ns1:",0)||(b.removeAttributeNode(f),d--,e--)}var h=b.firstChild;h&&r(h),b=s("nextSibling",b)}}function s(a,b){var c=b[a];if(c&&k.call(b,c))throw n("elclob","Failed to sanitize html because the element is clobbered: {0}",b.outerHTML||b.outerText);return c}var t=!1;this.$get=["$sanitizeUri",function(a){return t&&f(E,C),function(b){var c=[];return l(b,m(c,function(b,c){return!/^unsafe:/.test(a(b,c))})),c.join("")}}],this.enableSvg=function(a){return h(a)?(t=a,this):t},e=b.bind,f=b.extend,g=b.forEach,h=b.isDefined,i=b.lowercase,j=b.noop,l=d,m=q,k=a.Node.prototype.contains||function(a){return!!(16&this.compareDocumentPosition(a))};var u=/[\uD800-\uDBFF][\uDC00-\uDFFF]/g,v=/([^#-~ |!])/g,w=c("area,br,col,hr,img,wbr"),x=c("colgroup,dd,dt,li,p,tbody,td,tfoot,th,thead,tr"),y=c("rp,rt"),z=f({},y,x),A=f({},x,c("address,article,aside,blockquote,caption,center,del,dir,div,dl,figure,figcaption,footer,h1,h2,h3,h4,h5,h6,header,hgroup,hr,ins,map,menu,nav,ol,pre,section,table,ul")),B=f({},y,c("a,abbr,acronym,b,bdi,bdo,big,br,cite,code,del,dfn,em,font,i,img,ins,kbd,label,map,mark,q,ruby,rp,rt,s,samp,small,span,strike,strong,sub,sup,time,tt,u,var")),C=c("circle,defs,desc,ellipse,font-face,font-face-name,font-face-src,g,glyph,hkern,image,linearGradient,line,marker,metadata,missing-glyph,mpath,path,polygon,polyline,radialGradient,rect,stop,svg,switch,text,title,tspan"),D=c("script,style"),E=f({},w,A,B,z),F=c("background,cite,href,longdesc,src,xlink:href"),G=c("abbr,align,alt,axis,bgcolor,border,cellpadding,cellspacing,class,clear,color,cols,colspan,compact,coords,dir,face,headers,height,hreflang,hspace,ismap,lang,language,nohref,nowrap,rel,rev,rows,rowspan,rules,scope,scrolling,shape,size,span,start,summary,tabindex,target,title,type,valign,value,vspace,width"),H=c("accent-height,accumulate,additive,alphabetic,arabic-form,ascent,baseProfile,bbox,begin,by,calcMode,cap-height,class,color,color-rendering,content,cx,cy,d,dx,dy,descent,display,dur,end,fill,fill-rule,font-family,font-size,font-stretch,font-style,font-variant,font-weight,from,fx,fy,g1,g2,glyph-name,gradientUnits,hanging,height,horiz-adv-x,horiz-origin-x,ideographic,k,keyPoints,keySplines,keyTimes,lang,marker-end,marker-mid,marker-start,markerHeight,markerUnits,markerWidth,mathematical,max,min,offset,opacity,orient,origin,overline-position,overline-thickness,panose-1,path,pathLength,points,preserveAspectRatio,r,refX,refY,repeatCount,repeatDur,requiredExtensions,requiredFeatures,restart,rotate,rx,ry,slope,stemh,stemv,stop-color,stop-opacity,strikethrough-position,strikethrough-thickness,stroke,stroke-dasharray,stroke-dashoffset,stroke-linecap,stroke-linejoin,stroke-miterlimit,stroke-opacity,stroke-width,systemLanguage,target,text-anchor,to,transform,type,u1,u2,underline-position,underline-thickness,unicode,unicode-range,units-per-em,values,version,viewBox,visibility,width,widths,x,x-height,x1,x2,xlink:actuate,xlink:arcrole,xlink:role,xlink:show,xlink:title,xlink:type,xml:base,xml:lang,xml:space,xmlns,xmlns:xlink,y,y1,y2,zoomAndPan",!0),I=f({},F,H,G),J=function(a,b){function c(b){b="<remove></remove>"+b;try{b=encodeURI(b)}catch(a){return}var c=new a.XMLHttpRequest;c.responseType="document",c.open("GET","data:text/html;charset=utf-8,"+b,!1),c.send(null);var d=c.response.body;return d.firstChild.remove(),d}function d(b){b="<remove></remove>"+b;try{var c=(new a.DOMParser).parseFromString(b,"text/html").body;return c.firstChild.remove(),c}catch(a){return}}function e(a){return g.innerHTML=a,b.documentMode&&r(g),g}var f;if(!b||!b.implementation)throw n("noinert","Can't create an inert html document");f=b.implementation.createHTMLDocument("inert");var g=(f.documentElement||f.getDocumentElement()).querySelector("body");return g.innerHTML='<svg><g onload="this.parentNode.remove()"></g></svg>',g.querySelector("svg")?(g.innerHTML='<svg><p><style><img src="</style><img src=x onerror=alert(1)//">',g.querySelector("svg img")?d:e):c}(a,a.document)}function d(a){var b=[];return m(b,j).chars(a),b.join("")}var e,f,g,h,i,j,k,l,m,n=b.$minErr("$sanitize");b.module("ngSanitize",[]).provider("$sanitize",c).info({angularVersion:"1.6.6"}),b.module("ngSanitize").filter("linky",["$sanitize",function(a){var c=/((ftp|https?):\/\/|(www\.)|(mailto:)?[A-Za-z0-9._%+-]+@)\S*[^\s.;,(){}<>"\u201d\u2019]/i,e=/^mailto:/i,f=b.$minErr("linky"),g=b.isDefined,h=b.isFunction,i=b.isObject,j=b.isString;return function(b,k,l){function m(a){a&&s.push(d(a))}if(null==b||""===b)return b;if(!j(b))throw f("notstring","Expected string but received: {0}",b);for(var n,o,p,q=h(l)?l:i(l)?function(){return l}:function(){return{}},r=b,s=[];n=r.match(c);)o=n[0],n[2]||n[4]||(o=(n[3]?"http://":"mailto:")+o),p=n.index,m(r.substr(0,p)),function(a,b){var c,d=q(a);s.push("<a ");for(c in d)s.push(c+'="'+d[c]+'" ');!g(k)||"target"in d||s.push('target="',k,'" '),s.push('href="',a.replace(/"/g,"&quot;"),'">'),m(b),s.push("</a>")}(o,n[0].replace(e,"")),r=r.substring(p+n[0].length);return m(r),a(s.join(""))}}])}(window,window.angular),function(){function a(){return{restrict:"AEC",require:"dxStartWith",controller:"dxStartWithCtrl",scope:!0,terminal:!0,transclude:!0,multiElement:!0,$tlb:!0,compile:function(a,b){var c=b.dxStartWith||b.root,e=c.match(d),f=e[1],g=e[3]||"";return function(a,b,c,d,e){d.alias=g,d.transclude=e,d.transclude(a,function(a,c){function d(a){c.$dxPrior=a,""!==g&&(c[g]=a)}b.append(a),c.$dxLevel=0,c.$dxIsRoot=!0,c.$watch(f,d)})}}}}function b(){return{restrict:"AEC",require:"^dxStartWith",scope:!0,terminal:!0,multiElement:!0,compile:function(a,b){var c=b.dxConnect||b.connect;return function(a,b,d,e){alias=e.alias||"",e.transclude(a,function(a,d){function e(a){d.$dxPrior=a,""!==alias&&(d[alias]=a)}b.append(a),d.$dxLevel=d.$dxLevel+1,d.$dxIsRoot=!1,d.$watch(c,e)})}}}}var c=angular.module("dotjem.angular.tree",[]),d=/^(\S+)(\s+as\s+(\w+))?#x2F;;c.controller("dxStartWithCtrl",[function(){}]),c.directive("dxStartWith",a),c.directive("dxConnect",b)}(),function(){"use strict";function a(a,b,c){return{restrict:"A",link:function(d,e,f){c(function(){function g(a){var g,h,k,l,m,n;if(!angular.element(e).hasClass("ng-hide")&&a&&a.target){for(h=a.target;h;h=h.parentNode){if(h===e[0])return;if(l=h.id,m=h.className,n=j.length,m&&void 0!==m.baseVal&&(m=m.baseVal),m||l)for(g=0;g<n;g++)if(k=new RegExp("\\b"+j[g]+"\\b"),void 0!==l&&l===j[g]||m&&k.test(m))return}c(function(){(i=b(f.clickOutside))(d,{event:a})})}}function h(){return"ontouchstart"in window||navigator.maxTouchPoints}var i,j=void 0!==f.outsideIfNot?f.outsideIfNot.split(/[ ,]+/):[];h()&&a.on("touchstart",g),a.on("click",g),d.$on("$destroy",function(){h()&&a.off("touchstart",g),a.off("click",g)})})}}}angular.module("angular-click-outside",[]).directive("clickOutside",["$document","$parse","$timeout",a])}();var GoogleMerchants=angular.module("GoogleMerchants",["templates-dist","dotjem.angular.tree","ngSanitize","ngAnimate","ng-slide-down","angular-click-outside"]);GoogleMerchants.constant("BACKEND",ajaxurl+"?action=wpae_api&q="),GoogleMerchants.filter("safe",["$sce",function(a){return a.trustAsHtml}]),GoogleMerchants.controller("advancedAttributesController",["$scope","$log","attributesService",function(a,b,c){a.attributes=[],a.cats=[],a.attributes=c.getAttributes()}]),GoogleMerchants.directive("advancedAttributes",function(){return{restrict:"E",scope:{advancedAttributes:"=information"},templateUrl:"advancedAttributes/advancedAttributes.tpl.html",controller:"advancedAttributesController"}}),GoogleMerchants.controller("availabilityPriceController",["$scope","currencyService",function(a,b){a.currency=b.getCurrency()}]),GoogleMerchants.directive("availabilityPrice",function(){return{restrict:"E",scope:{availabilityPrice:"=information"},templateUrl:"availabilityPrice/availabilityPrice.tpl.html",controller:"availabilityPriceController"}}),GoogleMerchants.controller("basicInformationController",["$scope",function(a){}]),GoogleMerchants.directive("basicInformation",function(){return{restrict:"E",scope:{basicInformation:"=information"},templateUrl:"basicInformation/basicInformation.tpl.html",controller:"basicInformationController"}}),GoogleMerchants.directive("chosen",["$timeout",chosen]),GoogleMerchants.factory("attributesService",["$rootScope","$q","$log","wpHttp",function(a,b,c,d){var e=!1;return{setAttributes:function(a){e=a},getAttributes:function(){return e}}}]),GoogleMerchants.directive("autodetect",["attributesService",function(a){return{restrict:"A",require:"^ngModel",link:{post:function(b,c,d,e){var f=d.autodetect;d=a.getAttributes(),angular.forEach(d,function(a){a.label.toLowerCase()!=f.toLowerCase()&&a.name.toLowerCase()!=f.toLowerCase()||(e.$setViewValue("{"+a.name+"}"),e.$render())})}}}}]),GoogleMerchants.directive("cascade",[function(){return{restrict:"A",controller:["$scope",function(a){function b(c,d){var e,f;for(e=0;e<d.children.length;e+=1)f=d.children[e],a.mappings[f.id]=c,b(c,f);return!1}a.select=function(){console.log("Changing to ",a.mappings[a.node.id]),b(a.mappings[a.node.id],a.node)}}]}}]),GoogleMerchants.directive("contenteditable",["$sce",function(a){return{restrict:"A",require:"?ngModel",link:function(b,c,d,e){function f(){var a=c.html();d.stripBr&&"<br>"===a&&(a=""),e.$setViewValue(a)}e&&(e.$render=function(){c.html(a.getTrustedHtml(e.$viewValue||""))},c.on("blur keyup change",function(){b.$evalAsync(f)}),f())}}}]),GoogleMerchants.factory("currencyService",[function(){var a=null,b=null;return{setCurrency:function(c,d){a=c,b=d},getCurrency:function(){return a},getCurrencyCode:function(){return b}}}]),GoogleMerchants.directive("droppable",[function(){return{restrict:"A",require:"^ngModel",link:function(a,b,c,d){function e(a,b){return-1!==a.find("input[name^=cc_type]").val().indexOf("image_")&&(b="Image "+b),-1!==a.find("input[name^=cc_type]").val().indexOf("attachment_")&&(b="Attachment "+b),b}var f;f=angular.element(b),f.addClass("google-merchants-droppable"),f.droppable({drop:function(a,b){var c=b.draggable.find(".custom_column"),g=c.find("input[name^=cc_name]").val();g=e(c,g),f.val(f.val()+"{"+g+"}"),d.$setViewValue(f.val()),d.$render()}})}}}]),GoogleMerchants.factory("exportService",["$q","$log","wpHttp",function(a,b,c){return{getExport:function(d){var e=a.defer(),f="export/get";return null!==d&&(f=f+"&id="+d),c.get(f).then(function(a){e.resolve(a)},function(a,c){e.reject(a,c),b.error("There was a problem getting the export")}),e.promise},saveExport:function(d){var e=a.defer();return c.post("export/save",d).then(function(a){e.resolve(a)},function(a,c){e.reject(a),b.error(a,c)}),e.promise}}}]),GoogleMerchants.directive("focusMeWhenEnabled",function(a){return{priority:-1,link:function(b,c){b.$watch(function(){return b.$eval(c.attr("ng-disabled"))},function(b){0==b&&a(function(){c[0].focus()})})}}}),GoogleMerchants.factory("googleCategoriesService",["$rootScope","$q","$log","wpHttp",function(a,b,c,d){return{searchCategories:function(a){return d.get("googleCategories/get&parent=0"+a)},getChildCategories:function(a){return d.get("googleCategories/get&parent="+a)},categorySelected:function(b){a.$broadcast("wpae.category.selected",b)}}}]),GoogleMerchants.controller("mainController",["$scope","$rootScope","$timeout","$window","$document","$location","$log","templateService","exportService","currencyService","attributesService","wpHttp",function(a,b,c,d,e,f,g,h,i,j,k,l){function m(a,b){b||(b=window.location.href),a=a.replace(/[\[\]]/g,"\\amp;");var c=new RegExp("[?&]"+a+"(=([^&#]*)|&|#|$)"),d=c.exec(b);return d?d[2]?decodeURIComponent(d[2].replace(/\+/g," ")):"":null}function n(){b.cats.children.length||(a.merchantsFeedData.productCategories.productCategories="customValue")}var o=[{mapFrom:"",mapTo:""}];a.cats=[],a.templateId=!1,a.merchantsFeedData={basicInformation:{open:!0,itemTitle:"productTitle",hasVariations:!0,useParentTitleForVariableProducts:!0,additionalImageLink:"productImages",itemDescription:"productDescription",itemImageLink:"useProductFeaturedImage",itemLink:"productLink",condition:"new",conditionMappings:angular.copy(o),userVariationDescriptionForVariableProducts:!0,addVariationAttributesToProductUrl:!0,useVariationImage:!0,useFeaturedImageIfThereIsNoVariationImage:!0,useParentDescirptionIfThereIsNoVariationDescirption:!0,useVariationDescriptionForVariableProducts:!0},detailedInformation:{open:!1,color:"selectFromWooCommerceProductAttributes",size:"selectFromWooCommerceProductAttributes",gender:"selectFromWooCommerceProductAttributes",setTheGroupId:"automatically",mappings:angular.copy(o),ageGroup:"selectFromWooCommerceProductAttributes",material:"selectFromWooCommerceProductAttributes",pattern:"selectFromWooCommerceProductAttributes",genderAutodetect:"keepBlank",sizeSystem:"",adjustPrice:!1,adjustSalePrice:!1,genderCats:{},ageGroupCats:{},sizeTypeMappings:angular.copy(o)},availabilityPrice:{open:!1,price:"useProductPrice",salePrice:"useProductSalePrice",availability:"useWooCommerceStockValues",adjustPriceValue:"",adjustPriceType:"%",adjustSalePriceType:"%",adjustSalePriceValue:"",currency:null},productCategories:{open:!1,productType:"useWooCommerceProductCategories",productCategories:"mapProductCategories",catMappings:{}},uniqueIdentifiers:{open:!1,identifierExists:1},shipping:{dimensions:"useWooCommerceProductValues",convertTo:"cm",adjustPriceType:"%",weight:""},template:{save:!1,name:""},advancedAttributes:{adult:"no",unitPricingBaseMeasureUnit:"kg",excludedDestination:"no",customLabel0Mappings:angular.copy(o),customLabel1Mappings:angular.copy(o),customLabel2Mappings:angular.copy(o),customLabel3Mappings:angular.copy(o),customLabel4Mappings:angular.copy(o),energyEfficiencyClassMappings:angular.copy(o),promotionIdMappings:angular.copy(o)}},a.init=function(b,c,d){k.setAttributes(wpae_product_attributes),a.isGoogleMerchantExport=!1,j.setCurrency(b,c),a.templateId=d},a.selectGoogleMerchantsInitially=function(){a.selectGoogleMerchants()},a.selectGoogleMerchants=function(){jQuery(".wpallexport-element-label").parent().parent().slideUp(),a.isGoogleMerchantExport=!0;var c=m("id");i.getExport(c).then(function(b){angular.isObject(b)&&(b.template={save:!1,name:""},a.merchantsFeedData=b)}),a.templateId&&(console.log("Loading template with id "+a.templateId),h.getTemplate(a.templateId).then(function(b){a.merchantsFeedData=b.google_merchants_post_data})),l.get("categories/index").then(function(a){b.cats=a,console.log("Broadcasting loaded categories..."),b.$broadcast("categories.loaded"),n()},function(){g.error("There was a problem loading the WordPress categories")}),null==a.merchantsFeedData.availabilityPrice.currency&&(a.merchantsFeedData.availabilityPrice.currency=j.getCurrencyCode())},a.$on("googleMerchantsSelected",function(b,d){a.selectGoogleMerchants(),a.merchantsFeedData.basicInformation.hasVariations=d,jQuery(".wpallexport-element-label").parent().parent().slideUp(),c(function(){a.isGoogleMerchantExport=!0})}),a.$on("googleMerchantsDeselected",function(){jQuery(".wpallexport-element-label").parent().parent().slideDown(),c(function(){a.isGoogleMerchantExport=!1})}),a.$on("googleMerchantsSubmitted",function(b,c){a.merchantsFeedData.template.name=c.templateName,a.process()}),a.$on("templateShouldBeSaved",function(b,c){a.merchantsFeedData.template.save=!0,a.merchantsFeedData.template.name=c}),a.$on("templateShouldNotBeSaved",function(){a.merchantsFeedData.template.save=!1}),a.$on("selectedTemplate",function(b,c){h.getTemplate(c).then(function(b){a.merchantsFeedData=b.google_merchants_post_data})}),a.process=function(){a.merchantsFeedData.extraData=jQuery("#templateForm").serialize(),a.merchantsFeedData.filteringData=jQuery("input[name=filter_rules_hierarhy]").val(),a.merchantsFeedData.template.save=jQuery("#save_template_as").prop("checked");var b=m("id");b&&(a.merchantsFeedData.exportId=b,a.merchantsFeedData.update=!0),i.saveExport(a.merchantsFeedData).then(function(a){a.redirect?d.location.href=a.redirect:d.location.href="admin.php?page=pmxe-admin-export&action=options"})}}]),GoogleMerchants.controller("mappingController",["$scope",function(a){a.show=!1,a.mappingsBackup=null,a.removeMapping=function(b){a.mappings.length>1&&a.mappings.splice(a.mappings.indexOf(b),1)},a.$watch("show",function(b){b&&(a.mappingsBackup=a.mappings)}),a.addMapping=function(){a.mappings.push({})},a.close=function(){a.mappings=a.mappingsBackup,a.show=!1},a.saveMappings=function(){a.show=!1}}]),GoogleMerchants.directive("mapping",function(){return{restrict:"E",scope:{mappings:"=",show:"=",context:"=",tooltip:"@"},templateUrl:"common/mapping/mapping.tpl.html",controller:"mappingController"}}),GoogleMerchants.directive("styledInput",function(a){return{priority:-1,scope:{placeholder:"=",ngModel:"="},template:'<div class="editable" contenteditable="true" ng-model="ngModel" placeholder="{{placeholder}}"></div>',link:function(a,b){b.bind("keydown",function(a){return(!a.ctrlKey&&!a.metaKey||65==a.which||88==a.which||67==a.which||86==a.which)&&(13!=a.which&&void 0)})}}}),GoogleMerchants.factory("templateService",["$q","$log","wpHttp",function(a,b,c){return{getTemplate:function(d){var e=a.defer();return c.get("templates/get&templateId="+d).then(function(a){e.resolve(a)},function(a,c){e.reject(a,c),b.error("There was a problem getting the export")}),e.promise}}}]),GoogleMerchants.directive("tipsy",["$document",function(a){return{
8
- restrict:"A",link:function(b,c,d){c.attr("original-title",d.tipsy),c.tipsy({gravity:function(){var b="n";a.scrollTop()<c.offset().top-angular.element(".tipsy").height()-2&&(b="s");var d="";return c.offset().left+angular.element(".tipsy").width()<a.width()+a.scrollLeft()?d="w":c.offset().left-angular.element(".tipsy").width()>a.scrollLeft()&&(d="e"),b+d},live:!0,html:!0,opacity:1})}}}]),GoogleMerchants.factory("wpHttp",["$http","$q","$log","BACKEND","NONCE",function(a,b,c,d,e){return{post:function(c,f){var g=b.defer();return a.post(d+c+"&security="+e,f).then(function(a){g.resolve(a.data)},function(a,b){g.reject(a,b)}),g.promise},get:function(c){var f=b.defer();return a.get(d+c+"&security="+e).then(function(a){f.resolve(a.data)},function(a,b){f.reject(a,b)}),f.promise}}}]),GoogleMerchants.controller("detailedInformationController",["$scope","$log","attributesService",function(a,b,c){a.attributes=[],a.cats=[],a.attributes=c.getAttributes()}]),GoogleMerchants.directive("detailedInformation",function(){return{restrict:"E",scope:{detailedInformation:"=information"},templateUrl:"detailedInformation/detailedInformation.tpl.html",controller:"detailedInformationController"}}),GoogleMerchants.controller("categoryMapperController",["$scope","$rootScope","$interval","$timeout",function(a,b,c,d){a.dialogVisible=!0,a.selectedCategory="",a.selectedCategoryId=0,a.parentWidth=!1,a.siteCats=[],a.initialized=!1,a.innerMapping=!1,a.limits=100,a.catMappings=[],b.$on("categories.loaded",function(){a.innerMapping=b.cats}),a.innerMapping=b.cats,a.initialize=function(){a.initialized||(d(function(){c(function(){a.limits<a.innerMapping.length&&(a.limits+=20)},10)},100),a.initialized=!0,a.afterInitialize())},a.afterInitialize=function(){angular.forEach(a.cats,function(a,b){})},angular.isUndefined(a.context)&&(a.context="categories"),a.expandNode=function(a){a.children.length&&(a.expanded=!a.expanded)},a.getTimes=function(a){return new Array(a)},a.toggleDialog=function(){a.dialogVisible=!a.dialogVisible},a.getPlaceholder=function(){return a.visible?"":"Select Google Product Category"}}]),GoogleMerchants.directive("categoryMapper",function(){return{restrict:"E",scope:{mappings:"=",grey:"=",context:"@?"},templateUrl:"productCategories/categoryMapper/categoryMapper.tpl.html",controller:"categoryMapperController"}}),GoogleMerchants.controller("googleCategorySelectorController",["$scope","$log","$window","googleCategoriesService",function(a,b,c,d){function e(b,c,d){var f,g;for(f=0;f<d.children.length;f+=1)g=d.children[f],angular.isDefined(a.mappings[g.id])?a.mappings[g.id].byUser||(a.mappings[g.id]={id:b,name:c,byUser:!1}):a.mappings[g.id]={id:b,name:c,byUser:!1},e(b,c,g);return!1}var f=[];a.categories=[],a.level=1,a.search="",a.loading=!1,a.hasResults=!0,a.byUser=!1,a.select=function(b){var c=b.name.replace("<strong>","").replace("</strong>","").replace("<b>","").replace("</b>","");a.visible=!1;b.id;a.selectedCategory=c,a.mappings[a.node.id]={id:b.id,name:c,byUser:!0},e(b.Id,c,a.node)},a.loadCategories=function(b){a.loading=!0;var c="";b&&(c="&search="+b),d.searchCategories(c).then(function(b){a.categories=b}).finally(function(){a.loading=!1})},a.expand=function(c){if(c.opened)return void(c.opened=!1);a.loading=!0,d.getChildCategories(c.id).then(function(a){"null"!=a&&(c.children=a,c.opened=!0)},function(){b.error("There was a problem loading the categories")}).finally(function(){a.loading=!1})},a.matchSearch=function(a){return function(b){return b.name===a.name}},a.$watch("search",function(b,c){if(""==c&&(f=a.categories),""==b)return void(a.categories=f);a.loadCategories(b)},!0),a.categoryChanged=function(){a.loadCategories(a.selectedCategory)},a.categoryClicked=function(){a.selectedCategory;a.visible||(a.visible=!0),a.byUser||(a.selectedCategory=""),a.search="",a.categoryChanged()},a.closeMe=function(){a.visible&&(a.visible=!1)}}]),GoogleMerchants.directive("googleCategorySelector",["$rootScope",function(a){return{restrict:"E",templateUrl:"productCategories/googleCategorySelector/googleCategorySelector.tpl.html",controller:"googleCategorySelectorController"}}]),GoogleMerchants.controller("productCategoriesController",["$scope",function(a){}]),GoogleMerchants.directive("productCategories",function(){return{restrict:"E",scope:{productCategories:"=information"},templateUrl:"productCategories/productCategories.tpl.html",controller:"productCategoriesController"}}),GoogleMerchants.controller("shippingController",["$scope","currencyService",function(a,b){a.currency=b.getCurrency()}]),GoogleMerchants.directive("shipping",function(){return{restrict:"E",scope:{shipping:"=information"},templateUrl:"shipping/shipping.tpl.html",controller:"shippingController"}}),GoogleMerchants.controller("uniqueIdentifiersController",["$scope",function(a){}]),GoogleMerchants.directive("uniqueIdentifiers",function(){return{restrict:"E",scope:{uniqueIdentifiers:"=information"},templateUrl:"uniqueIdentifiers/uniqueIdentifiers.tpl.html",controller:"uniqueIdentifiersController"}}),angular.module("templates-dist",["advancedAttributes/advancedAttributes.tpl.html","availabilityPrice/availabilityPrice.tpl.html","basicInformation/basicInformation.tpl.html","common/mapping/mapping.tpl.html","detailedInformation/detailedInformation.tpl.html","productCategories/categoryMapper/categoryMapper.tpl.html","productCategories/categoryMapper/noCategoriesNotice.tpl.html","productCategories/googleCategorySelector/googleCategorySelector.tpl.html","productCategories/productCategories.tpl.html","shipping/shipping.tpl.html","uniqueIdentifiers/uniqueIdentifiers.tpl.html"]),angular.module("advancedAttributes/advancedAttributes.tpl.html",[]).run(["$templateCache",function(a){a.put("advancedAttributes/advancedAttributes.tpl.html",'<div class="wpallexport-collapsed wpallexport-section" ng-class="{closed: !advancedAttributes.open }">\n <div class="wpallexport-content-section">\n <div class="wpallexport-collapsed-header disable-jquery"\n ng-click="advancedAttributes.open = !advancedAttributes.open">\n <h3>Advanced Attributes</h3>\n </div>\n <div class="wpallexport-collapsed-content" id="advanced-attributes"\n ng-slide-down="advancedAttributes.open" duration="0.5">\n <div class="wpallexport-collapsed-content-inner">\n <h3 class="inner-title">Product Type</h3>\n <h4>Multipack</h4>\n <p>\n Multipacks are packages that include several identical products to create a larger unit of sale,\n submitted as a single item.\n For example, if the product for sale is a 6-pack of soda, the multipack value would be 6.\n </p>\n <div class="input">\n <label><input type="text" ng-model="advancedAttributes.multipack" class="wpae-default-input" droppable/></label>\n </div>\n\n <h4>Adult</h4>\n <div class="input">\n <label><input type="radio" ng-model="advancedAttributes.adult" value="no"/>False</label>\n </div>\n <div class="input">\n <label><input type="radio" ng-model="advancedAttributes.adult" value="yes"/>True</label>\n </div>\n <div class="input">\n <label><input type="radio" ng-model="advancedAttributes.adult" value="customValue"/>Custom data</label>\n <div ng-slide-down="advancedAttributes.adult == \'customValue\'" duration="0.2" class="input inner">\n <input type="text" class="wpae-default-input" ng-model="advancedAttributes.adultCV" droppable />\n </div>\n </div>\n\n <h3 class="inner-title">Adwords &amp; Shopping Campaigns</h3>\n <h4>Adwords Redirect</h4>\n <p>If provided, make sure that the URL redirects to the same URL as given in the \'link\' attribute.</p>\n <div class="input">\n <input type="text" class="wpae-default-input" ng-model="advancedAttributes.adwordsRedirect" droppable />\n </div>\n\n <h4>Custom Labels</h4>\n <p>\n You can use custom labels to subdivide products in your campaign using any values\n of your choosing. For example, you can use custom labels to indicate that products\n 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>)\n </p>\n <div style="margin-top:10px;">Custom Label 0</div>\n <div class="input">\n <input type="text" class="wpae-default-input" ng-model="advancedAttributes.customLabel0" droppable />\n <a href="" class="wpae-field-mapping" ng-click="showCustomLabel0Mappings=true">Data Mapping</a>\n <div style="position: relative">\n <mapping mappings="advancedAttributes.customLabel0Mappings" show="showCustomLabel0Mappings" context="text" tooltip="For example, if you have products tagged \'reduced price\' and \'on sale\' and you want both to be listed as \'clearance\' in your export:<br/><br/>Create two sets of data mappings, with \'Exported Data\' set to \'reduced price\' for one and \'on sale\' for the other. \'Translated To\' for both would be \'clearance\'." />\n </div>\n </div>\n <div style="margin-top:10px;">Custom Label 1</div>\n <div class="input">\n <input type="text" class="wpae-default-input" ng-model="advancedAttributes.customLabel1" droppable />\n <a href="" class="wpae-field-mapping" ng-click="showCustomLabel1Mappings=true">Data Mapping</a>\n <div style="position: relative">\n <mapping mappings="advancedAttributes.customLabel1Mappings" show="showCustomLabel1Mappings" context="text" tooltip="For example, if you have products tagged \'reduced price\' and \'on sale\' and you want both to be listed as \'clearance\' in your export:<br/><br/>Create two sets of data mappings, with \'Exported Data\' set to \'reduced price\' for one and \'on sale\' for the other. \'Translated To\' for both would be \'clearance\'." />\n </div>\n </div>\n <div style="margin-top:10px;">Custom Label 2</div>\n <div class="input">\n <input type="text" class="wpae-default-input" ng-model="advancedAttributes.customLabel2" droppable />\n <a href="" class="wpae-field-mapping" ng-click="showCustomLabel2Mappings=true">Data Mapping</a>\n <div style="position: relative">\n <mapping mappings="advancedAttributes.customLabel2Mappings" show="showCustomLabel2Mappings" context="text" tooltip="For example, if you have products tagged \'reduced price\' and \'on sale\' and you want both to be listed as \'clearance\' in your export:<br/><br/>Create two sets of data mappings, with \'Exported Data\' set to \'reduced price\' for one and \'on sale\' for the other. \'Translated To\' for both would be \'clearance\'." />\n </div>\n </div>\n <div style="margin-top:10px;">Custom Label 3</div>\n <div class="input">\n <input type="text" class="wpae-default-input" ng-model="advancedAttributes.customLabel3" droppable />\n <a href="" class="wpae-field-mapping" ng-click="showCustomLabel3Mappings=true">Data Mapping</a>\n <div style="position: relative">\n <mapping mappings="advancedAttributes.customLabel3Mappings" show="showCustomLabel3Mappings" context="text" tooltip="For example, if you have products tagged \'reduced price\' and \'on sale\' and you want both to be listed as \'clearance\' in your export:<br/><br/>Create two sets of data mappings, with \'Exported Data\' set to \'reduced price\' for one and \'on sale\' for the other. \'Translated To\' for both would be \'clearance\'." />\n </div>\n </div>\n <div style="margin-top:10px;">Custom Label 4</div>\n <div class="input">\n <input type="text" class="wpae-default-input" ng-model="advancedAttributes.customLabel4" droppable />\n <a href="" class="wpae-field-mapping" ng-click="showCustomLabel4Mappings=true">Data Mapping</a>\n <div style="position: relative">\n <mapping mappings="advancedAttributes.customLabel4Mappings" show="showCustomLabel4Mappings" context="text" tooltip="For example, if you have products tagged \'reduced price\' and \'on sale\' and you want both to be listed as \'clearance\' in your export:<br/><br/>Create two sets of data mappings, with \'Exported Data\' set to \'reduced price\' for one and \'on sale\' for the other. \'Translated To\' for both would be \'clearance\'." />\n </div>\n </div>\n\n <hr/>\n\n <h3 class="inner-title">Unit Prices</h3>\n <p>\n These attributes allow you to submit pricing for products that rely on unit pricing.\n The \'unit pricing measure\' attribute defines the measure and dimension of an item (e.g. 150g).\n The \'unit pricing base measure attribute specifies your preference of the denominator of the unit price (e.g. 100g).\n </p>\n <p>\n 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\'.\n </p>\n\n <h4>Unit Pricing Measure</h4>\n <div class="input">\n <input type="text" ng-model="advancedAttributes.unitPricingMeasure" class="wpae-default-input" droppable />\n </div>\n <h4>Unit Pricing Base Measure</h4>\n <div class="input">\n <input type="text" ng-model="advancedAttributes.unitPricingBaseMeasure" class="wpae-default-input" droppable />\n <select style="width: 170px;" ng-model="advancedAttributes.unitPricingBaseMeasureUnit">\n <option value="kg">Kilograms (kg)</option>\n <option value="g">Ounces (oz)</option>\n <option value="lb">Pounds (lb)</option>\n <option value="mg">Milligrams (mg)</option>\n <option value="g">Grams (g)</option>\n </select>\n </div>\n <hr/>\n <h3 class="inner-title">Additional Attributes</h3>\n <h4>Expiration Date</h4>\n <p>\n This is the date that an item listing will expire. If you do not provide this attribute, items\n will expire and no longer appear in Google Shopping results after 30 days.\n <strong>You cannot use thi attribute to extend the expiration period to longer than 30 days.</strong>\n </p>\n <div class="input">\n <input type="text" class="wpae-default-input" ng-model="advancedAttributes.expirationDate" droppable />\n </div>\n\n <h4>Energy Efficiency Class</h4>\n <p>\n This attribute allows you to submit the energy label for your applicable products in feeds targeting\n European Union countries and switzerland.\n </p>\n <div class="input">\n <input type="text" class="wpae-default-input" ng-model="advancedAttributes.energyEfficiencyClass" droppable />\n <a href="" class="wpae-field-mapping" ng-click="showEnergyEfficiencyMappings=true">Data Mapping</a>\n <div style="position: relative">\n <mapping mappings="advancedAttributes.energyEfficiencyClassMappings" show="showEnergyEfficiencyMappings" tooltip="For example, if you have products tagged \'energy efficient\' and \'low power\' and you want both to be listed as \'A+++\' in your export:\n<br/><br/>\nCreate two sets of data mappings, with \'Exported Data\' set to \'energy efficient\' for one and \'low power\' for the other. \'Translated To\' for both would be \'A+++\'." />\n </div>\n </div>\n <h4>Promotion ID</h4>\n <p>\n If using Merchant Promotions, the \'promotion id\' attribute is used in both your products\n feed and your promotions feed to match products to promotions across the two feeds.\n </p>\n <div class="input">\n <input type="text" class="wpae-default-input" ng-model="advancedAttributes.promotionId" droppable />\n <a href="" class="wpae-field-mapping" ng-click="showPromotionIdMappings=true">Data Mapping</a>\n <div style="position: relative">\n <mapping mappings="advancedAttributes.promotionIdMappings" show="showPromotionIdMappings" tooltip="For example, if your products are tagged \'reduced price\' and \'on sale\' and you want both to be listed with a specific promotion ID in your export:\n<br/><br/>\n'+"Create two sets of data mappings, with 'Exported Data' set to 'reduced price' for one and 'on sale' for the other. 'Translated To' for both would be the desired promotion ID.\" />\n </div>\n </div>\n\n </div>\n </div>\n </div>\n</div>")}]),angular.module("availabilityPrice/availabilityPrice.tpl.html",[]).run(["$templateCache",function(a){a.put("availabilityPrice/availabilityPrice.tpl.html",'<div class="wpallexport-collapsed wpallexport-section" ng-class="{closed: !availabilityPrice.open}">\n <div class="wpallexport-content-section">\n <div class="wpallexport-collapsed-header disable-jquery" ng-click="availabilityPrice.open = !availabilityPrice.open">\n <h3>Availability &amp; Price</h3>\n </div>\n <div class="wpallexport-collapsed-content" id="availability-price" ng-slide-down="availabilityPrice.open" duration="0.5">\n <div class="wpallexport-collapsed-content-inner">\n <h4>Price</h4>\n <div class="input">\n <label><input type="radio" ng-model="availabilityPrice.price" value="useProductPrice" /> Use the product\'s price</label>\n </div>\n <div class="input">\n <label><input type="radio" ng-model="availabilityPrice.price" value="customValue" /> Custom data</label>\n\n <div class="input inner" ng-slide-down="availabilityPrice.price == \'customValue\'" duration="0.2">\n <input type="text" class="wpae-default-input" ng-model="availabilityPrice.priceCV" droppable />\n </div>\n </div>\n\n <div class="input inner">\n <a href="" ng-click="availabilityPrice.adjustPrice = !availabilityPrice.adjustPrice" class="adjust-price-link">\n <span class="open-indicator" ng-if="availabilityPrice.adjustPrice">-</span>\n <span class="open-indicator" ng-if="!availabilityPrice.adjustPrice">+</span> Adjust Price\n </a>\n <div ng-slide-down="availabilityPrice.adjustPrice" class="adjust-price" duration="0.2">\n <div class="input">\n <input type="text" class="wpae-default-input" ng-model="availabilityPrice.adjustPriceValue" droppable /><select ng-model="availabilityPrice.adjustPriceType">\n <option value="%">%</option>\n <option value="USD">{{currency}}</option>\n </select>\n\n <div ng-show="availabilityPrice.adjustPriceType == \'%\'" class="tooltip-container">\n <a href="#" ng-cloak="" class="wpallexport-help"\n 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>\n </div>\n <div ng-show="availabilityPrice.adjustPriceType == \'USD\'" class="tooltip-container">\n <a href="#" ng-cloak="" class="wpallexport-help"\n tipsy="Enter a negative number to reduce prices.">?</a>\n </div>\n </div>\n </div>\n </div>\n <h4>Sale Price</h4>\n <div class="input">\n <label><input type="radio" ng-model="availabilityPrice.salePrice" value="useProductSalePrice"/>Use the product\'s sale price</label>\n </div>\n <div class="input">\n <div class="input">\n <label><input type="radio" ng-model="availabilityPrice.salePrice" value="customValue" />Custom data</label>\n <div class="input inner" ng-slide-down="availabilityPrice.salePrice == \'customValue\'" duration="0.2">\n <input type="text" class="wpae-default-input" ng-model="availabilityPrice.salePriceCV" droppable/>\n </div>\n </div>\n </div>\n <div class="input inner">\n <a href="" ng-click="availabilityPrice.adjustSalePrice = !availabilityPrice.adjustSalePrice" ng-init="availabilityPrice.adjustSalePrice= false" class="adjust-price-link">\n <span class="open-indicator" ng-if="availabilityPrice.adjustSalePrice">-</span>\n <span class="open-indicator" ng-if="!availabilityPrice.adjustSalePrice">+</span> Adjust Sale Price\n </a>\n <div ng-slide-down="availabilityPrice.adjustSalePrice" class="adjust-price" duration="0.2">\n <div class="input">\n <input type="text" class="wpae-default-input" ng-model="availabilityPrice.adjustSalePriceValue" droppable /><select ng-model="availabilityPrice.adjustSalePriceType">\n <option value="%">%</option>\n <option value="USD">{{currency}}</option>\n </select>\n <div ng-show="availabilityPrice.adjustSalePriceType == \'%\'" class="tooltip-container">\n <a href="#" ng-cloak="" class="wpallexport-help"\n 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>\n </div>\n <div ng-show="availabilityPrice.adjustSalePriceType == \'USD\'" class="tooltip-container">\n <a href="#" ng-cloak="" class="wpallexport-help"\n tipsy="Enter a negative number to reduce prices.">?</a>\n </div>\n </div>\n </div>\n </div>\n <h4>Availability</h4>\n <div class="input">\n <label><input type="radio" ng-model="availabilityPrice.availability" value="useWooCommerceStockValues"/>Use WooCommerce stock values</label>\n </div>\n <div class="input">\n <label><input type="radio" ng-model="availabilityPrice.availability" value="customValue" />Custom data</label>\n <div class="input inner" ng-slide-down="availabilityPrice.availability == \'customValue\'" duration="0.2">\n <input type="text" class="wpae-default-input" ng-model="availabilityPrice.availabilityCV" droppable />\n </div>\n </div>\n </div>\n <div class="wpallexport-collapsed wpallexport-section wpallexport-google-merchants-advanced-options" ng-init="advancedOptionsOpen = false" ng-class="{closed: !advancedOptionsOpen} ">\n <div class="wpallexport-content-section rad0">\n <div class="wpallexport-collapsed-header wpallexport-advanced-options-header disable-jquery" ng-click="advancedOptionsOpen = !advancedOptionsOpen">\n <h3 class="advanced-options">Advanced Options</h3>\n </div>\n <div class="wpallexport-collapsed-content wpallexport-advanced-options-content" ng-slide-down="advancedOptionsOpen" duration="0.5">\n <div class="wpallexport-collapsed-content-inner">\n <div class="input">\n <h4>Currency</h4>\n <div class="input">\n <div class="select-container" style="padding-left: 0px;">\n <select class="custom-value" chosen ng-model="availabilityPrice.currency">\n <option value="AUD">Australian Dollars (AUD)</option>\n <option value="BRL">Brazilian Reals (BRL)</option>\n <option value="GBP">British Pounds (GBP)</option>\n <option value="CAD">Canadian Dollars (CAD)</option>\n <option value="CZK">Czech Crowns (CZK)</option>\n <option value="DKK">Danish Krone (DKK)</option>\n <option value="EUR">Euros (EUR)</option>\n <option value="INR">Indian Rupees (INR)</option>\n <option value="JPY">Japanese Yen (JPY)</option>\n <option value="MXN">Mexican Pesos (MXN)</option>\n <option value="NZD">New Zealand Dollars (NZD)</option>\n <option value="NOK">Norwegian Krone (NOK)</option>\n <option value="PLN">Polish Złoty (PLN)</option>\n <option value="RUB">Russian Rubles (RUB)</option>\n <option value="SGD">Singapore Dollars (SGD)</option>\n <option value="ZAR">South Africa Rand (ZAR)</option>\n <option value="SEK">Swedish Krona (SEK)</option>\n <option value="CHF">Swiss Franc (CHF)</option>\n <option value="TRY">Turkish Lira (TRY)</option>\n <option value="USD">United States Dollars (USD)</option>\n </select>\n </div>\n </div>\n <h4>Availability Date</h4>\n <div class="input">\n <input type="text" class="wpae-default-input" ng-model="availabilityPrice.availabilityDate" droppable />\n </div>\n <h4>Sale Price Effective Date</h4>\n <div class="input">\n <input type="text" class="wpae-default-input" ng-model="availabilityPrice.salePriceEffectiveDate" droppable />\n </div>\n </div>\n </div>\n </div>\n </div>\n </div>\n </div>\n </div>\n</div>')}]),angular.module("basicInformation/basicInformation.tpl.html",[]).run(["$templateCache",function(a){
9
- a.put("basicInformation/basicInformation.tpl.html",'<div class="wpallexport-collapsed wpallexport-section" ng-class="{closed: !basicInformation.open}">\n <div class="wpallexport-content-section">\n <div class="wpallexport-collapsed-header disable-jquery" ng-click="basicInformation.open = !basicInformation.open">\n <h3>Basic Product Information</h3>\n </div>\n <div class="wpallexport-collapsed-content" id="basic-product-information" ng-slide-down="basicInformation.open" duration="0.5">\n <div class="wpallexport-collapsed-content-inner">\n\n <h4>Item Title</h4>\n <div class="input">\n <label><input type="radio" ng-model="basicInformation.itemTitle" value="productTitle"/>Use the product title</label>\n </div>\n <div class="input">\n <label><input type="radio" id="title-custom-data-select" ng-model="basicInformation.itemTitle" value="customValue" />Custom data</label>\n <div class="input inner" id="title-custom-data-container" ng-slide-down="basicInformation.itemTitle == \'customValue\'" duration="0.2">\n <input type="text" id="title-custom-data-value" class="wpae-default-input" ng-model="basicInformation.itemTitleCV" droppable />\n </div>\n </div>\n\n <div class="input checkbox" ng-if="basicInformation.hasVariations">\n <label><input type="checkbox" ng-model="basicInformation.useParentTitleForVariableProducts" value="1" />For variable products, use the parent product title</label>\n </div>\n\n <h4>Item Description</h4>\n <div class="input">\n <label><input type="radio" ng-model="basicInformation.itemDescription" id="use-product-description" value="productDescription"/>Use the product description</label>\n </div>\n <div class="input">\n <label><input type="radio" ng-model="basicInformation.itemDescription" id="use-product-short-description" value="productShortDescription"/>Use the product short description</label>\n </div>\n <div class="input">\n <label><input type="radio" ng-model="basicInformation.itemDescription" id="product-description-custom-data" value="customValue" />Custom data</label>\n <div class="input inner" ng-slide-down="basicInformation.itemDescription == \'customValue\'" duration="0.2">\n <input type="text" class="wpae-default-input" id="description-custom-data-value" ng-model="basicInformation.itemDescriptionCV" droppable />\n </div>\n </div>\n\n <div class="input checkbox">\n <label><input type="checkbox" ng-model="basicInformation.useVariationDescriptionForVariableProducts" value="1" />Use the variation description for variable products</label>\n </div>\n <div class="input checkbox inner" ng-slide-down="basicInformation.useVariationDescriptionForVariableProducts" duration="0.2">\n <label><input type="checkbox" ng-model="basicInformation.useParentDescirptionIfThereIsNoVariationDescirption" value="1" />If there is no variation description, use the parent product description</label>\n </div>\n\n <h4>Link</h4>\n <div class="input">\n <label><input type="radio" ng-model="basicInformation.itemLink" id="use-product-permalinks" value="productLink"/>Use the product permalink</label>\n </div>\n\n <div class="input">\n <label><input type="radio" ng-model="basicInformation.itemLink" value="customValue" />Custom data</label>\n <div class="input inner" ng-slide-down="basicInformation.itemLink == \'customValue\'" duration="0.2">\n <input type="text" class="wpae-default-input" ng-model="basicInformation.itemLinkCV" droppable />\n </div>\n </div>\n\n <div class="input checkbox">\n <label><input type="checkbox" ng-model="basicInformation.addVariationAttributesToProductUrl" />For variable products, add variation attributes to product URL</label>\n </div>\n\n <h4>Main Image Link</h4>\n <div class="input">\n <label><input type="radio" ng-model="basicInformation.itemImageLink" value="useProductFeaturedImage"/>Use product featured image</label>\n </div>\n\n <div class="input">\n <label><input type="radio" ng-model="basicInformation.itemImageLink" value="customValue" />Custom data</label>\n <div class="input inner" ng-slide-down="basicInformation.itemImageLink == \'customValue\'" duration="0.2">\n <input type="text" class="wpae-default-input" ng-model="basicInformation.itemImageLinkCV" droppable />\n </div>\n </div>\n\n <div class="input checkbox">\n <label><input type="checkbox" ng-model="basicInformation.useVariationImage" />For variable products, use variation image</label>\n </div>\n\n <div class="input checkbox inner" ng-slide-down="basicInformation.useVariationImage" duration="0.2">\n <label><input type="checkbox" ng-model="basicInformation.useFeaturedImageIfThereIsNoVariationImage" value="1" />If there is no variation image, use the featured image</label>\n </div>\n\n <h4>Additional Image Link</h4>\n <div class="input">\n <label><input type="radio" ng-model="basicInformation.additionalImageLink" value="productImages"/>Use images from product gallery</label>\n </div>\n\n <div class="input">\n <label><input type="radio" ng-model="basicInformation.additionalImageLink" value="customValue" />Custom data</label>\n <div class="input inner" ng-slide-down="basicInformation.additionalImageLink == \'customValue\'" duration="0.2">\n <input type="text"class="wpae-default-input" ng-model="basicInformation.additionalImageLinkCV" droppable />\n </div>\n </div>\n </div>\n <div class="wpallexport-collapsed wpallexport-section wpallexport-google-merchants-advanced-options" ng-init="advancedOptionsOpen = false" ng-class="{closed: !advancedOptionsOpen}">\n <div class="wpallexport-content-section rad0">\n <div class="wpallexport-collapsed-header wpallexport-advanced-options-header disable-jquery" ng-click="advancedOptionsOpen = !advancedOptionsOpen">\n <h3>Advanced Options</h3>\n </div>\n <div class="wpallexport-collapsed-content wpallexport-advanced-options-content" ng-slide-down="advancedOptionsOpen" duration="0.5">\n <div class="wpallexport-collapsed-content-inner">\n <div class="input">\n <h4>Item ID</h4>\n <div class="input">\n <input type="text" class="wpae-default-input" ng-model="basicInformation.itemId" droppable />\n </div>\n <h4>Item Condition</h4>\n <div class="input">\n <input type="text" class="wpae-default-input" ng-model="basicInformation.condition" droppable />\n <a href="" class="wpae-field-mapping" ng-click="showConditionMappings=true">Data Mapping</a>\n <mapping mappings="basicInformation.conditionMappings" show="showConditionMappings" context="condition" />\n <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>\n </div>\n <h4>Mobile Link</h4>\n <div class="input">\n <input type="text" class="wpae-default-input" ng-model="basicInformation.mobileLink" droppable />\n </div>\n </div>\n </div>\n </div>\n </div>\n </div>\n </div>\n </div>\n</div>')}]),angular.module("common/mapping/mapping.tpl.html",[]).run(["$templateCache",function(a){a.put("common/mapping/mapping.tpl.html",'<div class="wp-pointer wp-pointer-right" style="width: 450px; display: block; position: absolute; top: -70px; left: -23px;" ng-if="show">\n <div class="wp-pointer-content">\n <h4 style="padding-left:25px; margin-bottom:0; padding-bottom:0; margin-top:20px;">\n Data Mapping\n <a style="margin-top: 7px;" ng-if="tooltip" class="wpallexport-help"\n tipsy="{{ tooltip }}">?\n </a>\n </h4>\n\n <fieldset style="margin-top: 0; padding-top: 0; padding-bottom: 0;">\n <table cellpadding="0" cellspacing="0" class="cf-form-table" rel="cf_mapping_0" style="margin-left: 5px; margin-top: 15px;">\n <thead>\n <tr>\n <td><div style="padding-bottom:5px">Exported Data</div></td>\n <td><div style="padding-bottom:5px;">Translated To</div></td>\n <td>&nbsp;</td>\n </tr>\n </thead>\n <tbody>\n <tr class="form-field" ng-repeat="mapping in mappings">\n <td style="width: 50%;">\n <input type="text" ng-model="mapping.mapFrom" style="margin-left:0;"/>\n </td>\n <td style="width: 50%;">\n <div ng-if="context == \'sizeType\'">\n <select chosen ng-model="mapping.mapTo" >\n <option value="">Please select</option>\n <option value="regular">Regular</option>\n <option value="petite">Petite</option>\n <option value="plus">Plus</option>\n <option value="big and tall">Big and tall</option>\n <option value="maternity">Maternity</option>\n </select>\n </div>\n <div ng-if="context == \'condition\' ">\n <select chosen ng-model="mapping.mapTo">\n <option value="new">New</option>\n <option value="refurbished">Refurbished</option>\n <option value="used">Used</option>\n </select>\n </div>\n <div ng-if="context != \'sizeType\' && context != \'condition\'">\n <input type="text" ng-model="mapping.mapTo" />\n </div>\n </td>\n <td class="action remove">\n <a href="" ng-click="removeMapping(mapping)" ng-show="$index > 0"\n style="right:-10px;"></a>\n </td>\n </tr>\n <tr>\n <td colspan="3">\n <a href="" ng-click="addMapping()" title="Add Another" class="action add-new-key add-new-entry" style="margin-top: 15px; margin-bottom:15px; margin-left: 0;">\n Add Another\n </a>\n </td>\n </tr>\n </tbody>\n </table>\n <input type="hidden" name="custom_mapping_rules[]" value="">\n </fieldset>\n <div class="wp-pointer-buttons">\n <a class="close" href="" ng-click="close()">Close</a>\n <a class="save_popup save_mr" style="position:static; margin-right: 15px;" href="" ng-click="saveMappings()">Save Rules</a>\n </div>\n </div>\n <div class="wp-pointer-arrow">\n <div class="wp-pointer-arrow-inner"></div>\n </div>\n</div>')}]),angular.module("detailedInformation/detailedInformation.tpl.html",[]).run(["$templateCache",function(a){a.put("detailedInformation/detailedInformation.tpl.html",'<div class="wpallexport-collapsed wpallexport-section" ng-class="{closed: !detailedInformation.open }">\n <div class="wpallexport-content-section">\n <div class="wpallexport-collapsed-header disable-jquery" ng-click="detailedInformation.open = !detailedInformation.open ">\n <h3>Detailed Product Attributes &amp; Item Grouping</h3>\n </div>\n <div class="wpallexport-collapsed-content" id="detailed-product-information" ng-slide-down="detailedInformation.open" duration="0.5">\n <div class="wpallexport-collapsed-content-inner">\n <h4>Item Group ID</h4>\n <p>\n For variable products, each variant is exported as a separate product.\n Variants that belong to the same group must all have the same Item Group ID\n so that Google knows they are related.\n </p>\n <div class="input">\n <label><input type="radio" ng-model="detailedInformation.setTheGroupId" value="automatically" />Automatically set the item group ID</label>\n </div>\n <div class="input">\n <label><input type="radio" ng-model="detailedInformation.setTheGroupId" value="customValue" />Custom data</label>\n <div class="input inner" ng-slide-down="detailedInformation.setTheGroupId == \'customValue\'" duration="0.2">\n <input type="text" class="wpae-default-input" ng-model="detailedInformation.setTheGroupIdCV" droppable />\n </div>\n </div>\n <h4>Color</h4>\n <div class="input">\n <label><input type="radio" ng-model="detailedInformation.color" value="selectFromWooCommerceProductAttributes" />Select from WooCommerce product attributes</label>\n <div ng-slide-down="detailedInformation.color == \'selectFromWooCommerceProductAttributes\'" duration="0.2">\n <div class="select-container" ng-if="attributes.length">\n <select autodetect="Color" chosen ng-options="\'{\' + i.name + \'}\' as i.name for i in attributes" ng-model="detailedInformation.colorAttribute" class="inner">\n <option value="">Leave Blank</option>\n </select>\n </div>\n <div class="no-attributes" ng-if="!attributes.length">\n The products in this export have no product attributes. Add attributes to your products in order to map them to a color.\n </div>\n </div>\n </div>\n <div class="input">\n <label><input type="radio" ng-model="detailedInformation.color" value="customValue" />Custom data</label>\n <div class="input inner" ng-slide-down="detailedInformation.color == \'customValue\'" duration="0.2">\n <input type="text" class="wpae-default-input" ng-model="detailedInformation.colorCV" droppable />\n </div>\n </div>\n\n <h4>Size</h4>\n <div class="input">\n <label><input type="radio" ng-model="detailedInformation.size" value="selectFromWooCommerceProductAttributes" />Select from WooCommerce product attributes</label>\n <div ng-slide-down="detailedInformation.size == \'selectFromWooCommerceProductAttributes\'" duration="0.2">\n <div class="select-container" ng-if="attributes.length">\n <select id="sizeAttribute" autodetect="Size" chosen ng-options="\'{\' + i.name + \'}\' as i.name for i in attributes" ng-model="detailedInformation.sizeAttribute" class="inner">\n <option value="">Leave Blank</option>\n </select>\n </div>\n <div class="no-attributes" ng-if="!attributes.length">\n The products in this export have no product attributes. Add attributes to your products in order to map them to a size.\n </div>\n </div>\n </div>\n <div class="input">\n <label>\n <input type="radio" ng-model="detailedInformation.size" value="customValue" />Custom data\n </label>\n <div class="input inner" ng-slide-down="detailedInformation.size== \'customValue\'" duration="0.2">\n <input type="text" class="wpae-default-input" ng-model="detailedInformation.sizeCV" droppable />\n </div>\n </div>\n\n <h4>Gender</h4>\n <div class="input">\n <label><input type="radio" ng-model="detailedInformation.gender" value="selectFromWooCommerceProductAttributes" />Select from WooCommerce product attributes</label>\n <div class="clear"></div>\n <div ng-slide-down="detailedInformation.gender == \'selectFromWooCommerceProductAttributes\'" duration="0.2">\n <div class="select-container" ng-if="attributes.length">\n <select autodetect="Gender" chosen ng-options="\'{\' + i.name + \'}\' as i.name for i in attributes" ng-model="detailedInformation.genderAttribute" class="inner">\n <option value="">Leave Blank</option>\n </select>\n </div>\n <div class="no-attributes" ng-if="!attributes.length">\n The products in this export have no product attributes. Add attributes to your products in order to map them to a gender.\n </div>\n </div>\n </div>\n <div class="input">\n <label><input type="radio" ng-model="detailedInformation.gender" value="autodetectBasedOnProductTaxonomies"/>Autodetect based on WooCommerce product categories</label>\n <div ng-slide-down="detailedInformation.gender == \'autodetectBasedOnProductTaxonomies\'" duration="0.2">\n <div class="inner">\n <div class="input">\n <label>\n <input type="radio" ng-model="detailedInformation.genderAutodetect" value="keepBlank"/>Leave gender blank if unable to detect gender\n </label>\n </div>\n <div class="input">\n <label>\n <input type="radio" ng-model="detailedInformation.genderAutodetect" value="setToUnisex" />Set gender to unisex if unable to detect gender\n </label>\n </div>\n </div>\n </div>\n </div>\n <div class="input">\n <label>\n <input type="radio" ng-model="detailedInformation.gender" value="selectProductTaxonomies" />Select from WooCommerce product categories\n </label>\n <div ng-slide-down="detailedInformation.gender == \'selectProductTaxonomies\'" duration="0.2">\n <category-mapper mappings="detailedInformation.genderCats" context="gender" />\n </div>\n </div>\n <div class="input">\n <label><input type="radio" ng-model="detailedInformation.gender" value="customValue" />Custom data</label>\n <div class="input inner" ng-slide-down="detailedInformation.gender == \'customValue\'" duration="0.2">\n <input type="text" class="wpae-default-input" ng-model="detailedInformation.genderCV" droppable />\n </div>\n </div>\n </div>\n\n <div class="wpallexport-collapsed wpallexport-section wpallexport-google-merchants-advanced-options" ng-class="{closed: !advancedOptionsOpen}">\n <div class="wpallexport-content-section rad0">\n <div class="wpallexport-collapsed-header wpallexport-advanced-options-header disable-jquery" ng-click="advancedOptionsOpen = !advancedOptionsOpen">\n <h3>Advanced Options</h3>\n </div>\n <div class="wpallexport-collapsed-content wpallexport-advanced-options-content" ng-slide-down="advancedOptionsOpen" duration="0.5">\n <div class="wpallexport-collapsed-content-inner">\n <h4>Size Type</h4>\n <div class="input">\n <div style="display: inline-block;">\n <input type="text" class="wpae-default-input" ng-model="detailedInformation.sizeType" droppable />\n </div>\n <a href="" class="wpae-field-mapping" ng-click="showMappings=true">Data Mapping</a>\n <div style="position: relative">\n <mapping mappings="detailedInformation.sizeTypeMappings" show="showMappings" context="sizeType" />\n </div>\n </div>\n <h4>Size System</h4>\n <div class="input">\n <div class="select-container" style="padding-left: 0;">\n <select chosen ng-model="detailedInformation.sizeSystem" class="inner">\n <option value="">Leave Blank</option>\n <option value="US">US</option>\n <option value="UK">UK</option>\n <option value="EU">EU</option>\n <option value="DE">DE</option>\n <option value="FR">FR</option>\n <option value="JP">JP</option>\n <option value="CN">CN (China)</option>\n <option value="IT">IT</option>\n <option value="BR">BR</option>\n <option value="MEX">MEX</option>\n <option value="AU">AU</option>\n </select>\n </div>\n </div>\n <h4>Age Group</h4>\n <div class="input">\n <label>\n <input type="radio" ng-model="detailedInformation.ageGroup" value="selectFromWooCommerceProductAttributes"/>Select from WooCommerce product attributes\n </label>\n <div ng-slide-down="detailedInformation.ageGroup == \'selectFromWooCommerceProductAttributes\'" duration="0.2">\n <div class="select-container" ng-if="attributes.length">\n <select chosen ng-options="\'{\' + i.name + \'}\' as i.name for i in attributes" ng-model="detailedInformation.ageGroupAttribute" class="inner">\n <option value="">Leave Blank</option>\n </select>\n </div>\n <div class="no-attributes" ng-if="!attributes.length">\n The products in this export have no product attributes. Add attributes to your products in order to map them to an age group.\n </div>\n </div>\n </div>\n <div class="input">\n <label><input type="radio" ng-model="detailedInformation.ageGroup" value="selectFromProductTaxonomies" />Select from WooCommerce product categories</label>\n <div ng-slide-down="detailedInformation.ageGroup == \'selectFromProductTaxonomies\' " duration="0.5" >\n <div ng-show="detailedInformation.ageGroup == \'selectFromProductTaxonomies\' ">\n <category-mapper mappings="detailedInformation.ageGroupCats" grey="1" context="ageGroup" />\n </div>\n </div>\n </div>\n <div class="input">\n <label>\n <input type="radio" ng-model="detailedInformation.ageGroup" value="customValue" />Custom data\n </label>\n <div class="input inner" ng-slide-down="detailedInformation.ageGroup== \'customValue\'" duration="0.2">\n <input type="text" class="wpae-default-input" ng-model="detailedInformation.ageGroupCV" droppable />\n </div>\n </div>\n <h4>Material</h4>\n <div class="input">\n <label><input type="radio" ng-model="detailedInformation.material" value="selectFromWooCommerceProductAttributes" />Select from WooCommerce product attributes</label>\n <div ng-slide-down="detailedInformation.material == \'selectFromWooCommerceProductAttributes\'" duration="0.2">\n <div class="select-container" ng-if="attributes.length">\n <select chosen ng-options="\'{\' + i.name + \'}\' as i.name for i in attributes" ng-model="detailedInformation.materialAttribute" class="inner">\n <option value="">Leave Blank</option>\n </select>\n </div>\n <div class="no-attributes outer" ng-if="!attributes.length">\n The products in this export have no product attributes. Add attributes to your products in order to map them to a material.\n </div>\n </div>\n </div>\n <div class="input">\n <label><input type="radio" ng-model="detailedInformation.material" value="customValue" />Custom data</label>\n <div class="input inner" ng-slide-down="detailedInformation.material == \'customValue\'" duration="0.2">\n <div class="input inner" ng-slide-down="detailedInformation.material == \'customValue\'" duration="0.2">\n <input type="text" class="wpae-default-input" ng-model="detailedInformation.materialCV" droppable />\n </div>\n </div>\n\n <h4>Pattern</h4>\n <div class="input">\n <label><input type="radio" ng-model="detailedInformation.pattern" value="selectFromWooCommerceProductAttributes" />Select from WooCommerce product attributes</label>\n <div ng-slide-down="detailedInformation.pattern == \'selectFromWooCommerceProductAttributes\'" duration="0.2">\n <div class="select-container" ng-if="attributes.length">\n <select chosen ng-options="\'{\' + i.name + \'}\' as i.name for i in attributes" ng-model="detailedInformation.patternAttribute" class="inner">\n <option value="">Leave Blank</option>\n </select>\n </div>\n <div class="no-attributes outer" ng-if="!attributes.length">\n The products in this export have no product attributes. Add attributes to your products in order to map them to a pattern.\n </div>\n </div>\n </div>\n <div class="input">\n <label><input type="radio" ng-model="detailedInformation.pattern" value="customValue" />Custom data</label>\n <div class="input inner" ng-slide-down="detailedInformation.pattern == \'customValue\'" duration="0.2">\n <input type="text" class="wpae-default-input" ng-model="detailedInformation.patternCV" droppable />\n </div>\n </div>\n </div>\n </div>\n </div>\n </div>\n </div>\n </div>\n</div>')}]),angular.module("productCategories/categoryMapper/categoryMapper.tpl.html",[]).run(["$templateCache",function(a){
10
- a.put("productCategories/categoryMapper/categoryMapper.tpl.html",'<div class="category-mapper">\n <div>\n <div class="woocommerce-categories-title" style="float:left; padding: 13px 13px 13px 31px;">\n <h4 style="margin: 0; padding: 0; font-size:13px; color:#000;">WooCommerce Categories</h4>\n </div>\n\n <div class="google-categories-title" style="float:right; padding:13px; margin-right: 278px;" ng-if="::(context==\'categories\')">\n <h4 style="margin:0; padding:0; font-size:13px; color:#000; ">Google Categories</h4>\n </div>\n\n <div class="google-categories-title" style="float:right; padding:13px; margin-right: 288px;" ng-if="::(context==\'gender\')">\n <h4 style="margin:0; padding:0; font-size:13px; color:#000; ">Google Genders</h4>\n </div>\n\n <div class="google-categories-title" style="float:right; padding:13px; margin-right: 268px;" ng-if="::(context==\'ageGroup\')">\n <h4 style="margin:0; padding:0; font-size:13px; color:#000; ">Google Age Groups</h4>\n </div>\n </div>\n\n <ul dx-start-with="innerMapping" class="tree" ng-class="::{ \'root\' : $dxLevel == 0 }" ng-init="initialize()" style="width: 100%; float:left; margin-top: 0px;" ng-if="innerMapping">\n <li ng-repeat="node in $dxPrior.children | limitTo: limits" style="display: block;">\n <div class="category-container" style="position: relative;" ng-class="::{ \'with-children\' : node.children.length, \'without-children\' : (!node.children.length) }">\n <div class="hline"></div>\n <div class="category-icon-container" style="float:left;">\n <div class="vline" ng-if="::(($index > 0 && $dxLevel == 0) || $dxLevel > 0)"></div>\n <div class="vline noborder" ng-if="::(!(($index > 0 && $dxLevel == 0) || $dxLevel > 0))"></div>\n <span ng-if="node.expanded" class="minus" ng-click="expandNode(node)">\n <svg width="9" height="9" viewBox="0 0 1792 1792" xmlns="http://www.w3.org/2000/svg">\n <path d="M1600 736v192q0 40-28 68t-68 28h-1216q-40 0-68-28t-28-68v-192q0-40 28-68t68-28h1216q40 0 68 28t28 68z"/>\n </svg>\n </span>\n <span ng-if="!node.expanded && node.children.length" class="plus" ng-click="expandNode(node)">\n <svg width="9" height="9" viewBox="0 0 1792 1792" xmlns="http://www.w3.org/2000/svg">\n <path d="M1600 736v192q0 40-28 68t-68 28h-416v416q0 40-28 68t-68 28h-192q-40 0-68-28t-28-68v-416h-416q-40 0-68-28t-28-68v-192q0-40 28-68t68-28h416v-416q0-40 28-68t68-28h192q40 0 68 28t28 68v416h416q40 0 68 28t28 68z"/>\n </svg>\n </span>\n <span ng-if="::(!node.children.length)" class="plus blank" style="cursor: default;"></span>\n <div class="vline bottom"></div>\n </div>\n <div class="category-name-container">\n <span class="dot" ng-repeat="i in ::getTimes($dxLevel) track by $index"></span>\n <div class="category">\n <a class="category-title" href="" ng-click="expandNode(node)" ng-bind-html="::node.title | safe"></a>\n <br ng-if="::node.children.length"/>\n <span ng-if="::node.children.length" class="children-number">\n {{ ::node.children.length }} child <span ng-if="::node.children.length == 1">category</span><span ng-if="::node.children.length > 1">categories</span>\n </span>\n </div>\n </div>\n <div class="line" ></div>\n <div class="mapping" ng-if="::(context == \'categories\')" >\n <div style="position: relative" ng-init="visible=false">\n <input type="text" style="width: 402px; font-size:13px; padding-left: 8px;" placeholder="{{ getPlaceholder() }}"\n ng-class="{ \'selected-automatically\' : !mappings[node.id].byUser, \'opened\' : visible }"\n ng-model="selectedCategory"\n ng-value="mappings[node.id].name"\n ng-change="categoryChanged()"\n ng-click="categoryClicked()"\n class="wpae-google-category-input"\n ng-model-options="{ debounce: 200 }"\n />\n <google-category-selector />\n </div>\n </div>\n <div class="mapping gender" ng-if="::(context == \'gender\')" style="border: none;">\n <select chosen cascade ng-model="mappings[node.id]" ng-change="select()">\n <option value="male">Male</option>\n <option value="female">Female</option>\n <option value="unisex">Unisex</option>\n </select>\n </div>\n <div class="mapping" ng-if="::(context == \'ageGroup\')" style="border: none; background-color: #F1F1F1; padding:0; margin-top: 5px;" >\n <select chosen cascade ng-model="mappings[node.id]" ng-change="select()">\n <option value="newborn">Newborn</option>\n <option value="infant">Infant</option>\n <option value="toddler">Toddler</option>\n <option value="kids">Kids</option>\n <option value="adult">Adult</option>\n </select>\n </div>\n <div style="clear:both;"></div>\n </div>\n <ul dx-connect="node" ng-if="node.expanded==true"/>\n </li>\n </ul>\n <div class=\'catList\' style="clear:both;"></div>\n <div class="mask" ng-class="::{ grey : grey == 1}"></div>\n</div>\n<div ng-if="initialized && !innerMapping.children.length">\n <div ng-include="\'productCategories/categoryMapper/noCategoriesNotice.tpl.html\'"></div>\n</div>')}]),angular.module("productCategories/categoryMapper/noCategoriesNotice.tpl.html",[]).run(["$templateCache",function(a){a.put("productCategories/categoryMapper/noCategoriesNotice.tpl.html",'<div class="no-categories-notice" ng-if="context == \'categories\' ">\n The products in this export are uncategorized. Add WooCommerce Product Categories to your products in order to map them to Google Product Categories.\n</div>\n\n<div class="no-categories-notice" ng-if="context == \'gender\' ">\n The products in this export are uncategorized. Add WooCommerce Product Categories to your products in order to map them to a gender.\n</div>\n\n<div class="no-categories-notice" ng-if="context == \'ageGroup\' ">\n The products in this export are uncategorized. Add WooCommerce Product Categories to your products in order to map them to an age group.\n</div>\n')}]),angular.module("productCategories/googleCategorySelector/googleCategorySelector.tpl.html",[]).run(["$templateCache",function(a){a.put("productCategories/googleCategorySelector/googleCategorySelector.tpl.html",'<div class="google-category-selector" ng-init="loadCategories()" ng-if="visible" click-outside="closeMe()" outside-if-not="wpae-google-category-input">\n <ul class="categories" dx-start-with="categories">\n <li ng-repeat="category in $dxPrior.children" style="position: relative;">\n <div class="div-content">\n <div class="expand-button" ng-click="expand(category); $event.preventDefault();">\n <div ng-if="category.hasChildren > 0" class="chevron">\n <svg ng-if="!category.opened" width="10" height="10" viewBox="0 0 1792 1792" xmlns="http://www.w3.org/2000/svg">\n <path d="M1683 1331l-166 165q-19 19-45 19t-45-19l-531-531-531 531q-19 19-45 19t-45-19l-166-165q-19-19-19-45.5t19-45.5l742-741q19-19 45-19t45 19l742 741q19 19 19 45.5t-19 45.5z"/>\n </svg>\n <svg ng-if="category.opened" width="10" height="10" viewBox="0 0 1792 1792" xmlns="http://www.w3.org/2000/svg">\n <path d="M1683 808l-742 741q-19 19-45 19t-45-19l-742-741q-19-19-19-45.5t19-45.5l166-165q19-19 45-19t45 19l531 531 531-531q19-19 45-19t45 19l166 165q19 19 19 45.5t-19 45.5z"/>\n </svg>\n </div>\n </div>\n <div ng-bind-html="category.name | safe" ng-click="select(category)" class="google-category-name-container">\n </div>\n <div class="clear"></div>\n </div>\n <ul dx-connect="category" class="categories inner-categories" ng-if="category.opened" />\n </li>\n </ul>\n <div ng-if="!categories.children.length" class="google-no-results-found">\n No results found\n </div>\n</div>')}]),angular.module("productCategories/productCategories.tpl.html",[]).run(["$templateCache",function(a){a.put("productCategories/productCategories.tpl.html",'<div class="wpallexport-collapsed wpallexport-section" ng-class="{closed: !productCategories.open}">\n <div class="wpallexport-content-section">\n <div class="wpallexport-collapsed-header disable-jquery" ng-click="productCategories.open = !productCategories.open">\n <h3>Product Categories</h3>\n </div>\n <div class="wpallexport-collapsed-content" ng-slide-down="productCategories.open" duration="0.5">\n <div class="wpallexport-collapsed-content-inner">\n <h4>Product Type</h4>\n <p>Use this attribute to classify the product using your own categories. The categories here don\'t need to match Google\'s list of acceptable product categories.</p>\n <div class="input">\n <label>\n <input type="radio" ng-model="productCategories.productType" value="useWooCommerceProductCategories" />Use WooCommerce\'s product category\n </label>\n </div>\n <div class="input">\n <label>\n <input type="radio" ng-model="productCategories.productType" value="customValue" />Custom data\n </label>\n <div class="input inner" ng-slide-down="productCategories.productType == \'customValue\'" duration="0.2">\n <input type="text" class="wpae-default-input" ng-model="productCategories.productTypeCV" droppable />\n </div>\n </div>\n <h4>Product Category</h4>\n <p>\n Products added to Google Merchant Center must be categorized according to Google\'s list of product categories. Each product may only be assigned one Google product category. <a href="https://support.google.com/merchants/answer/160081" target="_blank">Read more about Google product categories.</a>\n </p>\n <div class="input">\n <label>\n <input type="radio" ng-model="productCategories.productCategories" value="mapProductCategories" />Map WooCommerce\'s product categories to Google\'s product categories\n <a href="#" class="wpallexport-help" style="margin-top:5px; margin-left: 2px;"\n tipsy="Products assigned more than one WooCommerce product category and mapped to more than one Google product category will be mapped to the most specific, deepest Google product category selected for that product.">?</a>\n </label>\n </div>\n <div ng-slide-down="productCategories.productCategories == \'mapProductCategories\'" duration="0.5">\n <category-mapper mappings="productCategories.catMappings" />\n </div>\n\n <div class="input">\n <label>\n <input type="radio" ng-model="productCategories.productCategories" value="useWooCommerceProductCategories" />Use WooCommerce\'s product categories\n <a href="#" class="wpallexport-help" style="margin-top:5px; margin-left: 2px;"\n tipsy="Products assigned to more than one WooCommerce product category will only have the most specific, deepest product category exported.">?</a>\n </label>\n <p class="no-categories-notice" ng-slide-down="productCategories.productCategories == \'useWooCommerceProductCategories\'" duration="0.2">\n If your WooCommerce product categories do not exactly match Google\'s, your feed will fail when uploaded to Google.\n </p>\n <div ng-slide-down="!$root.cats.children.length && productCategories.productCategories == \'useWooCommerceProductCategories\'" duration="0.2">\n <div ng-include="\'productCategories/categoryMapper/noCategoriesNotice.tpl.html\'" ng-init="context = \'categories\' "></div>\n </div>\n </div>\n\n <div class="input">\n <label>\n <input type="radio" ng-model="productCategories.productCategories" value="customValue" />Custom data\n </label>\n <div class="input inner" ng-slide-down="productCategories.productCategories == \'customValue\'" duration="0.2">\n <input type="text" class="wpae-default-input" ng-model="productCategories.productCategoriesCV" droppable />\n </div>\n </div>\n </div>\n\n </div>\n </div>\n</div>')}]),angular.module("shipping/shipping.tpl.html",[]).run(["$templateCache",function(a){a.put("shipping/shipping.tpl.html",'<div class="wpallexport-collapsed wpallexport-section" ng-class="{closed: !shipping.open }">\n <div class="wpallexport-content-section">\n <div class="wpallexport-collapsed-header disable-jquery"\n ng-click="shipping.open = !shipping.open ">\n <h3>Shipping</h3>\n </div>\n <div class="wpallexport-collapsed-content" id="shipping" ng-slide-down="shipping.open" duration="0.5">\n <div class="wpallexport-collapsed-content-inner">\n <h4>Shipping Price</h4>\n <p>\n This attribute allows Google to provide a shipping estimate for the product.\n This overrides the default shipping price configured in the Google Merchant Center.\n </p>\n <div class="input">\n <input type="text" class="wpae-default-input" ng-model="shipping.shippingPrice" droppable />\n <a href="" ng-click="shipping.adjustShippingPrice = !shipping.adjustShippingPrice" class="adjust-price-link">\n <span ng-if="!shipping.adjustShippingPrice" style="width: 6px; display: inline-block;">+</span>\n <span ng-if="shipping.adjustShippingPrice" style="width: 6px; display: inline-block;">-</span>\n Adjust Shipping Price</a>\n <div ng-slide-down="shipping.adjustShippingPrice" class="adjust-price" duration="0.2" style="margin-top: 5px; ">\n <input type="text" style="margin-top: 0; margin-right: 0;" class="wpae-default-input" ng-model="shipping.adjustShippingPriceValue" droppable /><select style="margin-top:5px;" ng-model="shipping.adjustPriceType">\n <option value="%">%</option>\n <option value="USD">{{currency}}</option>\n </select>\n\n <div ng-show="shipping.adjustPriceType == \'%\'" class="tooltip-container">\n <a href="#" ng-cloak="" class="wpallexport-help" style="top:0;"\n 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>\n </div>\n <div ng-show="shipping.adjustPriceType == \'USD\'" class="tooltip-container">\n <a href="#" style="top:0;" ng-cloak="" class="wpallexport-help" tipsy="Enter a negative number to reduce prices.">?</a>\n </div>\n </div>\n </div>\n\n <h4>Length, Width, Height</h4>\n <div class="input">\n <label>\n <input type="radio" ng-model="shipping.dimensions" value="useWooCommerceProductValues"/>Use WooCommerce\'s product values and convert them to\n <select ng-model="shipping.convertTo" style="width: 175px; height: 30px; padding: 0 0 0 8px; margin-left: 5px; margin-top: 5px; ">\n <option value="cm">Centimeters (cm)</option>\n <option value="inches">Inches (in)</option>\n </select>\n </label>\n </div>\n <div class="input">\n <label><input type="radio" ng-model="shipping.dimensions" value="customValue"/>Custom data</label>\n <div ng-slide-down="shipping.dimensions == \'customValue\'" duration="0.2" class="input inner">\n <input type="text" class="wpae-default-input" ng-model="shipping.dimensionsCV" droppable />\n </div>\n </div>\n\n <h4>Shipping Weight</h4>\n <div class="input">\n <label>\n <input type="radio" ng-model="shipping.weight" value=""/>Do not include in the feed\n </label>\n </div>\n <div class="input">\n <label>\n <input type="radio" ng-model="shipping.weight" value="useWooCommerceProductValues"/>Use WooCommerce\'s product values\n </label>\n </div>\n <div class="input">\n <label><input type="radio" ng-model="shipping.weight" value="customValue"/>Custom data</label>\n <div ng-slide-down="shipping.weight == \'customValue\'" duration="0.2" class="input inner">\n <input type="text" class="wpae-default-input" ng-model="shipping.weightCV" droppable />\n </div>\n </div>\n\n <h4>Shipping Label</h4>\n <div class="input">\n <input type="text" class="wpae-default-input" ng-model="shipping.shippingLabel" droppable />\n </div>\n </div>\n </div>\n </div>\n</div>')}]),angular.module("uniqueIdentifiers/uniqueIdentifiers.tpl.html",[]).run(["$templateCache",function(a){a.put("uniqueIdentifiers/uniqueIdentifiers.tpl.html",'<div class="wpallexport-collapsed wpallexport-section" ng-class="{closed: !uniqueIdentifiers.open}">\n <div class="wpallexport-content-section">\n <div class="wpallexport-collapsed-header disable-jquery" ng-click="uniqueIdentifiers.open = !uniqueIdentifiers.open">\n <h3>Unique Identifiers</h3>\n </div>\n <div class="wpallexport-collapsed-content slide-toggle" id="unique-identifiers" ng-slide-down="uniqueIdentifiers.open" duration="0.5">\n <div class="wpallexport-collapsed-content-inner">\n <p>\n Unique product identifiers are product codes associated with your products.\n Products submitted without unique identifiers are difficult to classify and may not be able to take advantage of all Google shopping features.\n <a href="https://support.google.com/merchants/answer/7052112?hl=en&ref_topic=3404778#intro-product-identifiers" target="_blank">Read more about unique product identifiers</a>.\n </p>\n <h4>GTIN</h4>\n <p>\n Global Trade Item Numbers include UPC, EAN (in Europe), JAN (in Japan), and ISBN. <a href="https://support.google.com/merchants/answer/6219078" target="_blank">Read how to find your products\' GTIN</a>.\n </p>\n <div class="input">\n <input type="text" class="wpae-default-input" ng-model="uniqueIdentifiers.gtin" droppable />\n </div>\n\n <h4>MPN</h4>\n <div class="input">\n <input type="text" class="wpae-default-input" ng-model="uniqueIdentifiers.mpn" droppable />\n </div>\n\n <h4>Brand</h4>\n <div class="input">\n <input type="text" class="wpae-default-input" ng-model="uniqueIdentifiers.brand" droppable />\n </div>\n\n <h4>Identifier Exists</h4>\n <div class="input">\n <label><input type="radio" ng-model="uniqueIdentifiers.identifierExists" value="1" />Set to false if product has no GTIN or MPN\n <a style="margin-top: 0; margin-bottom: 0; margin-left: 0; padding-bottom: 0;" class="wpallexport-help" tipsy="If your product has neither an MPN or GTIN, Google requires the attribute \'identifier_exists\' to be set to false. WP All Export will do this automatically if this option is enabled.">?</a>\n </label>\n </div>\n <div class="input">\n <label><input type="radio" ng-model="uniqueIdentifiers.identifierExists" value="customValue" />Custom data</label>\n <div class="input inner" ng-slide-down="uniqueIdentifiers.identifierExists == \'customValue\'" duration="0.2">\n <input type="text" class="wpae-default-input" ng-model="uniqueIdentifiers.identifierExistsCV" droppable />\n </div>\n </div>\n\n </div>\n </div>\n </div>\n</div>')}]);
4
h=b.getSeconds(),i=b.getMilliseconds()),new Date(d,0,j.getDate()+k,f,g,h,i)}}return NaN}function Bd(a,b){return function(c,d){var e,g;if(z(c))return c;if(x(c)){if('"'===c.charAt(0)&&'"'===c.charAt(c.length-1)&&(c=c.substring(1,c.length-1)),hg.test(c))return new Date(c);if(a.lastIndex=0,e=a.exec(c))return e.shift(),g=d?{yyyy:d.getFullYear(),MM:d.getMonth()+1,dd:d.getDate(),HH:d.getHours(),mm:d.getMinutes(),ss:d.getSeconds(),sss:d.getMilliseconds()/1e3}:{yyyy:1970,MM:1,dd:1,HH:0,mm:0,ss:0,sss:0},f(e,function(a,c){c<b.length&&(g[b[c]]=+a)}),new Date(g.yyyy,g.MM-1,g.dd,g.HH,g.mm,g.ss||0,1e3*g.sss||0)}return NaN}}function Cd(a,b,c,d){return function(e,f,g,h,i,j,k){function l(a){return a&&!(a.getTime&&a.getTime()!==a.getTime())}function m(a){return u(a)&&!z(a)?c(a)||void 0:a}Dd(e,f,g,h),zd(e,f,g,h,i,j);var n,o=h&&h.$options.getOption("timezone");if(h.$parserName=a,h.$parsers.push(function(a){if(h.$isEmpty(a))return null;if(b.test(a)){var d=c(a,n);return o&&(d=aa(d,o)),d}}),h.$formatters.push(function(a){if(a&&!z(a))throw Qg("datefmt","Expected `{0}` to be a date",a);return l(a)?(n=a,n&&o&&(n=aa(n,o,!0)),k("date")(a,d,o)):(n=null,"")}),u(g.min)||g.ngMin){var p;h.$validators.min=function(a){return!l(a)||t(p)||c(a)>=p},g.$observe("min",function(a){p=m(a),h.$validate()})}if(u(g.max)||g.ngMax){var q;h.$validators.max=function(a){return!l(a)||t(q)||c(a)<=q},g.$observe("max",function(a){q=m(a),h.$validate()})}}}function Dd(a,b,c,d){var e=b[0];(d.$hasNativeValidators=v(e.validity))&&d.$parsers.push(function(a){var c=b.prop(Yd)||{};return c.badInput||c.typeMismatch?void 0:a})}function Ed(a){a.$parserName="number",a.$parsers.push(function(b){return a.$isEmpty(b)?null:kg.test(b)?parseFloat(b):void 0}),a.$formatters.push(function(b){if(!a.$isEmpty(b)){if(!y(b))throw Qg("numfmt","Expected `{0}` to be a number",b);b=b.toString()}return b})}function Fd(a){return u(a)&&!y(a)&&(a=parseFloat(a)),oe(a)?void 0:a}function Gd(a){return(0|a)===a}function Hd(a){var b=a.toString(),c=b.indexOf(".");if(-1===c){if(-1<a&&a<1){var d=/e-(\d+)#x2F;.exec(b);if(d)return Number(d[1])}return 0}return b.length-c-1}function Id(a,b,c){var d=Number(a),e=!Gd(d),f=!Gd(b),g=!Gd(c);if(e||f||g){var h=e?Hd(d):0,i=f?Hd(b):0,j=g?Hd(c):0,k=Math.max(h,i,j),l=Math.pow(10,k);d*=l,b*=l,c*=l,e&&(d=Math.round(d)),f&&(b=Math.round(b)),g&&(c=Math.round(c))}return(d-b)%c==0}function Jd(a,b,c,d,e,f){Dd(a,b,c,d),Ed(d),zd(a,b,c,d,e,f);var g,h;if((u(c.min)||c.ngMin)&&(d.$validators.min=function(a){return d.$isEmpty(a)||t(g)||a>=g},c.$observe("min",function(a){g=Fd(a),d.$validate()})),(u(c.max)||c.ngMax)&&(d.$validators.max=function(a){return d.$isEmpty(a)||t(h)||a<=h},c.$observe("max",function(a){h=Fd(a),d.$validate()})),u(c.step)||c.ngStep){var i;d.$validators.step=function(a,b){return d.$isEmpty(b)||t(i)||Id(b,g||0,i)},c.$observe("step",function(a){i=Fd(a),d.$validate()})}}function Kd(a,b,c,d,e,f){function g(a,d){b.attr(a,c[a]),c.$observe(a,d)}function h(a){if(l=Fd(a),!oe(d.$modelValue))if(k){var c=b.val();l>c&&(c=l,b.val(c)),d.$setViewValue(c)}else d.$validate()}function i(a){if(m=Fd(a),!oe(d.$modelValue))if(k){var c=b.val();m<c&&(b.val(m),c=m<l?l:m),d.$setViewValue(c)}else d.$validate()}function j(a){n=Fd(a),oe(d.$modelValue)||(k&&d.$viewValue!==b.val()?d.$setViewValue(b.val()):d.$validate())}Dd(a,b,c,d),Ed(d),zd(a,b,c,d,e,f);var k=d.$hasNativeValidators&&"range"===b[0].type,l=k?0:void 0,m=k?100:void 0,n=k?1:void 0,o=b[0].validity,p=u(c.min),q=u(c.max),r=u(c.step),s=d.$render;d.$render=k&&u(o.rangeUnderflow)&&u(o.rangeOverflow)?function(){s(),d.$setViewValue(b.val())}:s,p&&(d.$validators.min=k?function(){return!0}:function(a,b){return d.$isEmpty(b)||t(l)||b>=l},g("min",h)),q&&(d.$validators.max=k?function(){return!0}:function(a,b){return d.$isEmpty(b)||t(m)||b<=m},g("max",i)),r&&(d.$validators.step=k?function(){return!o.stepMismatch}:function(a,b){return d.$isEmpty(b)||t(n)||Id(b,l||0,n)},g("step",j))}function Ld(a,b,c,d,e,f){zd(a,b,c,d,e,f),xd(d),d.$parserName="url",d.$validators.url=function(a,b){var c=a||b;return d.$isEmpty(c)||ig.test(c)}}function Md(a,b,c,d,e,f){zd(a,b,c,d,e,f),xd(d),d.$parserName="email",d.$validators.email=function(a,b){var c=a||b;return d.$isEmpty(c)||jg.test(c)}}function Nd(a,b,c,d){var e=!c.ngTrim||"false"!==re(c.ngTrim);t(c.name)&&b.attr("name",i());var f=function(a){var f;b[0].checked&&(f=c.value,e&&(f=re(f)),d.$setViewValue(f,a&&a.type))};b.on("click",f),d.$render=function(){var a=c.value;e&&(a=re(a)),b[0].checked=a===d.$viewValue},c.$observe("value",d.$render)}function Od(a,b,c,d,e){var f;if(u(d)){if(f=a(d),!f.constant)throw Qg("constexpr","Expected constant expression for `{0}`, but saw `{1}`.",c,d);return f(b)}return e}function Pd(a,b,c,d,e,f,g,h){var i=Od(h,a,"ngTrueValue",c.ngTrueValue,!0),j=Od(h,a,"ngFalseValue",c.ngFalseValue,!1),k=function(a){d.$setViewValue(b[0].checked,a&&a.type)};b.on("click",k),d.$render=function(){b[0].checked=d.$viewValue},d.$isEmpty=function(a){return!1===a},d.$formatters.push(function(a){return T(a,i)}),d.$parsers.push(function(a){return a?i:j})}function Qd(a,b){function c(a,b){if(!a||!a.length)return[];if(!b||!b.length)return a;var c=[];a:for(var d=0;d<a.length;d++){for(var e=a[d],f=0;f<b.length;f++)if(e===b[f])continue a;c.push(e)}return c}function d(a){return a&&a.split(" ")}function e(a){var b=a;return pe(a)?b=a.map(e).join(" "):v(a)&&(b=Object.keys(a).filter(function(b){return a[b]}).join(" ")),b}function g(a){var b=a;if(pe(a))b=a.map(g);else if(v(a)){var c=!1;b=Object.keys(a).filter(function(b){var d=a[b];return!c&&t(d)&&(c=!0),d}),c&&b.push(void 0)}return b}a="ngClass"+a;var h;return["$parse",function(i){return{restrict:"AC",link:function(j,k,l){function m(a){a=p(d(a),1),l.$addClass(a)}function n(a){a=p(d(a),-1),l.$removeClass(a)}function o(a,b){var e=d(a),f=d(b),g=c(e,f),h=c(f,e),i=p(g,-1),j=p(h,1);l.$addClass(j),l.$removeClass(i)}function p(a,b){var c=[];return f(a,function(a){(b>0||z[a])&&(z[a]=(z[a]||0)+b,z[a]===+(b>0)&&c.push(a))}),c.join(" ")}function q(a){a===b?m(t):n(t),A=a}function r(a){var b=e(a);b!==t&&s(b)}function s(a){A===b&&o(t,a),t=a}var t,u=l[a].trim(),v=":"===u.charAt(0)&&":"===u.charAt(1),w=v?g:e,x=i(u,w),y=v?r:s,z=k.data("$classCounts"),A=!0;z||(z=sa(),k.data("$classCounts",z)),"ngClass"!==a&&(h||(h=i("$index",function(a){return 1&a})),j.$watch(h,q)),j.$watch(x,y,v)}}}]}function Rd(a,b,c,d,e,f,g,h,i){this.$viewValue=Number.NaN,this.$modelValue=Number.NaN,this.$rawModelValue=void 0,this.$validators={},this.$asyncValidators={},this.$parsers=[],this.$formatters=[],this.$viewChangeListeners=[],this.$untouched=!0,this.$touched=!1,this.$pristine=!0,this.$dirty=!1,this.$valid=!0,this.$invalid=!1,this.$error={},this.$success={},this.$pending=void 0,this.$name=i(c.name||"",!1)(a),this.$parentForm=cg,this.$options=Rg,this.$parsedNgModel=e(c.ngModel),this.$parsedNgModelAssign=this.$parsedNgModel.assign,this.$ngModelGet=this.$parsedNgModel,this.$ngModelSet=this.$parsedNgModelAssign,this.$pendingDebounce=null,this.$parserValid=void 0,this.$currentValidationRunId=0,Object.defineProperty(this,"$scope",{value:a}),this.$attr=c,this.$element=d,this.$animate=f,this.$timeout=g,this.$parse=e,this.$q=h,this.$exceptionHandler=b,ud(this),Sd(this)}function Sd(a){a.$scope.$watch(function(b){var c=a.$ngModelGet(b);if(c!==a.$modelValue&&(a.$modelValue===a.$modelValue||c===c)){a.$modelValue=a.$rawModelValue=c,a.$parserValid=void 0;for(var d=a.$formatters,e=d.length,f=c;e--;)f=d[e](f);a.$viewValue!==f&&(a.$updateEmptyClasses(f),a.$viewValue=a.$lastCommittedViewValue=f,a.$render(),a.$runValidators(a.$modelValue,a.$viewValue,p))}return c})}function Td(a){this.$options=a}function Ud(a,b){f(b,function(b,c){u(a[c])||(a[c]=b)})}function Vd(a,b){a.prop("selected",b),a.attr("selected",b)}var Wd={objectMaxDepth:5},Xd=/^\/(.+)\/([a-z]*)#x2F;,Yd="validity",Zd=Object.prototype.hasOwnProperty,$d=function(a){return x(a)?a.toLowerCase():a},_d=function(a){return x(a)?a.toUpperCase():a},ae=function(a){return x(a)?a.replace(/[A-Z]/g,function(a){return String.fromCharCode(32|a.charCodeAt(0))}):a},be=function(a){return x(a)?a.replace(/[a-z]/g,function(a){return String.fromCharCode(-33&a.charCodeAt(0))}):a};"i"!=="I".toLowerCase()&&($d=ae,_d=be);var ce,de,ee,fe,ge=[].slice,he=[].splice,ie=[].push,je=Object.prototype.toString,ke=Object.getPrototypeOf,le=d("ng"),me=a.angular||(a.angular={}),ne=0;ce=a.document.documentMode;var oe=Number.isNaN||function(a){return a!==a};p.$inject=[],q.$inject=[];var pe=Array.isArray,qe=/^\[object (?:Uint8|Uint8Clamped|Uint16|Uint32|Int8|Int16|Int32|Float32|Float64)Array]#x2F;,re=function(a){return x(a)?a.trim():a},se=function(a){return a.replace(/([-()[\]{}+?*.$^|,:#<!\\])/g,"\\$1").replace(/\x08/g,"\\x08")},te=function(){if(!u(te.rules)){var b=a.document.querySelector("[ng-csp]")||a.document.querySelector("[data-ng-csp]");if(b){var c=b.getAttribute("ng-csp")||b.getAttribute("data-ng-csp");te.rules={noUnsafeEval:!c||-1!==c.indexOf("no-unsafe-eval"),noInlineStyle:!c||-1!==c.indexOf("no-inline-style")}}else te.rules={noUnsafeEval:function(){try{return new Function(""),!1}catch(a){return!0}}(),noInlineStyle:!1}}return te.rules},ue=function(){if(u(ue.name_))return ue.name_;var b,c,d,e,f=we.length;for(c=0;c<f;++c)if(d=we[c],b=a.document.querySelector("["+d.replace(":","\\:")+"jq]")){e=b.getAttribute(d+"jq");break}return ue.name_=e},ve=/:/g,we=["ng-","data-ng-","ng:","x-ng-"],xe=function(b){var c=b.currentScript;if(!c)return!0;if(!(c instanceof a.HTMLScriptElement||c instanceof a.SVGScriptElement))return!1;var d=c.attributes;return[d.getNamedItem("src"),d.getNamedItem("href"),d.getNamedItem("xlink:href")].every(function(a){if(!a)return!0;if(!a.value)return!1;var c=b.createElement("a");if(c.href=a.value,b.location.origin===c.origin)return!0;switch(c.protocol){case"http:":case"https:":case"ftp:":case"blob:":case"file:":case"data:":return!0;default:return!1}})}(a.document),ye=/[A-Z]/g,ze=!1,Ae=1,Be=3,Ce=8,De=9,Ee=11,Fe={full:"1.6.6",major:1,minor:6,dot:6,codeName:"interdimensional-cable"};Ia.expando="ng339";var Ge=Ia.cache={},He=1;Ia._data=function(a){return this.cache[a[this.expando]]||{}};var Ie=/-([a-z])/g,Je=/^-ms-/,Ke={mouseleave:"mouseout",mouseenter:"mouseover"},Le=d("jqLite"),Me=/^<([\w-]+)\s*\/?>(?:<\/\1>|)#x2F;,Ne=/<|&#?\w+;/,Oe=/<([\w:-]+)/,Pe=/<(?!area|br|col|embed|hr|img|input|link|meta|param)(([\w:-]+)[^>]*)\/>/gi,Qe={option:[1,'<select multiple="multiple">',"</select>"],thead:[1,"<table>","</table>"],col:[2,"<table><colgroup>","</colgroup></table>"],tr:[2,"<table><tbody>","</tbody></table>"],td:[3,"<table><tbody><tr>","</tr></tbody></table>"],_default:[0,"",""]};Qe.optgroup=Qe.option,Qe.tbody=Qe.tfoot=Qe.colgroup=Qe.caption=Qe.thead,Qe.th=Qe.td;var Re=a.Node.prototype.contains||function(a){return!!(16&this.compareDocumentPosition(a))},Se=Ia.prototype={ready:Ya,toString:function(){var a=[];return f(this,function(b){a.push(""+b)}),"["+a.join(", ")+"]"},eq:function(a){return de(a>=0?this[a]:this[this.length+a])},length:0,push:ie,sort:[].sort,splice:[].splice},Te={};f("multiple,selected,checked,disabled,readOnly,required,open".split(","),function(a){Te[$d(a)]=a});var Ue={};f("input,select,option,textarea,button,form,details".split(","),function(a){Ue[a]=!0});var Ve={ngMinlength:"minlength",ngMaxlength:"maxlength",ngMin:"min",ngMax:"max",ngPattern:"pattern",ngStep:"step"};f({data:Oa,removeData:Ma,hasData:Ea,cleanData:function(a){for(var b=0,c=a.length;b<c;b++)Ma(a[b])}},function(a,b){Ia[b]=a}),f({data:Oa,inheritedData:Ua,scope:function(a){return de.data(a,"$scope")||Ua(a.parentNode||a,["$isolateScope","$scope"])},isolateScope:function(a){return de.data(a,"$isolateScope")||de.data(a,"$isolateScopeNoTemplate")},controller:Ta,injector:function(a){return Ua(a,"$injector")},removeAttr:function(a,b){a.removeAttribute(b)},hasClass:Pa,css:function(a,b,c){if(b=za(b),!u(c))return a.style[b];a.style[b]=c},attr:function(a,b,c){var d,e=a.nodeType;if(e!==Be&&2!==e&&e!==Ce&&a.getAttribute){var f=$d(b),g=Te[f];if(!u(c))return d=a.getAttribute(b),g&&null!==d&&(d=f),null===d?void 0:d;null===c||!1===c&&g?a.removeAttribute(b):a.setAttribute(b,g?f:c)}},prop:function(a,b,c){if(!u(c))return a[b];a[b]=c},text:function(){function a(a,b){if(t(b)){var c=a.nodeType;return c===Ae||c===Be?a.textContent:""}a.textContent=b}return a.$dv="",a}(),val:function(a,b){if(t(b)){if(a.multiple&&"select"===O(a)){var c=[];return f(a.options,function(a){a.selected&&c.push(a.value||a.text)}),c}return a.value}a.value=b},html:function(a,b){if(t(b))return a.innerHTML;Ka(a,!0),a.innerHTML=b},empty:Va},function(a,b){Ia.prototype[b]=function(b,c){var d,e,f=this.length;if(a!==Va&&t(2===a.length&&a!==Pa&&a!==Ta?b:c)){if(v(b)){for(d=0;d<f;d++)if(a===Oa)a(this[d],b);else for(e in b)a(this[d],e,b[e]);return this}for(var g=a.$dv,h=t(g)?Math.min(f,1):f,i=0;i<h;i++){var j=a(this[i],b,c);g=g?g+j:j}return g}for(d=0;d<f;d++)a(this[d],b,c);return this}}),f({removeData:Ma,on:function(a,b,c,d){if(u(d))throw Le("onargs","jqLite#on() does not support the `selector` or `eventData` parameters");if(Da(a)){var e=Na(a,!0),f=e.events,g=e.handle;g||(g=e.handle=_a(a,f));for(var h=b.indexOf(" ")>=0?b.split(" "):[b],i=h.length,j=function(b,d,e){var h=f[b];h||(h=f[b]=[],h.specialHandlerWrapper=d,"$destroy"===b||e||a.addEventListener(b,g)),h.push(c)};i--;)b=h[i],Ke[b]?(j(Ke[b],bb),j(b,void 0,!0)):j(b)}},off:La,one:function(a,b,c){a=de(a),a.on(b,function d(){a.off(b,c),a.off(b,d)}),a.on(b,c)},replaceWith:function(a,b){var c,d=a.parentNode;Ka(a),f(new Ia(b),function(b){c?d.insertBefore(b,c.nextSibling):d.replaceChild(b,a),c=b})},children:function(a){var b=[];return f(a.childNodes,function(a){a.nodeType===Ae&&b.push(a)}),b},contents:function(a){return a.contentDocument||a.childNodes||[]},append:function(a,b){var c=a.nodeType;if(c===Ae||c===Ee){b=new Ia(b);for(var d=0,e=b.length;d<e;d++){var f=b[d];a.appendChild(f)}}},prepend:function(a,b){if(a.nodeType===Ae){var c=a.firstChild;f(new Ia(b),function(b){a.insertBefore(b,c)})}},wrap:function(a,b){Ha(a,de(b).eq(0).clone()[0])},remove:Wa,detach:function(a){Wa(a,!0)},after:function(a,b){var c=a,d=a.parentNode;if(d){b=new Ia(b);for(var e=0,f=b.length;e<f;e++){var g=b[e];d.insertBefore(g,c.nextSibling),c=g}}},addClass:Ra,removeClass:Qa,toggleClass:function(a,b,c){b&&f(b.split(" "),function(b){var d=c;t(d)&&(d=!Pa(a,b)),(d?Ra:Qa)(a,b)})},parent:function(a){var b=a.parentNode;return b&&b.nodeType!==Ee?b:null},next:function(a){return a.nextElementSibling},find:function(a,b){return a.getElementsByTagName?a.getElementsByTagName(b):[]},clone:Ja,triggerHandler:function(a,b,c){var d,e,g,h=b.type||b,i=Na(a),j=i&&i.events,k=j&&j[h];k&&(d={preventDefault:function(){this.defaultPrevented=!0},isDefaultPrevented:function(){return!0===this.defaultPrevented},stopImmediatePropagation:function(){this.immediatePropagationStopped=!0},isImmediatePropagationStopped:function(){return!0===this.immediatePropagationStopped},stopPropagation:p,type:h,target:a},b.type&&(d=l(d,b)),e=va(k),g=c?[d].concat(c):[d],f(e,function(b){d.isImmediatePropagationStopped()||b.apply(a,g)}))}},function(a,b){Ia.prototype[b]=function(b,c,d){for(var e,f=0,g=this.length;f<g;f++)t(e)?(e=a(this[f],b,c,d),u(e)&&(e=de(e))):Sa(e,a(this[f],b,c,d));return u(e)?e:this}}),Ia.prototype.bind=Ia.prototype.on,Ia.prototype.unbind=Ia.prototype.off;var We=Object.create(null);eb.prototype={_idx:function(a){return a===this._lastKey?this._lastIndex:(this._lastKey=a,this._lastIndex=this._keys.indexOf(a),this._lastIndex)},_transformKey:function(a){return oe(a)?We:a},get:function(a){a=this._transformKey(a);var b=this._idx(a);if(-1!==b)return this._values[b]},set:function(a,b){a=this._transformKey(a);var c=this._idx(a);-1===c&&(c=this._lastIndex=this._keys.length),this._keys[c]=a,this._values[c]=b},delete:function(a){a=this._transformKey(a);var b=this._idx(a);return-1!==b&&(this._keys.splice(b,1),this._values.splice(b,1),this._lastKey=NaN,this._lastIndex=-1,!0)}};var Xe=eb,Ye=[function(){this.$get=[function(){return Xe}]}],Ze=/^([^(]+?)=>/,$e=/^[^(]*\(\s*([^)]*)\)/m,_e=/,/,af=/^\s*(_?)(\S+?)\1\s*#x2F;,bf=/((\/\/.*$)|(\/\*[\s\S]*?\*\/))/gm,cf=d("$injector");jb.$annotate=ib;var df=d("$animate"),ef=1,ff=function(){this.$get=p},gf=function(){var a=new Xe,b=[];this.$get=["$AnimateRunner","$rootScope",function(c,d){function e(a,b,c){var d=!1;return b&&(b=x(b)?b.split(" "):pe(b)?b:[],f(b,function(b){b&&(d=!0,a[b]=c)})),d}function g(){f(b,function(b){var c=a.get(b);if(c){var d=nb(b.attr("class")),e="",g="";f(c,function(a,b){a!==!!d[b]&&(a?e+=(e.length?" ":"")+b:g+=(g.length?" ":"")+b)}),f(b,function(a){e&&Ra(a,e),g&&Qa(a,g)}),a.delete(b)}}),b.length=0}function h(c,f,h){var i=a.get(c)||{},j=e(i,f,!0),k=e(i,h,!1);(j||k)&&(a.set(c,i),b.push(c),1===b.length&&d.$postDigest(g))}return{enabled:p,on:p,off:p,pin:p,push:function(a,b,d,e){e&&e(),d=d||{},d.from&&a.css(d.from),d.to&&a.css(d.to),(d.addClass||d.removeClass)&&h(a,d.addClass,d.removeClass);var f=new c;return f.complete(),f}}}]},hf=["$provide",function(a){var b=this,c=null,d=null;this.$registeredAnimations=Object.create(null),this.register=function(c,d){if(c&&"."!==c.charAt(0))throw df("notcsel","Expecting class selector starting with '.' got '{0}'.",c);var e=c+"-animation";b.$registeredAnimations[c.substr(1)]=e,a.factory(e,d)},this.customFilter=function(a){return 1===arguments.length&&(d=B(a)?a:null),d},this.classNameFilter=function(a){if(1===arguments.length&&(c=a instanceof RegExp?a:null)){if(new RegExp("[(\\s|\\/)]ng-animate[(\\s|\\/)]").test(c.toString()))throw c=null,df("nongcls",'$animateProvider.classNameFilter(regex) prohibits accepting a regex value which matches/contains the "{0}" CSS class.',"ng-animate")}return c},this.$get=["$animateQueue",function(a){function b(a,b,c){if(c){var d=mb(c);!d||d.parentNode||d.previousElementSibling||(c=null)}c?c.after(a):b.prepend(a)}return{on:a.on,off:a.off,pin:a.pin,enabled:a.enabled,cancel:function(a){a.end&&a.end()},enter:function(c,d,e,f){return d=d&&de(d),e=e&&de(e),d=d||e.parent(),b(c,d,e),a.push(c,"enter",ob(f))},move:function(c,d,e,f){return d=d&&de(d),e=e&&de(e),d=d||e.parent(),b(c,d,e),a.push(c,"move",ob(f))},leave:function(b,c){return a.push(b,"leave",ob(c),function(){b.remove()})},addClass:function(b,c,d){return d=ob(d),d.addClass=lb(d.addclass,c),a.push(b,"addClass",d)},removeClass:function(b,c,d){return d=ob(d),d.removeClass=lb(d.removeClass,c),a.push(b,"removeClass",d)},setClass:function(b,c,d,e){return e=ob(e),e.addClass=lb(e.addClass,c),e.removeClass=lb(e.removeClass,d),a.push(b,"setClass",e)},animate:function(b,c,d,e,f){return f=ob(f),f.from=f.from?l(f.from,c):c,f.to=f.to?l(f.to,d):d,e=e||"ng-inline-animate",f.tempClasses=lb(f.tempClasses,e),a.push(b,"animate",f)}}}]}],jf=function(){this.$get=["$rAF",function(a){function b(b){c.push(b),c.length>1||a(function(){for(var a=0;a<c.length;a++)c[a]();c=[]})}var c=[];return function(){var a=!1;return b(function(){a=!0}),function(c){a?c():b(c)}}}]},kf=function(){this.$get=["$q","$sniffer","$animateAsyncRun","$isDocumentHidden","$timeout",function(a,b,c,d,e){function g(a){this.setHost(a);var b=c(),f=function(a){e(a,0,!1)};this._doneCallbacks=[],this._tick=function(a){d()?f(a):b(a)},this._state=0}return g.chain=function(a,b){function c(){if(d===a.length)return void b(!0);a[d](function(a){if(!1===a)return void b(!1);d++,c()})}var d=0;c()},g.all=function(a,b){function c(c){e=e&&c,++d===a.length&&b(e)}var d=0,e=!0;f(a,function(a){a.done(c)})},g.prototype={setHost:function(a){this.host=a||{}},done:function(a){2===this._state?a():this._doneCallbacks.push(a)},progress:p,getPromise:function(){if(!this.promise){var b=this;this.promise=a(function(a,c){b.done(function(b){!1===b?c():a()})})}return this.promise},then:function(a,b){return this.getPromise().then(a,b)},catch:function(a){return this.getPromise().catch(a)},finally:function(a){return this.getPromise().finally(a)},pause:function(){this.host.pause&&this.host.pause()},resume:function(){this.host.resume&&this.host.resume()},end:function(){this.host.end&&this.host.end(),this._resolve(!0)},cancel:function(){this.host.cancel&&this.host.cancel(),this._resolve(!1)},complete:function(a){var b=this;0===b._state&&(b._state=1,b._tick(function(){b._resolve(a)}))},_resolve:function(a){2!==this._state&&(f(this._doneCallbacks,function(b){b(a)}),this._doneCallbacks.length=0,this._state=2)}},g}]},lf=function(){this.$get=["$rAF","$q","$AnimateRunner",function(a,b,c){return function(b,d){function e(){return a(function(){f(),h||i.complete(),h=!0}),i}function f(){g.addClass&&(b.addClass(g.addClass),g.addClass=null),g.removeClass&&(b.removeClass(g.removeClass),g.removeClass=null),g.to&&(b.css(g.to),g.to=null)}var g=d||{};g.$prepared||(g=R(g)),g.cleanupStyles&&(g.from=g.to=null),g.from&&(b.css(g.from),g.from=null);var h,i=new c;return{start:e,end:e}}}]},mf=d("$compile"),nf=new tb;ub.$inject=["$provide","$sanitizeUriProvider"],vb.prototype.isFirstChange=function(){return this.previousValue===nf};var of=/^((?:x|data)[:\-_])/i,pf=/[:\-_]+(.)/g,qf=d("$controller"),rf=/^(\S+)(\s+as\s+([\w$]+))?#x2F;,sf=function(){this.$get=["$document",function(a){return function(b){return b?!b.nodeType&&b instanceof de&&(b=b[0]):b=a[0].body,b.offsetWidth+1}}]},tf="application/json",uf={"Content-Type":tf+";charset=utf-8"},vf=/^\[|^\{(?!\{)/,wf={"[":/]#x2F;,"{":/}#x2F;},xf=/^\)]\}',?\n/,yf=d("$http"),zf=me.$interpolateMinErr=d("$interpolate");zf.throwNoconcat=function(a){throw zf("noconcat","Error while interpolating: {0}\nStrict Contextual Escaping disallows interpolations that concatenate multiple expressions when a trusted value is required. See http://docs.angularjs.org/api/ng.$sce",a)},zf.interr=function(a,b){return zf("interr","Can't interpolate: {0}\n{1}",a,b.toString())};var Af=function(){this.$get=function(){function a(a){var b=function(a){b.data=a,b.called=!0};return b.id=a,b}var b=me.callbacks,c={};return{createCallback:function(d){var e="_"+(b.$counter++).toString(36),f="angular.callbacks."+e,g=a(e);return c[f]=b[e]=g,f},wasCalled:function(a){return c[a].called},getResponse:function(a){return c[a].data},removeCallback:function(a){var d=c[a];delete b[d.id],delete c[a]}}}},Bf=/^([^?#]*)(\?([^#]*))?(#(.*))?#x2F;,Cf={http:80,https:443,ftp:21},Df=d("$location"),Ef=/^\s*[\\/]{2,}/,Ff={$absUrl:"",$html5:!1,$replace:!1,absUrl:dc("$absUrl"),url:function(a){if(t(a))return this.$url;var b=Bf.exec(a);return(b[1]||""===a)&&this.path(decodeURIComponent(b[1])),(b[2]||b[1]||""===a)&&this.search(b[3]||""),this.hash(b[5]||""),this},protocol:dc("$protocol"),host:dc("$host"),port:dc("$port"),path:ec("$path",function(a){return a=null!==a?a.toString():"","/"===a.charAt(0)?a:"/"+a}),search:function(a,b){switch(arguments.length){case 0:return this.$search;case 1:if(x(a)||y(a))a=a.toString(),this.$search=da(a);else{if(!v(a))throw Df("isrcharg","The first argument of the `$location#search()` call must be a string or an object.");a=R(a,{}),f(a,function(b,c){null==b&&delete a[c]}),this.$search=a}break;default:t(b)||null===b?delete this.$search[a]:this.$search[a]=b}return this.$compose(),this},hash:ec("$hash",function(a){return null!==a?a.toString():""}),replace:function(){return this.$replace=!0,this}};f([cc,bc,ac],function(a){a.prototype=Object.create(Ff),a.prototype.state=function(b){if(!arguments.length)return this.$state;if(a!==ac||!this.$html5)throw Df("nostate","History API state support is available only in HTML5 mode and only in browsers supporting HTML5 History API");return this.$state=t(b)?null:b,this.$urlUpdatedByLocation=!0,this}});var Gf=d("$parse"),Hf={}.constructor.prototype.valueOf,If=sa();f("+ - * / % === !== == != < > <= >= && || ! = |".split(" "),function(a){If[a]=!0});var Jf={n:"\n",f:"\f",r:"\r",t:"\t",v:"\v","'":"'",'"':'"'},Kf=function(a){this.options=a};Kf.prototype={constructor:Kf,lex:function(a){for(this.text=a,this.index=0,this.tokens=[];this.index<this.text.length;){var b=this.text.charAt(this.index);if('"'===b||"'"===b)this.readString(b);else if(this.isNumber(b)||"."===b&&this.isNumber(this.peek()))this.readNumber();else if(this.isIdentifierStart(this.peekMultichar()))this.readIdent();else if(this.is(b,"(){}[].,;:?"))this.tokens.push({index:this.index,text:b}),this.index++;else if(this.isWhitespace(b))this.index++;else{var c=b+this.peek(),d=c+this.peek(2),e=If[b],f=If[c],g=If[d];if(e||f||g){var h=g?d:f?c:b;this.tokens.push({index:this.index,text:h,operator:!0}),this.index+=h.length}else this.throwError("Unexpected next character ",this.index,this.index+1)}}return this.tokens},is:function(a,b){return-1!==b.indexOf(a)},peek:function(a){var b=a||1;return this.index+b<this.text.length&&this.text.charAt(this.index+b)},isNumber:function(a){return"0"<=a&&a<="9"&&"string"==typeof a},isWhitespace:function(a){return" "===a||"\r"===a||"\t"===a||"\n"===a||"\v"===a||" "===a},isIdentifierStart:function(a){return this.options.isIdentifierStart?this.options.isIdentifierStart(a,this.codePointAt(a)):this.isValidIdentifierStart(a)},isValidIdentifierStart:function(a){return"a"<=a&&a<="z"||"A"<=a&&a<="Z"||"_"===a||"quot;===a},isIdentifierContinue:function(a){return this.options.isIdentifierContinue?this.options.isIdentifierContinue(a,this.codePointAt(a)):this.isValidIdentifierContinue(a)},isValidIdentifierContinue:function(a,b){return this.isValidIdentifierStart(a,b)||this.isNumber(a)},codePointAt:function(a){return 1===a.length?a.charCodeAt(0):(a.charCodeAt(0)<<10)+a.charCodeAt(1)-56613888},peekMultichar:function(){var a=this.text.charAt(this.index),b=this.peek();if(!b)return a;var c=a.charCodeAt(0),d=b.charCodeAt(0);return c>=55296&&c<=56319&&d>=56320&&d<=57343?a+b:a},isExpOperator:function(a){return"-"===a||"+"===a||this.isNumber(a)},throwError:function(a,b,c){c=c||this.index;var d=u(b)?"s "+b+"-"+this.index+" ["+this.text.substring(b,c)+"]":" "+c;throw Gf("lexerr","Lexer Error: {0} at column{1} in expression [{2}].",a,d,this.text)},readNumber:function(){for(var a="",b=this.index;this.index<this.text.length;){var c=$d(this.text.charAt(this.index));if("."===c||this.isNumber(c))a+=c;else{var d=this.peek();if("e"===c&&this.isExpOperator(d))a+=c;else if(this.isExpOperator(c)&&d&&this.isNumber(d)&&"e"===a.charAt(a.length-1))a+=c;else{if(!this.isExpOperator(c)||d&&this.isNumber(d)||"e"!==a.charAt(a.length-1))break;this.throwError("Invalid exponent")}}this.index++}this.tokens.push({index:b,text:a,constant:!0,value:Number(a)})},readIdent:function(){var a=this.index;for(this.index+=this.peekMultichar().length;this.index<this.text.length;){var b=this.peekMultichar();if(!this.isIdentifierContinue(b))break;this.index+=b.length}this.tokens.push({index:a,text:this.text.slice(a,this.index),identifier:!0})},readString:function(a){var b=this.index;this.index++;for(var c="",d=a,e=!1;this.index<this.text.length;){var f=this.text.charAt(this.index);if(d+=f,e){if("u"===f){var g=this.text.substring(this.index+1,this.index+5);g.match(/[\da-f]{4}/i)||this.throwError("Invalid unicode escape [\\u"+g+"]"),this.index+=4,c+=String.fromCharCode(parseInt(g,16))}else{c+=Jf[f]||f}e=!1}else if("\\"===f)e=!0;else{if(f===a)return this.index++,void this.tokens.push({index:b,text:d,constant:!0,value:c});c+=f}this.index++}this.throwError("Unterminated quote",b)}};var Lf=function(a,b){this.lexer=a,this.options=b};Lf.Program="Program",Lf.ExpressionStatement="ExpressionStatement",Lf.AssignmentExpression="AssignmentExpression",Lf.ConditionalExpression="ConditionalExpression",Lf.LogicalExpression="LogicalExpression",Lf.BinaryExpression="BinaryExpression",Lf.UnaryExpression="UnaryExpression",Lf.CallExpression="CallExpression",Lf.MemberExpression="MemberExpression",Lf.Identifier="Identifier",Lf.Literal="Literal",Lf.ArrayExpression="ArrayExpression",Lf.Property="Property",Lf.ObjectExpression="ObjectExpression",Lf.ThisExpression="ThisExpression",Lf.LocalsExpression="LocalsExpression",Lf.NGValueParameter="NGValueParameter",Lf.prototype={ast:function(a){this.text=a,this.tokens=this.lexer.lex(a);var b=this.program();return 0!==this.tokens.length&&this.throwError("is an unexpected token",this.tokens[0]),b},program:function(){for(var a=[];;)if(this.tokens.length>0&&!this.peek("}",")",";","]")&&a.push(this.expressionStatement()),!this.expect(";"))return{type:Lf.Program,body:a}},expressionStatement:function(){return{type:Lf.ExpressionStatement,expression:this.filterChain()}},filterChain:function(){for(var a=this.expression();this.expect("|");)a=this.filter(a);return a},expression:function(){return this.assignment()},assignment:function(){var a=this.ternary();if(this.expect("=")){if(!oc(a))throw Gf("lval","Trying to assign a value to a non l-value");a={type:Lf.AssignmentExpression,left:a,right:this.assignment(),operator:"="}}return a},ternary:function(){var a,b,c=this.logicalOR();return this.expect("?")&&(a=this.expression(),this.consume(":"))?(b=this.expression(),{type:Lf.ConditionalExpression,test:c,alternate:a,consequent:b}):c},logicalOR:function(){for(var a=this.logicalAND();this.expect("||");)a={type:Lf.LogicalExpression,operator:"||",left:a,right:this.logicalAND()};return a},logicalAND:function(){for(var a=this.equality();this.expect("&&");)a={type:Lf.LogicalExpression,operator:"&&",left:a,right:this.equality()};return a},equality:function(){for(var a,b=this.relational();a=this.expect("==","!=","===","!==");)b={type:Lf.BinaryExpression,operator:a.text,left:b,right:this.relational()};return b},relational:function(){for(var a,b=this.additive();a=this.expect("<",">","<=",">=");)b={type:Lf.BinaryExpression,operator:a.text,left:b,right:this.additive()};return b},additive:function(){for(var a,b=this.multiplicative();a=this.expect("+","-");)b={type:Lf.BinaryExpression,operator:a.text,left:b,right:this.multiplicative()};return b},multiplicative:function(){for(var a,b=this.unary();a=this.expect("*","/","%");)b={type:Lf.BinaryExpression,operator:a.text,left:b,right:this.unary()};return b},unary:function(){var a;return(a=this.expect("+","-","!"))?{type:Lf.UnaryExpression,operator:a.text,prefix:!0,argument:this.unary()}:this.primary()},primary:function(){var a;this.expect("(")?(a=this.filterChain(),this.consume(")")):this.expect("[")?a=this.arrayDeclaration():this.expect("{")?a=this.object():this.selfReferential.hasOwnProperty(this.peek().text)?a=R(this.selfReferential[this.consume().text]):this.options.literals.hasOwnProperty(this.peek().text)?a={type:Lf.Literal,value:this.options.literals[this.consume().text]}:this.peek().identifier?a=this.identifier():this.peek().constant?a=this.constant():this.throwError("not a primary expression",this.peek());for(var b;b=this.expect("(","[",".");)"("===b.text?(a={type:Lf.CallExpression,callee:a,arguments:this.parseArguments()},this.consume(")")):"["===b.text?(a={type:Lf.MemberExpression,object:a,property:this.expression(),computed:!0},this.consume("]")):"."===b.text?a={type:Lf.MemberExpression,object:a,property:this.identifier(),computed:!1}:this.throwError("IMPOSSIBLE");return a},filter:function(a){for(var b=[a],c={type:Lf.CallExpression,callee:this.identifier(),arguments:b,filter:!0};this.expect(":");)b.push(this.expression());return c},parseArguments:function(){var a=[];if(")"!==this.peekToken().text)do{a.push(this.filterChain())}while(this.expect(","));return a},identifier:function(){var a=this.consume();return a.identifier||this.throwError("is not a valid identifier",a),{type:Lf.Identifier,name:a.text}},constant:function(){return{type:Lf.Literal,value:this.consume().value}},arrayDeclaration:function(){var a=[];if("]"!==this.peekToken().text)do{if(this.peek("]"))break;a.push(this.expression())}while(this.expect(","));return this.consume("]"),{type:Lf.ArrayExpression,elements:a}},object:function(){var a,b=[];if("}"!==this.peekToken().text)do{if(this.peek("}"))break;a={type:Lf.Property,kind:"init"},this.peek().constant?(a.key=this.constant(),a.computed=!1,this.consume(":"),a.value=this.expression()):this.peek().identifier?(a.key=this.identifier(),a.computed=!1,this.peek(":")?(this.consume(":"),a.value=this.expression()):a.value=a.key):this.peek("[")?(this.consume("["),a.key=this.expression(),this.consume("]"),a.computed=!0,
5
this.consume(":"),a.value=this.expression()):this.throwError("invalid key",this.peek()),b.push(a)}while(this.expect(","));return this.consume("}"),{type:Lf.ObjectExpression,properties:b}},throwError:function(a,b){throw Gf("syntax","Syntax Error: Token '{0}' {1} at column {2} of the expression [{3}] starting at [{4}].",b.text,a,b.index+1,this.text,this.text.substring(b.index))},consume:function(a){if(0===this.tokens.length)throw Gf("ueoe","Unexpected end of expression: {0}",this.text);var b=this.expect(a);return b||this.throwError("is unexpected, expecting ["+a+"]",this.peek()),b},peekToken:function(){if(0===this.tokens.length)throw Gf("ueoe","Unexpected end of expression: {0}",this.text);return this.tokens[0]},peek:function(a,b,c,d){return this.peekAhead(0,a,b,c,d)},peekAhead:function(a,b,c,d,e){if(this.tokens.length>a){var f=this.tokens[a],g=f.text;if(g===b||g===c||g===d||g===e||!b&&!c&&!d&&!e)return f}return!1},expect:function(a,b,c,d){var e=this.peek(a,b,c,d);return!!e&&(this.tokens.shift(),e)},selfReferential:{this:{type:Lf.ThisExpression},$locals:{type:Lf.LocalsExpression}}};var Mf=1,Nf=2;sc.prototype={compile:function(a){var b=this;this.state={nextId:0,filters:{},fn:{vars:[],body:[],own:{}},assign:{vars:[],body:[],own:{}},inputs:[]},mc(a,b.$filter);var c,d="";if(this.stage="assign",c=pc(a)){this.state.computing="assign";var e=this.nextId();this.recurse(c,e),this.return_(e),d="fn.assign="+this.generateFunction("assign","s,v,l")}var g=nc(a.body);b.stage="inputs",f(g,function(a,c){var d="fn"+c;b.state[d]={vars:[],body:[],own:{}},b.state.computing=d;var e=b.nextId();b.recurse(a,e),b.return_(e),b.state.inputs.push({name:d,isPure:a.isPure}),a.watchId=c}),this.state.computing="fn",this.stage="main",this.recurse(a);var h='"'+this.USE+" "+this.STRICT+'";\n'+this.filterPrefix()+"var fn="+this.generateFunction("fn","s,l,a,i")+d+this.watchFns()+"return fn;",i=new Function("$filter","getStringValue","ifDefined","plus",h)(this.$filter,hc,ic,jc);return this.state=this.stage=void 0,i},USE:"use",STRICT:"strict",watchFns:function(){var a=[],b=this.state.inputs,c=this;return f(b,function(b){a.push("var "+b.name+"="+c.generateFunction(b.name,"s")),b.isPure&&a.push(b.name,".isPure="+JSON.stringify(b.isPure)+";")}),b.length&&a.push("fn.inputs=["+b.map(function(a){return a.name}).join(",")+"];"),a.join("")},generateFunction:function(a,b){return"function("+b+"){"+this.varsPrefix(a)+this.body(a)+"};"},filterPrefix:function(){var a=[],b=this;return f(this.state.filters,function(c,d){a.push(c+"=$filter("+b.escape(d)+")")}),a.length?"var "+a.join(",")+";":""},varsPrefix:function(a){return this.state[a].vars.length?"var "+this.state[a].vars.join(",")+";":""},body:function(a){return this.state[a].body.join("")},recurse:function(a,b,c,d,e,g){var h,i,j,k,l,m=this;if(d=d||p,!g&&u(a.watchId))return b=b||this.nextId(),void this.if_("i",this.lazyAssign(b,this.computedMember("i",a.watchId)),this.lazyRecurse(a,b,c,d,e,!0));switch(a.type){case Lf.Program:f(a.body,function(b,c){m.recurse(b.expression,void 0,void 0,function(a){i=a}),c!==a.body.length-1?m.current().body.push(i,";"):m.return_(i)});break;case Lf.Literal:k=this.escape(a.value),this.assign(b,k),d(b||k);break;case Lf.UnaryExpression:this.recurse(a.argument,void 0,void 0,function(a){i=a}),k=a.operator+"("+this.ifDefined(i,0)+")",this.assign(b,k),d(k);break;case Lf.BinaryExpression:this.recurse(a.left,void 0,void 0,function(a){h=a}),this.recurse(a.right,void 0,void 0,function(a){i=a}),k="+"===a.operator?this.plus(h,i):"-"===a.operator?this.ifDefined(h,0)+a.operator+this.ifDefined(i,0):"("+h+")"+a.operator+"("+i+")",this.assign(b,k),d(k);break;case Lf.LogicalExpression:b=b||this.nextId(),m.recurse(a.left,b),m.if_("&&"===a.operator?b:m.not(b),m.lazyRecurse(a.right,b)),d(b);break;case Lf.ConditionalExpression:b=b||this.nextId(),m.recurse(a.test,b),m.if_(b,m.lazyRecurse(a.alternate,b),m.lazyRecurse(a.consequent,b)),d(b);break;case Lf.Identifier:b=b||this.nextId(),c&&(c.context="inputs"===m.stage?"s":this.assign(this.nextId(),this.getHasOwnProperty("l",a.name)+"?l:s"),c.computed=!1,c.name=a.name),m.if_("inputs"===m.stage||m.not(m.getHasOwnProperty("l",a.name)),function(){m.if_("inputs"===m.stage||"s",function(){e&&1!==e&&m.if_(m.isNull(m.nonComputedMember("s",a.name)),m.lazyAssign(m.nonComputedMember("s",a.name),"{}")),m.assign(b,m.nonComputedMember("s",a.name))})},b&&m.lazyAssign(b,m.nonComputedMember("l",a.name))),d(b);break;case Lf.MemberExpression:h=c&&(c.context=this.nextId())||this.nextId(),b=b||this.nextId(),m.recurse(a.object,h,void 0,function(){m.if_(m.notNull(h),function(){a.computed?(i=m.nextId(),m.recurse(a.property,i),m.getStringValue(i),e&&1!==e&&m.if_(m.not(m.computedMember(h,i)),m.lazyAssign(m.computedMember(h,i),"{}")),k=m.computedMember(h,i),m.assign(b,k),c&&(c.computed=!0,c.name=i)):(e&&1!==e&&m.if_(m.isNull(m.nonComputedMember(h,a.property.name)),m.lazyAssign(m.nonComputedMember(h,a.property.name),"{}")),k=m.nonComputedMember(h,a.property.name),m.assign(b,k),c&&(c.computed=!1,c.name=a.property.name))},function(){m.assign(b,"undefined")}),d(b)},!!e);break;case Lf.CallExpression:b=b||this.nextId(),a.filter?(i=m.filter(a.callee.name),j=[],f(a.arguments,function(a){var b=m.nextId();m.recurse(a,b),j.push(b)}),k=i+"("+j.join(",")+")",m.assign(b,k),d(b)):(i=m.nextId(),h={},j=[],m.recurse(a.callee,i,h,function(){m.if_(m.notNull(i),function(){f(a.arguments,function(b){m.recurse(b,a.constant?void 0:m.nextId(),void 0,function(a){j.push(a)})}),k=h.name?m.member(h.context,h.name,h.computed)+"("+j.join(",")+")":i+"("+j.join(",")+")",m.assign(b,k)},function(){m.assign(b,"undefined")}),d(b)}));break;case Lf.AssignmentExpression:i=this.nextId(),h={},this.recurse(a.left,void 0,h,function(){m.if_(m.notNull(h.context),function(){m.recurse(a.right,i),k=m.member(h.context,h.name,h.computed)+a.operator+i,m.assign(b,k),d(b||k)})},1);break;case Lf.ArrayExpression:j=[],f(a.elements,function(b){m.recurse(b,a.constant?void 0:m.nextId(),void 0,function(a){j.push(a)})}),k="["+j.join(",")+"]",this.assign(b,k),d(b||k);break;case Lf.ObjectExpression:j=[],l=!1,f(a.properties,function(a){a.computed&&(l=!0)}),l?(b=b||this.nextId(),this.assign(b,"{}"),f(a.properties,function(a){a.computed?(h=m.nextId(),m.recurse(a.key,h)):h=a.key.type===Lf.Identifier?a.key.name:""+a.key.value,i=m.nextId(),m.recurse(a.value,i),m.assign(m.member(b,h,a.computed),i)})):(f(a.properties,function(b){m.recurse(b.value,a.constant?void 0:m.nextId(),void 0,function(a){j.push(m.escape(b.key.type===Lf.Identifier?b.key.name:""+b.key.value)+":"+a)})}),k="{"+j.join(",")+"}",this.assign(b,k)),d(b||k);break;case Lf.ThisExpression:this.assign(b,"s"),d(b||"s");break;case Lf.LocalsExpression:this.assign(b,"l"),d(b||"l");break;case Lf.NGValueParameter:this.assign(b,"v"),d(b||"v")}},getHasOwnProperty:function(a,b){var c=a+"."+b,d=this.current().own;return d.hasOwnProperty(c)||(d[c]=this.nextId(!1,a+"&&("+this.escape(b)+" in "+a+")")),d[c]},assign:function(a,b){if(a)return this.current().body.push(a,"=",b,";"),a},filter:function(a){return this.state.filters.hasOwnProperty(a)||(this.state.filters[a]=this.nextId(!0)),this.state.filters[a]},ifDefined:function(a,b){return"ifDefined("+a+","+this.escape(b)+")"},plus:function(a,b){return"plus("+a+","+b+")"},return_:function(a){this.current().body.push("return ",a,";")},if_:function(a,b,c){if(!0===a)b();else{var d=this.current().body;d.push("if(",a,"){"),b(),d.push("}"),c&&(d.push("else{"),c(),d.push("}"))}},not:function(a){return"!("+a+")"},isNull:function(a){return a+"==null"},notNull:function(a){return a+"!=null"},nonComputedMember:function(a,b){var c=/^[$_a-zA-Z][$_a-zA-Z0-9]*#x2F;,d=/[^$_a-zA-Z0-9]/g;return c.test(b)?a+"."+b:a+'["'+b.replace(d,this.stringEscapeFn)+'"]'},computedMember:function(a,b){return a+"["+b+"]"},member:function(a,b,c){return c?this.computedMember(a,b):this.nonComputedMember(a,b)},getStringValue:function(a){this.assign(a,"getStringValue("+a+")")},lazyRecurse:function(a,b,c,d,e,f){var g=this;return function(){g.recurse(a,b,c,d,e,f)}},lazyAssign:function(a,b){var c=this;return function(){c.assign(a,b)}},stringEscapeRegex:/[^ a-zA-Z0-9]/g,stringEscapeFn:function(a){return"\\u"+("0000"+a.charCodeAt(0).toString(16)).slice(-4)},escape:function(a){if(x(a))return"'"+a.replace(this.stringEscapeRegex,this.stringEscapeFn)+"'";if(y(a))return a.toString();if(!0===a)return"true";if(!1===a)return"false";if(null===a)return"null";if(void 0===a)return"undefined";throw Gf("esc","IMPOSSIBLE")},nextId:function(a,b){var c="v"+this.state.nextId++;return a||this.current().vars.push(c+(b?"="+b:"")),c},current:function(){return this.state[this.state.computing]}},tc.prototype={compile:function(a){var b=this;mc(a,b.$filter);var c,d;(c=pc(a))&&(d=this.recurse(c));var e,g=nc(a.body);g&&(e=[],f(g,function(a,c){var d=b.recurse(a);d.isPure=a.isPure,a.input=d,e.push(d),a.watchId=c}));var h=[];f(a.body,function(a){h.push(b.recurse(a.expression))});var i=0===a.body.length?p:1===a.body.length?h[0]:function(a,b){var c;return f(h,function(d){c=d(a,b)}),c};return d&&(i.assign=function(a,b,c){return d(a,c,b)}),e&&(i.inputs=e),i},recurse:function(a,b,c){var d,e,g,h=this;if(a.input)return this.inputs(a.input,a.watchId);switch(a.type){case Lf.Literal:return this.value(a.value,b);case Lf.UnaryExpression:return e=this.recurse(a.argument),this["unary"+a.operator](e,b);case Lf.BinaryExpression:case Lf.LogicalExpression:return d=this.recurse(a.left),e=this.recurse(a.right),this["binary"+a.operator](d,e,b);case Lf.ConditionalExpression:return this["ternary?:"](this.recurse(a.test),this.recurse(a.alternate),this.recurse(a.consequent),b);case Lf.Identifier:return h.identifier(a.name,b,c);case Lf.MemberExpression:return d=this.recurse(a.object,!1,!!c),a.computed||(e=a.property.name),a.computed&&(e=this.recurse(a.property)),a.computed?this.computedMember(d,e,b,c):this.nonComputedMember(d,e,b,c);case Lf.CallExpression:return g=[],f(a.arguments,function(a){g.push(h.recurse(a))}),a.filter&&(e=this.$filter(a.callee.name)),a.filter||(e=this.recurse(a.callee,!0)),a.filter?function(a,c,d,f){for(var h=[],i=0;i<g.length;++i)h.push(g[i](a,c,d,f));var j=e.apply(void 0,h,f);return b?{context:void 0,name:void 0,value:j}:j}:function(a,c,d,f){var h,i=e(a,c,d,f);if(null!=i.value){for(var j=[],k=0;k<g.length;++k)j.push(g[k](a,c,d,f));h=i.value.apply(i.context,j)}return b?{value:h}:h};case Lf.AssignmentExpression:return d=this.recurse(a.left,!0,1),e=this.recurse(a.right),function(a,c,f,g){var h=d(a,c,f,g),i=e(a,c,f,g);return h.context[h.name]=i,b?{value:i}:i};case Lf.ArrayExpression:return g=[],f(a.elements,function(a){g.push(h.recurse(a))}),function(a,c,d,e){for(var f=[],h=0;h<g.length;++h)f.push(g[h](a,c,d,e));return b?{value:f}:f};case Lf.ObjectExpression:return g=[],f(a.properties,function(a){a.computed?g.push({key:h.recurse(a.key),computed:!0,value:h.recurse(a.value)}):g.push({key:a.key.type===Lf.Identifier?a.key.name:""+a.key.value,computed:!1,value:h.recurse(a.value)})}),function(a,c,d,e){for(var f={},h=0;h<g.length;++h)g[h].computed?f[g[h].key(a,c,d,e)]=g[h].value(a,c,d,e):f[g[h].key]=g[h].value(a,c,d,e);return b?{value:f}:f};case Lf.ThisExpression:return function(a){return b?{value:a}:a};case Lf.LocalsExpression:return function(a,c){return b?{value:c}:c};case Lf.NGValueParameter:return function(a,c,d){return b?{value:d}:d}}},"unary+":function(a,b){return function(c,d,e,f){var g=a(c,d,e,f);return g=u(g)?+g:0,b?{value:g}:g}},"unary-":function(a,b){return function(c,d,e,f){var g=a(c,d,e,f);return g=u(g)?-g:-0,b?{value:g}:g}},"unary!":function(a,b){return function(c,d,e,f){var g=!a(c,d,e,f);return b?{value:g}:g}},"binary+":function(a,b,c){return function(d,e,f,g){var h=a(d,e,f,g),i=b(d,e,f,g),j=jc(h,i);return c?{value:j}:j}},"binary-":function(a,b,c){return function(d,e,f,g){var h=a(d,e,f,g),i=b(d,e,f,g),j=(u(h)?h:0)-(u(i)?i:0);return c?{value:j}:j}},"binary*":function(a,b,c){return function(d,e,f,g){var h=a(d,e,f,g)*b(d,e,f,g);return c?{value:h}:h}},"binary/":function(a,b,c){return function(d,e,f,g){var h=a(d,e,f,g)/b(d,e,f,g);return c?{value:h}:h}},"binary%":function(a,b,c){return function(d,e,f,g){var h=a(d,e,f,g)%b(d,e,f,g);return c?{value:h}:h}},"binary===":function(a,b,c){return function(d,e,f,g){var h=a(d,e,f,g)===b(d,e,f,g);return c?{value:h}:h}},"binary!==":function(a,b,c){return function(d,e,f,g){var h=a(d,e,f,g)!==b(d,e,f,g);return c?{value:h}:h}},"binary==":function(a,b,c){return function(d,e,f,g){var h=a(d,e,f,g)==b(d,e,f,g);return c?{value:h}:h}},"binary!=":function(a,b,c){return function(d,e,f,g){var h=a(d,e,f,g)!=b(d,e,f,g);return c?{value:h}:h}},"binary<":function(a,b,c){return function(d,e,f,g){var h=a(d,e,f,g)<b(d,e,f,g);return c?{value:h}:h}},"binary>":function(a,b,c){return function(d,e,f,g){var h=a(d,e,f,g)>b(d,e,f,g);return c?{value:h}:h}},"binary<=":function(a,b,c){return function(d,e,f,g){var h=a(d,e,f,g)<=b(d,e,f,g);return c?{value:h}:h}},"binary>=":function(a,b,c){return function(d,e,f,g){var h=a(d,e,f,g)>=b(d,e,f,g);return c?{value:h}:h}},"binary&&":function(a,b,c){return function(d,e,f,g){var h=a(d,e,f,g)&&b(d,e,f,g);return c?{value:h}:h}},"binary||":function(a,b,c){return function(d,e,f,g){var h=a(d,e,f,g)||b(d,e,f,g);return c?{value:h}:h}},"ternary?:":function(a,b,c,d){return function(e,f,g,h){var i=a(e,f,g,h)?b(e,f,g,h):c(e,f,g,h);return d?{value:i}:i}},value:function(a,b){return function(){return b?{context:void 0,name:void 0,value:a}:a}},identifier:function(a,b,c){return function(d,e,f,g){var h=e&&a in e?e:d;c&&1!==c&&h&&null==h[a]&&(h[a]={});var i=h?h[a]:void 0;return b?{context:h,name:a,value:i}:i}},computedMember:function(a,b,c,d){return function(e,f,g,h){var i,j,k=a(e,f,g,h);return null!=k&&(i=b(e,f,g,h),i=hc(i),d&&1!==d&&k&&!k[i]&&(k[i]={}),j=k[i]),c?{context:k,name:i,value:j}:j}},nonComputedMember:function(a,b,c,d){return function(e,f,g,h){var i=a(e,f,g,h);d&&1!==d&&i&&null==i[b]&&(i[b]={});var j=null!=i?i[b]:void 0;return c?{context:i,name:b,value:j}:j}},inputs:function(a,b){return function(c,d,e,f){return f?f[b]:a(c,d,e)}}},uc.prototype={constructor:uc,parse:function(a){var b=this.ast.ast(a),c=this.astCompiler.compile(b);return c.literal=qc(b),c.constant=rc(b),c}};var Of=d("$sce"),Pf={HTML:"html",CSS:"css",URL:"url",RESOURCE_URL:"resourceUrl",JS:"js"},Qf=/_([a-z])/g,Rf=d("$compile"),Sf=a.document.createElement("a"),Tf=Pc(a.location.href);Sc.$inject=["$document"],Uc.$inject=["$provide"];var Uf=22,Vf=".",Wf="0";Zc.$inject=["$locale"],$c.$inject=["$locale"];var Xf={yyyy:dd("FullYear",4,0,!1,!0),yy:dd("FullYear",2,0,!0,!0),y:dd("FullYear",1,0,!1,!0),MMMM:ed("Month"),MMM:ed("Month",!0),MM:dd("Month",2,1),M:dd("Month",1,1),LLLL:ed("Month",!1,!0),dd:dd("Date",2),d:dd("Date",1),HH:dd("Hours",2),H:dd("Hours",1),hh:dd("Hours",2,-12),h:dd("Hours",1,-12),mm:dd("Minutes",2),m:dd("Minutes",1),ss:dd("Seconds",2),s:dd("Seconds",1),sss:dd("Milliseconds",3),EEEE:ed("Day"),EEE:ed("Day",!0),a:jd,Z:fd,ww:id(2),w:id(1),G:kd,GG:kd,GGG:kd,GGGG:ld},Yf=/((?:[^yMLdHhmsaZEwG']+)|(?:'(?:[^']|'')*')|(?:E+|y+|M+|L+|d+|H+|h+|m+|s+|a|Z|G+|w+))([\s\S]*)/,Zf=/^-?\d+#x2F;;md.$inject=["$locale"];var $f=r($d),_f=r(_d);qd.$inject=["$parse"];var ag=r({restrict:"E",compile:function(a,b){if(!b.href&&!b.xlinkHref)return function(a,b){if("a"===b[0].nodeName.toLowerCase()){var c="[object SVGAnimatedString]"===je.call(b.prop("href"))?"xlink:href":"href";b.on("click",function(a){b.attr(c)||a.preventDefault()})}}}}),bg={};f(Te,function(a,b){function c(a,c,e){a.$watch(e[d],function(a){e.$set(b,!!a)})}if("multiple"!==a){var d=wb("ng-"+b),e=c;"checked"===a&&(e=function(a,b,e){e.ngModel!==e[d]&&c(a,b,e)}),bg[d]=function(){return{restrict:"A",priority:100,link:e}}}}),f(Ve,function(a,b){bg[b]=function(){return{priority:100,link:function(a,c,d){if("ngPattern"===b&&"/"===d.ngPattern.charAt(0)){var e=d.ngPattern.match(Xd);if(e)return void d.$set("ngPattern",new RegExp(e[1],e[2]))}a.$watch(d[b],function(a){d.$set(b,a)})}}}}),f(["src","srcset","href"],function(a){var b=wb("ng-"+a);bg[b]=function(){return{priority:99,link:function(c,d,e){var f=a,g=a;"href"===a&&"[object SVGAnimatedString]"===je.call(d.prop("href"))&&(g="xlinkHref",e.$attr[g]="xlink:href",f=null),e.$observe(b,function(b){if(!b)return void("href"===a&&e.$set(g,null));e.$set(g,b),ce&&f&&d.prop(f,e[g])})}}}});var cg={$addControl:p,$renameControl:sd,$removeControl:p,$setValidity:p,$setDirty:p,$setPristine:p,$setSubmitted:p},dg="ng-pending";td.$inject=["$element","$attrs","$scope","$animate","$interpolate"],td.prototype={$rollbackViewValue:function(){f(this.$controls,function(a){a.$rollbackViewValue()})},$commitViewValue:function(){f(this.$controls,function(a){a.$commitViewValue()})},$addControl:function(a){pa(a.$name,"input"),this.$controls.push(a),a.$name&&(this[a.$name]=a),a.$parentForm=this},$renameControl:function(a,b){var c=a.$name;this[c]===a&&delete this[c],this[b]=a,a.$name=b},$removeControl:function(a){a.$name&&this[a.$name]===a&&delete this[a.$name],f(this.$pending,function(b,c){this.$setValidity(c,null,a)},this),f(this.$error,function(b,c){this.$setValidity(c,null,a)},this),f(this.$success,function(b,c){this.$setValidity(c,null,a)},this),Q(this.$controls,a),a.$parentForm=cg},$setDirty:function(){this.$animate.removeClass(this.$element,Og),this.$animate.addClass(this.$element,Pg),this.$dirty=!0,this.$pristine=!1,this.$parentForm.$setDirty()},$setPristine:function(){this.$animate.setClass(this.$element,Og,Pg+" ng-submitted"),this.$dirty=!1,this.$pristine=!0,this.$submitted=!1,f(this.$controls,function(a){a.$setPristine()})},$setUntouched:function(){f(this.$controls,function(a){a.$setUntouched()})},$setSubmitted:function(){this.$animate.addClass(this.$element,"ng-submitted"),this.$submitted=!0,this.$parentForm.$setSubmitted()}},vd({clazz:td,set:function(a,b,c){var d=a[b];if(d){-1===d.indexOf(c)&&d.push(c)}else a[b]=[c]},unset:function(a,b,c){var d=a[b];d&&(Q(d,c),0===d.length&&delete a[b])}});var eg=function(a){return["$timeout","$parse",function(b,c){function d(a){return""===a?c('this[""]').assign:c(a).assign||p}return{name:"form",restrict:a?"EAC":"E",require:["form","^^?form"],controller:td,compile:function(c,e){c.addClass(Og).addClass(Mg);var f=e.name?"name":!(!a||!e.ngForm)&&"ngForm";return{pre:function(a,c,e,g){var h=g[0];if(!("action"in e)){var i=function(b){a.$apply(function(){h.$commitViewValue(),h.$setSubmitted()}),b.preventDefault()};c[0].addEventListener("submit",i),c.on("$destroy",function(){b(function(){c[0].removeEventListener("submit",i)},0,!1)})}(g[1]||h.$parentForm).$addControl(h);var j=f?d(h.$name):p;f&&(j(a,h),e.$observe(f,function(b){h.$name!==b&&(j(a,void 0),h.$parentForm.$renameControl(h,b),(j=d(h.$name))(a,h))})),c.on("$destroy",function(){h.$parentForm.$removeControl(h),j(a,void 0),l(h,cg)})}}}}}]},fg=eg(),gg=eg(!0),hg=/^\d{4,}-[01]\d-[0-3]\dT[0-2]\d:[0-5]\d:[0-5]\d\.\d+(?:[+-][0-2]\d:[0-5]\d|Z)#x2F;,ig=/^[a-z][a-z\d.+-]*:\/*(?:[^:@]+(?::[^@]+)?@)?(?:[^\s:\/?#]+|\[[a-f\d:]+])(?::\d+)?(?:\/[^?#]*)?(?:\?[^#]*)?(?:#.*)?#x2F;i,jg=/^(?=.{1,254}$)(?=.{1,64}@)[-!#$%&'*+\/0-9=?A-Z^_`a-z{|}~]+(\.[-!#$%&'*+\/0-9=?A-Z^_`a-z{|}~]+)*@[A-Za-z0-9]([A-Za-z0-9-]{0,61}[A-Za-z0-9])?(\.[A-Za-z0-9]([A-Za-z0-9-]{0,61}[A-Za-z0-9])?)*#x2F;,kg=/^\s*(-|\+)?(\d+|(\d*(\.\d*)))([eE][+-]?\d+)?\s*#x2F;,lg=/^(\d{4,})-(\d{2})-(\d{2})#x2F;,mg=/^(\d{4,})-(\d\d)-(\d\d)T(\d\d):(\d\d)(?::(\d\d)(\.\d{1,3})?)?#x2F;,ng=/^(\d{4,})-W(\d\d)#x2F;,og=/^(\d{4,})-(\d\d)#x2F;,pg=/^(\d\d):(\d\d)(?::(\d\d)(\.\d{1,3})?)?#x2F;,qg="keydown wheel mousedown",rg=sa();f("date,datetime-local,month,time,week".split(","),function(a){rg[a]=!0});var sg={text:yd,date:Cd("date",lg,Bd(lg,["yyyy","MM","dd"]),"yyyy-MM-dd"),"datetime-local":Cd("datetimelocal",mg,Bd(mg,["yyyy","MM","dd","HH","mm","ss","sss"]),"yyyy-MM-ddTHH:mm:ss.sss"),time:Cd("time",pg,Bd(pg,["HH","mm","ss","sss"]),"HH:mm:ss.sss"),week:Cd("week",ng,Ad,"yyyy-Www"),month:Cd("month",og,Bd(og,["yyyy","MM"]),"yyyy-MM"),number:Jd,url:Ld,email:Md,radio:Nd,range:Kd,checkbox:Pd,hidden:p,button:p,submit:p,reset:p,file:p},tg=["$browser","$sniffer","$filter","$parse",function(a,b,c,d){return{restrict:"E",require:["?ngModel"],link:{pre:function(e,f,g,h){h[0]&&(sg[$d(g.type)]||sg.text)(e,f,g,h[0],b,a,c,d)}}}}],ug=/^(true|false|\d+)#x2F;,vg=function(){function a(a,b,c){var d=u(c)?c:9===ce?"":null;a.prop("value",d),b.$set("value",c)}return{restrict:"A",priority:100,compile:function(b,c){return ug.test(c.ngValue)?function(b,c,d){a(c,d,b.$eval(d.ngValue))}:function(b,c,d){b.$watch(d.ngValue,function(b){a(c,d,b)})}}}},wg=["$compile",function(a){return{restrict:"AC",compile:function(b){return a.$addBindingClass(b),function(b,c,d){a.$addBindingInfo(c,d.ngBind),c=c[0],b.$watch(d.ngBind,function(a){c.textContent=ta(a)})}}}}],xg=["$interpolate","$compile",function(a,b){return{compile:function(c){return b.$addBindingClass(c),function(c,d,e){var f=a(d.attr(e.$attr.ngBindTemplate));b.$addBindingInfo(d,f.expressions),d=d[0],e.$observe("ngBindTemplate",function(a){d.textContent=t(a)?"":a})}}}}],yg=["$sce","$parse","$compile",function(a,b,c){return{restrict:"A",compile:function(d,e){var f=b(e.ngBindHtml),g=b(e.ngBindHtml,function(b){return a.valueOf(b)});return c.$addBindingClass(d),function(b,d,e){c.$addBindingInfo(d,e.ngBindHtml),b.$watch(g,function(){var c=f(b);d.html(a.getTrustedHtml(c)||"")})}}}}],zg=r({restrict:"A",require:"ngModel",link:function(a,b,c,d){d.$viewChangeListeners.push(function(){a.$eval(c.ngChange)})}}),Ag=Qd("",!0),Bg=Qd("Odd",0),Cg=Qd("Even",1),Dg=rd({compile:function(a,b){b.$set("ngCloak",void 0),a.removeClass("ng-cloak")}}),Eg=[function(){return{restrict:"A",scope:!0,controller:"@",priority:500}}],Fg={},Gg={blur:!0,focus:!0};f("click dblclick mousedown mouseup mouseover mouseout mousemove mouseenter mouseleave keydown keyup keypress submit focus blur copy cut paste".split(" "),function(a){var b=wb("ng-"+a);Fg[b]=["$parse","$rootScope",function(c,d){return{restrict:"A",compile:function(e,f){var g=c(f[b]);return function(b,c){c.on(a,function(c){var e=function(){g(b,{$event:c})};Gg[a]&&d.$phase?b.$evalAsync(e):b.$apply(e)})}}}}]});var Hg=["$animate","$compile",function(a,b){return{multiElement:!0,transclude:"element",priority:600,terminal:!0,restrict:"A",$tlb:!0,link:function(c,d,e,f,g){var h,i,j;c.$watch(e.ngIf,function(c){c?i||g(function(c,f){i=f,c[c.length++]=b.$createComment("end ngIf",e.ngIf),h={clone:c},a.enter(c,d.parent(),d)}):(j&&(j.remove(),j=null),i&&(i.$destroy(),i=null),h&&(j=ra(h.clone),a.leave(j).done(function(a){!1!==a&&(j=null)}),h=null))})}}}],Ig=["$templateRequest","$anchorScroll","$animate",function(a,b,c){return{restrict:"ECA",priority:400,terminal:!0,transclude:"element",controller:me.noop,compile:function(d,e){var f=e.ngInclude||e.src,g=e.onload||"",h=e.autoscroll;return function(d,e,i,j,k){var l,m,n,o=0,p=function(){m&&(m.remove(),m=null),l&&(l.$destroy(),l=null),n&&(c.leave(n).done(function(a){!1!==a&&(m=null)}),m=n,n=null)};d.$watch(f,function(f){var i=function(a){!1===a||!u(h)||h&&!d.$eval(h)||b()},m=++o;f?(a(f,!0).then(function(a){if(!d.$destroyed&&m===o){var b=d.$new();j.template=a;var h=k(b,function(a){p(),c.enter(a,null,e).done(i)});l=b,n=h,l.$emit("$includeContentLoaded",f),d.$eval(g)}},function(){d.$destroyed||m===o&&(p(),d.$emit("$includeContentError",f))}),d.$emit("$includeContentRequested",f)):(p(),j.template=null)})}}}}],Jg=["$compile",function(b){return{restrict:"ECA",priority:-400,require:"ngInclude",link:function(c,d,e,f){if(je.call(d[0]).match(/SVG/))return d.empty(),void b(Fa(f.template,a.document).childNodes)(c,function(a){d.append(a)},{futureParentElement:d});d.html(f.template),b(d.contents())(c)}}}],Kg=rd({priority:450,compile:function(){return{pre:function(a,b,c){a.$eval(c.ngInit)}}}}),Lg=function(){return{restrict:"A",priority:100,require:"ngModel",link:function(a,b,c,d){var e=c.ngList||", ",g="false"!==c.ngTrim,h=g?re(e):e,i=function(a){if(!t(a)){var b=[];return a&&f(a.split(h),function(a){a&&b.push(g?re(a):a)}),b}};d.$parsers.push(i),d.$formatters.push(function(a){if(pe(a))return a.join(e)}),d.$isEmpty=function(a){return!a||!a.length}}}},Mg="ng-valid",Ng="ng-invalid",Og="ng-pristine",Pg="ng-dirty",Qg=d("ngModel");Rd.$inject=["$scope","$exceptionHandler","$attrs","$element","$parse","$animate","$timeout","$q","$interpolate"],Rd.prototype={$initGetterSetters:function(){if(this.$options.getOption("getterSetter")){var a=this.$parse(this.$attr.ngModel+"()"),b=this.$parse(this.$attr.ngModel+"($$p)");this.$ngModelGet=function(b){var c=this.$parsedNgModel(b);return B(c)&&(c=a(b)),c},this.$ngModelSet=function(a,c){B(this.$parsedNgModel(a))?b(a,{$$p:c}):this.$parsedNgModelAssign(a,c)}}else if(!this.$parsedNgModel.assign)throw Qg("nonassign","Expression '{0}' is non-assignable. Element: {1}",this.$attr.ngModel,ba(this.$element))},$render:p,$isEmpty:function(a){return t(a)||""===a||null===a||a!==a},$updateEmptyClasses:function(a){this.$isEmpty(a)?(this.$animate.removeClass(this.$element,"ng-not-empty"),this.$animate.addClass(this.$element,"ng-empty")):(this.$animate.removeClass(this.$element,"ng-empty"),this.$animate.addClass(this.$element,"ng-not-empty"))},$setPristine:function(){this.$dirty=!1,this.$pristine=!0,this.$animate.removeClass(this.$element,Pg),this.$animate.addClass(this.$element,Og)},$setDirty:function(){this.$dirty=!0,this.$pristine=!1,this.$animate.removeClass(this.$element,Og),this.$animate.addClass(this.$element,Pg),this.$parentForm.$setDirty()},$setUntouched:function(){this.$touched=!1,this.$untouched=!0,this.$animate.setClass(this.$element,"ng-untouched","ng-touched")},$setTouched:function(){this.$touched=!0,this.$untouched=!1,this.$animate.setClass(this.$element,"ng-touched","ng-untouched")},$rollbackViewValue:function(){this.$timeout.cancel(this.$pendingDebounce),this.$viewValue=this.$lastCommittedViewValue,this.$render()},$validate:function(){if(!oe(this.$modelValue)){var a=this.$lastCommittedViewValue,b=this.$rawModelValue,c=this.$valid,d=this.$modelValue,e=this.$options.getOption("allowInvalid"),f=this;this.$runValidators(b,a,function(a){e||c===a||(f.$modelValue=a?b:void 0,f.$modelValue!==d&&f.$writeModelToScope())})}},$runValidators:function(a,b,c){function d(a,b){g===h.$currentValidationRunId&&h.$setValidity(a,b)}function e(a){g===h.$currentValidationRunId&&c(a)}this.$currentValidationRunId++;var g=this.$currentValidationRunId,h=this;return function(){var a=h.$parserName||"parse";return t(h.$parserValid)?(d(a,null),!0):(h.$parserValid||(f(h.$validators,function(a,b){d(b,null)}),f(h.$asyncValidators,function(a,b){d(b,null)})),d(a,h.$parserValid),h.$parserValid)}()&&function(){var c=!0;return f(h.$validators,function(e,f){var g=Boolean(e(a,b));c=c&&g,d(f,g)}),!!c||(f(h.$asyncValidators,function(a,b){d(b,null)}),!1)}()?void function(){var c=[],g=!0;f(h.$asyncValidators,function(e,f){var h=e(a,b);if(!J(h))throw Qg("nopromise","Expected asynchronous validator to return a promise but got '{0}' instead.",h);d(f,void 0),c.push(h.then(function(){d(f,!0)},function(){g=!1,d(f,!1)}))}),c.length?h.$q.all(c).then(function(){e(g)},p):e(!0)}():void e(!1)},$commitViewValue:function(){var a=this.$viewValue;this.$timeout.cancel(this.$pendingDebounce),(this.$lastCommittedViewValue!==a||""===a&&this.$hasNativeValidators)&&(this.$updateEmptyClasses(a),this.$lastCommittedViewValue=a,this.$pristine&&this.$setDirty(),this.$parseAndValidate())},$parseAndValidate:function(){function a(){d.$modelValue!==f&&d.$writeModelToScope()}var b=this.$lastCommittedViewValue,c=b,d=this;if(this.$parserValid=!t(c)||void 0,this.$parserValid)for(var e=0;e<this.$parsers.length;e++)if(c=this.$parsers[e](c),t(c)){this.$parserValid=!1;break}oe(this.$modelValue)&&(this.$modelValue=this.$ngModelGet(this.$scope));var f=this.$modelValue,g=this.$options.getOption("allowInvalid");this.$rawModelValue=c,g&&(this.$modelValue=c,a()),this.$runValidators(c,this.$lastCommittedViewValue,function(b){g||(d.$modelValue=b?c:void 0,a())})},$writeModelToScope:function(){this.$ngModelSet(this.$scope,this.$modelValue),f(this.$viewChangeListeners,function(a){try{a()}catch(a){this.$exceptionHandler(a)}},this)},$setViewValue:function(a,b){this.$viewValue=a,this.$options.getOption("updateOnDefault")&&this.$debounceViewValueCommit(b)},$debounceViewValueCommit:function(a){var b=this.$options.getOption("debounce");y(b[a])?b=b[a]:y(b.default)&&(b=b.default),this.$timeout.cancel(this.$pendingDebounce);var c=this;b>0?this.$pendingDebounce=this.$timeout(function(){c.$commitViewValue()},b):this.$scope.$root.$phase?this.$commitViewValue():this.$scope.$apply(function(){c.$commitViewValue()})},$overrideModelOptions:function(a){this.$options=this.$options.createChild(a)}},vd({clazz:Rd,set:function(a,b){a[b]=!0},unset:function(a,b){delete a[b]}});var Rg,Sg=["$rootScope",function(a){return{restrict:"A",require:["ngModel","^?form","^?ngModelOptions"],controller:Rd,priority:1,compile:function(b){return b.addClass(Og).addClass("ng-untouched").addClass(Mg),{pre:function(a,b,c,d){var e=d[0],f=d[1]||e.$parentForm,g=d[2];g&&(e.$options=g.$options),e.$initGetterSetters(),f.$addControl(e),c.$observe("name",function(a){e.$name!==a&&e.$parentForm.$renameControl(e,a)}),a.$on("$destroy",function(){e.$parentForm.$removeControl(e)})},post:function(b,c,d,e){function f(){g.$setTouched()}var g=e[0];g.$options.getOption("updateOn")&&c.on(g.$options.getOption("updateOn"),function(a){g.$debounceViewValueCommit(a&&a.type)}),c.on("blur",function(){g.$touched||(a.$phase?b.$evalAsync(f):b.$apply(f))})}}}}}],Tg=/(\s+|^)default(\s+|$)/;Td.prototype={getOption:function(a){return this.$options[a]},createChild:function(a){var b=!1;return a=l({},a),f(a,function(c,d){"$inherit"===c?"*"===d?b=!0:(a[d]=this.$options[d],"updateOn"===d&&(a.updateOnDefault=this.$options.updateOnDefault)):"updateOn"===d&&(a.updateOnDefault=!1,a[d]=re(c.replace(Tg,function(){return a.updateOnDefault=!0," "})))},this),b&&(delete a["*"],Ud(a,this.$options)),Ud(a,Rg.$options),new Td(a)}},Rg=new Td({updateOn:"",updateOnDefault:!0,debounce:0,getterSetter:!1,allowInvalid:!1,timezone:null});var Ug=function(){function a(a,b){this.$attrs=a,this.$scope=b}return a.$inject=["$attrs","$scope"],a.prototype={$onInit:function(){var a=this.parentCtrl?this.parentCtrl.$options:Rg,b=this.$scope.$eval(this.$attrs.ngModelOptions);this.$options=a.createChild(b)}},{restrict:"A",priority:10,require:{parentCtrl:"?^^ngModelOptions"},bindToController:!0,controller:a}},Vg=rd({terminal:!0,priority:1e3}),Wg=d("ngOptions"),Xg=/^\s*([\s\S]+?)(?:\s+as\s+([\s\S]+?))?(?:\s+group\s+by\s+([\s\S]+?))?(?:\s+disable\s+when\s+([\s\S]+?))?\s+for\s+(?:([$\w][$\w]*)|(?:\(\s*([$\w][$\w]*)\s*,\s*([$\w][$\w]*)\s*\)))\s+in\s+([\s\S]+?)(?:\s+track\s+by\s+([\s\S]+?))?#x2F;,Yg=["$compile","$document","$parse",function(b,c,d){function g(a,b,c){function f(a,b,c,d,e){this.selectValue=a,this.viewValue=b,this.label=c,this.group=d,this.disabled=e}function g(a){var b;if(!j&&e(a))b=a;else{b=[];for(var c in a)a.hasOwnProperty(c)&&"quot;!==c.charAt(0)&&b.push(c)}return b}var h=a.match(Xg);if(!h)throw Wg("iexp","Expected expression in form of '_select_ (as _label_)? for (_key_,)?_value_ in _collection_' but got '{0}'. Element: {1}",a,ba(b));var i=h[5]||h[7],j=h[6],k=/ as /.test(h[0])&&h[1],l=h[9],m=d(h[2]?h[1]:i),n=k&&d(k),o=n||m,p=l&&d(l),q=l?function(a,b){return p(c,b)}:function(a){return db(a)},r=function(a,b){return q(a,x(a,b))},s=d(h[2]||h[1]),t=d(h[3]||""),u=d(h[4]||""),v=d(h[8]),w={},x=j?function(a,b){return w[j]=b,w[i]=a,w}:function(a){return w[i]=a,w};return{trackBy:l,getTrackByValue:r,getWatchables:d(v,function(a){var b=[];a=a||[];for(var d=g(a),e=d.length,f=0;f<e;f++){var i=a===d?f:d[f],j=a[i],k=x(j,i),l=q(j,k);if(b.push(l),h[2]||h[1]){var m=s(c,k);b.push(m)}if(h[4]){var n=u(c,k);b.push(n)}}return b}),getOptions:function(){for(var a=[],b={},d=v(c)||[],e=g(d),h=e.length,i=0;i<h;i++){var j=d===e?i:e[i],k=d[j],m=x(k,j),n=o(c,m),p=q(n,m),w=s(c,m),y=t(c,m),z=u(c,m),A=new f(p,n,w,y,z);a.push(A),b[p]=A}return{items:a,selectValueMap:b,getOptionFromViewValue:function(a){return b[r(a)]},
6
getViewValueFromOption:function(a){return l?R(a.viewValue):a.viewValue}}}}}function h(a,d,e,h){function k(a,b){var c=i.cloneNode(!1);b.appendChild(c),m(a,c)}function l(a){var b=w.getOptionFromViewValue(a),c=b&&b.element;return c&&!c.selected&&(c.selected=!0),b}function m(a,b){a.element=b,b.disabled=a.disabled,a.label!==b.label&&(b.label=a.label,b.textContent=a.label),b.value=a.selectValue}function n(){var a=w&&o.readValue();if(w)for(var b=w.items.length-1;b>=0;b--){var c=w.items[b];Wa(u(c.group)?c.element.parentNode:c.element)}w=x.getOptions();var e={};if(w.items.forEach(function(a){var b;u(a.group)?(b=e[a.group],b||(b=j.cloneNode(!1),y.appendChild(b),b.label=null===a.group?"null":a.group,e[a.group]=b),k(a,b)):k(a,y)}),d[0].appendChild(y),p.$render(),!p.$isEmpty(a)){var f=o.readValue();(x.trackBy||q?T(a,f):a===f)||(p.$setViewValue(f),p.$render())}}for(var o=h[0],p=h[1],q=e.multiple,r=0,s=d.children(),t=s.length;r<t;r++)if(""===s[r].value){o.hasEmptyOption=!0,o.emptyOption=s.eq(r);break}d.empty();var v=!!o.emptyOption;de(i.cloneNode(!1)).val("?");var w,x=g(e.ngOptions,d,a),y=c[0].createDocumentFragment();o.generateUnknownOptionValue=function(a){return"?"},q?(o.writeValue=function(a){if(w){var b=a&&a.map(l)||[];w.items.forEach(function(a){a.element.selected&&!P(b,a)&&(a.element.selected=!1)})}},o.readValue=function(){var a=d.val()||[],b=[];return f(a,function(a){var c=w.selectValueMap[a];c&&!c.disabled&&b.push(w.getViewValueFromOption(c))}),b},x.trackBy&&a.$watchCollection(function(){if(pe(p.$viewValue))return p.$viewValue.map(function(a){return x.getTrackByValue(a)})},function(){p.$render()})):(o.writeValue=function(a){if(w){var b=d[0].options[d[0].selectedIndex],c=w.getOptionFromViewValue(a);b&&b.removeAttribute("selected"),c?(d[0].value!==c.selectValue&&(o.removeUnknownOption(),d[0].value=c.selectValue,c.element.selected=!0),c.element.setAttribute("selected","selected")):o.selectUnknownOrEmptyOption(a)}},o.readValue=function(){var a=w.selectValueMap[d.val()];return a&&!a.disabled?(o.unselectEmptyOption(),o.removeUnknownOption(),w.getViewValueFromOption(a)):null},x.trackBy&&a.$watch(function(){return x.getTrackByValue(p.$viewValue)},function(){p.$render()})),v&&(b(o.emptyOption)(a),d.prepend(o.emptyOption),o.emptyOption[0].nodeType===Ce?(o.hasEmptyOption=!1,o.registerOption=function(a,b){""===b.val()&&(o.hasEmptyOption=!0,o.emptyOption=b,o.emptyOption.removeClass("ng-scope"),p.$render(),b.on("$destroy",function(){var a=o.$isEmptyOptionSelected();o.hasEmptyOption=!1,o.emptyOption=void 0,a&&p.$render()}))}):o.emptyOption.removeClass("ng-scope")),a.$watchCollection(x.getWatchables,n)}var i=a.document.createElement("option"),j=a.document.createElement("optgroup");return{restrict:"A",terminal:!0,require:["select","ngModel"],link:{pre:function(a,b,c,d){d[0].registerOption=p},post:h}}}],Zg=["$locale","$interpolate","$log",function(a,b,c){var d=/{}/g,e=/^when(Minus)?(.+)#x2F;;return{link:function(g,h,i){function j(a){h.text(a||"")}var k,l=i.count,m=i.$attr.when&&h.attr(i.$attr.when),n=i.offset||0,o=g.$eval(m)||{},q={},r=b.startSymbol(),s=b.endSymbol(),u=r+l+"-"+n+s,v=me.noop;f(i,function(a,b){var c=e.exec(b);if(c){var d=(c[1]?"-":"")+$d(c[2]);o[d]=h.attr(i.$attr[b])}}),f(o,function(a,c){q[c]=b(a.replace(d,u))}),g.$watch(l,function(b){var d=parseFloat(b),e=oe(d);if(e||d in o||(d=a.pluralCat(d-n)),!(d===k||e&&oe(k))){v();var f=q[d];t(f)?(null!=b&&c.debug("ngPluralize: no rule defined for '"+d+"' in "+m),v=p,j()):v=g.$watch(f,j),k=d}})}}}],$g=["$parse","$animate","$compile",function(a,b,c){var g=d("ngRepeat"),h=function(a,b,c,d,e,f,g){a[c]=d,e&&(a[e]=f),a.$index=b,a.$first=0===b,a.$last=b===g-1,a.$middle=!(a.$first||a.$last),a.$odd=!(a.$even=0==(1&b))},i=function(a){return a.clone[0]},j=function(a){return a.clone[a.clone.length-1]};return{restrict:"A",multiElement:!0,transclude:"element",priority:1e3,terminal:!0,$tlb:!0,compile:function(d,k){var l=k.ngRepeat,m=c.$createComment("end ngRepeat",l),n=l.match(/^\s*([\s\S]+?)\s+in\s+([\s\S]+?)(?:\s+as\s+([\s\S]+?))?(?:\s+track\s+by\s+([\s\S]+?))?\s*#x2F;);if(!n)throw g("iexp","Expected expression in form of '_item_ in _collection_[ track by _id_]' but got '{0}'.",l);var o=n[1],p=n[2],q=n[3],r=n[4];if(!(n=o.match(/^(?:(\s*[$\w]+)|\(\s*([$\w]+)\s*,\s*([$\w]+)\s*\))#x2F;)))throw g("iidexp","'_item_' in '_item_ in _collection_' should be an identifier or '(_key_, _value_)' expression, but got '{0}'.",o);var s=n[3]||n[1],t=n[2];if(q&&(!/^[$a-zA-Z_][$a-zA-Z0-9_]*#x2F;.test(q)||/^(null|undefined|this|\$index|\$first|\$middle|\$last|\$even|\$odd|\$parent|\$root|\$id)#x2F;.test(q)))throw g("badident","alias '{0}' is invalid --- must be a valid JS identifier which is not a reserved name.",q);var u,v,w,x,y={$id:db};return r?u=a(r):(w=function(a,b){return db(b)},x=function(a){return a}),function(a,c,d,k,n){u&&(v=function(b,c,d){return t&&(y[t]=b),y[s]=c,y.$index=d,u(a,y)});var o=sa();a.$watchCollection(p,function(d){var k,p,r,u,y,z,A,B,C,D,E,F,G=c[0],H=sa();if(q&&(a[q]=d),e(d))C=d,B=v||w;else{B=v||x,C=[];for(var I in d)Zd.call(d,I)&&"quot;!==I.charAt(0)&&C.push(I)}for(u=C.length,E=new Array(u),k=0;k<u;k++)if(y=d===C?k:C[k],z=d[y],A=B(y,z,k),o[A])D=o[A],delete o[A],H[A]=D,E[k]=D;else{if(H[A])throw f(E,function(a){a&&a.scope&&(o[a.id]=a)}),g("dupes","Duplicates in a repeater are not allowed. Use 'track by' expression to specify unique keys. Repeater: {0}, Duplicate key: {1}, Duplicate value: {2}",l,A,z);E[k]={id:A,scope:void 0,clone:void 0},H[A]=!0}for(var J in o){if(D=o[J],F=ra(D.clone),b.leave(F),F[0].parentNode)for(k=0,p=F.length;k<p;k++)F[k].$NG_REMOVED=!0;D.scope.$destroy()}for(k=0;k<u;k++)if(y=d===C?k:C[k],z=d[y],D=E[k],D.scope){r=G;do{r=r.nextSibling}while(r&&r.$NG_REMOVED);i(D)!==r&&b.move(ra(D.clone),null,G),G=j(D),h(D.scope,k,s,z,t,y,u)}else n(function(a,c){D.scope=c;var d=m.cloneNode(!1);a[a.length++]=d,b.enter(a,null,G),G=d,D.clone=a,H[D.id]=D,h(D.scope,k,s,z,t,y,u)});o=H})}}}}],_g=["$animate",function(a){return{restrict:"A",multiElement:!0,link:function(b,c,d){b.$watch(d.ngShow,function(b){a[b?"removeClass":"addClass"](c,"ng-hide",{tempClasses:"ng-hide-animate"})})}}}],ah=["$animate",function(a){return{restrict:"A",multiElement:!0,link:function(b,c,d){b.$watch(d.ngHide,function(b){a[b?"addClass":"removeClass"](c,"ng-hide",{tempClasses:"ng-hide-animate"})})}}}],bh=rd(function(a,b,c){a.$watch(c.ngStyle,function(a,c){c&&a!==c&&f(c,function(a,c){b.css(c,"")}),a&&b.css(a)},!0)}),ch=["$animate","$compile",function(a,b){return{require:"ngSwitch",controller:["$scope",function(){this.cases={}}],link:function(c,d,e,g){var h=e.ngSwitch||e.on,i=[],j=[],k=[],l=[],m=function(a,b){return function(c){!1!==c&&a.splice(b,1)}};c.$watch(h,function(c){for(var d,e;k.length;)a.cancel(k.pop());for(d=0,e=l.length;d<e;++d){var h=ra(j[d].clone);l[d].$destroy();(k[d]=a.leave(h)).done(m(k,d))}j.length=0,l.length=0,(i=g.cases["!"+c]||g.cases["?"])&&f(i,function(c){c.transclude(function(d,e){l.push(e);var f=c.element;d[d.length++]=b.$createComment("end ngSwitchWhen");var g={clone:d};j.push(g),a.enter(d,f.parent(),f)})})})}}}],dh=rd({transclude:"element",priority:1200,require:"^ngSwitch",multiElement:!0,link:function(a,b,c,d,e){f(c.ngSwitchWhen.split(c.ngSwitchWhenSeparator).sort().filter(function(a,b,c){return c[b-1]!==a}),function(a){d.cases["!"+a]=d.cases["!"+a]||[],d.cases["!"+a].push({transclude:e,element:b})})}}),eh=rd({transclude:"element",priority:1200,require:"^ngSwitch",multiElement:!0,link:function(a,b,c,d,e){d.cases["?"]=d.cases["?"]||[],d.cases["?"].push({transclude:e,element:b})}}),fh=d("ngTransclude"),gh=["$compile",function(a){return{restrict:"EAC",terminal:!0,compile:function(b){var c=a(b.contents());return b.empty(),function(a,b,d,e,f){function g(a,c){a.length&&i(a)?b.append(a):(h(),c.$destroy())}function h(){c(a,function(a){b.append(a)})}function i(a){for(var b=0,c=a.length;b<c;b++){var d=a[b];if(d.nodeType!==Be||d.nodeValue.trim())return!0}}if(!f)throw fh("orphan","Illegal use of ngTransclude directive in the template! No parent directive that requires a transclusion found. Element: {0}",ba(b));d.ngTransclude===d.$attr.ngTransclude&&(d.ngTransclude="");var j=d.ngTransclude||d.ngTranscludeSlot;f(g,null,j),j&&!f.isSlotFilled(j)&&h()}}}}],hh=["$templateCache",function(a){return{restrict:"E",terminal:!0,compile:function(b,c){if("text/ng-template"===c.type){var d=c.id,e=b[0].text;a.put(d,e)}}}}],ih={$setViewValue:p,$render:p},jh=["$element","$scope",function(b,c){function d(){h||(h=!0,c.$postDigest(function(){h=!1,f.ngModelCtrl.$render()}))}function e(a){i||(i=!0,c.$postDigest(function(){c.$destroyed||(i=!1,f.ngModelCtrl.$setViewValue(f.readValue()),a&&f.ngModelCtrl.$render())}))}var f=this,g=new Xe;f.selectValueMap={},f.ngModelCtrl=ih,f.multiple=!1,f.unknownOption=de(a.document.createElement("option")),f.hasEmptyOption=!1,f.emptyOption=void 0,f.renderUnknownOption=function(a){var c=f.generateUnknownOptionValue(a);f.unknownOption.val(c),b.prepend(f.unknownOption),Vd(f.unknownOption,!0),b.val(c)},f.updateUnknownOption=function(a){var c=f.generateUnknownOptionValue(a);f.unknownOption.val(c),Vd(f.unknownOption,!0),b.val(c)},f.generateUnknownOptionValue=function(a){return"? "+db(a)+" ?"},f.removeUnknownOption=function(){f.unknownOption.parent()&&f.unknownOption.remove()},f.selectEmptyOption=function(){f.emptyOption&&(b.val(""),Vd(f.emptyOption,!0))},f.unselectEmptyOption=function(){f.hasEmptyOption&&Vd(f.emptyOption,!1)},c.$on("$destroy",function(){f.renderUnknownOption=p}),f.readValue=function(){var a=b.val(),c=a in f.selectValueMap?f.selectValueMap[a]:a;return f.hasOption(c)?c:null},f.writeValue=function(a){var c=b[0].options[b[0].selectedIndex];if(c&&Vd(de(c),!1),f.hasOption(a)){f.removeUnknownOption();var d=db(a);b.val(d in f.selectValueMap?d:a);var e=b[0].options[b[0].selectedIndex];Vd(de(e),!0)}else f.selectUnknownOrEmptyOption(a)},f.addOption=function(a,b){if(b[0].nodeType!==Ce){pa(a,'"option value"'),""===a&&(f.hasEmptyOption=!0,f.emptyOption=b);var c=g.get(a)||0;g.set(a,c+1),d()}},f.removeOption=function(a){var b=g.get(a);b&&(1===b?(g.delete(a),""===a&&(f.hasEmptyOption=!1,f.emptyOption=void 0)):g.set(a,b-1))},f.hasOption=function(a){return!!g.get(a)},f.$hasEmptyOption=function(){return f.hasEmptyOption},f.$isUnknownOptionSelected=function(){return b[0].options[0]===f.unknownOption[0]},f.$isEmptyOptionSelected=function(){return f.hasEmptyOption&&b[0].options[b[0].selectedIndex]===f.emptyOption[0]},f.selectUnknownOrEmptyOption=function(a){null==a&&f.emptyOption?(f.removeUnknownOption(),f.selectEmptyOption()):f.unknownOption.parent().length?f.updateUnknownOption(a):f.renderUnknownOption(a)};var h=!1,i=!1;f.registerOption=function(a,b,c,g,h){if(c.$attr.ngValue){var i,j=NaN;c.$observe("value",function(a){var c,d=b.prop("selected");u(j)&&(f.removeOption(i),delete f.selectValueMap[j],c=!0),j=db(a),i=a,f.selectValueMap[j]=a,f.addOption(a,b),b.attr("value",j),c&&d&&e()})}else g?c.$observe("value",function(a){f.readValue();var c,d=b.prop("selected");u(i)&&(f.removeOption(i),c=!0),i=a,f.addOption(a,b),c&&d&&e()}):h?a.$watch(h,function(a,d){c.$set("value",a);var g=b.prop("selected");d!==a&&f.removeOption(d),f.addOption(a,b),d&&g&&e()}):f.addOption(c.value,b);c.$observe("disabled",function(a){("true"===a||a&&b.prop("selected"))&&(f.multiple?e(!0):(f.ngModelCtrl.$setViewValue(null),f.ngModelCtrl.$render()))}),b.on("$destroy",function(){var a=f.readValue(),b=c.value;f.removeOption(b),d(),(f.multiple&&a&&-1!==a.indexOf(b)||a===b)&&e(!0)})}}],kh=function(){function a(a,b,c,d){var e=d[0],g=d[1];if(!g)return void(e.registerOption=p);if(e.ngModelCtrl=g,b.on("change",function(){e.removeUnknownOption(),a.$apply(function(){g.$setViewValue(e.readValue())})}),c.multiple){e.multiple=!0,e.readValue=function(){var a=[];return f(b.find("option"),function(b){if(b.selected&&!b.disabled){var c=b.value;a.push(c in e.selectValueMap?e.selectValueMap[c]:c)}}),a},e.writeValue=function(a){f(b.find("option"),function(b){var c=!!a&&(P(a,b.value)||P(a,e.selectValueMap[b.value]));c!==b.selected&&Vd(de(b),c)})};var h,i=NaN;a.$watch(function(){i!==g.$viewValue||T(h,g.$viewValue)||(h=va(g.$viewValue),g.$render()),i=g.$viewValue}),g.$isEmpty=function(a){return!a||0===a.length}}}function b(a,b,c,d){var e=d[1];if(e){var f=d[0];e.$render=function(){f.writeValue(e.$viewValue)}}}return{restrict:"E",require:["select","?ngModel"],controller:jh,priority:1,link:{pre:a,post:b}}},lh=["$interpolate",function(a){return{restrict:"E",priority:100,compile:function(b,c){var d,e;return u(c.ngValue)||(u(c.value)?d=a(c.value,!0):(e=a(b.text(),!0))||c.$set("value",b.text())),function(a,b,c){var f=b.parent(),g=f.data("$selectController")||f.parent().data("$selectController");g&&g.registerOption(a,b,c,d,e)}}}}],mh=function(){return{restrict:"A",require:"?ngModel",link:function(a,b,c,d){d&&(c.required=!0,d.$validators.required=function(a,b){return!c.required||!d.$isEmpty(b)},c.$observe("required",function(){d.$validate()}))}}},nh=function(){return{restrict:"A",require:"?ngModel",link:function(a,b,c,e){if(e){var f,g=c.ngPattern||c.pattern;c.$observe("pattern",function(a){if(x(a)&&a.length>0&&(a=new RegExp("^"+a+"quot;)),a&&!a.test)throw d("ngPattern")("noregexp","Expected {0} to be a RegExp but was {1}. Element: {2}",g,a,ba(b));f=a||void 0,e.$validate()}),e.$validators.pattern=function(a,b){return e.$isEmpty(b)||t(f)||f.test(b)}}}}},oh=function(){return{restrict:"A",require:"?ngModel",link:function(a,b,c,d){if(d){var e=-1;c.$observe("maxlength",function(a){var b=n(a);e=oe(b)?-1:b,d.$validate()}),d.$validators.maxlength=function(a,b){return e<0||d.$isEmpty(b)||b.length<=e}}}}},ph=function(){return{restrict:"A",require:"?ngModel",link:function(a,b,c,d){if(d){var e=0;c.$observe("minlength",function(a){e=n(a)||0,d.$validate()}),d.$validators.minlength=function(a,b){return d.$isEmpty(b)||b.length>=e}}}}};if(a.angular.bootstrap)return void(a.console&&console.log("WARNING: Tried to load angular more than once."));!function(){var b;if(!ze){var c=ue();ee=t(c)?a.jQuery:c?a[c]:void 0,ee&&ee.fn.on?(de=ee,l(ee.fn,{scope:Se.scope,isolateScope:Se.isolateScope,controller:Se.controller,injector:Se.injector,inheritedData:Se.inheritedData}),b=ee.cleanData,ee.cleanData=function(a){for(var c,d,e=0;null!=(d=a[e]);e++)(c=ee._data(d,"events"))&&c.$destroy&&ee(d).triggerHandler("$destroy");b(a)}):de=Ia,me.element=de,ze=!0}}(),function(c){l(c,{errorHandlingConfig:b,bootstrap:ja,copy:R,extend:l,merge:m,equals:T,element:de,forEach:f,injector:jb,noop:p,bind:W,toJson:Y,fromJson:Z,identity:q,isUndefined:t,isDefined:u,isString:x,isFunction:B,isObject:v,isNumber:y,isElement:M,isArray:pe,version:Fe,isDate:z,lowercase:$d,uppercase:_d,callbacks:{$counter:0},getTestability:la,reloadWithDebugInfo:ka,$minErr:d,$csp:te,$encodeUriSegment:fa,$encodeUriQuery:ga,$stringify:ta}),fe=ua(a),fe("ng",["ngLocale"],["$provide",function(a){a.provider({$sanitizeUri:Fc}),a.provider("$compile",ub).directive({a:ag,input:tg,textarea:tg,form:fg,script:hh,select:kh,option:lh,ngBind:wg,ngBindHtml:yg,ngBindTemplate:xg,ngClass:Ag,ngClassEven:Cg,ngClassOdd:Bg,ngCloak:Dg,ngController:Eg,ngForm:gg,ngHide:ah,ngIf:Hg,ngInclude:Ig,ngInit:Kg,ngNonBindable:Vg,ngPluralize:Zg,ngRepeat:$g,ngShow:_g,ngStyle:bh,ngSwitch:ch,ngSwitchWhen:dh,ngSwitchDefault:eh,ngOptions:Yg,ngTransclude:gh,ngModel:Sg,ngList:Lg,ngChange:zg,pattern:nh,ngPattern:nh,required:mh,ngRequired:mh,minlength:ph,ngMinlength:ph,maxlength:oh,ngMaxlength:oh,ngValue:vg,ngModelOptions:Ug}).directive({ngInclude:Jg}).directive(bg).directive(Fg),a.provider({$anchorScroll:kb,$animate:hf,$animateCss:lf,$animateJs:ff,$animateQueue:gf,$AnimateRunner:kf,$animateAsyncRun:jf,$browser:qb,$cacheFactory:rb,$controller:Ab,$document:Bb,$isDocumentHidden:Cb,$exceptionHandler:Db,$filter:Uc,$forceReflow:sf,$interpolate:Rb,$interval:Sb,$http:Nb,$httpParamSerializer:Fb,$httpParamSerializerJQLike:Gb,$httpBackend:Pb,$xhrFactory:Ob,$jsonpCallbacks:Af,$location:fc,$log:gc,$parse:wc,$rootScope:Ec,$q:xc,$q:yc,$sce:Kc,$sceDelegate:Jc,$sniffer:Lc,$templateCache:sb,$templateRequest:Mc,$testability:Nc,$timeout:Oc,$window:Rc,$rAF:Dc,$jqLite:cb,$Map:Ye,$cookieReader:Tc})}]).info({angularVersion:"1.6.6"})}(me),me.module("ngLocale",[],["$provide",function(a){function b(a){a+="";var b=a.indexOf(".");return-1==b?0:a.length-b-1}function c(a,c){var d=c;void 0===d&&(d=Math.min(b(a),3));var e=Math.pow(10,d);return{v:d,f:(a*e|0)%e}}var d={ZERO:"zero",ONE:"one",TWO:"two",FEW:"few",MANY:"many",OTHER:"other"};a.value("$locale",{DATETIME_FORMATS:{AMPMS:["AM","PM"],DAY:["Sunday","Monday","Tuesday","Wednesday","Thursday","Friday","Saturday"],ERANAMES:["Before Christ","Anno Domini"],ERAS:["BC","AD"],FIRSTDAYOFWEEK:6,MONTH:["January","February","March","April","May","June","July","August","September","October","November","December"],SHORTDAY:["Sun","Mon","Tue","Wed","Thu","Fri","Sat"],SHORTMONTH:["Jan","Feb","Mar","Apr","May","Jun","Jul","Aug","Sep","Oct","Nov","Dec"],STANDALONEMONTH:["January","February","March","April","May","June","July","August","September","October","November","December"],WEEKENDRANGE:[5,6],fullDate:"EEEE, MMMM d, y",longDate:"MMMM d, y",medium:"MMM d, y h:mm:ss a",mediumDate:"MMM d, y",mediumTime:"h:mm:ss a",short:"M/d/yy h:mm a",shortDate:"M/d/yy",shortTime:"h:mm a"},NUMBER_FORMATS:{CURRENCY_SYM:"quot;,DECIMAL_SEP:".",GROUP_SEP:",",PATTERNS:[{gSize:3,lgSize:3,maxFrac:3,minFrac:0,minInt:1,negPre:"-",negSuf:"",posPre:"",posSuf:""},{gSize:3,lgSize:3,maxFrac:2,minFrac:2,minInt:1,negPre:"-¤",negSuf:"",posPre:"¤",posSuf:""}]},id:"en-us",localeID:"en_US",pluralCat:function(a,b){var e=0|a,f=c(a,b);return 1==e&&0==f.v?d.ONE:d.OTHER}})}]),de(function(){ia(a.document,ja)})}(window),!window.angular.$csp().noInlineStyle&&window.angular.element(document.head).prepend('<style type="text/css">@charset "UTF-8";[ng\\:cloak],[ng-cloak],[data-ng-cloak],[x-ng-cloak],.ng-cloak,.x-ng-cloak,.ng-hide:not(.ng-hide-animate){display:none !important;}ng\\:form{display:block;}.ng-animate-shim{visibility:hidden;}.ng-anchor{position:absolute;}</style>'),function(){"use strict";angular.module("ng-slide-down",[]).directive("ngSlideDown",["$timeout",function(a){var b,c;return b=function(a,b){return void 0!==b.lazyRender?"<div ng-if='lazyRender' ng-transclude></div>":"<div ng-transclude></div>"},c=function(b,c,d,e,f){var g,h,i,j,k,l,m,n,o,p,q;return h=d.duration||1,q=d.timingFunction||"ease-in-out",i=c.scope(),j=d.emitOnClose,n=d.onClose,m=void 0!==d.lazyRender,g=null,o=null,k=function(a){var b,d,e,f,g;for(e=0,d=c.children(),f=0,g=d.length;f<g;f++)b=d[f],e+=b.clientHeight;return e+"px"},p=function(){return g&&a.cancel(g),m&&(b.lazyRender=!0),a(function(){return o&&a.cancel(o),c.css({overflow:"hidden",transitionProperty:"height",transitionDuration:h+"s",transitionTimingFunction:q,height:k()}),o=a(function(){return c.css({overflow:"visible",transition:"none",height:"auto"})},1e3*h)})},l=function(){if(o&&a.cancel(o),c.css({overflow:"hidden",transitionProperty:"height",transitionDuration:h+"s",transitionTimingFunction:q,height:"0px"}),j||n||m)return g=a(function(){if(j&&b.$emit(j,{}),n&&i.$eval(n),m)return b.lazyRender=!1},1e3*h)},b.$watch("expanded",function(b,d){return b?a(p):(null!=b&&(c.css({height:k()}),c[0].clientHeight),a(l))})},{restrict:"A",scope:{expanded:"=ngSlideDown"},transclude:!0,link:c,template:function(a,c){return b(a,c)}}}])}.call(this),function(a,b){"use strict";function c(a,b,c){if(!a)throw ia("areq","Argument '{0}' is {1}",b||"?",c||"required");return a}function d(a,b){return a||b?a?b?(U(a)&&(a=a.join(" ")),U(b)&&(b=b.join(" ")),a+" "+b):a:b:""}function e(a){var b={};return a&&(a.to||a.from)&&(b.to=a.to,b.from=a.from),b}function f(a,b,c){var d="";return a=U(a)?a:a&&Z(a)&&a.length?a.split(/\s+/):[],T(a,function(a,e){a&&a.length>0&&(d+=e>0?" ":"",d+=c?b+a:a+b)}),d}function g(a,b){var c=a.indexOf(b);b>=0&&a.splice(c,1)}function h(a){if(a instanceof _)switch(a.length){case 0:return a;case 1:if(a[0].nodeType===L)return a;break;default:return _(i(a))}if(a.nodeType===L)return _(a)}function i(a){if(!a[0])return a;for(var b=0;b<a.length;b++){var c=a[b];if(c.nodeType===L)return c}}function j(a,b,c){T(b,function(b){a.addClass(b,c)})}function k(a,b,c){T(b,function(b){a.removeClass(b,c)})}function l(a){return function(b,c){c.addClass&&(j(a,b,c.addClass),c.addClass=null),c.removeClass&&(k(a,b,c.removeClass),c.removeClass=null)}}function m(a){if(a=a||{},!a.$prepared){var b=a.domOperation||aa;a.domOperation=function(){a.$domOperationFired=!0,b(),b=aa},a.$prepared=!0}return a}function n(a,b){o(a,b),p(a,b)}function o(a,b){b.from&&(a.css(b.from),b.from=null)}function p(a,b){b.to&&(a.css(b.to),b.to=null)}function q(a,b,c){var d=b.options||{},e=c.options||{},f=(d.addClass||"")+" "+(e.addClass||""),g=(d.removeClass||"")+" "+(e.removeClass||""),h=r(a.attr("class"),f,g);e.preparationClasses&&(d.preparationClasses=y(e.preparationClasses,d.preparationClasses),delete e.preparationClasses);var i=d.domOperation!==aa?d.domOperation:null;return S(d,e),i&&(d.domOperation=i),h.addClass?d.addClass=h.addClass:d.addClass=null,h.removeClass?d.removeClass=h.removeClass:d.removeClass=null,b.addClass=d.addClass,b.removeClass=d.removeClass,d}function r(a,b,c){function d(a){Z(a)&&(a=a.split(" "));var b={};return T(a,function(a){a.length&&(b[a]=!0)}),b}var e={};a=d(a),b=d(b),T(b,function(a,b){e[b]=1}),c=d(c),T(c,function(a,b){e[b]=1===e[b]?null:-1});var f={addClass:"",removeClass:""};return T(e,function(b,c){var d,e;1===b?(d="addClass",e=!a[c]||a[c+N]):-1===b&&(d="removeClass",e=a[c]||a[c+M]),e&&(f[d].length&&(f[d]+=" "),f[d]+=c)}),f}function s(a){return a instanceof _?a[0]:a}function t(a,b,c){var d="";b&&(d=f(b,O,!0)),c.addClass&&(d=y(d,f(c.addClass,M))),c.removeClass&&(d=y(d,f(c.removeClass,N))),d.length&&(c.preparationClasses=d,a.addClass(d))}function u(a,b){b.preparationClasses&&(a.removeClass(b.preparationClasses),b.preparationClasses=null),b.activeClasses&&(a.removeClass(b.activeClasses),b.activeClasses=null)}function v(a,b){var c=b?"-"+b+"s":"";return x(a,[ga,c]),[ga,c]}function w(a,b){var c=b?"paused":"",d=J+da;return x(a,[d,c]),[d,c]}function x(a,b){var c=b[0],d=b[1];a.style[c]=d}function y(a,b){return a?b?a+" "+b:a:b}function z(a){return[fa,a+"s"]}function A(a,b){return[b?ea:ga,a+"s"]}function B(a,b,c){var d=Object.create(null),e=a.getComputedStyle(b)||{};return T(c,function(a,b){var c=e[a];if(c){var f=c.charAt(0);("-"===f||"+"===f||f>=0)&&(c=C(c)),0===c&&(c=null),d[b]=c}}),d}function C(a){var b=0,c=a.split(/\s*,\s*/);return T(c,function(a){"s"===a.charAt(a.length-1)&&(a=a.substring(0,a.length-1)),a=parseFloat(a)||0,b=b?Math.max(a,b):a}),b}function D(a){return 0===a||null!=a}function E(a,b){var c=H,d=a+"s";return b?c+=ba:d+=" linear all",[c,d]}function F(){var a=Object.create(null);return{flush:function(){a=Object.create(null)},count:function(b){var c=a[b];return c?c.total:0},get:function(b){var c=a[b];return c&&c.value},put:function(b,c){a[b]?a[b].total++:a[b]={total:1,value:c}}}}function G(a,b,c){T(c,function(c){a[c]=V(a[c])?a[c]:b.style.getPropertyValue(c)})}var H,I,J,K,L=1,M="-add",N="-remove",O="ng-",P="ng-animate",Q="$ngAnimateChildren";void 0===a.ontransitionend&&void 0!==a.onwebkittransitionend?("-webkit-",H="WebkitTransition",I="webkitTransitionEnd transitionend"):(H="transition",I="transitionend"),void 0===a.onanimationend&&void 0!==a.onwebkitanimationend?("-webkit-",J="WebkitAnimation",K="webkitAnimationEnd animationend"):(J="animation",K="animationend");var R,S,T,U,V,W,X,Y,Z,$,_,aa,ba="Duration",ca="TimingFunction",da="PlayState",ea=J+"Delay",fa=J+ba,ga=H+"Delay",ha=H+ba,ia=b.$minErr("ng"),ja=["$rAF",function(a){function b(a){d=d.concat(a),c()}function c(){if(d.length){for(var b=d.shift(),f=0;f<b.length;f++)b[f]();e||a(function(){e||c()})}}var d,e;return d=b.queue=[],b.waitUntilQuiet=function(b){e&&e(),e=a(function(){e=null,b(),c()})},b}],ka=["$interpolate",function(a){return{link:function(b,c,d){function e(a){a="on"===a||"true"===a,c.data(Q,a)}var f=d.ngAnimateChildren;Z(f)&&0===f.length?c.data(Q,!0):(e(a(f)(b)),d.$observe("ngAnimateChildren",e))}}}],la="$animateCss",ma=1e3,na=3,oa=1.5,pa={transitionDuration:ha,transitionDelay:ga,transitionProperty:H+"Property",animationDuration:fa,animationDelay:ea,animationIterationCount:J+"IterationCount"},qa={transitionDuration:ha,transitionDelay:ga,animationDuration:fa,animationDelay:ea},ra=["$animateProvider",function(a){var b=F(),c=F();this.$get=["$window","$jqLite","$AnimateRunner","$timeout","$forceReflow","$sniffer","$rAFScheduler","$animateQueue",function(a,d,h,i,j,k,q,r){function t(a,b){var c="$ngAnimateParentKey",d=a.parentNode;return(d[c]||(d[c]=++P))+"-"+a.getAttribute("class")+"-"+b}function u(c,d,e,f){var g=b.get(e);return g||(g=B(a,c,f),"infinite"===g.animationIterationCount&&(g.animationIterationCount=1)),b.put(e,g),g}function y(e,g,h,i){var j;if(b.count(h)>0&&!(j=c.get(h))){var k=f(g,"-stagger");d.addClass(e,k),j=B(a,e,i),j.animationDuration=Math.max(j.animationDuration,0),j.transitionDuration=Math.max(j.transitionDuration,0),d.removeClass(e,k),c.put(h,j)}return j||{}}function C(a){Q.push(a),q.waitUntilQuiet(function(){b.flush(),c.flush();for(var a=j(),d=0;d<Q.length;d++)Q[d](a);Q.length=0})}function F(a,b,c){var d=u(a,b,c,pa),e=d.animationDelay,f=d.transitionDelay;return d.maxDelay=e&&f?Math.max(e,f):e||f,d.maxDuration=Math.max(d.animationDuration*d.animationIterationCount,d.transitionDuration),d}var L=l(d),P=0,Q=[];return function(a,c){function j(){q()}function l(){q(!0)}function q(b){if(!(X||Z&&Y)){X=!0,Y=!1,S.$skipPreparationClasses||d.removeClass(a,ua),d.removeClass(a,wa),w(W,!1),v(W,!1),T(ha,function(a){W.style[a[0]]=""}),L(a,S),n(a,S),Object.keys(V).length&&T(V,function(a,b){a?W.style.setProperty(b,a):W.style.removeProperty(b)}),S.onDone&&S.onDone(),ka&&ka.length&&a.off(ka.join(" "),P);var c=a.data(la);c&&(i.cancel(c[0].timer),a.removeData(la)),amp;&$.complete(!b)}}function u(a){Ja.blockTransition&&v(W,a),Ja.blockKeyframeAnimation&&w(W,!!a)}function B(){return $=new h({end:j,cancel:l}),C(aa),q(),{$willAnimate:!1,start:function(){return $},end:j}}function P(a){a.stopPropagation();var b=a.originalEvent||a,c=b.$manualTimeStamp||Date.now(),d=parseFloat(b.elapsedTime.toFixed(na));Math.max(c-ga,0)>=da&&d>=ea&&(Z=!0,q())}function Q(){function b(){if(!X){if(u(!1),T(ha,function(a){var b=a[0],c=a[1];W.style[b]=c}),L(a,S),d.addClass(a,wa),Ja.recalculateTimingStyles){if(va=W.getAttribute("class")+" "+ua,ya=t(W,va),Ha=F(W,va,ya),Ia=Ha.maxDelay,ba=Math.max(Ia,0),0===(ea=Ha.maxDuration))return void q();Ja.hasTransitions=Ha.transitionDuration>0,Ja.hasAnimations=Ha.animationDuration>0}if(Ja.applyAnimationDelay&&(Ia="boolean"!=typeof S.delay&&D(S.delay)?parseFloat(S.delay):Ia,ba=Math.max(Ia,0),Ha.animationDelay=Ia,Ka=A(Ia,!0),ha.push(Ka),W.style[Ka[0]]=Ka[1]),da=ba*ma,fa=ea*ma,S.easing){var b,e=S.easing;Ja.hasTransitions&&(b=H+ca,ha.push([b,e]),W.style[b]=e),Ja.hasAnimations&&(b=J+ca,ha.push([b,e]),W.style[b]=e)}Ha.transitionDuration&&ka.push(I),Ha.animationDuration&&ka.push(K),ga=Date.now();var f=da+oa*fa,g=ga+f,h=a.data(la)||[],j=!0;if(h.length){var k=h[0];j=g>k.expectedEndTime,j?i.cancel(k.timer):h.push(q)}if(j){var l=i(c,f,!1);h[0]={timer:l,expectedEndTime:g},h.push(q),a.data(la,h)}ka.length&&a.on(ka.join(" "),P),S.to&&(S.cleanupStyles&&G(V,W,Object.keys(S.to)),p(a,S))}}function c(){var b=a.data(la);if(b){for(var c=1;c<b.length;c++)b[c]();a.removeData(la)}}if(!X){if(!W.parentNode)return void q();var e=function(a){if(Z)Y&&a&&(Y=!1,q());else if(Y=!a,Ha.animationDuration){var b=w(W,Y);Y?ha.push(b):g(ha,b)}},f=Fa>0&&(Ha.transitionDuration&&0===za.transitionDuration||Ha.animationDuration&&0===za.animationDuration)&&Math.max(za.animationDelay,za.transitionDelay);f?i(b,Math.floor(f*Fa*ma),!1):b(),_.resume=function(){e(!0)},_.pause=function(){e(!1)}}}var S=c||{};S.$prepared||(S=m(R(S)));var V={},W=s(a);if(!W||!W.parentNode||!r.enabled())return B();var X,Y,Z,$,_,ba,da,ea,fa,ga,ha=[],ia=a.attr("class"),ja=e(S),ka=[];if(0===S.duration||!k.animations&&!k.transitions)return B();var pa=S.event&&U(S.event)?S.event.join(" "):S.event,ra=pa&&S.structural,sa="",ta="";ra?sa=f(pa,O,!0):pa&&(sa=pa),S.addClass&&(ta+=f(S.addClass,M)),S.removeClass&&(ta.length&&(ta+=" "),ta+=f(S.removeClass,N)),S.applyClassesEarly&&ta.length&&L(a,S);var ua=[sa,ta].join(" ").trim(),va=ia+" "+ua,wa=f(ua,"-active"),xa=ja.to&&Object.keys(ja.to).length>0;if(!((S.keyframeStyle||"").length>0||xa||ua))return B();var ya,za;if(S.stagger>0){var Aa=parseFloat(S.stagger);za={transitionDelay:Aa,animationDelay:Aa,transitionDuration:0,animationDuration:0}}else ya=t(W,va),za=y(W,ua,ya,qa);S.$skipPreparationClasses||d.addClass(a,ua);var Ba;if(S.transitionStyle){var Ca=[H,S.transitionStyle];x(W,Ca),ha.push(Ca)}if(S.duration>=0){Ba=W.style[H].length>0;var Da=E(S.duration,Ba);x(W,Da),ha.push(Da)}if(S.keyframeStyle){var Ea=[J,S.keyframeStyle];x(W,Ea),ha.push(Ea)}var Fa=za?S.staggerIndex>=0?S.staggerIndex:b.count(ya):0,Ga=0===Fa;Ga&&!S.skipBlocking&&v(W,9999);var Ha=F(W,va,ya),Ia=Ha.maxDelay;ba=Math.max(Ia,0),ea=Ha.maxDuration;var Ja={};if(Ja.hasTransitions=Ha.transitionDuration>0,Ja.hasAnimations=Ha.animationDuration>0,Ja.hasTransitionAll=Ja.hasTransitions&&"all"===Ha.transitionProperty,Ja.applyTransitionDuration=xa&&(Ja.hasTransitions&&!Ja.hasTransitionAll||Ja.hasAnimations&&!Ja.hasTransitions),Ja.applyAnimationDuration=S.duration&&Ja.hasAnimations,Ja.applyTransitionDelay=D(S.delay)&&(Ja.applyTransitionDuration||Ja.hasTransitions),Ja.applyAnimationDelay=D(S.delay)&&Ja.hasAnimations,Ja.recalculateTimingStyles=ta.length>0,(Ja.applyTransitionDuration||Ja.applyAnimationDuration)&&(ea=S.duration?parseFloat(S.duration):ea,Ja.applyTransitionDuration&&(Ja.hasTransitions=!0,Ha.transitionDuration=ea,Ba=W.style[H+"Property"].length>0,ha.push(E(ea,Ba))),Ja.applyAnimationDuration&&(Ja.hasAnimations=!0,Ha.animationDuration=ea,ha.push(z(ea)))),0===ea&&!Ja.recalculateTimingStyles)return B();if(null!=S.delay){var Ka;"boolean"!=typeof S.delay&&(Ka=parseFloat(S.delay),ba=Math.max(Ka,0)),Ja.applyTransitionDelay&&ha.push(A(Ka)),Ja.applyAnimationDelay&&ha.push(A(Ka,!0))}return null==S.duration&&Ha.transitionDuration>0&&(Ja.recalculateTimingStyles=Ja.recalculateTimingStyles||Ga),da=ba*ma,fa=ea*ma,S.skipBlocking||(Ja.blockTransition=Ha.transitionDuration>0,Ja.blockKeyframeAnimation=Ha.animationDuration>0&&za.animationDelay>0&&0===za.animationDuration),S.from&&(S.cleanupStyles&&G(V,W,Object.keys(S.from)),o(a,S)),Ja.blockTransition||Ja.blockKeyframeAnimation?u(ea):S.skipBlocking||v(W,!1),{$willAnimate:!0,end:j,start:function(){if(!X)return _={end:j,cancel:l,resume:null,pause:null},$=new h(_),C(Q),$}}}}]}],sa=["$animationProvider",function(a){function b(a){return a.parentNode&&11===a.parentNode.nodeType}a.drivers.push("$animateCssDriver");var c="ng-animate-shim",d="ng-anchor-out";this.$get=["$animateCss","$rootScope","$AnimateRunner","$rootElement","$sniffer","$jqLite","$document",function(a,e,f,g,h,i,j){function k(a){return a.replace(/\bng-\S+\b/g,"")}function l(a,b){return Z(a)&&(a=a.split(" ")),Z(b)&&(b=b.split(" ")),a.filter(function(a){return-1===b.indexOf(a)}).join(" ")}function m(b,e,g){function h(a){var b={},c=s(a).getBoundingClientRect();return T(["width","height","top","left"],function(a){var d=c[a];switch(a){case"top":d+=p.scrollTop;break;case"left":d+=p.scrollLeft}b[a]=Math.floor(d)+"px"}),b}function i(a){return a.attr("class")||""}function j(){var b=k(i(g)),c=l(b,o),e=l(o,b),f=a(n,{to:h(g),addClass:"ng-anchor-in "+c,removeClass:d+" "+e,delay:!0});return f.$willAnimate?f:null}function m(){n.remove(),e.removeClass(c),g.removeClass(c)}var n=_(s(e).cloneNode(!0)),o=k(i(n));e.addClass(c),g.addClass(c),n.addClass("ng-anchor"),r.append(n);var q,t=function(){var b=a(n,{addClass:d,delay:!0,from:h(e)});return b.$willAnimate?b:null}();if(!t&&!(q=j()))return m();var u=t||q;return{start:function(){function a(){c&&c.end()}var b,c=u.start();return c.done(function(){if(c=null,!q&&(q=j()))return c=q.start(),c.done(function(){c=null,m(),b.complete()}),c;m(),b.complete()}),b=new f({end:a,cancel:a})}}}function n(a,b,c,d){
7
+ var e=o(a),g=o(b),h=[];if(T(d,function(a){var b=a.out,d=a.in,e=m(c,b,d);e&&h.push(e)}),e||g||0!==h.length)return{start:function(){function a(){T(b,function(a){a.end()})}var b=[];e&&b.push(e.start()),g&&b.push(g.start()),T(h,function(a){b.push(a.start())});var c=new f({end:a,cancel:a});return f.all(b,function(a){c.complete(a)}),c}}}function o(b){var c=b.element,d=b.options||{};b.structural&&(d.event=b.event,d.structural=!0,d.applyClassesEarly=!0,"leave"===b.event&&(d.onDone=d.domOperation)),d.preparationClasses&&(d.event=y(d.event,d.preparationClasses));var e=a(c,d);return e.$willAnimate?e:null}if(!h.animations&&!h.transitions)return aa;var p=j[0].body,q=s(g),r=_(b(q)||p.contains(q)?q:p);return function(a){return a.from&&a.to?n(a.from,a.to,a.classes,a.anchors):o(a)}}]}],ta=["$animateProvider",function(a){this.$get=["$injector","$AnimateRunner","$jqLite",function(b,c,d){function e(c){c=U(c)?c:c.split(" ");for(var d=[],e={},f=0;f<c.length;f++){var g=c[f],h=a.$registeredAnimations[g];h&&!e[g]&&(d.push(b.get(h)),e[g]=!0)}return d}var f=l(d);return function(a,b,d,g){function h(){g.domOperation(),f(a,g)}function i(){o=!0,h(),n(a,g)}function j(a,b,d,e,f){var g;switch(d){case"animate":g=[b,e.from,e.to,f];break;case"setClass":g=[b,r,s,f];break;case"addClass":g=[b,r,f];break;case"removeClass":g=[b,s,f];break;default:g=[b,f]}g.push(e);var h=a.apply(a,g);if(h)if(X(h.start)&&(h=h.start()),h instanceof c)h.done(f);else if(X(h))return h;return aa}function k(a,b,d,e,f){var g=[];return T(e,function(e){var h=e[f];h&&g.push(function(){var e,f,g=!1,i=function(a){g||(g=!0,(f||aa)(a),e.complete(!a))};return e=new c({end:function(){i()},cancel:function(){i(!0)}}),f=j(h,a,b,d,function(a){i(!1===a)}),e})}),g}function l(a,b,d,e,f){var g=k(a,b,d,e,f);if(0===g.length){var h,i;"beforeSetClass"===f?(h=k(a,"removeClass",d,e,"beforeRemoveClass"),i=k(a,"addClass",d,e,"beforeAddClass")):"setClass"===f&&(h=k(a,"removeClass",d,e,"removeClass"),i=k(a,"addClass",d,e,"addClass")),h&&(g=g.concat(h)),i&&(g=g.concat(i))}if(0!==g.length)return function(a){var b=[];return g.length&&T(g,function(a){b.push(a())}),b.length?c.all(b,a):a(),function(a){T(b,function(b){a?b.cancel():b.end()})}}}var o=!1;3===arguments.length&&Y(d)&&(g=d,d=null),g=m(g),d||(d=a.attr("class")||"",g.addClass&&(d+=" "+g.addClass),g.removeClass&&(d+=" "+g.removeClass));var p,q,r=g.addClass,s=g.removeClass,t=e(d);if(t.length){var u,v;"leave"===b?(v="leave",u="afterLeave"):(v="before"+b.charAt(0).toUpperCase()+b.substr(1),u=b),"enter"!==b&&"move"!==b&&(p=l(a,b,g,t,v)),q=l(a,b,g,t,u)}if(p||q){var w;return{$willAnimate:!0,end:function(){return w?w.end():(i(),w=new c,w.complete(!0)),w},start:function(){function a(a){i(a),w.complete(a)}function b(b){o||((d||aa)(b),a(b))}if(w)return w;w=new c;var d,e=[];return p&&e.push(function(a){d=p(a)}),e.length?e.push(function(a){h(),a(!0)}):h(),q&&e.push(function(a){d=q(a)}),w.setHost({end:function(){b()},cancel:function(){b(!0)}}),c.chain(e,a),w}}}}}]}],ua=["$animationProvider",function(a){a.drivers.push("$animateJsDriver"),this.$get=["$animateJs","$AnimateRunner",function(a,b){function c(b){var c=b.element,d=b.event,e=b.options,f=b.classes;return a(c,d,f,e)}return function(a){if(a.from&&a.to){var d=c(a.from),e=c(a.to);if(!d&&!e)return;return{start:function(){function a(){return function(){T(f,function(a){a.end()})}}function c(a){g.complete(a)}var f=[];d&&f.push(d.start()),e&&f.push(e.start()),b.all(f,c);var g=new b({end:a(),cancel:a()});return g}}}return c(a)}}]}],va="data-ng-animate",wa="$ngAnimatePin",xa=["$animateProvider",function(b){function d(a){if(!a)return null;var b=a.split(o),c=Object.create(null);return T(b,function(a){c[a]=!0}),c}function e(a,b){if(a&&b){var c=d(b);return a.split(o).some(function(a){return c[a]})}}function f(a,b,c){return p[a].some(function(a){return a(b,c)})}function g(a,b){var c=(a.addClass||"").length>0,d=(a.removeClass||"").length>0;return b?c&&d:c||d}var j=1,k=2,o=" ",p=this.rules={skip:[],cancel:[],join:[]};p.join.push(function(a,b){return!a.structural&&g(a)}),p.skip.push(function(a,b){return!a.structural&&!g(a)}),p.skip.push(function(a,b){return"leave"===b.event&&a.structural}),p.skip.push(function(a,b){return b.structural&&b.state===k&&!a.structural}),p.cancel.push(function(a,b){return b.structural&&a.structural}),p.cancel.push(function(a,b){return b.state===k&&a.structural}),p.cancel.push(function(a,b){if(b.structural)return!1;var c=a.addClass,d=a.removeClass,f=b.addClass,g=b.removeClass;return!($(c)&&$(d)||$(f)&&$(g))&&(e(c,g)||e(d,f))}),this.$get=["$rAF","$rootScope","$rootElement","$document","$Map","$animation","$AnimateRunner","$templateRequest","$jqLite","$forceReflow","$isDocumentHidden",function(d,e,o,p,r,v,w,x,y,z,A){function B(){var a=!1;return function(b){a?b():e.$postDigest(function(){a=!0,b()})}}function C(a,b){return q(a,b,{})}function D(a,b,c){var d=[],e=X[c];return e&&T(e,function(e){ga.call(e.node,b)?d.push(e.callback):"leave"===c&&ga.call(e.node,a)&&d.push(e.callback)}),d}function E(a,b,c){var d=i(b);return a.filter(function(a){return!(a.node===d&&(!c||a.callback===c))})}function F(a,b){"close"!==a||b.parentNode||ha.off(b)}function G(a,b,c){function i(a,b,c,e){z(function(){var a=D(x,r,b);a.length?d(function(){T(a,function(a){a(p,c,e)}),F(c,r)}):F(c,r)}),a.progress(b,c,e)}function l(a){u(p,o),fa(p,o),n(p,o),o.domOperation(),y.complete(!a)}var o=R(c),p=h(a),r=s(p),x=r&&r.parentNode;o=m(o);var y=new w,z=B();if(U(o.addClass)&&(o.addClass=o.addClass.join(" ")),o.addClass&&!Z(o.addClass)&&(o.addClass=null),U(o.removeClass)&&(o.removeClass=o.removeClass.join(" ")),o.removeClass&&!Z(o.removeClass)&&(o.removeClass=null),o.from&&!Y(o.from)&&(o.from=null),o.to&&!Y(o.to)&&(o.to=null),!(O&&r&&da(r,b,c)&&ea(r,o)))return l(),y;var E=["enter","move","leave"].indexOf(b)>=0,G=A(),L=G||N.get(r),P=!L&&M.get(r)||{},Q=!!P.state;if(L||Q&&P.state===j||(L=!J(r,x,b)),L)return G&&i(y,b,"start"),l(),G&&i(y,b,"close"),y;E&&H(r);var S={structural:E,element:p,event:b,addClass:o.addClass,removeClass:o.removeClass,close:l,options:o,runner:y};if(Q){if(f("skip",S,P))return P.state===k?(l(),y):(q(p,P,S),P.runner);if(f("cancel",S,P))if(P.state===k)P.runner.end();else{if(!P.structural)return q(p,P,S),P.runner;P.close()}else{if(f("join",S,P)){if(P.state!==k)return t(p,E?b:null,o),b=S.event=P.event,o=q(p,P,S),P.runner;C(p,S)}}}else C(p,S);var V=S.structural;if(V||(V="animate"===S.event&&Object.keys(S.options.to||{}).length>0||g(S)),!V)return l(),I(r),y;var W=(P.counter||0)+1;return S.counter=W,K(r,j,S),e.$postDigest(function(){p=h(a);var c=M.get(r),d=!c;c=c||{};var e=p.parent()||[],f=e.length>0&&("animate"===c.event||c.structural||g(c));if(d||c.counter!==W||!f)return d&&(fa(p,o),n(p,o)),(d||E&&c.event!==b)&&(o.domOperation(),y.end()),void(f||I(r));b=!c.structural&&g(c,!0)?"setClass":c.event,K(r,k);var j=v(p,b,c.options);y.setHost(j),i(y,b,"start",{}),j.done(function(a){l(!a);var c=M.get(r);c&&c.counter===W&&I(r),i(y,b,"close",{})})}),y}function H(a){var b=a.querySelectorAll("["+va+"]");T(b,function(a){var b=parseInt(a.getAttribute(va),10),c=M.get(a);if(c)switch(b){case k:c.runner.end();case j:M.delete(a)}})}function I(a){a.removeAttribute(va),M.delete(a)}function J(a,b,c){var d,e=p[0].body,f=s(o),g=a===e||"HTML"===a.nodeName,h=a===f,i=!1,j=N.get(a),k=_.data(a,wa);for(k&&(b=s(k));b&&(h||(h=b===f),b.nodeType===L);){var l=M.get(b)||{};if(!i){var m=N.get(b);if(!0===m&&!1!==j){j=!0;break}!1===m&&(j=!1),i=l.structural}if($(d)||!0===d){var n=_.data(b,Q);V(n)&&(d=n)}if(i&&!1===d)break;if(g||(g=b===e),g&&h)break;b=h||!(k=_.data(b,wa))?b.parentNode:s(k)}return(!i||d)&&!0!==j&&h&&g}function K(a,b,c){c=c||{},c.state=b,a.setAttribute(va,b);var d=M.get(a),e=d?S(d,c):c;M.set(a,e)}var M=new r,N=new r,O=null,P=e.$watch(function(){return 0===x.totalPendingRequests},function(a){a&&(P(),e.$postDigest(function(){e.$postDigest(function(){null===O&&(O=!0)})}))}),X=Object.create(null),aa=b.customFilter(),ba=b.classNameFilter(),ca=function(){return!0},da=aa||ca,ea=ba?function(a,b){var c=[a.getAttribute("class"),b.addClass,b.removeClass].join(" ");return ba.test(c)}:ca,fa=l(y),ga=a.Node.prototype.contains||function(a){return this===a||!!(16&this.compareDocumentPosition(a))},ha={on:function(a,b,c){var d=i(b);X[a]=X[a]||[],X[a].push({node:d,callback:c}),_(b).on("$destroy",function(){M.get(d)||ha.off(a,b,c)})},off:function(a,b,c){if(1!==arguments.length||Z(arguments[0])){var d=X[a];d&&(X[a]=1===arguments.length?null:E(d,b,c))}else{b=arguments[0];for(var e in X)X[e]=E(X[e],b)}},pin:function(a,b){c(W(a),"element","not an element"),c(W(b),"parentElement","not an element"),a.data(wa,b)},push:function(a,b,c,d){return c=c||{},c.domOperation=d,G(a,b,c)},enabled:function(a,b){var c=arguments.length;if(0===c)b=!!O;else{if(W(a)){var d=s(a);1===c?b=!N.get(d):N.set(d,!b)}else b=O=!!a}return b}};return ha}]}],ya=["$animateProvider",function(a){function b(a,b){a.data(h,b)}function c(a){a.removeData(h)}function e(a){return a.data(h)}var f="ng-animate-ref",g=this.drivers=[],h="$animationRunner";this.$get=["$jqLite","$rootScope","$injector","$AnimateRunner","$Map","$rAFScheduler",function(a,h,i,j,k,o){function p(a){function b(a){if(a.processed)return a;a.processed=!0;var c=a.domNode,f=c.parentNode;e.set(c,a);for(var g;f;){if(g=e.get(f)){g.processed||(g=b(g));break}f=f.parentNode}return(g||d).children.push(a),a}var c,d={children:[]},e=new k;for(c=0;c<a.length;c++){var f=a[c];e.set(f.domNode,a[c]={domNode:f.domNode,fn:f.fn,children:[]})}for(c=0;c<a.length;c++)b(a[c]);return function(a){var b,c=[],d=[];for(b=0;b<a.children.length;b++)d.push(a.children[b]);var e=d.length,f=0,g=[];for(b=0;b<d.length;b++){var h=d[b];e<=0&&(e=f,f=0,c.push(g),g=[]),g.push(h.fn),h.children.forEach(function(a){f++,d.push(a)}),e--}return g.length&&c.push(g),c}(d)}var q=[],r=l(a);return function(k,l,t){function u(a){var b="["+f+"]",c=a.hasAttribute(f)?[a]:a.querySelectorAll(b),d=[];return T(c,function(a){var b=a.getAttribute(f);b&&b.length&&d.push(a)}),d}function v(a){var b=[],c={};T(a,function(a,d){var e=a.element,g=s(e),h=a.event,i=["enter","move"].indexOf(h)>=0,j=a.structural?u(g):[];if(j.length){var k=i?"to":"from";T(j,function(a){var b=a.getAttribute(f);c[b]=c[b]||{},c[b][k]={animationID:d,element:_(a)}})}else b.push(a)});var d={},e={};return T(c,function(c,f){var g=c.from,h=c.to;if(!g||!h){var i=g?g.animationID:h.animationID,j=i.toString();return void(d[j]||(d[j]=!0,b.push(a[i])))}var k=a[g.animationID],l=a[h.animationID],m=g.animationID.toString();if(!e[m]){var n=e[m]={structural:!0,beforeStart:function(){k.beforeStart(),l.beforeStart()},close:function(){k.close(),l.close()},classes:w(k.classes,l.classes),from:k,to:l,anchors:[]};n.classes.length?b.push(n):(b.push(k),b.push(l))}e[m].anchors.push({out:g.element,in:h.element})}),b}function w(a,b){a=a.split(" "),b=b.split(" ");for(var c=[],d=0;d<a.length;d++){var e=a[d];if("ng-"!==e.substring(0,3))for(var f=0;f<b.length;f++)if(e===b[f]){c.push(e);break}}return c.join(" ")}function x(a){for(var b=g.length-1;b>=0;b--){var c=g[b],d=i.get(c),e=d(a);if(e)return e}}function y(){k.addClass(P),F&&a.addClass(k,F),G&&(a.removeClass(k,G),G=null)}function z(a,b){function c(a){var c=e(a);c&&c.setHost(b)}a.from&&a.to?(c(a.from.element),c(a.to.element)):c(a.element)}function A(){var a=e(k);!a||"leave"===l&&t.$domOperationFired||a.end()}function B(b){k.off("$destroy",A),c(k),r(k,t),n(k,t),t.domOperation(),F&&a.removeClass(k,F),k.removeClass(P),D.complete(!b)}t=m(t);var C=["enter","move","leave"].indexOf(l)>=0,D=new j({end:function(){B()},cancel:function(){B(!0)}});if(!g.length)return B(),D;b(k,D);var E=d(k.attr("class"),d(t.addClass,t.removeClass)),F=t.tempClasses;F&&(E+=" "+F,t.tempClasses=null);var G;return C&&(G="ng-"+l+"-prepare",a.addClass(k,G)),q.push({element:k,classes:E,event:l,structural:C,options:t,beforeStart:y,close:B}),k.on("$destroy",A),q.length>1?D:(h.$postDigest(function(){var a=[];T(q,function(b){e(b.element)?a.push(b):b.close()}),q.length=0;var b=v(a),c=[];T(b,function(a){c.push({domNode:s(a.from?a.from.element:a.element),fn:function(){a.beforeStart();var b,c=a.close;if(e(a.anchors?a.from.element||a.to.element:a.element)){var d=x(a);d&&(b=d.start)}if(b){var f=b();f.done(function(a){c(!a)}),z(a,f)}else c()}})}),o(p(c))}),D)}}]}],za=["$animate","$rootScope",function(a,b){return{restrict:"A",transclude:"element",terminal:!0,priority:600,link:function(b,c,d,e,f){var g,h;b.$watchCollection(d.ngAnimateSwap||d.for,function(d){g&&a.leave(g),h&&(h.$destroy(),h=null),(d||0===d)&&(h=b.$new(),f(h,function(b){g=b,a.enter(b,null,c)}))})}}}];b.module("ngAnimate",[],function(){aa=b.noop,R=b.copy,S=b.extend,_=b.element,T=b.forEach,U=b.isArray,Z=b.isString,Y=b.isObject,$=b.isUndefined,V=b.isDefined,X=b.isFunction,W=b.isElement}).info({angularVersion:"1.6.6"}).directive("ngAnimateSwap",za).directive("ngAnimateChildren",ka).factory("$rAFScheduler",ja).provider("$animateQueue",xa).provider("$animation",ya).provider("$animateCss",ra).provider("$animateCssDriver",sa).provider("$animateJs",ta).provider("$animateJsDriver",ua)}(window,window.angular),function(a,b){"use strict";function c(){function c(a,b){var c,d={},e=a.split(",");for(c=0;c<e.length;c++)d[b?i(e[c]):e[c]]=!0;return d}function d(a,b){null===a||void 0===a?a="":"string"!=typeof a&&(a=""+a);var c=J(a);if(!c)return"";var d=5;do{if(0===d)throw n("uinput","Failed to sanitize html because the input is unstable");d--,a=c.innerHTML,c=J(a)}while(a!==c.innerHTML);for(var e=c.firstChild;e;){switch(e.nodeType){case 1:b.start(e.nodeName.toLowerCase(),o(e.attributes));break;case 3:b.chars(e.textContent)}var f;if(!((f=e.firstChild)||(1===e.nodeType&&b.end(e.nodeName.toLowerCase()),f=s("nextSibling",e))))for(;null==f&&(e=s("parentNode",e))!==c;)f=s("nextSibling",e),1===e.nodeType&&b.end(e.nodeName.toLowerCase());e=f}for(;e=c.firstChild;)c.removeChild(e)}function o(a){for(var b={},c=0,d=a.length;c<d;c++){var e=a[c];b[e.name]=e.value}return b}function p(a){return a.replace(/&/g,"&amp;").replace(u,function(a){return"&#"+(1024*(a.charCodeAt(0)-55296)+(a.charCodeAt(1)-56320)+65536)+";"}).replace(v,function(a){return"&#"+a.charCodeAt(0)+";"}).replace(/</g,"&lt;").replace(/>/g,"&gt;")}function q(a,b){var c=!1,d=e(a,a.push);return{start:function(a,e){a=i(a),!c&&D[a]&&(c=a),c||!0!==E[a]||(d("<"),d(a),g(e,function(c,e){var f=i(e),g="img"===a&&"src"===f||"background"===f;!0!==I[f]||!0===F[f]&&!b(c,g)||(d(" "),d(e),d('="'),d(p(c)),d('"'))}),d(">"))},end:function(a){a=i(a),c||!0!==E[a]||!0===w[a]||(d("</"),d(a),d(">")),a==c&&(c=!1)},chars:function(a){c||d(p(a))}}}function r(b){for(;b;){if(b.nodeType===a.Node.ELEMENT_NODE)for(var c=b.attributes,d=0,e=c.length;d<e;d++){var f=c[d],g=f.name.toLowerCase();"xmlns:ns1"!==g&&0!==g.lastIndexOf("ns1:",0)||(b.removeAttributeNode(f),d--,e--)}var h=b.firstChild;h&&r(h),b=s("nextSibling",b)}}function s(a,b){var c=b[a];if(c&&k.call(b,c))throw n("elclob","Failed to sanitize html because the element is clobbered: {0}",b.outerHTML||b.outerText);return c}var t=!1;this.$get=["$sanitizeUri",function(a){return t&&f(E,C),function(b){var c=[];return l(b,m(c,function(b,c){return!/^unsafe:/.test(a(b,c))})),c.join("")}}],this.enableSvg=function(a){return h(a)?(t=a,this):t},e=b.bind,f=b.extend,g=b.forEach,h=b.isDefined,i=b.lowercase,j=b.noop,l=d,m=q,k=a.Node.prototype.contains||function(a){return!!(16&this.compareDocumentPosition(a))};var u=/[\uD800-\uDBFF][\uDC00-\uDFFF]/g,v=/([^#-~ |!])/g,w=c("area,br,col,hr,img,wbr"),x=c("colgroup,dd,dt,li,p,tbody,td,tfoot,th,thead,tr"),y=c("rp,rt"),z=f({},y,x),A=f({},x,c("address,article,aside,blockquote,caption,center,del,dir,div,dl,figure,figcaption,footer,h1,h2,h3,h4,h5,h6,header,hgroup,hr,ins,map,menu,nav,ol,pre,section,table,ul")),B=f({},y,c("a,abbr,acronym,b,bdi,bdo,big,br,cite,code,del,dfn,em,font,i,img,ins,kbd,label,map,mark,q,ruby,rp,rt,s,samp,small,span,strike,strong,sub,sup,time,tt,u,var")),C=c("circle,defs,desc,ellipse,font-face,font-face-name,font-face-src,g,glyph,hkern,image,linearGradient,line,marker,metadata,missing-glyph,mpath,path,polygon,polyline,radialGradient,rect,stop,svg,switch,text,title,tspan"),D=c("script,style"),E=f({},w,A,B,z),F=c("background,cite,href,longdesc,src,xlink:href"),G=c("abbr,align,alt,axis,bgcolor,border,cellpadding,cellspacing,class,clear,color,cols,colspan,compact,coords,dir,face,headers,height,hreflang,hspace,ismap,lang,language,nohref,nowrap,rel,rev,rows,rowspan,rules,scope,scrolling,shape,size,span,start,summary,tabindex,target,title,type,valign,value,vspace,width"),H=c("accent-height,accumulate,additive,alphabetic,arabic-form,ascent,baseProfile,bbox,begin,by,calcMode,cap-height,class,color,color-rendering,content,cx,cy,d,dx,dy,descent,display,dur,end,fill,fill-rule,font-family,font-size,font-stretch,font-style,font-variant,font-weight,from,fx,fy,g1,g2,glyph-name,gradientUnits,hanging,height,horiz-adv-x,horiz-origin-x,ideographic,k,keyPoints,keySplines,keyTimes,lang,marker-end,marker-mid,marker-start,markerHeight,markerUnits,markerWidth,mathematical,max,min,offset,opacity,orient,origin,overline-position,overline-thickness,panose-1,path,pathLength,points,preserveAspectRatio,r,refX,refY,repeatCount,repeatDur,requiredExtensions,requiredFeatures,restart,rotate,rx,ry,slope,stemh,stemv,stop-color,stop-opacity,strikethrough-position,strikethrough-thickness,stroke,stroke-dasharray,stroke-dashoffset,stroke-linecap,stroke-linejoin,stroke-miterlimit,stroke-opacity,stroke-width,systemLanguage,target,text-anchor,to,transform,type,u1,u2,underline-position,underline-thickness,unicode,unicode-range,units-per-em,values,version,viewBox,visibility,width,widths,x,x-height,x1,x2,xlink:actuate,xlink:arcrole,xlink:role,xlink:show,xlink:title,xlink:type,xml:base,xml:lang,xml:space,xmlns,xmlns:xlink,y,y1,y2,zoomAndPan",!0),I=f({},F,H,G),J=function(a,b){function c(b){b="<remove></remove>"+b;try{b=encodeURI(b)}catch(a){return}var c=new a.XMLHttpRequest;c.responseType="document",c.open("GET","data:text/html;charset=utf-8,"+b,!1),c.send(null);var d=c.response.body;return d.firstChild.remove(),d}function d(b){b="<remove></remove>"+b;try{var c=(new a.DOMParser).parseFromString(b,"text/html").body;return c.firstChild.remove(),c}catch(a){return}}function e(a){return g.innerHTML=a,b.documentMode&&r(g),g}var f;if(!b||!b.implementation)throw n("noinert","Can't create an inert html document");f=b.implementation.createHTMLDocument("inert");var g=(f.documentElement||f.getDocumentElement()).querySelector("body");return g.innerHTML='<svg><g onload="this.parentNode.remove()"></g></svg>',g.querySelector("svg")?(g.innerHTML='<svg><p><style><img src="</style><img src=x onerror=alert(1)//">',g.querySelector("svg img")?d:e):c}(a,a.document)}function d(a){var b=[];return m(b,j).chars(a),b.join("")}var e,f,g,h,i,j,k,l,m,n=b.$minErr("$sanitize");b.module("ngSanitize",[]).provider("$sanitize",c).info({angularVersion:"1.6.6"}),b.module("ngSanitize").filter("linky",["$sanitize",function(a){var c=/((ftp|https?):\/\/|(www\.)|(mailto:)?[A-Za-z0-9._%+-]+@)\S*[^\s.;,(){}<>"\u201d\u2019]/i,e=/^mailto:/i,f=b.$minErr("linky"),g=b.isDefined,h=b.isFunction,i=b.isObject,j=b.isString;return function(b,k,l){function m(a){a&&s.push(d(a))}if(null==b||""===b)return b;if(!j(b))throw f("notstring","Expected string but received: {0}",b);for(var n,o,p,q=h(l)?l:i(l)?function(){return l}:function(){return{}},r=b,s=[];n=r.match(c);)o=n[0],n[2]||n[4]||(o=(n[3]?"http://":"mailto:")+o),p=n.index,m(r.substr(0,p)),function(a,b){var c,d=q(a);s.push("<a ");for(c in d)s.push(c+'="'+d[c]+'" ');!g(k)||"target"in d||s.push('target="',k,'" '),s.push('href="',a.replace(/"/g,"&quot;"),'">'),m(b),s.push("</a>")}(o,n[0].replace(e,"")),r=r.substring(p+n[0].length);return m(r),a(s.join(""))}}])}(window,window.angular),function(){function a(){return{restrict:"AEC",require:"dxStartWith",controller:"dxStartWithCtrl",scope:!0,terminal:!0,transclude:!0,multiElement:!0,$tlb:!0,compile:function(a,b){var c=b.dxStartWith||b.root,e=c.match(d),f=e[1],g=e[3]||"";return function(a,b,c,d,e){d.alias=g,d.transclude=e,d.transclude(a,function(a,c){function d(a){c.$dxPrior=a,""!==g&&(c[g]=a)}b.append(a),c.$dxLevel=0,c.$dxIsRoot=!0,c.$watch(f,d)})}}}}function b(){return{restrict:"AEC",require:"^dxStartWith",scope:!0,terminal:!0,multiElement:!0,compile:function(a,b){var c=b.dxConnect||b.connect;return function(a,b,d,e){alias=e.alias||"",e.transclude(a,function(a,d){function e(a){d.$dxPrior=a,""!==alias&&(d[alias]=a)}b.append(a),d.$dxLevel=d.$dxLevel+1,d.$dxIsRoot=!1,d.$watch(c,e)})}}}}var c=angular.module("dotjem.angular.tree",[]),d=/^(\S+)(\s+as\s+(\w+))?#x2F;;c.controller("dxStartWithCtrl",[function(){}]),c.directive("dxStartWith",a),c.directive("dxConnect",b)}(),function(){"use strict";function a(a,b,c){return{restrict:"A",link:function(d,e,f){c(function(){function g(a){var g,h,k,l,m,n;if(!angular.element(e).hasClass("ng-hide")&&a&&a.target){for(h=a.target;h;h=h.parentNode){if(h===e[0])return;if(l=h.id,m=h.className,n=j.length,m&&void 0!==m.baseVal&&(m=m.baseVal),m||l)for(g=0;g<n;g++)if(k=new RegExp("\\b"+j[g]+"\\b"),void 0!==l&&l===j[g]||m&&k.test(m))return}c(function(){(i=b(f.clickOutside))(d,{event:a})})}}function h(){return"ontouchstart"in window||navigator.maxTouchPoints}var i,j=void 0!==f.outsideIfNot?f.outsideIfNot.split(/[ ,]+/):[];h()&&a.on("touchstart",g),a.on("click",g),d.$on("$destroy",function(){h()&&a.off("touchstart",g),a.off("click",g)})})}}}angular.module("angular-click-outside",[]).directive("clickOutside",["$document","$parse","$timeout",a])}();var GoogleMerchants=angular.module("GoogleMerchants",["templates-dist","dotjem.angular.tree","ngSanitize","ngAnimate","ng-slide-down","angular-click-outside"]);GoogleMerchants.constant("BACKEND",ajaxurl+"?action=wpae_api&q="),GoogleMerchants.filter("safe",["$sce",function(a){return a.trustAsHtml}]),GoogleMerchants.controller("advancedAttributesController",["$scope","$log","attributesService",function(a,b,c){a.attributes=[],a.cats=[],a.attributes=c.getAttributes()}]),GoogleMerchants.directive("advancedAttributes",function(){return{restrict:"E",scope:{advancedAttributes:"=information"},templateUrl:"advancedAttributes/advancedAttributes.tpl.html",controller:"advancedAttributesController"}}),GoogleMerchants.controller("availabilityPriceController",["$scope","currencyService",function(a,b){a.currency=b.getCurrency()}]),GoogleMerchants.directive("availabilityPrice",function(){return{restrict:"E",scope:{availabilityPrice:"=information"},templateUrl:"availabilityPrice/availabilityPrice.tpl.html",controller:"availabilityPriceController"}}),GoogleMerchants.controller("basicInformationController",["$scope",function(a){}]),GoogleMerchants.directive("basicInformation",function(){return{restrict:"E",scope:{basicInformation:"=information"},templateUrl:"basicInformation/basicInformation.tpl.html",controller:"basicInformationController"}}),GoogleMerchants.directive("chosen",["$timeout",chosen]),GoogleMerchants.factory("attributesService",["$rootScope","$q","$log","wpHttp",function(a,b,c,d){var e=!1;return{setAttributes:function(a){e=a},getAttributes:function(){return e}}}]),GoogleMerchants.directive("autodetect",["attributesService",function(a){return{restrict:"A",require:"^ngModel",link:{post:function(b,c,d,e){var f=d.autodetect;d=a.getAttributes(),angular.forEach(d,function(a){a.label.toLowerCase()!=f.toLowerCase()&&a.name.toLowerCase()!=f.toLowerCase()||(e.$setViewValue("{"+a.name+"}"),e.$render())})}}}}]),GoogleMerchants.directive("cascade",[function(){return{restrict:"A",controller:["$scope",function(a){function b(c,d){var e,f;for(e=0;e<d.children.length;e+=1)f=d.children[e],a.mappings[f.id]=c,b(c,f);return!1}a.select=function(){console.log("Changing to ",a.mappings[a.node.id]),b(a.mappings[a.node.id],a.node)}}]}}]),GoogleMerchants.directive("contenteditable",["$sce",function(a){return{restrict:"A",require:"?ngModel",link:function(b,c,d,e){function f(){var a=c.html();d.stripBr&&"<br>"===a&&(a=""),e.$setViewValue(a)}e&&(e.$render=function(){c.html(a.getTrustedHtml(e.$viewValue||""))},c.on("blur keyup change",function(){b.$evalAsync(f)}),f())}}}]),GoogleMerchants.factory("currencyService",[function(){var a=null,b=null;return{setCurrency:function(c,d){a=c,b=d},getCurrency:function(){return a},getCurrencyCode:function(){return b}}}]),GoogleMerchants.directive("droppable",[function(){return{restrict:"A",require:"^ngModel",link:function(a,b,c,d){function e(a,b){return-1!==a.find("input[name^=cc_type]").val().indexOf("image_")&&(b="Image "+b),-1!==a.find("input[name^=cc_type]").val().indexOf("attachment_")&&(b="Attachment "+b),b}var f;f=angular.element(b),f.addClass("google-merchants-droppable"),f.droppable({drop:function(a,b){var c=b.draggable.find(".custom_column"),g=c.find("input[name^=cc_name]").val();g=e(c,g),f.val(f.val()+"{"+g+"}"),d.$setViewValue(f.val()),d.$render()}})}}}]),GoogleMerchants.factory("exportService",["$q","$log","wpHttp",function(a,b,c){return{getExport:function(d){var e=a.defer(),f="export/get";return null!==d&&(f=f+"&id="+d),c.get(f).then(function(a){e.resolve(a)},function(a,c){e.reject(a,c),b.error("There was a problem getting the export")}),e.promise},saveExport:function(d){var e=a.defer();return c.post("export/save",d).then(function(a){e.resolve(a)},function(a,c){e.reject(a),b.error(a,c)}),e.promise}}}]),GoogleMerchants.directive("focusMeWhenEnabled",function(a){return{priority:-1,link:function(b,c){b.$watch(function(){return b.$eval(c.attr("ng-disabled"))},function(b){0==b&&a(function(){c[0].focus()})})}}}),GoogleMerchants.factory("googleCategoriesService",["$rootScope","$q","$log","wpHttp",function(a,b,c,d){return{searchCategories:function(a){return d.get("googleCategories/get&parent=0"+a)},getChildCategories:function(a){return d.get("googleCategories/get&parent="+a)},categorySelected:function(b){a.$broadcast("wpae.category.selected",b)}}}]),GoogleMerchants.controller("mainController",["$scope","$rootScope","$timeout","$window","$document","$location","$log","templateService","exportService","currencyService","attributesService","wpHttp",function(a,b,c,d,e,f,g,h,i,j,k,l){function m(a,b){b||(b=window.location.href),a=a.replace(/[\[\]]/g,"\\amp;");var c=new RegExp("[?&]"+a+"(=([^&#]*)|&|#|$)"),d=c.exec(b);return d?d[2]?decodeURIComponent(d[2].replace(/\+/g," ")):"":null}function n(){b.cats.children.length||(a.merchantsFeedData.productCategories.productCategories="customValue")}var o=[{mapFrom:"",mapTo:""}];a.cats=[],a.templateId=!1,a.merchantsFeedData={basicInformation:{open:!0,itemTitle:"productTitle",hasVariations:!0,useParentTitleForVariableProducts:!0,additionalImageLink:"productImages",itemDescription:"productDescription",itemImageLink:"useProductFeaturedImage",itemLink:"productLink",condition:"new",conditionMappings:angular.copy(o),userVariationDescriptionForVariableProducts:!0,addVariationAttributesToProductUrl:!0,useVariationImage:!0,useFeaturedImageIfThereIsNoVariationImage:!0,useParentDescirptionIfThereIsNoVariationDescirption:!0,useVariationDescriptionForVariableProducts:!0},detailedInformation:{open:!1,color:"selectFromWooCommerceProductAttributes",size:"selectFromWooCommerceProductAttributes",gender:"selectFromWooCommerceProductAttributes",setTheGroupId:"automatically",mappings:angular.copy(o),ageGroup:"selectFromWooCommerceProductAttributes",material:"selectFromWooCommerceProductAttributes",pattern:"selectFromWooCommerceProductAttributes",genderAutodetect:"keepBlank",sizeSystem:"",adjustPrice:!1,adjustSalePrice:!1,genderCats:{},ageGroupCats:{},sizeTypeMappings:angular.copy(o)},availabilityPrice:{open:!1,price:"useProductPrice",salePrice:"useProductSalePrice",availability:"useWooCommerceStockValues",adjustPriceValue:"",adjustPriceType:"%",adjustSalePriceType:"%",adjustSalePriceValue:"",currency:null},productCategories:{open:!1,productType:"useWooCommerceProductCategories",productCategories:"mapProductCategories",catMappings:{}},uniqueIdentifiers:{open:!1,identifierExists:1},shipping:{dimensions:"useWooCommerceProductValues",convertTo:"cm",adjustPriceType:"%",weight:"",shippingHeight:"",shippingLength:"",shippingWidth:""},template:{save:!1,name:""},advancedAttributes:{adult:"no",unitPricingBaseMeasureUnit:"kg",excludedDestination:"no",customLabel0Mappings:angular.copy(o),customLabel1Mappings:angular.copy(o),customLabel2Mappings:angular.copy(o),customLabel3Mappings:angular.copy(o),customLabel4Mappings:angular.copy(o),energyEfficiencyClassMappings:angular.copy(o),promotionIdMappings:angular.copy(o)}},a.init=function(b,c,d){k.setAttributes(wpae_product_attributes),a.isGoogleMerchantExport=!1,j.setCurrency(b,c),a.templateId=d},a.selectGoogleMerchantsInitially=function(){a.selectGoogleMerchants()},a.selectGoogleMerchants=function(){jQuery(".wpallexport-element-label").parent().parent().slideUp(),a.isGoogleMerchantExport=!0;var c=m("id");i.getExport(c).then(function(b){angular.isObject(b)&&(b.template={save:!1,name:""},a.merchantsFeedData=b)}),a.templateId&&(console.log("Loading template with id "+a.templateId),h.getTemplate(a.templateId).then(function(b){a.merchantsFeedData=b.google_merchants_post_data})),l.get("categories/index").then(function(a){b.cats=a,console.log("Broadcasting loaded categories..."),b.$broadcast("categories.loaded"),n()},function(){g.error("There was a problem loading the WordPress categories")}),null==a.merchantsFeedData.availabilityPrice.currency&&(a.merchantsFeedData.availabilityPrice.currency=j.getCurrencyCode())},a.$on("googleMerchantsSelected",function(b,d){a.selectGoogleMerchants(),a.merchantsFeedData.basicInformation.hasVariations=d,jQuery(".wpallexport-element-label").parent().parent().slideUp(),c(function(){a.isGoogleMerchantExport=!0})}),a.$on("googleMerchantsDeselected",function(){jQuery(".wpallexport-element-label").parent().parent().slideDown(),c(function(){a.isGoogleMerchantExport=!1})}),a.$on("googleMerchantsSubmitted",function(b,c){a.merchantsFeedData.template.name=c.templateName,a.process()}),a.$on("templateShouldBeSaved",function(b,c){a.merchantsFeedData.template.save=!0,a.merchantsFeedData.template.name=c}),a.$on("templateShouldNotBeSaved",function(){a.merchantsFeedData.template.save=!1}),a.$on("selectedTemplate",function(b,c){h.getTemplate(c).then(function(b){a.merchantsFeedData=b.google_merchants_post_data})}),a.process=function(){a.merchantsFeedData.extraData=jQuery("#templateForm").serialize(),a.merchantsFeedData.filteringData=jQuery("input[name=filter_rules_hierarhy]").val(),a.merchantsFeedData.template.save=jQuery("#save_template_as").prop("checked");var b=m("id");b&&(a.merchantsFeedData.exportId=b,a.merchantsFeedData.update=!0),i.saveExport(a.merchantsFeedData).then(function(a){a.redirect?d.location.href=a.redirect:d.location.href="admin.php?page=pmxe-admin-export&action=options"})}}]),GoogleMerchants.controller("mappingController",["$scope",function(a){a.show=!1,a.mappingsBackup=null,a.removeMapping=function(b){a.mappings.length>1&&a.mappings.splice(a.mappings.indexOf(b),1)},a.$watch("show",function(b){b&&(a.mappingsBackup=a.mappings)}),a.addMapping=function(){a.mappings.push({})},a.close=function(){a.mappings=a.mappingsBackup,a.show=!1},a.saveMappings=function(){a.show=!1}}]),GoogleMerchants.directive("mapping",function(){return{restrict:"E",scope:{mappings:"=",show:"=",context:"=",tooltip:"@"},templateUrl:"common/mapping/mapping.tpl.html",controller:"mappingController"}}),GoogleMerchants.directive("styledInput",function(a){return{priority:-1,scope:{placeholder:"=",ngModel:"="},template:'<div class="editable" contenteditable="true" ng-model="ngModel" placeholder="{{placeholder}}"></div>',link:function(a,b){b.bind("keydown",function(a){return(!a.ctrlKey&&!a.metaKey||65==a.which||88==a.which||67==a.which||86==a.which)&&(13!=a.which&&void 0)})}}}),GoogleMerchants.factory("templateService",["$q","$log","wpHttp",function(a,b,c){return{getTemplate:function(d){var e=a.defer();return c.get("templates/get&templateId="+d).then(function(a){e.resolve(a)},function(a,c){e.reject(a,c),b.error("There was a problem getting the export")}),e.promise}}}]),
8
+ GoogleMerchants.directive("tipsy",["$document",function(a){return{restrict:"A",link:function(b,c,d){c.attr("original-title",d.tipsy),c.tipsy({gravity:function(){var b="n";a.scrollTop()<c.offset().top-angular.element(".tipsy").height()-2&&(b="s");var d="";return c.offset().left+angular.element(".tipsy").width()<a.width()+a.scrollLeft()?d="w":c.offset().left-angular.element(".tipsy").width()>a.scrollLeft()&&(d="e"),b+d},live:!0,html:!0,opacity:1})}}}]),GoogleMerchants.factory("wpHttp",["$http","$q","$log","BACKEND","NONCE",function(a,b,c,d,e){return{post:function(c,f){var g=b.defer();return a.post(d+c+"&security="+e,f).then(function(a){g.resolve(a.data)},function(a,b){g.reject(a,b)}),g.promise},get:function(c){var f=b.defer();return a.get(d+c+"&security="+e).then(function(a){f.resolve(a.data)},function(a,b){f.reject(a,b)}),f.promise}}}]),GoogleMerchants.controller("detailedInformationController",["$scope","$log","attributesService",function(a,b,c){a.attributes=[],a.cats=[],a.attributes=c.getAttributes()}]),GoogleMerchants.directive("detailedInformation",function(){return{restrict:"E",scope:{detailedInformation:"=information"},templateUrl:"detailedInformation/detailedInformation.tpl.html",controller:"detailedInformationController"}}),GoogleMerchants.controller("categoryMapperController",["$scope","$rootScope","$interval","$timeout",function(a,b,c,d){a.dialogVisible=!0,a.selectedCategory="",a.selectedCategoryId=0,a.parentWidth=!1,a.siteCats=[],a.initialized=!1,a.innerMapping=!1,a.limits=100,a.catMappings=[],b.$on("categories.loaded",function(){a.innerMapping=b.cats}),a.innerMapping=b.cats,a.initialize=function(){a.initialized||(d(function(){c(function(){a.limits<a.innerMapping.length&&(a.limits+=20)},10)},100),a.initialized=!0,a.afterInitialize())},a.afterInitialize=function(){angular.forEach(a.cats,function(a,b){})},angular.isUndefined(a.context)&&(a.context="categories"),a.expandNode=function(a){a.children.length&&(a.expanded=!a.expanded)},a.getTimes=function(a){return new Array(a)},a.toggleDialog=function(){a.dialogVisible=!a.dialogVisible},a.getPlaceholder=function(){return a.visible?"":"Select Google Product Category"}}]),GoogleMerchants.directive("categoryMapper",function(){return{restrict:"E",scope:{mappings:"=",grey:"=",context:"@?"},templateUrl:"productCategories/categoryMapper/categoryMapper.tpl.html",controller:"categoryMapperController"}}),GoogleMerchants.controller("googleCategorySelectorController",["$scope","$log","$window","googleCategoriesService",function(a,b,c,d){function e(b,c,d){var f,g;for(f=0;f<d.children.length;f+=1){if(g=d.children[f],angular.isDefined(a.mappings[g.id])){if(!a.mappings[g.id].byUser){var h={id:b,name:c,byUser:!1};a.mappings[g.id]=h}}else a.mappings[g.id]={id:b,name:c,byUser:!1};e(b,c,g)}return!1}var f=[];a.categories=[],a.level=1,a.search="",a.loading=!1,a.hasResults=!0,a.byUser=!1,a.select=function(b){var c=b.name.replace("<strong>","").replace("</strong>","").replace("<b>","").replace("</b>","");a.visible=!1,a.selectedCategory=c,a.mappings[a.node.id]={id:b.id,name:c,byUser:!0},e(b.id,c,a.node)},a.loadCategories=function(b){a.loading=!0;var c="";b&&(c="&search="+b),d.searchCategories(c).then(function(b){a.categories=b}).finally(function(){a.loading=!1})},a.expand=function(c){if(c.opened)return void(c.opened=!1);a.loading=!0,d.getChildCategories(c.id).then(function(a){"null"!=a&&(c.children=a,c.opened=!0)},function(){b.error("There was a problem loading the categories")}).finally(function(){a.loading=!1})},a.matchSearch=function(a){return function(b){return b.name===a.name}},a.$watch("search",function(b,c){if(""==c&&(f=a.categories),""==b)return void(a.categories=f);a.loadCategories(b)},!0),a.categoryChanged=function(){a.loadCategories(a.selectedCategory)},a.categoryClicked=function(){a.selectedCategory;a.visible||(a.visible=!0),a.byUser||(a.selectedCategory=""),a.search="",a.categoryChanged()},a.closeMe=function(){a.visible&&(a.visible=!1)}}]),GoogleMerchants.directive("googleCategorySelector",["$rootScope",function(a){return{restrict:"E",templateUrl:"productCategories/googleCategorySelector/googleCategorySelector.tpl.html",controller:"googleCategorySelectorController"}}]),GoogleMerchants.controller("productCategoriesController",["$scope",function(a){}]),GoogleMerchants.directive("productCategories",function(){return{restrict:"E",scope:{productCategories:"=information"},templateUrl:"productCategories/productCategories.tpl.html",controller:"productCategoriesController"}}),GoogleMerchants.controller("shippingController",["$scope","currencyService",function(a,b){a.currency=b.getCurrency()}]),GoogleMerchants.directive("shipping",function(){return{restrict:"E",scope:{shipping:"=information"},templateUrl:"shipping/shipping.tpl.html",controller:"shippingController"}}),GoogleMerchants.controller("uniqueIdentifiersController",["$scope",function(a){}]),GoogleMerchants.directive("uniqueIdentifiers",function(){return{restrict:"E",scope:{uniqueIdentifiers:"=information"},templateUrl:"uniqueIdentifiers/uniqueIdentifiers.tpl.html",controller:"uniqueIdentifiersController"}}),angular.module("templates-dist",["advancedAttributes/advancedAttributes.tpl.html","availabilityPrice/availabilityPrice.tpl.html","basicInformation/basicInformation.tpl.html","common/mapping/mapping.tpl.html","detailedInformation/detailedInformation.tpl.html","productCategories/categoryMapper/categoryMapper.tpl.html","productCategories/categoryMapper/noCategoriesNotice.tpl.html","productCategories/googleCategorySelector/googleCategorySelector.tpl.html","productCategories/productCategories.tpl.html","shipping/shipping.tpl.html","uniqueIdentifiers/uniqueIdentifiers.tpl.html"]),angular.module("advancedAttributes/advancedAttributes.tpl.html",[]).run(["$templateCache",function(a){a.put("advancedAttributes/advancedAttributes.tpl.html",'<div class="wpallexport-collapsed wpallexport-section" ng-class="{closed: !advancedAttributes.open }">\n <div class="wpallexport-content-section">\n <div class="wpallexport-collapsed-header disable-jquery"\n ng-click="advancedAttributes.open = !advancedAttributes.open">\n <h3>Advanced Attributes</h3>\n </div>\n <div class="wpallexport-collapsed-content" id="advanced-attributes"\n ng-slide-down="advancedAttributes.open" duration="0.5">\n <div class="wpallexport-collapsed-content-inner">\n <h3 class="inner-title">Product Type</h3>\n <h4>Multipack</h4>\n <p>\n Multipacks are packages that include several identical products to create a larger unit of sale,\n submitted as a single item.\n For example, if the product for sale is a 6-pack of soda, the multipack value would be 6.\n </p>\n <div class="input">\n <label><input type="text" ng-model="advancedAttributes.multipack" class="wpae-default-input" droppable/></label>\n </div>\n\n <h4>Adult</h4>\n <div class="input">\n <label><input type="radio" ng-model="advancedAttributes.adult" value="no"/>False</label>\n </div>\n <div class="input">\n <label><input type="radio" ng-model="advancedAttributes.adult" value="yes"/>True</label>\n </div>\n <div class="input">\n <label><input type="radio" ng-model="advancedAttributes.adult" value="customValue"/>Custom data</label>\n <div ng-slide-down="advancedAttributes.adult == \'customValue\'" duration="0.2" class="input inner">\n <input type="text" class="wpae-default-input" ng-model="advancedAttributes.adultCV" droppable />\n </div>\n </div>\n\n <h3 class="inner-title">Adwords &amp; Shopping Campaigns</h3>\n <h4>Adwords Redirect</h4>\n <p>If provided, make sure that the URL redirects to the same URL as given in the \'link\' attribute.</p>\n <div class="input">\n <input type="text" class="wpae-default-input" ng-model="advancedAttributes.adwordsRedirect" droppable />\n </div>\n\n <h4>Custom Labels</h4>\n <p>\n You can use custom labels to subdivide products in your campaign using any values\n of your choosing. For example, you can use custom labels to indicate that products\n 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>)\n </p>\n <div style="margin-top:10px;">Custom Label 0</div>\n <div class="input">\n <input type="text" class="wpae-default-input" ng-model="advancedAttributes.customLabel0" droppable />\n <a href="" class="wpae-field-mapping" ng-click="showCustomLabel0Mappings=true">Data Mapping</a>\n <div style="position: relative">\n <mapping mappings="advancedAttributes.customLabel0Mappings" show="showCustomLabel0Mappings" context="text" tooltip="For example, if you have products tagged \'reduced price\' and \'on sale\' and you want both to be listed as \'clearance\' in your export:<br/><br/>Create two sets of data mappings, with \'Exported Data\' set to \'reduced price\' for one and \'on sale\' for the other. \'Translated To\' for both would be \'clearance\'." />\n </div>\n </div>\n <div style="margin-top:10px;">Custom Label 1</div>\n <div class="input">\n <input type="text" class="wpae-default-input" ng-model="advancedAttributes.customLabel1" droppable />\n <a href="" class="wpae-field-mapping" ng-click="showCustomLabel1Mappings=true">Data Mapping</a>\n <div style="position: relative">\n <mapping mappings="advancedAttributes.customLabel1Mappings" show="showCustomLabel1Mappings" context="text" tooltip="For example, if you have products tagged \'reduced price\' and \'on sale\' and you want both to be listed as \'clearance\' in your export:<br/><br/>Create two sets of data mappings, with \'Exported Data\' set to \'reduced price\' for one and \'on sale\' for the other. \'Translated To\' for both would be \'clearance\'." />\n </div>\n </div>\n <div style="margin-top:10px;">Custom Label 2</div>\n <div class="input">\n <input type="text" class="wpae-default-input" ng-model="advancedAttributes.customLabel2" droppable />\n <a href="" class="wpae-field-mapping" ng-click="showCustomLabel2Mappings=true">Data Mapping</a>\n <div style="position: relative">\n <mapping mappings="advancedAttributes.customLabel2Mappings" show="showCustomLabel2Mappings" context="text" tooltip="For example, if you have products tagged \'reduced price\' and \'on sale\' and you want both to be listed as \'clearance\' in your export:<br/><br/>Create two sets of data mappings, with \'Exported Data\' set to \'reduced price\' for one and \'on sale\' for the other. \'Translated To\' for both would be \'clearance\'." />\n </div>\n </div>\n <div style="margin-top:10px;">Custom Label 3</div>\n <div class="input">\n <input type="text" class="wpae-default-input" ng-model="advancedAttributes.customLabel3" droppable />\n <a href="" class="wpae-field-mapping" ng-click="showCustomLabel3Mappings=true">Data Mapping</a>\n <div style="position: relative">\n <mapping mappings="advancedAttributes.customLabel3Mappings" show="showCustomLabel3Mappings" context="text" tooltip="For example, if you have products tagged \'reduced price\' and \'on sale\' and you want both to be listed as \'clearance\' in your export:<br/><br/>Create two sets of data mappings, with \'Exported Data\' set to \'reduced price\' for one and \'on sale\' for the other. \'Translated To\' for both would be \'clearance\'." />\n </div>\n </div>\n <div style="margin-top:10px;">Custom Label 4</div>\n <div class="input">\n <input type="text" class="wpae-default-input" ng-model="advancedAttributes.customLabel4" droppable />\n <a href="" class="wpae-field-mapping" ng-click="showCustomLabel4Mappings=true">Data Mapping</a>\n <div style="position: relative">\n <mapping mappings="advancedAttributes.customLabel4Mappings" show="showCustomLabel4Mappings" context="text" tooltip="For example, if you have products tagged \'reduced price\' and \'on sale\' and you want both to be listed as \'clearance\' in your export:<br/><br/>Create two sets of data mappings, with \'Exported Data\' set to \'reduced price\' for one and \'on sale\' for the other. \'Translated To\' for both would be \'clearance\'." />\n </div>\n </div>\n\n <hr/>\n\n <h3 class="inner-title">Unit Prices</h3>\n <p>\n These attributes allow you to submit pricing for products that rely on unit pricing.\n The \'unit pricing measure\' attribute defines the measure and dimension of an item (e.g. 150g).\n The \'unit pricing base measure attribute specifies your preference of the denominator of the unit price (e.g. 100g).\n </p>\n <p>\n 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\'.\n </p>\n\n <h4>Unit Pricing Measure</h4>\n <div class="input">\n <input type="text" ng-model="advancedAttributes.unitPricingMeasure" class="wpae-default-input" droppable />\n </div>\n <h4>Unit Pricing Base Measure</h4>\n <div class="input">\n <input type="text" ng-model="advancedAttributes.unitPricingBaseMeasure" class="wpae-default-input" droppable />\n <select style="width: 170px;" ng-model="advancedAttributes.unitPricingBaseMeasureUnit">\n <option value="kg">Kilograms (kg)</option>\n <option value="g">Ounces (oz)</option>\n <option value="lb">Pounds (lb)</option>\n <option value="mg">Milligrams (mg)</option>\n <option value="g">Grams (g)</option>\n </select>\n </div>\n <hr/>\n <h3 class="inner-title">Additional Attributes</h3>\n <h4>Expiration Date</h4>\n <p>\n This is the date that an item listing will expire. If you do not provide this attribute, items\n will expire and no longer appear in Google Shopping results after 30 days.\n <strong>You cannot use thi attribute to extend the expiration period to longer than 30 days.</strong>\n </p>\n <div class="input">\n <input type="text" class="wpae-default-input" ng-model="advancedAttributes.expirationDate" droppable />\n </div>\n\n <h4>Energy Efficiency Class</h4>\n <p>\n This attribute allows you to submit the energy label for your applicable products in feeds targeting\n European Union countries and switzerland.\n </p>\n <div class="input">\n <input type="text" class="wpae-default-input" ng-model="advancedAttributes.energyEfficiencyClass" droppable />\n <a href="" class="wpae-field-mapping" ng-click="showEnergyEfficiencyMappings=true">Data Mapping</a>\n <div style="position: relative">\n <mapping mappings="advancedAttributes.energyEfficiencyClassMappings" show="showEnergyEfficiencyMappings" tooltip="For example, if you have products tagged \'energy efficient\' and \'low power\' and you want both to be listed as \'A+++\' in your export:\n<br/><br/>\nCreate two sets of data mappings, with \'Exported Data\' set to \'energy efficient\' for one and \'low power\' for the other. \'Translated To\' for both would be \'A+++\'." />\n </div>\n </div>\n <h4>Promotion ID</h4>\n <p>\n If using Merchant Promotions, the \'promotion id\' attribute is used in both your products\n feed and your promotions feed to match products to promotions across the two feeds.\n </p>\n <div class="input">\n <input type="text" class="wpae-default-input" ng-model="advancedAttributes.promotionId" droppable />\n <a href="" class="wpae-field-mapping" ng-click="showPromotionIdMappings=true">Data Mapping</a>\n <div style="position: relative">\n <mapping mappings="advancedAttributes.promotionIdMappings" show="showPromotionIdMappings" tooltip="For example, if your products are tagged \'reduced price\' and \'on sale\' and you want both to be listed with a specific promotion ID in your export:\n<br/><br/>\n'+"Create two sets of data mappings, with 'Exported Data' set to 'reduced price' for one and 'on sale' for the other. 'Translated To' for both would be the desired promotion ID.\" />\n </div>\n </div>\n\n </div>\n </div>\n </div>\n</div>")}]),angular.module("availabilityPrice/availabilityPrice.tpl.html",[]).run(["$templateCache",function(a){a.put("availabilityPrice/availabilityPrice.tpl.html",'<div class="wpallexport-collapsed wpallexport-section" ng-class="{closed: !availabilityPrice.open}">\n <div class="wpallexport-content-section">\n <div class="wpallexport-collapsed-header disable-jquery" ng-click="availabilityPrice.open = !availabilityPrice.open">\n <h3>Availability &amp; Price</h3>\n </div>\n <div class="wpallexport-collapsed-content" id="availability-price" ng-slide-down="availabilityPrice.open" duration="0.5">\n <div class="wpallexport-collapsed-content-inner">\n <h4>Price</h4>\n <div class="input">\n <label><input type="radio" ng-model="availabilityPrice.price" value="useProductPrice" /> Use the product\'s price</label>\n </div>\n <div class="input">\n <label><input type="radio" ng-model="availabilityPrice.price" value="customValue" /> Custom data</label>\n\n <div class="input inner" ng-slide-down="availabilityPrice.price == \'customValue\'" duration="0.2">\n <input type="text" class="wpae-default-input" ng-model="availabilityPrice.priceCV" droppable />\n </div>\n </div>\n\n <div class="input inner">\n <a href="" ng-click="availabilityPrice.adjustPrice = !availabilityPrice.adjustPrice" class="adjust-price-link">\n <span class="open-indicator" ng-if="availabilityPrice.adjustPrice">-</span>\n <span class="open-indicator" ng-if="!availabilityPrice.adjustPrice">+</span> Adjust Price\n </a>\n <div ng-slide-down="availabilityPrice.adjustPrice" class="adjust-price" duration="0.2">\n <div class="input">\n <input type="text" class="wpae-default-input" ng-model="availabilityPrice.adjustPriceValue" droppable /><select ng-model="availabilityPrice.adjustPriceType">\n <option value="%">%</option>\n <option value="USD">{{currency}}</option>\n </select>\n\n <div ng-show="availabilityPrice.adjustPriceType == \'%\'" class="tooltip-container">\n <a href="#" ng-cloak="" class="wpallexport-help"\n 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>\n </div>\n <div ng-show="availabilityPrice.adjustPriceType == \'USD\'" class="tooltip-container">\n <a href="#" ng-cloak="" class="wpallexport-help"\n tipsy="Enter a negative number to reduce prices.">?</a>\n </div>\n </div>\n </div>\n </div>\n <h4>Sale Price</h4>\n <div class="input">\n <label><input type="radio" ng-model="availabilityPrice.salePrice" value="useProductSalePrice"/>Use the product\'s sale price</label>\n </div>\n <div class="input">\n <div class="input">\n <label><input type="radio" ng-model="availabilityPrice.salePrice" value="customValue" />Custom data</label>\n <div class="input inner" ng-slide-down="availabilityPrice.salePrice == \'customValue\'" duration="0.2">\n <input type="text" class="wpae-default-input" ng-model="availabilityPrice.salePriceCV" droppable/>\n </div>\n </div>\n </div>\n <div class="input inner">\n <a href="" ng-click="availabilityPrice.adjustSalePrice = !availabilityPrice.adjustSalePrice" ng-init="availabilityPrice.adjustSalePrice= false" class="adjust-price-link">\n <span class="open-indicator" ng-if="availabilityPrice.adjustSalePrice">-</span>\n <span class="open-indicator" ng-if="!availabilityPrice.adjustSalePrice">+</span> Adjust Sale Price\n </a>\n <div ng-slide-down="availabilityPrice.adjustSalePrice" class="adjust-price" duration="0.2">\n <div class="input">\n <input type="text" class="wpae-default-input" ng-model="availabilityPrice.adjustSalePriceValue" droppable /><select ng-model="availabilityPrice.adjustSalePriceType">\n <option value="%">%</option>\n <option value="USD">{{currency}}</option>\n </select>\n <div ng-show="availabilityPrice.adjustSalePriceType == \'%\'" class="tooltip-container">\n <a href="#" ng-cloak="" class="wpallexport-help"\n 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>\n </div>\n <div ng-show="availabilityPrice.adjustSalePriceType == \'USD\'" class="tooltip-container">\n <a href="#" ng-cloak="" class="wpallexport-help"\n tipsy="Enter a negative number to reduce prices.">?</a>\n </div>\n </div>\n </div>\n </div>\n <h4>Availability</h4>\n <div class="input">\n <label><input type="radio" ng-model="availabilityPrice.availability" value="useWooCommerceStockValues"/>Use WooCommerce stock values</label>\n </div>\n <div class="input">\n <label><input type="radio" ng-model="availabilityPrice.availability" value="customValue" />Custom data</label>\n <div class="input inner" ng-slide-down="availabilityPrice.availability == \'customValue\'" duration="0.2">\n <input type="text" class="wpae-default-input" ng-model="availabilityPrice.availabilityCV" droppable />\n </div>\n </div>\n </div>\n <div class="wpallexport-collapsed wpallexport-section wpallexport-google-merchants-advanced-options" ng-init="advancedOptionsOpen = false" ng-class="{closed: !advancedOptionsOpen} ">\n <div class="wpallexport-content-section rad0">\n <div class="wpallexport-collapsed-header wpallexport-advanced-options-header disable-jquery" ng-click="advancedOptionsOpen = !advancedOptionsOpen">\n <h3 class="advanced-options">Advanced Options</h3>\n </div>\n <div class="wpallexport-collapsed-content wpallexport-advanced-options-content" ng-slide-down="advancedOptionsOpen" duration="0.5">\n <div class="wpallexport-collapsed-content-inner">\n <div class="input">\n <h4>Currency</h4>\n <div class="input">\n <div class="select-container" style="padding-left: 0px;">\n <select class="custom-value" chosen ng-model="availabilityPrice.currency">\n <option value="AUD">Australian Dollars (AUD)</option>\n <option value="BRL">Brazilian Reals (BRL)</option>\n <option value="GBP">British Pounds (GBP)</option>\n <option value="CAD">Canadian Dollars (CAD)</option>\n <option value="CZK">Czech Crowns (CZK)</option>\n <option value="DKK">Danish Krone (DKK)</option>\n <option value="EUR">Euros (EUR)</option>\n <option value="INR">Indian Rupees (INR)</option>\n <option value="JPY">Japanese Yen (JPY)</option>\n <option value="MXN">Mexican Pesos (MXN)</option>\n <option value="NZD">New Zealand Dollars (NZD)</option>\n <option value="NOK">Norwegian Krone (NOK)</option>\n <option value="PLN">Polish Złoty (PLN)</option>\n <option value="RUB">Russian Rubles (RUB)</option>\n <option value="SGD">Singapore Dollars (SGD)</option>\n <option value="ZAR">South Africa Rand (ZAR)</option>\n <option value="SEK">Swedish Krona (SEK)</option>\n <option value="CHF">Swiss Franc (CHF)</option>\n <option value="TRY">Turkish Lira (TRY)</option>\n <option value="USD">United States Dollars (USD)</option>\n </select>\n </div>\n </div>\n <h4>Availability Date</h4>\n <div class="input">\n <input type="text" class="wpae-default-input" ng-model="availabilityPrice.availabilityDate" droppable />\n </div>\n <h4>Sale Price Effective Date</h4>\n <div class="input">\n <input type="text" class="wpae-default-input" ng-model="availabilityPrice.salePriceEffectiveDate" droppable />\n </div>\n </div>\n </div>\n </div>\n </div>\n </div>\n </div>\n </div>\n</div>')}]),angular.module("basicInformation/basicInformation.tpl.html",[]).run(["$templateCache",function(a){
9
+ a.put("basicInformation/basicInformation.tpl.html",'<div class="wpallexport-collapsed wpallexport-section" ng-class="{closed: !basicInformation.open}">\n <div class="wpallexport-content-section">\n <div class="wpallexport-collapsed-header disable-jquery" ng-click="basicInformation.open = !basicInformation.open">\n <h3>Basic Product Information</h3>\n </div>\n <div class="wpallexport-collapsed-content" id="basic-product-information" ng-slide-down="basicInformation.open" duration="0.5">\n <div class="wpallexport-collapsed-content-inner">\n\n <h4>Item Title <a style="margin-top: 7px;" class="wpallexport-help" tipsy="Google Merchant Center only shows the first 70 characters of titles and crops everything over 150 characters.">?</a></h4>\n <div class="input">\n <label><input type="radio" ng-model="basicInformation.itemTitle" value="productTitle"/>Use the product title</label>\n </div>\n <div class="input">\n <label><input type="radio" id="title-custom-data-select" ng-model="basicInformation.itemTitle" value="customValue" />Custom data</label>\n <div class="input inner" id="title-custom-data-container" ng-slide-down="basicInformation.itemTitle == \'customValue\'" duration="0.2">\n <input type="text" id="title-custom-data-value" class="wpae-default-input" ng-model="basicInformation.itemTitleCV" droppable />\n </div>\n </div>\n\n <div class="input checkbox" ng-if="basicInformation.hasVariations">\n <label><input type="checkbox" ng-model="basicInformation.useParentTitleForVariableProducts" value="1" />For variable products, use the parent product title</label>\n </div>\n\n <h4>Item Description</h4>\n <div class="input">\n <label><input type="radio" ng-model="basicInformation.itemDescription" id="use-product-description" value="productDescription"/>Use the product description</label>\n </div>\n <div class="input">\n <label><input type="radio" ng-model="basicInformation.itemDescription" id="use-product-short-description" value="productShortDescription"/>Use the product short description</label>\n </div>\n <div class="input">\n <label><input type="radio" ng-model="basicInformation.itemDescription" id="product-description-custom-data" value="customValue" />Custom data</label>\n <div class="input inner" ng-slide-down="basicInformation.itemDescription == \'customValue\'" duration="0.2">\n <input type="text" class="wpae-default-input" id="description-custom-data-value" ng-model="basicInformation.itemDescriptionCV" droppable />\n </div>\n </div>\n\n <div class="input checkbox">\n <label><input type="checkbox" ng-model="basicInformation.useVariationDescriptionForVariableProducts" value="1" />Use the variation description for variable products</label>\n </div>\n <div class="input checkbox inner" ng-slide-down="basicInformation.useVariationDescriptionForVariableProducts" duration="0.2">\n <label><input type="checkbox" ng-model="basicInformation.useParentDescirptionIfThereIsNoVariationDescirption" value="1" />If there is no variation description, use the parent product description</label>\n </div>\n\n <h4>Link</h4>\n <div class="input">\n <label><input type="radio" ng-model="basicInformation.itemLink" id="use-product-permalinks" value="productLink"/>Use the product permalink</label>\n </div>\n\n <div class="input">\n <label><input type="radio" ng-model="basicInformation.itemLink" value="customValue" />Custom data</label>\n <div class="input inner" ng-slide-down="basicInformation.itemLink == \'customValue\'" duration="0.2">\n <input type="text" class="wpae-default-input" ng-model="basicInformation.itemLinkCV" droppable />\n </div>\n </div>\n\n <div class="input checkbox">\n <label><input type="checkbox" ng-model="basicInformation.addVariationAttributesToProductUrl" />For variable products, add variation attributes to product URL</label>\n </div>\n\n <h4>Main Image Link</h4>\n <div class="input">\n <label><input type="radio" ng-model="basicInformation.itemImageLink" value="useProductFeaturedImage"/>Use product featured image</label>\n </div>\n\n <div class="input">\n <label><input type="radio" ng-model="basicInformation.itemImageLink" value="customValue" />Custom data</label>\n <div class="input inner" ng-slide-down="basicInformation.itemImageLink == \'customValue\'" duration="0.2">\n <input type="text" class="wpae-default-input" ng-model="basicInformation.itemImageLinkCV" droppable />\n </div>\n </div>\n\n <div class="input checkbox">\n <label><input type="checkbox" ng-model="basicInformation.useVariationImage" />For variable products, use variation image</label>\n </div>\n\n <div class="input checkbox inner" ng-slide-down="basicInformation.useVariationImage" duration="0.2">\n <label><input type="checkbox" ng-model="basicInformation.useFeaturedImageIfThereIsNoVariationImage" value="1" />If there is no variation image, use the featured image</label>\n </div>\n\n <h4>Additional Image Link</h4>\n <div class="input">\n <label><input type="radio" ng-model="basicInformation.additionalImageLink" value="productImages"/>Use images from product gallery</label>\n </div>\n\n <div class="input">\n <label><input type="radio" ng-model="basicInformation.additionalImageLink" value="customValue" />Custom data</label>\n <div class="input inner" ng-slide-down="basicInformation.additionalImageLink == \'customValue\'" duration="0.2">\n <input type="text"class="wpae-default-input" ng-model="basicInformation.additionalImageLinkCV" droppable />\n </div>\n </div>\n </div>\n <div class="wpallexport-collapsed wpallexport-section wpallexport-google-merchants-advanced-options" ng-init="advancedOptionsOpen = false" ng-class="{closed: !advancedOptionsOpen}">\n <div class="wpallexport-content-section rad0">\n <div class="wpallexport-collapsed-header wpallexport-advanced-options-header disable-jquery" ng-click="advancedOptionsOpen = !advancedOptionsOpen">\n <h3>Advanced Options</h3>\n </div>\n <div class="wpallexport-collapsed-content wpallexport-advanced-options-content" ng-slide-down="advancedOptionsOpen" duration="0.5">\n <div class="wpallexport-collapsed-content-inner">\n <div class="input">\n <h4>Item ID</h4>\n <div class="input">\n <input type="text" class="wpae-default-input" ng-model="basicInformation.itemId" droppable />\n </div>\n <h4>Item Condition</h4>\n <div class="input">\n <input type="text" class="wpae-default-input" ng-model="basicInformation.condition" droppable />\n <a href="" class="wpae-field-mapping" ng-click="showConditionMappings=true">Data Mapping</a>\n <mapping mappings="basicInformation.conditionMappings" show="showConditionMappings" context="condition" />\n <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>\n </div>\n <h4>Mobile Link</h4>\n <div class="input">\n <input type="text" class="wpae-default-input" ng-model="basicInformation.mobileLink" droppable />\n </div>\n </div>\n </div>\n </div>\n </div>\n </div>\n </div>\n </div>\n</div>')}]),angular.module("common/mapping/mapping.tpl.html",[]).run(["$templateCache",function(a){a.put("common/mapping/mapping.tpl.html",'<div class="wp-pointer wp-pointer-right" style="width: 450px; display: block; position: absolute; top: -70px; left: -23px;" ng-if="show">\n <div class="wp-pointer-content">\n <h4 style="padding-left:25px; margin-bottom:0; padding-bottom:0; margin-top:20px;">\n Data Mapping\n <a style="margin-top: 7px;" ng-if="tooltip" class="wpallexport-help"\n tipsy="{{ tooltip }}">?\n </a>\n </h4>\n\n <fieldset style="margin-top: 0; padding-top: 0; padding-bottom: 0;">\n <table cellpadding="0" cellspacing="0" class="cf-form-table" rel="cf_mapping_0" style="margin-left: 5px; margin-top: 15px;">\n <thead>\n <tr>\n <td><div style="padding-bottom:5px">Exported Data</div></td>\n <td><div style="padding-bottom:5px;">Translated To</div></td>\n <td>&nbsp;</td>\n </tr>\n </thead>\n <tbody>\n <tr class="form-field" ng-repeat="mapping in mappings">\n <td style="width: 50%;">\n <input type="text" ng-model="mapping.mapFrom" style="margin-left:0;"/>\n </td>\n <td style="width: 50%;">\n <div ng-if="context == \'sizeType\'">\n <select chosen ng-model="mapping.mapTo" >\n <option value="">Please select</option>\n <option value="regular">Regular</option>\n <option value="petite">Petite</option>\n <option value="plus">Plus</option>\n <option value="big and tall">Big and tall</option>\n <option value="maternity">Maternity</option>\n </select>\n </div>\n <div ng-if="context == \'condition\' ">\n <select chosen ng-model="mapping.mapTo">\n <option value="new">New</option>\n <option value="refurbished">Refurbished</option>\n <option value="used">Used</option>\n </select>\n </div>\n <div ng-if="context != \'sizeType\' && context != \'condition\'">\n <input type="text" ng-model="mapping.mapTo" />\n </div>\n </td>\n <td class="action remove">\n <a href="" ng-click="removeMapping(mapping)" ng-show="$index > 0"\n style="right:-10px;"></a>\n </td>\n </tr>\n <tr>\n <td colspan="3">\n <a href="" ng-click="addMapping()" title="Add Another" class="action add-new-key add-new-entry" style="margin-top: 15px; margin-bottom:15px; margin-left: 0;">\n Add Another\n </a>\n </td>\n </tr>\n </tbody>\n </table>\n <input type="hidden" name="custom_mapping_rules[]" value="">\n </fieldset>\n <div class="wp-pointer-buttons">\n <a class="close" href="" ng-click="close()">Close</a>\n <a class="save_popup save_mr" style="position:static; margin-right: 15px;" href="" ng-click="saveMappings()">Save Rules</a>\n </div>\n </div>\n <div class="wp-pointer-arrow">\n <div class="wp-pointer-arrow-inner"></div>\n </div>\n</div>')}]),angular.module("detailedInformation/detailedInformation.tpl.html",[]).run(["$templateCache",function(a){a.put("detailedInformation/detailedInformation.tpl.html",'<div class="wpallexport-collapsed wpallexport-section" ng-class="{closed: !detailedInformation.open }">\n <div class="wpallexport-content-section">\n <div class="wpallexport-collapsed-header disable-jquery" ng-click="detailedInformation.open = !detailedInformation.open ">\n <h3>Detailed Product Attributes &amp; Item Grouping</h3>\n </div>\n <div class="wpallexport-collapsed-content" id="detailed-product-information" ng-slide-down="detailedInformation.open" duration="0.5">\n <div class="wpallexport-collapsed-content-inner">\n <h4>Item Group ID</h4>\n <p>\n For variable products, each variant is exported as a separate product.\n Variants that belong to the same group must all have the same Item Group ID\n so that Google knows they are related.\n </p>\n <div class="input">\n <label><input type="radio" ng-model="detailedInformation.setTheGroupId" value="automatically" />Automatically set the item group ID</label>\n </div>\n <div class="input">\n <label><input type="radio" ng-model="detailedInformation.setTheGroupId" value="customValue" />Custom data</label>\n <div class="input inner" ng-slide-down="detailedInformation.setTheGroupId == \'customValue\'" duration="0.2">\n <input type="text" class="wpae-default-input" ng-model="detailedInformation.setTheGroupIdCV" droppable />\n </div>\n </div>\n <h4>Color</h4>\n <div class="input">\n <label><input type="radio" ng-model="detailedInformation.color" value="selectFromWooCommerceProductAttributes" />Select from WooCommerce product attributes</label>\n <div ng-slide-down="detailedInformation.color == \'selectFromWooCommerceProductAttributes\'" duration="0.2">\n <div class="select-container" ng-if="attributes.length">\n <select autodetect="Color" chosen ng-options="\'{\' + i.name + \'}\' as i.name for i in attributes" ng-model="detailedInformation.colorAttribute" class="inner">\n <option value="">Leave Blank</option>\n </select>\n </div>\n <div class="no-attributes" ng-if="!attributes.length">\n The products in this export have no product attributes. Add attributes to your products in order to map them to a color.\n </div>\n </div>\n </div>\n <div class="input">\n <label><input type="radio" ng-model="detailedInformation.color" value="customValue" />Custom data</label>\n <div class="input inner" ng-slide-down="detailedInformation.color == \'customValue\'" duration="0.2">\n <input type="text" class="wpae-default-input" ng-model="detailedInformation.colorCV" droppable />\n </div>\n </div>\n\n <h4>Size</h4>\n <div class="input">\n <label><input type="radio" ng-model="detailedInformation.size" value="selectFromWooCommerceProductAttributes" />Select from WooCommerce product attributes</label>\n <div ng-slide-down="detailedInformation.size == \'selectFromWooCommerceProductAttributes\'" duration="0.2">\n <div class="select-container" ng-if="attributes.length">\n <select id="sizeAttribute" autodetect="Size" chosen ng-options="\'{\' + i.name + \'}\' as i.name for i in attributes" ng-model="detailedInformation.sizeAttribute" class="inner">\n <option value="">Leave Blank</option>\n </select>\n </div>\n <div class="no-attributes" ng-if="!attributes.length">\n The products in this export have no product attributes. Add attributes to your products in order to map them to a size.\n </div>\n </div>\n </div>\n <div class="input">\n <label>\n <input type="radio" ng-model="detailedInformation.size" value="customValue" />Custom data\n </label>\n <div class="input inner" ng-slide-down="detailedInformation.size== \'customValue\'" duration="0.2">\n <input type="text" class="wpae-default-input" ng-model="detailedInformation.sizeCV" droppable />\n </div>\n </div>\n\n <h4>Gender</h4>\n <div class="input">\n <label><input type="radio" ng-model="detailedInformation.gender" value="selectFromWooCommerceProductAttributes" />Select from WooCommerce product attributes</label>\n <div class="clear"></div>\n <div ng-slide-down="detailedInformation.gender == \'selectFromWooCommerceProductAttributes\'" duration="0.2">\n <div class="select-container" ng-if="attributes.length">\n <select autodetect="Gender" chosen ng-options="\'{\' + i.name + \'}\' as i.name for i in attributes" ng-model="detailedInformation.genderAttribute" class="inner">\n <option value="">Leave Blank</option>\n </select>\n </div>\n <div class="no-attributes" ng-if="!attributes.length">\n The products in this export have no product attributes. Add attributes to your products in order to map them to a gender.\n </div>\n </div>\n </div>\n <div class="input">\n <label><input type="radio" ng-model="detailedInformation.gender" value="autodetectBasedOnProductTaxonomies"/>Autodetect based on WooCommerce product categories</label>\n <div ng-slide-down="detailedInformation.gender == \'autodetectBasedOnProductTaxonomies\'" duration="0.2">\n <div class="inner">\n <div class="input">\n <label>\n <input type="radio" ng-model="detailedInformation.genderAutodetect" value="keepBlank"/>Leave gender blank if unable to detect gender\n </label>\n </div>\n <div class="input">\n <label>\n <input type="radio" ng-model="detailedInformation.genderAutodetect" value="setToUnisex" />Set gender to unisex if unable to detect gender\n </label>\n </div>\n </div>\n </div>\n </div>\n <div class="input">\n <label>\n <input type="radio" ng-model="detailedInformation.gender" value="selectProductTaxonomies" />Select from WooCommerce product categories\n </label>\n <div ng-slide-down="detailedInformation.gender == \'selectProductTaxonomies\'" duration="0.2">\n <category-mapper mappings="detailedInformation.genderCats" context="gender" />\n </div>\n </div>\n <div class="input">\n <label><input type="radio" ng-model="detailedInformation.gender" value="customValue" />Custom data</label>\n <div class="input inner" ng-slide-down="detailedInformation.gender == \'customValue\'" duration="0.2">\n <input type="text" class="wpae-default-input" ng-model="detailedInformation.genderCV" droppable />\n </div>\n </div>\n </div>\n\n <div class="wpallexport-collapsed wpallexport-section wpallexport-google-merchants-advanced-options" ng-class="{closed: !advancedOptionsOpen}">\n <div class="wpallexport-content-section rad0">\n <div class="wpallexport-collapsed-header wpallexport-advanced-options-header disable-jquery" ng-click="advancedOptionsOpen = !advancedOptionsOpen">\n <h3>Advanced Options</h3>\n </div>\n <div class="wpallexport-collapsed-content wpallexport-advanced-options-content" ng-slide-down="advancedOptionsOpen" duration="0.5">\n <div class="wpallexport-collapsed-content-inner">\n <h4>Size Type</h4>\n <div class="input">\n <div style="display: inline-block;">\n <input type="text" class="wpae-default-input" ng-model="detailedInformation.sizeType" droppable />\n </div>\n <a href="" class="wpae-field-mapping" ng-click="showMappings=true">Data Mapping</a>\n <div style="position: relative">\n <mapping mappings="detailedInformation.sizeTypeMappings" show="showMappings" context="sizeType" />\n </div>\n </div>\n <h4>Size System</h4>\n <div class="input">\n <div class="select-container" style="padding-left: 0;">\n <select chosen ng-model="detailedInformation.sizeSystem" class="inner">\n <option value="">Leave Blank</option>\n <option value="US">US</option>\n <option value="UK">UK</option>\n <option value="EU">EU</option>\n <option value="DE">DE</option>\n <option value="FR">FR</option>\n <option value="JP">JP</option>\n <option value="CN">CN (China)</option>\n <option value="IT">IT</option>\n <option value="BR">BR</option>\n <option value="MEX">MEX</option>\n <option value="AU">AU</option>\n </select>\n </div>\n </div>\n <h4>Age Group</h4>\n <div class="input">\n <label>\n <input type="radio" ng-model="detailedInformation.ageGroup" value="selectFromWooCommerceProductAttributes"/>Select from WooCommerce product attributes\n </label>\n <div ng-slide-down="detailedInformation.ageGroup == \'selectFromWooCommerceProductAttributes\'" duration="0.2">\n <div class="select-container" ng-if="attributes.length">\n <select chosen ng-options="\'{\' + i.name + \'}\' as i.name for i in attributes" ng-model="detailedInformation.ageGroupAttribute" class="inner">\n <option value="">Leave Blank</option>\n </select>\n </div>\n <div class="no-attributes" ng-if="!attributes.length">\n The products in this export have no product attributes. Add attributes to your products in order to map them to an age group.\n </div>\n </div>\n </div>\n <div class="input">\n <label><input type="radio" ng-model="detailedInformation.ageGroup" value="selectFromProductTaxonomies" />Select from WooCommerce product categories</label>\n <div ng-slide-down="detailedInformation.ageGroup == \'selectFromProductTaxonomies\' " duration="0.5" >\n <div ng-show="detailedInformation.ageGroup == \'selectFromProductTaxonomies\' ">\n <category-mapper mappings="detailedInformation.ageGroupCats" grey="1" context="ageGroup" />\n </div>\n </div>\n </div>\n <div class="input">\n <label>\n <input type="radio" ng-model="detailedInformation.ageGroup" value="customValue" />Custom data\n </label>\n <div class="input inner" ng-slide-down="detailedInformation.ageGroup== \'customValue\'" duration="0.2">\n <input type="text" class="wpae-default-input" ng-model="detailedInformation.ageGroupCV" droppable />\n </div>\n </div>\n <h4>Material</h4>\n <div class="input">\n <label><input type="radio" ng-model="detailedInformation.material" value="selectFromWooCommerceProductAttributes" />Select from WooCommerce product attributes</label>\n <div ng-slide-down="detailedInformation.material == \'selectFromWooCommerceProductAttributes\'" duration="0.2">\n <div class="select-container" ng-if="attributes.length">\n <select chosen ng-options="\'{\' + i.name + \'}\' as i.name for i in attributes" ng-model="detailedInformation.materialAttribute" class="inner">\n <option value="">Leave Blank</option>\n </select>\n </div>\n <div class="no-attributes outer" ng-if="!attributes.length">\n The products in this export have no product attributes. Add attributes to your products in order to map them to a material.\n </div>\n </div>\n </div>\n <div class="input">\n <label><input type="radio" ng-model="detailedInformation.material" value="customValue" />Custom data</label>\n <div class="input inner" ng-slide-down="detailedInformation.material == \'customValue\'" duration="0.2">\n <div class="input inner" ng-slide-down="detailedInformation.material == \'customValue\'" duration="0.2">\n <input type="text" class="wpae-default-input" ng-model="detailedInformation.materialCV" droppable />\n </div>\n </div>\n\n <h4>Pattern</h4>\n <div class="input">\n <label><input type="radio" ng-model="detailedInformation.pattern" value="selectFromWooCommerceProductAttributes" />Select from WooCommerce product attributes</label>\n <div ng-slide-down="detailedInformation.pattern == \'selectFromWooCommerceProductAttributes\'" duration="0.2">\n <div class="select-container" ng-if="attributes.length">\n <select chosen ng-options="\'{\' + i.name + \'}\' as i.name for i in attributes" ng-model="detailedInformation.patternAttribute" class="inner">\n <option value="">Leave Blank</option>\n </select>\n </div>\n <div class="no-attributes outer" ng-if="!attributes.length">\n The products in this export have no product attributes. Add attributes to your products in order to map them to a pattern.\n </div>\n </div>\n </div>\n <div class="input">\n <label><input type="radio" ng-model="detailedInformation.pattern" value="customValue" />Custom data</label>\n <div class="input inner" ng-slide-down="detailedInformation.pattern == \'customValue\'" duration="0.2">\n <input type="text" class="wpae-default-input" ng-model="detailedInformation.patternCV" droppable />\n </div>\n </div>\n </div>\n </div>\n </div>\n </div>\n </div>\n </div>\n</div>')}]),angular.module("productCategories/categoryMapper/categoryMapper.tpl.html",[]).run(["$templateCache",function(a){
10
+ a.put("productCategories/categoryMapper/categoryMapper.tpl.html",'<div class="category-mapper">\n <div>\n <div class="woocommerce-categories-title" style="float:left; padding: 13px 13px 13px 31px;">\n <h4 style="margin: 0; padding: 0; font-size:13px; color:#000;">WooCommerce Categories</h4>\n </div>\n\n <div class="google-categories-title" style="float:right; padding:13px; margin-right: 278px;" ng-if="::(context==\'categories\')">\n <h4 style="margin:0; padding:0; font-size:13px; color:#000; ">Google Categories</h4>\n </div>\n\n <div class="google-categories-title" style="float:right; padding:13px; margin-right: 288px;" ng-if="::(context==\'gender\')">\n <h4 style="margin:0; padding:0; font-size:13px; color:#000; ">Google Genders</h4>\n </div>\n\n <div class="google-categories-title" style="float:right; padding:13px; margin-right: 268px;" ng-if="::(context==\'ageGroup\')">\n <h4 style="margin:0; padding:0; font-size:13px; color:#000; ">Google Age Groups</h4>\n </div>\n </div>\n\n <ul dx-start-with="innerMapping" class="tree" ng-class="::{ \'root\' : $dxLevel == 0 }" ng-init="initialize()" style="width: 100%; float:left; margin-top: 0px;" ng-if="innerMapping">\n <li ng-repeat="node in $dxPrior.children | limitTo: limits" style="display: block;">\n <div class="category-container" style="position: relative;" ng-class="::{ \'with-children\' : node.children.length, \'without-children\' : (!node.children.length) }">\n <div class="hline"></div>\n <div class="category-icon-container" style="float:left;">\n <div class="vline" ng-if="::(($index > 0 && $dxLevel == 0) || $dxLevel > 0)"></div>\n <div class="vline noborder" ng-if="::(!(($index > 0 && $dxLevel == 0) || $dxLevel > 0))"></div>\n <span ng-if="node.expanded" class="minus" ng-click="expandNode(node)">\n <svg width="9" height="9" viewBox="0 0 1792 1792" xmlns="http://www.w3.org/2000/svg">\n <path d="M1600 736v192q0 40-28 68t-68 28h-1216q-40 0-68-28t-28-68v-192q0-40 28-68t68-28h1216q40 0 68 28t28 68z"/>\n </svg>\n </span>\n <span ng-if="!node.expanded && node.children.length" class="plus" ng-click="expandNode(node)">\n <svg width="9" height="9" viewBox="0 0 1792 1792" xmlns="http://www.w3.org/2000/svg">\n <path d="M1600 736v192q0 40-28 68t-68 28h-416v416q0 40-28 68t-68 28h-192q-40 0-68-28t-28-68v-416h-416q-40 0-68-28t-28-68v-192q0-40 28-68t68-28h416v-416q0-40 28-68t68-28h192q40 0 68 28t28 68v416h416q40 0 68 28t28 68z"/>\n </svg>\n </span>\n <span ng-if="::(!node.children.length)" class="plus blank" style="cursor: default;"></span>\n <div class="vline bottom"></div>\n </div>\n <div class="category-name-container">\n <span class="dot" ng-repeat="i in ::getTimes($dxLevel) track by $index"></span>\n <div class="category">\n <a class="category-title" href="" ng-click="expandNode(node)" ng-bind-html="::node.title | safe"></a>\n <br ng-if="::node.children.length"/>\n <span ng-if="::node.children.length" class="children-number">\n {{ ::node.children.length }} child <span ng-if="::node.children.length == 1">category</span><span ng-if="::node.children.length > 1">categories</span>\n </span>\n </div>\n </div>\n <div class="line" ></div>\n <div class="mapping" ng-if="::(context == \'categories\')" >\n <div style="position: relative" ng-init="visible=false">\n <input type="text" style="width: 402px; font-size:13px; padding-left: 8px;" placeholder="{{ getPlaceholder() }}"\n ng-class="{ \'selected-automatically\' : !mappings[node.id].byUser, \'opened\' : visible }"\n ng-model="selectedCategory"\n ng-value="mappings[node.id].name"\n ng-change="categoryChanged()"\n ng-click="categoryClicked()"\n class="wpae-google-category-input"\n ng-model-options="{ debounce: 200 }"\n />\n <google-category-selector />\n </div>\n </div>\n <div class="mapping gender" ng-if="::(context == \'gender\')" style="border: none;">\n <select chosen cascade ng-model="mappings[node.id]" ng-change="select()">\n <option value="male">Male</option>\n <option value="female">Female</option>\n <option value="unisex">Unisex</option>\n </select>\n </div>\n <div class="mapping" ng-if="::(context == \'ageGroup\')" style="border: none; background-color: #F1F1F1; padding:0; margin-top: 5px;" >\n <select chosen cascade ng-model="mappings[node.id]" ng-change="select()">\n <option value="newborn">Newborn</option>\n <option value="infant">Infant</option>\n <option value="toddler">Toddler</option>\n <option value="kids">Kids</option>\n <option value="adult">Adult</option>\n </select>\n </div>\n <div style="clear:both;"></div>\n </div>\n <ul dx-connect="node" ng-if="node.expanded==true"/>\n </li>\n </ul>\n <div class=\'catList\' style="clear:both;"></div>\n <div class="mask" ng-class="::{ grey : grey == 1}"></div>\n</div>\n<div ng-if="initialized && !innerMapping.children.length">\n <div ng-include="\'productCategories/categoryMapper/noCategoriesNotice.tpl.html\'"></div>\n</div>')}]),angular.module("productCategories/categoryMapper/noCategoriesNotice.tpl.html",[]).run(["$templateCache",function(a){a.put("productCategories/categoryMapper/noCategoriesNotice.tpl.html",'<div class="no-categories-notice" ng-if="context == \'categories\' ">\n The products in this export are uncategorized. Add WooCommerce Product Categories to your products in order to map them to Google Product Categories.\n</div>\n\n<div class="no-categories-notice" ng-if="context == \'gender\' ">\n The products in this export are uncategorized. Add WooCommerce Product Categories to your products in order to map them to a gender.\n</div>\n\n<div class="no-categories-notice" ng-if="context == \'ageGroup\' ">\n The products in this export are uncategorized. Add WooCommerce Product Categories to your products in order to map them to an age group.\n</div>\n')}]),angular.module("productCategories/googleCategorySelector/googleCategorySelector.tpl.html",[]).run(["$templateCache",function(a){a.put("productCategories/googleCategorySelector/googleCategorySelector.tpl.html",'<div class="google-category-selector" ng-init="loadCategories()" ng-if="visible" click-outside="closeMe()" outside-if-not="wpae-google-category-input">\n <ul class="categories" dx-start-with="categories">\n <li ng-repeat="category in $dxPrior.children" style="position: relative;">\n <div class="div-content">\n <div class="expand-button" ng-click="expand(category); $event.preventDefault();">\n <div ng-if="category.hasChildren > 0" class="chevron">\n <svg ng-if="!category.opened" width="10" height="10" viewBox="0 0 1792 1792" xmlns="http://www.w3.org/2000/svg">\n <path d="M1683 1331l-166 165q-19 19-45 19t-45-19l-531-531-531 531q-19 19-45 19t-45-19l-166-165q-19-19-19-45.5t19-45.5l742-741q19-19 45-19t45 19l742 741q19 19 19 45.5t-19 45.5z"/>\n </svg>\n <svg ng-if="category.opened" width="10" height="10" viewBox="0 0 1792 1792" xmlns="http://www.w3.org/2000/svg">\n <path d="M1683 808l-742 741q-19 19-45 19t-45-19l-742-741q-19-19-19-45.5t19-45.5l166-165q19-19 45-19t45 19l531 531 531-531q19-19 45-19t45 19l166 165q19 19 19 45.5t-19 45.5z"/>\n </svg>\n </div>\n </div>\n <div ng-bind-html="category.name | safe" ng-click="select(category)" class="google-category-name-container">\n </div>\n <div class="clear"></div>\n </div>\n <ul dx-connect="category" class="categories inner-categories" ng-if="category.opened" />\n </li>\n </ul>\n <div ng-if="!categories.children.length" class="google-no-results-found">\n No results found\n </div>\n</div>')}]),angular.module("productCategories/productCategories.tpl.html",[]).run(["$templateCache",function(a){a.put("productCategories/productCategories.tpl.html",'<div class="wpallexport-collapsed wpallexport-section" ng-class="{closed: !productCategories.open}">\n <div class="wpallexport-content-section">\n <div class="wpallexport-collapsed-header disable-jquery" ng-click="productCategories.open = !productCategories.open">\n <h3>Product Categories</h3>\n </div>\n <div class="wpallexport-collapsed-content" ng-slide-down="productCategories.open" duration="0.5">\n <div class="wpallexport-collapsed-content-inner">\n <h4>Product Type</h4>\n <p>Use this attribute to classify the product using your own categories. The categories here don\'t need to match Google\'s list of acceptable product categories.</p>\n <div class="input">\n <label>\n <input type="radio" ng-model="productCategories.productType" value="useWooCommerceProductCategories" />Use WooCommerce\'s product category\n </label>\n </div>\n <div class="input">\n <label>\n <input type="radio" ng-model="productCategories.productType" value="customValue" />Custom data\n </label>\n <div class="input inner" ng-slide-down="productCategories.productType == \'customValue\'" duration="0.2">\n <input type="text" class="wpae-default-input" ng-model="productCategories.productTypeCV" droppable />\n </div>\n </div>\n <h4>Product Category</h4>\n <p>\n Products added to Google Merchant Center must be categorized according to Google\'s list of product categories. Each product may only be assigned one Google product category. <a href="https://support.google.com/merchants/answer/160081" target="_blank">Read more about Google product categories.</a>\n </p>\n <div class="input">\n <label>\n <input type="radio" ng-model="productCategories.productCategories" value="mapProductCategories" />Map WooCommerce\'s product categories to Google\'s product categories\n <a href="#" class="wpallexport-help" style="margin-top:5px; margin-left: 2px;"\n tipsy="Products assigned more than one WooCommerce product category and mapped to more than one Google product category will be mapped to the most specific, deepest Google product category selected for that product.">?</a>\n </label>\n </div>\n <div ng-slide-down="productCategories.productCategories == \'mapProductCategories\'" duration="0.5">\n <category-mapper mappings="productCategories.catMappings" />\n </div>\n\n <div class="input">\n <label>\n <input type="radio" ng-model="productCategories.productCategories" value="useWooCommerceProductCategories" />Use WooCommerce\'s product categories\n <a href="#" class="wpallexport-help" style="margin-top:5px; margin-left: 2px;"\n tipsy="Products assigned to more than one WooCommerce product category will only have the most specific, deepest product category exported.">?</a>\n </label>\n <p class="no-categories-notice" ng-slide-down="productCategories.productCategories == \'useWooCommerceProductCategories\'" duration="0.2">\n If your WooCommerce product categories do not exactly match Google\'s, your feed will fail when uploaded to Google.\n </p>\n <div ng-slide-down="!$root.cats.children.length && productCategories.productCategories == \'useWooCommerceProductCategories\'" duration="0.2">\n <div ng-include="\'productCategories/categoryMapper/noCategoriesNotice.tpl.html\'" ng-init="context = \'categories\' "></div>\n </div>\n </div>\n\n <div class="input">\n <label>\n <input type="radio" ng-model="productCategories.productCategories" value="customValue" />Custom data\n </label>\n <div class="input inner" ng-slide-down="productCategories.productCategories == \'customValue\'" duration="0.2">\n <input type="text" class="wpae-default-input" ng-model="productCategories.productCategoriesCV" droppable />\n </div>\n </div>\n </div>\n\n </div>\n </div>\n</div>')}]),angular.module("shipping/shipping.tpl.html",[]).run(["$templateCache",function(a){a.put("shipping/shipping.tpl.html",'<div class="wpallexport-collapsed wpallexport-section" ng-class="{closed: !shipping.open }">\n <div class="wpallexport-content-section">\n <div class="wpallexport-collapsed-header disable-jquery"\n ng-click="shipping.open = !shipping.open ">\n <h3>Shipping</h3>\n </div>\n <div class="wpallexport-collapsed-content" id="shipping" ng-slide-down="shipping.open" duration="0.5">\n <div class="wpallexport-collapsed-content-inner">\n <h4>Shipping Price</h4>\n <p>\n This attribute allows Google to provide a shipping estimate for the product.\n This overrides the default shipping price configured in the Google Merchant Center.\n </p>\n <div class="input">\n <input type="text" class="wpae-default-input" ng-model="shipping.shippingPrice" droppable />\n <a href="" ng-click="shipping.adjustShippingPrice = !shipping.adjustShippingPrice" class="adjust-price-link">\n <span ng-if="!shipping.adjustShippingPrice" style="width: 6px; display: inline-block;">+</span>\n <span ng-if="shipping.adjustShippingPrice" style="width: 6px; display: inline-block;">-</span>\n Adjust Shipping Price</a>\n <input type="hidden" ng-model="shipping.shippingHeight"/>\n <input type="hidden" ng-model="shipping.shippingLength"/>\n <input type="hidden" ng-model="shipping.shippingWidth"/>\n <div ng-slide-down="shipping.adjustShippingPrice" class="adjust-price" duration="0.2" style="margin-top: 5px; ">\n <input type="text" style="margin-top: 0; margin-right: 0;" class="wpae-default-input" ng-model="shipping.adjustShippingPriceValue" droppable /><select style="margin-top:5px;" ng-model="shipping.adjustPriceType">\n <option value="%">%</option>\n <option value="USD">{{currency}}</option>\n </select>\n\n <div ng-show="shipping.adjustPriceType == \'%\'" class="tooltip-container">\n <a href="#" ng-cloak="" class="wpallexport-help" style="top:0;"\n 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>\n </div>\n <div ng-show="shipping.adjustPriceType == \'USD\'" class="tooltip-container">\n <a href="#" style="top:0;" ng-cloak="" class="wpallexport-help" tipsy="Enter a negative number to reduce prices.">?</a>\n </div>\n </div>\n </div>\n\n <h4>Length, Width, Height</h4>\n <div class="input">\n <label>\n <input type="radio" ng-model="shipping.dimensions" value="useWooCommerceProductValues"/>Use WooCommerce\'s product values and convert them to\n <select ng-model="shipping.convertTo" style="width: 175px; height: 30px; padding: 0 0 0 8px; margin-left: 5px; margin-top: 5px; ">\n <option value="cm">Centimeters (cm)</option>\n <option value="in">Inches (in)</option>\n </select>\n </label>\n </div>\n <div class="input">\n <label><input type="radio" ng-model="shipping.dimensions" value="customValue"/>Custom data</label>\n <div ng-slide-down="shipping.dimensions == \'customValue\'" duration="0.2" class="input inner">\n <input type="text" class="wpae-default-input" ng-model="shipping.dimensionsCV" droppable />\n </div>\n </div>\n\n <h4>Shipping Weight</h4>\n <div class="input">\n <label>\n <input type="radio" ng-model="shipping.weight" value=""/>Do not include in the feed\n </label>\n </div>\n <div class="input">\n <label>\n <input type="radio" ng-model="shipping.weight" value="useWooCommerceProductValues"/>Use WooCommerce\'s product values\n </label>\n </div>\n <div class="input">\n <label><input type="radio" ng-model="shipping.weight" value="customValue"/>Custom data</label>\n <div ng-slide-down="shipping.weight == \'customValue\'" duration="0.2" class="input inner">\n <input type="text" class="wpae-default-input" ng-model="shipping.weightCV" droppable />\n </div>\n </div>\n\n <h4>Shipping Label</h4>\n <div class="input">\n <input type="text" class="wpae-default-input" ng-model="shipping.shippingLabel" droppable />\n </div>\n </div>\n </div>\n </div>\n</div>')}]),angular.module("uniqueIdentifiers/uniqueIdentifiers.tpl.html",[]).run(["$templateCache",function(a){a.put("uniqueIdentifiers/uniqueIdentifiers.tpl.html",'<div class="wpallexport-collapsed wpallexport-section" ng-class="{closed: !uniqueIdentifiers.open}">\n <div class="wpallexport-content-section">\n <div class="wpallexport-collapsed-header disable-jquery" ng-click="uniqueIdentifiers.open = !uniqueIdentifiers.open">\n <h3>Unique Identifiers</h3>\n </div>\n <div class="wpallexport-collapsed-content slide-toggle" id="unique-identifiers" ng-slide-down="uniqueIdentifiers.open" duration="0.5">\n <div class="wpallexport-collapsed-content-inner">\n <p>\n Unique product identifiers are product codes associated with your products.\n Products submitted without unique identifiers are difficult to classify and may not be able to take advantage of all Google shopping features.\n <a href="https://support.google.com/merchants/answer/7052112?hl=en&ref_topic=3404778#intro-product-identifiers" target="_blank">Read more about unique product identifiers</a>.\n </p>\n <h4>GTIN</h4>\n <p>\n Global Trade Item Numbers include UPC, EAN (in Europe), JAN (in Japan), and ISBN. <a href="https://support.google.com/merchants/answer/6219078" target="_blank">Read how to find your products\' GTIN</a>.\n </p>\n <div class="input">\n <input type="text" class="wpae-default-input" ng-model="uniqueIdentifiers.gtin" droppable />\n </div>\n\n <h4>MPN</h4>\n <div class="input">\n <input type="text" class="wpae-default-input" ng-model="uniqueIdentifiers.mpn" droppable />\n </div>\n\n <h4>Brand</h4>\n <div class="input">\n <input type="text" class="wpae-default-input" ng-model="uniqueIdentifiers.brand" droppable />\n </div>\n\n <h4>Identifier Exists</h4>\n <div class="input">\n <label><input type="radio" ng-model="uniqueIdentifiers.identifierExists" value="1" />Set to false if product has no GTIN or MPN\n <a style="margin-top: 0; margin-bottom: 0; margin-left: 0; padding-bottom: 0;" class="wpallexport-help" tipsy="If your product has neither an MPN or GTIN, Google requires the attribute \'identifier_exists\' to be set to false. WP All Export will do this automatically if this option is enabled.">?</a>\n </label>\n </div>\n <div class="input">\n <label><input type="radio" ng-model="uniqueIdentifiers.identifierExists" value="customValue" />Custom data</label>\n <div class="input inner" ng-slide-down="uniqueIdentifiers.identifierExists == \'customValue\'" duration="0.2">\n <input type="text" class="wpae-default-input" ng-model="uniqueIdentifiers.identifierExistsCV" droppable />\n </div>\n </div>\n\n </div>\n </div>\n </div>\n</div>')}]);
filters/pmxe_url_filter.php ADDED
@@ -0,0 +1,5 @@
1
+ <?php
2
+
3
+ function pmxe_url_filter($str) {
4
+ return "http://" == $str || "ftp://" == $str ? "" : $str;
5
+ }
libraries/WpaeXmlProcessor.php CHANGED
@@ -161,8 +161,9 @@ class WpaeXmlProcessor
161
$f = $this->dom->createDocumentFragment();
162
$f->appendXML($nodeXML);
163
$this->parseElement($f);
164
- $element->parentNode->parentNode->replaceChild($f, $element->parentNode);
165
-
166
} else {
167
foreach ($snippetValues as $snippetValue) {
168
$newValueNode = $element->parentNode->cloneNode(true);
@@ -628,9 +629,10 @@ class WpaeXmlProcessor
628
{
629
$xml = str_replace('<!--', '<commentTempNode>', $xml);
630
$xml = str_replace('-->', '</commentTempNode>', $xml);
631
-
632
$xml = str_replace("\"{}\"", '""', $xml);
633
- $xml = str_replace("{}", '""', $xml);
634
$xml = str_replace(">\"\"<", '><', $xml);
635
$xml = str_replace("[implode(',',{})]", "", $xml);
636
return $xml;
161
$f = $this->dom->createDocumentFragment();
162
$f->appendXML($nodeXML);
163
$this->parseElement($f);
164
+ if($element->parentNode->parentNode) {
165
+ $element->parentNode->parentNode->replaceChild($f, $element->parentNode);
166
+ }
167
} else {
168
foreach ($snippetValues as $snippetValue) {
169
$newValueNode = $element->parentNode->cloneNode(true);
629
{
630
$xml = str_replace('<!--', '<commentTempNode>', $xml);
631
$xml = str_replace('-->', '</commentTempNode>', $xml);
632
$xml = str_replace("\"{}\"", '""', $xml);
633
+
634
+ preg_replace('%(\[.*)({})(.*\])%', "$1\"\"$2", $xml);
635
+
636
$xml = str_replace(">\"\"<", '><', $xml);
637
$xml = str_replace("[implode(',',{})]", "", $xml);
638
return $xml;
libraries/XmlCsvExport.php CHANGED
@@ -764,7 +764,7 @@ final Class XmlCsvExport
764
{
765
foreach ($available_data[$section['content']] as $field)
766
{
767
- if ( is_array($field) and (isset($field['auto']) or ! in_array('product', $post['cpt']) ))
768
{
769
$auto_generate['ids'][] = 1;
770
$auto_generate['cc_label'][] = is_array($field) ? $field['label'] : $field;
764
{
765
foreach ($available_data[$section['content']] as $field)
766
{
767
+ if ( is_array($field) and (isset($field['auto']) or (is_array($post['cpt']) && ! in_array('product', $post['cpt']) )))
768
{
769
$auto_generate['ids'][] = 1;
770
$auto_generate['cc_label'][] = is_array($field) ? $field['label'] : $field;
libraries/XmlExportACF.php CHANGED
@@ -172,8 +172,9 @@ if ( ! class_exists('XmlExportACF') )
172
173
$orderby = "order_no";
174
175
- @array_multisort($sortArray[$orderby],SORT_ASC, $fields);
176
-
177
foreach ($fields as $field){
178
if (in_array($field['type'], array('tab'))) continue;
179
$this->_acf_groups[$key]['fields'][] = $field;
@@ -226,7 +227,7 @@ if ( ! class_exists('XmlExportACF') )
226
}
227
228
229
- if ( ! empty($field_value) )
230
{
231
$field_value = maybe_unserialize($field_value);
232
@@ -1074,6 +1075,9 @@ if ( ! class_exists('XmlExportACF') )
1074
}
1075
else
1076
{
1077
1078
// $article[$element_name] = ($preview) ? trim(preg_replace('~[\r\n]+~', ' ', htmlspecialchars($val))) : $val;
1079
wp_all_export_write_article( $article, $element_name, ($preview) ? trim(preg_replace('~[\r\n]+~', ' ', htmlspecialchars($val))) : $val);
172
173
$orderby = "order_no";
174
175
+ if(is_array($sortArray[$orderby])) {
176
+ @array_multisort($sortArray[$orderby], SORT_ASC, $fields);
177
+ }
178
foreach ($fields as $field){
179
if (in_array($field['type'], array('tab'))) continue;
180
$this->_acf_groups[$key]['fields'][] = $field;
227
}
228
229
230
+ if ( ! empty($field_value))
231
{
232
$field_value = maybe_unserialize($field_value);
233
1075
}
1076
else
1077
{
1078
+ if($field_value === 0 || $field_value === "0") {
1079
+ $val = 0;
1080
+ }
1081
1082
// $article[$element_name] = ($preview) ? trim(preg_replace('~[\r\n]+~', ' ', htmlspecialchars($val))) : $val;
1083
wp_all_export_write_article( $article, $element_name, ($preview) ? trim(preg_replace('~[\r\n]+~', ' ', htmlspecialchars($val))) : $val);
libraries/XmlExportCpt.php CHANGED
@@ -612,6 +612,10 @@ final class XmlExportCpt
612
$templateOptions['status_xpath'] = '{' . $element_name . '[1]}';
613
$templateOptions['is_update_status'] = 1;
614
break;
615
case 'date':
616
$templateOptions[$element_type] = '{' . $element_name . '[1]}';
617
$templateOptions['is_update_dates'] = 1;
612
$templateOptions['status_xpath'] = '{' . $element_name . '[1]}';
613
$templateOptions['is_update_status'] = 1;
614
break;
615
+ case 'comment_status':
616
+ $templateOptions['comment_status_xpath'] = '{'.$element_name.'[1]}';
617
+ $templateOptions['is_update_comment_status'] = 1;
618
+ break;
619
case 'date':
620
$templateOptions[$element_type] = '{' . $element_name . '[1]}';
621
$templateOptions['is_update_dates'] = 1;
libraries/XmlExportEngine.php CHANGED
@@ -285,12 +285,12 @@ if ( ! class_exists('XmlExportEngine') ){
285
'type' => 'image_alt',
286
'auto' => 1
287
),
288
- array(
289
- 'name' => 'Featured',
290
- 'label' => 'featured',
291
- 'type' => 'image_featured',
292
- 'auto' => 1
293
- ),
294
)
295
),
296
'attachments' => array(
@@ -519,7 +519,7 @@ if ( ! class_exists('XmlExportEngine') ){
519
}
520
if ( 'advanced' == $this->post['export_type'] and ! self::$is_user_export and ! self::$is_comment_export and ! self::$is_taxonomy_export )
521
{
522
- $meta_keys = $wpdb->get_results("SELECT DISTINCT meta_key FROM {$table_prefix}postmeta WHERE {$table_prefix}postmeta.meta_key NOT LIKE '_edit%' LIMIT 500");
523
if ( ! empty($meta_keys)){
524
$exclude_keys = array('_first_variation_attributes', '_is_first_variation_created');
525
foreach ($meta_keys as $meta_key) {
285
'type' => 'image_alt',
286
'auto' => 1
287
),
288
+ array(
289
+ 'name' => 'Featured',
290
+ 'label' => 'featured',
291
+ 'type' => 'image_featured',
292
+ 'auto' => 1
293
+ ),
294
)
295
),
296
'attachments' => array(
519
}
520
if ( 'advanced' == $this->post['export_type'] and ! self::$is_user_export and ! self::$is_comment_export and ! self::$is_taxonomy_export )
521
{
522
+ $meta_keys = $wpdb->get_results("SELECT DISTINCT meta_key FROM {$table_prefix}postmeta WHERE {$table_prefix}postmeta.meta_key NOT LIKE '_edit%' LIMIT 1000");
523
if ( ! empty($meta_keys)){
524
$exclude_keys = array('_first_variation_attributes', '_is_first_variation_created');
525
foreach ($meta_keys as $meta_key) {
libraries/XmlExportMediaGallery.php CHANGED
@@ -47,6 +47,8 @@ final class XmlExportMediaGallery
47
'post_type' => 'attachment',
48
'posts_per_page' => -1,
49
'post_parent' => self::$pid,
50
) );
51
52
if ( ! empty($attachments)):
@@ -122,6 +124,8 @@ final class XmlExportMediaGallery
122
'post_type' => 'attachment',
123
'posts_per_page' => -1,
124
'post_parent' => self::$pid,
125
) );
126
127
if ( ! empty($images)):
@@ -165,11 +169,11 @@ final class XmlExportMediaGallery
165
return $data;
166
}
167
168
- public static function get_images( $field = 'image_url', $options = false )
169
- {
170
- self::init('images', $options);
171
172
- $data = array();
173
174
switch ($field){
175
@@ -190,8 +194,8 @@ final class XmlExportMediaGallery
190
191
}
192
193
- return $data;
194
- }
195
196
private static function get_media( $field = 'url', $attachment = false )
197
{
47
'post_type' => 'attachment',
48
'posts_per_page' => -1,
49
'post_parent' => self::$pid,
50
+ 'orderby' => 'ID',
51
+ 'order' => 'ASC'
52
) );
53
54
if ( ! empty($attachments)):
124
'post_type' => 'attachment',
125
'posts_per_page' => -1,
126
'post_parent' => self::$pid,
127
+ 'orderby' => 'ID',
128
+ 'order' => 'ASC'
129
) );
130
131
if ( ! empty($images)):
169
return $data;
170
}
171
172
+ public static function get_images( $field = 'image_url', $options = false )
173
+ {
174
+ self::init('images', $options);
175
176
+ $data = array();
177
178
switch ($field){
179
194
195
}
196
197
+ return $data;
198
+ }
199
200
private static function get_media( $field = 'url', $attachment = false )
201
{
libraries/XmlExportWooCommerce.php CHANGED
@@ -345,10 +345,10 @@ if ( ! class_exists('XmlExportWooCommerce') )
345
}
346
347
if(\Wpae\App\Service\WooCommerceVersion::isWooCommerceNewerThan('3.0')) {
348
- $available_data['product_fields'][] = array(
349
'name' => 'Product Visibility',
350
'label' => 'product_visibility',
351
- 'type' => 'woo',
352
'auto' => true
353
);
354
}
@@ -665,11 +665,6 @@ if ( ! class_exists('XmlExportWooCommerce') )
665
666
break;
667
668
- case 'product_visibility':
669
- $product = wc_get_product( $record->ID );
670
- $data[$element_name] = apply_filters('pmxe_woo_field', pmxe_filter($product->get_catalog_visibility(), $fieldSnipped), $element_value, $record->ID);
671
- break;
672
-
673
default:
674
675
$cur_meta_values = get_post_meta($record->ID, $element_value);
@@ -812,7 +807,7 @@ if ( ! class_exists('XmlExportWooCommerce') )
812
813
foreach ($data_to_export as $key => $data) {
814
if ($key == 'Price' || $key == 'Regular Price' || $key == 'Sale Price') {
815
- $data = $rawPrices ? $data :pmxe_prepare_price($data, false, true, true);
816
}
817
wp_all_export_write_article($article, $key, $data);
818
}
@@ -901,7 +896,7 @@ if ( ! class_exists('XmlExportWooCommerce') )
901
$data_to_export = $this->prepare_export_data( $record, $options, $elId );
902
903
foreach ($data_to_export as $key => $data)
904
- {
905
$element_name_ns = '';
906
$element_name = str_replace("-", "_", preg_replace('/[^a-z0-9:_]/i', '', $key));
907
if (strpos($element_name, ":") !== false)
@@ -915,7 +910,7 @@ if ( ! class_exists('XmlExportWooCommerce') )
915
$rawPrices = apply_filters('wp_all_export_raw_prices', $rawPrices);
916
917
if ($key == 'Price' || $key == 'Regular Price' || $key == 'Sale Price') {
918
- $data = $rawPrices? $data :pmxe_prepare_price($data, false, true, true);
919
}
920
921
$xmlWriter = apply_filters('wp_all_export_add_before_element', $xmlWriter, $element_name, XmlExportEngine::$exportID, $record->ID);
345
}
346
347
if(\Wpae\App\Service\WooCommerceVersion::isWooCommerceNewerThan('3.0')) {
348
+ $available_data['existing_taxonomies'][] = array(
349
'name' => 'Product Visibility',
350
'label' => 'product_visibility',
351
+ 'type' => 'cats',
352
'auto' => true
353
);
354
}
665
666
break;
667
668
default:
669
670
$cur_meta_values = get_post_meta($record->ID, $element_value);
807
808
foreach ($data_to_export as $key => $data) {
809
if ($key == 'Price' || $key == 'Regular Price' || $key == 'Sale Price') {
810
+ //$data = $rawPrices ? $data :pmxe_prepare_price($data, true, true, true);
811
}
812
wp_all_export_write_article($article, $key, $data);
813
}
896
$data_to_export = $this->prepare_export_data( $record, $options, $elId );
897
898
foreach ($data_to_export as $key => $data)
899
+ {
900
$element_name_ns = '';
901
$element_name = str_replace("-", "_", preg_replace('/[^a-z0-9:_]/i', '', $key));
902
if (strpos($element_name, ":") !== false)
910
$rawPrices = apply_filters('wp_all_export_raw_prices', $rawPrices);
911
912
if ($key == 'Price' || $key == 'Regular Price' || $key == 'Sale Price') {
913
+ //$data = $rawPrices? $data :pmxe_prepare_price($data, false, true, true);
914
}
915
916
$xmlWriter = apply_filters('wp_all_export_add_before_element', $xmlWriter, $element_name, XmlExportEngine::$exportID, $record->ID);
libraries/XmlExportWooCommerceOrder.php CHANGED
@@ -555,6 +555,10 @@ if ( ! class_exists('XmlExportWooCommerceOrder') )
555
if ( ! in_array($friendly_name, $headers)) $headers[] = $friendly_name;
556
}
557
}
558
559
break;
560
// Discount Amount (per coupon)
@@ -569,6 +573,11 @@ if ( ! class_exists('XmlExportWooCommerceOrder') )
569
if ( ! in_array("Coupon Code", $headers)) $headers[] = "Coupon Code";
570
}
571
}
572
573
break;
574
// Fee Amount (per surcharge)
@@ -583,6 +592,11 @@ if ( ! class_exists('XmlExportWooCommerceOrder') )
583
if ( ! in_array("Fee Name", $headers)) $headers[] = "Fee Name";
584
}
585
}
586
587
break;
588
@@ -1294,8 +1308,10 @@ if ( ! class_exists('XmlExportWooCommerceOrder') )
1294
'_line_total' => __('Item Total', 'wp_all_export_plugin'),
1295
'_line_subtotal_tax' => __('Item Tax', 'wp_all_export_plugin'),
1296
'_line_tax' => __('Item Tax Total', 'wp_all_export_plugin'),
1297
- '_line_tax_data' => __('Item Tax Data', 'wp_all_export_plugin')
1298
- );
1299
1300
return apply_filters('wp_all_export_available_order_default_product_data_filter', $data);
1301
}
555
if ( ! in_array($friendly_name, $headers)) $headers[] = $friendly_name;
556
}
557
}
558
+ else{
559
+ $friendly_name = str_replace(" (per tax)", "", $options['cc_name'][$element_key]);
560
+ if ( ! in_array($friendly_name, $headers)) $headers[] = $friendly_name;
561
+ }
562
563
break;
564
// Discount Amount (per coupon)
573
if ( ! in_array("Coupon Code", $headers)) $headers[] = "Coupon Code";
574
}
575
}
576
+ else{
577
+ $friendly_name = str_replace("(per coupon)", "", $options['cc_name'][$element_key]);
578
+ if ( ! in_array($friendly_name, $headers)) $headers[] = $friendly_name;
579
+ if ( ! in_array("Coupon Code", $headers)) $headers[] = "Coupon Code";
580
+ }
581
582
break;
583
// Fee Amount (per surcharge)
592
if ( ! in_array("Fee Name", $headers)) $headers[] = "Fee Name";
593
}
594
}
595
+ else{
596
+ $friendly_name = str_replace(" (per surcharge)", "", $options['cc_name'][$element_key]);
597
+ if ( ! in_array($friendly_name, $headers)) $headers[] = $friendly_name;
598
+ if ( ! in_array("Fee Name", $headers)) $headers[] = "Fee Name";
599
+ }
600
601
break;
602
1308
'_line_total' => __('Item Total', 'wp_all_export_plugin'),
1309
'_line_subtotal_tax' => __('Item Tax', 'wp_all_export_plugin'),
1310
'_line_tax' => __('Item Tax Total', 'wp_all_export_plugin'),
1311
+ '_line_tax_data' => __('Item Tax Data', 'wp_all_export_plugin'),
1312
+ '__line_item_id' => __('Order Line ID', 'wp_all_export_plugin'),
1313
+ '__line_item_title' => __('Order Line Title', 'wp_all_export_plugin'),
1314
+ );
1315
1316
return apply_filters('wp_all_export_available_order_default_product_data_filter', $data);
1317
}
models/export/record.php CHANGED
@@ -340,7 +340,7 @@ class PMXE_Export_Record extends PMXE_Model_Record {
340
case 'XmlGoogleMerchants':
341
case 'custom':
342
require_once PMXE_ROOT_DIR . '/classes/XMLWriter.php';
343
- file_put_contents($file_path, PMXE_XMLWriter::preprocess_xml(XmlExportEngine::$exportOptions['custom_xml_template_footer']), FILE_APPEND);
344
break;
345
}
346
@@ -382,7 +382,9 @@ class PMXE_Export_Record extends PMXE_Model_Record {
382
))->update();
383
384
do_action('pmxe_after_export', $this->id, $this);
385
- }
386
387
$this->set('registered_on', date('Y-m-d H:i:s'))->save(); // update registered_on to indicated that job has been exectured even if no files are going to be imported by the rest of the method
388
@@ -664,9 +666,7 @@ class PMXE_Export_Record extends PMXE_Model_Record {
664
}
665
666
public static function is_bundle_supported( $options )
667
- {
668
- $options += PMXE_Plugin::get_default_import_options();
669
-
670
// custom XML template do not support import bundle
671
if ( $options['export_to'] == 'xml' && ! empty($options['xml_template_type']) && in_array($options['xml_template_type'], array('custom', 'XmlGoogleMerchants')) ) return false;
672
340
case 'XmlGoogleMerchants':
341
case 'custom':
342
require_once PMXE_ROOT_DIR . '/classes/XMLWriter.php';
343
+ file_put_contents($file_path, PMXE_XMLWriter::preprocess_xml("\n".XmlExportEngine::$exportOptions['custom_xml_template_footer']), FILE_APPEND);
344
break;
345
}
346
382
))->update();
383
384
do_action('pmxe_after_export', $this->id, $this);
385
+ } else {
386
+ do_action('pmxe_after_iteration', $this->id, $this);
387
+ }
388
389
$this->set('registered_on', date('Y-m-d H:i:s'))->save(); // update registered_on to indicated that job has been exectured even if no files are going to be imported by the rest of the method
390
666
}
667
668
public static function is_bundle_supported( $options )
669
+ {
670
// custom XML template do not support import bundle
671
if ( $options['export_to'] == 'xml' && ! empty($options['xml_template_type']) && in_array($options['xml_template_type'], array('custom', 'XmlGoogleMerchants')) ) return false;
672
readme.txt CHANGED
@@ -1,8 +1,8 @@
1
=== Export WordPress data to XML/CSV ===
2
Contributors: soflyy, wpallimport
3
Requires at least: 4.1
4
- Tested up to: 4.9.4
5
- Stable tag: 1.2.0
6
Tags: wordpress csv export, wordpress xml export, xml, csv, datafeed, export, migrate, export csv from wordpress, export xml from wordpress, advanced xml export, advanced csv export, export data, bulk csv export, export custom post type, export woocommerce products, export woocommerce orders, migrate woocommerce, csv export, export csv, xml export, export xml, csv exporter, datafeed
7
8
WP All Export is an extremely powerful exporter that makes it easy to export any XML, CSV, or Excel file from WordPress.
@@ -86,6 +86,22 @@ Either: -
86
87
== Changelog ==
88
89
= 1.2.0 =
90
* new feature: Automatic Scheduling - A new, optional service from Soflyy that makes scheduling exports incredibly easy.
91
* improvement: Support migrating users & keeping passwords
1
=== Export WordPress data to XML/CSV ===
2
Contributors: soflyy, wpallimport
3
Requires at least: 4.1
4
+ Tested up to: 4.9.8
5
+ Stable tag: 1.2.1
6
Tags: wordpress csv export, wordpress xml export, xml, csv, datafeed, export, migrate, export csv from wordpress, export xml from wordpress, advanced xml export, advanced csv export, export data, bulk csv export, export custom post type, export woocommerce products, export woocommerce orders, migrate woocommerce, csv export, export csv, xml export, export xml, csv exporter, datafeed
7
8
WP All Export is an extremely powerful exporter that makes it easy to export any XML, CSV, or Excel file from WordPress.
86
87
== Changelog ==
88
89
+ = 1.2.1 =
90
+ * new filter: added pmxe_after_iteration action
91
+ * bugfix: increase custom query meta limit
92
+ * bugfix: remove deprecated function calls for PHP 7.2 compatibility
93
+ * bugfix: address various PHP warnings and notices
94
+ * bugfix: graceful failure for non:writable uploads folder
95
+ * bugfix: warning when exporting WooCommerce orders using Automatic Scheduling
96
+ * bugfix: WooCommerce product variations exported as separate products when adding product attributes to custom export fields
97
+ * bugfix: small UI and spacing issues
98
+ * bugfix: prices with more than two decimal places are not exported correctly
99
+ * bugfix: exporting empty ACF values shifts rows in CSV exports
100
+ * bugfix: Australia missing from scheduling timezones
101
+ * bugfix: unable to filter or export WooCommerce product visibility data
102
+ * bugfix: Automatic scheduling UI spacing issues
103
+ * bugfix: unrelated errors are reported in functions.php file
104
+
105
= 1.2.0 =
106
* new feature: Automatic Scheduling - A new, optional service from Soflyy that makes scheduling exports incredibly easy.
107
* improvement: Support migrating users & keeping passwords
src/App/Controller/SchedulingLicenseController.php CHANGED
@@ -62,6 +62,13 @@ class SchedulingLicenseController
62
{
63
global $wpdb;
64
65
// retrieve the license from the database
66
return $this->licensingActivator->activateLicense(PMXE_Plugin::getSchedulingName(),\Wpae\App\Service\License\LicenseActivator::CONTEXT_SCHEDULING);
67
}
@@ -70,6 +77,13 @@ class SchedulingLicenseController
70
{
71
$options = PMXE_Plugin::getInstance()->getOption();
72
73
return $this->licensingActivator->checkLicense(PMXE_Plugin::getSchedulingName(), $options, LicenseActivator::CONTEXT_SCHEDULING);
74
}
75
}
62
{
63
global $wpdb;
64
65
+ delete_transient(PMXE_Plugin::$cache_key);
66
+
67
+ $wpdb->query( $wpdb->prepare("DELETE FROM $wpdb->options WHERE option_name = %s", $this->slug . '_' . PMXE_Plugin::$cache_key) );
68
+ $wpdb->query( $wpdb->prepare("DELETE FROM $wpdb->options WHERE option_name = %s", $this->slug . '_timeout_' . PMXE_Plugin::$cache_key) );
69
+
70
+ delete_site_transient('update_plugins');
71
+
72
// retrieve the license from the database
73
return $this->licensingActivator->activateLicense(PMXE_Plugin::getSchedulingName(),\Wpae\App\Service\License\LicenseActivator::CONTEXT_SCHEDULING);
74
}
77
{
78
$options = PMXE_Plugin::getInstance()->getOption();
79
80
+ global $wpdb;
81
+
82
+ delete_transient(PMXE_Plugin::$cache_key);
83
+
84
+ $wpdb->query( $wpdb->prepare("DELETE FROM $wpdb->options WHERE option_name = %s", $this->slug . '_' . PMXE_Plugin::$cache_key) );
85
+ $wpdb->query( $wpdb->prepare("DELETE FROM $wpdb->options WHERE option_name = %s", $this->slug . '_timeout_' . PMXE_Plugin::$cache_key) );
86
+
87
return $this->licensingActivator->checkLicense(PMXE_Plugin::getSchedulingName(), $options, LicenseActivator::CONTEXT_SCHEDULING);
88
}
89
}
src/App/Service/Pro/VariationOptions/VariationOptions.php CHANGED
@@ -58,11 +58,15 @@ class VariationOptions extends BasicVariationOptions implements VariationOptions
58
LEFT OUTER JOIN $wpdb->posts r
59
ON o.post_parent = r.ID
60
WHERE r.post_status = 'trash' AND o.post_type = 'product_variation')
61
- OR ($wpdb->posts.post_type = 'product_variation' AND $wpdb->posts.post_status <> 'trash' AND $wpdb->posts.post_parent IN (
62
SELECT DISTINCT $wpdb->posts.ID
63
FROM $wpdb->posts $join
64
WHERE $where
65
- ))";
66
} else {
67
return $this->defaultQuery($wpdb, $where, $join, $closeBracket);
68
}
58
LEFT OUTER JOIN $wpdb->posts r
59
ON o.post_parent = r.ID
60
WHERE r.post_status = 'trash' AND o.post_type = 'product_variation')
61
+ OR ($wpdb->posts.post_type = 'product_variation' AND $wpdb->posts.post_status <> 'trash'
62
+
63
+ AND $wpdb->posts.post_parent IN (
64
SELECT DISTINCT $wpdb->posts.ID
65
FROM $wpdb->posts $join
66
WHERE $where
67
+ )
68
+ ".$this->getVariationsWhere($where, $join)."
69
+ )";
70
} else {
71
return $this->defaultQuery($wpdb, $where, $join, $closeBracket);
72
}
src/App/Service/VariationOptions/VariationOptions.php CHANGED
@@ -3,6 +3,8 @@
3
namespace Wpae\App\Service\VariationOptions;
4
5
6
class VariationOptions implements VariationOptionsInterface
7
{
8
public function getQueryWhere($wpdb, $where, $join, $closeBracket = false)
@@ -33,27 +35,42 @@ class VariationOptions implements VariationOptionsInterface
33
}
34
35
if($closeBracket) {
36
- return " AND $wpdb->posts.post_type = 'product' " . $langQuery . " AND $wpdb->posts.ID NOT IN (SELECT o.ID FROM $wpdb->posts o
37
LEFT OUTER JOIN $wpdb->posts r
38
ON o.post_parent = r.ID
39
WHERE r.post_status = 'trash' AND o.post_type = 'product_variation'))
40
- OR ($wpdb->posts.post_type = 'product_variation' AND $wpdb->posts.post_status <> 'trash' AND $wpdb->posts.post_parent IN (
41
SELECT DISTINCT $wpdb->posts.ID
42
FROM $wpdb->posts $join
43
WHERE $where
44
- ))";
45
} else {
46
- return " AND $wpdb->posts.post_type = 'product' " . $langQuery . " AND $wpdb->posts.ID NOT IN (SELECT o.ID FROM $wpdb->posts o
47
LEFT OUTER JOIN $wpdb->posts r
48
ON o.post_parent = r.ID
49
WHERE r.post_status = 'trash' AND o.post_type = 'product_variation')
50
- OR ($wpdb->posts.post_type = 'product_variation' AND $wpdb->posts.post_status <> 'trash' AND $wpdb->posts.post_parent IN (
51
SELECT DISTINCT $wpdb->posts.ID
52
FROM $wpdb->posts $join
53
WHERE $where
54
- ))";
55
}
56
57
}
58
59
/**
3
namespace Wpae\App\Service\VariationOptions;
4
5
6
+ use Wpae\Pro\Filtering\FilteringCPT;
7
+
8
class VariationOptions implements VariationOptionsInterface
9
{
10
public function getQueryWhere($wpdb, $where, $join, $closeBracket = false)
35
}
36
37
if($closeBracket) {
38
+ $sql = " AND $wpdb->posts.post_type = 'product' " . $langQuery . " AND $wpdb->posts.ID NOT IN (SELECT o.ID FROM $wpdb->posts o
39
LEFT OUTER JOIN $wpdb->posts r
40
ON o.post_parent = r.ID
41
WHERE r.post_status = 'trash' AND o.post_type = 'product_variation'))
42
+ OR ($wpdb->posts.post_type = 'product_variation' AND $wpdb->posts.post_status <> 'trash'
43
+
44
+ AND $wpdb->posts.post_parent IN (
45
SELECT DISTINCT $wpdb->posts.ID
46
FROM $wpdb->posts $join
47
WHERE $where
48
+ )
49
+ ".$this->getVariationsWhere($where, $join)."
50
+
51
+ )";
52
} else {
53
+ $sql = " AND $wpdb->posts.post_type = 'product' " . $langQuery . " AND $wpdb->posts.ID NOT IN (SELECT o.ID FROM $wpdb->posts o
54
LEFT OUTER JOIN $wpdb->posts r
55
ON o.post_parent = r.ID
56
WHERE r.post_status = 'trash' AND o.post_type = 'product_variation')
57
+ OR ($wpdb->posts.post_type = 'product_variation' AND $wpdb->posts.post_status <> 'trash'
58
+
59
+
60
+ AND $wpdb->posts.post_parent IN (
61
SELECT DISTINCT $wpdb->posts.ID
62
FROM $wpdb->posts $join
63
WHERE $where
64
+ )
65
+
66
+ ".$this->getVariationsWhere($where, $join)."
67
+
68
+
69
+ )";
70
}
71
72
+ return $sql;
73
+
74
}
75
76
/**
src/App/Specification/IsImportAllowed.php ADDED
@@ -0,0 +1,53 @@
1
+ <?php
2
+
3
+ namespace Wpae\App\Specification;
4
+
5
+
6
+ class IsImportAllowed
7
+ {
8
+ public function isSatisfied($item)
9
+ {
10
+ $is_re_import_allowed = true;
11
+ if ( ! empty($item['options']['ids']) )
12
+ {
13
+ if (in_array('shop_order', $item['options']['cpt']) and class_exists('WooCommerce')) {
14
+ $required_fields = array('woo_order' => 'id');
15
+ }
16
+ else {
17
+ $required_fields = array('id' => 'id');
18
+ }
19
+ // re-import products
20
+ if ((in_array('product', $item['options']['cpt']) or $item['options']['export_type'] == 'advanced') and class_exists('WooCommerce') and (empty($item['options']['wp_query_selector']) or $item['options']['wp_query_selector'] == 'wp_query')) {
21
+ $required_fields['woo'] = '_sku';
22
+ $required_fields['cats'] = 'product_type';
23
+ $required_fields['parent'] = 'parent';
24
+ }
25
+ if ((in_array('users', $item['options']['cpt']) or $item['options']['export_type'] == 'advanced') and (!empty($item['options']['wp_query_selector']) and $item['options']['wp_query_selector'] == 'wp_user_query')) {
26
+ $required_fields['user_email'] = 'user_email';
27
+ $required_fields['user_login'] = 'user_login';
28
+ }
29
+ if ($item['options']['export_type'] == 'advanced' and (empty($item['options']['wp_query_selector']) or $item['options']['wp_query_selector'] == 'wp_query')){
30
+ $required_fields['post_type'] = 'post_type';
31
+ }
32
+ $defined_fields = array();
33
+ foreach ($item['options']['ids'] as $ID => $value)
34
+ {
35
+ foreach ($required_fields as $type => $field)
36
+ {
37
+ if (strtolower($item['options']['cc_type'][$ID]) == $type && strtolower($item['options']['cc_label'][$ID]) == strtolower($field)){
38
+ $defined_fields[] = $field;
39
+ }
40
+ }
41
+ }
42
+
43
+ foreach ($required_fields as $type => $field) {
44
+ if ( ! in_array($field, $defined_fields) ){
45
+ $is_re_import_allowed = false;
46
+ break;
47
+ }
48
+ }
49
+ }
50
+
51
+ return $is_re_import_allowed;
52
+ }
53
+ }
src/App/UnsecuredController/SchedulingController.php CHANGED
@@ -72,7 +72,9 @@ class SchedulingController extends BaseController
72
return new JsonResponse(array('message' => 'Export not found'), 404);
73
}
74
75
- $logger = create_function('$m', 'echo "<p>$m</p>\\n";');
76
77
if ($export->processing == 1 and (time() - strtotime($export->registered_on)) > 120) {
78
// it means processor crashed, so it will reset processing to false, and terminate. Then next run it will work normally.
72
return new JsonResponse(array('message' => 'Export not found'), 404);
73
}
74
75
+ $logger = function($m) {
76
+ echo "<p>$m</p>\\n";
77
+ };
78
79
if ($export->processing == 1 and (time() - strtotime($export->registered_on)) > 120) {
80
// it means processor crashed, so it will reset processing to false, and terminate. Then next run it will work normally.
src/Pro/Filtering/FilteringBase.php CHANGED
@@ -126,7 +126,7 @@ abstract class FilteringBase implements FilteringInterface
126
$rule->value = "-" . trim(str_replace("ago", "", $rule->value));
127
}
128
129
- $rule->value = strpos($rule->value, ":") !== false ? date("Y-m-d H:i:s", strtotime($rule->value)) : ( in_array($rule->condition, array('greater', 'equals_or_less')) ? date("Y-m-d", strtotime('+1 day', strtotime($rule->value))) : date("Y-m-d", strtotime($rule->value)));
130
131
}
132
126
$rule->value = "-" . trim(str_replace("ago", "", $rule->value));
127
}
128
129
+ $rule->value = strpos($rule->value, ":") !== false ? date("Y-m-d H:i:s", strtotime($rule->value)) : ( in_array($rule->condition, array('greater')) ? date("Y-m-d", strtotime('+1 day', strtotime($rule->value))) : date("Y-m-d", strtotime($rule->value)));
130
131
}
132
src/Scheduling/Export.php CHANGED
@@ -23,7 +23,7 @@ class Export
23
{
24
// trigger update child exports with correct WHERE & JOIN filters
25
if (!empty($export->options['cpt']) and class_exists('WooCommerce') and in_array('shop_order', $export->options['cpt']) and empty($export->parent_id)) {
26
- $queue_exports = XmlExportWooCommerceOrder::prepare_child_exports($export, true);
27
28
if (empty($queue_exports)) {
29
delete_option('wp_all_export_queue_' . $export->id);
23
{
24
// trigger update child exports with correct WHERE & JOIN filters
25
if (!empty($export->options['cpt']) and class_exists('WooCommerce') and in_array('shop_order', $export->options['cpt']) and empty($export->parent_id)) {
26
+ $queue_exports = \XmlExportWooCommerceOrder::prepare_child_exports($export, true);
27
28
if (empty($queue_exports)) {
29
delete_option('wp_all_export_queue_' . $export->id);
src/Scheduling/Timezone/TimezoneSelect.php CHANGED
@@ -10,8 +10,10 @@ class TimezoneSelect
10
'Africa' => \DateTimeZone::AFRICA,
11
'America' => \DateTimeZone::AMERICA,
12
'Antarctica' => \DateTimeZone::ANTARCTICA,
13
'Asia' => \DateTimeZone::ASIA,
14
'Atlantic' => \DateTimeZone::ATLANTIC,
15
'Europe' => \DateTimeZone::EUROPE,
16
'Indian' => \DateTimeZone::INDIAN,
17
'Pacific' => \DateTimeZone::PACIFIC
10
'Africa' => \DateTimeZone::AFRICA,
11
'America' => \DateTimeZone::AMERICA,
12
'Antarctica' => \DateTimeZone::ANTARCTICA,
13
+ 'Arctic' => \DateTimeZone::ARCTIC,
14
'Asia' => \DateTimeZone::ASIA,
15
'Atlantic' => \DateTimeZone::ATLANTIC,
16
+ 'Australia' => \DateTimeZone::AUSTRALIA,
17
'Europe' => \DateTimeZone::EUROPE,
18
'Indian' => \DateTimeZone::INDIAN,
19
'Pacific' => \DateTimeZone::PACIFIC
src/Scheduling/views/ConnectionIcon.php CHANGED
@@ -1,16 +1,28 @@
1
<?php
2
$scheduling = \Wpae\Scheduling\Scheduling::create();
3
?>
4
- <?php if ($scheduling->checkConnection() && $scheduling->checkLicense()) {
5
- ?>
6
- <span class="wpallexport-help" title="Connection to WP All Export servers is stable and confirmed" style="background-image: none; width: 20px; height: 20px;;">
7
- <img src="<?php echo PMXE_ROOT_URL; ?>/static/img/s-check.png" style="width: 16px;" />
8
- </span>
9
- <?php
10
- } else if(!$scheduling->checkConnection() && $scheduling->checkLicense() ) { ?>
11
- <img src="<?php echo PMXE_ROOT_URL; ?>/static/img/s-exclamation.png" style="width: 16px;" />
12
- <?php } else { ?>
13
- <a href="#" style="z-index: 1000;" class="help_scheduling tipsy" title="Automatic Scheduling is a paid service from Soflyy. Click for more info.">
14
- <img style="width: 16px; top: 2px; position: absolute; left: -2px;" src="<?php echo PMXE_ROOT_URL; ?>/static/img/s-question.png" />
15
</a>
16
- <?php } ?>
1
<?php
2
$scheduling = \Wpae\Scheduling\Scheduling::create();
3
?>
4
+ <span class="wpai-no-license" <?php if ($scheduling->checkLicense()) { ?> style="display: none;" <?php } ?> >
5
+
6
+ <a href="#" style="z-index: 1000; position: absolute; top: 1px; left: 155px; padding: 0;" class="help_scheduling tipsy"