Slider by Nivo – Responsive WordPress Image Slider - Version 2.2.0

Version Description

  • 2018-11-19
Download this release

Release Info

Developer codeinwp
Plugin Icon 128x128 Slider by Nivo – Responsive WordPress Image Slider
Version 2.2.0
Comparing to
See all releases

Code changes from version 2.1.2 to 2.2.0

Files changed (45) hide show
  1. CHANGELOG.md +5 -0
  2. assets/css/nivo-slider.css +1 -1
  3. assets/images/optimole-logo.png +0 -0
  4. assets/js/image-admin.js +4 -1
  5. includes/admin/class-nivo-slider-admin.php +39 -13
  6. includes/admin/libs/class-nivo-core-admin-ajax.php +0 -1
  7. includes/admin/libs/class-nivo-core-admin-edit.php +42 -17
  8. includes/admin/libs/class-nivo-core-shortcode.php +9 -6
  9. includes/class-nivo-slider-optml.php +266 -0
  10. includes/class-nivo-slider.php +32 -31
  11. includes/layouts/nivo-upsell.php +5 -2
  12. nivo-slider-lite.php +3 -2
  13. package-lock.json +0 -5599
  14. readme.md +8 -1
  15. readme.txt +8 -1
  16. themeisle-hash.json +1 -1
  17. vendor/autoload.php +7 -0
  18. vendor/codeinwp/themeisle-sdk/LICENSE +674 -0
  19. vendor/codeinwp/themeisle-sdk/class-themeisle-sdk-endpoints.php +312 -0
  20. vendor/codeinwp/themeisle-sdk/class-themeisle-sdk-feedback-deactivate.php +556 -0
  21. vendor/codeinwp/themeisle-sdk/class-themeisle-sdk-feedback-factory.php +50 -0
  22. vendor/codeinwp/themeisle-sdk/class-themeisle-sdk-feedback-review.php +209 -0
  23. vendor/codeinwp/themeisle-sdk/class-themeisle-sdk-feedback-translate.php +983 -0
  24. vendor/codeinwp/themeisle-sdk/class-themeisle-sdk-feedback.php +90 -0
  25. vendor/codeinwp/themeisle-sdk/class-themeisle-sdk-licenser.php +686 -0
  26. vendor/codeinwp/themeisle-sdk/class-themeisle-sdk-loader.php +96 -0
  27. vendor/codeinwp/themeisle-sdk/class-themeisle-sdk-logger.php +227 -0
  28. vendor/codeinwp/themeisle-sdk/class-themeisle-sdk-notification-manager.php +105 -0
  29. vendor/codeinwp/themeisle-sdk/class-themeisle-sdk-product.php +635 -0
  30. vendor/codeinwp/themeisle-sdk/class-themeisle-sdk-rollback.php +223 -0
  31. vendor/codeinwp/themeisle-sdk/class-themeisle-sdk-widget-dashboard-blog.php +412 -0
  32. vendor/codeinwp/themeisle-sdk/class-themeisle-sdk-widget.php +50 -0
  33. vendor/codeinwp/themeisle-sdk/class-themeisle-sdk-widgets-factory.php +37 -0
  34. vendor/codeinwp/themeisle-sdk/composer.json +24 -0
  35. vendor/codeinwp/themeisle-sdk/index.php +5 -0
  36. vendor/codeinwp/themeisle-sdk/load.php +35 -0
  37. vendor/codeinwp/themeisle-sdk/start.php +38 -0
  38. vendor/composer/ClassLoader.php +413 -0
  39. vendor/composer/LICENSE +21 -0
  40. vendor/composer/autoload_classmap.php +9 -0
  41. vendor/composer/autoload_files.php +10 -0
  42. vendor/composer/autoload_namespaces.php +9 -0
  43. vendor/composer/autoload_psr4.php +9 -0
  44. vendor/composer/autoload_real.php +59 -0
  45. vendor/composer/installed.json +42 -0
CHANGELOG.md CHANGED
@@ -1,4 +1,9 @@
1
 
 
 
 
 
 
2
  ### v2.1.2 - 2018-05-28
3
  **Changes:**
4
  * Removes redundant files present in distribution.
1
 
2
+ ### v2.2.0 - 2018-11-19
3
+ **Changes:**
4
+ * Improve compatibility with Wordpress 5.0 + Gutenberg Editor.
5
+ * Adds integration with Optimole - Image optimization service.
6
+
7
  ### v2.1.2 - 2018-05-28
8
  **Changes:**
9
  * Removes redundant files present in distribution.
assets/css/nivo-slider.css CHANGED
@@ -1,7 +1,7 @@
1
  /*
2
  * jQuery Nivo Slider v3.2
3
  * http://nivo.dev7studios.com
4
- * Version: 2.1.2
5
  * Copyright 2012, Dev7studios
6
  * Free to use and abuse under the MIT license.
7
  * http://www.opensource.org/licenses/mit-license.php
1
  /*
2
  * jQuery Nivo Slider v3.2
3
  * http://nivo.dev7studios.com
4
+ * Version: 2.2.0
5
  * Copyright 2012, Dev7studios
6
  * Free to use and abuse under the MIT license.
7
  * http://www.opensource.org/licenses/mit-license.php
assets/images/optimole-logo.png ADDED
Binary file
assets/js/image-admin.js CHANGED
@@ -270,9 +270,12 @@ jQuery( document ).ready(function($){
270
  text: editing ? wp.media.view.l10n.updateGallery : wp.media.view.l10n.insertGallery,
271
 
272
  click: function() {
273
- var models = frame.state().get( 'library' ),
 
274
  ids = '';
275
 
 
 
276
  models.each( function( attachment ) {
277
  ids += attachment.id + ','
278
  });
270
  text: editing ? wp.media.view.l10n.updateGallery : wp.media.view.l10n.insertGallery,
271
 
272
  click: function() {
273
+ var state = frame.state(),
274
+ models = state.get('library'),
275
  ids = '';
276
 
277
+ state.trigger( 'update', models );
278
+
279
  models.each( function( attachment ) {
280
  ids += attachment.id + ','
281
  });
includes/admin/class-nivo-slider-admin.php CHANGED
@@ -152,10 +152,13 @@ class Nivo_Slider_Admin extends Nivo_Core_Abstract {
152
  $settings = array(
153
  'post_id' => ( isset( $post->ID ) ) ? $post->ID : '',
154
  'labels' => $this->labels,
155
- 'track_url' => add_query_arg( array(
 
156
  'nonce' => wp_create_nonce( 'nivo-track' ),
157
  'action' => 'track_url',
158
- ), admin_url( 'admin-ajax.php' ) ),
 
 
159
  'nonce' => wp_create_nonce( $this->labels['post_type'] ),
160
  );
161
  $settings = apply_filters( $this->labels['post_type'] . '_script_settings', $settings );
@@ -164,10 +167,12 @@ class Nivo_Slider_Admin extends Nivo_Core_Abstract {
164
  wp_localize_script( $this->labels['plugin_name'] . '_image_admin', 'nivo_plugin', $settings );
165
  // Addition ends here.
166
  // Galleries list for TinyMCE dropdown
167
- $galleries = get_posts( array(
 
168
  'post_type' => $this->labels['post_type'],
169
  'posts_per_page' => - 1,
170
- ) );
 
171
  $list = array();
172
  foreach ( $galleries as $gallery ) {
173
  $list[] = array(
@@ -222,14 +227,26 @@ class Nivo_Slider_Admin extends Nivo_Core_Abstract {
222
  */
223
  public function admin_menu() {
224
  if ( ! class_exists( 'Nivo_Slider_PRO_Admin' ) ) {
225
- add_submenu_page( 'edit.php?post_type=' . $this->labels['post_type'], __( 'More Features', 'nivo-slider' ), __( 'More Features', 'nivo-slider' ) . '<span class="dashicons
226
- dashicons-star-filled more-features-icon" style=" width: 17px; height: 17px; margin-left: 4px; color: #ffca54; font-size: 17px; vertical-align: -3px;"></span>', 'manage_options', 'nivo-slider-admin-menu-pro-upsell', array(
 
 
 
 
 
 
227
  $this,
228
  'render_upsell',
229
- ) );
 
230
  }
231
  add_submenu_page(
232
- 'edit.php?post_type=' . $this->labels['post_type'], 'Settings', 'Settings', 'manage_options', $this->labels['post_type'] . '-settings', array(
 
 
 
 
 
233
  $this,
234
  'settings_page',
235
  )
@@ -321,16 +338,21 @@ class Nivo_Slider_Admin extends Nivo_Core_Abstract {
321
  */
322
  public function register_settings() {
323
  register_setting(
324
- $this->labels['post_type'] . '-settings', $this->labels['options_key'], array(
 
 
325
  $this,
326
  'settings_validate',
327
  )
328
  );
329
  add_settings_section(
330
- $this->labels['post_type'] . '-settings', '', array(
 
 
331
  $this,
332
  'display_settings_intro',
333
- ), $this->labels['post_type'] . '-settings'
 
334
  );
335
  $settings[] = array(
336
  'slug' => 'custom-roles',
@@ -341,10 +363,14 @@ class Nivo_Slider_Admin extends Nivo_Core_Abstract {
341
  $scope = ( isset( $setting['scope'] ) ) ? $setting['scope'] : $this;
342
  $function = 'setting_' . str_replace( '-', '_', $setting['slug'] );
343
  add_settings_field(
344
- $setting['slug'], $setting['title'], array(
 
 
345
  $scope,
346
  $function,
347
- ), $this->labels['post_type'] . '-settings', $this->labels['post_type'] . '-settings'
 
 
348
  );
349
  }
350
  }
152
  $settings = array(
153
  'post_id' => ( isset( $post->ID ) ) ? $post->ID : '',
154
  'labels' => $this->labels,
155
+ 'track_url' => add_query_arg(
156
+ array(
157
  'nonce' => wp_create_nonce( 'nivo-track' ),
158
  'action' => 'track_url',
159
+ ),
160
+ admin_url( 'admin-ajax.php' )
161
+ ),
162
  'nonce' => wp_create_nonce( $this->labels['post_type'] ),
163
  );
164
  $settings = apply_filters( $this->labels['post_type'] . '_script_settings', $settings );
167
  wp_localize_script( $this->labels['plugin_name'] . '_image_admin', 'nivo_plugin', $settings );
168
  // Addition ends here.
169
  // Galleries list for TinyMCE dropdown
170
+ $galleries = get_posts(
171
+ array(
172
  'post_type' => $this->labels['post_type'],
173
  'posts_per_page' => - 1,
174
+ )
175
+ );
176
  $list = array();
177
  foreach ( $galleries as $gallery ) {
178
  $list[] = array(
227
  */
228
  public function admin_menu() {
229
  if ( ! class_exists( 'Nivo_Slider_PRO_Admin' ) ) {
230
+ add_submenu_page(
231
+ 'edit.php?post_type=' . $this->labels['post_type'],
232
+ __( 'More Features', 'nivo-slider' ),
233
+ __( 'More Features', 'nivo-slider' ) . '<span class="dashicons
234
+ dashicons-star-filled more-features-icon" style=" width: 17px; height: 17px; margin-left: 4px; color: #ffca54; font-size: 17px; vertical-align: -3px;"></span>',
235
+ 'manage_options',
236
+ 'nivo-slider-admin-menu-pro-upsell',
237
+ array(
238
  $this,
239
  'render_upsell',
240
+ )
241
+ );
242
  }
243
  add_submenu_page(
244
+ 'edit.php?post_type=' . $this->labels['post_type'],
245
+ 'Settings',
246
+ 'Settings',
247
+ 'manage_options',
248
+ $this->labels['post_type'] . '-settings',
249
+ array(
250
  $this,
251
  'settings_page',
252
  )
338
  */
339
  public function register_settings() {
340
  register_setting(
341
+ $this->labels['post_type'] . '-settings',
342
+ $this->labels['options_key'],
343
+ array(
344
  $this,
345
  'settings_validate',
346
  )
347
  );
348
  add_settings_section(
349
+ $this->labels['post_type'] . '-settings',
350
+ '',
351
+ array(
352
  $this,
353
  'display_settings_intro',
354
+ ),
355
+ $this->labels['post_type'] . '-settings'
356
  );
357
  $settings[] = array(
358
  'slug' => 'custom-roles',
363
  $scope = ( isset( $setting['scope'] ) ) ? $setting['scope'] : $this;
364
  $function = 'setting_' . str_replace( '-', '_', $setting['slug'] );
365
  add_settings_field(
366
+ $setting['slug'],
367
+ $setting['title'],
368
+ array(
369
  $scope,
370
  $function,
371
+ ),
372
+ $this->labels['post_type'] . '-settings',
373
+ $this->labels['post_type'] . '-settings'
374
  );
375
  }
376
  }
includes/admin/libs/class-nivo-core-admin-ajax.php CHANGED
@@ -177,7 +177,6 @@ class Nivo_Core_Admin_Ajax extends Nivo_Core_Abstract implements Nivo_Library_In
177
  $ajax_response['error'] = false;
178
  $ajax_response['message'] = '';
179
  $options = get_post_meta( $_POST['post_id'], $this->labels['post_meta_key'], true );
180
- ;
181
  $images = $this->nivo_get_attached_images( $_POST['post_id'], - 1 );
182
  if ( ! $images || count( $images ) == 0 ) {
183
  $ajax_response['error'] = true;
177
  $ajax_response['error'] = false;
178
  $ajax_response['message'] = '';
179
  $options = get_post_meta( $_POST['post_id'], $this->labels['post_meta_key'], true );
 
180
  $images = $this->nivo_get_attached_images( $_POST['post_id'], - 1 );
181
  if ( ! $images || count( $images ) == 0 ) {
182
  $ajax_response['error'] = true;
includes/admin/libs/class-nivo-core-admin-edit.php CHANGED
@@ -114,7 +114,8 @@ class Nivo_Core_Admin_Edit extends Nivo_Core_Abstract implements Nivo_Library_In
114
  $themes = array_merge(
115
  array(
116
  '' => 'None',
117
- ), (array) $themes
 
118
  );
119
  $settings[] = array(
120
  'name' => 'theme',
@@ -274,35 +275,55 @@ class Nivo_Core_Admin_Edit extends Nivo_Core_Abstract implements Nivo_Library_In
274
  */
275
  public function admin_init() {
276
  add_meta_box(
277
- $this->labels['post_type'] . '_upload_box', sprintf( __( '%1$s Images', 'nivo-slider' ), $this->labels['singular'] ), array(
 
 
278
  $this,
279
  'meta_box_upload',
280
- ), $this->labels['post_type'], 'normal'
 
 
281
  );
282
  add_meta_box(
283
- $this->labels['post_type'] . '_settings_box', __( 'Settings', 'nivo-slider' ), array(
 
 
284
  $this,
285
  'meta_box_settings',
286
- ), $this->labels['post_type'], 'normal'
 
 
287
  );
288
  add_meta_box(
289
- $this->labels['post_type'] . '_shortcode_box', sprintf( __( 'Using this %1$s', 'nivo-slider' ), $this->labels['singular'] ), array(
 
 
290
  $this,
291
  'meta_box_shortcode',
292
- ), $this->labels['post_type'], 'side'
 
 
293
  );
294
  if ( ! defined( 'NIVO_SLIDER_PRO' ) ) {
295
  add_meta_box(
296
- $this->labels['post_type'] . '_usefullinks_box', __( 'Full Version', 'nivo-slider' ), array(
 
 
297
  $this,
298
  'meta_box_full_version',
299
- ), $this->labels['post_type'], 'side'
 
 
300
  );
301
  add_meta_box(
302
- $this->labels['post_type'] . '_enable_tracking', __( 'Contribute to Nivo', 'nivo-slider' ), array(
 
 
303
  $this,
304
  'enable_tracking',
305
- ), $this->labels['post_type'], 'side'
 
 
306
  );
307
  }
308
 
@@ -369,9 +390,10 @@ class Nivo_Core_Admin_Edit extends Nivo_Core_Abstract implements Nivo_Library_In
369
  <?php
370
  _e(
371
  'Allow Nivo to anonymously track how this plugin is used and help us make the
372
- plugin better. No sensitive data is tracked.', 'nivo-slider'
 
373
  );
374
- ?>
375
  </small>
376
  </p>
377
  </div>
@@ -507,7 +529,8 @@ class Nivo_Core_Admin_Edit extends Nivo_Core_Abstract implements Nivo_Library_In
507
  array(
508
  'public' => true,
509
  '_builtin' => false,
510
- ), 'objects'
 
511
  );
512
  foreach ( $post_types as $post_type ) {
513
  echo '<option value="' . $post_type->name . '"';
@@ -602,7 +625,7 @@ class Nivo_Core_Admin_Edit extends Nivo_Core_Abstract implements Nivo_Library_In
602
  if ( $element_value == 'on' ) {
603
  echo ' checked="checked"';
604
  }
605
- ?>
606
  />
607
  <?php
608
  break;
@@ -618,7 +641,7 @@ class Nivo_Core_Admin_Edit extends Nivo_Core_Abstract implements Nivo_Library_In
618
  if ( $value == $element_value ) {
619
  echo ' selected="selected"';
620
  }
621
- ?>
622
  ><?php echo $name; ?></option>
623
  <?php } ?>
624
  </select>
@@ -809,7 +832,9 @@ class Nivo_Core_Admin_Edit extends Nivo_Core_Abstract implements Nivo_Library_In
809
  break;
810
  case 'type':
811
  $taxonomy = wp_get_post_terms(
812
- $post->ID, 'nivo_slider', array(
 
 
813
  'fields' => 'names',
814
  )
815
  );
114
  $themes = array_merge(
115
  array(
116
  '' => 'None',
117
+ ),
118
+ (array) $themes
119
  );
120
  $settings[] = array(
121
  'name' => 'theme',
275
  */
276
  public function admin_init() {
277
  add_meta_box(
278
+ $this->labels['post_type'] . '_upload_box',
279
+ sprintf( __( '%1$s Images', 'nivo-slider' ), $this->labels['singular'] ),
280
+ array(
281
  $this,
282
  'meta_box_upload',
283
+ ),
284
+ $this->labels['post_type'],
285
+ 'normal'
286
  );
287
  add_meta_box(
288
+ $this->labels['post_type'] . '_settings_box',
289
+ __( 'Settings', 'nivo-slider' ),
290
+ array(
291
  $this,
292
  'meta_box_settings',
293
+ ),
294
+ $this->labels['post_type'],
295
+ 'normal'
296
  );
297
  add_meta_box(
298
+ $this->labels['post_type'] . '_shortcode_box',
299
+ sprintf( __( 'Using this %1$s', 'nivo-slider' ), $this->labels['singular'] ),
300
+ array(
301
  $this,
302
  'meta_box_shortcode',
303
+ ),
304
+ $this->labels['post_type'],
305
+ 'side'
306
  );
307
  if ( ! defined( 'NIVO_SLIDER_PRO' ) ) {
308
  add_meta_box(
309
+ $this->labels['post_type'] . '_usefullinks_box',
310
+ __( 'Full Version', 'nivo-slider' ),
311
+ array(
312
  $this,
313
  'meta_box_full_version',
314
+ ),
315
+ $this->labels['post_type'],
316
+ 'side'
317
  );
318
  add_meta_box(
319
+ $this->labels['post_type'] . '_enable_tracking',
320
+ __( 'Contribute to Nivo', 'nivo-slider' ),
321
+ array(
322
  $this,
323
  'enable_tracking',
324
+ ),
325
+ $this->labels['post_type'],
326
+ 'side'
327
  );
328
  }
329
 
390
  <?php
391
  _e(
392
  'Allow Nivo to anonymously track how this plugin is used and help us make the
393
+ plugin better. No sensitive data is tracked.',
394
+ 'nivo-slider'
395
  );
396
+ ?>
397
  </small>
398
  </p>
399
  </div>
529
  array(
530
  'public' => true,
531
  '_builtin' => false,
532
+ ),
533
+ 'objects'
534
  );
535
  foreach ( $post_types as $post_type ) {
536
  echo '<option value="' . $post_type->name . '"';
625
  if ( $element_value == 'on' ) {
626
  echo ' checked="checked"';
627
  }
628
+ ?>
629
  />
630
  <?php
631
  break;
641
  if ( $value == $element_value ) {
642
  echo ' selected="selected"';
643
  }
644
+ ?>
645
  ><?php echo $name; ?></option>
646
  <?php } ?>
647
  </select>
832
  break;
833
  case 'type':
834
  $taxonomy = wp_get_post_terms(
835
+ $post->ID,
836
+ 'nivo_slider',
837
+ array(
838
  'fields' => 'names',
839
  )
840
  );
includes/admin/libs/class-nivo-core-shortcode.php CHANGED
@@ -107,7 +107,8 @@ class Nivo_Core_Shortcode extends Nivo_Core_Abstract implements Nivo_Library_Int
107
  // To force the enqueue of core scripts, pass [... force="true"].
108
  'force' => false,
109
  'slug' => '',
110
- ), $atts
 
111
  );
112
 
113
  if ( ! $sc['id'] && ! $sc['slug'] ) {
@@ -376,7 +377,9 @@ class Nivo_Core_Shortcode extends Nivo_Core_Abstract implements Nivo_Library_Int
376
  list( $prefix, $post_id ) = explode( '-', $id );
377
  if ( get_post_type( $post_id ) == $this->labels['post_type'] ) {
378
  $taxonomy = wp_get_post_terms(
379
- $post_id, 'nivo_slider', array(
 
 
380
  'fields' => 'names',
381
  )
382
  );
@@ -488,7 +491,7 @@ class Nivo_Core_Shortcode extends Nivo_Core_Abstract implements Nivo_Library_Int
488
 
489
  if ( count( $images ) > 1 ) {
490
  $output .= '<script type="text/javascript">' . "\n";
491
- $output .= 'jQuery(window).load(function(){' . "\n";
492
  $output .= ' jQuery("#nivoslider-' . $id . '").nivoSlider({' . "\n";
493
  $output .= ' effect:"' . $options['effect'] . '",' . "\n";
494
  $output .= ' slices:' . $options['slices'] . ',' . "\n";
@@ -507,13 +510,13 @@ class Nivo_Core_Shortcode extends Nivo_Core_Abstract implements Nivo_Library_Int
507
  $output .= ' pauseOnHover:' . ( ( $options['pauseOnHover'] == 'on' ) ? 'true' : 'false' ) . ',' . "\n";
508
  $output .= ' manualAdvance:' . ( ( $options['manualAdvance'] == 'on' ) ? 'true' : 'false' ) . "\n";
509
  $output .= ' });' . "\n";
510
- $output .= '});' . "\n";
511
  $output .= '</script>' . "\n";
512
  } else {
513
  $output .= '<script type="text/javascript">' . "\n";
514
- $output .= 'jQuery(window).load(function(){' . "\n";
515
  $output .= ' jQuery("#nivoslider-' . $id . ' img").css("position","relative").show();' . "\n";
516
- $output .= '});' . "\n";
517
  $output .= '</script>' . "\n";
518
  }
519
  }
107
  // To force the enqueue of core scripts, pass [... force="true"].
108
  'force' => false,
109
  'slug' => '',
110
+ ),
111
+ $atts
112
  );
113
 
114
  if ( ! $sc['id'] && ! $sc['slug'] ) {
377
  list( $prefix, $post_id ) = explode( '-', $id );
378
  if ( get_post_type( $post_id ) == $this->labels['post_type'] ) {
379
  $taxonomy = wp_get_post_terms(
380
+ $post_id,
381
+ 'nivo_slider',
382
+ array(
383
  'fields' => 'names',
384
  )
385
  );
491
 
492
  if ( count( $images ) > 1 ) {
493
  $output .= '<script type="text/javascript">' . "\n";
494
+ $output .= 'window.onload = function(){' . "\n";
495
  $output .= ' jQuery("#nivoslider-' . $id . '").nivoSlider({' . "\n";
496
  $output .= ' effect:"' . $options['effect'] . '",' . "\n";
497
  $output .= ' slices:' . $options['slices'] . ',' . "\n";
510
  $output .= ' pauseOnHover:' . ( ( $options['pauseOnHover'] == 'on' ) ? 'true' : 'false' ) . ',' . "\n";
511
  $output .= ' manualAdvance:' . ( ( $options['manualAdvance'] == 'on' ) ? 'true' : 'false' ) . "\n";
512
  $output .= ' });' . "\n";
513
+ $output .= '};' . "\n";
514
  $output .= '</script>' . "\n";
515
  } else {
516
  $output .= '<script type="text/javascript">' . "\n";
517
+ $output .= 'window.onload = function(){' . "\n";
518
  $output .= ' jQuery("#nivoslider-' . $id . ' img").css("position","relative").show();' . "\n";
519
+ $output .= '}' . "\n";
520
  $output .= '</script>' . "\n";
521
  }
522
  }
includes/class-nivo-slider-optml.php ADDED
@@ -0,0 +1,266 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <?php
2
+ /**
3
+ *
4
+ * Drop-in file for optml recommendation.
5
+ */
6
+
7
+ /**
8
+ * Class Nivo_Slider_Optml.
9
+ */
10
+ class Nivo_Slider_Optml {
11
+
12
+ /**
13
+ * @var null Instance object.
14
+ */
15
+ protected static $instance = null;
16
+ /**
17
+ * Dismiss option key.
18
+ *
19
+ * @var string Dismiss option key.
20
+ */
21
+ protected static $dismiss_key = 'optml_upsell_off';
22
+
23
+ public static function instance() {
24
+ if ( is_null( self::$instance ) ) {
25
+ self::$instance = new self();
26
+ self::$instance->init();
27
+ }
28
+
29
+ return self::$instance;
30
+ }
31
+
32
+ /**
33
+ * Drop-in actions
34
+ */
35
+ public function init() {
36
+ add_action( 'admin_notices', array( $this, 'admin_notice' ), defined( 'PHP_INT_MIN' ) ? PHP_INT_MIN : 99999 );
37
+ add_action( 'admin_init', array( $this, 'remove_notice' ), defined( 'PHP_INT_MIN' ) ? PHP_INT_MIN : 99999 );
38
+ }
39
+
40
+ /**
41
+ * Remove notice;
42
+ */
43
+ public function remove_notice() {
44
+ if ( ! isset( $_GET['optml_upsell'] ) ) {
45
+ return;
46
+ }
47
+ if ( $_GET['optml_upsell'] !== 'yes' ) {
48
+ return;
49
+ }
50
+ if ( ! isset( $_GET['remove_upsell'] ) ) {
51
+ return;
52
+ }
53
+ if ( ! wp_verify_nonce( $_GET['remove_upsell'], 'remove_upsell_confirmation' ) ) {
54
+ return;
55
+ }
56
+ update_option( self::$dismiss_key, 'yes' );
57
+ }
58
+
59
+ /**
60
+ * Add notice.
61
+ */
62
+ public function admin_notice() {
63
+
64
+ if ( defined( 'DOING_AJAX' ) && DOING_AJAX ) {
65
+ return;
66
+ }
67
+
68
+ if ( is_network_admin() ) {
69
+ return;
70
+ }
71
+ include_once( ABSPATH . 'wp-admin/includes/plugin.php' );
72
+ if ( is_plugin_active( 'optimole-wp/optimole-wp.php' ) ) {
73
+ return;
74
+ }
75
+ $screen = get_current_screen();
76
+ static $parent_whitelist = array(
77
+ 'edit.php?post_type=nivoslider' => true,
78
+ 'upload.php' => true,
79
+ );
80
+ static $base_whitelist = array(
81
+ 'upload' => true,
82
+ );
83
+ if (
84
+ ( ! isset( $screen->parent_file )
85
+ || ! isset( $parent_whitelist[ $screen->parent_file ] )
86
+ ) &&
87
+ ( ! isset( $screen->base )
88
+ || ! isset( $base_whitelist[ $screen->base ] )
89
+ )
90
+ ) {
91
+ return;
92
+ }
93
+ if ( ! current_user_can( 'manage_options' ) ) {
94
+ return;
95
+ }
96
+ if ( get_option( self::$dismiss_key, 'no' ) === 'yes' ) {
97
+ return;
98
+ }
99
+ ?>
100
+ <style type="text/css">
101
+
102
+
103
+
104
+ .post-type-nivoslider #wpbody-content > *:not(#screen-meta):not(#screen-meta-links):not(.wrap):not(#pro-features),
105
+ .upload-php #wpbody-content > *:not(#screen-meta):not(#screen-meta-links):not(.wrap):not(#pro-features),
106
+ .media-new-php #wpbody-content > *:not(#screen-meta):not(#screen-meta-links):not(.wrap):not(#pro-features) {
107
+ display: none;
108
+ }
109
+
110
+ #wpbody-content .optimole-notice-upsell .notice-dismiss {
111
+ text-decoration: none;
112
+ }
113
+
114
+ #wpbody-content .optimole-notice-upsell {
115
+ margin-top: 20px;
116
+ display: flex !important;
117
+ padding-right: 40px;
118
+ position: relative;
119
+ flex-wrap: wrap;
120
+ }
121
+
122
+ .nivoslider_page * #wpbody-content .optimole-notice-upsell ~ * {
123
+ display: none;
124
+ }
125
+
126
+ .nivoslider_page * #wpbody-content #pro-features {
127
+ display: block;
128
+ }
129
+
130
+ .optimole-notice-upsell p a {
131
+ text-decoration: none;
132
+ }
133
+
134
+ .optimole-notice-upsell .optml-logo {
135
+ background: url("<?php echo esc_url( NIVO_SLIDER_PLUGIN_URL . 'assets/images/optimole-logo.png' ); ?>");
136
+ flex: 0 0 60px;
137
+ width: 60px;
138
+ height: 60px;
139
+ background-size: cover;
140
+ display: block;
141
+ margin-right: 10px;
142
+ }
143
+ a.button.optml-upsell-try {
144
+ padding: 0 10px 1px !important;
145
+ margin-top:10px;
146
+ width: 100px;
147
+ flex: 0 0 100px;
148
+ }
149
+ .optml-upsell-text{
150
+ flex: 1;
151
+ }
152
+ @media (max-width: 800px) {
153
+ a.button.optml-upsell-try{
154
+ width:100%;
155
+ flex: 0 0 100%;
156
+ padding:5px !important;
157
+ text-align: center;
158
+ }
159
+ }
160
+ </style>
161
+ <div class="notice notice-success optimole-notice-upsell">
162
+ <div class="optml-logo"></div>
163
+ <p class="optml-upsell-text">Improve your website loading speed by up to 2 seconds using <strong><a href="http://optimole.com"
164
+ target="_blank">Optimole - Image
165
+ Optimization Service</a></strong>. <br/>Optimole compress and delivers in average 70% smaller
166
+ images and is fully integrated with <strong> Nivo Slider</strong>. Try for out for <strong>free</strong>
167
+ or get a 40% early adopter discount with this code: <code>NIVOEARLY40</code>
168
+ </p>
169
+ <?php echo wp_kses_post( $this->get_the_right_cta() ) ?>
170
+ <div class="clear"></div>
171
+
172
+ <a href="<?php echo wp_nonce_url( add_query_arg( array( 'optml_upsell' => 'yes' ) ), 'remove_upsell_confirmation', 'remove_upsell' ) ?>"
173
+ class=" notice-dismiss"><span
174
+ class="screen-reader-text">Dismiss this notice.</span></a>
175
+ </div>
176
+ <?php
177
+ }
178
+
179
+ public function get_the_right_cta() {
180
+
181
+ $query_images_args = array(
182
+ 'post_type' => 'attachment',
183
+ 'post_mime_type' => 'image',
184
+ 'post_status' => 'inherit',
185
+ 'posts_per_page' => 11,
186
+ 'no_found_rows' => true,
187
+ 'update_post_meta_cache' => false,
188
+ 'update_post_term_cache' => false,
189
+ 'fields' => 'ids',
190
+ );
191
+ $image_check = new WP_Query( $query_images_args );
192
+ if ( count( $image_check->posts ) < 5 ) {
193
+ return $this->get_plugin_install_btn();
194
+ }
195
+ $site_url = get_site_url();
196
+ $site_url = parse_url( $site_url );
197
+ if ( ! isset( $site_url['host'] ) ) {
198
+ return $this->get_plugin_install_btn();
199
+ }
200
+ if ( ! $this->check_website_online( $site_url['host'] ) ) {
201
+ return $this->get_plugin_install_btn();
202
+ }
203
+
204
+ return $this->get_test_button();
205
+ }
206
+
207
+ /**
208
+ * @return string Plugin install code.
209
+ */
210
+ public function get_plugin_install_btn() {
211
+ add_thickbox();
212
+
213
+ return '<a href="' . admin_url( 'plugin-install.php?tab=plugin-information&plugin=optimole-wp&TB_iframe=true&width=772&height=458' ) . '" target="_blank" class=" thickbox open-plugin-details-modal button optml-upsell-try button-primary"><span class="dashicons dashicons-external"></span> Try out</a>';
214
+ }
215
+
216
+ /**
217
+ * Check if website is online.
218
+ *
219
+ * @param string $site Site to check.
220
+ *
221
+ * @return bool Website online?
222
+ */
223
+ public function check_website_online( $site ) {
224
+
225
+ $cache_key = '_optml_cache_on' . basename( __FILE__ );
226
+ if ( ( $cached_data = get_transient( $cache_key ) ) !== false ) {
227
+
228
+ return ( $cached_data === 'yes' );
229
+ }
230
+ $response = wp_remote_get( sprintf( 'https://downforeveryoneorjustme.com/%s', $site ) );
231
+ if ( is_wp_error( $response ) ) {
232
+ set_transient( $cache_key, 'no', DAY_IN_SECONDS );
233
+
234
+ return false;
235
+ }
236
+ if ( strpos( wp_remote_retrieve_body( $response ), 'is up.' ) === false ) {
237
+ set_transient( $cache_key, 'no', DAY_IN_SECONDS );
238
+
239
+ return false;
240
+ }
241
+ set_transient( $cache_key, 'yes', DAY_IN_SECONDS );
242
+
243
+ return true;
244
+ }
245
+
246
+ /**
247
+ * @return string Test button code.
248
+ */
249
+ public function get_test_button() {
250
+ return '<a href="https://speedtest.optimole.com/?url=' . esc_url( get_site_url() ) . '" target="_blank" class="button optml-upsell-try button-primary"><span class="dashicons dashicons-external"></span> Test your site</a>';
251
+ }
252
+
253
+ /**
254
+ * Deny clone.
255
+ */
256
+ public function __clone() {
257
+ }
258
+
259
+ /**
260
+ * Deny un-serialize.
261
+ */
262
+ public function __wakeup() {
263
+
264
+ }
265
+
266
+ }
includes/class-nivo-slider.php CHANGED
@@ -35,7 +35,7 @@ class Nivo_Slider {
35
  *
36
  * @since 3.0.0
37
  * @access protected
38
- * @var Nivo_Slider_Loader $loader Maintains and registers all hooks for the plugin.
39
  */
40
  protected $loader;
41
 
@@ -44,7 +44,7 @@ class Nivo_Slider {
44
  *
45
  * @since 3.0.0
46
  * @access protected
47
- * @var string $plugin_name The string used to uniquely identify this plugin.
48
  */
49
  protected $plugin_name;
50
 
@@ -53,7 +53,7 @@ class Nivo_Slider {
53
  *
54
  * @since 3.0.0
55
  * @access protected
56
- * @var string $version The current version of the plugin.
57
  */
58
  protected $version;
59
 
@@ -69,7 +69,7 @@ class Nivo_Slider {
69
  public function __construct() {
70
 
71
  $this->plugin_name = 'nivo-slider';
72
- $this->version = '2.1.2';
73
 
74
  $this->load_dependencies();
75
  $this->set_locale();
@@ -123,8 +123,8 @@ class Nivo_Slider {
123
  * @access private
124
  */
125
  private function define_admin_hooks() {
126
- $plugin_admin = new Nivo_Slider_Admin( $this->get_plugin_name(), $this->get_version() );
127
- $post_type = $plugin_admin::get_plugin_settings()->get_label( 'post_type' );
128
  $plugin_shortcode_label = $plugin_admin::get_plugin_settings()->get_label( 'shortcode' );
129
  // Actions Nivo_Slider_Admin
130
  $this->loader->add_action( 'admin_enqueue_scripts', $plugin_admin, 'enqueue_styles' );
@@ -191,41 +191,37 @@ class Nivo_Slider {
191
  $plugin_widget = new Nivo_Slider_Widget();
192
  // Actions Nivo_Core_Shortcode
193
  $this->loader->add_action( 'widgets_init', $plugin_widget, 'register_widget' );
 
194
  }
195
 
196
  /**
197
- * Register all of the hooks related to the public-facing functionality
198
- * of the plugin.
199
  *
200
- * @since 3.0.0
201
- * @access private
202
  */
203
- private function define_public_hooks() {
204
- $plugin_public = new Nivo_Slider_Public( $this->get_plugin_name(), $this->get_version() );
205
-
206
- $this->loader->add_action( 'wp_enqueue_scripts', $plugin_public, 'enqueue_styles' );
207
- $this->loader->add_action( 'wp_enqueue_scripts', $plugin_public, 'enqueue_scripts' );
208
-
209
  }
210
 
211
  /**
212
- * Run the loader to execute all of the hooks with WordPress.
213
  *
214
- * @since 3.0.0
 
215
  */
216
- public function run() {
217
- $this->loader->run();
218
  }
219
 
220
  /**
221
- * The name of the plugin used to uniquely identify it within the context of
222
- * WordPress and to define internationalization functionality.
223
  *
224
- * @since 3.0.0
225
- * @return string The name of the plugin.
226
  */
227
- public function get_plugin_name() {
228
- return $this->plugin_name;
229
  }
230
 
231
  /**
@@ -239,13 +235,18 @@ class Nivo_Slider {
239
  }
240
 
241
  /**
242
- * Retrieve the version number of the plugin.
 
243
  *
244
- * @since 3.0.0
245
- * @return string The version number of the plugin.
246
  */
247
- public function get_version() {
248
- return $this->version;
 
 
 
 
249
  }
250
 
251
  }
35
  *
36
  * @since 3.0.0
37
  * @access protected
38
+ * @var Nivo_Slider_Loader $loader Maintains and registers all hooks for the plugin.
39
  */
40
  protected $loader;
41
 
44
  *
45
  * @since 3.0.0
46
  * @access protected
47
+ * @var string $plugin_name The string used to uniquely identify this plugin.
48
  */
49
  protected $plugin_name;
50
 
53
  *
54
  * @since 3.0.0
55
  * @access protected
56
+ * @var string $version The current version of the plugin.
57
  */
58
  protected $version;
59
 
69
  public function __construct() {
70
 
71
  $this->plugin_name = 'nivo-slider';
72
+ $this->version = '2.2.0';
73
 
74
  $this->load_dependencies();
75
  $this->set_locale();
123
  * @access private
124
  */
125
  private function define_admin_hooks() {
126
+ $plugin_admin = new Nivo_Slider_Admin( $this->get_plugin_name(), $this->get_version() );
127
+ $post_type = $plugin_admin::get_plugin_settings()->get_label( 'post_type' );
128
  $plugin_shortcode_label = $plugin_admin::get_plugin_settings()->get_label( 'shortcode' );
129
  // Actions Nivo_Slider_Admin
130
  $this->loader->add_action( 'admin_enqueue_scripts', $plugin_admin, 'enqueue_styles' );
191
  $plugin_widget = new Nivo_Slider_Widget();
192
  // Actions Nivo_Core_Shortcode
193
  $this->loader->add_action( 'widgets_init', $plugin_widget, 'register_widget' );
194
+ $this->loader->add_action( 'plugins_loaded', 'Nivo_Slider_Optml', 'instance' );
195
  }
196
 
197
  /**
198
+ * The name of the plugin used to uniquely identify it within the context of
199
+ * WordPress and to define internationalization functionality.
200
  *
201
+ * @since 3.0.0
202
+ * @return string The name of the plugin.
203
  */
204
+ public function get_plugin_name() {
205
+ return $this->plugin_name;
 
 
 
 
206
  }
207
 
208
  /**
209
+ * Retrieve the version number of the plugin.
210
  *
211
+ * @since 3.0.0
212
+ * @return string The version number of the plugin.
213
  */
214
+ public function get_version() {
215
+ return $this->version;
216
  }
217
 
218
  /**
219
+ * Run the loader to execute all of the hooks with WordPress.
 
220
  *
221
+ * @since 3.0.0
 
222
  */
223
+ public function run() {
224
+ $this->loader->run();
225
  }
226
 
227
  /**
235
  }
236
 
237
  /**
238
+ * Register all of the hooks related to the public-facing functionality
239
+ * of the plugin.
240
  *
241
+ * @since 3.0.0
242
+ * @access private
243
  */
244
+ private function define_public_hooks() {
245
+ $plugin_public = new Nivo_Slider_Public( $this->get_plugin_name(), $this->get_version() );
246
+
247
+ $this->loader->add_action( 'wp_enqueue_scripts', $plugin_public, 'enqueue_styles' );
248
+ $this->loader->add_action( 'wp_enqueue_scripts', $plugin_public, 'enqueue_scripts' );
249
+
250
  }
251
 
252
  }
includes/layouts/nivo-upsell.php CHANGED
@@ -6,6 +6,7 @@
6
  * @package feedzy-rss-feeds
7
  */
8
  ?>
 
9
  <div id="pro-features" class="nivo-pro-upsell">
10
 
11
  <div class="pro-features-header">
@@ -24,7 +25,8 @@
24
  <div class="pro-feature">
25
  <div class="pro-feature-features">
26
  <h2>Create sliders from categories or galleries</h2>
27
- <p>Besides the classic image sliders, Nivo allows you to choose between Category and Gallery sliders. This
 
28
  allows you to easily showcase your visitors your website’s content</p>
29
  </div>
30
  <div class="pro-feature-image">
@@ -47,7 +49,8 @@
47
  <div class="pro-feature-features">
48
  <h2>Carousel support</h2>
49
  <p>You can leverage the use of the Nivo and create also powerfull carousels besides the regular sliders
50
- which you are already familiar. You can add as many as you want and fetch images from posts, categories
 
51
  or custom post types.</p>
52
  </div>
53
  <div class="pro-feature-image">
6
  * @package feedzy-rss-feeds
7
  */
8
  ?>
9
+
10
  <div id="pro-features" class="nivo-pro-upsell">
11
 
12
  <div class="pro-features-header">
25
  <div class="pro-feature">
26
  <div class="pro-feature-features">
27
  <h2>Create sliders from categories or galleries</h2>
28
+ <p>Besides the classic image sliders, Nivo allows you to choose between Category and Gallery sliders.
29
+ This
30
  allows you to easily showcase your visitors your website’s content</p>
31
  </div>
32
  <div class="pro-feature-image">
49
  <div class="pro-feature-features">
50
  <h2>Carousel support</h2>
51
  <p>You can leverage the use of the Nivo and create also powerfull carousels besides the regular sliders
52
+ which you are already familiar. You can add as many as you want and fetch images from posts,
53
+ categories
54
  or custom post types.</p>
55
  </div>
56
  <div class="pro-feature-image">
nivo-slider-lite.php CHANGED
@@ -3,7 +3,7 @@
3
  * Plugin Name: Slider by Nivo - Responsive Image Slider
4
  * Plugin URI: https://themeisle.com/plugins/nivo-slider-lite
5
  * Description: Nivo Slider is The Most Popular And Easiest to Use WordPress Slider Plugin.
6
- * Version: 2.1.2
7
  * Author: ThemeIsle
8
  * Author URI: https://themeisle.com/
9
  * Text Domain: nivo-slider
@@ -117,7 +117,8 @@ function run_nivo_slider() {
117
  require_once $vendor_file;
118
  }
119
  add_filter(
120
- 'themeisle_sdk_products', function ( $products ) {
 
121
  $products[] = NIVO_SLIDER_PLUGIN_FILE;
122
 
123
  return $products;
3
  * Plugin Name: Slider by Nivo - Responsive Image Slider
4
  * Plugin URI: https://themeisle.com/plugins/nivo-slider-lite
5
  * Description: Nivo Slider is The Most Popular And Easiest to Use WordPress Slider Plugin.
6
+ * Version: 2.2.0
7
  * Author: ThemeIsle
8
  * Author URI: https://themeisle.com/
9
  * Text Domain: nivo-slider
117
  require_once $vendor_file;
118
  }
119
  add_filter(
120
+ 'themeisle_sdk_products',
121
+ function ( $products ) {
122
  $products[] = NIVO_SLIDER_PLUGIN_FILE;
123
 
124
  return $products;
package-lock.json DELETED
@@ -1,5599 +0,0 @@
1
- {
2
- "name": "nivo-slider-lite",
3
- "version": "2.1.2",
4
- "lockfileVersion": 1,
5
- "requires": true,
6
- "dependencies": {
7
- "abbrev": {
8
- "version": "1.1.1",
9
- "resolved": "https://registry.npmjs.org/abbrev/-/abbrev-1.1.1.tgz",
10
- "integrity": "sha512-nne9/IiQ/hzIhY6pdDnbBtz7DjPTKrY00P/zvPSm5pOFkl6xuGrGnXn/VtTNNfNtAfZ9/1RtehkszU9qcTii0Q==",
11
- "dev": true
12
- },
13
- "ajv": {
14
- "version": "5.5.2",
15
- "resolved": "https://registry.npmjs.org/ajv/-/ajv-5.5.2.tgz",
16
- "integrity": "sha1-c7Xuyj+rZT49P5Qis0GtQiBdyWU=",
17
- "dev": true,
18
- "optional": true,
19
- "requires": {
20
- "co": "4.6.0",
21
- "fast-deep-equal": "1.1.0",
22
- "fast-json-stable-stringify": "2.0.0",
23
- "json-schema-traverse": "0.3.1"
24
- }
25
- },
26
- "ansi-gray": {
27
- "version": "0.1.1",
28
- "resolved": "https://registry.npmjs.org/ansi-gray/-/ansi-gray-0.1.1.tgz",
29
- "integrity": "sha1-KWLPVOyXksSFEKPetSRDaGHvclE=",
30
- "dev": true,
31
- "requires": {
32
- "ansi-wrap": "0.1.0"
33
- }
34
- },
35
- "ansi-regex": {
36
- "version": "2.1.1",
37
- "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-2.1.1.tgz",
38
- "integrity": "sha1-w7M6te42DYbg5ijwRorn7yfWVN8=",
39
- "dev": true
40
- },
41
- "ansi-styles": {
42
- "version": "2.2.1",
43
- "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-2.2.1.tgz",
44
- "integrity": "sha1-tDLdM1i2NM914eRmQ2gkBTPB3b4=",
45
- "dev": true
46
- },
47
- "ansi-wrap": {
48
- "version": "0.1.0",
49
- "resolved": "https://registry.npmjs.org/ansi-wrap/-/ansi-wrap-0.1.0.tgz",
50
- "integrity": "sha1-qCJQ3bABXponyoLoLqYDu/pF768=",
51
- "dev": true
52
- },
53
- "aproba": {
54
- "version": "1.2.0",
55
- "resolved": "https://registry.npmjs.org/aproba/-/aproba-1.2.0.tgz",
56
- "integrity": "sha512-Y9J6ZjXtoYh8RnXVCMOU/ttDmk1aBjunq9vO0ta5x85WDQiQfUF9sIPBITdbiiIVcBo03Hi3jMxigBtsddlXRw==",
57
- "dev": true
58
- },
59
- "archive-type": {
60
- "version": "3.2.0",
61
- "resolved": "https://registry.npmjs.org/archive-type/-/archive-type-3.2.0.tgz",
62
- "integrity": "sha1-nNnABpV+vpX62tW9YJiUKoE3N/Y=",
63
- "dev": true,
64
- "requires": {
65
- "file-type": "3.9.0"
66
- }
67
- },
68
- "archiver": {
69
- "version": "1.3.0",
70
- "resolved": "https://registry.npmjs.org/archiver/-/archiver-1.3.0.tgz",
71
- "integrity": "sha1-TyGU1tj5nfP1MeaIHxTxXVX6ryI=",
72
- "dev": true,
73
- "requires": {
74
- "archiver-utils": "1.3.0",
75
- "async": "2.6.1",
76
- "buffer-crc32": "0.2.13",
77
- "glob": "7.1.2",
78
- "lodash": "4.17.10",
79
- "readable-stream": "2.3.6",
80
- "tar-stream": "1.6.1",
81
- "walkdir": "0.0.11",
82
- "zip-stream": "1.2.0"
83
- },
84
- "dependencies": {
85
- "async": {
86
- "version": "2.6.1",
87
- "resolved": "https://registry.npmjs.org/async/-/async-2.6.1.tgz",
88
- "integrity": "sha512-fNEiL2+AZt6AlAw/29Cr0UDe4sRAHCpEHh54WMz+Bb7QfNcFw4h3loofyJpLeQs4Yx7yuqu/2dLgM5hKOs6HlQ==",
89
- "dev": true,
90
- "requires": {
91
- "lodash": "4.17.10"
92
- }
93
- },
94
- "glob": {
95
- "version": "7.1.2",
96
- "resolved": "https://registry.npmjs.org/glob/-/glob-7.1.2.tgz",
97
- "integrity": "sha512-MJTUg1kjuLeQCJ+ccE4Vpa6kKVXkPYJ2mOCQyUuKLcLQsdrMCpBPUi8qVE6+YuaJkozeA9NusTAw3hLr8Xe5EQ==",
98
- "dev": true,
99
- "requires": {
100
- "fs.realpath": "1.0.0",
101
- "inflight": "1.0.6",
102
- "inherits": "2.0.3",
103
- "minimatch": "3.0.4",
104
- "once": "1.4.0",
105
- "path-is-absolute": "1.0.1"
106
- }
107
- },
108
- "lodash": {
109
- "version": "4.17.10",
110
- "resolved": "https://registry.npmjs.org/lodash/-/lodash-4.17.10.tgz",
111
- "integrity": "sha512-UejweD1pDoXu+AD825lWwp4ZGtSwgnpZxb3JDViD7StjQz+Nb/6l093lx4OQ0foGWNRoc19mWy7BzL+UAK2iVg==",
112
- "dev": true
113
- },
114
- "minimatch": {
115
- "version": "3.0.4",
116
- "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.0.4.tgz",
117
- "integrity": "sha512-yJHVQEhyqPLUTgt9B83PXu6W3rx4MvvHvSUvToogpwoGDOUQ+yDrR0HRot+yOCdCO7u4hX3pWft6kWBBcqh0UA==",
118
- "dev": true,
119
- "requires": {
120
- "brace-expansion": "1.1.11"
121
- }
122
- }
123
- }
124
- },
125
- "archiver-utils": {
126
- "version": "1.3.0",
127
- "resolved": "https://registry.npmjs.org/archiver-utils/-/archiver-utils-1.3.0.tgz",
128
- "integrity": "sha1-5QtMCccL89aA4y/xt5lOn52JUXQ=",
129
- "dev": true,
130
- "requires": {
131
- "glob": "7.1.2",
132
- "graceful-fs": "4.1.11",
133
- "lazystream": "1.0.0",
134
- "lodash": "4.17.10",
135
- "normalize-path": "2.1.1",
136
- "readable-stream": "2.3.6"
137
- },
138
- "dependencies": {
139
- "glob": {
140
- "version": "7.1.2",
141
- "resolved": "https://registry.npmjs.org/glob/-/glob-7.1.2.tgz",
142
- "integrity": "sha512-MJTUg1kjuLeQCJ+ccE4Vpa6kKVXkPYJ2mOCQyUuKLcLQsdrMCpBPUi8qVE6+YuaJkozeA9NusTAw3hLr8Xe5EQ==",
143
- "dev": true,
144
- "requires": {
145
- "fs.realpath": "1.0.0",
146
- "inflight": "1.0.6",
147
- "inherits": "2.0.3",
148
- "minimatch": "3.0.4",
149
- "once": "1.4.0",
150
- "path-is-absolute": "1.0.1"
151
- }
152
- },
153
- "graceful-fs": {
154
- "version": "4.1.11",
155
- "resolved": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.1.11.tgz",
156
- "integrity": "sha1-Dovf5NHduIVNZOBOp8AOKgJuVlg=",
157
- "dev": true
158
- },
159
- "lodash": {
160
- "version": "4.17.10",
161
- "resolved": "https://registry.npmjs.org/lodash/-/lodash-4.17.10.tgz",
162
- "integrity": "sha512-UejweD1pDoXu+AD825lWwp4ZGtSwgnpZxb3JDViD7StjQz+Nb/6l093lx4OQ0foGWNRoc19mWy7BzL+UAK2iVg==",
163
- "dev": true
164
- },
165
- "minimatch": {
166
- "version": "3.0.4",
167
- "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.0.4.tgz",
168
- "integrity": "sha512-yJHVQEhyqPLUTgt9B83PXu6W3rx4MvvHvSUvToogpwoGDOUQ+yDrR0HRot+yOCdCO7u4hX3pWft6kWBBcqh0UA==",
169
- "dev": true,
170
- "requires": {
171
- "brace-expansion": "1.1.11"
172
- }
173
- }
174
- }
175
- },
176
- "are-we-there-yet": {
177
- "version": "1.1.5",
178
- "resolved": "https://registry.npmjs.org/are-we-there-yet/-/are-we-there-yet-1.1.5.tgz",
179
- "integrity": "sha512-5hYdAkZlcG8tOLujVDTgCT+uPX0VnpAH28gWsLfzpXYm7wP6mp5Q/gYyR7YQ0cKVJcXJnl3j2kpBan13PtQf6w==",
180
- "dev": true,
181
- "requires": {
182
- "delegates": "1.0.0",
183
- "readable-stream": "2.3.6"
184
- }
185
- },
186
- "argparse": {
187
- "version": "0.1.16",
188
- "resolved": "https://registry.npmjs.org/argparse/-/argparse-0.1.16.tgz",
189
- "integrity": "sha1-z9AeD7uj1srtBJ+9dY1A9lGW9Xw=",
190
- "dev": true,
191
- "requires": {
192
- "underscore": "1.7.0",
193
- "underscore.string": "2.4.0"
194
- },
195
- "dependencies": {
196
- "underscore.string": {
197
- "version": "2.4.0",
198
- "resolved": "https://registry.npmjs.org/underscore.string/-/underscore.string-2.4.0.tgz",
199
- "integrity": "sha1-jN2PusTi0uoefi6Al8QvRCKA+Fs=",
200
- "dev": true
201
- }
202
- }
203
- },
204
- "arr-diff": {
205
- "version": "2.0.0",
206
- "resolved": "https://registry.npmjs.org/arr-diff/-/arr-diff-2.0.0.tgz",
207
- "integrity": "sha1-jzuCf5Vai9ZpaX5KQlasPOrjVs8=",
208
- "dev": true,
209
- "requires": {
210
- "arr-flatten": "1.1.0"
211
- }
212
- },
213
- "arr-flatten": {
214
- "version": "1.1.0",
215
- "resolved": "https://registry.npmjs.org/arr-flatten/-/arr-flatten-1.1.0.tgz",
216
- "integrity": "sha512-L3hKV5R/p5o81R7O02IGnwpDmkp6E982XhtbuwSe3O4qOtMMMtodicASA1Cny2U+aCXcNpml+m4dPsvsJ3jatg==",
217
- "dev": true
218
- },
219
- "array-differ": {
220
- "version": "1.0.0",
221
- "resolved": "https://registry.npmjs.org/array-differ/-/array-differ-1.0.0.tgz",
222
- "integrity": "sha1-7/UuN1gknTO+QCuLuOVkuytdQDE=",
223
- "dev": true
224
- },
225
- "array-find-index": {
226
- "version": "1.0.2",
227
- "resolved": "https://registry.npmjs.org/array-find-index/-/array-find-index-1.0.2.tgz",
228
- "integrity": "sha1-3wEKoSh+Fku9pvlyOwqWoexBh6E=",
229
- "dev": true
230
- },
231
- "array-union": {
232
- "version": "1.0.2",
233
- "resolved": "https://registry.npmjs.org/array-union/-/array-union-1.0.2.tgz",
234
- "integrity": "sha1-mjRBDk9OPaI96jdb5b5w8kd47Dk=",
235
- "dev": true,
236
- "requires": {
237
- "array-uniq": "1.0.3"
238
- }
239
- },
240
- "array-uniq": {
241
- "version": "1.0.3",
242
- "resolved": "https://registry.npmjs.org/array-uniq/-/array-uniq-1.0.3.tgz",
243
- "integrity": "sha1-r2rId6Jcx/dOBYiUdThY39sk/bY=",
244
- "dev": true
245
- },
246
- "array-unique": {
247
- "version": "0.2.1",
248
- "resolved": "https://registry.npmjs.org/array-unique/-/array-unique-0.2.1.tgz",
249
- "integrity": "sha1-odl8yvy8JiXMcPrc6zalDFiwGlM=",
250
- "dev": true
251
- },
252
- "arrify": {
253
- "version": "1.0.1",
254
- "resolved": "https://registry.npmjs.org/arrify/-/arrify-1.0.1.tgz",
255
- "integrity": "sha1-iYUI2iIm84DfkEcoRWhJwVAaSw0=",
256
- "dev": true
257
- },
258
- "asn1": {
259
- "version": "0.2.3",
260
- "resolved": "https://registry.npmjs.org/asn1/-/asn1-0.2.3.tgz",
261
- "integrity": "sha1-2sh4dxPJlmhJ/IGAd36+nB3fO4Y=",
262
- "dev": true,
263
- "optional": true
264
- },
265
- "assert-plus": {
266
- "version": "1.0.0",
267
- "resolved": "https://registry.npmjs.org/assert-plus/-/assert-plus-1.0.0.tgz",
268
- "integrity": "sha1-8S4PPF13sLHN2RRpQuTpbB5N1SU=",
269
- "dev": true
270
- },
271
- "async": {
272
- "version": "0.1.22",
273
- "resolved": "https://registry.npmjs.org/async/-/async-0.1.22.tgz",
274
- "integrity": "sha1-D8GqoIig4+8Ovi2IMbqw3PiEUGE=",
275
- "dev": true
276
- },
277
- "async-each-series": {
278
- "version": "1.1.0",
279
- "resolved": "https://registry.npmjs.org/async-each-series/-/async-each-series-1.1.0.tgz",
280
- "integrity": "sha1-9C/YFV048hpbjqB8KOBj7RcAsTg=",
281
- "dev": true,
282
- "optional": true
283
- },
284
- "asynckit": {
285
- "version": "0.4.0",
286
- "resolved": "https://registry.npmjs.org/asynckit/-/asynckit-0.4.0.tgz",
287
- "integrity": "sha1-x57Zf380y48robyXkLzDZkdLS3k=",
288
- "dev": true,
289
- "optional": true
290
- },
291
- "autoprefixer": {
292
- "version": "6.7.7",
293
- "resolved": "https://registry.npmjs.org/autoprefixer/-/autoprefixer-6.7.7.tgz",
294
- "integrity": "sha1-Hb0cg1ZY41zj+ZhAmdsAWFx4IBQ=",
295
- "dev": true,
296
- "requires": {
297
- "browserslist": "1.7.7",
298
- "caniuse-db": "1.0.30000846",
299
- "normalize-range": "0.1.2",
300
- "num2fraction": "1.2.2",
301
- "postcss": "5.2.18",
302
- "postcss-value-parser": "3.3.0"
303
- }
304
- },
305
- "aws-sign2": {
306
- "version": "0.7.0",
307
- "resolved": "https://registry.npmjs.org/aws-sign2/-/aws-sign2-0.7.0.tgz",
308
- "integrity": "sha1-tG6JCTSpWR8tL2+G1+ap8bP+dqg=",
309
- "dev": true,
310
- "optional": true
311
- },
312
- "aws4": {
313
- "version": "1.7.0",
314
- "resolved": "https://registry.npmjs.org/aws4/-/aws4-1.7.0.tgz",
315
- "integrity": "sha512-32NDda82rhwD9/JBCCkB+MRYDp0oSvlo2IL6rQWA10PQi7tDUM3eqMSltXmY+Oyl/7N3P3qNtAlv7X0d9bI28w==",
316
- "dev": true,
317
- "optional": true
318
- },
319
- "balanced-match": {
320
- "version": "1.0.0",
321
- "resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-1.0.0.tgz",
322
- "integrity": "sha1-ibTRmasr7kneFk6gK4nORi1xt2c=",
323
- "dev": true
324
- },
325
- "bcrypt-pbkdf": {
326
- "version": "1.0.1",
327
- "resolved": "https://registry.npmjs.org/bcrypt-pbkdf/-/bcrypt-pbkdf-1.0.1.tgz",
328
- "integrity": "sha1-Y7xdy2EzG5K8Bf1SiVPDNGKgb40=",
329
- "dev": true,
330
- "optional": true,
331
- "requires": {
332
- "tweetnacl": "0.14.5"
333
- }
334
- },
335
- "beeper": {
336
- "version": "1.1.1",
337
- "resolved": "https://registry.npmjs.org/beeper/-/beeper-1.1.1.tgz",
338
- "integrity": "sha1-5tXqjF2tABMEpwsiY4RH9pyy+Ak=",
339
- "dev": true
340
- },
341
- "bin-build": {
342
- "version": "2.2.0",
343
- "resolved": "https://registry.npmjs.org/bin-build/-/bin-build-2.2.0.tgz",
344
- "integrity": "sha1-EfjdYfcP/Por3KpbRvXo/t1CIcw=",
345
- "dev": true,
346
- "optional": true,
347
- "requires": {
348
- "archive-type": "3.2.0",
349
- "decompress": "3.0.0",
350
- "download": "4.4.3",
351
- "exec-series": "1.0.3",
352
- "rimraf": "2.2.8",
353
- "tempfile": "1.1.1",
354
- "url-regex": "3.2.0"
355
- }
356
- },
357
- "bin-check": {
358
- "version": "2.0.0",
359
- "resolved": "https://registry.npmjs.org/bin-check/-/bin-check-2.0.0.tgz",
360
- "integrity": "sha1-hvjm9CU4k99g3DFpV/WvAqywWTA=",
361
- "dev": true,
362
- "optional": true,
363
- "requires": {
364
- "executable": "1.1.0"
365
- }
366
- },
367
- "bin-version": {
368
- "version": "1.0.4",
369
- "resolved": "https://registry.npmjs.org/bin-version/-/bin-version-1.0.4.tgz",
370
- "integrity": "sha1-nrSY7m/Xb3q5p8FgQ2+JV5Q1144=",
371
- "dev": true,
372
- "optional": true,
373
- "requires": {
374
- "find-versions": "1.2.1"
375
- }
376
- },
377
- "bin-version-check": {
378
- "version": "2.1.0",
379
- "resolved": "https://registry.npmjs.org/bin-version-check/-/bin-version-check-2.1.0.tgz",
380
- "integrity": "sha1-5OXfKQuQaffRETJAMe/BP90RpbA=",
381
- "dev": true,
382
- "optional": true,
383
- "requires": {
384
- "bin-version": "1.0.4",
385
- "minimist": "1.2.0",
386
- "semver": "4.3.6",
387
- "semver-truncate": "1.1.2"
388
- },
389
- "dependencies": {
390
- "minimist": {
391
- "version": "1.2.0",
392
- "resolved": "https://registry.npmjs.org/minimist/-/minimist-1.2.0.tgz",
393
- "integrity": "sha1-o1AIsg9BOD7sH7kU9M1d95omQoQ=",
394
- "dev": true,
395
- "optional": true
396
- },
397
- "semver": {
398
- "version": "4.3.6",
399
- "resolved": "https://registry.npmjs.org/semver/-/semver-4.3.6.tgz",
400
- "integrity": "sha1-MAvG4OhjdPe6YQaLWx7NV/xlMto=",
401
- "dev": true,
402
- "optional": true
403
- }
404
- }
405
- },
406
- "bin-wrapper": {
407
- "version": "3.0.2",
408
- "resolved": "https://registry.npmjs.org/bin-wrapper/-/bin-wrapper-3.0.2.tgz",
409
- "integrity": "sha1-Z9MwYmLksaXy+I7iNGT2plVneus=",
410
- "dev": true,
411
- "optional": true,
412
- "requires": {
413
- "bin-check": "2.0.0",
414
- "bin-version-check": "2.1.0",
415
- "download": "4.4.3",
416
- "each-async": "1.1.1",
417
- "lazy-req": "1.1.0",
418
- "os-filter-obj": "1.0.3"
419
- }
420
- },
421
- "bl": {
422
- "version": "1.2.2",
423
- "resolved": "https://registry.npmjs.org/bl/-/bl-1.2.2.tgz",
424
- "integrity": "sha512-e8tQYnZodmebYDWGH7KMRvtzKXaJHx3BbilrgZCfvyLUYdKpK1t5PSPmpkny/SgiTSCnjfLW7v5rlONXVFkQEA==",
425
- "dev": true,
426
- "requires": {
427
- "readable-stream": "2.3.6",
428
- "safe-buffer": "5.1.2"
429
- }
430
- },
431
- "block-stream": {
432
- "version": "0.0.9",
433
- "resolved": "https://registry.npmjs.org/block-stream/-/block-stream-0.0.9.tgz",
434
- "integrity": "sha1-E+v+d4oDIFz+A3UUgeu0szAMEmo=",
435
- "dev": true,
436
- "optional": true,
437
- "requires": {
438
- "inherits": "2.0.3"
439
- }
440
- },
441
- "body": {
442
- "version": "5.1.0",
443
- "resolved": "https://registry.npmjs.org/body/-/body-5.1.0.tgz",
444
- "integrity": "sha1-5LoM5BCkaTYyM2dgnstOZVMSUGk=",
445
- "dev": true,
446
- "requires": {
447
- "continuable-cache": "0.3.1",
448
- "error": "7.0.2",
449
- "raw-body": "1.1.7",
450
- "safe-json-parse": "1.0.1"
451
- }
452
- },
453
- "brace-expansion": {
454
- "version": "1.1.11",
455
- "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz",
456
- "integrity": "sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==",
457
- "dev": true,
458
- "requires": {
459
- "balanced-match": "1.0.0",
460
- "concat-map": "0.0.1"
461
- }
462
- },
463
- "braces": {
464
- "version": "1.8.5",
465
- "resolved": "https://registry.npmjs.org/braces/-/braces-1.8.5.tgz",
466
- "integrity": "sha1-uneWLhLf+WnWt2cR6RS3N4V79qc=",
467
- "dev": true,
468
- "requires": {
469
- "expand-range": "1.8.2",
470
- "preserve": "0.2.0",
471
- "repeat-element": "1.1.2"
472
- }
473
- },
474
- "browserslist": {
475
- "version": "1.7.7",
476
- "resolved": "https://registry.npmjs.org/browserslist/-/browserslist-1.7.7.tgz",
477
- "integrity": "sha1-C9dnBCWL6CmyOYu1Dkti0aFmsLk=",
478
- "dev": true,
479
- "requires": {
480
- "caniuse-db": "1.0.30000846",
481
- "electron-to-chromium": "1.3.48"
482
- }
483
- },
484
- "buffer-alloc": {
485
- "version": "1.1.0",
486
- "resolved": "https://registry.npmjs.org/buffer-alloc/-/buffer-alloc-1.1.0.tgz",
487
- "integrity": "sha1-BVFNM78WVtNUDGhPZbEgLpDsowM=",
488
- "dev": true,
489
- "requires": {
490
- "buffer-alloc-unsafe": "0.1.1",
491
- "buffer-fill": "0.1.1"
492
- }
493
- },
494
- "buffer-alloc-unsafe": {
495
- "version": "0.1.1",
496
- "resolved": "https://registry.npmjs.org/buffer-alloc-unsafe/-/buffer-alloc-unsafe-0.1.1.tgz",
497
- "integrity": "sha1-/+H2dVHdBVc33iUzN7/oU9+rGmo=",
498
- "dev": true
499
- },
500
- "buffer-crc32": {
501
- "version": "0.2.13",
502
- "resolved": "https://registry.npmjs.org/buffer-crc32/-/buffer-crc32-0.2.13.tgz",
503
- "integrity": "sha1-DTM+PwDqxQqhRUq9MO+MKl2ackI=",
504
- "dev": true
505
- },
506
- "buffer-fill": {
507
- "version": "0.1.1",
508
- "resolved": "https://registry.npmjs.org/buffer-fill/-/buffer-fill-0.1.1.tgz",
509
- "integrity": "sha512-YgBMBzdRLEfgxJIGu2wrvI2E03tMCFU1p7d1KhB4BOoMN0VxmTFjSyN5JtKt9z8Z9JajMHruI6SE25W96wNv7Q==",
510
- "dev": true
511
- },
512
- "buffer-from": {
513
- "version": "1.0.0",
514
- "resolved": "https://registry.npmjs.org/buffer-from/-/buffer-from-1.0.0.tgz",
515
- "integrity": "sha512-83apNb8KK0Se60UE1+4Ukbe3HbfELJ6UlI4ldtOGs7So4KD26orJM8hIY9lxdzP+UpItH1Yh/Y8GUvNFWFFRxA==",
516
- "dev": true
517
- },
518
- "buffer-to-vinyl": {
519
- "version": "1.1.0",
520
- "resolved": "https://registry.npmjs.org/buffer-to-vinyl/-/buffer-to-vinyl-1.1.0.tgz",
521
- "integrity": "sha1-APFfruOreh3aLN5tkSG//dB7ImI=",
522
- "dev": true,
523
- "requires": {
524
- "file-type": "3.9.0",
525
- "readable-stream": "2.3.6",
526
- "uuid": "2.0.3",
527
- "vinyl": "1.2.0"
528
- },
529
- "dependencies": {
530
- "uuid": {
531
- "version": "2.0.3",
532
- "resolved": "https://registry.npmjs.org/uuid/-/uuid-2.0.3.tgz",
533
- "integrity": "sha1-Z+LoY3lyFVMN/zGOW/nc6/1Hsho=",
534
- "dev": true
535
- }
536
- }
537
- },
538
- "builtin-modules": {
539
- "version": "1.1.1",
540
- "resolved": "https://registry.npmjs.org/builtin-modules/-/builtin-modules-1.1.1.tgz",
541
- "integrity": "sha1-Jw8HbFpywC9bZaR9+Uxf46J4iS8=",
542
- "dev": true
543
- },
544
- "bytes": {
545
- "version": "1.0.0",
546
- "resolved": "https://registry.npmjs.org/bytes/-/bytes-1.0.0.tgz",
547
- "integrity": "sha1-NWnt6Lo0MV+rmcPpLLBMciDeH6g=",
548
- "dev": true
549
- },
550
- "cache-swap": {
551
- "version": "0.0.6",
552
- "resolved": "https://registry.npmjs.org/cache-swap/-/cache-swap-0.0.6.tgz",
553
- "integrity": "sha1-F834NebDAf0VgJCwPRzDb0Z7FpU=",
554
- "dev": true,
555
- "requires": {
556
- "async": "0.2.10",
557
- "lodash": "1.1.1",
558
- "rimraf": "2.1.4"
559
- },
560
- "dependencies": {
561
- "async": {
562
- "version": "0.2.10",
563
- "resolved": "https://registry.npmjs.org/async/-/async-0.2.10.tgz",
564
- "integrity": "sha1-trvgsGdLnXGXCMo43owjfLUmw9E=",
565
- "dev": true
566
- },
567
- "lodash": {
568
- "version": "1.1.1",
569
- "resolved": "https://registry.npmjs.org/lodash/-/lodash-1.1.1.tgz",
570
- "integrity": "sha1-QaKy6aAOZNbRmZ8UP/awdV9ruyQ=",
571
- "dev": true
572
- },
573
- "rimraf": {
574
- "version": "2.1.4",
575
- "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-2.1.4.tgz",
576
- "integrity": "sha1-Wm62Lu2gaPUe3lDymz5c0i89m7I=",
577
- "dev": true,
578
- "requires": {
579
- "graceful-fs": "1.2.3"
580
- }
581
- }
582
- }
583
- },
584
- "camelcase": {
585
- "version": "2.1.1",
586
- "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-2.1.1.tgz",
587
- "integrity": "sha1-fB0W1nmhu+WcoCys7PsBHiAfWh8=",
588
- "dev": true
589
- },
590
- "camelcase-keys": {
591
- "version": "2.1.0",
592
- "resolved": "https://registry.npmjs.org/camelcase-keys/-/camelcase-keys-2.1.0.tgz",
593
- "integrity": "sha1-MIvur/3ygRkFHvodkyITyRuPkuc=",
594
- "dev": true,
595
- "requires": {
596
- "camelcase": "2.1.1",
597
- "map-obj": "1.0.1"
598
- }
599
- },
600
- "caniuse-db": {
601
- "version": "1.0.30000846",
602
- "resolved": "https://registry.npmjs.org/caniuse-db/-/caniuse-db-1.0.30000846.tgz",
603
- "integrity": "sha1-2chvkUc4202gmO7e2ZdBPERWG9I=",
604
- "dev": true
605
- },
606
- "capture-stack-trace": {
607
- "version": "1.0.0",
608
- "resolved": "https://registry.npmjs.org/capture-stack-trace/-/capture-stack-trace-1.0.0.tgz",
609
- "integrity": "sha1-Sm+gc5nCa7pH8LJJa00PtAjFVQ0=",
610
- "dev": true
611
- },
612
- "caseless": {
613
- "version": "0.12.0",
614
- "resolved": "https://registry.npmjs.org/caseless/-/caseless-0.12.0.tgz",
615
- "integrity": "sha1-G2gcIf+EAzyCZUMJBolCDRhxUdw=",
616
- "dev": true,
617
- "optional": true
618
- },
619
- "caw": {
620
- "version": "1.2.0",
621
- "resolved": "https://registry.npmjs.org/caw/-/caw-1.2.0.tgz",
622
- "integrity": "sha1-/7Im/n78VHKI3GLuPpcHPCEtEDQ=",
623
- "dev": true,
624
- "requires": {
625
- "get-proxy": "1.1.0",
626
- "is-obj": "1.0.1",
627
- "object-assign": "3.0.0",
628
- "tunnel-agent": "0.4.3"
629
- },
630
- "dependencies": {
631
- "object-assign": {
632
- "version": "3.0.0",
633
- "resolved": "https://registry.npmjs.org/object-assign/-/object-assign-3.0.0.tgz",
634
- "integrity": "sha1-m+3VygiXlJvKR+f/QIBi1Un1h/I=",
635
- "dev": true
636
- },
637
- "tunnel-agent": {
638
- "version": "0.4.3",
639
- "resolved": "https://registry.npmjs.org/tunnel-agent/-/tunnel-agent-0.4.3.tgz",
640
- "integrity": "sha1-Y3PbdpCf5XDgjXNYM2Xtgop07us=",
641
- "dev": true
642
- }
643
- }
644
- },
645
- "chalk": {
646
- "version": "1.1.3",
647
- "resolved": "https://registry.npmjs.org/chalk/-/chalk-1.1.3.tgz",
648
- "integrity": "sha1-qBFcVeSnAv5NFQq9OHKCKn4J/Jg=",
649
- "dev": true,
650
- "requires": {
651
- "ansi-styles": "2.2.1",
652
- "escape-string-regexp": "1.0.5",
653
- "has-ansi": "2.0.0",
654
- "strip-ansi": "3.0.1",
655
- "supports-color": "2.0.0"
656
- },
657
- "dependencies": {
658
- "supports-color": {
659
- "version": "2.0.0",
660
- "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-2.0.0.tgz",
661
- "integrity": "sha1-U10EXOa2Nj+kARcIRimZXp3zJMc=",
662
- "dev": true
663
- }
664
- }
665
- },
666
- "chownr": {
667
- "version": "1.0.1",
668
- "resolved": "https://registry.npmjs.org/chownr/-/chownr-1.0.1.tgz",
669
- "integrity": "sha1-4qdQQqlVGQi+vSW4Uj1fl2nXkYE=",
670
- "dev": true,
671
- "optional": true
672
- },
673
- "clap": {
674
- "version": "1.2.3",
675
- "resolved": "https://registry.npmjs.org/clap/-/clap-1.2.3.tgz",
676
- "integrity": "sha512-4CoL/A3hf90V3VIEjeuhSvlGFEHKzOz+Wfc2IVZc+FaUgU0ZQafJTP49fvnULipOPcAfqhyI2duwQyns6xqjYA==",
677
- "dev": true,
678
- "optional": true,
679
- "requires": {
680
- "chalk": "1.1.3"
681
- }
682
- },
683
- "cli": {
684
- "version": "1.0.1",
685
- "resolved": "https://registry.npmjs.org/cli/-/cli-1.0.1.tgz",
686
- "integrity": "sha1-IoF1NPJL+klQw01TLUjsvGIbjBQ=",
687
- "dev": true,
688
- "requires": {
689
- "exit": "0.1.2",
690
- "glob": "7.1.2"
691
- },
692
- "dependencies": {
693
- "glob": {
694
- "version": "7.1.2",
695
- "resolved": "https://registry.npmjs.org/glob/-/glob-7.1.2.tgz",
696
- "integrity": "sha512-MJTUg1kjuLeQCJ+ccE4Vpa6kKVXkPYJ2mOCQyUuKLcLQsdrMCpBPUi8qVE6+YuaJkozeA9NusTAw3hLr8Xe5EQ==",
697
- "dev": true,
698
- "requires": {
699
- "fs.realpath": "1.0.0",
700
- "inflight": "1.0.6",
701
- "inherits": "2.0.3",
702
- "minimatch": "3.0.4",
703
- "once": "1.4.0",
704
- "path-is-absolute": "1.0.1"
705
- }
706
- },
707
- "minimatch": {
708
- "version": "3.0.4",
709
- "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.0.4.tgz",
710
- "integrity": "sha512-yJHVQEhyqPLUTgt9B83PXu6W3rx4MvvHvSUvToogpwoGDOUQ+yDrR0HRot+yOCdCO7u4hX3pWft6kWBBcqh0UA==",
711
- "dev": true,
712
- "requires": {
713
- "brace-expansion": "1.1.11"
714
- }
715
- }
716
- }
717
- },
718
- "clone": {
719
- "version": "1.0.4",
720
- "resolved": "https://registry.npmjs.org/clone/-/clone-1.0.4.tgz",
721
- "integrity": "sha1-2jCcwmPfFZlMaIypAheco8fNfH4=",
722
- "dev": true
723
- },
724
- "clone-stats": {
725
- "version": "0.0.1",
726
- "resolved": "https://registry.npmjs.org/clone-stats/-/clone-stats-0.0.1.tgz",
727
- "integrity": "sha1-uI+UqCzzi4eR1YBG6kAprYjKmdE=",
728
- "dev": true
729
- },
730
- "co": {
731
- "version": "4.6.0",
732
- "resolved": "https://registry.npmjs.org/co/-/co-4.6.0.tgz",
733
- "integrity": "sha1-bqa989hTrlTMuOR7+gvz+QMfsYQ=",
734
- "dev": true,
735
- "optional": true
736
- },
737
- "coa": {
738
- "version": "1.0.4",
739
- "resolved": "https://registry.npmjs.org/coa/-/coa-1.0.4.tgz",
740
- "integrity": "sha1-qe8VNmDWqGqL3sAomlxoTSF0Mv0=",
741
- "dev": true,
742
- "optional": true,
743
- "requires": {
744
- "q": "1.5.1"
745
- }
746
- },
747
- "code-point-at": {
748
- "version": "1.1.0",
749
- "resolved": "https://registry.npmjs.org/code-point-at/-/code-point-at-1.1.0.tgz",
750
- "integrity": "sha1-DQcLTQQ6W+ozovGkDi7bPZpMz3c=",
751
- "dev": true
752
- },
753
- "coffee-script": {
754
- "version": "1.3.3",
755
- "resolved": "https://registry.npmjs.org/coffee-script/-/coffee-script-1.3.3.tgz",
756
- "integrity": "sha1-FQ1rTLUiiUNp7+1qIQHCC8f0pPQ=",
757
- "dev": true
758
- },
759
- "color-support": {
760
- "version": "1.1.3",
761
- "resolved": "https://registry.npmjs.org/color-support/-/color-support-1.1.3.tgz",
762
- "integrity": "sha512-qiBjkpbMLO/HL68y+lh4q0/O1MZFj2RX6X/KmMa3+gJD3z+WwI1ZzDHysvqHGS3mP6mznPckpXmw1nI9cJjyRg==",
763
- "dev": true
764
- },
765
- "colors": {
766
- "version": "0.6.2",
767
- "resolved": "https://registry.npmjs.org/colors/-/colors-0.6.2.tgz",
768
- "integrity": "sha1-JCP+ZnisDF2uiFLl0OW+CMmXq8w=",
769
- "dev": true
770
- },
771
- "combined-stream": {
772
- "version": "1.0.6",
773
- "resolved": "https://registry.npmjs.org/combined-stream/-/combined-stream-1.0.6.tgz",
774
- "integrity": "sha1-cj599ugBrFYTETp+RFqbactjKBg=",
775
- "dev": true,
776
- "requires": {
777
- "delayed-stream": "1.0.0"
778
- }
779
- },
780
- "commander": {
781
- "version": "2.8.1",
782
- "resolved": "https://registry.npmjs.org/commander/-/commander-2.8.1.tgz",
783
- "integrity": "sha1-Br42f+v9oMMwqh4qBy09yXYkJdQ=",
784
- "dev": true,
785
- "requires": {
786
- "graceful-readlink": "1.0.1"
787
- }
788
- },
789
- "compress-commons": {
790
- "version": "1.2.2",
791
- "resolved": "https://registry.npmjs.org/compress-commons/-/compress-commons-1.2.2.tgz",
792
- "integrity": "sha1-UkqfEJA/OoEzibAiXSfEi7dRiQ8=",
793
- "dev": true,
794
- "requires": {
795
- "buffer-crc32": "0.2.13",
796
- "crc32-stream": "2.0.0",
797
- "normalize-path": "2.1.1",
798
- "readable-stream": "2.3.6"
799
- }
800
- },
801
- "concat-map": {
802
- "version": "0.0.1",
803
- "resolved": "https://registry.npmjs.org/concat-map/-/concat-map-0.0.1.tgz",
804
- "integrity": "sha1-2Klr13/Wjfd5OnMDajug1UBdR3s=",
805
- "dev": true
806
- },
807
- "concat-stream": {
808
- "version": "1.6.2",
809
- "resolved": "https://registry.npmjs.org/concat-stream/-/concat-stream-1.6.2.tgz",
810
- "integrity": "sha512-27HBghJxjiZtIk3Ycvn/4kbJk/1uZuJFfuPEns6LaEvpvG1f0hTea8lilrouyo9mVc2GWdcEZ8OLoGmSADlrCw==",
811
- "dev": true,
812
- "requires": {
813
- "buffer-from": "1.0.0",
814
- "inherits": "2.0.3",
815
- "readable-stream": "2.3.6",
816
- "typedarray": "0.0.6"
817
- }
818
- },
819
- "console-browserify": {
820
- "version": "1.1.0",
821
- "resolved": "https://registry.npmjs.org/console-browserify/-/console-browserify-1.1.0.tgz",
822
- "integrity": "sha1-8CQcRXMKn8YyOyBtvzjtx0HQuxA=",
823
- "dev": true,
824
- "requires": {
825
- "date-now": "0.1.4"
826
- }
827
- },
828
- "console-control-strings": {
829
- "version": "1.1.0",
830
- "resolved": "https://registry.npmjs.org/console-control-strings/-/console-control-strings-1.1.0.tgz",
831
- "integrity": "sha1-PXz0Rk22RG6mRL9LOVB/mFEAjo4=",
832
- "dev": true
833
- },
834
- "console-stream": {
835
- "version": "0.1.1",
836
- "resolved": "https://registry.npmjs.org/console-stream/-/console-stream-0.1.1.tgz",
837
- "integrity": "sha1-oJX+B7IEZZVfL6/Si11yvM2UnUQ=",
838
- "dev": true,
839
- "optional": true
840
- },
841
- "continuable-cache": {
842
- "version": "0.3.1",
843
- "resolved": "https://registry.npmjs.org/continuable-cache/-/continuable-cache-0.3.1.tgz",
844
- "integrity": "sha1-vXJ6f67XfnH/OYWskzUakSczrQ8=",
845
- "dev": true
846
- },
847
- "convert-source-map": {
848
- "version": "1.5.1",
849
- "resolved": "https://registry.npmjs.org/convert-source-map/-/convert-source-map-1.5.1.tgz",
850
- "integrity": "sha1-uCeAl7m8IpNl3lxiz1/K7YtVmeU=",
851
- "dev": true
852
- },
853
- "core-util-is": {
854
- "version": "1.0.2",
855
- "resolved": "https://registry.npmjs.org/core-util-is/-/core-util-is-1.0.2.tgz",
856
- "integrity": "sha1-tf1UIgqivFq1eqtxQMlAdUUDwac=",
857
- "dev": true
858
- },
859
- "crc": {
860
- "version": "3.5.0",
861
- "resolved": "https://registry.npmjs.org/crc/-/crc-3.5.0.tgz",
862
- "integrity": "sha1-mLi6fUiWZbo5efWbITgTdBAaGWQ=",
863
- "dev": true
864
- },
865
- "crc32-stream": {
866
- "version": "2.0.0",
867
- "resolved": "https://registry.npmjs.org/crc32-stream/-/crc32-stream-2.0.0.tgz",
868
- "integrity": "sha1-483TtN8xaN10494/u8t7KX/pCPQ=",
869
- "dev": true,
870
- "requires": {
871
- "crc": "3.5.0",
872
- "readable-stream": "2.3.6"
873
- }
874
- },
875
- "create-error-class": {
876
- "version": "3.0.2",
877
- "resolved": "https://registry.npmjs.org/create-error-class/-/create-error-class-3.0.2.tgz",
878
- "integrity": "sha1-Br56vvlHo/FKMP1hBnHUAbyot7Y=",
879
- "dev": true,
880
- "requires": {
881
- "capture-stack-trace": "1.0.0"
882
- }
883
- },
884
- "cson": {
885
- "version": "3.0.2",
886
- "resolved": "https://registry.npmjs.org/cson/-/cson-3.0.2.tgz",
887
- "integrity": "sha1-g+6Qids8JUvsHpjkmNmqzxGtzFQ=",
888
- "dev": true,
889
- "requires": {
890
- "coffee-script": "1.12.7",
891
- "cson-parser": "1.3.5",
892
- "extract-opts": "3.3.1",
893
- "requirefresh": "2.1.0",
894
- "safefs": "4.1.0"
895
- },
896
- "dependencies": {
897
- "coffee-script": {
898
- "version": "1.12.7",
899
- "resolved": "https://registry.npmjs.org/coffee-script/-/coffee-script-1.12.7.tgz",
900
- "integrity": "sha512-fLeEhqwymYat/MpTPUjSKHVYYl0ec2mOyALEMLmzr5i1isuG+6jfI2j2d5oBO3VIzgUXgBVIcOT9uH1TFxBckw==",
901
- "dev": true
902
- }
903
- }
904
- },
905
- "cson-parser": {
906
- "version": "1.3.5",
907
- "resolved": "https://registry.npmjs.org/cson-parser/-/cson-parser-1.3.5.tgz",
908
- "integrity": "sha1-fsZ14DkUVTO/KmqFYHPxWZ2cLSQ=",
909
- "dev": true,
910
- "requires": {
911
- "coffee-script": "1.12.7"
912
- },
913
- "dependencies": {
914
- "coffee-script": {
915
- "version": "1.12.7",
916
- "resolved": "https://registry.npmjs.org/coffee-script/-/coffee-script-1.12.7.tgz",
917
- "integrity": "sha512-fLeEhqwymYat/MpTPUjSKHVYYl0ec2mOyALEMLmzr5i1isuG+6jfI2j2d5oBO3VIzgUXgBVIcOT9uH1TFxBckw==",
918
- "dev": true
919
- }
920
- }
921
- },
922
- "cssbeautify": {
923
- "version": "0.3.1",
924
- "resolved": "https://registry.npmjs.org/cssbeautify/-/cssbeautify-0.3.1.tgz",
925
- "integrity": "sha1-Et0fc0A1wub6ymfcvc73TkKBE5c=",
926
- "dev": true
927
- },
928
- "csscomb": {
929
- "version": "3.1.8",
930
- "resolved": "https://registry.npmjs.org/csscomb/-/csscomb-3.1.8.tgz",
931
- "integrity": "sha1-qKc4iE9Am6817JRhr8UuHHW9I6I=",
932
- "dev": true,
933
- "requires": {
934
- "commander": "2.0.0",
935
- "csscomb-core": "3.0.0-3.1",
936
- "gonzales-pe": "3.0.0-28",
937
- "vow": "0.4.4"
938
- },
939
- "dependencies": {
940
- "commander": {
941
- "version": "2.0.0",
942
- "resolved": "https://registry.npmjs.org/commander/-/commander-2.0.0.tgz",
943
- "integrity": "sha1-0bhvkB+LZL2UG96tr5JFMDk76Sg=",
944
- "dev": true
945
- }
946
- }
947
- },
948
- "csscomb-core": {
949
- "version": "3.0.0-3.1",
950
- "resolved": "https://registry.npmjs.org/csscomb-core/-/csscomb-core-3.0.0-3.1.tgz",
951
- "integrity": "sha1-tBHI18/g3z8v4d+E0b1kpvAEbGg=",
952
- "dev": true,
953
- "requires": {
954
- "gonzales-pe": "3.0.0-28",
955
- "minimatch": "0.2.12",
956
- "vow": "0.4.4",
957
- "vow-fs": "0.3.2"
958
- },
959
- "dependencies": {
960
- "minimatch": {
961
- "version": "0.2.12",
962
- "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-0.2.12.tgz",
963
- "integrity": "sha1-6oKgEqxmLH3fqhRPHBR+aUb12vs=",
964
- "dev": true,
965
- "requires": {
966
- "lru-cache": "2.7.3",
967
- "sigmund": "1.0.1"
968
- }
969
- }
970
- }
971
- },
972
- "csso": {
973
- "version": "2.0.0",
974
- "resolved": "https://registry.npmjs.org/csso/-/csso-2.0.0.tgz",
975
- "integrity": "sha1-F4tDpEYhIhwndWCG9THgL0KQDug=",
976
- "dev": true,
977
- "optional": true,
978
- "requires": {
979
- "clap": "1.2.3",
980
- "source-map": "0.5.7"
981
- }
982
- },
983
- "currently-unhandled": {
984
- "version": "0.4.1",
985
- "resolved": "https://registry.npmjs.org/currently-unhandled/-/currently-unhandled-0.4.1.tgz",
986
- "integrity": "sha1-mI3zP+qxke95mmE2nddsF635V+o=",
987
- "dev": true,
988
- "requires": {
989
- "array-find-index": "1.0.2"
990
- }
991
- },
992
- "dashdash": {
993
- "version": "1.14.1",
994
- "resolved": "https://registry.npmjs.org/dashdash/-/dashdash-1.14.1.tgz",
995
- "integrity": "sha1-hTz6D3y+L+1d4gMmuN1YEDX24vA=",
996
- "dev": true,
997
- "optional": true,
998
- "requires": {
999
- "assert-plus": "1.0.0"
1000
- }
1001
- },
1002
- "date-now": {
1003
- "version": "0.1.4",
1004
- "resolved": "https://registry.npmjs.org/date-now/-/date-now-0.1.4.tgz",
1005
- "integrity": "sha1-6vQ5/U1ISK105cx9vvIAZyueNFs=",
1006
- "dev": true
1007
- },
1008
- "date-time": {
1009
- "version": "1.1.0",
1010
- "resolved": "https://registry.npmjs.org/date-time/-/date-time-1.1.0.tgz",
1011
- "integrity": "sha1-GIdtC9pMGf5w3Tv0sDTygbEqQLY=",
1012
- "dev": true,
1013
- "requires": {
1014
- "time-zone": "0.1.0"
1015
- }
1016
- },
1017
- "dateformat": {
1018
- "version": "1.0.2-1.2.3",
1019
- "resolved": "https://registry.npmjs.org/dateformat/-/dateformat-1.0.2-1.2.3.tgz",
1020
- "integrity": "sha1-sCIMAt6YYXQztyhRz0fePfLNvuk=",
1021
- "dev": true
1022
- },
1023
- "debug": {
1024
- "version": "3.1.0",
1025
- "resolved": "https://registry.npmjs.org/debug/-/debug-3.1.0.tgz",
1026
- "integrity": "sha512-OX8XqP7/1a9cqkxYw2yXss15f26NKWBpDXQd0/uK/KPqdQhxbPa994hnzjcE2VqQpDslf55723cKPUOGSmMY3g==",
1027
- "dev": true,
1028
- "requires": {
1029
- "ms": "2.0.0"
1030
- }
1031
- },
1032
- "decamelize": {
1033
- "version": "1.2.0",
1034
- "resolved": "https://registry.npmjs.org/decamelize/-/decamelize-1.2.0.tgz",
1035
- "integrity": "sha1-9lNNFRSCabIDUue+4m9QH5oZEpA=",
1036
- "dev": true
1037
- },
1038
- "decompress": {
1039
- "version": "3.0.0",
1040
- "resolved": "https://registry.npmjs.org/decompress/-/decompress-3.0.0.tgz",
1041
- "integrity": "sha1-rx3VDQbjv8QyRh033hGzjA2ZG+0=",
1042
- "dev": true,
1043
- "requires": {
1044
- "buffer-to-vinyl": "1.1.0",
1045
- "concat-stream": "1.6.2",
1046
- "decompress-tar": "3.1.0",
1047
- "decompress-tarbz2": "3.1.0",
1048
- "decompress-targz": "3.1.0",
1049
- "decompress-unzip": "3.4.0",
1050
- "stream-combiner2": "1.1.1",
1051
- "vinyl-assign": "1.2.1",
1052
- "vinyl-fs": "2.4.4"
1053
- }
1054
- },
1055
- "decompress-response": {
1056
- "version": "3.3.0",
1057
- "resolved": "https://registry.npmjs.org/decompress-response/-/decompress-response-3.3.0.tgz",
1058
- "integrity": "sha1-gKTdMjdIOEv6JICDYirt7Jgq3/M=",
1059
- "dev": true,
1060
- "optional": true,
1061
- "requires": {
1062
- "mimic-response": "1.0.0"
1063
- }
1064
- },
1065
- "decompress-tar": {
1066
- "version": "3.1.0",
1067
- "resolved": "https://registry.npmjs.org/decompress-tar/-/decompress-tar-3.1.0.tgz",
1068
- "integrity": "sha1-IXx4n5uURQ76rcXF5TeXj8MzxGY=",
1069
- "dev": true,
1070
- "requires": {
1071
- "is-tar": "1.0.0",
1072
- "object-assign": "2.1.1",
1073
- "strip-dirs": "1.1.1",
1074
- "tar-stream": "1.6.1",
1075
- "through2": "0.6.5",
1076
- "vinyl": "0.4.6"
1077
- },
1078
- "dependencies": {
1079
- "clone": {
1080
- "version": "0.2.0",
1081
- "resolved": "https://registry.npmjs.org/clone/-/clone-0.2.0.tgz",
1082
- "integrity": "sha1-xhJqkK1Pctv1rNskPMN3JP6T/B8=",
1083
- "dev": true
1084
- },
1085
- "object-assign": {
1086
- "version": "2.1.1",
1087
- "resolved": "https://registry.npmjs.org/object-assign/-/object-assign-2.1.1.tgz",
1088
- "integrity": "sha1-Q8NuXVaf+OSBbE76i+AtJpZ8GKo=",
1089
- "dev": true
1090
- },
1091
- "vinyl": {
1092
- "version": "0.4.6",
1093
- "resolved": "https://registry.npmjs.org/vinyl/-/vinyl-0.4.6.tgz",
1094
- "integrity": "sha1-LzVsh6VQolVGHza76ypbqL94SEc=",
1095
- "dev": true,
1096
- "requires": {
1097
- "clone": "0.2.0",
1098
- "clone-stats": "0.0.1"
1099
- }
1100
- }
1101
- }
1102
- },
1103
- "decompress-tarbz2": {
1104
- "version": "3.1.0",
1105
- "resolved": "https://registry.npmjs.org/decompress-tarbz2/-/decompress-tarbz2-3.1.0.tgz",
1106
- "integrity": "sha1-iyOTVoE1X58YnYclag+L3ZbZZm0=",
1107
- "dev": true,
1108
- "requires": {
1109
- "is-bzip2": "1.0.0",
1110
- "object-assign": "2.1.1",
1111
- "seek-bzip": "1.0.5",
1112
- "strip-dirs": "1.1.1",
1113
- "tar-stream": "1.6.1",
1114
- "through2": "0.6.5",
1115
- "vinyl": "0.4.6"
1116
- },
1117
- "dependencies": {
1118
- "clone": {
1119
- "version": "0.2.0",
1120
- "resolved": "https://registry.npmjs.org/clone/-/clone-0.2.0.tgz",
1121
- "integrity": "sha1-xhJqkK1Pctv1rNskPMN3JP6T/B8=",
1122
- "dev": true
1123
- },
1124
- "object-assign": {
1125
- "version": "2.1.1",
1126
- "resolved": "https://registry.npmjs.org/object-assign/-/object-assign-2.1.1.tgz",
1127
- "integrity": "sha1-Q8NuXVaf+OSBbE76i+AtJpZ8GKo=",
1128
- "dev": true
1129
- },
1130
- "vinyl": {
1131
- "version": "0.4.6",
1132
- "resolved": "https://registry.npmjs.org/vinyl/-/vinyl-0.4.6.tgz",
1133
- "integrity": "sha1-LzVsh6VQolVGHza76ypbqL94SEc=",
1134
- "dev": true,
1135
- "requires": {
1136
- "clone": "0.2.0",
1137
- "clone-stats": "0.0.1"
1138
- }
1139
- }
1140
- }
1141
- },
1142
- "decompress-targz": {
1143
- "version": "3.1.0",
1144
- "resolved": "https://registry.npmjs.org/decompress-targz/-/decompress-targz-3.1.0.tgz",
1145
- "integrity": "sha1-ssE9+YFmJomRtxXWRH9kLpaW9aA=",
1146
- "dev": true,
1147
- "requires": {
1148
- "is-gzip": "1.0.0",
1149
- "object-assign": "2.1.1",
1150
- "strip-dirs": "1.1.1",
1151
- "tar-stream": "1.6.1",
1152
- "through2": "0.6.5",
1153
- "vinyl": "0.4.6"
1154
- },
1155
- "dependencies": {
1156
- "clone": {
1157
- "version": "0.2.0",
1158
- "resolved": "https://registry.npmjs.org/clone/-/clone-0.2.0.tgz",
1159
- "integrity": "sha1-xhJqkK1Pctv1rNskPMN3JP6T/B8=",
1160
- "dev": true
1161
- },
1162
- "object-assign": {
1163
- "version": "2.1.1",
1164
- "resolved": "https://registry.npmjs.org/object-assign/-/object-assign-2.1.1.tgz",
1165
- "integrity": "sha1-Q8NuXVaf+OSBbE76i+AtJpZ8GKo=",
1166
- "dev": true
1167
- },
1168
- "vinyl": {
1169
- "version": "0.4.6",
1170
- "resolved": "https://registry.npmjs.org/vinyl/-/vinyl-0.4.6.tgz",
1171
- "integrity": "sha1-LzVsh6VQolVGHza76ypbqL94SEc=",
1172
- "dev": true,
1173
- "requires": {
1174
- "clone": "0.2.0",
1175
- "clone-stats": "0.0.1"
1176
- }
1177
- }
1178
- }
1179
- },
1180
- "decompress-unzip": {
1181
- "version": "3.4.0",
1182
- "resolved": "https://registry.npmjs.org/decompress-unzip/-/decompress-unzip-3.4.0.tgz",
1183
- "integrity": "sha1-YUdbQVIGa74/7hL51inRX+ZHjus=",
1184
- "dev": true,
1185
- "requires": {
1186
- "is-zip": "1.0.0",
1187
- "read-all-stream": "3.1.0",
1188
- "stat-mode": "0.2.2",
1189
- "strip-dirs": "1.1.1",
1190
- "through2": "2.0.3",
1191
- "vinyl": "1.2.0",
1192
- "yauzl": "2.9.1"
1193
- },
1194
- "dependencies": {
1195
- "through2": {
1196
- "version": "2.0.3",
1197
- "resolved": "https://registry.npmjs.org/through2/-/through2-2.0.3.tgz",
1198
- "integrity": "sha1-AARWmzfHx0ujnEPzzteNGtlBQL4=",
1199
- "dev": true,
1200
- "requires": {
1201
- "readable-stream": "2.3.6",
1202
- "xtend": "4.0.1"
1203
- }
1204
- }
1205
- }
1206
- },
1207
- "deep-extend": {
1208
- "version": "0.6.0",
1209
- "resolved": "https://registry.npmjs.org/deep-extend/-/deep-extend-0.6.0.tgz",
1210
- "integrity": "sha512-LOHxIOaPYdHlJRtCQfDIVZtfw/ufM8+rVj649RIHzcm/vGwQRXFt6OPqIFWsm2XEMrNIEtWR64sY1LEKD2vAOA==",
1211
- "dev": true
1212
- },
1213
- "delayed-stream": {
1214
- "version": "1.0.0",
1215
- "resolved": "https://registry.npmjs.org/delayed-stream/-/delayed-stream-1.0.0.tgz",
1216
- "integrity": "sha1-3zrhmayt+31ECqrgsp4icrJOxhk=",
1217
- "dev": true
1218
- },
1219
- "delegates": {
1220
- "version": "1.0.0",
1221
- "resolved": "https://registry.npmjs.org/delegates/-/delegates-1.0.0.tgz",
1222
- "integrity": "sha1-hMbhWbgZBP3KWaDvRM2HDTElD5o=",
1223
- "dev": true
1224
- },
1225
- "detect-libc": {
1226
- "version": "0.2.0",
1227
- "resolved": "https://registry.npmjs.org/detect-libc/-/detect-libc-0.2.0.tgz",
1228
- "integrity": "sha1-R/31ZzSKF+wl/L8LnkRjSKdvn7U=",
1229
- "dev": true,
1230
- "optional": true
1231
- },
1232
- "diff": {
1233
- "version": "2.2.3",
1234
- "resolved": "https://registry.npmjs.org/diff/-/diff-2.2.3.tgz",
1235
- "integrity": "sha1-YOr9DSjukG5Oj/ClLBIpUhAzv5k=",
1236
- "dev": true
1237
- },
1238
- "dom-serializer": {
1239
- "version": "0.1.0",
1240
- "resolved": "https://registry.npmjs.org/dom-serializer/-/dom-serializer-0.1.0.tgz",
1241
- "integrity": "sha1-BzxpdUbOB4DOI75KKOKT5AvDDII=",
1242
- "dev": true,
1243
- "requires": {
1244
- "domelementtype": "1.1.3",
1245
- "entities": "1.1.1"
1246
- },
1247
- "dependencies": {
1248
- "domelementtype": {
1249
- "version": "1.1.3",
1250
- "resolved": "https://registry.npmjs.org/domelementtype/-/domelementtype-1.1.3.tgz",
1251
- "integrity": "sha1-vSh3PiZCiBrsUVRJJCmcXNgiGFs=",
1252
- "dev": true
1253
- },
1254
- "entities": {
1255
- "version": "1.1.1",
1256
- "resolved": "https://registry.npmjs.org/entities/-/entities-1.1.1.tgz",
1257
- "integrity": "sha1-blwtClYhtdra7O+AuQ7ftc13cvA=",
1258
- "dev": true
1259
- }
1260
- }
1261
- },
1262
- "domelementtype": {
1263
- "version": "1.3.0",
1264
- "resolved": "https://registry.npmjs.org/domelementtype/-/domelementtype-1.3.0.tgz",
1265
- "integrity": "sha1-sXrtguirWeUt2cGbF1bg/BhyBMI=",
1266
- "dev": true
1267
- },
1268
- "domhandler": {
1269
- "version": "2.3.0",
1270
- "resolved": "https://registry.npmjs.org/domhandler/-/domhandler-2.3.0.tgz",
1271
- "integrity": "sha1-LeWaCCLVAn+r/28DLCsloqir5zg=",
1272
- "dev": true,
1273
- "requires": {
1274
- "domelementtype": "1.3.0"
1275
- }
1276
- },
1277
- "domutils": {
1278
- "version": "1.5.1",
1279
- "resolved": "https://registry.npmjs.org/domutils/-/domutils-1.5.1.tgz",
1280
- "integrity": "sha1-3NhIiib1Y9YQeeSMn3t+Mjc2gs8=",
1281
- "dev": true,
1282
- "requires": {
1283
- "dom-serializer": "0.1.0",
1284
- "domelementtype": "1.3.0"
1285
- }
1286
- },
1287
- "download": {
1288
- "version": "4.4.3",
1289
- "resolved": "https://registry.npmjs.org/download/-/download-4.4.3.tgz",
1290
- "integrity": "sha1-qlX9rTktldS2jowr4D4MKqIbqaw=",
1291
- "dev": true,
1292
- "requires": {
1293
- "caw": "1.2.0",
1294
- "concat-stream": "1.6.2",
1295
- "each-async": "1.1.1",
1296
- "filenamify": "1.2.1",
1297
- "got": "5.7.1",
1298
- "gulp-decompress": "1.2.0",
1299
- "gulp-rename": "1.2.3",
1300
- "is-url": "1.2.4",
1301
- "object-assign": "4.1.1",
1302
- "read-all-stream": "3.1.0",
1303
- "readable-stream": "2.3.6",
1304
- "stream-combiner2": "1.1.1",
1305
- "vinyl": "1.2.0",
1306
- "vinyl-fs": "2.4.4",
1307
- "ware": "1.3.0"
1308
- }
1309
- },
1310
- "duplexer2": {
1311
- "version": "0.1.4",
1312
- "resolved": "https://registry.npmjs.org/duplexer2/-/duplexer2-0.1.4.tgz",
1313
- "integrity": "sha1-ixLauHjA1p4+eJEFFmKjL8a93ME=",
1314
- "dev": true,
1315
- "requires": {
1316
- "readable-stream": "2.3.6"
1317
- }
1318
- },
1319
- "duplexify": {
1320
- "version": "3.6.0",
1321
- "resolved": "https://registry.npmjs.org/duplexify/-/duplexify-3.6.0.tgz",
1322
- "integrity": "sha512-fO3Di4tBKJpYTFHAxTU00BcfWMY9w24r/x21a6rZRbsD/ToUgGxsMbiGRmB7uVAXeGKXD9MwiLZa5E97EVgIRQ==",
1323
- "dev": true,
1324
- "requires": {
1325
- "end-of-stream": "1.4.1",
1326
- "inherits": "2.0.3",
1327
- "readable-stream": "2.3.6",
1328
- "stream-shift": "1.0.0"
1329
- }
1330
- },
1331
- "each-async": {
1332
- "version": "1.1.1",
1333
- "resolved": "https://registry.npmjs.org/each-async/-/each-async-1.1.1.tgz",
1334
- "integrity": "sha1-3uUim98KtrogEqOV4bhpq/iBNHM=",
1335
- "dev": true,
1336
- "requires": {
1337
- "onetime": "1.1.0",
1338
- "set-immediate-shim": "1.0.1"
1339
- }
1340
- },
1341
- "eachr": {
1342
- "version": "3.2.0",
1343
- "resolved": "https://registry.npmjs.org/eachr/-/eachr-3.2.0.tgz",
1344
- "integrity": "sha1-LDXkPqCGUW95l8+At6pk1VpKRIQ=",
1345
- "dev": true,
1346
- "requires": {
1347
- "editions": "1.3.4",
1348
- "typechecker": "4.5.0"
1349
- }
1350
- },
1351
- "ecc-jsbn": {
1352
- "version": "0.1.1",
1353
- "resolved": "https://registry.npmjs.org/ecc-jsbn/-/ecc-jsbn-0.1.1.tgz",
1354
- "integrity": "sha1-D8c6ntXw1Tw4GTOYUj735UN3dQU=",
1355
- "dev": true,
1356
- "optional": true,
1357
- "requires": {
1358
- "jsbn": "0.1.1"
1359
- }
1360
- },
1361
- "editions": {
1362
- "version": "1.3.4",
1363
- "resolved": "https://registry.npmjs.org/editions/-/editions-1.3.4.tgz",
1364
- "integrity": "sha512-gzao+mxnYDzIysXKMQi/+M1mjy/rjestjg6OPoYTtI+3Izp23oiGZitsl9lPDPiTGXbcSIk1iJWhliSaglxnUg==",
1365
- "dev": true
1366
- },
1367
- "electron-to-chromium": {
1368
- "version": "1.3.48",
1369
- "resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.3.48.tgz",
1370
- "integrity": "sha1-07DYWTgUBE4JLs4hCPw6ya6kuQA=",
1371
- "dev": true
1372
- },
1373
- "encoding": {
1374
- "version": "0.1.12",
1375
- "resolved": "https://registry.npmjs.org/encoding/-/encoding-0.1.12.tgz",
1376
- "integrity": "sha1-U4tm8+5izRq1HsMjgp0flIDHS+s=",
1377
- "dev": true,
1378
- "requires": {
1379
- "iconv-lite": "0.4.23"
1380
- },
1381
- "dependencies": {
1382
- "iconv-lite": {
1383
- "version": "0.4.23",
1384
- "resolved": "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.4.23.tgz",
1385
- "integrity": "sha512-neyTUVFtahjf0mB3dZT77u+8O0QB89jFdnBkd5P1JgYPbPaia3gXXOVL2fq8VyU2gMMD7SaN7QukTB/pmXYvDA==",
1386
- "dev": true,
1387
- "requires": {
1388
- "safer-buffer": "2.1.2"
1389
- }
1390
- }
1391
- }
1392
- },
1393
- "end-of-stream": {
1394
- "version": "1.4.1",
1395
- "resolved": "https://registry.npmjs.org/end-of-stream/-/end-of-stream-1.4.1.tgz",
1396
- "integrity": "sha512-1MkrZNvWTKCaigbn+W15elq2BB/L22nqrSY5DKlo3X6+vclJm8Bb5djXJBmEX6fS3+zCh/F4VBK5Z2KxJt4s2Q==",
1397
- "dev": true,
1398
- "requires": {
1399
- "once": "1.4.0"
1400
- }
1401
- },
1402
- "entities": {
1403
- "version": "1.0.0",
1404
- "resolved": "https://registry.npmjs.org/entities/-/entities-1.0.0.tgz",
1405
- "integrity": "sha1-sph6o4ITR/zeZCsk/fyeT7cSvyY=",
1406
- "dev": true
1407
- },
1408
- "error": {
1409
- "version": "7.0.2",
1410
- "resolved": "https://registry.npmjs.org/error/-/error-7.0.2.tgz",
1411
- "integrity": "sha1-pfdf/02ZJhJt2sDqXcOOaJFTywI=",
1412
- "dev": true,
1413
- "requires": {
1414
- "string-template": "0.2.1",
1415
- "xtend": "4.0.1"
1416
- }
1417
- },
1418
- "error-ex": {
1419
- "version": "1.3.1",
1420
- "resolved": "https://registry.npmjs.org/error-ex/-/error-ex-1.3.1.tgz",
1421
- "integrity": "sha1-+FWobOYa3E6GIcPNoh56dhLDqNw=",
1422
- "dev": true,
1423
- "requires": {
1424
- "is-arrayish": "0.2.1"
1425
- }
1426
- },
1427
- "escape-string-regexp": {
1428
- "version": "1.0.5",
1429
- "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz",
1430
- "integrity": "sha1-G2HAViGQqN/2rjuyzwIAyhMLhtQ=",
1431
- "dev": true
1432
- },
1433
- "esprima": {
1434
- "version": "1.0.4",
1435
- "resolved": "https://registry.npmjs.org/esprima/-/esprima-1.0.4.tgz",
1436
- "integrity": "sha1-n1V+CPw7TSbs6d00+Pv0drYlha0=",
1437
- "dev": true
1438
- },
1439
- "eventemitter2": {
1440
- "version": "0.4.14",
1441
- "resolved": "https://registry.npmjs.org/eventemitter2/-/eventemitter2-0.4.14.tgz",
1442
- "integrity": "sha1-j2G3XN4BKy6esoTUVFWDtWQ7Yas=",
1443
- "dev": true
1444
- },
1445
- "exec-buffer": {
1446
- "version": "2.0.1",
1447
- "resolved": "https://registry.npmjs.org/exec-buffer/-/exec-buffer-2.0.1.tgz",
1448
- "integrity": "sha1-ACijG+CxRgth0HX5avRYO54zXqA=",
1449
- "dev": true,
1450
- "optional": true,
1451
- "requires": {
1452
- "rimraf": "2.2.8",
1453
- "tempfile": "1.1.1"
1454
- }
1455
- },
1456
- "exec-series": {
1457
- "version": "1.0.3",
1458
- "resolved": "https://registry.npmjs.org/exec-series/-/exec-series-1.0.3.tgz",
1459
- "integrity": "sha1-bSV6m+rEgqhyx3g7yGFYOfx3FDo=",
1460
- "dev": true,
1461
- "optional": true,
1462
- "requires": {
1463
- "async-each-series": "1.1.0",
1464
- "object-assign": "4.1.1"
1465
- }
1466
- },
1467
- "executable": {
1468
- "version": "1.1.0",
1469
- "resolved": "https://registry.npmjs.org/executable/-/executable-1.1.0.tgz",
1470
- "integrity": "sha1-h3mA6REvM5EGbaNyZd562ENKtNk=",
1471
- "dev": true,
1472
- "optional": true,
1473
- "requires": {
1474
- "meow": "3.7.0"
1475
- }
1476
- },
1477
- "exit": {
1478
- "version": "0.1.2",
1479
- "resolved": "https://registry.npmjs.org/exit/-/exit-0.1.2.tgz",
1480
- "integrity": "sha1-BjJjj42HfMghB9MKD/8aF8uhzQw=",
1481
- "dev": true
1482
- },
1483
- "expand-brackets": {
1484
- "version": "0.1.5",
1485
- "resolved": "https://registry.npmjs.org/expand-brackets/-/expand-brackets-0.1.5.tgz",
1486
- "integrity": "sha1-3wcoTjQqgHzXM6xa9yQR5YHRF3s=",
1487
- "dev": true,
1488
- "requires": {
1489
- "is-posix-bracket": "0.1.1"
1490
- }
1491
- },
1492
- "expand-range": {
1493
- "version": "1.8.2",
1494
- "resolved": "https://registry.npmjs.org/expand-range/-/expand-range-1.8.2.tgz",
1495
- "integrity": "sha1-opnv/TNf4nIeuujiV+x5ZE/IUzc=",
1496
- "dev": true,
1497
- "requires": {
1498
- "fill-range": "2.2.4"
1499
- }
1500
- },
1501
- "expand-template": {
1502
- "version": "1.1.1",
1503
- "resolved": "https://registry.npmjs.org/expand-template/-/expand-template-1.1.1.tgz",
1504
- "integrity": "sha512-cebqLtV8KOZfw0UI8TEFWxtczxxC1jvyUvx6H4fyp1K1FN7A4Q+uggVUlOsI1K8AGU0rwOGqP8nCapdrw8CYQg==",
1505
- "dev": true,
1506
- "optional": true
1507
- },
1508
- "extend": {
1509
- "version": "3.0.1",
1510
- "resolved": "https://registry.npmjs.org/extend/-/extend-3.0.1.tgz",
1511
- "integrity": "sha1-p1Xqe8Gt/MWjHOfnYtuq3F5jZEQ=",
1512
- "dev": true
1513
- },
1514
- "extend-shallow": {
1515
- "version": "2.0.1",
1516
- "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz",
1517
- "integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=",
1518
- "dev": true,
1519
- "requires": {
1520
- "is-extendable": "0.1.1"
1521
- }
1522
- },
1523
- "extglob": {
1524
- "version": "0.3.2",
1525
- "resolved": "https://registry.npmjs.org/extglob/-/extglob-0.3.2.tgz",
1526
- "integrity": "sha1-Lhj/PS9JqydlzskCPwEdqo2DSaE=",
1527
- "dev": true,
1528
- "requires": {
1529
- "is-extglob": "1.0.0"
1530
- },
1531
- "dependencies": {
1532
- "is-extglob": {
1533
- "version": "1.0.0",
1534
- "resolved": "https://registry.npmjs.org/is-extglob/-/is-extglob-1.0.0.tgz",
1535
- "integrity": "sha1-rEaBd8SUNAWgkvyPKXYMb/xiBsA=",
1536
- "dev": true
1537
- }
1538
- }
1539
- },
1540
- "extract-opts": {
1541
- "version": "3.3.1",
1542
- "resolved": "https://registry.npmjs.org/extract-opts/-/extract-opts-3.3.1.tgz",
1543
- "integrity": "sha1-WrvtyYwNUgLjJ4cn+Rktfghsa+E=",
1544
- "dev": true,
1545
- "requires": {
1546
- "eachr": "3.2.0",
1547
- "editions": "1.3.4",
1548
- "typechecker": "4.5.0"
1549
- }
1550
- },
1551
- "extsprintf": {
1552
- "version": "1.3.0",
1553
- "resolved": "https://registry.npmjs.org/extsprintf/-/extsprintf-1.3.0.tgz",
1554
- "integrity": "sha1-lpGEQOMEGnpBT4xS48V06zw+HgU=",
1555
- "dev": true
1556
- },
1557
- "fancy-log": {
1558
- "version": "1.3.2",
1559
- "resolved": "https://registry.npmjs.org/fancy-log/-/fancy-log-1.3.2.tgz",
1560
- "integrity": "sha1-9BEl49hPLn2JpD0G2VjI94vha+E=",
1561
- "dev": true,
1562
- "requires": {
1563
- "ansi-gray": "0.1.1",
1564
- "color-support": "1.1.3",
1565
- "time-stamp": "1.1.0"
1566
- }
1567
- },
1568
- "fast-deep-equal": {
1569
- "version": "1.1.0",
1570
- "resolved": "https://registry.npmjs.org/fast-deep-equal/-/fast-deep-equal-1.1.0.tgz",
1571
- "integrity": "sha1-wFNHeBfIa1HaqFPIHgWbcz0CNhQ=",
1572
- "dev": true,
1573
- "optional": true
1574
- },
1575
- "fast-json-stable-stringify": {
1576
- "version": "2.0.0",
1577
- "resolved": "https://registry.npmjs.org/fast-json-stable-stringify/-/fast-json-stable-stringify-2.0.0.tgz",
1578
- "integrity": "sha1-1RQsDK7msRifh9OnYREGT4bIu/I=",
1579
- "dev": true,
1580
- "optional": true
1581
- },
1582
- "faye-websocket": {
1583
- "version": "0.10.0",
1584
- "resolved": "https://registry.npmjs.org/faye-websocket/-/faye-websocket-0.10.0.tgz",
1585
- "integrity": "sha1-TkkvjQTftviQA1B/btvy1QHnxvQ=",
1586
- "dev": true,
1587
- "requires": {
1588
- "websocket-driver": "0.7.0"
1589
- }
1590
- },
1591
- "fd-slicer": {
1592
- "version": "1.0.1",
1593
- "resolved": "https://registry.npmjs.org/fd-slicer/-/fd-slicer-1.0.1.tgz",
1594
- "integrity": "sha1-i1vL2ewyfFBBv5qwI/1nUPEXfmU=",
1595
- "dev": true,
1596
- "requires": {
1597
- "pend": "1.2.0"
1598
- }
1599
- },
1600
- "figures": {
1601
- "version": "1.7.0",
1602
- "resolved": "https://registry.npmjs.org/figures/-/figures-1.7.0.tgz",
1603
- "integrity": "sha1-y+Hjr/zxzUS4DK3+0o3Hk6lwHS4=",
1604
- "dev": true,
1605
- "requires": {
1606
- "escape-string-regexp": "1.0.5",
1607
- "object-assign": "4.1.1"
1608
- }
1609
- },
1610
- "file-sync-cmp": {
1611
- "version": "0.1.1",
1612
- "resolved": "https://registry.npmjs.org/file-sync-cmp/-/file-sync-cmp-0.1.1.tgz",
1613
- "integrity": "sha1-peeo/7+kk7Q7kju9TKiaU7Y7YSs=",
1614
- "dev": true
1615
- },
1616
- "file-type": {
1617
- "version": "3.9.0",
1618
- "resolved": "https://registry.npmjs.org/file-type/-/file-type-3.9.0.tgz",
1619
- "integrity": "sha1-JXoHg4TR24CHvESdEH1SpSZyuek=",
1620
- "dev": true
1621
- },
1622
- "filename-regex": {
1623
- "version": "2.0.1",
1624
- "resolved": "https://registry.npmjs.org/filename-regex/-/filename-regex-2.0.1.tgz",
1625
- "integrity": "sha1-wcS5vuPglyXdsQa3XB4wH+LxiyY=",
1626
- "dev": true
1627
- },
1628
- "filename-reserved-regex": {
1629
- "version": "1.0.0",
1630
- "resolved": "https://registry.npmjs.org/filename-reserved-regex/-/filename-reserved-regex-1.0.0.tgz",
1631
- "integrity": "sha1-5hz4BfDeHJhFZ9A4bcXfUO5a9+Q=",
1632
- "dev": true
1633
- },
1634
- "filenamify": {
1635
- "version": "1.2.1",
1636
- "resolved": "https://registry.npmjs.org/filenamify/-/filenamify-1.2.1.tgz",
1637
- "integrity": "sha1-qfL/0RxQO+0wABUCknI3jx8TZaU=",
1638
- "dev": true,
1639
- "requires": {
1640
- "filename-reserved-regex": "1.0.0",
1641
- "strip-outer": "1.0.1",
1642
- "trim-repeated": "1.0.0"
1643
- }
1644
- },
1645
- "fill-range": {
1646
- "version": "2.2.4",
1647
- "resolved": "https://registry.npmjs.org/fill-range/-/fill-range-2.2.4.tgz",
1648
- "integrity": "sha512-cnrcCbj01+j2gTG921VZPnHbjmdAf8oQV/iGeV2kZxGSyfYjjTyY79ErsK1WJWMpw6DaApEX72binqJE+/d+5Q==",
1649
- "dev": true,
1650
- "requires": {
1651
- "is-number": "2.1.0",
1652
- "isobject": "2.1.0",
1653
- "randomatic": "3.0.0",
1654
- "repeat-element": "1.1.2",
1655
- "repeat-string": "1.6.1"
1656
- }
1657
- },
1658
- "find-up": {
1659
- "version": "1.1.2",
1660
- "resolved": "https://registry.npmjs.org/find-up/-/find-up-1.1.2.tgz",
1661
- "integrity": "sha1-ay6YIrGizgpgq2TWEOzK1TyyTQ8=",
1662
- "dev": true,
1663
- "requires": {
1664
- "path-exists": "2.1.0",
1665
- "pinkie-promise": "2.0.1"
1666
- }
1667
- },
1668
- "find-versions": {
1669
- "version": "1.2.1",
1670
- "resolved": "https://registry.npmjs.org/find-versions/-/find-versions-1.2.1.tgz",
1671
- "integrity": "sha1-y96fEuOFdaCvG+G5osXV/Y8Ya2I=",
1672
- "dev": true,
1673
- "optional": true,
1674
- "requires": {
1675
- "array-uniq": "1.0.3",
1676
- "get-stdin": "4.0.1",
1677
- "meow": "3.7.0",
1678
- "semver-regex": "1.0.0"
1679
- }
1680
- },
1681
- "findup-sync": {
1682
- "version": "0.1.3",
1683
- "resolved": "https://registry.npmjs.org/findup-sync/-/findup-sync-0.1.3.tgz",
1684
- "integrity": "sha1-fz56l7gjksZTvwZYm9hRkOk8NoM=",
1685
- "dev": true,
1686
- "requires": {
1687
- "glob": "3.2.11",
1688
- "lodash": "2.4.2"
1689
- },
1690
- "dependencies": {
1691
- "glob": {
1692
- "version": "3.2.11",
1693
- "resolved": "https://registry.npmjs.org/glob/-/glob-3.2.11.tgz",
1694
- "integrity": "sha1-Spc/Y1uRkPcV0QmH1cAP0oFevj0=",
1695
- "dev": true,
1696
- "requires": {
1697
- "inherits": "2.0.3",
1698
- "minimatch": "0.3.0"
1699
- }
1700
- },
1701
- "lodash": {
1702
- "version": "2.4.2",
1703
- "resolved": "https://registry.npmjs.org/lodash/-/lodash-2.4.2.tgz",
1704
- "integrity": "sha1-+t2DS5aDBz2hebPq5tnA0VBT9z4=",
1705
- "dev": true
1706
- },
1707
- "minimatch": {
1708
- "version": "0.3.0",
1709
- "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-0.3.0.tgz",
1710
- "integrity": "sha1-J12O2qxPG7MyZHIInnlJyDlGmd0=",
1711
- "dev": true,
1712
- "requires": {
1713
- "lru-cache": "2.7.3",
1714
- "sigmund": "1.0.1"
1715
- }
1716
- }
1717
- }
1718
- },
1719
- "first-chunk-stream": {
1720
- "version": "1.0.0",
1721
- "resolved": "https://registry.npmjs.org/first-chunk-stream/-/first-chunk-stream-1.0.0.tgz",
1722
- "integrity": "sha1-Wb+1DNkF9g18OUzT2ayqtOatk04=",
1723
- "dev": true
1724
- },
1725
- "for-in": {
1726
- "version": "1.0.2",
1727
- "resolved": "https://registry.npmjs.org/for-in/-/for-in-1.0.2.tgz",
1728
- "integrity": "sha1-gQaNKVqBQuwKxybG4iAMMPttXoA=",
1729
- "dev": true
1730
- },
1731
- "for-own": {
1732
- "version": "0.1.5",
1733
- "resolved": "https://registry.npmjs.org/for-own/-/for-own-0.1.5.tgz",
1734
- "integrity": "sha1-UmXGgaTylNq78XyVCbZ2OqhFEM4=",
1735
- "dev": true,
1736
- "requires": {
1737
- "for-in": "1.0.2"
1738
- }
1739
- },
1740
- "forever-agent": {
1741
- "version": "0.6.1",
1742
- "resolved": "https://registry.npmjs.org/forever-agent/-/forever-agent-0.6.1.tgz",
1743
- "integrity": "sha1-+8cfDEGt6zf5bFd60e1C2P2sypE=",
1744
- "dev": true,
1745
- "optional": true
1746
- },
1747
- "form-data": {
1748
- "version": "2.3.2",
1749
- "resolved": "https://registry.npmjs.org/form-data/-/form-data-2.3.2.tgz",
1750
- "integrity": "sha1-SXBJi+YEwgwAXU9cI67NIda0kJk=",
1751
- "dev": true,
1752
- "optional": true,
1753
- "requires": {
1754
- "asynckit": "0.4.0",
1755
- "combined-stream": "1.0.6",
1756
- "mime-types": "2.1.18"
1757
- }
1758
- },
1759
- "fs-constants": {
1760
- "version": "1.0.0",
1761
- "resolved": "https://registry.npmjs.org/fs-constants/-/fs-constants-1.0.0.tgz",
1762
- "integrity": "sha512-y6OAwoSIf7FyjMIv94u+b5rdheZEjzR63GTyZJm5qh4Bi+2YgwLCcI/fPFZkL5PSixOt6ZNKm+w+Hfp/Bciwow==",
1763
- "dev": true
1764
- },
1765
- "fs.realpath": {
1766
- "version": "1.0.0",
1767
- "resolved": "https://registry.npmjs.org/fs.realpath/-/fs.realpath-1.0.0.tgz",
1768
- "integrity": "sha1-FQStJSMVjKpA20onh8sBQRmU6k8=",
1769
- "dev": true
1770
- },
1771
- "fstream": {
1772
- "version": "1.0.11",
1773
- "resolved": "https://registry.npmjs.org/fstream/-/fstream-1.0.11.tgz",
1774
- "integrity": "sha1-XB+x8RdHcRTwYyoOtLcbPLD9MXE=",
1775
- "dev": true,
1776
- "requires": {
1777
- "graceful-fs": "4.1.11",
1778
- "inherits": "2.0.3",
1779
- "mkdirp": "0.5.1",
1780
- "rimraf": "2.2.8"
1781
- },
1782
- "dependencies": {
1783
- "graceful-fs": {
1784
- "version": "4.1.11",
1785
- "resolved": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.1.11.tgz",
1786
- "integrity": "sha1-Dovf5NHduIVNZOBOp8AOKgJuVlg=",
1787
- "dev": true
1788
- }
1789
- }
1790
- },
1791
- "gauge": {
1792
- "version": "2.7.4",
1793
- "resolved": "https://registry.npmjs.org/gauge/-/gauge-2.7.4.tgz",
1794
- "integrity": "sha1-LANAXHU4w51+s3sxcCLjJfsBi/c=",
1795
- "dev": true,
1796
- "requires": {
1797
- "aproba": "1.2.0",
1798
- "console-control-strings": "1.1.0",
1799
- "has-unicode": "2.0.1",
1800
- "object-assign": "4.1.1",
1801
- "signal-exit": "3.0.2",
1802
- "string-width": "1.0.2",
1803
- "strip-ansi": "3.0.1",
1804
- "wide-align": "1.1.3"
1805
- }
1806
- },
1807
- "gaze": {
1808
- "version": "1.1.3",
1809
- "resolved": "https://registry.npmjs.org/gaze/-/gaze-1.1.3.tgz",
1810
- "integrity": "sha512-BRdNm8hbWzFzWHERTrejLqwHDfS4GibPoq5wjTPIoJHoBtKGPg3xAFfxmM+9ztbXelxcf2hwQcaz1PtmFeue8g==",
1811
- "dev": true,
1812
- "requires": {
1813
- "globule": "1.2.0"
1814
- }
1815
- },
1816
- "get-proxy": {
1817
- "version": "1.1.0",
1818
- "resolved": "https://registry.npmjs.org/get-proxy/-/get-proxy-1.1.0.tgz",
1819
- "integrity": "sha1-iUhUSRvFkbDxR9euVw9cZ4tyVus=",
1820
- "dev": true,
1821
- "requires": {
1822
- "rc": "1.2.8"
1823
- }
1824
- },
1825
- "get-stdin": {
1826
- "version": "4.0.1",
1827
- "resolved": "https://registry.npmjs.org/get-stdin/-/get-stdin-4.0.1.tgz",
1828
- "integrity": "sha1-uWjGsKBDhDJJAui/Gl3zJXmkUP4=",
1829
- "dev": true
1830
- },
1831
- "getobject": {
1832
- "version": "0.1.0",
1833
- "resolved": "https://registry.npmjs.org/getobject/-/getobject-0.1.0.tgz",
1834
- "integrity": "sha1-BHpEl4n6Fg0Bj1SG7ZEyC27HiFw=",
1835
- "dev": true
1836
- },
1837
- "getpass": {
1838
- "version": "0.1.7",
1839
- "resolved": "https://registry.npmjs.org/getpass/-/getpass-0.1.7.tgz",
1840
- "integrity": "sha1-Xv+OPmhNVprkyysSgmBOi6YhSfo=",
1841
- "dev": true,
1842
- "optional": true,
1843
- "requires": {
1844
- "assert-plus": "1.0.0"
1845
- }
1846
- },
1847
- "gettext-parser": {
1848
- "version": "1.1.2",
1849
- "resolved": "https://registry.npmjs.org/gettext-parser/-/gettext-parser-1.1.2.tgz",
1850
- "integrity": "sha1-zw8MnJCJrtsO5RSZKRg+ncQ1hKc=",
1851
- "dev": true,
1852
- "requires": {
1853
- "encoding": "0.1.12"
1854
- }
1855
- },
1856
- "gifsicle": {
1857
- "version": "3.0.4",
1858
- "resolved": "https://registry.npmjs.org/gifsicle/-/gifsicle-3.0.4.tgz",
1859
- "integrity": "sha1-9Fy17RAWW2ZdySng6TKLbIId+js=",
1860
- "dev": true,
1861
- "optional": true,
1862
- "requires": {
1863
- "bin-build": "2.2.0",
1864
- "bin-wrapper": "3.0.2",
1865
- "logalot": "2.1.0"
1866
- }
1867
- },
1868
- "github-from-package": {
1869
- "version": "0.0.0",
1870
- "resolved": "https://registry.npmjs.org/github-from-package/-/github-from-package-0.0.0.tgz",
1871
- "integrity": "sha1-l/tdlr/eiXMxPyDoKI75oWf6ZM4=",
1872
- "dev": true,
1873
- "optional": true
1874
- },
1875
- "glob": {
1876
- "version": "3.1.21",
1877
- "resolved": "https://registry.npmjs.org/glob/-/glob-3.1.21.tgz",
1878
- "integrity": "sha1-0p4KBV3qUTj00H7UDomC6DwgZs0=",
1879
- "dev": true,
1880
- "requires": {
1881
- "graceful-fs": "1.2.3",
1882
- "inherits": "1.0.2",
1883
- "minimatch": "0.2.14"
1884
- },
1885
- "dependencies": {
1886
- "inherits": {
1887
- "version": "1.0.2",
1888
- "resolved": "https://registry.npmjs.org/inherits/-/inherits-1.0.2.tgz",
1889
- "integrity": "sha1-ykMJ2t7mtUzAuNJH6NfHoJdb3Js=",
1890
- "dev": true
1891
- }
1892
- }
1893
- },
1894
- "glob-base": {
1895
- "version": "0.3.0",
1896
- "resolved": "https://registry.npmjs.org/glob-base/-/glob-base-0.3.0.tgz",
1897
- "integrity": "sha1-27Fk9iIbHAscz4Kuoyi0l98Oo8Q=",
1898
- "dev": true,
1899
- "requires": {
1900
- "glob-parent": "2.0.0",
1901
- "is-glob": "2.0.1"
1902
- },
1903
- "dependencies": {
1904
- "glob-parent": {
1905
- "version": "2.0.0",
1906
- "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-2.0.0.tgz",
1907
- "integrity": "sha1-gTg9ctsFT8zPUzbaqQLxgvbtuyg=",
1908
- "dev": true,
1909
- "requires": {
1910
- "is-glob": "2.0.1"
1911
- }
1912
- },
1913
- "is-extglob": {
1914
- "version": "1.0.0",
1915
- "resolved": "https://registry.npmjs.org/is-extglob/-/is-extglob-1.0.0.tgz",
1916
- "integrity": "sha1-rEaBd8SUNAWgkvyPKXYMb/xiBsA=",
1917
- "dev": true
1918
- },
1919
- "is-glob": {
1920
- "version": "2.0.1",
1921
- "resolved": "https://registry.npmjs.org/is-glob/-/is-glob-2.0.1.tgz",
1922
- "integrity": "sha1-0Jb5JqPe1WAPP9/ZEZjLCIjC2GM=",
1923
- "dev": true,
1924
- "requires": {
1925
- "is-extglob": "1.0.0"
1926
- }
1927
- }
1928
- }
1929
- },
1930
- "glob-parent": {
1931
- "version": "3.1.0",
1932
- "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-3.1.0.tgz",
1933
- "integrity": "sha1-nmr2KZ2NO9K9QEMIMr0RPfkGxa4=",
1934
- "dev": true,
1935
- "requires": {
1936
- "is-glob": "3.1.0",
1937
- "path-dirname": "1.0.2"
1938
- }
1939
- },
1940
- "glob-stream": {
1941
- "version": "5.3.5",
1942
- "resolved": "https://registry.npmjs.org/glob-stream/-/glob-stream-5.3.5.tgz",
1943
- "integrity": "sha1-pVZlqajM3EGRWofHAeMtTgFvrSI=",
1944
- "dev": true,
1945
- "requires": {
1946
- "extend": "3.0.1",
1947
- "glob": "5.0.15",
1948
- "glob-parent": "3.1.0",
1949
- "micromatch": "2.3.11",
1950
- "ordered-read-streams": "0.3.0",
1951
- "through2": "0.6.5",
1952
- "to-absolute-glob": "0.1.1",
1953
- "unique-stream": "2.2.1"
1954
- },
1955
- "dependencies": {
1956
- "glob": {
1957
- "version": "5.0.15",
1958
- "resolved": "https://registry.npmjs.org/glob/-/glob-5.0.15.tgz",
1959
- "integrity": "sha1-G8k2ueAvSmA/zCIuz3Yz0wuLk7E=",
1960
- "dev": true,
1961
- "requires": {
1962
- "inflight": "1.0.6",
1963
- "inherits": "2.0.3",
1964
- "minimatch": "3.0.4",
1965
- "once": "1.4.0",
1966
- "path-is-absolute": "1.0.1"
1967
- }
1968
- },
1969
- "minimatch": {
1970
- "version": "3.0.4",
1971
- "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.0.4.tgz",
1972
- "integrity": "sha512-yJHVQEhyqPLUTgt9B83PXu6W3rx4MvvHvSUvToogpwoGDOUQ+yDrR0HRot+yOCdCO7u4hX3pWft6kWBBcqh0UA==",
1973
- "dev": true,
1974
- "requires": {
1975
- "brace-expansion": "1.1.11"
1976
- }
1977
- }
1978
- }
1979
- },
1980
- "globule": {
1981
- "version": "1.2.0",
1982
- "resolved": "https://registry.npmjs.org/globule/-/globule-1.2.0.tgz",
1983
- "integrity": "sha1-HcScaCLdnoovoAuiopUAboZkvQk=",
1984
- "dev": true,
1985
- "requires": {
1986
- "glob": "7.1.2",
1987
- "lodash": "4.17.10",
1988
- "minimatch": "3.0.4"
1989
- },
1990
- "dependencies": {
1991
- "glob": {
1992
- "version": "7.1.2",
1993
- "resolved": "https://registry.npmjs.org/glob/-/glob-7.1.2.tgz",
1994
- "integrity": "sha512-MJTUg1kjuLeQCJ+ccE4Vpa6kKVXkPYJ2mOCQyUuKLcLQsdrMCpBPUi8qVE6+YuaJkozeA9NusTAw3hLr8Xe5EQ==",
1995
- "dev": true,
1996
- "requires": {
1997
- "fs.realpath": "1.0.0",
1998
- "inflight": "1.0.6",
1999
- "inherits": "2.0.3",
2000
- "minimatch": "3.0.4",
2001
- "once": "1.4.0",
2002
- "path-is-absolute": "1.0.1"
2003
- }
2004
- },
2005
- "lodash": {
2006
- "version": "4.17.10",
2007
- "resolved": "https://registry.npmjs.org/lodash/-/lodash-4.17.10.tgz",
2008
- "integrity": "sha512-UejweD1pDoXu+AD825lWwp4ZGtSwgnpZxb3JDViD7StjQz+Nb/6l093lx4OQ0foGWNRoc19mWy7BzL+UAK2iVg==",
2009
- "dev": true
2010
- },
2011
- "minimatch": {
2012
- "version": "3.0.4",
2013
- "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.0.4.tgz",
2014
- "integrity": "sha512-yJHVQEhyqPLUTgt9B83PXu6W3rx4MvvHvSUvToogpwoGDOUQ+yDrR0HRot+yOCdCO7u4hX3pWft6kWBBcqh0UA==",
2015
- "dev": true,
2016
- "requires": {
2017
- "brace-expansion": "1.1.11"
2018
- }
2019
- }
2020
- }
2021
- },
2022
- "glogg": {
2023
- "version": "1.0.1",
2024
- "resolved": "https://registry.npmjs.org/glogg/-/glogg-1.0.1.tgz",
2025
- "integrity": "sha512-ynYqXLoluBKf9XGR1gA59yEJisIL7YHEH4xr3ZziHB5/yl4qWfaK8Js9jGe6gBGCSCKVqiyO30WnRZADvemUNw==",
2026
- "dev": true,
2027
- "requires": {
2028
- "sparkles": "1.0.1"
2029
- }
2030
- },
2031
- "gonzales-pe": {
2032
- "version": "3.0.0-28",
2033
- "resolved": "https://registry.npmjs.org/gonzales-pe/-/gonzales-pe-3.0.0-28.tgz",
2034
- "integrity": "sha1-3VC0HdFbaCooxA5fD/IAeQGsYr0=",
2035
- "dev": true
2036
- },
2037
- "got": {
2038
- "version": "5.7.1",
2039
- "resolved": "https://registry.npmjs.org/got/-/got-5.7.1.tgz",
2040
- "integrity": "sha1-X4FjWmHkplifGAVp6k44FoClHzU=",
2041
- "dev": true,
2042
- "requires": {
2043
- "create-error-class": "3.0.2",
2044
- "duplexer2": "0.1.4",
2045
- "is-redirect": "1.0.0",
2046
- "is-retry-allowed": "1.1.0",
2047
- "is-stream": "1.1.0",
2048
- "lowercase-keys": "1.0.1",
2049
- "node-status-codes": "1.0.0",
2050
- "object-assign": "4.1.1",
2051
- "parse-json": "2.2.0",
2052
- "pinkie-promise": "2.0.1",
2053
- "read-all-stream": "3.1.0",
2054
- "readable-stream": "2.3.6",
2055
- "timed-out": "3.1.3",
2056
- "unzip-response": "1.0.2",
2057
- "url-parse-lax": "1.0.0"
2058
- }
2059
- },
2060
- "graceful-fs": {
2061
- "version": "1.2.3",
2062
- "resolved": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-1.2.3.tgz",
2063
- "integrity": "sha1-FaSAaldUfLLS2/J/QuiajDRRs2Q=",
2064
- "dev": true
2065
- },
2066
- "graceful-readlink": {
2067
- "version": "1.0.1",
2068
- "resolved": "https://registry.npmjs.org/graceful-readlink/-/graceful-readlink-1.0.1.tgz",
2069
- "integrity": "sha1-TK+tdrxi8C+gObL5Tpo906ORpyU=",
2070
- "dev": true
2071
- },
2072
- "grunt": {
2073
- "version": "0.4.5",
2074
- "resolved": "https://registry.npmjs.org/grunt/-/grunt-0.4.5.tgz",
2075
- "integrity": "sha1-VpN81RlDJK3/bSB2MYMqnWuk5/A=",
2076
- "dev": true,
2077
- "requires": {
2078
- "async": "0.1.22",
2079
- "coffee-script": "1.3.3",
2080
- "colors": "0.6.2",
2081
- "dateformat": "1.0.2-1.2.3",
2082
- "eventemitter2": "0.4.14",
2083
- "exit": "0.1.2",
2084
- "findup-sync": "0.1.3",
2085
- "getobject": "0.1.0",
2086
- "glob": "3.1.21",
2087
- "grunt-legacy-log": "0.1.3",
2088
- "grunt-legacy-util": "0.2.0",
2089
- "hooker": "0.2.3",
2090
- "iconv-lite": "0.2.11",
2091
- "js-yaml": "2.0.5",
2092
- "lodash": "0.9.2",
2093
- "minimatch": "0.2.14",
2094
- "nopt": "1.0.10",
2095
- "rimraf": "2.2.8",
2096
- "underscore.string": "2.2.1",
2097
- "which": "1.0.9"
2098
- }
2099
- },
2100
- "grunt-cachebuster": {
2101
- "version": "0.1.7",
2102
- "resolved": "https://registry.npmjs.org/grunt-cachebuster/-/grunt-cachebuster-0.1.7.tgz",
2103
- "integrity": "sha1-GXio34hHqO/GpsuF7onkR5lYIpk=",
2104
- "dev": true
2105
- },
2106
- "grunt-checktextdomain": {
2107
- "version": "1.0.1",
2108
- "resolved": "https://registry.npmjs.org/grunt-checktextdomain/-/grunt-checktextdomain-1.0.1.tgz",
2109
- "integrity": "sha1-slTQHh3pEwBdTbHFMD2QI7mD4Zs=",
2110
- "dev": true,
2111
- "requires": {
2112
- "chalk": "0.2.1",
2113
- "text-table": "0.2.0"
2114
- },
2115
- "dependencies": {
2116
- "ansi-styles": {
2117
- "version": "0.2.0",
2118
- "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-0.2.0.tgz",
2119
- "integrity": "sha1-NZq0sV3NZLptdHNLcsNjYKmvLBk=",
2120
- "dev": true
2121
- },
2122
- "chalk": {
2123
- "version": "0.2.1",
2124
- "resolved": "https://registry.npmjs.org/chalk/-/chalk-0.2.1.tgz",
2125
- "integrity": "sha1-dhPhV1FFshOGSD9/SFql/6jL0Qw=",
2126
- "dev": true,
2127
- "requires": {
2128
- "ansi-styles": "0.2.0",
2129
- "has-color": "0.1.7"
2130
- }
2131
- }
2132
- }
2133
- },
2134
- "grunt-contrib-compress": {
2135
- "version": "1.4.3",
2136
- "resolved": "https://registry.npmjs.org/grunt-contrib-compress/-/grunt-contrib-compress-1.4.3.tgz",
2137
- "integrity": "sha1-Ac7/ucY39S5wgfRjdQmD0KOw+nM=",
2138
- "dev": true,
2139
- "requires": {
2140
- "archiver": "1.3.0",
2141
- "chalk": "1.1.3",
2142
- "iltorb": "1.3.10",
2143
- "lodash": "4.17.10",
2144
- "pretty-bytes": "4.0.2",
2145
- "stream-buffers": "2.2.0"
2146
- },
2147
- "dependencies": {
2148
- "lodash": {
2149
- "version": "4.17.10",
2150
- "resolved": "https://registry.npmjs.org/lodash/-/lodash-4.17.10.tgz",
2151
- "integrity": "sha512-UejweD1pDoXu+AD825lWwp4ZGtSwgnpZxb3JDViD7StjQz+Nb/6l093lx4OQ0foGWNRoc19mWy7BzL+UAK2iVg==",
2152
- "dev": true
2153
- }
2154
- }
2155
- },
2156
- "grunt-contrib-copy": {
2157
- "version": "1.0.0",
2158
- "resolved": "https://registry.npmjs.org/grunt-contrib-copy/-/grunt-contrib-copy-1.0.0.tgz",
2159
- "integrity": "sha1-cGDGWB6QS4qw0A8HbgqPbj58NXM=",
2160
- "dev": true,
2161
- "requires": {
2162
- "chalk": "1.1.3",
2163
- "file-sync-cmp": "0.1.1"
2164
- }
2165
- },
2166
- "grunt-contrib-imagemin": {
2167
- "version": "1.0.1",
2168
- "resolved": "https://registry.npmjs.org/grunt-contrib-imagemin/-/grunt-contrib-imagemin-1.0.1.tgz",
2169
- "integrity": "sha1-5Ho1YTN29MqpwfkERlA8rhyUTXk=",
2170
- "dev": true,
2171
- "requires": {
2172
- "async": "1.5.2",
2173
- "chalk": "1.1.3",
2174
- "gulp-rename": "1.2.3",
2175
- "imagemin": "4.0.0",
2176
- "pretty-bytes": "3.0.1"
2177
- },
2178
- "dependencies": {
2179
- "async": {
2180
- "version": "1.5.2",
2181
- "resolved": "https://registry.npmjs.org/async/-/async-1.5.2.tgz",
2182
- "integrity": "sha1-7GphrlZIDAw8skHJVhjiCJL5Zyo=",
2183
- "dev": true
2184
- },
2185
- "pretty-bytes": {
2186
- "version": "3.0.1",
2187
- "resolved": "https://registry.npmjs.org/pretty-bytes/-/pretty-bytes-3.0.1.tgz",
2188
- "integrity": "sha1-J9AAjXeAY6C0gRuzXHnxvV1fvM8=",
2189
- "dev": true,
2190
- "requires": {
2191
- "number-is-nan": "1.0.1"
2192
- }
2193
- }
2194
- }
2195
- },
2196
- "grunt-contrib-jshint": {
2197
- "version": "1.1.0",
2198
- "resolved": "https://registry.npmjs.org/grunt-contrib-jshint/-/grunt-contrib-jshint-1.1.0.tgz",
2199
- "integrity": "sha1-Np2QmyWTxA6L55lAshNAhQx5Oaw=",
2200
- "dev": true,
2201
- "requires": {
2202
- "chalk": "1.1.3",
2203
- "hooker": "0.2.3",
2204
- "jshint": "2.9.5"
2205
- }
2206
- },
2207
- "grunt-contrib-watch": {
2208
- "version": "1.1.0",
2209
- "resolved": "https://registry.npmjs.org/grunt-contrib-watch/-/grunt-contrib-watch-1.1.0.tgz",
2210
- "integrity": "sha512-yGweN+0DW5yM+oo58fRu/XIRrPcn3r4tQx+nL7eMRwjpvk+rQY6R8o94BPK0i2UhTg9FN21hS+m8vR8v9vXfeg==",
2211
- "dev": true,
2212
- "requires": {
2213
- "async": "2.6.1",
2214
- "gaze": "1.1.3",
2215
- "lodash": "4.17.10",
2216
- "tiny-lr": "1.1.1"
2217
- },
2218
- "dependencies": {
2219
- "async": {
2220
- "version": "2.6.1",
2221
- "resolved": "https://registry.npmjs.org/async/-/async-2.6.1.tgz",
2222
- "integrity": "sha512-fNEiL2+AZt6AlAw/29Cr0UDe4sRAHCpEHh54WMz+Bb7QfNcFw4h3loofyJpLeQs4Yx7yuqu/2dLgM5hKOs6HlQ==",
2223
- "dev": true,
2224
- "requires": {
2225
- "lodash": "4.17.10"
2226
- }
2227
- },
2228
- "lodash": {
2229
- "version": "4.17.10",
2230
- "resolved": "https://registry.npmjs.org/lodash/-/lodash-4.17.10.tgz",
2231
- "integrity": "sha512-UejweD1pDoXu+AD825lWwp4ZGtSwgnpZxb3JDViD7StjQz+Nb/6l093lx4OQ0foGWNRoc19mWy7BzL+UAK2iVg==",
2232
- "dev": true
2233
- }
2234
- }
2235
- },
2236
- "grunt-legacy-log": {
2237
- "version": "0.1.3",
2238
- "resolved": "https://registry.npmjs.org/grunt-legacy-log/-/grunt-legacy-log-0.1.3.tgz",
2239
- "integrity": "sha1-7ClCboAwIa9ZAp+H0vnNczWgVTE=",
2240
- "dev": true,
2241
- "requires": {
2242
- "colors": "0.6.2",
2243
- "grunt-legacy-log-utils": "0.1.1",
2244
- "hooker": "0.2.3",
2245
- "lodash": "2.4.2",
2246
- "underscore.string": "2.3.3"
2247
- },
2248
- "dependencies": {
2249
- "lodash": {
2250
- "version": "2.4.2",
2251
- "resolved": "https://registry.npmjs.org/lodash/-/lodash-2.4.2.tgz",
2252
- "integrity": "sha1-+t2DS5aDBz2hebPq5tnA0VBT9z4=",
2253
- "dev": true
2254
- },
2255
- "underscore.string": {
2256
- "version": "2.3.3",
2257
- "resolved": "https://registry.npmjs.org/underscore.string/-/underscore.string-2.3.3.tgz",
2258
- "integrity": "sha1-ccCL9rQosRM/N+ePo6Icgvcymw0=",
2259
- "dev": true
2260
- }
2261
- }
2262
- },
2263
- "grunt-legacy-log-utils": {
2264
- "version": "0.1.1",
2265
- "resolved": "https://registry.npmjs.org/grunt-legacy-log-utils/-/grunt-legacy-log-utils-0.1.1.tgz",
2266
- "integrity": "sha1-wHBrndkGThFvNvI/5OawSGcsD34=",
2267
- "dev": true,
2268
- "requires": {
2269
- "colors": "0.6.2",
2270
- "lodash": "2.4.2",
2271
- "underscore.string": "2.3.3"
2272
- },
2273
- "dependencies": {
2274
- "lodash": {
2275
- "version": "2.4.2",
2276
- "resolved": "https://registry.npmjs.org/lodash/-/lodash-2.4.2.tgz",
2277
- "integrity": "sha1-+t2DS5aDBz2hebPq5tnA0VBT9z4=",
2278
- "dev": true
2279
- },
2280
- "underscore.string": {
2281
- "version": "2.3.3",
2282
- "resolved": "https://registry.npmjs.org/underscore.string/-/underscore.string-2.3.3.tgz",
2283
- "integrity": "sha1-ccCL9rQosRM/N+ePo6Icgvcymw0=",
2284
- "dev": true
2285
- }
2286
- }
2287
- },
2288
- "grunt-legacy-util": {
2289
- "version": "0.2.0",
2290
- "resolved": "https://registry.npmjs.org/grunt-legacy-util/-/grunt-legacy-util-0.2.0.tgz",
2291
- "integrity": "sha1-kzJIhNv343qf98Am3/RR2UqeVUs=",
2292
- "dev": true,
2293
- "requires": {
2294
- "async": "0.1.22",
2295
- "exit": "0.1.2",
2296
- "getobject": "0.1.0",
2297
- "hooker": "0.2.3",
2298
- "lodash": "0.9.2",
2299
- "underscore.string": "2.2.1",
2300
- "which": "1.0.9"
2301
- }
2302
- },
2303
- "grunt-mkdir": {
2304
- "version": "1.0.0",
2305
- "resolved": "https://registry.npmjs.org/grunt-mkdir/-/grunt-mkdir-1.0.0.tgz",
2306
- "integrity": "sha1-c+GiasJKCFljY/TdlUsNMkheWOk=",
2307
- "dev": true
2308
- },
2309
- "grunt-newer": {
2310
- "version": "1.3.0",
2311
- "resolved": "https://registry.npmjs.org/grunt-newer/-/grunt-newer-1.3.0.tgz",
2312
- "integrity": "sha1-g8y3od2ny9irI7BZAk6+YUrS80I=",
2313
- "dev": true,
2314
- "requires": {
2315
- "async": "1.5.2",
2316
- "rimraf": "2.6.2"
2317
- },
2318
- "dependencies": {
2319
- "async": {
2320
- "version": "1.5.2",
2321
- "resolved": "https://registry.npmjs.org/async/-/async-1.5.2.tgz",
2322
- "integrity": "sha1-7GphrlZIDAw8skHJVhjiCJL5Zyo=",
2323
- "dev": true
2324
- },
2325
- "glob": {
2326
- "version": "7.1.2",
2327
- "resolved": "https://registry.npmjs.org/glob/-/glob-7.1.2.tgz",
2328
- "integrity": "sha512-MJTUg1kjuLeQCJ+ccE4Vpa6kKVXkPYJ2mOCQyUuKLcLQsdrMCpBPUi8qVE6+YuaJkozeA9NusTAw3hLr8Xe5EQ==",
2329
- "dev": true,
2330
- "requires": {
2331
- "fs.realpath": "1.0.0",
2332
- "inflight": "1.0.6",
2333
- "inherits": "2.0.3",
2334
- "minimatch": "3.0.4",
2335
- "once": "1.4.0",
2336
- "path-is-absolute": "1.0.1"
2337
- }
2338
- },
2339
- "minimatch": {
2340
- "version": "3.0.4",
2341
- "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.0.4.tgz",
2342
- "integrity": "sha512-yJHVQEhyqPLUTgt9B83PXu6W3rx4MvvHvSUvToogpwoGDOUQ+yDrR0HRot+yOCdCO7u4hX3pWft6kWBBcqh0UA==",
2343
- "dev": true,
2344
- "requires": {
2345
- "brace-expansion": "1.1.11"
2346
- }
2347
- },
2348
- "rimraf": {
2349
- "version": "2.6.2",
2350
- "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-2.6.2.tgz",
2351
- "integrity": "sha512-lreewLK/BlghmxtfH36YYVg1i8IAce4TI7oao75I1g245+6BctqTVQiBP3YUJ9C6DQOXJmkYR9X9fCLtCOJc5w==",
2352
- "dev": true,
2353
- "requires": {
2354
- "glob": "7.1.2"
2355
- }
2356
- }
2357
- }
2358
- },
2359
- "grunt-phpcbf": {
2360
- "version": "0.1.1",
2361
- "resolved": "https://registry.npmjs.org/grunt-phpcbf/-/grunt-phpcbf-0.1.1.tgz",
2362
- "integrity": "sha1-imRoKbRUW19gE1hGh/TkAQT/NcI=",
2363
- "dev": true
2364
- },
2365
- "grunt-phpcs": {
2366
- "version": "0.4.0",
2367
- "resolved": "https://registry.npmjs.org/grunt-phpcs/-/grunt-phpcs-0.4.0.tgz",
2368
- "integrity": "sha1-oI1iX8ZEZeRTsr2T+BCyqB6Uvao=",
2369
- "dev": true
2370
- },
2371
- "grunt-phplint": {
2372
- "version": "0.0.8",
2373
- "resolved": "https://registry.npmjs.org/grunt-phplint/-/grunt-phplint-0.0.8.tgz",
2374
- "integrity": "sha1-wSeqKP930jnBSgHwUMx7cVnOkMA=",
2375
- "dev": true,
2376
- "requires": {
2377
- "cache-swap": "0.0.6",
2378
- "grunt": "0.4.5"
2379
- }
2380
- },
2381
- "grunt-phpunit": {
2382
- "version": "0.3.6",
2383
- "resolved": "https://registry.npmjs.org/grunt-phpunit/-/grunt-phpunit-0.3.6.tgz",
2384
- "integrity": "sha1-DnW+5rXC5l/aRQdWcqBs6yzs2Gk=",
2385
- "dev": true
2386
- },
2387
- "grunt-plugin-fleet": {
2388
- "version": "github:codeinwp/grunt-plugin-fleet#c9f5e9ac72a3f5e05f0235fe5eb0a70e4703a15f",
2389
- "dev": true,
2390
- "requires": {
2391
- "autoprefixer": "6.7.7",
2392
- "grunt": "0.4.5",
2393
- "grunt-cachebuster": "0.1.7",
2394
- "grunt-checktextdomain": "1.0.1",
2395
- "grunt-contrib-compress": "1.4.3",
2396
- "grunt-contrib-copy": "1.0.0",
2397
- "grunt-contrib-imagemin": "1.0.1",
2398
- "grunt-contrib-jshint": "1.1.0",
2399
- "grunt-contrib-watch": "1.1.0",
2400
- "grunt-mkdir": "1.0.0",
2401
- "grunt-newer": "1.3.0",
2402
- "grunt-phpcbf": "0.1.1",
2403
- "grunt-phpcs": "0.4.0",
2404
- "grunt-phplint": "0.0.8",
2405
- "grunt-phpunit": "0.3.6",
2406
- "grunt-postcss": "0.8.0",
2407
- "grunt-rsync": "2.0.1",
2408
- "grunt-sync": "0.6.2",
2409
- "grunt-text-replace": "0.4.0",
2410
- "grunt-version": "1.2.1",
2411
- "grunt-wp-css": "0.2.1",
2412
- "grunt-wp-i18n": "0.5.4",
2413
- "grunt-wp-readme-to-markdown": "2.0.1",
2414
- "time-grunt": "1.4.0"
2415
- }
2416
- },
2417
- "grunt-postcss": {
2418
- "version": "0.8.0",
2419
- "resolved": "https://registry.npmjs.org/grunt-postcss/-/grunt-postcss-0.8.0.tgz",
2420
- "integrity": "sha1-jzCor2B5A84MRfAfC+QsYOMc6w4=",
2421
- "dev": true,
2422
- "requires": {
2423
- "chalk": "1.1.3",
2424
- "diff": "2.2.3",
2425
- "postcss": "5.2.18"
2426
- }
2427
- },
2428
- "grunt-rsync": {
2429
- "version": "2.0.1",
2430
- "resolved": "https://registry.npmjs.org/grunt-rsync/-/grunt-rsync-2.0.1.tgz",
2431
- "integrity": "sha1-uX3RVCFqzItJJFYFPuuzUlym+R8=",
2432
- "dev": true,
2433
- "requires": {
2434
- "rsyncwrapper": "2.0.1"
2435
- }
2436
- },
2437
- "grunt-sync": {
2438
- "version": "0.6.2",
2439
- "resolved": "https://registry.npmjs.org/grunt-sync/-/grunt-sync-0.6.2.tgz",
2440
- "integrity": "sha1-2ay2W0IF0Be9ZGLkn+wtkHGs5Hs=",
2441
- "dev": true,
2442
- "requires": {
2443
- "glob": "7.1.2",
2444
- "lodash": "4.17.10",
2445
- "md5-file": "2.0.7",
2446
- "promised-io": "0.3.5"
2447
- },
2448
- "dependencies": {
2449
- "glob": {
2450
- "version": "7.1.2",
2451
- "resolved": "https://registry.npmjs.org/glob/-/glob-7.1.2.tgz",
2452
- "integrity": "sha512-MJTUg1kjuLeQCJ+ccE4Vpa6kKVXkPYJ2mOCQyUuKLcLQsdrMCpBPUi8qVE6+YuaJkozeA9NusTAw3hLr8Xe5EQ==",
2453
- "dev": true,
2454
- "requires": {
2455
- "fs.realpath": "1.0.0",
2456
- "inflight": "1.0.6",
2457
- "inherits": "2.0.3",
2458
- "minimatch": "3.0.4",
2459
- "once": "1.4.0",
2460
- "path-is-absolute": "1.0.1"
2461
- }
2462
- },
2463
- "lodash": {
2464
- "version": "4.17.10",
2465
- "resolved": "https://registry.npmjs.org/lodash/-/lodash-4.17.10.tgz",
2466
- "integrity": "sha512-UejweD1pDoXu+AD825lWwp4ZGtSwgnpZxb3JDViD7StjQz+Nb/6l093lx4OQ0foGWNRoc19mWy7BzL+UAK2iVg==",
2467
- "dev": true
2468
- },
2469
- "minimatch": {
2470
- "version": "3.0.4",
2471
- "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.0.4.tgz",
2472
- "integrity": "sha512-yJHVQEhyqPLUTgt9B83PXu6W3rx4MvvHvSUvToogpwoGDOUQ+yDrR0HRot+yOCdCO7u4hX3pWft6kWBBcqh0UA==",
2473
- "dev": true,
2474
- "requires": {
2475
- "brace-expansion": "1.1.11"
2476
- }
2477
- }
2478
- }
2479
- },
2480
- "grunt-text-replace": {
2481
- "version": "0.4.0",
2482
- "resolved": "https://registry.npmjs.org/grunt-text-replace/-/grunt-text-replace-0.4.0.tgz",
2483
- "integrity": "sha1-252c5Z4v5J2id+nbwZXD4Rz7FsI=",
2484
- "dev": true
2485
- },
2486
- "grunt-version": {
2487
- "version": "1.2.1",
2488
- "resolved": "https://registry.npmjs.org/grunt-version/-/grunt-version-1.2.1.tgz",
2489
- "integrity": "sha512-FMRde7kCY1T2zCBAg4ZbLR9GbKDX60xCIZS89kCyk29LLQ/nbRSgXY+782HjT+HfC21kszcpWttfCGq1eERHPA==",
2490
- "dev": true,
2491
- "requires": {
2492
- "grunt": "0.4.5",
2493
- "semver": "4.3.6"
2494
- },
2495
- "dependencies": {
2496
- "semver": {
2497
- "version": "4.3.6",
2498
- "resolved": "https://registry.npmjs.org/semver/-/semver-4.3.6.tgz",
2499
- "integrity": "sha1-MAvG4OhjdPe6YQaLWx7NV/xlMto=",
2500
- "dev": true
2501
- }
2502
- }
2503
- },
2504
- "grunt-wp-css": {
2505
- "version": "0.2.1",
2506
- "resolved": "https://registry.npmjs.org/grunt-wp-css/-/grunt-wp-css-0.2.1.tgz",
2507
- "integrity": "sha1-cC7ZaZzXyQCjQGwgQaHSg1WIf2s=",
2508
- "dev": true,
2509
- "requires": {
2510
- "cssbeautify": "0.3.1",
2511
- "csscomb": "3.1.8",
2512
- "lodash": "4.17.10"
2513
- },
2514
- "dependencies": {
2515
- "lodash": {
2516
- "version": "4.17.10",
2517
- "resolved": "https://registry.npmjs.org/lodash/-/lodash-4.17.10.tgz",
2518
- "integrity": "sha512-UejweD1pDoXu+AD825lWwp4ZGtSwgnpZxb3JDViD7StjQz+Nb/6l093lx4OQ0foGWNRoc19mWy7BzL+UAK2iVg==",
2519
- "dev": true
2520
- }
2521
- }
2522
- },
2523
- "grunt-wp-i18n": {
2524
- "version": "0.5.4",
2525
- "resolved": "https://registry.npmjs.org/grunt-wp-i18n/-/grunt-wp-i18n-0.5.4.tgz",
2526
- "integrity": "sha1-hynlrU9LIxJpch8xcWVNLGKVVJI=",
2527
- "dev": true,
2528
- "requires": {
2529
- "async": "0.9.2",
2530
- "gettext-parser": "1.1.2",
2531
- "grunt": "0.4.5",
2532
- "underscore": "1.8.3",
2533
- "underscore.string": "3.0.3"
2534
- },
2535
- "dependencies": {
2536
- "async": {
2537
- "version": "0.9.2",
2538
- "resolved": "https://registry.npmjs.org/async/-/async-0.9.2.tgz",
2539
- "integrity": "sha1-rqdNXmHB+JlhO/ZL2mbUx48v0X0=",
2540
- "dev": true
2541
- },
2542
- "underscore": {
2543
- "version": "1.8.3",
2544
- "resolved": "https://registry.npmjs.org/underscore/-/underscore-1.8.3.tgz",
2545
- "integrity": "sha1-Tz+1OxBuYJf8+ctBCfKl6b36UCI=",
2546
- "dev": true
2547
- },
2548
- "underscore.string": {
2549
- "version": "3.0.3",
2550
- "resolved": "https://registry.npmjs.org/underscore.string/-/underscore.string-3.0.3.tgz",
2551
- "integrity": "sha1-Rhe4waJQz25QZPu7Nj0PqWzxRVI=",
2552
- "dev": true
2553
- }
2554
- }
2555
- },
2556
- "grunt-wp-readme-to-markdown": {
2557
- "version": "2.0.1",
2558
- "resolved": "https://registry.npmjs.org/grunt-wp-readme-to-markdown/-/grunt-wp-readme-to-markdown-2.0.1.tgz",
2559
- "integrity": "sha1-QGzV6YmIWA3B0W6AXE4uYJJWhVI=",
2560
- "dev": true
2561
- },
2562
- "gulp-decompress": {
2563
- "version": "1.2.0",
2564
- "resolved": "https://registry.npmjs.org/gulp-decompress/-/gulp-decompress-1.2.0.tgz",
2565
- "integrity": "sha1-jutlpeAV+O2FMsr+KEVJYGJvDcc=",
2566
- "dev": true,
2567
- "requires": {
2568
- "archive-type": "3.2.0",
2569
- "decompress": "3.0.0",
2570
- "gulp-util": "3.0.8",
2571
- "readable-stream": "2.3.6"
2572
- }
2573
- },
2574
- "gulp-rename": {
2575
- "version": "1.2.3",
2576
- "resolved": "https://registry.npmjs.org/gulp-rename/-/gulp-rename-1.2.3.tgz",
2577
- "integrity": "sha512-CmdPM0BjJ105QCX1fk+j7NGhiN/1rCl9HLGss+KllBS/tdYadpjTxqdKyh/5fNV+M3yjT1MFz5z93bXdrTyzAw==",
2578
- "dev": true
2579
- },
2580
- "gulp-sourcemaps": {
2581
- "version": "1.6.0",
2582
- "resolved": "https://registry.npmjs.org/gulp-sourcemaps/-/gulp-sourcemaps-1.6.0.tgz",
2583
- "integrity": "sha1-uG/zSdgBzrVuHZ59x7vLS33uYAw=",
2584
- "dev": true,
2585
- "requires": {
2586
- "convert-source-map": "1.5.1",
2587
- "graceful-fs": "4.1.11",
2588
- "strip-bom": "2.0.0",
2589
- "through2": "2.0.3",
2590
- "vinyl": "1.2.0"
2591
- },
2592
- "dependencies": {
2593
- "graceful-fs": {
2594
- "version": "4.1.11",
2595
- "resolved": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.1.11.tgz",
2596
- "integrity": "sha1-Dovf5NHduIVNZOBOp8AOKgJuVlg=",
2597
- "dev": true
2598
- },
2599
- "through2": {
2600
- "version": "2.0.3",
2601
- "resolved": "https://registry.npmjs.org/through2/-/through2-2.0.3.tgz",
2602
- "integrity": "sha1-AARWmzfHx0ujnEPzzteNGtlBQL4=",
2603
- "dev": true,
2604
- "requires": {
2605
- "readable-stream": "2.3.6",
2606
- "xtend": "4.0.1"
2607
- }
2608
- }
2609
- }
2610
- },
2611
- "gulp-util": {
2612
- "version": "3.0.8",
2613
- "resolved": "https://registry.npmjs.org/gulp-util/-/gulp-util-3.0.8.tgz",
2614
- "integrity": "sha1-AFTh50RQLifATBh8PsxQXdVLu08=",
2615
- "dev": true,
2616
- "requires": {
2617
- "array-differ": "1.0.0",
2618
- "array-uniq": "1.0.3",
2619
- "beeper": "1.1.1",
2620
- "chalk": "1.1.3",
2621
- "dateformat": "2.2.0",
2622
- "fancy-log": "1.3.2",
2623
- "gulplog": "1.0.0",
2624
- "has-gulplog": "0.1.0",
2625
- "lodash._reescape": "3.0.0",
2626
- "lodash._reevaluate": "3.0.0",
2627
- "lodash._reinterpolate": "3.0.0",
2628
- "lodash.template": "3.6.2",
2629
- "minimist": "1.2.0",
2630
- "multipipe": "0.1.2",
2631
- "object-assign": "3.0.0",
2632
- "replace-ext": "0.0.1",
2633
- "through2": "2.0.3",
2634
- "vinyl": "0.5.3"
2635
- },
2636
- "dependencies": {
2637
- "dateformat": {
2638
- "version": "2.2.0",
2639
- "resolved": "https://registry.npmjs.org/dateformat/-/dateformat-2.2.0.tgz",
2640
- "integrity": "sha1-QGXiATz5+5Ft39gu+1Bq1MZ2kGI=",
2641
- "dev": true
2642
- },
2643
- "minimist": {
2644
- "version": "1.2.0",
2645
- "resolved": "https://registry.npmjs.org/minimist/-/minimist-1.2.0.tgz",
2646
- "integrity": "sha1-o1AIsg9BOD7sH7kU9M1d95omQoQ=",
2647
- "dev": true
2648
- },
2649
- "object-assign": {
2650
- "version": "3.0.0",
2651
- "resolved": "https://registry.npmjs.org/object-assign/-/object-assign-3.0.0.tgz",
2652
- "integrity": "sha1-m+3VygiXlJvKR+f/QIBi1Un1h/I=",
2653
- "dev": true
2654
- },
2655
- "through2": {
2656
- "version": "2.0.3",
2657
- "resolved": "https://registry.npmjs.org/through2/-/through2-2.0.3.tgz",
2658
- "integrity": "sha1-AARWmzfHx0ujnEPzzteNGtlBQL4=",
2659
- "dev": true,
2660
- "requires": {
2661
- "readable-stream": "2.3.6",
2662
- "xtend": "4.0.1"
2663
- }
2664
- },
2665
- "vinyl": {
2666
- "version": "0.5.3",
2667
- "resolved": "https://registry.npmjs.org/vinyl/-/vinyl-0.5.3.tgz",
2668
- "integrity": "sha1-sEVbOPxeDPMNQyUTLkYZcMIJHN4=",
2669
- "dev": true,
2670
- "requires": {
2671
- "clone": "1.0.4",
2672
- "clone-stats": "0.0.1",
2673
- "replace-ext": "0.0.1"
2674
- }
2675
- }
2676
- }
2677
- },
2678
- "gulplog": {
2679
- "version": "1.0.0",
2680
- "resolved": "https://registry.npmjs.org/gulplog/-/gulplog-1.0.0.tgz",
2681
- "integrity": "sha1-4oxNRdBey77YGDY86PnFkmIp/+U=",
2682
- "dev": true,
2683
- "requires": {
2684
- "glogg": "1.0.1"
2685
- }
2686
- },
2687
- "har-schema": {
2688
- "version": "2.0.0",
2689
- "resolved": "https://registry.npmjs.org/har-schema/-/har-schema-2.0.0.tgz",
2690
- "integrity": "sha1-qUwiJOvKwEeCoNkDVSHyRzW37JI=",
2691
- "dev": true,
2692
- "optional": true
2693
- },
2694
- "har-validator": {
2695
- "version": "5.0.3",
2696
- "resolved": "https://registry.npmjs.org/har-validator/-/har-validator-5.0.3.tgz",
2697
- "integrity": "sha1-ukAsJmGU8VlW7xXg/PJCmT9qff0=",
2698
- "dev": true,
2699
- "optional": true,
2700
- "requires": {
2701
- "ajv": "5.5.2",
2702
- "har-schema": "2.0.0"
2703
- }
2704
- },
2705
- "has-ansi": {
2706
- "version": "2.0.0",
2707
- "resolved": "https://registry.npmjs.org/has-ansi/-/has-ansi-2.0.0.tgz",
2708
- "integrity": "sha1-NPUEnOHs3ysGSa8+8k5F7TVBbZE=",
2709
- "dev": true,
2710
- "requires": {
2711
- "ansi-regex": "2.1.1"
2712
- }
2713
- },
2714
- "has-color": {
2715
- "version": "0.1.7",
2716
- "resolved": "https://registry.npmjs.org/has-color/-/has-color-0.1.7.tgz",
2717
- "integrity": "sha1-ZxRKUmDDT8PMpnfQQdr1L+e3iy8=",
2718
- "dev": true
2719
- },
2720
- "has-flag": {
2721
- "version": "1.0.0",
2722
- "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-1.0.0.tgz",
2723
- "integrity": "sha1-nZ55MWXOAXoA8AQYxD+UKnsdEfo=",
2724
- "dev": true
2725
- },
2726
- "has-gulplog": {
2727
- "version": "0.1.0",
2728
- "resolved": "https://registry.npmjs.org/has-gulplog/-/has-gulplog-0.1.0.tgz",
2729
- "integrity": "sha1-ZBTIKRNpfaUVkDl9r7EvIpZ4Ec4=",
2730
- "dev": true,
2731
- "requires": {
2732
- "sparkles": "1.0.1"
2733
- }
2734
- },
2735
- "has-unicode": {
2736
- "version": "2.0.1",
2737
- "resolved": "https://registry.npmjs.org/has-unicode/-/has-unicode-2.0.1.tgz",
2738
- "integrity": "sha1-4Ob+aijPUROIVeCG0Wkedx3iqLk=",
2739
- "dev": true
2740
- },
2741
- "hooker": {
2742
- "version": "0.2.3",
2743
- "resolved": "https://registry.npmjs.org/hooker/-/hooker-0.2.3.tgz",
2744
- "integrity": "sha1-uDT3I8xKJCqmWWNFnfbZhMXT2Vk=",
2745
- "dev": true
2746
- },
2747
- "hosted-git-info": {
2748
- "version": "2.6.0",
2749
- "resolved": "https://registry.npmjs.org/hosted-git-info/-/hosted-git-info-2.6.0.tgz",
2750
- "integrity": "sha512-lIbgIIQA3lz5XaB6vxakj6sDHADJiZadYEJB+FgA+C4nubM1NwcuvUr9EJPmnH1skZqpqUzWborWo8EIUi0Sdw==",
2751
- "dev": true
2752
- },
2753
- "htmlparser2": {
2754
- "version": "3.8.3",
2755
- "resolved": "https://registry.npmjs.org/htmlparser2/-/htmlparser2-3.8.3.tgz",
2756
- "integrity": "sha1-mWwosZFRaovoZQGn15dX5ccMEGg=",
2757
- "dev": true,
2758
- "requires": {
2759
- "domelementtype": "1.3.0",
2760
- "domhandler": "2.3.0",
2761
- "domutils": "1.5.1",
2762
- "entities": "1.0.0",
2763
- "readable-stream": "1.1.14"
2764
- },
2765
- "dependencies": {
2766
- "isarray": {
2767
- "version": "0.0.1",
2768
- "resolved": "https://registry.npmjs.org/isarray/-/isarray-0.0.1.tgz",
2769
- "integrity": "sha1-ihis/Kmo9Bd+Cav8YDiTmwXR7t8=",
2770
- "dev": true
2771
- },
2772
- "readable-stream": {
2773
- "version": "1.1.14",
2774
- "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-1.1.14.tgz",
2775
- "integrity": "sha1-fPTFTvZI44EwhMY23SB54WbAgdk=",
2776
- "dev": true,
2777
- "requires": {
2778
- "core-util-is": "1.0.2",
2779
- "inherits": "2.0.3",
2780
- "isarray": "0.0.1",
2781
- "string_decoder": "0.10.31"
2782
- }
2783
- },
2784
- "string_decoder": {
2785
- "version": "0.10.31",
2786
- "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-0.10.31.tgz",
2787
- "integrity": "sha1-YuIDvEF2bGwoyfyEMB2rHFMQ+pQ=",
2788
- "dev": true
2789
- }
2790
- }
2791
- },
2792
- "http-parser-js": {
2793
- "version": "0.4.13",
2794
- "resolved": "https://registry.npmjs.org/http-parser-js/-/http-parser-js-0.4.13.tgz",
2795
- "integrity": "sha1-O9bW/ebjFyyTNMOzO2wZPYD+ETc=",
2796
- "dev": true
2797
- },
2798
- "http-signature": {
2799
- "version": "1.2.0",
2800
- "resolved": "https://registry.npmjs.org/http-signature/-/http-signature-1.2.0.tgz",
2801
- "integrity": "sha1-muzZJRFHcvPZW2WmCruPfBj7rOE=",
2802
- "dev": true,
2803
- "optional": true,
2804
- "requires": {
2805
- "assert-plus": "1.0.0",
2806
- "jsprim": "1.4.1",
2807
- "sshpk": "1.14.1"
2808
- }
2809
- },
2810
- "iconv-lite": {
2811
- "version": "0.2.11",
2812
- "resolved": "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.2.11.tgz",
2813
- "integrity": "sha1-HOYKOleGSiktEyH/RgnKS7llrcg=",
2814
- "dev": true
2815
- },
2816
- "iltorb": {
2817
- "version": "1.3.10",
2818
- "resolved": "https://registry.npmjs.org/iltorb/-/iltorb-1.3.10.tgz",
2819
- "integrity": "sha512-nyB4+ru1u8CQqQ6w7YjasboKN3NQTN8GH/V/eEssNRKhW6UbdxdWhB9fJ5EEdjJfezKY0qPrcwLyIcgjL8hHxA==",
2820
- "dev": true,
2821
- "optional": true,
2822
- "requires": {
2823
- "detect-libc": "0.2.0",
2824
- "nan": "2.10.0",
2825
- "node-gyp": "3.6.2",
2826
- "prebuild-install": "2.5.3"
2827
- }
2828
- },
2829
- "imagemin": {
2830
- "version": "4.0.0",
2831
- "resolved": "https://registry.npmjs.org/imagemin/-/imagemin-4.0.0.tgz",
2832
- "integrity": "sha1-6Q5/CTaDZZXxj6Ff6Qb0+iWeqEc=",
2833
- "dev": true,
2834
- "requires": {
2835
- "buffer-to-vinyl": "1.1.0",
2836
- "concat-stream": "1.6.2",
2837
- "imagemin-gifsicle": "4.2.0",
2838
- "imagemin-jpegtran": "4.3.2",
2839
- "imagemin-optipng": "4.3.0",
2840
- "imagemin-svgo": "4.2.1",
2841
- "optional": "0.1.4",
2842
- "readable-stream": "2.3.6",
2843
- "stream-combiner2": "1.1.1",
2844
- "vinyl-fs": "2.4.4"
2845
- }
2846
- },
2847
- "imagemin-gifsicle": {
2848
- "version": "4.2.0",
2849
- "resolved": "https://registry.npmjs.org/imagemin-gifsicle/-/imagemin-gifsicle-4.2.0.tgz",
2850
- "integrity": "sha1-D++butNHbmt2iFc2zFsLh6CHV8o=",
2851
- "dev": true,
2852
- "optional": true,
2853
- "requires": {
2854
- "gifsicle": "3.0.4",
2855
- "is-gif": "1.0.0",
2856
- "through2": "0.6.5"
2857
- }
2858
- },
2859
- "imagemin-jpegtran": {
2860
- "version": "4.3.2",
2861
- "resolved": "https://registry.npmjs.org/imagemin-jpegtran/-/imagemin-jpegtran-4.3.2.tgz",
2862
- "integrity": "sha1-G8bR4r0T/bZNJFUm1jWn5d/rEvw=",
2863
- "dev": true,
2864
- "optional": true,
2865
- "requires": {
2866
- "is-jpg": "1.0.1",
2867
- "jpegtran-bin": "3.2.0",
2868
- "through2": "2.0.3"
2869
- },
2870
- "dependencies": {
2871
- "through2": {
2872
- "version": "2.0.3",
2873
- "resolved": "https://registry.npmjs.org/through2/-/through2-2.0.3.tgz",
2874
- "integrity": "sha1-AARWmzfHx0ujnEPzzteNGtlBQL4=",
2875
- "dev": true,
2876
- "optional": true,
2877
- "requires": {
2878
- "readable-stream": "2.3.6",
2879
- "xtend": "4.0.1"
2880
- }
2881
- }
2882
- }
2883
- },
2884
- "imagemin-optipng": {
2885
- "version": "4.3.0",
2886
- "resolved": "https://registry.npmjs.org/imagemin-optipng/-/imagemin-optipng-4.3.0.tgz",
2887
- "integrity": "sha1-dgRmOrLuMVczJ0cm/Rw3TStErbY=",
2888
- "dev": true,
2889
- "optional": true,
2890
- "requires": {
2891
- "exec-buffer": "2.0.1",
2892
- "is-png": "1.1.0",
2893
- "optipng-bin": "3.1.4",
2894
- "through2": "0.6.5"
2895
- }
2896
- },
2897
- "imagemin-svgo": {
2898
- "version": "4.2.1",
2899
- "resolved": "https://registry.npmjs.org/imagemin-svgo/-/imagemin-svgo-4.2.1.tgz",
2900
- "integrity": "sha1-VPB9xW9HJgRi32phxUvvtEtXvlU=",
2901
- "dev": true,
2902
- "optional": true,
2903
- "requires": {
2904
- "is-svg": "1.1.1",
2905
- "svgo": "0.6.6",
2906
- "through2": "2.0.3"
2907
- },
2908
- "dependencies": {
2909
- "through2": {
2910
- "version": "2.0.3",
2911
- "resolved": "https://registry.npmjs.org/through2/-/through2-2.0.3.tgz",
2912
- "integrity": "sha1-AARWmzfHx0ujnEPzzteNGtlBQL4=",
2913
- "dev": true,
2914
- "optional": true,
2915
- "requires": {
2916
- "readable-stream": "2.3.6",
2917
- "xtend": "4.0.1"
2918
- }
2919
- }
2920
- }
2921
- },
2922
- "indent-string": {
2923
- "version": "2.1.0",
2924
- "resolved": "https://registry.npmjs.org/indent-string/-/indent-string-2.1.0.tgz",
2925
- "integrity": "sha1-ji1INIdCEhtKghi3oTfppSBJ3IA=",
2926
- "dev": true,
2927
- "requires": {
2928
- "repeating": "2.0.1"
2929
- }
2930
- },
2931
- "inflight": {
2932
- "version": "1.0.6",
2933
- "resolved": "https://registry.npmjs.org/inflight/-/inflight-1.0.6.tgz",
2934
- "integrity": "sha1-Sb1jMdfQLQwJvJEKEHW6gWW1bfk=",
2935
- "dev": true,
2936
- "requires": {
2937
- "once": "1.4.0",
2938
- "wrappy": "1.0.2"
2939
- }
2940
- },
2941
- "inherit": {
2942
- "version": "2.2.6",
2943
- "resolved": "https://registry.npmjs.org/inherit/-/inherit-2.2.6.tgz",
2944
- "integrity": "sha1-8WFLBshUToEo5CKchjR9tzrZeI0=",
2945
- "dev": true
2946
- },
2947
- "inherits": {
2948
- "version": "2.0.3",
2949
- "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.3.tgz",
2950
- "integrity": "sha1-Yzwsg+PaQqUC9SRmAiSA9CCCYd4=",
2951
- "dev": true
2952
- },
2953
- "ini": {
2954
- "version": "1.3.5",
2955
- "resolved": "https://registry.npmjs.org/ini/-/ini-1.3.5.tgz",
2956
- "integrity": "sha512-RZY5huIKCMRWDUqZlEi72f/lmXKMvuszcMBduliQ3nnWbx9X/ZBQO7DijMEYS9EhHBb2qacRUMtC7svLwe0lcw==",
2957
- "dev": true
2958
- },
2959
- "ip-regex": {
2960
- "version": "1.0.3",
2961
- "resolved": "https://registry.npmjs.org/ip-regex/-/ip-regex-1.0.3.tgz",
2962
- "integrity": "sha1-3FiQdvZZ9BnCIgOaMzFvHHOH7/0=",
2963
- "dev": true,
2964
- "optional": true
2965
- },
2966
- "is-absolute": {
2967
- "version": "0.1.7",
2968
- "resolved": "https://registry.npmjs.org/is-absolute/-/is-absolute-0.1.7.tgz",
2969
- "integrity": "sha1-hHSREZ/MtftDYhfMc39/qtUPYD8=",
2970
- "dev": true,
2971
- "requires": {
2972
- "is-relative": "0.1.3"
2973
- }
2974
- },
2975
- "is-arrayish": {
2976
- "version": "0.2.1",
2977
- "resolved": "https://registry.npmjs.org/is-arrayish/-/is-arrayish-0.2.1.tgz",
2978
- "integrity": "sha1-d8mYQFJ6qOyxqLppe4BkWnqSap0=",
2979
- "dev": true
2980
- },
2981
- "is-buffer": {
2982
- "version": "1.1.6",
2983
- "resolved": "https://registry.npmjs.org/is-buffer/-/is-buffer-1.1.6.tgz",
2984
- "integrity": "sha512-NcdALwpXkTm5Zvvbk7owOUSvVvBKDgKP5/ewfXEznmQFfs4ZRmanOeKBTjRVjka3QFoN6XJ+9F3USqfHqTaU5w==",
2985
- "dev": true
2986
- },
2987
- "is-builtin-module": {
2988
- "version": "1.0.0",
2989
- "resolved": "https://registry.npmjs.org/is-builtin-module/-/is-builtin-module-1.0.0.tgz",
2990
- "integrity": "sha1-VAVy0096wxGfj3bDDLwbHgN6/74=",
2991
- "dev": true,
2992
- "requires": {
2993
- "builtin-modules": "1.1.1"
2994
- }
2995
- },
2996
- "is-bzip2": {
2997
- "version": "1.0.0",
2998
- "resolved": "https://registry.npmjs.org/is-bzip2/-/is-bzip2-1.0.0.tgz",
2999
- "integrity": "sha1-XuWOqlounIDiFAe+3yOuWsCRs/w=",
3000
- "dev": true
3001
- },
3002
- "is-dotfile": {
3003
- "version": "1.0.3",
3004
- "resolved": "https://registry.npmjs.org/is-dotfile/-/is-dotfile-1.0.3.tgz",
3005
- "integrity": "sha1-pqLzL/0t+wT1yiXs0Pa4PPeYoeE=",
3006
- "dev": true
3007
- },
3008
- "is-equal-shallow": {
3009
- "version": "0.1.3",
3010
- "resolved": "https://registry.npmjs.org/is-equal-shallow/-/is-equal-shallow-0.1.3.tgz",
3011
- "integrity": "sha1-IjgJj8Ih3gvPpdnqxMRdY4qhxTQ=",
3012
- "dev": true,
3013
- "requires": {
3014
- "is-primitive": "2.0.0"
3015
- }
3016
- },
3017
- "is-extendable": {
3018
- "version": "0.1.1",
3019
- "resolved": "https://registry.npmjs.org/is-extendable/-/is-extendable-0.1.1.tgz",
3020
- "integrity": "sha1-YrEQ4omkcUGOPsNqYX1HLjAd/Ik=",
3021
- "dev": true
3022
- },
3023
- "is-extglob": {
3024
- "version": "2.1.1",
3025
- "resolved": "https://registry.npmjs.org/is-extglob/-/is-extglob-2.1.1.tgz",
3026
- "integrity": "sha1-qIwCU1eR8C7TfHahueqXc8gz+MI=",
3027
- "dev": true
3028
- },
3029
- "is-finite": {
3030
- "version": "1.0.2",
3031
- "resolved": "https://registry.npmjs.org/is-finite/-/is-finite-1.0.2.tgz",
3032
- "integrity": "sha1-zGZ3aVYCvlUO8R6LSqYwU0K20Ko=",
3033
- "dev": true,
3034
- "requires": {
3035
- "number-is-nan": "1.0.1"
3036
- }
3037
- },
3038
- "is-fullwidth-code-point": {
3039
- "version": "1.0.0",
3040
- "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-1.0.0.tgz",
3041
- "integrity": "sha1-754xOG8DGn8NZDr4L95QxFfvAMs=",
3042
- "dev": true,
3043
- "requires": {
3044
- "number-is-nan": "1.0.1"
3045
- }
3046
- },
3047
- "is-gif": {
3048
- "version": "1.0.0",
3049
- "resolved": "https://registry.npmjs.org/is-gif/-/is-gif-1.0.0.tgz",
3050
- "integrity": "sha1-ptKumIkwB7/6l6HYwB1jIFgyCX4=",
3051
- "dev": true,
3052
- "optional": true
3053
- },
3054
- "is-glob": {
3055
- "version": "3.1.0",
3056
- "resolved": "https://registry.npmjs.org/is-glob/-/is-glob-3.1.0.tgz",
3057
- "integrity": "sha1-e6WuJCF4BKxwcHuWkiVnSGzD6Eo=",
3058
- "dev": true,
3059
- "requires": {
3060
- "is-extglob": "2.1.1"
3061
- }
3062
- },
3063
- "is-gzip": {
3064
- "version": "1.0.0",
3065
- "resolved": "https://registry.npmjs.org/is-gzip/-/is-gzip-1.0.0.tgz",
3066
- "integrity": "sha1-bKiwe5nHeZgCWQDlVc7Y7YCHmoM=",
3067
- "dev": true
3068
- },
3069
- "is-jpg": {
3070
- "version": "1.0.1",
3071
- "resolved": "https://registry.npmjs.org/is-jpg/-/is-jpg-1.0.1.tgz",
3072
- "integrity": "sha1-KW1X/dmc4BBDSnKD40armhA16XU=",
3073
- "dev": true,
3074
- "optional": true
3075
- },
3076
- "is-natural-number": {
3077
- "version": "2.1.1",
3078
- "resolved": "https://registry.npmjs.org/is-natural-number/-/is-natural-number-2.1.1.tgz",
3079
- "integrity": "sha1-fUxXKDd+84bD4ZSpkRv1fG3DNec=",
3080
- "dev": true
3081
- },
3082
- "is-number": {
3083
- "version": "2.1.0",
3084
- "resolved": "https://registry.npmjs.org/is-number/-/is-number-2.1.0.tgz",
3085
- "integrity": "sha1-Afy7s5NGOlSPL0ZszhbezknbkI8=",
3086
- "dev": true,
3087
- "requires": {
3088
- "kind-of": "3.2.2"
3089
- }
3090
- },
3091
- "is-obj": {
3092
- "version": "1.0.1",
3093
- "resolved": "https://registry.npmjs.org/is-obj/-/is-obj-1.0.1.tgz",
3094
- "integrity": "sha1-PkcprB9f3gJc19g6iW2rn09n2w8=",
3095
- "dev": true
3096
- },
3097
- "is-png": {
3098
- "version": "1.1.0",
3099
- "resolved": "https://registry.npmjs.org/is-png/-/is-png-1.1.0.tgz",
3100
- "integrity": "sha1-1XSxK/J1wDUEVVcLDltXqwYgd84=",
3101
- "dev": true,
3102
- "optional": true
3103
- },
3104
- "is-posix-bracket": {
3105
- "version": "0.1.1",
3106
- "resolved": "https://registry.npmjs.org/is-posix-bracket/-/is-posix-bracket-0.1.1.tgz",
3107
- "integrity": "sha1-MzTceXdDaOkvAW5vvAqI9c1ua8Q=",
3108
- "dev": true
3109
- },
3110
- "is-primitive": {
3111
- "version": "2.0.0",
3112
- "resolved": "https://registry.npmjs.org/is-primitive/-/is-primitive-2.0.0.tgz",
3113
- "integrity": "sha1-IHurkWOEmcB7Kt8kCkGochADRXU=",
3114
- "dev": true
3115
- },
3116
- "is-redirect": {
3117
- "version": "1.0.0",
3118
- "resolved": "https://registry.npmjs.org/is-redirect/-/is-redirect-1.0.0.tgz",
3119
- "integrity": "sha1-HQPd7VO9jbDzDCbk+V02/HyH3CQ=",
3120
- "dev": true
3121
- },
3122
- "is-relative": {
3123
- "version": "0.1.3",
3124
- "resolved": "https://registry.npmjs.org/is-relative/-/is-relative-0.1.3.tgz",
3125
- "integrity": "sha1-kF/uiuhvRbPsYUvDwVyGnfCHboI=",
3126
- "dev": true
3127
- },
3128
- "is-retry-allowed": {
3129
- "version": "1.1.0",
3130
- "resolved": "https://registry.npmjs.org/is-retry-allowed/-/is-retry-allowed-1.1.0.tgz",
3131
- "integrity": "sha1-EaBgVotnM5REAz0BJaYaINVk+zQ=",
3132
- "dev": true
3133
- },
3134
- "is-stream": {
3135
- "version": "1.1.0",
3136
- "resolved": "https://registry.npmjs.org/is-stream/-/is-stream-1.1.0.tgz",
3137
- "integrity": "sha1-EtSj3U5o4Lec6428hBc66A2RykQ=",
3138
- "dev": true
3139
- },
3140
- "is-svg": {
3141
- "version": "1.1.1",
3142
- "resolved": "https://registry.npmjs.org/is-svg/-/is-svg-1.1.1.tgz",
3143
- "integrity": "sha1-rA76r7ZTrFhHNwix+HNjbKEQ4xs=",
3144
- "dev": true,
3145
- "optional": true
3146
- },
3147
- "is-tar": {
3148
- "version": "1.0.0",
3149
- "resolved": "https://registry.npmjs.org/is-tar/-/is-tar-1.0.0.tgz",
3150
- "integrity": "sha1-L2suF5LB9bs2UZrKqdZcDSb+hT0=",
3151
- "dev": true
3152
- },
3153
- "is-typedarray": {
3154
- "version": "1.0.0",
3155
- "resolved": "https://registry.npmjs.org/is-typedarray/-/is-typedarray-1.0.0.tgz",
3156
- "integrity": "sha1-5HnICFjfDBsR3dppQPlgEfzaSpo=",
3157
- "dev": true,
3158
- "optional": true
3159
- },
3160
- "is-url": {
3161
- "version": "1.2.4",
3162
- "resolved": "https://registry.npmjs.org/is-url/-/is-url-1.2.4.tgz",
3163
- "integrity": "sha512-ITvGim8FhRiYe4IQ5uHSkj7pVaPDrCTkNd3yq3cV7iZAcJdHTUMPMEHcqSOy9xZ9qFenQCvi+2wjH9a1nXqHww==",
3164
- "dev": true
3165
- },
3166
- "is-utf8": {
3167
- "version": "0.2.1",
3168
- "resolved": "https://registry.npmjs.org/is-utf8/-/is-utf8-0.2.1.tgz",
3169
- "integrity": "sha1-Sw2hRCEE0bM2NA6AeX6GXPOffXI=",
3170
- "dev": true
3171
- },
3172
- "is-valid-glob": {
3173
- "version": "0.3.0",
3174
- "resolved": "https://registry.npmjs.org/is-valid-glob/-/is-valid-glob-0.3.0.tgz",
3175
- "integrity": "sha1-1LVcafUYhvm2XHDWwmItN+KfSP4=",
3176
- "dev": true
3177
- },
3178
- "is-zip": {
3179
- "version": "1.0.0",
3180
- "resolved": "https://registry.npmjs.org/is-zip/-/is-zip-1.0.0.tgz",
3181
- "integrity": "sha1-R7Co/004p2QxzP2ZqOFaTIa6IyU=",
3182
- "dev": true
3183
- },
3184
- "isarray": {
3185
- "version": "1.0.0",
3186
- "resolved": "https://registry.npmjs.org/isarray/-/isarray-1.0.0.tgz",
3187
- "integrity": "sha1-u5NdSFgsuhaMBoNJV6VKPgcSTxE=",
3188
- "dev": true
3189
- },
3190
- "isobject": {
3191
- "version": "2.1.0",
3192
- "resolved": "https://registry.npmjs.org/isobject/-/isobject-2.1.0.tgz",
3193
- "integrity": "sha1-8GVWEJaj8dou9GJy+BXIQNh+DIk=",
3194
- "dev": true,
3195
- "requires": {
3196
- "isarray": "1.0.0"
3197
- }
3198
- },
3199
- "isstream": {
3200
- "version": "0.1.2",
3201
- "resolved": "https://registry.npmjs.org/isstream/-/isstream-0.1.2.tgz",
3202
- "integrity": "sha1-R+Y/evVa+m+S4VAOaQ64uFKcCZo=",
3203
- "dev": true,
3204
- "optional": true
3205
- },
3206
- "jit-grunt": {
3207
- "version": "0.10.0",
3208
- "resolved": "https://registry.npmjs.org/jit-grunt/-/jit-grunt-0.10.0.tgz",
3209
- "integrity": "sha1-AIw6f+Hpa9DYTiYOofoXg0V/ecI=",
3210
- "dev": true
3211
- },
3212
- "jpegtran-bin": {
3213
- "version": "3.2.0",
3214
- "resolved": "https://registry.npmjs.org/jpegtran-bin/-/jpegtran-bin-3.2.0.tgz",
3215
- "integrity": "sha1-9g7PSumZwL2tLp+83ytvCYHnops=",
3216
- "dev": true,
3217
- "optional": true,
3218
- "requires": {
3219
- "bin-build": "2.2.0",
3220
- "bin-wrapper": "3.0.2",
3221
- "logalot": "2.1.0"
3222
- }
3223
- },
3224
- "js-base64": {
3225
- "version": "2.4.5",
3226
- "resolved": "https://registry.npmjs.org/js-base64/-/js-base64-2.4.5.tgz",
3227
- "integrity": "sha512-aUnNwqMOXw3yvErjMPSQu6qIIzUmT1e5KcU1OZxRDU1g/am6mzBvcrmLAYwzmB59BHPrh5/tKaiF4OPhqRWESQ==",
3228
- "dev": true
3229
- },
3230
- "js-yaml": {
3231
- "version": "2.0.5",
3232
- "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-2.0.5.tgz",
3233
- "integrity": "sha1-olrmUJmZ6X3yeMZxnaEb0Gh3Q6g=",
3234
- "dev": true,
3235
- "requires": {
3236
- "argparse": "0.1.16",
3237
- "esprima": "1.0.4"
3238
- }
3239
- },
3240
- "jsbn": {
3241
- "version": "0.1.1",
3242
- "resolved": "https://registry.npmjs.org/jsbn/-/jsbn-0.1.1.tgz",
3243
- "integrity": "sha1-peZUwuWi3rXyAdls77yoDA7y9RM=",
3244
- "dev": true,
3245
- "optional": true
3246
- },
3247
- "jshint": {
3248
- "version": "2.9.5",
3249
- "resolved": "https://registry.npmjs.org/jshint/-/jshint-2.9.5.tgz",
3250
- "integrity": "sha1-HnJSkVzmgbQIJ+4UJIxG006apiw=",
3251
- "dev": true,
3252
- "requires": {
3253
- "cli": "1.0.1",
3254
- "console-browserify": "1.1.0",
3255
- "exit": "0.1.2",
3256
- "htmlparser2": "3.8.3",
3257
- "lodash": "3.7.0",
3258
- "minimatch": "3.0.4",
3259
- "shelljs": "0.3.0",
3260
- "strip-json-comments": "1.0.4"
3261
- },
3262
- "dependencies": {
3263
- "lodash": {
3264
- "version": "3.7.0",
3265
- "resolved": "https://registry.npmjs.org/lodash/-/lodash-3.7.0.tgz",
3266
- "integrity": "sha1-Nni9irmVBXwHreg27S7wh9qBHUU=",
3267
- "dev": true
3268
- },
3269
- "minimatch": {
3270
- "version": "3.0.4",
3271
- "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.0.4.tgz",
3272
- "integrity": "sha512-yJHVQEhyqPLUTgt9B83PXu6W3rx4MvvHvSUvToogpwoGDOUQ+yDrR0HRot+yOCdCO7u4hX3pWft6kWBBcqh0UA==",
3273
- "dev": true,
3274
- "requires": {
3275
- "brace-expansion": "1.1.11"
3276
- }
3277
- },
3278
- "strip-json-comments": {
3279
- "version": "1.0.4",
3280
- "resolved": "https://registry.npmjs.org/strip-json-comments/-/strip-json-comments-1.0.4.tgz",
3281
- "integrity": "sha1-HhX7ysl9Pumb8tc7TGVrCCu6+5E=",
3282
- "dev": true
3283
- }
3284
- }
3285
- },
3286
- "json-schema": {
3287
- "version": "0.2.3",
3288
- "resolved": "https://registry.npmjs.org/json-schema/-/json-schema-0.2.3.tgz",
3289
- "integrity": "sha1-tIDIkuWaLwWVTOcnvT8qTogvnhM=",
3290
- "dev": true,
3291
- "optional": true
3292
- },
3293
- "json-schema-traverse": {
3294
- "version": "0.3.1",
3295
- "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-0.3.1.tgz",
3296
- "integrity": "sha1-NJptRMU6Ud6JtAgFxdXlm0F9M0A=",
3297
- "dev": true,
3298
- "optional": true
3299
- },
3300
- "json-stable-stringify": {
3301
- "version": "1.0.1",
3302
- "resolved": "https://registry.npmjs.org/json-stable-stringify/-/json-stable-stringify-1.0.1.tgz",
3303
- "integrity": "sha1-mnWdOcXy/1A/1TAGRu1EX4jE+a8=",
3304
- "dev": true,
3305
- "requires": {
3306
- "jsonify": "0.0.0"
3307
- }
3308
- },
3309
- "json-stringify-safe": {
3310
- "version": "5.0.1",
3311
- "resolved": "https://registry.npmjs.org/json-stringify-safe/-/json-stringify-safe-5.0.1.tgz",
3312
- "integrity": "sha1-Epai1Y/UXxmg9s4B1lcB4sc1tus=",
3313
- "dev": true,
3314
- "optional": true
3315
- },
3316
- "jsonify": {
3317
- "version": "0.0.0",
3318
- "resolved": "https://registry.npmjs.org/jsonify/-/jsonify-0.0.0.tgz",
3319
- "integrity": "sha1-LHS27kHZPKUbe1qu6PUDYx0lKnM=",
3320
- "dev": true
3321
- },
3322
- "jsprim": {
3323
- "version": "1.4.1",
3324
- "resolved": "https://registry.npmjs.org/jsprim/-/jsprim-1.4.1.tgz",
3325
- "integrity": "sha1-MT5mvB5cwG5Di8G3SZwuXFastqI=",
3326
- "dev": true,
3327
- "optional": true,
3328
- "requires": {
3329
- "assert-plus": "1.0.0",
3330
- "extsprintf": "1.3.0",
3331
- "json-schema": "0.2.3",
3332
- "verror": "1.10.0"
3333
- }
3334
- },
3335
- "kind-of": {
3336
- "version": "3.2.2",
3337
- "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz",
3338
- "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=",
3339
- "dev": true,
3340
- "requires": {
3341
- "is-buffer": "1.1.6"
3342
- }
3343
- },
3344
- "lazy-req": {
3345
- "version": "1.1.0",
3346
- "resolved": "https://registry.npmjs.org/lazy-req/-/lazy-req-1.1.0.tgz",
3347
- "integrity": "sha1-va6+rTD42CQDnODOFJ1Nqge6H6w=",
3348
- "dev": true,
3349
- "optional": true
3350
- },
3351
- "lazystream": {
3352
- "version": "1.0.0",
3353
- "resolved": "https://registry.npmjs.org/lazystream/-/lazystream-1.0.0.tgz",
3354
- "integrity": "sha1-9plf4PggOS9hOWvolGJAe7dxaOQ=",
3355
- "dev": true,
3356
- "requires": {
3357
- "readable-stream": "2.3.6"
3358
- }
3359
- },
3360
- "livereload-js": {
3361
- "version": "2.3.0",
3362
- "resolved": "https://registry.npmjs.org/livereload-js/-/livereload-js-2.3.0.tgz",
3363
- "integrity": "sha512-j1R0/FeGa64Y+NmqfZhyoVRzcFlOZ8sNlKzHjh4VvLULFACZhn68XrX5DFg2FhMvSMJmROuFxRSa560ECWKBMg==",
3364
- "dev": true
3365
- },
3366
- "load-grunt-config": {
3367
- "version": "0.19.2",
3368
- "resolved": "https://registry.npmjs.org/load-grunt-config/-/load-grunt-config-0.19.2.tgz",
3369
- "integrity": "sha1-UgkNSiDG5j90p2SPJJsZ57f87CQ=",
3370
- "dev": true,
3371
- "requires": {
3372
- "cson": "3.0.2",
3373
- "glob": "5.0.15",
3374
- "jit-grunt": "0.10.0",
3375
- "js-yaml": "3.4.6",
3376
- "load-grunt-tasks": "3.3.0",
3377
- "lodash": "3.10.1"
3378
- },
3379
- "dependencies": {
3380
- "argparse": {
3381
- "version": "1.0.10",
3382
- "resolved": "https://registry.npmjs.org/argparse/-/argparse-1.0.10.tgz",
3383
- "integrity": "sha512-o5Roy6tNG4SL/FOkCAN6RzjiakZS25RLYFrcMttJqbdd8BWrnA+fGz57iN5Pb06pvBGvl5gQ0B48dJlslXvoTg==",
3384
- "dev": true,
3385
- "requires": {
3386
- "sprintf-js": "1.0.3"
3387
- }
3388
- },
3389
- "esprima": {
3390
- "version": "2.7.3",
3391
- "resolved": "https://registry.npmjs.org/esprima/-/esprima-2.7.3.tgz",
3392
- "integrity": "sha1-luO3DVd59q1JzQMmc9HDEnZ7pYE=",
3393
- "dev": true
3394
- },
3395
- "glob": {
3396
- "version": "5.0.15",
3397
- "resolved": "https://registry.npmjs.org/glob/-/glob-5.0.15.tgz",
3398
- "integrity": "sha1-G8k2ueAvSmA/zCIuz3Yz0wuLk7E=",
3399
- "dev": true,
3400
- "requires": {
3401
- "inflight": "1.0.6",
3402
- "inherits": "2.0.3",
3403
- "minimatch": "3.0.4",
3404
- "once": "1.4.0",
3405
- "path-is-absolute": "1.0.1"
3406
- }
3407
- },
3408
- "js-yaml": {
3409
- "version": "3.4.6",
3410
- "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-3.4.6.tgz",
3411
- "integrity": "sha1-a+GyP2JJ9T0pM3D9TRqqY84bTrA=",
3412
- "dev": true,
3413
- "requires": {
3414
- "argparse": "1.0.10",
3415
- "esprima": "2.7.3",
3416
- "inherit": "2.2.6"
3417
- }
3418
- },
3419
- "lodash": {
3420
- "version": "3.10.1",
3421
- "resolved": "https://registry.npmjs.org/lodash/-/lodash-3.10.1.tgz",
3422
- "integrity": "sha1-W/Rejkm6QYnhfUgnid/RW9FAt7Y=",
3423
- "dev": true
3424
- },
3425
- "minimatch": {
3426
- "version": "3.0.4",
3427
- "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.0.4.tgz",
3428
- "integrity": "sha512-yJHVQEhyqPLUTgt9B83PXu6W3rx4MvvHvSUvToogpwoGDOUQ+yDrR0HRot+yOCdCO7u4hX3pWft6kWBBcqh0UA==",
3429
- "dev": true,
3430
- "requires": {
3431
- "brace-expansion": "1.1.11"
3432
- }
3433
- }
3434
- }
3435
- },
3436
- "load-grunt-tasks": {
3437
- "version": "3.3.0",
3438
- "resolved": "https://registry.npmjs.org/load-grunt-tasks/-/load-grunt-tasks-3.3.0.tgz",
3439
- "integrity": "sha1-vliSkJRY2T3fdp60vGhRAggMYyE=",
3440
- "dev": true,
3441
- "requires": {
3442
- "arrify": "1.0.1",
3443
- "multimatch": "2.1.0",
3444
- "pkg-up": "1.0.0"
3445
- }
3446
- },
3447
- "load-json-file": {
3448
- "version": "1.1.0",
3449
- "resolved": "https://registry.npmjs.org/load-json-file/-/load-json-file-1.1.0.tgz",
3450
- "integrity": "sha1-lWkFcI1YtLq0wiYbBPWfMcmTdMA=",
3451
- "dev": true,
3452
- "requires": {
3453
- "graceful-fs": "4.1.11",
3454
- "parse-json": "2.2.0",
3455
- "pify": "2.3.0",
3456
- "pinkie-promise": "2.0.1",
3457
- "strip-bom": "2.0.0"
3458
- },
3459
- "dependencies": {
3460
- "graceful-fs": {
3461
- "version": "4.1.11",
3462
- "resolved": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.1.11.tgz",
3463
- "integrity": "sha1-Dovf5NHduIVNZOBOp8AOKgJuVlg=",
3464
- "dev": true
3465
- }
3466
- }
3467
- },
3468
- "load-project-config": {
3469
- "version": "0.2.1",
3470
- "resolved": "https://registry.npmjs.org/load-project-config/-/load-project-config-0.2.1.tgz",
3471
- "integrity": "sha1-RcVdj27krPMxSpd9YYd+MHf/5pc=",
3472
- "dev": true,
3473
- "requires": {
3474
- "load-grunt-config": "0.19.2",
3475
- "lodash": "3.10.1",
3476
- "time-grunt": "1.4.0"
3477
- },
3478
- "dependencies": {
3479
- "lodash": {
3480
- "version": "3.10.1",
3481
- "resolved": "https://registry.npmjs.org/lodash/-/lodash-3.10.1.tgz",
3482
- "integrity": "sha1-W/Rejkm6QYnhfUgnid/RW9FAt7Y=",
3483
- "dev": true
3484
- }
3485
- }
3486
- },
3487
- "lodash": {
3488
- "version": "0.9.2",
3489
- "resolved": "https://registry.npmjs.org/lodash/-/lodash-0.9.2.tgz",
3490
- "integrity": "sha1-jzSZxSRdNG1oLlsNO0B2fgnxqSw=",
3491
- "dev": true
3492
- },
3493
- "lodash._basecopy": {
3494
- "version": "3.0.1",
3495
- "resolved": "https://registry.npmjs.org/lodash._basecopy/-/lodash._basecopy-3.0.1.tgz",
3496
- "integrity": "sha1-jaDmqHbPNEwK2KVIghEd08XHyjY=",
3497
- "dev": true
3498
- },
3499
- "lodash._basetostring": {
3500
- "version": "3.0.1",
3501
- "resolved": "https://registry.npmjs.org/lodash._basetostring/-/lodash._basetostring-3.0.1.tgz",
3502
- "integrity": "sha1-0YYdh3+CSlL2aYMtyvPuFVZqB9U=",
3503
- "dev": true
3504
- },
3505
- "lodash._basevalues": {
3506
- "version": "3.0.0",
3507
- "resolved": "https://registry.npmjs.org/lodash._basevalues/-/lodash._basevalues-3.0.0.tgz",
3508
- "integrity": "sha1-W3dXYoAr3j0yl1A+JjAIIP32Ybc=",
3509
- "dev": true
3510
- },
3511
- "lodash._getnative": {
3512
- "version": "3.9.1",
3513
- "resolved": "https://registry.npmjs.org/lodash._getnative/-/lodash._getnative-3.9.1.tgz",
3514
- "integrity": "sha1-VwvH3t5G1hzc3mh9ZdPuy6o6r/U=",
3515
- "dev": true
3516
- },
3517
- "lodash._isiterateecall": {
3518
- "version": "3.0.9",
3519
- "resolved": "https://registry.npmjs.org/lodash._isiterateecall/-/lodash._isiterateecall-3.0.9.tgz",
3520
- "integrity": "sha1-UgOte6Ql+uhCRg5pbbnPPmqsBXw=",
3521
- "dev": true
3522
- },
3523
- "lodash._reescape": {
3524
- "version": "3.0.0",
3525
- "resolved": "https://registry.npmjs.org/lodash._reescape/-/lodash._reescape-3.0.0.tgz",
3526
- "integrity": "sha1-Kx1vXf4HyKNVdT5fJ/rH8c3hYWo=",
3527
- "dev": true
3528
- },
3529
- "lodash._reevaluate": {
3530
- "version": "3.0.0",
3531
- "resolved": "https://registry.npmjs.org/lodash._reevaluate/-/lodash._reevaluate-3.0.0.tgz",
3532
- "integrity": "sha1-WLx0xAZklTrgsSTYBpltrKQx4u0=",
3533
- "dev": true
3534
- },
3535
- "lodash._reinterpolate": {
3536
- "version": "3.0.0",
3537
- "resolved": "https://registry.npmjs.org/lodash._reinterpolate/-/lodash._reinterpolate-3.0.0.tgz",
3538
- "integrity": "sha1-DM8tiRZq8Ds2Y8eWU4t1rG4RTZ0=",
3539
- "dev": true
3540
- },
3541
- "lodash._root": {
3542
- "version": "3.0.1",
3543
- "resolved": "https://registry.npmjs.org/lodash._root/-/lodash._root-3.0.1.tgz",
3544
- "integrity": "sha1-+6HEUkwZ7ppfgTa0YJ8BfPTe1pI=",
3545
- "dev": true
3546
- },
3547
- "lodash.escape": {
3548
- "version": "3.2.0",
3549
- "resolved": "https://registry.npmjs.org/lodash.escape/-/lodash.escape-3.2.0.tgz",
3550
- "integrity": "sha1-mV7g3BjBtIzJLv+ucaEKq1tIdpg=",
3551
- "dev": true,
3552
- "requires": {
3553
- "lodash._root": "3.0.1"
3554
- }
3555
- },
3556
- "lodash.isarguments": {
3557
- "version": "3.1.0",
3558
- "resolved": "https://registry.npmjs.org/lodash.isarguments/-/lodash.isarguments-3.1.0.tgz",
3559
- "integrity": "sha1-L1c9hcaiQon/AGY7SRwdM4/zRYo=",
3560
- "dev": true
3561
- },
3562
- "lodash.isarray": {
3563
- "version": "3.0.4",
3564
- "resolved": "https://registry.npmjs.org/lodash.isarray/-/lodash.isarray-3.0.4.tgz",
3565
- "integrity": "sha1-eeTriMNqgSKvhvhEqpvNhRtfu1U=",
3566
- "dev": true
3567
- },
3568
- "lodash.isequal": {
3569
- "version": "4.5.0",
3570
- "resolved": "https://registry.npmjs.org/lodash.isequal/-/lodash.isequal-4.5.0.tgz",
3571
- "integrity": "sha1-QVxEePK8wwEgwizhDtMib30+GOA=",
3572
- "dev": true
3573
- },
3574
- "lodash.keys": {
3575
- "version": "3.1.2",
3576
- "resolved": "https://registry.npmjs.org/lodash.keys/-/lodash.keys-3.1.2.tgz",
3577
- "integrity": "sha1-TbwEcrFWvlCgsoaFXRvQsMZWCYo=",
3578
- "dev": true,
3579
- "requires": {
3580
- "lodash._getnative": "3.9.1",
3581
- "lodash.isarguments": "3.1.0",
3582
- "lodash.isarray": "3.0.4"
3583
- }
3584
- },
3585
- "lodash.restparam": {
3586
- "version": "3.6.1",
3587
- "resolved": "https://registry.npmjs.org/lodash.restparam/-/lodash.restparam-3.6.1.tgz",
3588
- "integrity": "sha1-k2pOMJ7zMKdkXtQUWYbIWuWyCAU=",
3589
- "dev": true
3590
- },
3591
- "lodash.template": {
3592
- "version": "3.6.2",
3593
- "resolved": "https://registry.npmjs.org/lodash.template/-/lodash.template-3.6.2.tgz",
3594
- "integrity": "sha1-+M3sxhaaJVvpCYrosMU9N4kx0U8=",
3595
- "dev": true,
3596
- "requires": {
3597
- "lodash._basecopy": "3.0.1",
3598
- "lodash._basetostring": "3.0.1",
3599
- "lodash._basevalues": "3.0.0",
3600
- "lodash._isiterateecall": "3.0.9",
3601
- "lodash._reinterpolate": "3.0.0",
3602
- "lodash.escape": "3.2.0",
3603
- "lodash.keys": "3.1.2",
3604
- "lodash.restparam": "3.6.1",
3605
- "lodash.templatesettings": "3.1.1"
3606
- }
3607
- },
3608
- "lodash.templatesettings": {
3609
- "version": "3.1.1",
3610
- "resolved": "https://registry.npmjs.org/lodash.templatesettings/-/lodash.templatesettings-3.1.1.tgz",
3611
- "integrity": "sha1-+zB4RHU7Zrnxr6VOJix0UwfbqOU=",
3612
- "dev": true,
3613
- "requires": {
3614
- "lodash._reinterpolate": "3.0.0",
3615
- "lodash.escape": "3.2.0"
3616
- }
3617
- },
3618
- "logalot": {
3619
- "version": "2.1.0",
3620
- "resolved": "https://registry.npmjs.org/logalot/-/logalot-2.1.0.tgz",
3621
- "integrity": "sha1-X46MkNME7fElMJUaVVSruMXj9VI=",
3622
- "dev": true,
3623
- "optional": true,
3624
- "requires": {
3625
- "figures": "1.7.0",
3626
- "squeak": "1.3.0"
3627
- }
3628
- },
3629
- "longest": {
3630
- "version": "1.0.1",
3631
- "resolved": "https://registry.npmjs.org/longest/-/longest-1.0.1.tgz",
3632
- "integrity": "sha1-MKCy2jj3N3DoKUoNIuZiXtd9AJc=",
3633
- "dev": true,
3634
- "optional": true
3635
- },
3636
- "loud-rejection": {
3637
- "version": "1.6.0",
3638
- "resolved": "https://registry.npmjs.org/loud-rejection/-/loud-rejection-1.6.0.tgz",
3639
- "integrity": "sha1-W0b4AUft7leIcPCG0Eghz5mOVR8=",
3640
- "dev": true,
3641
- "requires": {
3642
- "currently-unhandled": "0.4.1",
3643
- "signal-exit": "3.0.2"
3644
- }
3645
- },
3646
- "lowercase-keys": {
3647
- "version": "1.0.1",
3648
- "resolved": "https://registry.npmjs.org/lowercase-keys/-/lowercase-keys-1.0.1.tgz",
3649
- "integrity": "sha512-G2Lj61tXDnVFFOi8VZds+SoQjtQC3dgokKdDG2mTm1tx4m50NUHBOZSBwQQHyy0V12A0JTG4icfZQH+xPyh8VA==",
3650
- "dev": true
3651
- },
3652
- "lpad-align": {
3653
- "version": "1.1.2",
3654
- "resolved": "https://registry.npmjs.org/lpad-align/-/lpad-align-1.1.2.tgz",
3655
- "integrity": "sha1-IfYArBwwlcPG5JfuZyce4ISB/p4=",
3656
- "dev": true,
3657
- "optional": true,
3658
- "requires": {
3659
- "get-stdin": "4.0.1",
3660
- "indent-string": "2.1.0",
3661
- "longest": "1.0.1",
3662
- "meow": "3.7.0"
3663
- }
3664
- },
3665
- "lru-cache": {
3666
- "version": "2.7.3",
3667
- "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-2.7.3.tgz",
3668
- "integrity": "sha1-bUUk6LlV+V1PW1iFHOId1y+06VI=",
3669
- "dev": true
3670
- },
3671
- "map-obj": {
3672
- "version": "1.0.1",
3673
- "resolved": "https://registry.npmjs.org/map-obj/-/map-obj-1.0.1.tgz",
3674
- "integrity": "sha1-2TPOuSBdgr3PSIb2dCvcK03qFG0=",
3675
- "dev": true
3676
- },
3677
- "math-random": {
3678
- "version": "1.0.1",
3679
- "resolved": "https://registry.npmjs.org/math-random/-/math-random-1.0.1.tgz",
3680
- "integrity": "sha1-izqsWIuKZuSXXjzepn97sylgH6w=",
3681
- "dev": true
3682
- },
3683
- "md5-file": {
3684
- "version": "2.0.7",
3685
- "resolved": "https://registry.npmjs.org/md5-file/-/md5-file-2.0.7.tgz",
3686
- "integrity": "sha1-MH94vQTMsFTkZ+xmHPpamv3J8hA=",
3687
- "dev": true
3688
- },
3689
- "meow": {
3690
- "version": "3.7.0",
3691
- "resolved": "https://registry.npmjs.org/meow/-/meow-3.7.0.tgz",
3692
- "integrity": "sha1-cstmi0JSKCkKu/qFaJJYcwioAfs=",
3693
- "dev": true,
3694
- "requires": {
3695
- "camelcase-keys": "2.1.0",
3696
- "decamelize": "1.2.0",
3697
- "loud-rejection": "1.6.0",
3698
- "map-obj": "1.0.1",
3699
- "minimist": "1.2.0",
3700
- "normalize-package-data": "2.4.0",
3701
- "object-assign": "4.1.1",
3702
- "read-pkg-up": "1.0.1",
3703
- "redent": "1.0.0",
3704
- "trim-newlines": "1.0.0"
3705
- },
3706
- "dependencies": {
3707
- "minimist": {
3708
- "version": "1.2.0",
3709
- "resolved": "https://registry.npmjs.org/minimist/-/minimist-1.2.0.tgz",
3710
- "integrity": "sha1-o1AIsg9BOD7sH7kU9M1d95omQoQ=",
3711
- "dev": true
3712
- }
3713
- }
3714
- },
3715
- "merge-stream": {
3716
- "version": "1.0.1",
3717
- "resolved": "https://registry.npmjs.org/merge-stream/-/merge-stream-1.0.1.tgz",
3718
- "integrity": "sha1-QEEgLVCKNCugAXQAjfDCUbjBNeE=",
3719
- "dev": true,
3720
- "requires": {
3721
- "readable-stream": "2.3.6"
3722
- }
3723
- },
3724
- "micromatch": {
3725
- "version": "2.3.11",
3726
- "resolved": "https://registry.npmjs.org/micromatch/-/micromatch-2.3.11.tgz",
3727
- "integrity": "sha1-hmd8l9FyCzY0MdBNDRUpO9OMFWU=",
3728
- "dev": true,
3729
- "requires": {
3730
- "arr-diff": "2.0.0",
3731
- "array-unique": "0.2.1",
3732
- "braces": "1.8.5",
3733
- "expand-brackets": "0.1.5",
3734
- "extglob": "0.3.2",
3735
- "filename-regex": "2.0.1",
3736
- "is-extglob": "1.0.0",
3737
- "is-glob": "2.0.1",
3738
- "kind-of": "3.2.2",
3739
- "normalize-path": "2.1.1",
3740
- "object.omit": "2.0.1",
3741
- "parse-glob": "3.0.4",
3742
- "regex-cache": "0.4.4"
3743
- },
3744
- "dependencies": {
3745
- "is-extglob": {
3746
- "version": "1.0.0",
3747
- "resolved": "https://registry.npmjs.org/is-extglob/-/is-extglob-1.0.0.tgz",
3748
- "integrity": "sha1-rEaBd8SUNAWgkvyPKXYMb/xiBsA=",
3749
- "dev": true
3750
- },
3751
- "is-glob": {
3752
- "version": "2.0.1",
3753
- "resolved": "https://registry.npmjs.org/is-glob/-/is-glob-2.0.1.tgz",
3754
- "integrity": "sha1-0Jb5JqPe1WAPP9/ZEZjLCIjC2GM=",
3755
- "dev": true,
3756
- "requires": {
3757
- "is-extglob": "1.0.0"
3758
- }
3759
- }
3760
- }
3761
- },
3762
- "mime-db": {
3763
- "version": "1.33.0",
3764
- "resolved": "https://registry.npmjs.org/mime-db/-/mime-db-1.33.0.tgz",
3765
- "integrity": "sha512-BHJ/EKruNIqJf/QahvxwQZXKygOQ256myeN/Ew+THcAa5q+PjyTTMMeNQC4DZw5AwfvelsUrA6B67NKMqXDbzQ==",
3766
- "dev": true
3767
- },
3768
- "mime-types": {
3769
- "version": "2.1.18",
3770
- "resolved": "https://registry.npmjs.org/mime-types/-/mime-types-2.1.18.tgz",
3771
- "integrity": "sha512-lc/aahn+t4/SWV/qcmumYjymLsWfN3ELhpmVuUFjgsORruuZPVSwAQryq+HHGvO/SI2KVX26bx+En+zhM8g8hQ==",
3772
- "dev": true,
3773
- "requires": {
3774
- "mime-db": "1.33.0"
3775
- }
3776
- },
3777
- "mimic-response": {
3778
- "version": "1.0.0",
3779
- "resolved": "https://registry.npmjs.org/mimic-response/-/mimic-response-1.0.0.tgz",
3780
- "integrity": "sha1-3z02Uqc/3ta5sLJBRub9BSNTRY4=",
3781
- "dev": true,
3782
- "optional": true
3783
- },
3784
- "minimatch": {
3785
- "version": "0.2.14",
3786
- "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-0.2.14.tgz",
3787
- "integrity": "sha1-x054BXT2PG+aCQ6Q775u9TpqdWo=",
3788
- "dev": true,
3789
- "requires": {
3790
- "lru-cache": "2.7.3",
3791
- "sigmund": "1.0.1"
3792
- }
3793
- },
3794
- "minimist": {
3795
- "version": "0.0.8",
3796
- "resolved": "https://registry.npmjs.org/minimist/-/minimist-0.0.8.tgz",
3797
- "integrity": "sha1-hX/Kv8M5fSYluCKCYuhqp6ARsF0=",
3798
- "dev": true
3799
- },
3800
- "mkdirp": {
3801
- "version": "0.5.1",
3802
- "resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-0.5.1.tgz",
3803
- "integrity": "sha1-MAV0OOrGz3+MR2fzhkjWaX11yQM=",
3804
- "dev": true,
3805
- "requires": {
3806
- "minimist": "0.0.8"
3807
- }
3808
- },
3809
- "ms": {
3810
- "version": "2.0.0",
3811
- "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz",
3812
- "integrity": "sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g=",
3813
- "dev": true
3814
- },
3815
- "multimatch": {
3816
- "version": "2.1.0",
3817
- "resolved": "https://registry.npmjs.org/multimatch/-/multimatch-2.1.0.tgz",
3818
- "integrity": "sha1-nHkGoi+0wCkZ4vX3UWG0zb1LKis=",
3819
- "dev": true,
3820
- "requires": {
3821
- "array-differ": "1.0.0",
3822
- "array-union": "1.0.2",
3823
- "arrify": "1.0.1",
3824
- "minimatch": "3.0.4"
3825
- },
3826
- "dependencies": {
3827
- "minimatch": {
3828
- "version": "3.0.4",
3829
- "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.0.4.tgz",
3830
- "integrity": "sha512-yJHVQEhyqPLUTgt9B83PXu6W3rx4MvvHvSUvToogpwoGDOUQ+yDrR0HRot+yOCdCO7u4hX3pWft6kWBBcqh0UA==",
3831
- "dev": true,
3832
- "requires": {
3833
- "brace-expansion": "1.1.11"
3834
- }
3835
- }
3836
- }
3837
- },
3838
- "multipipe": {
3839
- "version": "0.1.2",
3840
- "resolved": "https://registry.npmjs.org/multipipe/-/multipipe-0.1.2.tgz",
3841
- "integrity": "sha1-Ko8t33Du1WTf8tV/HhoTfZ8FB4s=",
3842
- "dev": true,
3843
- "requires": {
3844
- "duplexer2": "0.0.2"
3845
- },
3846
- "dependencies": {
3847
- "duplexer2": {
3848
- "version": "0.0.2",
3849
- "resolved": "https://registry.npmjs.org/duplexer2/-/duplexer2-0.0.2.tgz",
3850
- "integrity": "sha1-xhTc9n4vsUmVqRcR5aYX6KYKMds=",
3851
- "dev": true,
3852
- "requires": {
3853
- "readable-stream": "1.1.14"
3854
- }
3855
- },
3856
- "isarray": {
3857
- "version": "0.0.1",
3858
- "resolved": "https://registry.npmjs.org/isarray/-/isarray-0.0.1.tgz",
3859
- "integrity": "sha1-ihis/Kmo9Bd+Cav8YDiTmwXR7t8=",
3860
- "dev": true
3861
- },
3862
- "readable-stream": {
3863
- "version": "1.1.14",
3864
- "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-1.1.14.tgz",
3865
- "integrity": "sha1-fPTFTvZI44EwhMY23SB54WbAgdk=",
3866
- "dev": true,
3867
- "requires": {
3868
- "core-util-is": "1.0.2",
3869
- "inherits": "2.0.3",
3870
- "isarray": "0.0.1",
3871
- "string_decoder": "0.10.31"
3872
- }
3873
- },
3874
- "string_decoder": {
3875
- "version": "0.10.31",
3876
- "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-0.10.31.tgz",
3877
- "integrity": "sha1-YuIDvEF2bGwoyfyEMB2rHFMQ+pQ=",
3878
- "dev": true
3879
- }
3880
- }
3881
- },
3882
- "nan": {
3883
- "version": "2.10.0",
3884
- "resolved": "https://registry.npmjs.org/nan/-/nan-2.10.0.tgz",
3885
- "integrity": "sha512-bAdJv7fBLhWC+/Bls0Oza+mvTaNQtP+1RyhhhvD95pgUJz6XM5IzgmxOkItJ9tkoCiplvAnXI1tNmmUD/eScyA==",
3886
- "dev": true,
3887
- "optional": true
3888
- },
3889
- "node-abi": {
3890
- "version": "2.4.1",
3891
- "resolved": "https://registry.npmjs.org/node-abi/-/node-abi-2.4.1.tgz",
3892
- "integrity": "sha512-pUlswqpHQ7zGPI9lGjZ4XDNIEUDbHxsltfIRb7dTnYdhgHWHOcB0MLZKLoCz6UMcGzSPG5wGl1HODZVQAUsH6w==",
3893
- "dev": true,
3894
- "optional": true,
3895
- "requires": {
3896
- "semver": "5.5.0"
3897
- },
3898
- "dependencies": {
3899
- "semver": {
3900
- "version": "5.5.0",
3901
- "resolved": "https://registry.npmjs.org/semver/-/semver-5.5.0.tgz",
3902
- "integrity": "sha512-4SJ3dm0WAwWy/NVeioZh5AntkdJoWKxHxcmyP622fOkgHa4z3R0TdBJICINyaSDE6uNwVc8gZr+ZinwZAH4xIA==",
3903
- "dev": true,
3904
- "optional": true
3905
- }
3906
- }
3907
- },
3908
- "node-gyp": {
3909
- "version": "3.6.2",
3910
- "resolved": "https://registry.npmjs.org/node-gyp/-/node-gyp-3.6.2.tgz",
3911
- "integrity": "sha1-m/vlRWIoYoSDjnUOrAUpWFP6HGA=",
3912
- "dev": true,
3913
- "optional": true,
3914
- "requires": {
3915
- "fstream": "1.0.11",
3916
- "glob": "7.1.2",
3917
- "graceful-fs": "4.1.11",
3918
- "minimatch": "3.0.4",
3919
- "mkdirp": "0.5.1",
3920
- "nopt": "3.0.6",
3921
- "npmlog": "4.1.2",
3922
- "osenv": "0.1.5",
3923
- "request": "2.87.0",
3924
- "rimraf": "2.2.8",
3925
- "semver": "5.3.0",
3926
- "tar": "2.2.1",
3927
- "which": "1.0.9"
3928
- },
3929
- "dependencies": {
3930
- "glob": {
3931
- "version": "7.1.2",
3932
- "resolved": "https://registry.npmjs.org/glob/-/glob-7.1.2.tgz",
3933
- "integrity": "sha512-MJTUg1kjuLeQCJ+ccE4Vpa6kKVXkPYJ2mOCQyUuKLcLQsdrMCpBPUi8qVE6+YuaJkozeA9NusTAw3hLr8Xe5EQ==",
3934
- "dev": true,
3935
- "optional": true,
3936
- "requires": {
3937
- "fs.realpath": "1.0.0",
3938
- "inflight": "1.0.6",
3939
- "inherits": "2.0.3",
3940
- "minimatch": "3.0.4",
3941
- "once": "1.4.0",
3942
- "path-is-absolute": "1.0.1"
3943
- }
3944
- },
3945
- "graceful-fs": {
3946
- "version": "4.1.11",
3947
- "resolved": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.1.11.tgz",
3948
- "integrity": "sha1-Dovf5NHduIVNZOBOp8AOKgJuVlg=",
3949
- "dev": true,
3950
- "optional": true
3951
- },
3952
- "minimatch": {
3953
- "version": "3.0.4",
3954
- "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.0.4.tgz",
3955
- "integrity": "sha512-yJHVQEhyqPLUTgt9B83PXu6W3rx4MvvHvSUvToogpwoGDOUQ+yDrR0HRot+yOCdCO7u4hX3pWft6kWBBcqh0UA==",
3956
- "dev": true,
3957
- "requires": {
3958
- "brace-expansion": "1.1.11"
3959
- }
3960
- },
3961
- "nopt": {
3962
- "version": "3.0.6",
3963
- "resolved": "https://registry.npmjs.org/nopt/-/nopt-3.0.6.tgz",
3964
- "integrity": "sha1-xkZdvwirzU2zWTF/eaxopkayj/k=",
3965
- "dev": true,
3966
- "optional": true,
3967
- "requires": {
3968
- "abbrev": "1.1.1"
3969
- }
3970
- }
3971
- }
3972
- },
3973
- "node-status-codes": {
3974
- "version": "1.0.0",
3975
- "resolved": "https://registry.npmjs.org/node-status-codes/-/node-status-codes-1.0.0.tgz",
3976
- "integrity": "sha1-WuVUHQJGRdMqWPzdyc7s6nrjrC8=",
3977
- "dev": true
3978
- },
3979
- "node-uuid": {
3980
- "version": "1.4.0",
3981
- "resolved": "https://registry.npmjs.org/node-uuid/-/node-uuid-1.4.0.tgz",
3982
- "integrity": "sha1-B/myM3Vy/2J1x3Xh1IUT86RdemU=",
3983
- "dev": true
3984
- },
3985
- "noop-logger": {
3986
- "version": "0.1.1",
3987
- "resolved": "https://registry.npmjs.org/noop-logger/-/noop-logger-0.1.1.tgz",
3988
- "integrity": "sha1-lKKxYzxPExdVMAfYlm/Q6EG2pMI=",
3989
- "dev": true,
3990
- "optional": true
3991
- },
3992
- "nopt": {
3993
- "version": "1.0.10",
3994
- "resolved": "https://registry.npmjs.org/nopt/-/nopt-1.0.10.tgz",
3995
- "integrity": "sha1-bd0hvSoxQXuScn3Vhfim83YI6+4=",
3996
- "dev": true,
3997
- "requires": {
3998
- "abbrev": "1.1.1"
3999
- }
4000
- },
4001
- "normalize-package-data": {
4002
- "version": "2.4.0",
4003
- "resolved": "https://registry.npmjs.org/normalize-package-data/-/normalize-package-data-2.4.0.tgz",
4004
- "integrity": "sha512-9jjUFbTPfEy3R/ad/2oNbKtW9Hgovl5O1FvFWKkKblNXoN/Oou6+9+KKohPK13Yc3/TyunyWhJp6gvRNR/PPAw==",
4005
- "dev": true,
4006
- "requires": {
4007
- "hosted-git-info": "2.6.0",
4008
- "is-builtin-module": "1.0.0",
4009
- "semver": "5.3.0",
4010
- "validate-npm-package-license": "3.0.3"
4011
- }
4012
- },
4013
- "normalize-path": {
4014
- "version": "2.1.1",
4015
- "resolved": "https://registry.npmjs.org/normalize-path/-/normalize-path-2.1.1.tgz",
4016
- "integrity": "sha1-GrKLVW4Zg2Oowab35vogE3/mrtk=",
4017
- "dev": true,
4018
- "requires": {
4019
- "remove-trailing-separator": "1.1.0"
4020
- }
4021
- },
4022
- "normalize-range": {
4023
- "version": "0.1.2",
4024
- "resolved": "https://registry.npmjs.org/normalize-range/-/normalize-range-0.1.2.tgz",
4025
- "integrity": "sha1-LRDAa9/TEuqXd2laTShDlFa3WUI=",
4026
- "dev": true
4027
- },
4028
- "npmlog": {
4029
- "version": "4.1.2",
4030
- "resolved": "https://registry.npmjs.org/npmlog/-/npmlog-4.1.2.tgz",
4031
- "integrity": "sha512-2uUqazuKlTaSI/dC8AzicUck7+IrEaOnN/e0jd3Xtt1KcGpwx30v50mL7oPyr/h9bL3E4aZccVwpwP+5W9Vjkg==",
4032
- "dev": true,
4033
- "requires": {
4034
- "are-we-there-yet": "1.1.5",
4035
- "console-control-strings": "1.1.0",
4036
- "gauge": "2.7.4",
4037
- "set-blocking": "2.0.0"
4038
- }
4039
- },
4040
- "num2fraction": {
4041
- "version": "1.2.2",
4042
- "resolved": "https://registry.npmjs.org/num2fraction/-/num2fraction-1.2.2.tgz",
4043
- "integrity": "sha1-b2gragJ6Tp3fpFZM0lidHU5mnt4=",
4044
- "dev": true
4045
- },
4046
- "number-is-nan": {
4047
- "version": "1.0.1",
4048
- "resolved": "https://registry.npmjs.org/number-is-nan/-/number-is-nan-1.0.1.tgz",
4049
- "integrity": "sha1-CXtgK1NCKlIsGvuHkDGDNpQaAR0=",
4050
- "dev": true
4051
- },
4052
- "oauth-sign": {
4053
- "version": "0.8.2",
4054
- "resolved": "https://registry.npmjs.org/oauth-sign/-/oauth-sign-0.8.2.tgz",
4055
- "integrity": "sha1-Rqarfwrq2N6unsBWV4C31O/rnUM=",
4056
- "dev": true,
4057
- "optional": true
4058
- },
4059
- "object-assign": {
4060
- "version": "4.1.1",
4061
- "resolved": "https://registry.npmjs.org/object-assign/-/object-assign-4.1.1.tgz",
4062
- "integrity": "sha1-IQmtx5ZYh8/AXLvUQsrIv7s2CGM=",
4063
- "dev": true
4064
- },
4065
- "object.omit": {
4066
- "version": "2.0.1",
4067
- "resolved": "https://registry.npmjs.org/object.omit/-/object.omit-2.0.1.tgz",
4068
- "integrity": "sha1-Gpx0SCnznbuFjHbKNXmuKlTr0fo=",
4069
- "dev": true,
4070
- "requires": {
4071
- "for-own": "0.1.5",
4072
- "is-extendable": "0.1.1"
4073
- }
4074
- },
4075
- "once": {
4076
- "version": "1.4.0",
4077
- "resolved": "https://registry.npmjs.org/once/-/once-1.4.0.tgz",
4078
- "integrity": "sha1-WDsap3WWHUsROsF9nFC6753Xa9E=",
4079
- "dev": true,
4080
- "requires": {
4081
- "wrappy": "1.0.2"
4082
- }
4083
- },
4084
- "onetime": {
4085
- "version": "1.1.0",
4086
- "resolved": "http://registry.npmjs.org/onetime/-/onetime-1.1.0.tgz",
4087
- "integrity": "sha1-ofeDj4MUxRbwXs78vEzP4EtO14k=",
4088
- "dev": true
4089
- },
4090
- "optional": {
4091
- "version": "0.1.4",
4092
- "resolved": "https://registry.npmjs.org/optional/-/optional-0.1.4.tgz",
4093
- "integrity": "sha512-gtvrrCfkE08wKcgXaVwQVgwEQ8vel2dc5DDBn9RLQZ3YtmtkBss6A2HY6BnJH4N/4Ku97Ri/SF8sNWE2225WJw==",
4094
- "dev": true
4095
- },
4096
- "optipng-bin": {
4097
- "version": "3.1.4",
4098
- "resolved": "https://registry.npmjs.org/optipng-bin/-/optipng-bin-3.1.4.tgz",
4099
- "integrity": "sha1-ldNPLEiHBPb9cGBr/qDGWfHZXYQ=",
4100
- "dev": true,
4101
- "optional": true,
4102
- "requires": {
4103
- "bin-build": "2.2.0",
4104
- "bin-wrapper": "3.0.2",
4105
- "logalot": "2.1.0"
4106
- }
4107
- },
4108
- "ordered-read-streams": {
4109
- "version": "0.3.0",
4110
- "resolved": "https://registry.npmjs.org/ordered-read-streams/-/ordered-read-streams-0.3.0.tgz",
4111
- "integrity": "sha1-cTfmmzKYuzQiR6G77jiByA4v14s=",
4112
- "dev": true,
4113
- "requires": {
4114
- "is-stream": "1.1.0",
4115
- "readable-stream": "2.3.6"
4116
- }
4117
- },
4118
- "os-filter-obj": {
4119
- "version": "1.0.3",
4120
- "resolved": "https://registry.npmjs.org/os-filter-obj/-/os-filter-obj-1.0.3.tgz",
4121
- "integrity": "sha1-WRUzDZDs7VV9LZOKMcbdIU2cY60=",
4122
- "dev": true,
4123
- "optional": true
4124
- },
4125
- "os-homedir": {
4126
- "version": "1.0.2",
4127
- "resolved": "https://registry.npmjs.org/os-homedir/-/os-homedir-1.0.2.tgz",
4128
- "integrity": "sha1-/7xJiDNuDoM94MFox+8VISGqf7M=",
4129
- "dev": true
4130
- },
4131
- "os-tmpdir": {
4132
- "version": "1.0.2",
4133
- "resolved": "https://registry.npmjs.org/os-tmpdir/-/os-tmpdir-1.0.2.tgz",
4134
- "integrity": "sha1-u+Z0BseaqFxc/sdm/lc0VV36EnQ=",
4135
- "dev": true
4136
- },
4137
- "osenv": {
4138
- "version": "0.1.5",
4139
- "resolved": "https://registry.npmjs.org/osenv/-/osenv-0.1.5.tgz",
4140
- "integrity": "sha512-0CWcCECdMVc2Rw3U5w9ZjqX6ga6ubk1xDVKxtBQPK7wis/0F2r9T6k4ydGYhecl7YUBxBVxhL5oisPsNxAPe2g==",
4141
- "dev": true,
4142
- "optional": true,
4143
- "requires": {
4144
- "os-homedir": "1.0.2",
4145
- "os-tmpdir": "1.0.2"
4146
- }
4147
- },
4148
- "parse-glob": {
4149
- "version": "3.0.4",
4150
- "resolved": "https://registry.npmjs.org/parse-glob/-/parse-glob-3.0.4.tgz",
4151
- "integrity": "sha1-ssN2z7EfNVE7rdFz7wu246OIORw=",
4152
- "dev": true,
4153
- "requires": {
4154
- "glob-base": "0.3.0",
4155
- "is-dotfile": "1.0.3",
4156
- "is-extglob": "1.0.0",
4157
- "is-glob": "2.0.1"
4158
- },
4159
- "dependencies": {
4160
- "is-extglob": {
4161
- "version": "1.0.0",
4162
- "resolved": "https://registry.npmjs.org/is-extglob/-/is-extglob-1.0.0.tgz",
4163
- "integrity": "sha1-rEaBd8SUNAWgkvyPKXYMb/xiBsA=",
4164
- "dev": true
4165
- },
4166
- "is-glob": {
4167
- "version": "2.0.1",
4168
- "resolved": "https://registry.npmjs.org/is-glob/-/is-glob-2.0.1.tgz",
4169
- "integrity": "sha1-0Jb5JqPe1WAPP9/ZEZjLCIjC2GM=",
4170
- "dev": true,
4171
- "requires": {
4172
- "is-extglob": "1.0.0"
4173
- }
4174
- }
4175
- }
4176
- },
4177
- "parse-json": {
4178
- "version": "2.2.0",
4179
- "resolved": "https://registry.npmjs.org/parse-json/-/parse-json-2.2.0.tgz",
4180
- "integrity": "sha1-9ID0BDTvgHQfhGkJn43qGPVaTck=",
4181
- "dev": true,
4182
- "requires": {
4183
- "error-ex": "1.3.1"
4184
- }
4185
- },
4186
- "parse-ms": {
4187
- "version": "1.0.1",
4188
- "resolved": "https://registry.npmjs.org/parse-ms/-/parse-ms-1.0.1.tgz",
4189
- "integrity": "sha1-VjRtR0nXjyNDDKDHE4UK75GqNh0=",
4190
- "dev": true
4191
- },
4192
- "path-dirname": {
4193
- "version": "1.0.2",
4194
- "resolved": "https://registry.npmjs.org/path-dirname/-/path-dirname-1.0.2.tgz",
4195
- "integrity": "sha1-zDPSTVJeCZpTiMAzbG4yuRYGCeA=",
4196
- "dev": true
4197
- },
4198
- "path-exists": {
4199
- "version": "2.1.0",
4200
- "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-2.1.0.tgz",
4201
- "integrity": "sha1-D+tsZPD8UY2adU3V77YscCJ2H0s=",
4202
- "dev": true,
4203
- "requires": {
4204
- "pinkie-promise": "2.0.1"
4205
- }
4206
- },
4207
- "path-is-absolute": {
4208
- "version": "1.0.1",
4209
- "resolved": "https://registry.npmjs.org/path-is-absolute/-/path-is-absolute-1.0.1.tgz",
4210
- "integrity": "sha1-F0uSaHNVNP+8es5r9TpanhtcX18=",
4211
- "dev": true
4212
- },
4213
- "path-type": {
4214
- "version": "1.1.0",
4215
- "resolved": "https://registry.npmjs.org/path-type/-/path-type-1.1.0.tgz",
4216
- "integrity": "sha1-WcRPfuSR2nBNpBXaWkBwuk+P5EE=",
4217
- "dev": true,
4218
- "requires": {
4219
- "graceful-fs": "4.1.11",
4220
- "pify": "2.3.0",
4221
- "pinkie-promise": "2.0.1"
4222
- },
4223
- "dependencies": {
4224
- "graceful-fs": {
4225
- "version": "4.1.11",
4226
- "resolved": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.1.11.tgz",
4227
- "integrity": "sha1-Dovf5NHduIVNZOBOp8AOKgJuVlg=",
4228
- "dev": true
4229
- }
4230
- }
4231
- },
4232
- "pend": {
4233
- "version": "1.2.0",
4234
- "resolved": "https://registry.npmjs.org/pend/-/pend-1.2.0.tgz",
4235
- "integrity": "sha1-elfrVQpng/kRUzH89GY9XI4AelA=",
4236
- "dev": true
4237
- },
4238
- "performance-now": {
4239
- "version": "2.1.0",
4240
- "resolved": "https://registry.npmjs.org/performance-now/-/performance-now-2.1.0.tgz",
4241
- "integrity": "sha1-Ywn04OX6kT7BxpMHrjZLSzd8nns=",
4242
- "dev": true,
4243
- "optional": true
4244
- },
4245
- "pify": {
4246
- "version": "2.3.0",
4247
- "resolved": "https://registry.npmjs.org/pify/-/pify-2.3.0.tgz",
4248
- "integrity": "sha1-7RQaasBDqEnqWISY59yosVMw6Qw=",
4249
- "dev": true
4250
- },
4251
- "pinkie": {
4252
- "version": "2.0.4",
4253
- "resolved": "https://registry.npmjs.org/pinkie/-/pinkie-2.0.4.tgz",
4254
- "integrity": "sha1-clVrgM+g1IqXToDnckjoDtT3+HA=",
4255
- "dev": true
4256
- },
4257
- "pinkie-promise": {
4258
- "version": "2.0.1",
4259
- "resolved": "https://registry.npmjs.org/pinkie-promise/-/pinkie-promise-2.0.1.tgz",
4260
- "integrity": "sha1-ITXW36ejWMBprJsXh3YogihFD/o=",
4261
- "dev": true,
4262
- "requires": {
4263
- "pinkie": "2.0.4"
4264
- }
4265
- },
4266
- "pkg-up": {
4267
- "version": "1.0.0",
4268
- "resolved": "https://registry.npmjs.org/pkg-up/-/pkg-up-1.0.0.tgz",
4269
- "integrity": "sha1-Pgj7RhUlxEIWJKM7n35tCvWwWiY=",
4270
- "dev": true,
4271
- "requires": {
4272
- "find-up": "1.1.2"
4273
- }
4274
- },
4275
- "plur": {
4276
- "version": "1.0.0",
4277
- "resolved": "https://registry.npmjs.org/plur/-/plur-1.0.0.tgz",
4278
- "integrity": "sha1-24XGgU9eXlo7Se/CjWBP7GKXUVY=",
4279
- "dev": true
4280
- },
4281
- "postcss": {
4282
- "version": "5.2.18",
4283
- "resolved": "https://registry.npmjs.org/postcss/-/postcss-5.2.18.tgz",
4284
- "integrity": "sha512-zrUjRRe1bpXKsX1qAJNJjqZViErVuyEkMTRrwu4ud4sbTtIBRmtaYDrHmcGgmrbsW3MHfmtIf+vJumgQn+PrXg==",
4285
- "dev": true,
4286
- "requires": {
4287
- "chalk": "1.1.3",
4288
- "js-base64": "2.4.5",
4289
- "source-map": "0.5.7",
4290
- "supports-color": "3.2.3"
4291
- }
4292
- },
4293
- "postcss-value-parser": {
4294
- "version": "3.3.0",
4295
- "resolved": "https://registry.npmjs.org/postcss-value-parser/-/postcss-value-parser-3.3.0.tgz",
4296
- "integrity": "sha1-h/OPnxj3dKSrTIojL1xc6IcqnRU=",
4297
- "dev": true
4298
- },
4299
- "prebuild-install": {
4300
- "version": "2.5.3",
4301
- "resolved": "https://registry.npmjs.org/prebuild-install/-/prebuild-install-2.5.3.tgz",
4302
- "integrity": "sha512-/rI36cN2g7vDQnKWN8Uzupi++KjyqS9iS+/fpwG4Ea8d0Pip0PQ5bshUNzVwt+/D2MRfhVAplYMMvWLqWrCF/g==",
4303
- "dev": true,
4304
- "optional": true,
4305
- "requires": {
4306
- "detect-libc": "1.0.3",
4307
- "expand-template": "1.1.1",
4308
- "github-from-package": "0.0.0",
4309
- "minimist": "1.2.0",
4310
- "mkdirp": "0.5.1",
4311
- "node-abi": "2.4.1",
4312
- "noop-logger": "0.1.1",
4313
- "npmlog": "4.1.2",
4314
- "os-homedir": "1.0.2",
4315
- "pump": "2.0.1",
4316
- "rc": "1.2.8",
4317
- "simple-get": "2.8.1",
4318
- "tar-fs": "1.16.2",
4319
- "tunnel-agent": "0.6.0",
4320
- "which-pm-runs": "1.0.0"
4321
- },
4322
- "dependencies": {
4323
- "detect-libc": {
4324
- "version": "1.0.3",
4325
- "resolved": "https://registry.npmjs.org/detect-libc/-/detect-libc-1.0.3.tgz",
4326
- "integrity": "sha1-+hN8S9aY7fVc1c0CrFWfkaTEups=",
4327
- "dev": true,
4328
- "optional": true
4329
- },
4330
- "minimist": {
4331
- "version": "1.2.0",
4332
- "resolved": "https://registry.npmjs.org/minimist/-/minimist-1.2.0.tgz",
4333
- "integrity": "sha1-o1AIsg9BOD7sH7kU9M1d95omQoQ=",
4334
- "dev": true,
4335
- "optional": true
4336
- }
4337
- }
4338
- },
4339
- "prepend-http": {
4340
- "version": "1.0.4",
4341
- "resolved": "https://registry.npmjs.org/prepend-http/-/prepend-http-1.0.4.tgz",
4342
- "integrity": "sha1-1PRWKwzjaW5BrFLQ4ALlemNdxtw=",
4343
- "dev": true
4344
- },
4345
- "preserve": {
4346
- "version": "0.2.0",
4347
- "resolved": "https://registry.npmjs.org/preserve/-/preserve-0.2.0.tgz",
4348
- "integrity": "sha1-gV7R9uvGWSb4ZbMQwHE7yzMVzks=",
4349
- "dev": true
4350
- },
4351
- "pretty-bytes": {
4352
- "version": "4.0.2",
4353
- "resolved": "https://registry.npmjs.org/pretty-bytes/-/pretty-bytes-4.0.2.tgz",
4354
- "integrity": "sha1-sr+C5zUNZcbDOqlaqlpPYyf2HNk=",
4355
- "dev": true
4356
- },
4357
- "pretty-ms": {
4358
- "version": "2.1.0",
4359
- "resolved": "https://registry.npmjs.org/pretty-ms/-/pretty-ms-2.1.0.tgz",
4360
- "integrity": "sha1-QlfCVt8/sLRR1q/6qwIYhBJpgdw=",
4361
- "dev": true,
4362
- "requires": {
4363
- "is-finite": "1.0.2",
4364
- "parse-ms": "1.0.1",
4365
- "plur": "1.0.0"
4366
- }
4367
- },
4368
- "process-nextick-args": {
4369
- "version": "2.0.0",
4370
- "resolved": "https://registry.npmjs.org/process-nextick-args/-/process-nextick-args-2.0.0.tgz",
4371
- "integrity": "sha512-MtEC1TqN0EU5nephaJ4rAtThHtC86dNN9qCuEhtshvpVBkAW5ZO7BASN9REnF9eoXGcRub+pFuKEpOHE+HbEMw==",
4372
- "dev": true
4373
- },
4374
- "promised-io": {
4375
- "version": "0.3.5",
4376
- "resolved": "https://registry.npmjs.org/promised-io/-/promised-io-0.3.5.tgz",
4377
- "integrity": "sha1-StIXuzZYvKrplGsXqGaOzYUeE1Y=",
4378
- "dev": true
4379
- },
4380
- "pump": {
4381
- "version": "2.0.1",
4382
- "resolved": "https://registry.npmjs.org/pump/-/pump-2.0.1.tgz",
4383
- "integrity": "sha512-ruPMNRkN3MHP1cWJc9OWr+T/xDP0jhXYCLfJcBuX54hhfIBnaQmAUMfDcG4DM5UMWByBbJY69QSphm3jtDKIkA==",
4384
- "dev": true,
4385
- "optional": true,
4386
- "requires": {
4387
- "end-of-stream": "1.4.1",
4388
- "once": "1.4.0"
4389
- }
4390
- },
4391
- "punycode": {
4392
- "version": "1.4.1",
4393
- "resolved": "https://registry.npmjs.org/punycode/-/punycode-1.4.1.tgz",
4394
- "integrity": "sha1-wNWmOycYgArY4esPpSachN1BhF4=",
4395
- "dev": true,
4396
- "optional": true
4397
- },
4398
- "q": {
4399
- "version": "1.5.1",
4400
- "resolved": "https://registry.npmjs.org/q/-/q-1.5.1.tgz",
4401
- "integrity": "sha1-fjL3W0E4EpHQRhHxvxQQmsAGUdc=",
4402
- "dev": true,
4403
- "optional": true
4404
- },
4405
- "qs": {
4406
- "version": "6.5.2",
4407
- "resolved": "https://registry.npmjs.org/qs/-/qs-6.5.2.tgz",
4408
- "integrity": "sha512-N5ZAX4/LxJmF+7wN74pUD6qAh9/wnvdQcjq9TZjevvXzSUo7bfmw91saqMjzGS2xq91/odN2dW/WOl7qQHNDGA==",
4409
- "dev": true
4410
- },
4411
- "randomatic": {
4412
- "version": "3.0.0",
4413
- "resolved": "https://registry.npmjs.org/randomatic/-/randomatic-3.0.0.tgz",
4414
- "integrity": "sha512-VdxFOIEY3mNO5PtSRkkle/hPJDHvQhK21oa73K4yAc9qmp6N429gAyF1gZMOTMeS0/AYzaV/2Trcef+NaIonSA==",
4415
- "dev": true,
4416
- "requires": {
4417
- "is-number": "4.0.0",
4418
- "kind-of": "6.0.2",
4419
- "math-random": "1.0.1"
4420
- },
4421
- "dependencies": {
4422
- "is-number": {
4423
- "version": "4.0.0",
4424
- "resolved": "https://registry.npmjs.org/is-number/-/is-number-4.0.0.tgz",
4425
- "integrity": "sha512-rSklcAIlf1OmFdyAqbnWTLVelsQ58uvZ66S/ZyawjWqIviTWCjg2PzVGw8WUA+nNuPTqb4wgA+NszrJ+08LlgQ==",
4426
- "dev": true
4427
- },
4428
- "kind-of": {
4429
- "version": "6.0.2",
4430
- "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-6.0.2.tgz",
4431
- "integrity": "sha512-s5kLOcnH0XqDO+FvuaLX8DDjZ18CGFk7VygH40QoKPUQhW4e2rvM0rwUq0t8IQDOwYSeLK01U90OjzBTme2QqA==",
4432
- "dev": true
4433
- }
4434
- }
4435
- },
4436
- "raw-body": {
4437
- "version": "1.1.7",
4438
- "resolved": "https://registry.npmjs.org/raw-body/-/raw-body-1.1.7.tgz",
4439
- "integrity": "sha1-HQJ8K/oRasxmI7yo8AAWVyqH1CU=",
4440
- "dev": true,
4441
- "requires": {
4442
- "bytes": "1.0.0",
4443
- "string_decoder": "0.10.31"
4444
- },
4445
- "dependencies": {
4446
- "string_decoder": {
4447
- "version": "0.10.31",
4448
- "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-0.10.31.tgz",
4449
- "integrity": "sha1-YuIDvEF2bGwoyfyEMB2rHFMQ+pQ=",
4450
- "dev": true
4451
- }
4452
- }
4453
- },
4454
- "rc": {
4455
- "version": "1.2.8",
4456
- "resolved": "https://registry.npmjs.org/rc/-/rc-1.2.8.tgz",
4457
- "integrity": "sha512-y3bGgqKj3QBdxLbLkomlohkvsA8gdAiUQlSBJnBhfn+BPxg4bc62d8TcBW15wavDfgexCgccckhcZvywyQYPOw==",
4458
- "dev": true,
4459
- "requires": {
4460
- "deep-extend": "0.6.0",
4461
- "ini": "1.3.5",
4462
- "minimist": "1.2.0",
4463
- "strip-json-comments": "2.0.1"
4464
- },
4465
- "dependencies": {
4466
- "minimist": {
4467
- "version": "1.2.0",
4468
- "resolved": "https://registry.npmjs.org/minimist/-/minimist-1.2.0.tgz",
4469
- "integrity": "sha1-o1AIsg9BOD7sH7kU9M1d95omQoQ=",
4470
- "dev": true
4471
- }
4472
- }
4473
- },
4474
- "read-all-stream": {
4475
- "version": "3.1.0",
4476
- "resolved": "https://registry.npmjs.org/read-all-stream/-/read-all-stream-3.1.0.tgz",
4477
- "integrity": "sha1-NcPhd/IHjveJ7kv6+kNzB06u9Po=",
4478
- "dev": true,
4479
- "requires": {
4480
- "pinkie-promise": "2.0.1",
4481
- "readable-stream": "2.3.6"
4482
- }
4483
- },
4484
- "read-pkg": {
4485
- "version": "1.1.0",
4486
- "resolved": "https://registry.npmjs.org/read-pkg/-/read-pkg-1.1.0.tgz",
4487
- "integrity": "sha1-9f+qXs0pyzHAR0vKfXVra7KePyg=",
4488
- "dev": true,
4489
- "requires": {
4490
- "load-json-file": "1.1.0",
4491
- "normalize-package-data": "2.4.0",
4492
- "path-type": "1.1.0"
4493
- }
4494
- },
4495
- "read-pkg-up": {
4496
- "version": "1.0.1",
4497
- "resolved": "https://registry.npmjs.org/read-pkg-up/-/read-pkg-up-1.0.1.tgz",
4498
- "integrity": "sha1-nWPBMnbAZZGNV/ACpX9AobZD+wI=",
4499
- "dev": true,
4500
- "requires": {
4501
- "find-up": "1.1.2",
4502
- "read-pkg": "1.1.0"
4503
- }
4504
- },
4505
- "readable-stream": {
4506
- "version": "2.3.6",
4507
- "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.6.tgz",
4508
- "integrity": "sha512-tQtKA9WIAhBF3+VLAseyMqZeBjW0AHJoxOtYqSUZNJxauErmLbVm2FW1y+J/YA9dUrAC39ITejlZWhVIwawkKw==",
4509
- "dev": true,
4510
- "requires": {
4511
- "core-util-is": "1.0.2",
4512
- "inherits": "2.0.3",
4513
- "isarray": "1.0.0",
4514
- "process-nextick-args": "2.0.0",
4515
- "safe-buffer": "5.1.2",
4516
- "string_decoder": "1.1.1",
4517
- "util-deprecate": "1.0.2"
4518
- }
4519
- },
4520
- "redent": {
4521
- "version": "1.0.0",
4522
- "resolved": "https://registry.npmjs.org/redent/-/redent-1.0.0.tgz",
4523
- "integrity": "sha1-z5Fqsf1fHxbfsggi3W7H9zDCr94=",
4524
- "dev": true,
4525
- "requires": {
4526
- "indent-string": "2.1.0",
4527
- "strip-indent": "1.0.1"
4528
- }
4529
- },
4530
- "regex-cache": {
4531
- "version": "0.4.4",
4532
- "resolved": "https://registry.npmjs.org/regex-cache/-/regex-cache-0.4.4.tgz",
4533
- "integrity": "sha512-nVIZwtCjkC9YgvWkpM55B5rBhBYRZhAaJbgcFYXXsHnbZ9UZI9nnVWYZpBlCqv9ho2eZryPnWrZGsOdPwVWXWQ==",
4534
- "dev": true,
4535
- "requires": {
4536
- "is-equal-shallow": "0.1.3"
4537
- }
4538
- },
4539
- "remove-trailing-separator": {
4540
- "version": "1.1.0",
4541
- "resolved": "https://registry.npmjs.org/remove-trailing-separator/-/remove-trailing-separator-1.1.0.tgz",
4542
- "integrity": "sha1-wkvOKig62tW8P1jg1IJJuSN52O8=",
4543
- "dev": true
4544
- },
4545
- "repeat-element": {
4546
- "version": "1.1.2",
4547
- "resolved": "https://registry.npmjs.org/repeat-element/-/repeat-element-1.1.2.tgz",
4548
- "integrity": "sha1-7wiaF40Ug7quTZPrmLT55OEdmQo=",
4549
- "dev": true
4550
- },
4551
- "repeat-string": {
4552
- "version": "1.6.1",
4553
- "resolved": "https://registry.npmjs.org/repeat-string/-/repeat-string-1.6.1.tgz",
4554
- "integrity": "sha1-jcrkcOHIirwtYA//Sndihtp15jc=",
4555
- "dev": true
4556
- },
4557
- "repeating": {
4558
- "version": "2.0.1",
4559
- "resolved": "https://registry.npmjs.org/repeating/-/repeating-2.0.1.tgz",
4560
- "integrity": "sha1-UhTFOpJtNVJwdSf7q0FdvAjQbdo=",
4561
- "dev": true,
4562
- "requires": {
4563
- "is-finite": "1.0.2"
4564
- }
4565
- },
4566
- "replace-ext": {
4567
- "version": "0.0.1",
4568
- "resolved": "https://registry.npmjs.org/replace-ext/-/replace-ext-0.0.1.tgz",
4569
- "integrity": "sha1-KbvZIHinOfC8zitO5B6DeVNSKSQ=",
4570
- "dev": true
4571
- },
4572
- "request": {
4573
- "version": "2.87.0",
4574
- "resolved": "https://registry.npmjs.org/request/-/request-2.87.0.tgz",
4575
- "integrity": "sha512-fcogkm7Az5bsS6Sl0sibkbhcKsnyon/jV1kF3ajGmF0c8HrttdKTPRT9hieOaQHA5HEq6r8OyWOo/o781C1tNw==",
4576
- "dev": true,
4577
- "optional": true,
4578
- "requires": {
4579
- "aws-sign2": "0.7.0",
4580
- "aws4": "1.7.0",
4581
- "caseless": "0.12.0",
4582
- "combined-stream": "1.0.6",
4583
- "extend": "3.0.1",
4584
- "forever-agent": "0.6.1",
4585
- "form-data": "2.3.2",
4586
- "har-validator": "5.0.3",
4587
- "http-signature": "1.2.0",
4588
- "is-typedarray": "1.0.0",
4589
- "isstream": "0.1.2",
4590
- "json-stringify-safe": "5.0.1",
4591
- "mime-types": "2.1.18",
4592
- "oauth-sign": "0.8.2",
4593
- "performance-now": "2.1.0",
4594
- "qs": "6.5.2",
4595
- "safe-buffer": "5.1.2",
4596
- "tough-cookie": "2.3.4",
4597
- "tunnel-agent": "0.6.0",
4598
- "uuid": "3.2.1"
4599
- }
4600
- },
4601
- "requirefresh": {
4602
- "version": "2.1.0",
4603
- "resolved": "https://registry.npmjs.org/requirefresh/-/requirefresh-2.1.0.tgz",
4604
- "integrity": "sha1-dC3Mwg86lpGNZsbxWX3I/+vE9vU=",
4605
- "dev": true,
4606
- "requires": {
4607
- "editions": "1.3.4"
4608
- }
4609
- },
4610
- "rimraf": {
4611
- "version": "2.2.8",
4612
- "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-2.2.8.tgz",
4613
- "integrity": "sha1-5Dm+Kq7jJzIZUnMPmaiSnk/FBYI=",
4614
- "dev": true
4615
- },
4616
- "rsyncwrapper": {
4617
- "version": "2.0.1",
4618
- "resolved": "https://registry.npmjs.org/rsyncwrapper/-/rsyncwrapper-2.0.1.tgz",
4619
- "integrity": "sha1-itRMAz4W1IFvMBgMWy17ssIlk5A=",
4620
- "dev": true,
4621
- "requires": {
4622
- "lodash": "4.15.0"
4623
- },
4624
- "dependencies": {
4625
- "lodash": {
4626
- "version": "4.15.0",
4627
- "resolved": "https://registry.npmjs.org/lodash/-/lodash-4.15.0.tgz",
4628
- "integrity": "sha1-MWI5HY8BQKoiz49rPDTWt/Y9Oqk=",
4629
- "dev": true
4630
- }
4631
- }
4632
- },
4633
- "safe-buffer": {
4634
- "version": "5.1.2",
4635
- "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.2.tgz",
4636
- "integrity": "sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==",
4637
- "dev": true
4638
- },
4639
- "safe-json-parse": {
4640
- "version": "1.0.1",
4641
- "resolved": "https://registry.npmjs.org/safe-json-parse/-/safe-json-parse-1.0.1.tgz",
4642
- "integrity": "sha1-PnZyPjjf3aE8mx0poeB//uSzC1c=",
4643
- "dev": true
4644
- },
4645
- "safefs": {
4646
- "version": "4.1.0",
4647
- "resolved": "https://registry.npmjs.org/safefs/-/safefs-4.1.0.tgz",
4648
- "integrity": "sha1-+CrrS9165R9lPrIPZyizBYyNZEU=",
4649
- "dev": true,
4650
- "requires": {
4651
- "editions": "1.3.4",
4652
- "graceful-fs": "4.1.11"
4653
- },
4654
- "dependencies": {
4655
- "graceful-fs": {
4656
- "version": "4.1.11",
4657
- "resolved": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.1.11.tgz",
4658
- "integrity": "sha1-Dovf5NHduIVNZOBOp8AOKgJuVlg=",
4659
- "dev": true
4660
- }
4661
- }
4662
- },
4663
- "safer-buffer": {
4664
- "version": "2.1.2",
4665
- "resolved": "https://registry.npmjs.org/safer-buffer/-/safer-buffer-2.1.2.tgz",
4666
- "integrity": "sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg==",
4667
- "dev": true
4668
- },
4669
- "sax": {
4670
- "version": "1.2.4",
4671
- "resolved": "https://registry.npmjs.org/sax/-/sax-1.2.4.tgz",
4672
- "integrity": "sha512-NqVDv9TpANUjFm0N8uM5GxL36UgKi9/atZw+x7YFnQ8ckwFGKrl4xX4yWtrey3UJm5nP1kUbnYgLopqWNSRhWw==",
4673
- "dev": true,
4674
- "optional": true
4675
- },
4676
- "seek-bzip": {
4677
- "version": "1.0.5",
4678
- "resolved": "https://registry.npmjs.org/seek-bzip/-/seek-bzip-1.0.5.tgz",
4679
- "integrity": "sha1-z+kXyz0nS8/6x5J1ivUxc+sfq9w=",
4680
- "dev": true,
4681
- "requires": {
4682
- "commander": "2.8.1"
4683
- }
4684
- },
4685
- "semver": {
4686
- "version": "5.3.0",
4687
- "resolved": "https://registry.npmjs.org/semver/-/semver-5.3.0.tgz",
4688
- "integrity": "sha1-myzl094C0XxgEq0yaqa00M9U+U8=",
4689
- "dev": true
4690
- },
4691
- "semver-regex": {
4692
- "version": "1.0.0",
4693
- "resolved": "https://registry.npmjs.org/semver-regex/-/semver-regex-1.0.0.tgz",
4694
- "integrity": "sha1-kqSWkGX5xwxpR1PVUkj8aPj2Usk=",
4695
- "dev": true,
4696
- "optional": true
4697
- },
4698
- "semver-truncate": {
4699
- "version": "1.1.2",
4700
- "resolved": "https://registry.npmjs.org/semver-truncate/-/semver-truncate-1.1.2.tgz",
4701
- "integrity": "sha1-V/Qd5pcHpicJp+AQS6IRcQnqR+g=",
4702
- "dev": true,
4703
- "optional": true,
4704
- "requires": {
4705
- "semver": "5.3.0"
4706
- }
4707
- },
4708
- "set-blocking": {
4709
- "version": "2.0.0",
4710
- "resolved": "https://registry.npmjs.org/set-blocking/-/set-blocking-2.0.0.tgz",
4711
- "integrity": "sha1-BF+XgtARrppoA93TgrJDkrPYkPc=",
4712
- "dev": true
4713
- },
4714
- "set-immediate-shim": {
4715
- "version": "1.0.1",
4716
- "resolved": "https://registry.npmjs.org/set-immediate-shim/-/set-immediate-shim-1.0.1.tgz",
4717
- "integrity": "sha1-SysbJ+uAip+NzEgaWOXlb1mfP2E=",
4718
- "dev": true
4719
- },
4720
- "shelljs": {
4721
- "version": "0.3.0",
4722
- "resolved": "https://registry.npmjs.org/shelljs/-/shelljs-0.3.0.tgz",
4723
- "integrity": "sha1-NZbmMHp4FUT1kfN9phg2DzHbV7E=",
4724
- "dev": true
4725
- },
4726
- "sigmund": {
4727
- "version": "1.0.1",
4728
- "resolved": "https://registry.npmjs.org/sigmund/-/sigmund-1.0.1.tgz",
4729
- "integrity": "sha1-P/IfGYytIXX587eBhT/ZTQ0ZtZA=",
4730
- "dev": true
4731
- },
4732
- "signal-exit": {
4733
- "version": "3.0.2",
4734
- "resolved": "https://registry.npmjs.org/signal-exit/-/signal-exit-3.0.2.tgz",
4735
- "integrity": "sha1-tf3AjxKH6hF4Yo5BXiUTK3NkbG0=",
4736
- "dev": true
4737
- },
4738
- "simple-concat": {
4739
- "version": "1.0.0",
4740
- "resolved": "https://registry.npmjs.org/simple-concat/-/simple-concat-1.0.0.tgz",
4741
- "integrity": "sha1-c0TLuLbib7J9ZrL8hvn21Zl1IcY=",
4742
- "dev": true,
4743
- "optional": true
4744
- },
4745
- "simple-get": {
4746
- "version": "2.8.1",
4747
- "resolved": "https://registry.npmjs.org/simple-get/-/simple-get-2.8.1.tgz",
4748
- "integrity": "sha512-lSSHRSw3mQNUGPAYRqo7xy9dhKmxFXIjLjp4KHpf99GEH2VH7C3AM+Qfx6du6jhfUi6Vm7XnbEVEf7Wb6N8jRw==",
4749
- "dev": true,
4750
- "optional": true,
4751
- "requires": {
4752
- "decompress-response": "3.3.0",
4753
- "once": "1.4.0",
4754
- "simple-concat": "1.0.0"
4755
- }
4756
- },
4757
- "source-map": {
4758
- "version": "0.5.7",
4759
- "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.5.7.tgz",
4760
- "integrity": "sha1-igOdLRAh0i0eoUyA2OpGi6LvP8w=",
4761
- "dev": true
4762
- },
4763
- "sparkles": {
4764
- "version": "1.0.1",
4765
- "resolved": "https://registry.npmjs.org/sparkles/-/sparkles-1.0.1.tgz",
4766
- "integrity": "sha512-dSO0DDYUahUt/0/pD/Is3VIm5TGJjludZ0HVymmhYF6eNA53PVLhnUk0znSYbH8IYBuJdCE+1luR22jNLMaQdw==",
4767
- "dev": true
4768
- },
4769
- "spdx-correct": {
4770
- "version": "3.0.0",
4771
- "resolved": "https://registry.npmjs.org/spdx-correct/-/spdx-correct-3.0.0.tgz",
4772
- "integrity": "sha512-N19o9z5cEyc8yQQPukRCZ9EUmb4HUpnrmaL/fxS2pBo2jbfcFRVuFZ/oFC+vZz0MNNk0h80iMn5/S6qGZOL5+g==",
4773
- "dev": true,
4774
- "requires": {
4775
- "spdx-expression-parse": "3.0.0",
4776
- "spdx-license-ids": "3.0.0"
4777
- }
4778
- },
4779
- "spdx-exceptions": {
4780
- "version": "2.1.0",
4781
- "resolved": "https://registry.npmjs.org/spdx-exceptions/-/spdx-exceptions-2.1.0.tgz",
4782
- "integrity": "sha512-4K1NsmrlCU1JJgUrtgEeTVyfx8VaYea9J9LvARxhbHtVtohPs/gFGG5yy49beySjlIMhhXZ4QqujIZEfS4l6Cg==",
4783
- "dev": true
4784
- },
4785
- "spdx-expression-parse": {
4786
- "version": "3.0.0",
4787
- "resolved": "https://registry.npmjs.org/spdx-expression-parse/-/spdx-expression-parse-3.0.0.tgz",
4788
- "integrity": "sha512-Yg6D3XpRD4kkOmTpdgbUiEJFKghJH03fiC1OPll5h/0sO6neh2jqRDVHOQ4o/LMea0tgCkbMgea5ip/e+MkWyg==",
4789
- "dev": true,
4790
- "requires": {
4791
- "spdx-exceptions": "2.1.0",
4792
- "spdx-license-ids": "3.0.0"
4793
- }
4794
- },
4795
- "spdx-license-ids": {
4796
- "version": "3.0.0",
4797
- "resolved": "https://registry.npmjs.org/spdx-license-ids/-/spdx-license-ids-3.0.0.tgz",
4798
- "integrity": "sha512-2+EPwgbnmOIl8HjGBXXMd9NAu02vLjOO1nWw4kmeRDFyHn+M/ETfHxQUK0oXg8ctgVnl9t3rosNVsZ1jG61nDA==",
4799
- "dev": true
4800
- },
4801
- "sprintf-js": {
4802
- "version": "1.0.3",
4803
- "resolved": "https://registry.npmjs.org/sprintf-js/-/sprintf-js-1.0.3.tgz",
4804
- "integrity": "sha1-BOaSb2YolTVPPdAVIDYzuFcpfiw=",
4805
- "dev": true
4806
- },
4807
- "squeak": {
4808
- "version": "1.3.0",
4809
- "resolved": "https://registry.npmjs.org/squeak/-/squeak-1.3.0.tgz",
4810
- "integrity": "sha1-MwRQN7ZDiLVnZ0uEMiplIQc5FsM=",
4811
- "dev": true,
4812
- "optional": true,
4813
- "requires": {
4814
- "chalk": "1.1.3",
4815
- "console-stream": "0.1.1",
4816
- "lpad-align": "1.1.2"
4817
- }
4818
- },
4819
- "sshpk": {
4820
- "version": "1.14.1",
4821
- "resolved": "https://registry.npmjs.org/sshpk/-/sshpk-1.14.1.tgz",
4822
- "integrity": "sha1-Ew9Zde3a2WPx1W+SuaxsUfqfg+s=",
4823
- "dev": true,
4824
- "optional": true,
4825
- "requires": {
4826
- "asn1": "0.2.3",
4827
- "assert-plus": "1.0.0",
4828
- "bcrypt-pbkdf": "1.0.1",
4829
- "dashdash": "1.14.1",
4830
- "ecc-jsbn": "0.1.1",
4831
- "getpass": "0.1.7",
4832
- "jsbn": "0.1.1",
4833
- "tweetnacl": "0.14.5"
4834
- }
4835
- },
4836
- "stat-mode": {
4837
- "version": "0.2.2",
4838
- "resolved": "https://registry.npmjs.org/stat-mode/-/stat-mode-0.2.2.tgz",
4839
- "integrity": "sha1-5sgLYjEj19gM8TLOU480YokHJQI=",
4840
- "dev": true
4841
- },
4842
- "stream-buffers": {
4843
- "version": "2.2.0",
4844
- "resolved": "https://registry.npmjs.org/stream-buffers/-/stream-buffers-2.2.0.tgz",
4845
- "integrity": "sha1-kdX1Ew0c75bc+n9yaUUYh0HQnuQ=",
4846
- "dev": true
4847
- },
4848
- "stream-combiner2": {
4849
- "version": "1.1.1",
4850
- "resolved": "https://registry.npmjs.org/stream-combiner2/-/stream-combiner2-1.1.1.tgz",
4851
- "integrity": "sha1-+02KFCDqNidk4hrUeAOXvry0HL4=",
4852
- "dev": true,
4853
- "requires": {
4854
- "duplexer2": "0.1.4",
4855
- "readable-stream": "2.3.6"
4856
- }
4857
- },
4858
- "stream-shift": {
4859
- "version": "1.0.0",
4860
- "resolved": "https://registry.npmjs.org/stream-shift/-/stream-shift-1.0.0.tgz",
4861
- "integrity": "sha1-1cdSgl5TZ+eG944Y5EXqIjoVWVI=",
4862
- "dev": true
4863
- },
4864
- "string-template": {
4865
- "version": "0.2.1",
4866
- "resolved": "https://registry.npmjs.org/string-template/-/string-template-0.2.1.tgz",
4867
- "integrity": "sha1-QpMuWYo1LQH8IuwzZ9nYTuxsmt0=",
4868
- "dev": true
4869
- },
4870
- "string-width": {
4871
- "version": "1.0.2",
4872
- "resolved": "https://registry.npmjs.org/string-width/-/string-width-1.0.2.tgz",
4873
- "integrity": "sha1-EYvfW4zcUaKn5w0hHgfisLmxB9M=",
4874
- "dev": true,
4875
- "requires": {
4876
- "code-point-at": "1.1.0",
4877
- "is-fullwidth-code-point": "1.0.0",
4878
- "strip-ansi": "3.0.1"
4879
- }
4880
- },
4881
- "string_decoder": {
4882
- "version": "1.1.1",
4883
- "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.1.1.tgz",
4884
- "integrity": "sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg==",
4885
- "dev": true,
4886
- "requires": {
4887
- "safe-buffer": "5.1.2"
4888
- }
4889
- },
4890
- "strip-ansi": {
4891
- "version": "3.0.1",
4892
- "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-3.0.1.tgz",
4893
- "integrity": "sha1-ajhfuIU9lS1f8F0Oiq+UJ43GPc8=",
4894
- "dev": true,
4895
- "requires": {
4896
- "ansi-regex": "2.1.1"
4897
- }
4898
- },
4899
- "strip-bom": {
4900
- "version": "2.0.0",
4901
- "resolved": "https://registry.npmjs.org/strip-bom/-/strip-bom-2.0.0.tgz",
4902
- "integrity": "sha1-YhmoVhZSBJHzV4i9vxRHqZx+aw4=",
4903
- "dev": true,
4904
- "requires": {
4905
- "is-utf8": "0.2.1"
4906
- }
4907
- },
4908
- "strip-bom-stream": {
4909
- "version": "1.0.0",
4910
- "resolved": "https://registry.npmjs.org/strip-bom-stream/-/strip-bom-stream-1.0.0.tgz",
4911
- "integrity": "sha1-5xRDmFd9Uaa+0PoZlPoF9D/ZiO4=",
4912
- "dev": true,
4913
- "requires": {
4914
- "first-chunk-stream": "1.0.0",
4915
- "strip-bom": "2.0.0"
4916
- }
4917
- },
4918
- "strip-dirs": {
4919
- "version": "1.1.1",
4920
- "resolved": "https://registry.npmjs.org/strip-dirs/-/strip-dirs-1.1.1.tgz",
4921
- "integrity": "sha1-lgu9EoeETzl1pFWKoQOoJV4kVqA=",
4922
- "dev": true,
4923
- "requires": {
4924
- "chalk": "1.1.3",
4925
- "get-stdin": "4.0.1",
4926
- "is-absolute": "0.1.7",
4927
- "is-natural-number": "2.1.1",
4928
- "minimist": "1.2.0",
4929
- "sum-up": "1.0.3"
4930
- },
4931
- "dependencies": {
4932
- "minimist": {
4933
- "version": "1.2.0",
4934
- "resolved": "https://registry.npmjs.org/minimist/-/minimist-1.2.0.tgz",
4935
- "integrity": "sha1-o1AIsg9BOD7sH7kU9M1d95omQoQ=",
4936
- "dev": true
4937
- }
4938
- }
4939
- },
4940
- "strip-indent": {
4941
- "version": "1.0.1",
4942
- "resolved": "https://registry.npmjs.org/strip-indent/-/strip-indent-1.0.1.tgz",
4943
- "integrity": "sha1-DHlipq3vp7vUrDZkYKY4VSrhoKI=",
4944
- "dev": true,
4945
- "requires": {
4946
- "get-stdin": "4.0.1"
4947
- }
4948
- },
4949
- "strip-json-comments": {
4950
- "version": "2.0.1",
4951
- "resolved": "https://registry.npmjs.org/strip-json-comments/-/strip-json-comments-2.0.1.tgz",
4952
- "integrity": "sha1-PFMZQukIwml8DsNEhYwobHygpgo=",
4953
- "dev": true
4954
- },
4955
- "strip-outer": {
4956
- "version": "1.0.1",
4957
- "resolved": "https://registry.npmjs.org/strip-outer/-/strip-outer-1.0.1.tgz",
4958
- "integrity": "sha512-k55yxKHwaXnpYGsOzg4Vl8+tDrWylxDEpknGjhTiZB8dFRU5rTo9CAzeycivxV3s+zlTKwrs6WxMxR95n26kwg==",
4959
- "dev": true,
4960
- "requires": {
4961
- "escape-string-regexp": "1.0.5"
4962
- }
4963
- },
4964
- "sum-up": {
4965
- "version": "1.0.3",
4966
- "resolved": "https://registry.npmjs.org/sum-up/-/sum-up-1.0.3.tgz",
4967
- "integrity": "sha1-HGYfZnBX9jvLeHWqFDi8FiUlFW4=",
4968
- "dev": true,
4969
- "requires": {
4970
- "chalk": "1.1.3"
4971
- }
4972
- },
4973
- "supports-color": {
4974
- "version": "3.2.3",
4975
- "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-3.2.3.tgz",
4976
- "integrity": "sha1-ZawFBLOVQXHYpklGsq48u4pfVPY=",
4977
- "dev": true,
4978
- "requires": {
4979
- "has-flag": "1.0.0"
4980
- }
4981
- },
4982
- "svgo": {
4983
- "version": "0.6.6",
4984
- "resolved": "https://registry.npmjs.org/svgo/-/svgo-0.6.6.tgz",
4985
- "integrity": "sha1-s0CIkDbyD5tEdUMHfQ9Vc+0ETAg=",
4986
- "dev": true,
4987
- "optional": true,
4988
- "requires": {
4989
- "coa": "1.0.4",
4990
- "colors": "1.1.2",
4991
- "csso": "2.0.0",
4992
- "js-yaml": "3.6.1",
4993
- "mkdirp": "0.5.1",
4994
- "sax": "1.2.4",
4995
- "whet.extend": "0.9.9"
4996
- },
4997
- "dependencies": {
4998
- "argparse": {
4999
- "version": "1.0.10",
5000
- "resolved": "https://registry.npmjs.org/argparse/-/argparse-1.0.10.tgz",
5001
- "integrity": "sha512-o5Roy6tNG4SL/FOkCAN6RzjiakZS25RLYFrcMttJqbdd8BWrnA+fGz57iN5Pb06pvBGvl5gQ0B48dJlslXvoTg==",
5002
- "dev": true,
5003
- "optional": true,
5004
- "requires": {
5005
- "sprintf-js": "1.0.3"
5006
- }
5007
- },
5008
- "colors": {
5009
- "version": "1.1.2",
5010
- "resolved": "https://registry.npmjs.org/colors/-/colors-1.1.2.tgz",
5011
- "integrity": "sha1-FopHAXVran9RoSzgyXv6KMCE7WM=",
5012
- "dev": true,
5013
- "optional": true
5014
- },
5015
- "esprima": {
5016
- "version": "2.7.3",
5017
- "resolved": "https://registry.npmjs.org/esprima/-/esprima-2.7.3.tgz",
5018
- "integrity": "sha1-luO3DVd59q1JzQMmc9HDEnZ7pYE=",
5019
- "dev": true,
5020
- "optional": true
5021
- },
5022
- "js-yaml": {
5023
- "version": "3.6.1",
5024
- "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-3.6.1.tgz",
5025
- "integrity": "sha1-bl/mfYsgXOTSL60Ft3geja3MSzA=",
5026
- "dev": true,
5027
- "optional": true,
5028
- "requires": {
5029
- "argparse": "1.0.10",
5030
- "esprima": "2.7.3"
5031
- }
5032
- }
5033
- }
5034
- },
5035
- "tar": {
5036
- "version": "2.2.1",
5037
- "resolved": "https://registry.npmjs.org/tar/-/tar-2.2.1.tgz",
5038
- "integrity": "sha1-jk0qJWwOIYXGsYrWlK7JaLg8sdE=",
5039
- "dev": true,
5040
- "optional": true,
5041
- "requires": {
5042
- "block-stream": "0.0.9",
5043
- "fstream": "1.0.11",
5044
- "inherits": "2.0.3"
5045
- }
5046
- },
5047
- "tar-fs": {
5048
- "version": "1.16.2",
5049
- "resolved": "https://registry.npmjs.org/tar-fs/-/tar-fs-1.16.2.tgz",
5050
- "integrity": "sha512-LdknWjPEiZC1nOBwhv0JBzfJBGPJar08dZg2rwZe0ZTLQoRGEzgrl7vF3qUEkCHpI/wN9e7RyCuDhMsJUCLPPQ==",
5051
- "dev": true,
5052
- "optional": true,
5053
- "requires": {
5054
- "chownr": "1.0.1",
5055
- "mkdirp": "0.5.1",
5056
- "pump": "1.0.3",
5057
- "tar-stream": "1.6.1"
5058
- },
5059
- "dependencies": {
5060
- "pump": {
5061
- "version": "1.0.3",
5062
- "resolved": "https://registry.npmjs.org/pump/-/pump-1.0.3.tgz",
5063
- "integrity": "sha512-8k0JupWme55+9tCVE+FS5ULT3K6AbgqrGa58lTT49RpyfwwcGedHqaC5LlQNdEAumn/wFsu6aPwkuPMioy8kqw==",
5064
- "dev": true,
5065
- "optional": true,
5066
- "requires": {
5067
- "end-of-stream": "1.4.1",
5068
- "once": "1.4.0"
5069
- }
5070
- }
5071
- }
5072
- },
5073
- "tar-stream": {
5074
- "version": "1.6.1",
5075
- "resolved": "https://registry.npmjs.org/tar-stream/-/tar-stream-1.6.1.tgz",
5076
- "integrity": "sha512-IFLM5wp3QrJODQFPm6/to3LJZrONdBY/otxcvDIQzu217zKye6yVR3hhi9lAjrC2Z+m/j5oDxMPb1qcd8cIvpA==",
5077
- "dev": true,
5078
- "requires": {
5079
- "bl": "1.2.2",
5080
- "buffer-alloc": "1.1.0",
5081
- "end-of-stream": "1.4.1",
5082
- "fs-constants": "1.0.0",
5083
- "readable-stream": "2.3.6",
5084
- "to-buffer": "1.1.1",
5085
- "xtend": "4.0.1"
5086
- }
5087
- },
5088
- "tempfile": {
5089
- "version": "1.1.1",
5090
- "resolved": "https://registry.npmjs.org/tempfile/-/tempfile-1.1.1.tgz",
5091
- "integrity": "sha1-W8xOrsxKsscH2LwR2ZzMmiyyh/I=",
5092
- "dev": true,
5093
- "requires": {
5094
- "os-tmpdir": "1.0.2",
5095
- "uuid": "2.0.3"
5096
- },
5097
- "dependencies": {
5098
- "uuid": {
5099
- "version": "2.0.3",
5100
- "resolved": "https://registry.npmjs.org/uuid/-/uuid-2.0.3.tgz",
5101
- "integrity": "sha1-Z+LoY3lyFVMN/zGOW/nc6/1Hsho=",
5102
- "dev": true
5103
- }
5104
- }
5105
- },
5106
- "text-table": {
5107
- "version": "0.2.0",
5108
- "resolved": "https://registry.npmjs.org/text-table/-/text-table-0.2.0.tgz",
5109
- "integrity": "sha1-f17oI66AUgfACvLfSoTsP8+lcLQ=",
5110
- "dev": true
5111
- },
5112
- "through2": {
5113
- "version": "0.6.5",
5114
- "resolved": "https://registry.npmjs.org/through2/-/through2-0.6.5.tgz",
5115
- "integrity": "sha1-QaucZ7KdVyCQcUEOHXp6lozTrUg=",
5116
- "dev": true,
5117
- "requires": {
5118
- "readable-stream": "1.0.34",
5119
- "xtend": "4.0.1"
5120
- },
5121
- "dependencies": {
5122
- "isarray": {
5123
- "version": "0.0.1",
5124
- "resolved": "https://registry.npmjs.org/isarray/-/isarray-0.0.1.tgz",
5125
- "integrity": "sha1-ihis/Kmo9Bd+Cav8YDiTmwXR7t8=",
5126
- "dev": true
5127
- },
5128
- "readable-stream": {
5129
- "version": "1.0.34",
5130
- "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-1.0.34.tgz",
5131
- "integrity": "sha1-Elgg40vIQtLyqq+v5MKRbuMsFXw=",
5132
- "dev": true,
5133
- "requires": {
5134
- "core-util-is": "1.0.2",
5135
- "inherits": "2.0.3",
5136
- "isarray": "0.0.1",
5137
- "string_decoder": "0.10.31"
5138
- }
5139
- },
5140
- "string_decoder": {
5141
- "version": "0.10.31",
5142
- "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-0.10.31.tgz",
5143
- "integrity": "sha1-YuIDvEF2bGwoyfyEMB2rHFMQ+pQ=",
5144
- "dev": true
5145
- }
5146
- }
5147
- },
5148
- "through2-filter": {
5149
- "version": "2.0.0",
5150
- "resolved": "https://registry.npmjs.org/through2-filter/-/through2-filter-2.0.0.tgz",
5151
- "integrity": "sha1-YLxVoNrLdghdsfna6Zq0P4PWIuw=",
5152
- "dev": true,
5153
- "requires": {
5154
- "through2": "2.0.3",
5155
- "xtend": "4.0.1"
5156
- },
5157
- "dependencies": {
5158
- "through2": {
5159
- "version": "2.0.3",
5160
- "resolved": "https://registry.npmjs.org/through2/-/through2-2.0.3.tgz",
5161
- "integrity": "sha1-AARWmzfHx0ujnEPzzteNGtlBQL4=",
5162
- "dev": true,
5163
- "requires": {
5164
- "readable-stream": "2.3.6",
5165
- "xtend": "4.0.1"
5166
- }
5167
- }
5168
- }
5169
- },
5170
- "time-grunt": {
5171
- "version": "1.4.0",
5172
- "resolved": "https://registry.npmjs.org/time-grunt/-/time-grunt-1.4.0.tgz",
5173
- "integrity": "sha1-BiIT5mDJB+hvRAVWwB6mWXtxJCA=",
5174
- "dev": true,
5175
- "requires": {
5176
- "chalk": "1.1.3",
5177
- "date-time": "1.1.0",
5178
- "figures": "1.7.0",
5179
- "hooker": "0.2.3",
5180
- "number-is-nan": "1.0.1",
5181
- "pretty-ms": "2.1.0",
5182
- "text-table": "0.2.0"
5183
- }
5184
- },
5185
- "time-stamp": {
5186
- "version": "1.1.0",
5187
- "resolved": "https://registry.npmjs.org/time-stamp/-/time-stamp-1.1.0.tgz",
5188
- "integrity": "sha1-dkpaEa9QVhkhsTPztE5hhofg9cM=",
5189
- "dev": true
5190
- },
5191
- "time-zone": {
5192
- "version": "0.1.0",
5193
- "resolved": "https://registry.npmjs.org/time-zone/-/time-zone-0.1.0.tgz",
5194
- "integrity": "sha1-Sncotqwo2w4Aj1FAQ/1VW9VXO0Y=",
5195
- "dev": true
5196
- },
5197
- "timed-out": {
5198
- "version": "3.1.3",
5199
- "resolved": "https://registry.npmjs.org/timed-out/-/timed-out-3.1.3.tgz",
5200
- "integrity": "sha1-lYYL/MXHbCd/j4Mm/Q9bLiDrohc=",
5201
- "dev": true
5202
- },
5203
- "tiny-lr": {
5204
- "version": "1.1.1",
5205
- "resolved": "https://registry.npmjs.org/tiny-lr/-/tiny-lr-1.1.1.tgz",
5206
- "integrity": "sha512-44yhA3tsaRoMOjQQ+5v5mVdqef+kH6Qze9jTpqtVufgYjYt08zyZAwNwwVBj3i1rJMnR52IxOW0LK0vBzgAkuA==",
5207
- "dev": true,
5208
- "requires": {
5209
- "body": "5.1.0",
5210
- "debug": "3.1.0",
5211
- "faye-websocket": "0.10.0",
5212
- "livereload-js": "2.3.0",
5213
- "object-assign": "4.1.1",
5214
- "qs": "6.5.2"
5215
- }
5216
- },
5217
- "to-absolute-glob": {
5218
- "version": "0.1.1",
5219
- "resolved": "https://registry.npmjs.org/to-absolute-glob/-/to-absolute-glob-0.1.1.tgz",
5220
- "integrity": "sha1-HN+kcqnvUMI57maZm2YsoOs5k38=",
5221
- "dev": true,
5222
- "requires": {
5223
- "extend-shallow": "2.0.1"
5224
- }
5225
- },
5226
- "to-buffer": {
5227
- "version": "1.1.1",
5228
- "resolved": "https://registry.npmjs.org/to-buffer/-/to-buffer-1.1.1.tgz",
5229
- "integrity": "sha512-lx9B5iv7msuFYE3dytT+KE5tap+rNYw+K4jVkb9R/asAb+pbBSM17jtunHplhBe6RRJdZx3Pn2Jph24O32mOVg==",
5230
- "dev": true
5231
- },
5232
- "tough-cookie": {
5233
- "version": "2.3.4",
5234
- "resolved": "https://registry.npmjs.org/tough-cookie/-/tough-cookie-2.3.4.tgz",
5235
- "integrity": "sha512-TZ6TTfI5NtZnuyy/Kecv+CnoROnyXn2DN97LontgQpCwsX2XyLYCC0ENhYkehSOwAp8rTQKc/NUIF7BkQ5rKLA==",
5236
- "dev": true,
5237
- "optional": true,
5238
- "requires": {
5239
- "punycode": "1.4.1"
5240
- }
5241
- },
5242
- "trim-newlines": {
5243
- "version": "1.0.0",
5244
- "resolved": "https://registry.npmjs.org/trim-newlines/-/trim-newlines-1.0.0.tgz",
5245
- "integrity": "sha1-WIeWa7WCpFA6QetST301ARgVphM=",
5246
- "dev": true
5247
- },
5248
- "trim-repeated": {
5249
- "version": "1.0.0",
5250
- "resolved": "https://registry.npmjs.org/trim-repeated/-/trim-repeated-1.0.0.tgz",
5251
- "integrity": "sha1-42RqLqTokTEr9+rObPsFOAvAHCE=",
5252
- "dev": true,
5253
- "requires": {
5254
- "escape-string-regexp": "1.0.5"
5255
- }
5256
- },
5257
- "tunnel-agent": {
5258
- "version": "0.6.0",
5259
- "resolved": "https://registry.npmjs.org/tunnel-agent/-/tunnel-agent-0.6.0.tgz",
5260
- "integrity": "sha1-J6XeoGs2sEoKmWZ3SykIaPD8QP0=",
5261
- "dev": true,
5262
- "requires": {
5263
- "safe-buffer": "5.1.2"
5264
- }
5265
- },
5266
- "tweetnacl": {
5267
- "version": "0.14.5",
5268
- "resolved": "https://registry.npmjs.org/tweetnacl/-/tweetnacl-0.14.5.tgz",
5269
- "integrity": "sha1-WuaBd/GS1EViadEIr6k/+HQ/T2Q=",
5270
- "dev": true,
5271
- "optional": true
5272
- },
5273
- "typechecker": {
5274
- "version": "4.5.0",
5275
- "resolved": "https://registry.npmjs.org/typechecker/-/typechecker-4.5.0.tgz",
5276
- "integrity": "sha512-bqPE/ck3bVIaXP7gMKTKSHrypT32lpYTpiqzPYeYzdSQnmaGvaGhy7TnN/M/+5R+2rs/kKcp9ZLPRp/Q9Yj+4w==",
5277
- "dev": true,
5278
- "requires": {
5279
- "editions": "1.3.4"
5280
- }
5281
- },
5282
- "typedarray": {
5283
- "version": "0.0.6",
5284
- "resolved": "https://registry.npmjs.org/typedarray/-/typedarray-0.0.6.tgz",
5285
- "integrity": "sha1-hnrHTjhkGHsdPUfZlqeOxciDB3c=",
5286
- "dev": true
5287
- },
5288
- "underscore": {
5289
- "version": "1.7.0",
5290
- "resolved": "https://registry.npmjs.org/underscore/-/underscore-1.7.0.tgz",
5291
- "integrity": "sha1-a7rwh3UA02vjTsqlhODbn+8DUgk=",
5292
- "dev": true
5293
- },
5294
- "underscore.string": {
5295
- "version": "2.2.1",
5296
- "resolved": "https://registry.npmjs.org/underscore.string/-/underscore.string-2.2.1.tgz",
5297
- "integrity": "sha1-18D6KvXVoaZ/QlPa7pgTLnM/Dxk=",
5298
- "dev": true
5299
- },
5300
- "unique-stream": {
5301
- "version": "2.2.1",
5302
- "resolved": "https://registry.npmjs.org/unique-stream/-/unique-stream-2.2.1.tgz",
5303
- "integrity": "sha1-WqADz76Uxf+GbE59ZouxxNuts2k=",
5304
- "dev": true,
5305
- "requires": {
5306
- "json-stable-stringify": "1.0.1",
5307
- "through2-filter": "2.0.0"
5308
- }
5309
- },
5310
- "unzip-response": {
5311
- "version": "1.0.2",
5312
- "resolved": "https://registry.npmjs.org/unzip-response/-/unzip-response-1.0.2.tgz",
5313
- "integrity": "sha1-uYTwh3/AqJwsdzzB73tbIytbBv4=",
5314
- "dev": true
5315
- },
5316
- "url-parse-lax": {
5317
- "version": "1.0.0",
5318
- "resolved": "https://registry.npmjs.org/url-parse-lax/-/url-parse-lax-1.0.0.tgz",
5319
- "integrity": "sha1-evjzA2Rem9eaJy56FKxovAYJ2nM=",
5320
- "dev": true,
5321
- "requires": {
5322
- "prepend-http": "1.0.4"
5323
- }
5324
- },
5325
- "url-regex": {
5326
- "version": "3.2.0",
5327
- "resolved": "https://registry.npmjs.org/url-regex/-/url-regex-3.2.0.tgz",
5328
- "integrity": "sha1-260eDJ4p4QXdCx8J9oYvf9tIJyQ=",
5329
- "dev": true,
5330
- "optional": true,
5331
- "requires": {
5332
- "ip-regex": "1.0.3"
5333
- }
5334
- },
5335
- "util-deprecate": {
5336
- "version": "1.0.2",
5337
- "resolved": "https://registry.npmjs.org/util-deprecate/-/util-deprecate-1.0.2.tgz",
5338
- "integrity": "sha1-RQ1Nyfpw3nMnYvvS1KKJgUGaDM8=",
5339
- "dev": true
5340
- },
5341
- "uuid": {
5342
- "version": "3.2.1",
5343
- "resolved": "https://registry.npmjs.org/uuid/-/uuid-3.2.1.tgz",
5344
- "integrity": "sha512-jZnMwlb9Iku/O3smGWvZhauCf6cvvpKi4BKRiliS3cxnI+Gz9j5MEpTz2UFuXiKPJocb7gnsLHwiS05ige5BEA==",
5345
- "dev": true,
5346
- "optional": true
5347
- },
5348
- "vali-date": {
5349
- "version": "1.0.0",
5350
- "resolved": "https://registry.npmjs.org/vali-date/-/vali-date-1.0.0.tgz",
5351
- "integrity": "sha1-G5BKWWCfsyjvB4E4Qgk09rhnCaY=",
5352
- "dev": true
5353
- },
5354
- "validate-npm-package-license": {
5355
- "version": "3.0.3",
5356
- "resolved": "https://registry.npmjs.org/validate-npm-package-license/-/validate-npm-package-license-3.0.3.tgz",
5357
- "integrity": "sha512-63ZOUnL4SIXj4L0NixR3L1lcjO38crAbgrTpl28t8jjrfuiOBL5Iygm+60qPs/KsZGzPNg6Smnc/oY16QTjF0g==",
5358
- "dev": true,
5359
- "requires": {
5360
- "spdx-correct": "3.0.0",
5361
- "spdx-expression-parse": "3.0.0"
5362
- }
5363
- },
5364
- "verror": {
5365
- "version": "1.10.0",
5366
- "resolved": "https://registry.npmjs.org/verror/-/verror-1.10.0.tgz",
5367
- "integrity": "sha1-OhBcoXBTr1XW4nDB+CiGguGNpAA=",
5368
- "dev": true,
5369
- "optional": true,
5370
- "requires": {
5371
- "assert-plus": "1.0.0",
5372
- "core-util-is": "1.0.2",
5373
- "extsprintf": "1.3.0"
5374
- }
5375
- },
5376
- "vinyl": {
5377
- "version": "1.2.0",
5378
- "resolved": "https://registry.npmjs.org/vinyl/-/vinyl-1.2.0.tgz",
5379
- "integrity": "sha1-XIgDbPVl5d8FVYv8kR+GVt8hiIQ=",
5380
- "dev": true,
5381
- "requires": {
5382
- "clone": "1.0.4",
5383
- "clone-stats": "0.0.1",
5384
- "replace-ext": "0.0.1"
5385
- }
5386
- },
5387
- "vinyl-assign": {
5388
- "version": "1.2.1",
5389
- "resolved": "https://registry.npmjs.org/vinyl-assign/-/vinyl-assign-1.2.1.tgz",
5390
- "integrity": "sha1-TRmIkbVRWRHXcajNnFSApGoHSkU=",
5391
- "dev": true,
5392
- "requires": {
5393
- "object-assign": "4.1.1",
5394
- "readable-stream": "2.3.6"
5395
- }
5396
- },
5397
- "vinyl-fs": {
5398
- "version": "2.4.4",
5399
- "resolved": "https://registry.npmjs.org/vinyl-fs/-/vinyl-fs-2.4.4.tgz",
5400
- "integrity": "sha1-vm/zJwy1Xf19MGNkDegfJddTIjk=",
5401
- "dev": true,
5402
- "requires": {
5403
- "duplexify": "3.6.0",
5404
- "glob-stream": "5.3.5",
5405
- "graceful-fs": "4.1.11",
5406
- "gulp-sourcemaps": "1.6.0",
5407
- "is-valid-glob": "0.3.0",
5408
- "lazystream": "1.0.0",
5409
- "lodash.isequal": "4.5.0",
5410
- "merge-stream": "1.0.1",
5411
- "mkdirp": "0.5.1",
5412
- "object-assign": "4.1.1",
5413
- "readable-stream": "2.3.6",
5414
- "strip-bom": "2.0.0",
5415
- "strip-bom-stream": "1.0.0",
5416
- "through2": "2.0.3",
5417
- "through2-filter": "2.0.0",
5418
- "vali-date": "1.0.0",
5419
- "vinyl": "1.2.0"
5420
- },
5421
- "dependencies": {
5422
- "graceful-fs": {
5423
- "version": "4.1.11",
5424
- "resolved": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.1.11.tgz",
5425
- "integrity": "sha1-Dovf5NHduIVNZOBOp8AOKgJuVlg=",
5426
- "dev": true
5427
- },
5428
- "through2": {
5429
- "version": "2.0.3",
5430
- "resolved": "https://registry.npmjs.org/through2/-/through2-2.0.3.tgz",
5431
- "integrity": "sha1-AARWmzfHx0ujnEPzzteNGtlBQL4=",
5432
- "dev": true,
5433
- "requires": {
5434
- "readable-stream": "2.3.6",
5435
- "xtend": "4.0.1"
5436
- }
5437
- }
5438
- }
5439
- },
5440
- "vow": {
5441
- "version": "0.4.4",
5442
- "resolved": "https://registry.npmjs.org/vow/-/vow-0.4.4.tgz",
5443
- "integrity": "sha1-yf5GCRKdf1qmIVCOvmS1HJW8e5g=",
5444
- "dev": true
5445
- },
5446
- "vow-fs": {
5447
- "version": "0.3.2",
5448
- "resolved": "https://registry.npmjs.org/vow-fs/-/vow-fs-0.3.2.tgz",
5449
- "integrity": "sha1-6isDTYXh24wnfrLpqG0cFfXTjno=",
5450
- "dev": true,
5451
- "requires": {
5452
- "glob": "3.2.8",
5453
- "node-uuid": "1.4.0",
5454
- "vow": "0.4.4",
5455
- "vow-queue": "0.3.1"
5456
- },
5457
- "dependencies": {
5458
- "glob": {
5459
- "version": "3.2.8",
5460
- "resolved": "https://registry.npmjs.org/glob/-/glob-3.2.8.tgz",
5461
- "integrity": "sha1-VQb0MRchvMYYx9jboUQYh1AwcHM=",
5462
- "dev": true,
5463
- "requires": {
5464
- "inherits": "2.0.3",
5465
- "minimatch": "0.2.14"
5466
- }
5467
- }
5468
- }
5469
- },
5470
- "vow-queue": {
5471
- "version": "0.3.1",
5472
- "resolved": "https://registry.npmjs.org/vow-queue/-/vow-queue-0.3.1.tgz",
5473
- "integrity": "sha1-WYxRoVsKgabV/AX0dhzrRi3h6Gg=",
5474
- "dev": true,
5475
- "requires": {
5476
- "vow": "0.4.4"
5477
- }
5478
- },
5479
- "walkdir": {
5480
- "version": "0.0.11",
5481
- "resolved": "https://registry.npmjs.org/walkdir/-/walkdir-0.0.11.tgz",
5482
- "integrity": "sha1-oW0CXrkxvQO1LzCMrtD0D86+lTI=",
5483
- "dev": true
5484
- },
5485
- "ware": {
5486
- "version": "1.3.0",
5487
- "resolved": "https://registry.npmjs.org/ware/-/ware-1.3.0.tgz",
5488
- "integrity": "sha1-0bFPOdLiy0q4xAmPdW/ksWTkc9Q=",
5489
- "dev": true,
5490
- "requires": {
5491
- "wrap-fn": "0.1.5"
5492
- }
5493
- },
5494
- "websocket-driver": {
5495
- "version": "0.7.0",
5496
- "resolved": "https://registry.npmjs.org/websocket-driver/-/websocket-driver-0.7.0.tgz",
5497
- "integrity": "sha1-DK+dLXVdk67gSdS90NP+LMoqJOs=",
5498
- "dev": true,
5499
- "requires": {
5500
- "http-parser-js": "0.4.13",
5501
- "websocket-extensions": "0.1.3"
5502
- }
5503
- },
5504
- "websocket-extensions": {
5505
- "version": "0.1.3",
5506
- "resolved": "https://registry.npmjs.org/websocket-extensions/-/websocket-extensions-0.1.3.tgz",
5507
- "integrity": "sha512-nqHUnMXmBzT0w570r2JpJxfiSD1IzoI+HGVdd3aZ0yNi3ngvQ4jv1dtHt5VGxfI2yj5yqImPhOK4vmIh2xMbGg==",
5508
- "dev": true
5509
- },
5510
- "whet.extend": {
5511
- "version": "0.9.9",
5512
- "resolved": "https://registry.npmjs.org/whet.extend/-/whet.extend-0.9.9.tgz",
5513
- "integrity": "sha1-+HfVv2SMl+WqVC+twW1qJZucEaE=",
5514
- "dev": true,
5515
- "optional": true
5516
- },
5517
- "which": {
5518
- "version": "1.0.9",
5519
- "resolved": "https://registry.npmjs.org/which/-/which-1.0.9.tgz",
5520
- "integrity": "sha1-RgwdoPgQED0DIam2M6+eV15kSG8=",
5521
- "dev": true
5522
- },
5523
- "which-pm-runs": {
5524
- "version": "1.0.0",
5525
- "resolved": "https://registry.npmjs.org/which-pm-runs/-/which-pm-runs-1.0.0.tgz",
5526
- "integrity": "sha1-Zws6+8VS4LVd9rd4DKdGFfI60cs=",
5527
- "dev": true,
5528
- "optional": true
5529
- },
5530
- "wide-align": {
5531
- "version": "1.1.3",
5532
- "resolved": "https://registry.npmjs.org/wide-align/-/wide-align-1.1.3.tgz",
5533
- "integrity": "sha512-QGkOQc8XL6Bt5PwnsExKBPuMKBxnGxWWW3fU55Xt4feHozMUhdUMaBCk290qpm/wG5u/RSKzwdAC4i51YigihA==",
5534
- "dev": true,
5535
- "requires": {
5536
- "string-width": "1.0.2"
5537
- }
5538
- },
5539
- "wrap-fn": {
5540
- "version": "0.1.5",
5541
- "resolved": "https://registry.npmjs.org/wrap-fn/-/wrap-fn-0.1.5.tgz",
5542
- "integrity": "sha1-8htuQQFv9KfjFyDbxjoJAWvfmEU=",
5543
- "dev": true,
5544
- "requires": {
5545
- "co": "3.1.0"
5546
- },
5547
- "dependencies": {
5548
- "co": {
5549
- "version": "3.1.0",
5550
- "resolved": "https://registry.npmjs.org/co/-/co-3.1.0.tgz",
5551
- "integrity": "sha1-TqVOpaCJOBUxheFSEMaNkJK8G3g=",
5552
- "dev": true
5553
- }
5554
- }
5555
- },
5556
- "wrappy": {
5557
- "version": "1.0.2",
5558
- "resolved": "https://registry.npmjs.org/wrappy/-/wrappy-1.0.2.tgz",
5559
- "integrity": "sha1-tSQ9jz7BqjXxNkYFvA0QNuMKtp8=",
5560
- "dev": true
5561
- },
5562
- "xtend": {
5563
- "version": "4.0.1",
5564
- "resolved": "https://registry.npmjs.org/xtend/-/xtend-4.0.1.tgz",
5565
- "integrity": "sha1-pcbVMr5lbiPbgg77lDofBJmNY68=",
5566
- "dev": true
5567
- },
5568
- "yauzl": {
5569
- "version": "2.9.1",
5570
- "resolved": "https://registry.npmjs.org/yauzl/-/yauzl-2.9.1.tgz",
5571
- "integrity": "sha1-qBmB6nCleUYTOIPwKcWCGok1mn8=",
5572
- "dev": true,
5573
- "requires": {
5574
- "buffer-crc32": "0.2.13",
5575
- "fd-slicer": "1.0.1"
5576
- }
5577
- },
5578
- "zip-stream": {
5579
- "version": "1.2.0",
5580
- "resolved": "https://registry.npmjs.org/zip-stream/-/zip-stream-1.2.0.tgz",
5581
- "integrity": "sha1-qLxF9MG0lpnGuQGYuqyqzbzUugQ=",
5582
- "dev": true,
5583
- "requires": {
5584
- "archiver-utils": "1.3.0",
5585
- "compress-commons": "1.2.2",
5586
- "lodash": "4.17.10",
5587
- "readable-stream": "2.3.6"
5588
- },
5589
- "dependencies": {
5590
- "lodash": {
5591
- "version": "4.17.10",
5592
- "resolved": "https://registry.npmjs.org/lodash/-/lodash-4.17.10.tgz",
5593
- "integrity": "sha512-UejweD1pDoXu+AD825lWwp4ZGtSwgnpZxb3JDViD7StjQz+Nb/6l093lx4OQ0foGWNRoc19mWy7BzL+UAK2iVg==",
5594
- "dev": true
5595
- }
5596
- }
5597
- }
5598
- }
5599
- }
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
readme.md CHANGED
@@ -2,8 +2,9 @@
2
  **Contributors:** [themeisle](https://profiles.wordpress.org/themeisle), [codeinwp](https://profiles.wordpress.org/codeinwp), [nivoslider](https://profiles.wordpress.org/nivoslider)
3
  **Tags:** slider, nivo,slider plugin, slideshow, slideshow plugin, template tag, wordpress gallery, wordpress image slider, wordpress photo gallery
4
  **Requires at least:** 3.0
5
- **Tested up to:** 4.9
6
  **Stable tag:** trunk
 
7
  **License:** GPLv3
8
 
9
  Nivo Slider is The Most Popular And Easiest to Use Responsive WordPress Slider Plugin.
@@ -68,6 +69,12 @@ Purchasing a license gets you access to the full version of the Nivo Slider Word
68
  4. The final result
69
 
70
  ## Changelog ##
 
 
 
 
 
 
71
  ### 2.1.2 - 2018-05-28 ###
72
 
73
  * Removes redundant files present in distribution.
2
  **Contributors:** [themeisle](https://profiles.wordpress.org/themeisle), [codeinwp](https://profiles.wordpress.org/codeinwp), [nivoslider](https://profiles.wordpress.org/nivoslider)
3
  **Tags:** slider, nivo,slider plugin, slideshow, slideshow plugin, template tag, wordpress gallery, wordpress image slider, wordpress photo gallery
4
  **Requires at least:** 3.0
5
+ **Tested up to:** 5.0
6
  **Stable tag:** trunk
7
+ **Requires PHP:** 5.3
8
  **License:** GPLv3
9
 
10
  Nivo Slider is The Most Popular And Easiest to Use Responsive WordPress Slider Plugin.
69
  4. The final result
70
 
71
  ## Changelog ##
72
+ ### 2.2.0 - 2018-11-19 ###
73
+
74
+ * Improve compatibility with Wordpress 5.0 + Gutenberg Editor.
75
+ * Adds integration with Optimole - Image optimization service.
76
+
77
+
78
  ### 2.1.2 - 2018-05-28 ###
79
 
80
  * Removes redundant files present in distribution.
readme.txt CHANGED
@@ -2,8 +2,9 @@
2
  Contributors: themeisle, codeinwp, nivoslider
3
  Tags: slider, nivo,slider plugin, slideshow, slideshow plugin, template tag, wordpress gallery, wordpress image slider, wordpress photo gallery
4
  Requires at least: 3.0
5
- Tested up to: 4.9
6
  Stable tag: trunk
 
7
  License: GPLv3
8
 
9
  Nivo Slider is The Most Popular And Easiest to Use Responsive WordPress Slider Plugin.
@@ -68,6 +69,12 @@ Purchasing a license gets you access to the full version of the Nivo Slider Word
68
  4. The final result
69
 
70
  == Changelog ==
 
 
 
 
 
 
71
  = 2.1.2 - 2018-05-28 =
72
 
73
  * Removes redundant files present in distribution.
2
  Contributors: themeisle, codeinwp, nivoslider
3
  Tags: slider, nivo,slider plugin, slideshow, slideshow plugin, template tag, wordpress gallery, wordpress image slider, wordpress photo gallery
4
  Requires at least: 3.0
5
+ Tested up to: 5.0
6
  Stable tag: trunk
7
+ Requires PHP: 5.3
8
  License: GPLv3
9
 
10
  Nivo Slider is The Most Popular And Easiest to Use Responsive WordPress Slider Plugin.
69
  4. The final result
70
 
71
  == Changelog ==
72
+ = 2.2.0 - 2018-11-19 =
73
+
74
+ * Improve compatibility with Wordpress 5.0 + Gutenberg Editor.
75
+ * Adds integration with Optimole - Image optimization service.
76
+
77
+
78
  = 2.1.2 - 2018-05-28 =
79
 
80
  * Removes redundant files present in distribution.
themeisle-hash.json CHANGED
@@ -1 +1 @@
1
- {"nivo-slider-lite.php":"235d989c3ba94271d47565fec5f36397"}
1
+ {"nivo-slider-lite.php":"7ffca55ee0633a42a102c5eb95d05fe5"}
vendor/autoload.php ADDED
@@ -0,0 +1,7 @@
 
 
 
 
 
 
 
1
+ <?php
2
+
3
+ // autoload.php @generated by Composer
4
+
5
+ require_once __DIR__ . '/composer' . '/autoload_real.php';
6
+
7
+ return ComposerAutoloaderInit8c2f842343acbc55fdeb8617e53eec1f::getLoader();
vendor/codeinwp/themeisle-sdk/LICENSE ADDED
@@ -0,0 +1,674 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ GNU GENERAL PUBLIC LICENSE
2
+ Version 3, 29 June 2007
3
+
4
+ Copyright (C) 2007 Free Software Foundation, Inc. <http://fsf.org/>
5
+ Everyone is permitted to copy and distribute verbatim copies
6
+ of this license document, but changing it is not allowed.
7
+
8
+ Preamble
9
+
10
+ The GNU General Public License is a free, copyleft license for
11
+ software and other kinds of works.
12
+
13
+ The licenses for most software and other practical works are designed
14
+ to take away your freedom to share and change the works. By contrast,
15
+ the GNU General Public License is intended to guarantee your freedom to
16
+ share and change all versions of a program--to make sure it remains free
17
+ software for all its users. We, the Free Software Foundation, use the
18
+ GNU General Public License for most of our software; it applies also to
19
+ any other work released this way by its authors. You can apply it to
20
+ your programs, too.
21
+
22
+ When we speak of free software, we are referring to freedom, not
23
+ price. Our General Public Licenses are designed to make sure that you
24
+ have the freedom to distribute copies of free software (and charge for
25
+ them if you wish), that you receive source code or can get it if you
26
+ want it, that you can change the software or use pieces of it in new
27
+ free programs, and that you know you can do these things.
28
+
29
+ To protect your rights, we need to prevent others from denying you
30
+ these rights or asking you to surrender the rights. Therefore, you have
31
+ certain responsibilities if you distribute copies of the software, or if
32
+ you modify it: responsibilities to respect the freedom of others.
33
+
34
+ For example, if you distribute copies of such a program, whether
35
+ gratis or for a fee, you must pass on to the recipients the same
36
+ freedoms that you received. You must make sure that they, too, receive
37
+ or can get the source code. And you must show them these terms so they
38
+ know their rights.
39
+
40
+ Developers that use the GNU GPL protect your rights with two steps:
41
+ (1) assert copyright on the software, and (2) offer you this License
42
+ giving you legal permission to copy, distribute and/or modify it.
43
+
44
+ For the developers' and authors' protection, the GPL clearly explains
45
+ that there is no warranty for this free software. For both users' and
46
+ authors' sake, the GPL requires that modified versions be marked as
47
+ changed, so that their problems will not be attributed erroneously to
48
+ authors of previous versions.
49
+
50
+ Some devices are designed to deny users access to install or run
51
+ modified versions of the software inside them, although the manufacturer
52
+ can do so. This is fundamentally incompatible with the aim of
53
+ protecting users' freedom to change the software. The systematic
54
+ pattern of such abuse occurs in the area of products for individuals to
55
+ use, which is precisely where it is most unacceptable. Therefore, we
56
+ have designed this version of the GPL to prohibit the practice for those
57
+ products. If such problems arise substantially in other domains, we
58
+ stand ready to extend this provision to those domains in future versions
59
+ of the GPL, as needed to protect the freedom of users.
60
+
61
+ Finally, every program is threatened constantly by software patents.
62
+ States should not allow patents to restrict development and use of
63
+ software on general-purpose computers, but in those that do, we wish to
64
+ avoid the special danger that patents applied to a free program could
65
+ make it effectively proprietary. To prevent this, the GPL assures that
66
+ patents cannot be used to render the program non-free.
67
+
68
+ The precise terms and conditions for copying, distribution and
69
+ modification follow.
70
+
71
+ TERMS AND CONDITIONS
72
+
73
+ 0. Definitions.
74
+
75
+ "This License" refers to version 3 of the GNU General Public License.
76
+
77
+ "Copyright" also means copyright-like laws that apply to other kinds of
78
+ works, such as semiconductor masks.
79
+
80
+ "The Program" refers to any copyrightable work licensed under this
81
+ License. Each licensee is addressed as "you". "Licensees" and
82
+ "recipients" may be individuals or organizations.
83
+
84
+ To "modify" a work means to copy from or adapt all or part of the work
85
+ in a fashion requiring copyright permission, other than the making of an
86
+ exact copy. The resulting work is called a "modified version" of the
87
+ earlier work or a work "based on" the earlier work.
88
+
89
+ A "covered work" means either the unmodified Program or a work based
90
+ on the Program.
91
+
92
+ To "propagate" a work means to do anything with it that, without
93
+ permission, would make you directly or secondarily liable for
94
+ infringement under applicable copyright law, except executing it on a
95
+ computer or modifying a private copy. Propagation includes copying,
96
+ distribution (with or without modification), making available to the
97
+ public, and in some countries other activities as well.
98
+
99
+ To "convey" a work means any kind of propagation that enables other
100
+ parties to make or receive copies. Mere interaction with a user through
101
+ a computer network, with no transfer of a copy, is not conveying.
102
+
103
+ An interactive user interface displays "Appropriate Legal Notices"
104
+ to the extent that it includes a convenient and prominently visible
105
+ feature that (1) displays an appropriate copyright notice, and (2)
106
+ tells the user that there is no warranty for the work (except to the
107
+ extent that warranties are provided), that licensees may convey the
108
+ work under this License, and how to view a copy of this License. If
109
+ the interface presents a list of user commands or options, such as a
110
+ menu, a prominent item in the list meets this criterion.
111
+
112
+ 1. Source Code.
113
+
114
+ The "source code" for a work means the preferred form of the work
115
+ for making modifications to it. "Object code" means any non-source
116
+ form of a work.
117
+
118
+ A "Standard Interface" means an interface that either is an official
119
+ standard defined by a recognized standards body, or, in the case of
120
+ interfaces specified for a particular programming language, one that
121
+ is widely used among developers working in that language.
122
+
123
+ The "System Libraries" of an executable work include anything, other
124
+ than the work as a whole, that (a) is included in the normal form of
125
+ packaging a Major Component, but which is not part of that Major
126
+ Component, and (b) serves only to enable use of the work with that
127
+ Major Component, or to implement a Standard Interface for which an
128
+ implementation is available to the public in source code form. A
129
+ "Major Component", in this context, means a major essential component
130
+ (kernel, window system, and so on) of the specific operating system
131
+ (if any) on which the executable work runs, or a compiler used to
132
+ produce the work, or an object code interpreter used to run it.
133
+
134
+ The "Corresponding Source" for a work in object code form means all
135
+ the source code needed to generate, install, and (for an executable
136
+ work) run the object code and to modify the work, including scripts to
137
+ control those activities. However, it does not include the work's
138
+ System Libraries, or general-purpose tools or generally available free
139
+ programs which are used unmodified in performing those activities but
140
+ which are not part of the work. For example, Corresponding Source
141
+ includes interface definition files associated with source files for
142
+ the work, and the source code for shared libraries and dynamically
143
+ linked subprograms that the work is specifically designed to require,
144
+ such as by intimate data communication or control flow between those
145
+ subprograms and other parts of the work.
146
+
147
+ The Corresponding Source need not include anything that users
148
+ can regenerate automatically from other parts of the Corresponding
149
+ Source.
150
+
151
+ The Corresponding Source for a work in source code form is that
152
+ same work.
153
+
154
+ 2. Basic Permissions.
155
+
156
+ All rights granted under this License are granted for the term of
157
+ copyright on the Program, and are irrevocable provided the stated
158
+ conditions are met. This License explicitly affirms your unlimited
159
+ permission to run the unmodified Program. The output from running a
160
+ covered work is covered by this License only if the output, given its
161
+ content, constitutes a covered work. This License acknowledges your
162
+ rights of fair use or other equivalent, as provided by copyright law.
163
+
164
+ You may make, run and propagate covered works that you do not
165
+ convey, without conditions so long as your license otherwise remains
166
+ in force. You may convey covered works to others for the sole purpose
167
+ of having them make modifications exclusively for you, or provide you
168
+ with facilities for running those works, provided that you comply with
169
+ the terms of this License in conveying all material for which you do
170
+ not control copyright. Those thus making or running the covered works
171
+ for you must do so exclusively on your behalf, under your direction
172
+ and control, on terms that prohibit them from making any copies of
173
+ your copyrighted material outside their relationship with you.
174
+
175
+ Conveying under any other circumstances is permitted solely under
176
+ the conditions stated below. Sublicensing is not allowed; section 10
177
+ makes it unnecessary.
178
+
179
+ 3. Protecting Users' Legal Rights From Anti-Circumvention Law.
180
+
181
+ No covered work shall be deemed part of an effective technological
182
+ measure under any applicable law fulfilling obligations under article
183
+ 11 of the WIPO copyright treaty adopted on 20 December 1996, or
184
+ similar laws prohibiting or restricting circumvention of such
185
+ measures.
186
+
187
+ When you convey a covered work, you waive any legal power to forbid
188
+ circumvention of technological measures to the extent such circumvention
189
+ is effected by exercising rights under this License with respect to
190
+ the covered work, and you disclaim any intention to limit operation or
191
+ modification of the work as a means of enforcing, against the work's
192
+ users, your or third parties' legal rights to forbid circumvention of
193
+ technological measures.
194
+
195
+ 4. Conveying Verbatim Copies.
196
+
197
+ You may convey verbatim copies of the Program's source code as you
198
+ receive it, in any medium, provided that you conspicuously and
199
+ appropriately publish on each copy an appropriate copyright notice;
200
+ keep intact all notices stating that this License and any
201
+ non-permissive terms added in accord with section 7 apply to the code;
202
+ keep intact all notices of the absence of any warranty; and give all
203
+ recipients a copy of this License along with the Program.
204
+
205
+ You may charge any price or no price for each copy that you convey,
206
+ and you may offer support or warranty protection for a fee.
207
+
208
+ 5. Conveying Modified Source Versions.
209
+
210
+ You may convey a work based on the Program, or the modifications to
211
+ produce it from the Program, in the form of source code under the
212
+ terms of section 4, provided that you also meet all of these conditions:
213
+
214
+ a) The work must carry prominent notices stating that you modified
215
+ it, and giving a relevant date.
216
+
217
+ b) The work must carry prominent notices stating that it is
218
+ released under this License and any conditions added under section
219
+ 7. This requirement modifies the requirement in section 4 to
220
+ "keep intact all notices".
221
+
222
+ c) You must license the entire work, as a whole, under this
223
+ License to anyone who comes into possession of a copy. This
224
+ License will therefore apply, along with any applicable section 7
225
+ additional terms, to the whole of the work, and all its parts,
226
+ regardless of how they are packaged. This License gives no
227
+ permission to license the work in any other way, but it does not
228
+ invalidate such permission if you have separately received it.
229
+
230
+ d) If the work has interactive user interfaces, each must display
231
+ Appropriate Legal Notices; however, if the Program has interactive
232
+ interfaces that do not display Appropriate Legal Notices, your
233
+ work need not make them do so.
234
+
235
+ A compilation of a covered work with other separate and independent
236
+ works, which are not by their nature extensions of the covered work,
237
+ and which are not combined with it such as to form a larger program,
238
+ in or on a volume of a storage or distribution medium, is called an
239
+ "aggregate" if the compilation and its resulting copyright are not
240
+ used to limit the access or legal rights of the compilation's users
241
+ beyond what the individual works permit. Inclusion of a covered work
242
+ in an aggregate does not cause this License to apply to the other
243
+ parts of the aggregate.
244
+
245
+ 6. Conveying Non-Source Forms.
246
+
247
+ You may convey a covered work in object code form under the terms
248
+ of sections 4 and 5, provided that you also convey the
249
+ machine-readable Corresponding Source under the terms of this License,
250
+ in one of these ways:
251
+
252
+ a) Convey the object code in, or embodied in, a physical product
253
+ (including a physical distribution medium), accompanied by the
254
+ Corresponding Source fixed on a durable physical medium
255
+ customarily used for software interchange.
256
+
257
+ b) Convey the object code in, or embodied in, a physical product
258
+ (including a physical distribution medium), accompanied by a
259
+ written offer, valid for at least three years and valid for as
260
+ long as you offer spare parts or customer support for that product
261
+ model, to give anyone who possesses the object code either (1) a
262
+ copy of the Corresponding Source for all the software in the
263
+ product that is covered by this License, on a durable physical
264
+ medium customarily used for software interchange, for a price no
265
+ more than your reasonable cost of physically performing this
266
+ conveying of source, or (2) access to copy the
267
+ Corresponding Source from a network server at no charge.
268
+
269
+ c) Convey individual copies of the object code with a copy of the
270
+ written offer to provide the Corresponding Source. This
271
+ alternative is allowed only occasionally and noncommercially, and
272
+ only if you received the object code with such an offer, in accord
273
+ with subsection 6b.
274
+
275
+ d) Convey the object code by offering access from a designated
276
+ place (gratis or for a charge), and offer equivalent access to the
277
+ Corresponding Source in the same way through the same place at no
278
+ further charge. You need not require recipients to copy the
279
+ Corresponding Source along with the object code. If the place to
280
+ copy the object code is a network server, the Corresponding Source
281
+ may be on a different server (operated by you or a third party)
282
+ that supports equivalent copying facilities, provided you maintain
283
+ clear directions next to the object code saying where to find the
284
+ Corresponding Source. Regardless of what server hosts the
285
+ Corresponding Source, you remain obligated to ensure that it is
286
+ available for as long as needed to satisfy these requirements.
287
+
288
+ e) Convey the object code using peer-to-peer transmission, provided
289
+ you inform other peers where the object code and Corresponding
290
+ Source of the work are being offered to the general public at no
291
+ charge under subsection 6d.
292
+
293
+ A separable portion of the object code, whose source code is excluded
294
+ from the Corresponding Source as a System Library, need not be
295
+ included in conveying the object code work.
296
+
297
+ A "User Product" is either (1) a "consumer product", which means any
298
+ tangible personal property which is normally used for personal, family,
299
+ or household purposes, or (2) anything designed or sold for incorporation
300
+ into a dwelling. In determining whether a product is a consumer product,
301
+ doubtful cases shall be resolved in favor of coverage. For a particular
302
+ product received by a particular user, "normally used" refers to a
303
+ typical or common use of that class of product, regardless of the status
304
+ of the particular user or of the way in which the particular user
305
+ actually uses, or expects or is expected to use, the product. A product
306
+ is a consumer product regardless of whether the product has substantial
307
+ commercial, industrial or non-consumer uses, unless such uses represent
308
+ the only significant mode of use of the product.
309
+
310
+ "Installation Information" for a User Product means any methods,
311
+ procedures, authorization keys, or other information required to install
312
+ and execute modified versions of a covered work in that User Product from
313
+ a modified version of its Corresponding Source. The information must
314
+ suffice to ensure that the continued functioning of the modified object
315
+ code is in no case prevented or interfered with solely because
316
+ modification has been made.
317
+
318
+ If you convey an object code work under this section in, or with, or
319
+ specifically for use in, a User Product, and the conveying occurs as
320
+ part of a transaction in which the right of possession and use of the
321
+ User Product is transferred to the recipient in perpetuity or for a
322
+ fixed term (regardless of how the transaction is characterized), the
323
+ Corresponding Source conveyed under this section must be accompanied
324
+ by the Installation Information. But this requirement does not apply
325
+ if neither you nor any third party retains the ability to install
326
+ modified object code on the User Product (for example, the work has
327
+ been installed in ROM).
328
+
329
+ The requirement to provide Installation Information does not include a
330
+ requirement to continue to provide support service, warranty, or updates
331
+ for a work that has been modified or installed by the recipient, or for
332
+ the User Product in which it has been modified or installed. Access to a
333
+ network may be denied when the modification itself materially and
334
+ adversely affects the operation of the network or violates the rules and
335
+ protocols for communication across the network.
336
+
337
+ Corresponding Source conveyed, and Installation Information provided,
338
+ in accord with this section must be in a format that is publicly
339
+ documented (and with an implementation available to the public in
340
+ source code form), and must require no special password or key for
341
+ unpacking, reading or copying.
342
+
343
+ 7. Additional Terms.
344
+
345
+ "Additional permissions" are terms that supplement the terms of this
346
+ License by making exceptions from one or more of its conditions.
347
+ Additional permissions that are applicable to the entire Program shall
348
+ be treated as though they were included in this License, to the extent
349
+ that they are valid under applicable law. If additional permissions
350
+ apply only to part of the Program, that part may be used separately
351
+ under those permissions, but the entire Program remains governed by
352
+ this License without regard to the additional permissions.
353
+
354
+ When you convey a copy of a covered work, you may at your option
355
+ remove any additional permissions from that copy, or from any part of
356
+ it. (Additional permissions may be written to require their own
357
+ removal in certain cases when you modify the work.) You may place
358
+ additional permissions on material, added by you to a covered work,
359
+ for which you have or can give appropriate copyright permission.
360
+
361
+ Notwithstanding any other provision of this License, for material you
362
+ add to a covered work, you may (if authorized by the copyright holders of
363
+ that material) supplement the terms of this License with terms:
364
+
365
+ a) Disclaiming warranty or limiting liability differently from the
366
+ terms of sections 15 and 16 of this License; or
367
+
368
+ b) Requiring preservation of specified reasonable legal notices or
369
+ author attributions in that material or in the Appropriate Legal
370
+ Notices displayed by works containing it; or
371
+
372
+ c) Prohibiting misrepresentation of the origin of that material, or
373
+ requiring that modified versions of such material be marked in
374
+ reasonable ways as different from the original version; or
375
+
376
+ d) Limiting the use for publicity purposes of names of licensors or
377
+ authors of the material; or
378
+
379
+ e) Declining to grant rights under trademark law for use of some
380
+ trade names, trademarks, or service marks; or
381
+
382
+ f) Requiring indemnification of licensors and authors of that
383
+ material by anyone who conveys the material (or modified versions of
384
+ it) with contractual assumptions of liability to the recipient, for
385
+ any liability that these contractual assumptions directly impose on
386
+ those licensors and authors.
387
+
388
+ All other non-permissive additional terms are considered "further
389
+ restrictions" within the meaning of section 10. If the Program as you
390
+ received it, or any part of it, contains a notice stating that it is
391
+ governed by this License along with a term that is a further
392
+ restriction, you may remove that term. If a license document contains
393
+ a further restriction but permits relicensing or conveying under this
394
+ License, you may add to a covered work material governed by the terms
395
+ of that license document, provided that the further restriction does
396
+ not survive such relicensing or conveying.
397
+
398
+ If you add terms to a covered work in accord with this section, you
399
+ must place, in the relevant source files, a statement of the
400
+ additional terms that apply to those files, or a notice indicating
401
+ where to find the applicable terms.
402
+
403
+ Additional terms, permissive or non-permissive, may be stated in the
404
+ form of a separately written license, or stated as exceptions;
405
+ the above requirements apply either way.
406
+
407
+ 8. Termination.
408
+
409
+ You may not propagate or modify a covered work except as expressly
410
+ provided under this License. Any attempt otherwise to propagate or
411
+ modify it is void, and will automatically terminate your rights under
412
+ this License (including any patent licenses granted under the third
413
+ paragraph of section 11).
414
+
415
+ However, if you cease all violation of this License, then your
416
+ license from a particular copyright holder is reinstated (a)
417
+ provisionally, unless and until the copyright holder explicitly and
418
+ finally terminates your license, and (b) permanently, if the copyright
419
+ holder fails to notify you of the violation by some reasonable means
420
+ prior to 60 days after the cessation.
421
+
422
+ Moreover, your license from a particular copyright holder is
423
+ reinstated permanently if the copyright holder notifies you of the
424
+ violation by some reasonable means, this is the first time you have
425
+ received notice of violation of this License (for any work) from that
426
+ copyright holder, and you cure the violation prior to 30 days after
427
+ your receipt of the notice.
428
+
429
+ Termination of your rights under this section does not terminate the
430
+ licenses of parties who have received copies or rights from you under
431
+ this License. If your rights have been terminated and not permanently
432
+ reinstated, you do not qualify to receive new licenses for the same
433
+ material under section 10.
434
+
435
+ 9. Acceptance Not Required for Having Copies.
436
+
437
+ You are not required to accept this License in order to receive or
438
+ run a copy of the Program. Ancillary propagation of a covered work
439
+ occurring solely as a consequence of using peer-to-peer transmission
440
+ to receive a copy likewise does not require acceptance. However,
441
+ nothing other than this License grants you permission to propagate or
442
+ modify any covered work. These actions infringe copyright if you do
443
+ not accept this License. Therefore, by modifying or propagating a
444
+ covered work, you indicate your acceptance of this License to do so.
445
+
446
+ 10. Automatic Licensing of Downstream Recipients.
447
+
448
+ Each time you convey a covered work, the recipient automatically
449
+ receives a license from the original licensors, to run, modify and
450
+ propagate that work, subject to this License. You are not responsible
451
+ for enforcing compliance by third parties with this License.
452
+
453
+ An "entity transaction" is a transaction transferring control of an
454
+ organization, or substantially all assets of one, or subdividing an
455
+ organization, or merging organizations. If propagation of a covered
456
+ work results from an entity transaction, each party to that
457
+ transaction who receives a copy of the work also receives whatever
458
+ licenses to the work the party's predecessor in interest had or could
459
+ give under the previous paragraph, plus a right to possession of the
460
+ Corresponding Source of the work from the predecessor in interest, if
461
+ the predecessor has it or can get it with reasonable efforts.
462
+
463
+ You may not impose any further restrictions on the exercise of the
464
+ rights granted or affirmed under this License. For example, you may
465
+ not impose a license fee, royalty, or other charge for exercise of
466
+ rights granted under this License, and you may not initiate litigation
467
+ (including a cross-claim or counterclaim in a lawsuit) alleging that
468
+ any patent claim is infringed by making, using, selling, offering for
469
+ sale, or importing the Program or any portion of it.
470
+
471
+ 11. Patents.
472
+
473
+ A "contributor" is a copyright holder who authorizes use under this
474
+ License of the Program or a work on which the Program is based. The
475
+ work thus licensed is called the contributor's "contributor version".
476
+
477
+ A contributor's "essential patent claims" are all patent claims
478
+ owned or controlled by the contributor, whether already acquired or
479
+ hereafter acquired, that would be infringed by some manner, permitted
480
+ by this License, of making, using, or selling its contributor version,
481
+ but do not include claims that would be infringed only as a
482
+ consequence of further modification of the contributor version. For
483
+ purposes of this definition, "control" includes the right to grant
484
+ patent sublicenses in a manner consistent with the requirements of
485
+ this License.
486
+
487
+ Each contributor grants you a non-exclusive, worldwide, royalty-free
488
+ patent license under the contributor's essential patent claims, to
489
+ make, use, sell, offer for sale, import and otherwise run, modify and
490
+ propagate the contents of its contributor version.
491
+
492
+ In the following three paragraphs, a "patent license" is any express
493
+ agreement or commitment, however denominated, not to enforce a patent
494
+ (such as an express permission to practice a patent or covenant not to
495
+ sue for patent infringement). To "grant" such a patent license to a
496
+ party means to make such an agreement or commitment not to enforce a
497
+ patent against the party.
498
+
499
+ If you convey a covered work, knowingly relying on a patent license,
500
+ and the Corresponding Source of the work is not available for anyone
501
+ to copy, free of charge and under the terms of this License, through a
502
+ publicly available network server or other readily accessible means,
503
+ then you must either (1) cause the Corresponding Source to be so
504
+ available, or (2) arrange to deprive yourself of the benefit of the
505
+ patent license for this particular work, or (3) arrange, in a manner
506
+ consistent with the requirements of this License, to extend the patent
507
+ license to downstream recipients. "Knowingly relying" means you have
508
+ actual knowledge that, but for the patent license, your conveying the
509
+ covered work in a country, or your recipient's use of the covered work
510
+ in a country, would infringe one or more identifiable patents in that
511
+ country that you have reason to believe are valid.
512
+
513
+ If, pursuant to or in connection with a single transaction or
514
+ arrangement, you convey, or propagate by procuring conveyance of, a
515
+ covered work, and grant a patent license to some of the parties
516
+ receiving the covered work authorizing them to use, propagate, modify
517
+ or convey a specific copy of the covered work, then the patent license
518
+ you grant is automatically extended to all recipients of the covered
519
+ work and works based on it.
520
+
521
+ A patent license is "discriminatory" if it does not include within
522
+ the scope of its coverage, prohibits the exercise of, or is
523
+ conditioned on the non-exercise of one or more of the rights that are
524
+ specifically granted under this License. You may not convey a covered
525
+ work if you are a party to an arrangement with a third party that is
526
+ in the business of distributing software, under which you make payment
527
+ to the third party based on the extent of your activity of conveying
528
+ the work, and under which the third party grants, to any of the
529
+ parties who would receive the covered work from you, a discriminatory
530
+ patent license (a) in connection with copies of the covered work
531
+ conveyed by you (or copies made from those copies), or (b) primarily
532
+ for and in connection with specific products or compilations that
533
+ contain the covered work, unless you entered into that arrangement,
534
+ or that patent license was granted, prior to 28 March 2007.
535
+
536
+ Nothing in this License shall be construed as excluding or limiting
537
+ any implied license or other defenses to infringement that may
538
+ otherwise be available to you under applicable patent law.
539
+
540
+ 12. No Surrender of Others' Freedom.
541
+
542
+ If conditions are imposed on you (whether by court order, agreement or
543
+ otherwise) that contradict the conditions of this License, they do not
544
+ excuse you from the conditions of this License. If you cannot convey a
545
+ covered work so as to satisfy simultaneously your obligations under this
546
+ License and any other pertinent obligations, then as a consequence you may
547
+ not convey it at all. For example, if you agree to terms that obligate you
548
+ to collect a royalty for further conveying from those to whom you convey
549
+ the Program, the only way you could satisfy both those terms and this
550
+ License would be to refrain entirely from conveying the Program.
551
+
552
+ 13. Use with the GNU Affero General Public License.
553
+
554
+ Notwithstanding any other provision of this License, you have
555
+ permission to link or combine any covered work with a work licensed
556
+ under version 3 of the GNU Affero General Public License into a single
557
+ combined work, and to convey the resulting work. The terms of this
558
+ License will continue to apply to the part which is the covered work,
559
+ but the special requirements of the GNU Affero General Public License,
560
+ section 13, concerning interaction through a network will apply to the
561
+ combination as such.
562
+
563
+ 14. Revised Versions of this License.
564
+
565
+ The Free Software Foundation may publish revised and/or new versions of
566
+ the GNU General Public License from time to time. Such new versions will
567
+ be similar in spirit to the present version, but may differ in detail to
568
+ address new problems or concerns.
569
+
570
+ Each version is given a distinguishing version number. If the
571
+ Program specifies that a certain numbered version of the GNU General
572
+ Public License "or any later version" applies to it, you have the
573
+ option of following the terms and conditions either of that numbered
574
+ version or of any later version published by the Free Software
575
+ Foundation. If the Program does not specify a version number of the
576
+ GNU General Public License, you may choose any version ever published
577
+ by the Free Software Foundation.
578
+
579
+ If the Program specifies that a proxy can decide which future
580
+ versions of the GNU General Public License can be used, that proxy's
581
+ public statement of acceptance of a version permanently authorizes you
582
+ to choose that version for the Program.
583
+
584
+ Later license versions may give you additional or different
585
+ permissions. However, no additional obligations are imposed on any
586
+ author or copyright holder as a result of your choosing to follow a
587
+ later version.
588
+
589
+ 15. Disclaimer of Warranty.
590
+
591
+ THERE IS NO WARRANTY FOR THE PROGRAM, TO THE EXTENT PERMITTED BY
592
+ APPLICABLE LAW. EXCEPT WHEN OTHERWISE STATED IN WRITING THE COPYRIGHT
593
+ HOLDERS AND/OR OTHER PARTIES PROVIDE THE PROGRAM "AS IS" WITHOUT WARRANTY
594
+ OF ANY KIND, EITHER EXPRESSED OR IMPLIED, INCLUDING, BUT NOT LIMITED TO,
595
+ THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
596
+ PURPOSE. THE ENTIRE RISK AS TO THE QUALITY AND PERFORMANCE OF THE PROGRAM
597
+ IS WITH YOU. SHOULD THE PROGRAM PROVE DEFECTIVE, YOU ASSUME THE COST OF
598
+ ALL NECESSARY SERVICING, REPAIR OR CORRECTION.
599
+
600
+ 16. Limitation of Liability.
601
+
602
+ IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN WRITING
603
+ WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MODIFIES AND/OR CONVEYS
604
+ THE PROGRAM AS PERMITTED ABOVE, BE LIABLE TO YOU FOR DAMAGES, INCLUDING ANY
605
+ GENERAL, SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGES ARISING OUT OF THE
606
+ USE OR INABILITY TO USE THE PROGRAM (INCLUDING BUT NOT LIMITED TO LOSS OF
607
+ DATA OR DATA BEING RENDERED INACCURATE OR LOSSES SUSTAINED BY YOU OR THIRD
608
+ PARTIES OR A FAILURE OF THE PROGRAM TO OPERATE WITH ANY OTHER PROGRAMS),
609
+ EVEN IF SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE POSSIBILITY OF
610
+ SUCH DAMAGES.
611
+
612
+ 17. Interpretation of Sections 15 and 16.
613
+
614
+ If the disclaimer of warranty and limitation of liability provided
615
+ above cannot be given local legal effect according to their terms,
616
+ reviewing courts shall apply local law that most closely approximates
617
+ an absolute waiver of all civil liability in connection with the
618
+ Program, unless a warranty or assumption of liability accompanies a
619
+ copy of the Program in return for a fee.
620
+
621
+ END OF TERMS AND CONDITIONS
622
+
623
+ How to Apply These Terms to Your New Programs
624
+
625
+ If you develop a new program, and you want it to be of the greatest
626
+ possible use to the public, the best way to achieve this is to make it
627
+ free software which everyone can redistribute and change under these terms.
628
+
629
+ To do so, attach the following notices to the program. It is safest
630
+ to attach them to the start of each source file to most effectively
631
+ state the exclusion of warranty; and each file should have at least
632
+ the "copyright" line and a pointer to where the full notice is found.
633
+
634
+ {one line to give the program's name and a brief idea of what it does.}
635
+ Copyright (C) {year} {name of author}
636
+
637
+ This program is free software: you can redistribute it and/or modify
638
+ it under the terms of the GNU General Public License as published by
639
+ the Free Software Foundation, either version 3 of the License, or
640
+ (at your option) any later version.
641
+
642
+ This program is distributed in the hope that it will be useful,
643
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
644
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
645
+ GNU General Public License for more details.
646
+
647
+ You should have received a copy of the GNU General Public License
648
+ along with this program. If not, see <http://www.gnu.org/licenses/>.
649
+
650
+ Also add information on how to contact you by electronic and paper mail.
651
+
652
+ If the program does terminal interaction, make it output a short
653
+ notice like this when it starts in an interactive mode:
654
+
655
+ {project} Copyright (C) {year} {fullname}
656
+ This program comes with ABSOLUTELY NO WARRANTY; for details type `show w'.
657
+ This is free software, and you are welcome to redistribute it
658
+ under certain conditions; type `show c' for details.
659
+
660
+ The hypothetical commands `show w' and `show c' should show the appropriate
661
+ parts of the General Public License. Of course, your program's commands
662
+ might be different; for a GUI interface, you would use an "about box".
663
+
664
+ You should also get your employer (if you work as a programmer) or school,
665
+ if any, to sign a "copyright disclaimer" for the program, if necessary.
666
+ For more information on this, and how to apply and follow the GNU GPL, see
667
+ <http://www.gnu.org/licenses/>.
668
+
669
+ The GNU General Public License does not permit incorporating your program
670
+ into proprietary programs. If your program is a subroutine library, you
671
+ may consider it more useful to permit linking proprietary applications with
672
+ the library. If this is what you want to do, use the GNU Lesser General
673
+ Public License instead of this License. But first, please read
674
+ <http://www.gnu.org/philosophy/why-not-lgpl.html>.
vendor/codeinwp/themeisle-sdk/class-themeisle-sdk-endpoints.php ADDED
@@ -0,0 +1,312 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <?php
2
+ /**
3
+ * The class that exposes endpoints.
4
+ *
5
+ * @package ThemeIsleSDK
6
+ * @subpackage Endpoints
7
+ * @copyright Copyright (c) 2017, Marius Cristea
8
+ * @license http://opensource.org/licenses/gpl-3.0.php GNU Public License
9
+ * @since 1.0.0
10
+ */
11
+ // Exit if accessed directly.
12
+ if ( ! defined( 'ABSPATH' ) ) {
13
+ exit;
14
+ }
15
+ if ( ! class_exists( 'ThemeIsle_SDK_Endpoints' ) ) :
16
+ /**
17
+ * Expose endpoints for ThemeIsle SDK.
18
+ */
19
+ final class ThemeIsle_SDK_Endpoints {
20
+
21
+ const SDK_ENDPOINT = 'themeisle-sdk';
22
+ const SDK_ENDPOINT_VERSION = 1;
23
+
24
+ const HASH_FILE = 'themeisle-hash.json';
25
+
26
+ // if true, the endpoint will expect a product slug and will return the value only for that.
27
+ const PRODUCT_SPECIFIC = false;
28
+
29
+ /**
30
+ * @var ThemeIsle_SDK_Product $products Array of Themeisle Product.
31
+ */
32
+ static protected $products = array();
33
+
34
+ /**
35
+ * ThemeIsle_SDK_Endpoints constructor.
36
+ *
37
+ * @param ThemeIsle_SDK_Product $product_object Product Object.
38
+ */
39
+ public function __construct( $product_object ) {
40
+ if ( $product_object instanceof ThemeIsle_SDK_Product ) {
41
+ self::$products[] = $product_object;
42
+ }
43
+ $this->setup_endpoints();
44
+ }
45
+
46
+ /**
47
+ * Setup endpoints.
48
+ */
49
+ private function setup_endpoints() {
50
+ global $wp_version;
51
+ if ( version_compare( $wp_version, '4.4', '<' ) ) {
52
+ // no REST support.
53
+ return;
54
+ }
55
+
56
+ $this->setup_rest();
57
+ }
58
+
59
+ /**
60
+ * Setup REST endpoints.
61
+ */
62
+ private function setup_rest() {
63
+ add_action( 'rest_api_init', array( $this, 'rest_register' ) );
64
+ }
65
+
66
+ /**
67
+ * Registers the endpoints
68
+ */
69
+ function rest_register() {
70
+ register_rest_route(
71
+ self::SDK_ENDPOINT . '/v' . self::SDK_ENDPOINT_VERSION,
72
+ '/checksum/' . ( self::PRODUCT_SPECIFIC ? '(?P<slug>.*)/' : '' ),
73
+ array(
74
+ 'methods' => 'GET',
75
+ 'callback' => array( $this, 'checksum' ),
76
+ )
77
+ );
78
+ }
79
+
80
+ /**
81
+ * The checksum endpoint.
82
+ *
83
+ * @param WP_REST_Request $data the request.
84
+ *
85
+ * @return WP_REST_Response Response or the error
86
+ */
87
+ function checksum( WP_REST_Request $data ) {
88
+ $products = self::$products;
89
+ if ( self::PRODUCT_SPECIFIC ) {
90
+ $params = $this->validate_params( $data, array( 'slug' ) );
91
+ foreach ( self::$products as $product ) {
92
+ if ( $params['slug'] === $product->get_slug() ) {
93
+ $products = array( $product );
94
+ break;
95
+ }
96
+ }
97
+ }
98
+ $response = array();
99
+ $custom_css = $this->has_custom_css();
100
+ if ( is_bool( $custom_css ) ) {
101
+ $response['custom_css'] = $custom_css;
102
+ }
103
+
104
+ $response['child_theme'] = $this->get_theme_properties();
105
+
106
+ foreach ( $products as $product ) {
107
+ $files = array();
108
+ switch ( $product->get_type() ) {
109
+ case 'plugin':
110
+ $files = array();
111
+ break;
112
+ case 'theme':
113
+ $files = array( 'style.css', 'functions.php' );
114
+ break;
115
+ }
116
+
117
+ $error = '';
118
+
119
+ // if any element in the $files array contains a '/', this would imply recursion is required.
120
+ $diff = $this->generate_diff( $product, $files, array_reduce( $files, array( $this, 'is_recursion_required' ), false ) );
121
+ if ( is_wp_error( $diff ) ) {
122
+ $error = $diff->get_error_message();
123
+ $diff = array();
124
+ }
125
+
126
+ $response['products'][] = array(
127
+ 'slug' => $product->get_slug(),
128
+ 'version' => $product->get_version(),
129
+ 'diffs' => $diff,
130
+ 'error' => $error,
131
+ );
132
+ }
133
+
134
+ return new WP_REST_Response( array( 'checksum' => $response ) );
135
+ }
136
+
137
+ /**
138
+ * Get the current theme properties.
139
+ *
140
+ * @return array Properties of the current theme.
141
+ */
142
+ function get_theme_properties() {
143
+ if ( ! is_child_theme() ) {
144
+ return false;
145
+ }
146
+
147
+ $properties = array();
148
+ $theme = wp_get_theme();
149
+ // @codingStandardsIgnoreStart
150
+ $properties['name'] = $theme->Name;
151
+ // @codingStandardsIgnoreEnd
152
+
153
+ // get the files in the child theme.
154
+ require_once( ABSPATH . 'wp-admin/includes/file.php' );
155
+ WP_Filesystem();
156
+ global $wp_filesystem;
157
+ $path = str_replace( ABSPATH, $wp_filesystem->abspath(), get_stylesheet_directory() );
158
+ $list = $wp_filesystem->dirlist( $path, false, false );
159
+ if ( $list ) {
160
+ $list = array_keys( self::flatten_dirlist( $list ) );
161
+ $properties['files'] = $list;
162
+ }
163
+ return $properties;
164
+ }
165
+
166
+ /**
167
+ * Check if custom css has been added to the theme.
168
+ *
169
+ * @return bool Whether custom css has been added to the theme.
170
+ */
171
+ private function has_custom_css() {
172
+ $query = new WP_Query(
173
+ array(
174
+ 'post_type' => 'custom_css',
175
+ 'post_status' => 'publish',
176
+ 'numberposts' => 1,
177
+ 'update_post_meta_cache' => false,
178
+ 'update_post_term_cache' => false,
179
+ )
180
+ );
181
+
182
+ if ( $query->have_posts() ) {
183
+ $query->the_post();
184
+ $content = get_the_content();
185
+ // if the content contains a colon, a CSS rule has been added.
186
+ return strpos( $content, ':' ) === false ? false : true;
187
+ }
188
+ return false;
189
+ }
190
+
191
+ /**
192
+ * Check if recursion needs to be enabled on the WP_Filesystem by reducing the array of files to a boolean.
193
+ *
194
+ * @param string $carry Value of the previous iteration.
195
+ * @param string $item Value of the current iteration.
196
+ *
197
+ * @return bool Whether to recurse or not.
198
+ */
199
+ function is_recursion_required( $carry, $item ) {
200
+ if ( ! $carry ) {
201
+ return ( strpos( $item, '/' ) !== false );
202
+ }
203
+ return $carry;
204
+ }
205
+
206
+ /**
207
+ * Generate the diff of the files.
208
+ *
209
+ * @param ThemeIsle_SDK_Product $product Themeisle Product.
210
+ * @param array $files Array of files.
211
+ * @param bool $recurse Whether to recurse or not.
212
+ *
213
+ * @return string
214
+ */
215
+ private function generate_diff( $product, $files, $recurse = false ) {
216
+ require_once( ABSPATH . 'wp-admin/includes/file.php' );
217
+ WP_Filesystem();
218
+ global $wp_filesystem;
219
+
220
+ $diff = array();
221
+ $path = str_replace( ABSPATH, $wp_filesystem->abspath(), plugin_dir_path( $product->get_basefile() ) );
222
+ $list = $wp_filesystem->dirlist( $path, false, $recurse );
223
+ // nothing found.
224
+ if ( ! $list ) {
225
+ return $diff;
226
+ }
227
+ $list = array_keys( self::flatten_dirlist( $list ) );
228
+
229
+ // now let's get the valid files that actually exist.
230
+ if ( empty( $files ) ) {
231
+ $files = $list;
232
+ } else {
233
+ $files = array_intersect( $files, $list );
234
+ }
235
+
236
+ // fetch the calculated hashes.
237
+ if ( ! $wp_filesystem->is_readable( $path . '/' . self::HASH_FILE ) ) {
238
+ return new WP_Error( 'themeisle_sdk_hash_not_found', sprintf( '%s not found', self::HASH_FILE ) );
239
+ }
240
+
241
+ $hashes = json_decode( $wp_filesystem->get_contents( $path . '/' . self::HASH_FILE ), true );
242
+ ksort( $hashes );
243
+
244
+ $diff = array();
245
+ foreach ( $files as $file ) {
246
+ // file does not exist in the hashes.
247
+ if ( ! array_key_exists( $file, $hashes ) ) {
248
+ continue;
249
+ }
250
+ $new = md5( $wp_filesystem->get_contents( $path . $file ) );
251
+ $old = $hashes[ $file ];
252
+
253
+ // same hash, bail.
254
+ if ( $new === $old ) {
255
+ continue;
256
+ }
257
+ $diff[] = $file;
258
+ }
259
+ return $diff;
260
+ }
261
+
262
+ /**
263
+ * Flatten the results of WP_Filesystem::dirlist() for iterating over.
264
+ *
265
+ * @access private
266
+ *
267
+ * @param array $nested_files Array of files as returned by WP_Filesystem::dirlist().
268
+ * @param string $path Relative path to prepend to child nodes. Optional.
269
+ * @return array $files A flattened array of the $nested_files specified.
270
+ */
271
+ private static function flatten_dirlist( $nested_files, $path = '' ) {
272
+ $files = array();
273
+ foreach ( $nested_files as $name => $details ) {
274
+ $files[ $path . $name ] = $details;
275
+ // Append children recursively
276
+ if ( ! empty( $details['files'] ) ) {
277
+ $children = self::flatten_dirlist( $details['files'], $path . $name . '/' );
278
+ // Merge keeping possible numeric keys, which array_merge() will reindex from 0..n
279
+ $files = $files + $children;
280
+ }
281
+ }
282
+ return $files;
283
+ }
284
+
285
+ /**
286
+ * Validates the parameters to the API
287
+ *
288
+ * @param WP_REST_Request $data the request.
289
+ * @param array $params the parameters to validate.
290
+ *
291
+ * @return array of parameter name=>value
292
+ */
293
+ private function validate_params( WP_REST_Request $data, $params ) {
294
+ $collect = array();
295
+ foreach ( $params as $param ) {
296
+ $value = sanitize_text_field( $data[ $param ] );
297
+ if ( empty( $value ) ) {
298
+ return new WP_Error(
299
+ 'themeisle_' . $param . '_invalid', sprintf( 'Invalid %', $param ), array(
300
+ 'status' => 403,
301
+ )
302
+ );
303
+ } else {
304
+ $collect[ $param ] = $value;
305
+ }
306
+ }
307
+
308
+ return $collect;
309
+ }
310
+
311
+ }
312
+ endif;
vendor/codeinwp/themeisle-sdk/class-themeisle-sdk-feedback-deactivate.php ADDED
@@ -0,0 +1,556 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <?php
2
+ /**
3
+ * The deactivate feedback model class for ThemeIsle SDK
4
+ *
5
+ * @package ThemeIsleSDK
6
+ * @subpackage Feedback
7
+ * @copyright Copyright (c) 2017, Marius Cristea
8
+ * @license http://opensource.org/licenses/gpl-3.0.php GNU Public License
9
+ * @since 1.0.0
10
+ */
11
+ // Exit if accessed directly.
12
+ if ( ! defined( 'ABSPATH' ) ) {
13
+ exit;
14
+ }
15
+ if ( ! class_exists( 'ThemeIsle_SDK_Feedback_Deactivate' ) ) :
16
+ /**
17
+ * Deactivate feedback model for ThemeIsle SDK.
18
+ */
19
+ class ThemeIsle_SDK_Feedback_Deactivate extends ThemeIsle_SDK_Feedback {
20
+
21
+ /**
22
+ * @var array $options_plugin The main options list for plugins.
23
+ */
24
+ private $options_plugin = array(
25
+ 'I found a better plugin' => array(
26
+ 'id' => 3,
27
+ 'type' => 'text',
28
+ 'placeholder' => 'What\'s the plugin\'s name?',
29
+ ),
30
+ 'I could not get the plugin to work' => array(
31
+ 'id' => 4,
32
+ ),
33
+ 'I no longer need the plugin' => array(
34
+ 'id' => 5,
35
+ 'type' => 'textarea',
36
+ 'placeholder' => 'If you could improve one thing about our product, what would it be?',
37
+ ),
38
+ 'It\'s a temporary deactivation. I\'m just debugging an issue.' => array(
39
+ 'id' => 6,
40
+ ),
41
+ );
42
+
43
+ /**
44
+ * @var array $options_theme The main options list for themes.
45
+ */
46
+ private $options_theme = array(
47
+ 'I don\'t know how to make it look like demo' => array(
48
+ 'id' => 7,
49
+ ),
50
+ 'It lacks options' => array(
51
+ 'id' => 8,
52
+ ),
53
+ 'Is not working with a plugin that I need' => array(
54
+ 'id' => 9,
55
+ 'type' => 'text',
56
+ 'placeholder' => 'What is the name of the plugin',
57
+ ),
58
+ 'I want to try a new design, I don\'t like {theme} style' => array(
59
+ 'id' => 10,
60
+ ),
61
+ );
62
+
63
+ /**
64
+ * @var array $other The other option
65
+ */
66
+ private $other = array(
67
+ 'Other' => array(
68
+ 'id' => 999,
69
+ 'type' => 'textarea',
70
+ 'placeholder' => 'cmon cmon tell us',
71
+ ),
72
+ );
73
+
74
+ /**
75
+ * @var string $heading_plugin The heading of the modal
76
+ */
77
+ private $heading_plugin = 'Quick Feedback <span>Because we care about our clients, please leave us a feedback.</span>';
78
+
79
+ /**
80
+ * @var string $heading_theme The heading of the modal
81
+ */
82
+ private $heading_theme = 'Looking to change {theme} <span> What does not work for you?</span>';
83
+
84
+ /**
85
+ * @var string $button_submit_before The text of the deactivate button before an option is chosen
86
+ */
87
+ private $button_submit_before = 'Skip &amp; Deactivate';
88
+
89
+ /**
90
+ * @var string $button_submit The text of the deactivate button
91
+ */
92
+ private $button_submit = 'Submit &amp; Deactivate';
93
+
94
+ /**
95
+ * @var string $button_cancel The text of the cancel button
96
+ */
97
+ private $button_cancel = 'Skip &amp; Deactivate';
98
+
99
+ /**
100
+ * @var int how many seconds before the deactivation window is triggered for themes
101
+ */
102
+ const AUTO_TRIGGER_DEACTIVATE_WINDOW_SECONDS = 3;
103
+
104
+ /**
105
+ * @var int how many days before the deactivation window pops up again for the theme
106
+ */
107
+ const PAUSE_DEACTIVATE_WINDOW_DAYS = 100;
108
+
109
+ /**
110
+ * ThemeIsle_SDK_Feedback_Deactivate constructor.
111
+ *
112
+ * @param ThemeIsle_SDK_Product $product_object The product object.
113
+ */
114
+ public function __construct( $product_object ) {
115
+ parent::__construct( $product_object );
116
+ }
117
+
118
+ /**
119
+ * Registers the hooks
120
+ */
121
+ public function setup_hooks_child() {
122
+ global $pagenow;
123
+
124
+ if ( ( $this->product->get_type() === 'plugin' && $pagenow === 'plugins.php' ) || ( $this->product->get_type() === 'theme' && $pagenow === 'theme-install.php' ) ) {
125
+ add_action( 'admin_head', array( $this, 'load_resources' ) );
126
+ }
127
+ add_action( 'wp_ajax_' . $this->product->get_key() . __CLASS__, array( $this, 'post_deactivate' ) );
128
+ }
129
+
130
+ /**
131
+ * Loads the additional resources
132
+ */
133
+ function load_resources() {
134
+ add_thickbox();
135
+
136
+ $id = $this->product->get_key() . '_deactivate';
137
+
138
+ $this->add_css( $this->product->get_type(), $this->product->get_key() );
139
+ $this->add_js( $this->product->get_type(), $this->product->get_key(), '#TB_inline?' . apply_filters( $this->product->get_key() . '_feedback_deactivate_attributes', 'width=600&height=550' ) . '&inlineId=' . $id );
140
+
141
+ echo '<div id="' . $id . '" style="display:none;" class="themeisle-deactivate-box">' . $this->get_html( $this->product->get_type(), $this->product->get_key() ) . '</div>';
142
+ }
143
+
144
+ /**
145
+ * Loads the css
146
+ *
147
+ * @param string $type The type of product.
148
+ * @param string $key The product key.
149
+ */
150
+ function add_css( $type, $key ) {
151
+ $suffix = 'theme' === $type ? 'theme-install-php' : 'plugins-php';
152
+ ?>
153
+ <style type="text/css" id="<?php echo $key; ?>ti-deactivate-css">
154
+ input[name="ti-deactivate-option"] ~ div {
155
+ display: none;
156
+ }
157
+
158
+ input[name="ti-deactivate-option"]:checked ~ div {
159
+ display: block;
160
+ }
161
+
162
+ body.<?php echo $suffix; ?> .<?php echo $key; ?>-container #TB_window.thickbox-loading:before {
163
+ background: none !important;
164
+ }
165
+
166
+ body.<?php echo $suffix; ?> .<?php echo $key; ?>-container #TB_title {
167
+ background: url('data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAADwAAAA8CAYAAAA6/NlyAAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAAyFpVFh0WE1MOmNvbS5hZG9iZS54bXAAAAAAADw/eHBhY2tldCBiZWdpbj0i77u/IiBpZD0iVzVNME1wQ2VoaUh6cmVTek5UY3prYzlkIj8+IDx4OnhtcG1ldGEgeG1sbnM6eD0iYWRvYmU6bnM6bWV0YS8iIHg6eG1wdGs9IkFkb2JlIFhNUCBDb3JlIDUuNi1jMTQyIDc5LjE2MDkyNCwgMjAxNy8wNy8xMy0wMTowNjozOSAgICAgICAgIj4gPHJkZjpSREYgeG1sbnM6cmRmPSJodHRwOi8vd3d3LnczLm9yZy8xOTk5LzAyLzIyLXJkZi1zeW50YXgtbnMjIj4gPHJkZjpEZXNjcmlwdGlvbiByZGY6YWJvdXQ9IiIgeG1sbnM6eG1wPSJodHRwOi8vbnMuYWRvYmUuY29tL3hhcC8xLjAvIiB4bWxuczp4bXBNTT0iaHR0cDovL25zLmFkb2JlLmNvbS94YXAvMS4wL21tLyIgeG1sbnM6c3RSZWY9Imh0dHA6Ly9ucy5hZG9iZS5jb20veGFwLzEuMC9zVHlwZS9SZXNvdXJjZVJlZiMiIHhtcDpDcmVhdG9yVG9vbD0iQWRvYmUgUGhvdG9zaG9wIENDIChXaW5kb3dzKSIgeG1wTU06SW5zdGFuY2VJRD0ieG1wLmlpZDpDNkVDM0M4RkYxMzMxMUU3OEMyMkQ0NTIxRTVEQ0ZBRiIgeG1wTU06RG9jdW1lbnRJRD0ieG1wLmRpZDpDNkVDM0M5MEYxMzMxMUU3OEMyMkQ0NTIxRTVEQ0ZBRiI+IDx4bXBNTTpEZXJpdmVkRnJvbSBzdFJlZjppbnN0YW5jZUlEPSJ4bXAuaWlkOkM2RUMzQzhERjEzMzExRTc4QzIyRDQ1MjFFNURDRkFGIiBzdFJlZjpkb2N1bWVudElEPSJ4bXAuZGlkOkM2RUMzQzhFRjEzMzExRTc4QzIyRDQ1MjFFNURDRkFGIi8+IDwvcmRmOkRlc2NyaXB0aW9uPiA8L3JkZjpSREY+IDwveDp4bXBtZXRhPiA8P3hwYWNrZXQgZW5kPSJyIj8+KBNOswAAFtFJREFUeNrkWwmUXVWV3W/8Y81zkVAhgUwQg00IAYIRGcRuERDSKqALtVEbxRYcGzWIuhatKCYuUXQtERRtFAccQCDtckCZwpRISEIlIXMqlaGGP///ht7n3vd//YRUUkljN718a53U+++//97d95yzz3BvjDAM8fd02May4YndaZhoDErYeu/laCyN8rN16PuDAPA83mcAjjOxd8jcVypydhrlKspCSidlhPIk5T8p9/+PAP8fTrZJaaQ0UFxKiVKk/CvlU5Rk3b0C+gTKFZRvUa75/wJ4EuVcyimU2RGQdkqCkoOBDExjBoJx3Uwm5OlXt4bFrIPgTXSJK+DY59PEO8a5s0mPiEPyfUrwMieh3ED57qsTsJBhoXAOmps+gd6u85AvGtgxQEOmJcfj+vvxDsvS/hzsB5pkgA9QplJuoux59QD2g1ZUvCXhVe+4pnjxJc5gdx8SxTza1jwDY9ntMDdsBlLJQ4O2CTogRs+vBzydFmLCMm98NWl4OvL5O3Hd+09/9p8/iK/9GOjfRHZKpnHZWy7AlbfPRuK918DYTm3H3PHZWrQbVnHKtUBbh201EvSFvHLX0TLlK3ksRLG4HPPmnL7+0vfiaz8EOkwP+aduwPKbZ+DadyzBnVuPBa4nEQf+/hqW0zKvZcqkJoYmi0DTMXo2+cyltiu8oSi+HQrR3UG5+n9Fw6bFmRYJOVehUf/VAsrPacodOPtM3LcmjmPSwMz4cvzXAJEXt6C89gv49rJTcMk3zkdPL8e9e0iTVNHTTziuGTi9D5jF73oaNVg5RnLAjiywagfwp01ybiJufQOOuYMTdf9hg3s5H83oEQIWhYwOMGySf2KNFTjJchW0EMmPKB1KMx2d2LQFGCKtvPD0A1izbitnitcZbrat+T12Fi8i4C5g6y49kDkk7re/RoNtTmo+DiKmFlPupaZPbAPOp3VceSLwYD/fttrFUPlbSNsL+YgtB48QjGKmje+ceBlKlqsATBywIe82sG9TC5OhONqP2wOnucB0wRY13Cn6qQWPYgEtVNZvf8/J3RhnZAprrtjY81qkxHX3jGrtvn8esHgm0wzek6Vf76Y2Q19ncibBmymeM1Mz+H1IS2ji9XfPAuZzAm5+ajLWDn8JKfvymgprQczHyvbpGEh14f2nX89sLyVsehQmbQewKj5GBxtQzMXQ3DvyWcvxz9rPvFf9Fed+ELjnl8Q07To07FyJ3MATCDouxXmL344pO55nmsFs8avMHE8jmH1/puzmkEsarBo7n2dweCbn06YFxJizWJzFErVW5Kwez8m45VTgM08txqqhu5C0HxyDHNIIDSxedCP6Ozk5Bb6rNHzkpCWQTJqlwQcWcgkUh+NXG2b4sf1uSjDGPvQITh98Bh/5F35s6UXTovvR+eaVuPD6O/DRt8bg/uL7CK+nj75mI7DtD0CefhkUopfYkUZtDdyn75Y2kMz+wvtW6s8yMRmCaCLwG2Za6E5ch4xnoMLPZUo2g3uPPQfr25iNFob3U76BpUMTVK2JBLOmP37hU5hE5yzBvbZz2p6lyXYSiH/AvBVLCI/pRvnmG7Fy8nysYtgVEz+jIYPuu7+NSvIe2OfZMIvh4YuQevIRkxYtx6fxd662hkZOzu9257Fk/esZrlaI2arY+PY70d8yhRNZOWKWPobSS4fPFBx37YaeHkwdGrgCqfDWZGveRHAQI6GWje07EXvfRzB/0XzMn0UfzdBnH/oLwrOogTcfS7BbtSaPxL7kfp+aLayliR+nJytDEz8jnsRpDW/F45kVFTfE0rmXo7+VPOqXjygOn0f5qXgk5QnKc9Ty50MVfozbGjqyVFFwIFWM0XkioXPiB8hct9wGfI15Qmo3gnfSb3MZVW4e1SGmHtL8K1u1G1QYciyCflPqPFRK9ouN0/CJM6+LNBtOKA6Lqy6hfJri1H5jWbFUIX9D75597yM/NSWaiwfG4ZeDlpw4ldLvjXO23zOPeYMPw9/HqY5pRj+qg8/1yebYp0ktzwfNDGdgvnvcKnd6P7yKDmcTzLQE7Oc4SMflty1xA21JEyazng8v/4110uDmrrAphBXzdK47kUNYdS7j94ITEI7uhOkEh56sCefsGQ1cEotkIV3+ePKUm856txCXlKCXqLzgMIDfqEowaqQ1YaCv0URrjJyciGHu9k24+k8PsiB1EW8q6rg40S6GzPbZ3bSnOK1xAJZtHrpwmHDM4HODnDbtcAiPetNnb8x1fBFmebnK+oBHKVeOZ9JMBPEfHKDbTrBdKZMZX4gS3TDvmHjvA79BayGDYSONWKo8ce36BNZGgCd3EmyRRDt8BMw8kaNquhXmLC3vrHhOj2GXqp54POUHUVL0hQM1fBXvOjnlGOgm2Arjrcdn5VwHJ2zZggueXYEc4tSOD8vxxupW4zDAJcuaxBDSmUaQzzKS5HXV87cowWFMgWPElBtSHLPGW1I/L64HzGwB75KTjqShrI3JlBprgbnoPz3xONqZrVRoEKYVQrGzmJSkhgJ6PABGBLiPBBW3SJySXHhjJd8rfhiK/CVtF8X1pk3EdP4iL/x36ZOZtUonxClJ3iQ3lqldscQK70tmczj/mRUoE6z8TqolBboKWDqSVeDjabvZ0n7MxCH0A/ytjqyf5msspTCxTpvDEdCmHtZrKYuqgC8VbTe5ot1QZWjyg6ztYNbmzZi+Y5tkViqlNKhdQ4BVw45Dc3Uj0CIHalvuFfsJyuqrMLReAcI6+DGCHsX+AccZRPSR4JCa40bVtF8no4tJ4a7GxXELWLnRDyUBt7DghReQCop8gHFAmhdGPWd7f007ddqu4hLt+gX6vuTJCX4MXnHvlVRzS2lmrfgQxYVROtDg1sb+D6Zql4Y4PsY6ltasAQfanA3Px4xtWyIXqFZd9EXF0KFuw4h2rQioAu3UmbmpQUtiIKHDFKtoQTlb0t+9YkeFFtmNFUNMJw0ydGjUwErH16VNR6/rkT9zJCSJc8tNnjLnkD5rIp3N44TB7UzHx8KI75mcxGiw5XIENgLp2AdoPLq2Tx6aV1qOt01CcUieUTk8w0848SpjXeFUPDvUQmCBAloFK2IyZzC1jlIy8mnqN2bVlDWPlqnVhlwO7SOj/DymjYCARdRgBbA8yHXHfLhewwJW/GSbaJkaDrKwk0m4bXMwujkLv1JSWaJ6vIyoKvJMSWwM6XuVyXWM374kO8FBJknYKYn1T07hKzxyjPbfsE7qWoEyIsxU8SliNvFdZdJ8sctEIVEq1/xXDCVkdVQpOHAk+ZDYVSCQpubIj0w9SDVoQycnTGIwyAcOcBr7mAp6MSS6ephenonsrrX06wzcRJSLmJoMaYD0FpvjINsZbeQhxvAKx5HfiFR7hWltXV9bUtyB45G6YzPMS0scq1XTcFjT8Jiz26r0k4nlVS9ATUJ+jpVKcFgD1/uwvKY4GkeyI6fnbZQgWlt0fSqrDPJ039DgxfSFmkd5/Uk+9DiadSWrfhZjgRxrWohyIY+glFcmboQmgcdYVzTDdJs4KQ0E18RrBGi5KA3vRqb/e2jsLfKxjp5ctxW4mwnRmgHFlZ7y33BMwxHVBDqSlgVwuxF94YU6u/KV8UtzkjE3Yrux0B4qwGHF4kB4U5GmNkoQba21RoGWqI8soMVzHufnN1CaWc/6jh4N73HTSdJoS9TlqIoVdTwkhPH54u+Bg1hbL7zhhfByD8BtciS7AJa3oXD3Ls73ND7Oh7TpqiYtMELolkBkEFmzuqajTDnyYb/6i4NkRAKYZSdBM5pZUWjas0f/KBar8+U6ApNguJevepD3S1oq5WFYjjqT9GOPbiEpZ00KWgLpcVV0p0OE1uE0dHGiCLSBz3osicqyvchk5V1mzb9rJh2pStrdUSDca0buq8ZbZWgvMt4SycejnRgHKYCkiad8VF5C08fOnWPsXGXsGmh+bqTJ/5Gv+4skeOL/uxWJVTMwMuH+f2vnVcCVKMaWYIiKfsf33pLF8EuuKtsrDv1eIkagDTqo8+OSF1Y1vM6MNF5LOJT/Rg5QJPuWGGfNAzoH8rk4EkdxOKGb8uI8+6i1wUHdxKuxdB14N5J7ONCnKEkBRMuo7NXaRtSDluEoYNXzYIxn42KFW2H8mr/9RoD8YAK5bJqG7yGXSMC3rJqGa2YtU1RbnsJacZS9QlyS45vRzETxB3kOcJQAmlnlAC8v6Ya2NaG7saTSTbUSsX2H1mZ3J99i6BaPYYyJpO5Fyvd8zdxn82Ux+nSZBOinOIBG3cEQkgqicCXEZEvSQlm5De6d62CtcMmPDvYNtCh05GXsaGmlm/Pd5aI230hpokBZoeF8+VXA2yX58ALNxYrMOMNhpYJhFv4bWzswbe+gWp4/0JdL+RiGCbplCrVbbeYx91Ya6u2l9jy9hUHFV1NPgISpMuUXPF8VgZ7O8zSBm6MRUdmatITtZa1pE8H+gdHg90xP88yVYw72bGiHR841VdAMsbp7kn5HqJspSsOGNueK1uJW6cvZ0Yr6BWOa9RnfPSU+zbm/vRMX9P91nGIsxMiuBrXkku6kFXhV0FsYn8mufX3UakL7uBFpu8ri0vXYxGvfpbRR+qQ/ymE2+nqhf4TnWzlhLxLwFko+VGwfsHzd3d+OYjamwIp2C2T21cccq0mwluqHKsUs+DV3FJy7BfCDlE+q7ocCW1Ga0H+BZ6YcC+8xs6b9AwHLRO3a1KxCTLo9r8OQaGcX/ZmlJSZz5pv5vR1qbVc3usgT04a+f4R/VxDg414UNH3USjaJ55KvM8Hw6Q4717eiRP5wIt5leoLdqUb0d3VANe/qxik/r/PfX1cbAOTN8F7RqMkSzvA9DVYYkgnBo32TsT3Vwhf44y4/BjTnLRtbMTSQ1pwvaaGQlmRh617UMjwytvovImvDVUJL8LzBlrKGk0CRxSdh9WaGuTSvxwzkMzG8tJYxl2DdCFKoSj0Pz07qow83wygXUQ1Gmp1R5SQx598qwAZ1bwTBZw2/sgu+NmVEJm0z192VTuGxqceypK1gvCpW6ksh602bmrCV4rGiUhqVBN3k+fAwTZOgX1jDV/PdmYzWpLCqG9XTMgFy7lRragkbJKB8EQMbXWxY08yCy1Wldf3CiVS/D594orIaQ1mo7pULCZfHNsfcSxnU+7Sk7RJiA5/+Sf7gzv1MWkyLL//ZSSfirc8/zzwjPKAuHnt5Ujieyf3OXUkMZ1z09mTR0soUUIBX15IlKxOti7nXJyhG3Sq/76kmurx+eNjFjp2NJPE4Gvn8GIz9Jl2UsLmhDQ/PnKUX2eQdQri81w9q95JR8c0xi4wiMjV9l+GX51C7HzUi4hJN28UAj0yZhGe6e3Dqzu3Iwh23G5siMGmrDBdsrNnYgPSuBDoIurWpzCTMZ4IU+a56pRexeFhXaxsoknn3jiSxZyiGQs5BOrTQRgDmAWCrgH8697UYbOZ00BoNy9HRgn4fmrWGrCwobKgDnNAxTmvu0wQ7jdq9WJk1NW3zb9G1cMcpc3Dab7brimmcJpzyKYLu5PAkaR3OGViXt2EPkNASHhqZbCQI3LGDagRRIMuUfNFGJm+xxONAPQspPqNLadXcr8yrHi45ZWeiEXedOo+2WyJ1cGRq+cZSZaTkBtT0V3jh9v04x3SeQpibxxtGRKPSLriaoNtpWgurmnaLJfxqxhRc8WwfXrd9G0Zgjdt3rA6skeWdLEEXGY4ynLgcZ2AoK9SnSa32+9BQnmhT4jxvJcAUn+9EXYvxmkEpavfW+QuxpZ2ESu2GaoVfp6msukbD0FrCRy57Wa8g9p5f0s+eRzi0AIYnhWmZEc94yPTKi0hkvaJpiw5VJE+v7whx0Ysb4Pr2YZeFor6m0riYZRMhNfJvo3wmoJQ6t9DMJKOV0hY6PLcI+uDmW//cBpTxdFcvPn7hBZxAQ2l3LKMz/0jbvoqgfnawBTvLeRvhpVfDSD3Hp3GWStKkdzJGJfaQEeTONYJyl1FxOePD2HT2UnrALrxx5SSUEE60vVYDL3bhEk6cwJIEFuNfV5X7Ri3OH+6pYsoVMvn7Lv5HvNTWBlfiOlSltJl+chOB/htls+ztODjgxbKKx9fGNsFs+gPM9ntZkrK+tEdGjHz3b81ifD7cHZPDObfAbFmJJ2ZmMXVLA07d2oa8mt8j7i++TCa+ZhgyGnhYsuhM/Oqk6YiXmDeY5mBoWt8kwA9QHmYY9BXYcQDbtWEECf3XGoLR8X2QMSgztgT5rvuQ2ngG0ttglRLw3AAfvfZpdIzE8PrVnRhGpa67ZEZtfh0fxwCadZVW9bpRIz8j+nSo60Jdab7rK/Pm4tvzZiNeLA7CjP2ARHUbtfvShNcmEj9JtEWl0J66TZ6S2b4OZmkx06+FLDSVFdRWP8m07QT8nS/NxzmruzEkoGMBUhcW4E4vo9zvIv/LJIKyLLP6SF2Uh9PnofRXF7n7Eyp0WC28fnEOdpeP4tMMQcvjasKc7gqSb8nDag5QfDSO/J8lswoU2K/PnYUbz16wwTGdH5pm7K7QcjZSFGGFJsWOxIrxL8W0Dgp4drSzzVHNSr3Fty3a0jv+ki9BNzHkfHXpPFzy5CTElg0geWlG0yqDcf7HDdjzuVZ0LtuN+Hl5XWyzasrc3ozh25rQ+d1diJ1WrDWbRm5uRebeNLp/NAB7dinaZ2lg9DOt2Ht3E76+YMajSxfM/QFJ7Sem6exToBTYIwcsfxdR7o7ATsw0JFelVg1iuXXzdFy7uEHFT5BtmQUwQlRQejyO+MKC6lQq77HKCAs+ys/FEDtLth/FdP/KLiEYZhnX7yB2ulyXriSvx3i+r1z6ycfmfehtfed/H+1WOc2iIqiCOgrAJC21sYRFLO6LAM+e6Hq0RQ2ULQ99cwy8OdHNCyIs4o0043ce9hQBm6Tt9PB6g4qehpGFPZlAPH52u/X1MAnDzcCeRAMrs7Jy5DoLkYATksoWEyflbyqY7s7n9/WgUIrBdkNNSgKoKkbd+SFIq/6KOP5llPOjnaq7J7QIz/LOzUlY4ODcTmqL3uB06hXYkpR3BGx31V3nfaVQA3Wi+90u1ZVU99ukEIelnt2uvy+45tSpQ6nvXPgAnrrsDlwxaxUrRwsFz8HRHPYBw1+ktv8CA9FC7oSOuBnuYaLcBrvDqHU7jfU6T5LNKwJA9aaCqKMRRDvsOnV3RJp0og11Pa0nSMrRIK9VUtLLE3M6d+Dui36IM57ehqWr3oD+zGRYTFmtowQcQv9HC9Hy6ye42WCfZeDz81NSxFpfVqZbXVU0qsCk5OvV8xdGSyWmdD9oAW5v1I2sjO3ZkL2V1fv90aoidJzypca2cc3Jf8a7pq/CHS8uwJfXnIvthW7FsbI74Uj3Sz9GOScC/fNqDXmQTRXS87mlFARnzYwnll3U1JZFmR7g7dba9Bjh1F4Ot4IKjSUY0vslKzs0CLle3qZ70GLS5c16c4rBqqL8kloN1PsqX9K9aea7+42gHEfaKeLDJz+MNRd/HjedfB+unPYnloQWg4F52Dh8qO8lHk+Jtv+INWSjpp+MarjAYvvnfVNxSXOrlJWP8pY07BaClRLUl//g8Fma7FJqmfVAU3Q9WMfrzFF9ZkdxQ5GTtGoN40lev4cfblVmbST0xBnmI/xHdhcVDo6A8++UlH0+t28qrlxxPVbnZnBOjYOy9OG2Hm6OZPz9/q6EHNG4eTlHuIQaPY7mzN+Yn1N9JMMq0mQ/icquHmpwLa/LXotHVPEalD5EP23l9VUc+fUc9UoOKQU/9x7OLSndelJfHwesckRqtKyVdnLbOjQ4hUPuATP+3v4r3n8LMAAsR90w+kkNLQAAAABJRU5ErkJggg==') 40px 30px no-repeat;
168
+ border: none;
169
+ box-sizing: border-box;
170
+ color: #373e40;
171
+ font-size: 24px;
172
+ font-weight: 700;
173
+ height: 90px;
174
+ padding: 40px 40px 0 120px;
175
+ text-transform: uppercase;
176
+ width: 100%;
177
+ }
178
+
179
+ body.<?php echo $suffix; ?> .<?php echo $key; ?>-container div.actions {
180
+ box-sizing: border-box;
181
+ padding: 30px 40px;
182
+ background-color: #eaeaea;
183
+ }
184
+
185
+ body.<?php echo $suffix; ?> .<?php echo $key; ?>-container input.button {
186
+ background: #ec5d60;
187
+ border: none;
188
+ box-shadow: none;
189
+ color: #ffffff;
190
+ font-size: 15px;
191
+ font-weight: 700;
192
+ height: auto;
193
+ line-height: 20px;
194
+ padding: 10px 15px;
195
+ text-transform: uppercase;
196
+ -webkit-transition: 0.3s ease;
197
+ -moz-transition: 0.3s ease;
198
+ -ms-transition: 0.3s ease;
199
+ -o-transition: 0.3s ease;
200
+ transition: 0.3s ease;
201
+ }
202
+
203
+ body.<?php echo $suffix; ?> .<?php echo $key; ?>-container input.button.button-primary {
204
+ background: transparent;
205
+ box-shadow: none;
206
+ color: #8d9192;
207
+ font-weight: 400;
208
+ float: right;
209
+ line-height: 40px;
210
+ padding: 0;
211
+ text-decoration: underline;
212
+ text-shadow: none;
213
+ text-transform: none;
214
+ }
215
+
216
+ body.<?php echo $suffix; ?> .<?php echo $key; ?>-container input.button:hover {
217
+ background: #e83f42;
218
+ }
219
+
220
+ body.<?php echo $suffix; ?> .<?php echo $key; ?>-container input.button.button-primary:hover {
221
+ background: transparent;
222
+ }
223
+
224
+ body.<?php echo $suffix; ?> .<?php echo $key; ?>-container input.button:focus {
225
+ box-shadow: none;
226
+ outline: none;
227
+ }
228
+
229
+ body.<?php echo $suffix; ?> .<?php echo $key; ?>-container input.button:active {
230
+ box-shadow: none;
231
+ transform: translateY(0);
232
+ }
233
+
234
+ body.<?php echo $suffix; ?> .<?php echo $key; ?>-container input.button:disabled {
235
+ cursor: not-allowed;
236
+ }
237
+
238
+ body.<?php echo $suffix; ?> .<?php echo $key; ?>-container input.button.button-primary:hover {
239
+ text-decoration: none;
240
+ }
241
+
242
+ body.<?php echo $suffix; ?> .<?php echo $key; ?>-container div.revive_network-container {
243
+ background-color: #ffffff;
244
+ }
245
+
246
+ body.<?php echo $suffix; ?> .<?php echo $key; ?>-container ul.ti-list {
247
+ margin: 0;
248
+ }
249
+
250
+ body.<?php echo $suffix; ?> .<?php echo $key; ?>-container ul.ti-list li {
251
+ color: #373e40;
252
+ font-size: 13px;
253
+ margin-bottom: 5px;
254
+ }
255
+
256
+ body.<?php echo $suffix; ?> .<?php echo $key; ?>-container ul.ti-list li label {
257
+ margin-left: 10px;
258
+ line-height: 28px;
259
+ font-size: 15px;
260
+ }
261
+
262
+ body.<?php echo $suffix; ?> .<?php echo $key; ?>-container ul.ti-list input[type=radio] {
263
+ margin-top: 1px;
264
+ }
265
+
266
+ body.<?php echo $suffix; ?> .<?php echo $key; ?>-container #TB_ajaxContent {
267
+ box-sizing: border-box;
268
+ height: auto !important;
269
+ padding: 20px 40px;
270
+ width: 100% !important;
271
+ }
272
+
273
+ body.<?php echo $suffix; ?> .<?php echo $key; ?>-container li div textarea {
274
+ padding: 10px 15px;
275
+ width: 100%;
276
+ }
277
+
278
+ body.<?php echo $suffix; ?> .<?php echo $key; ?>-container ul.ti-list li div {
279
+ margin: 10px 30px;
280
+ }
281
+
282
+ .<?php echo $key; ?>-container #TB_title #TB_ajaxWindowTitle {
283
+ box-sizing: border-box;
284
+ display: block;
285
+ float: none;
286
+ font-weight: 700;
287
+ line-height: 1;
288
+ padding: 0;
289
+ text-align: left;
290
+ width: 100%;
291
+ }
292
+
293
+ .<?php echo $key; ?>-container #TB_title #TB_ajaxWindowTitle span {
294
+ color: #8d9192;
295
+ display: block;
296
+ font-size: 15px;
297
+ font-weight: 400;
298
+ margin-top: 5px;
299
+ text-transform: none;
300
+ }
301
+
302
+ body.<?php echo $suffix; ?> .<?php echo $key; ?>-container .actions {
303
+ width: 100%;
304
+ display: block;
305
+ position: absolute;
306
+ left: 0;
307
+ bottom: 0;
308
+ }
309
+
310
+ .theme-install-php .<?php echo $key; ?>-container #TB_closeWindowButton .tb-close-icon:before {
311
+ font-size: 32px;
312
+ }
313
+
314
+ .<?php echo $key; ?>-container #TB_closeWindowButton .tb-close-icon {
315
+ color: #eee;
316
+ }
317
+
318
+ .<?php echo $key; ?>-container #TB_closeWindowButton {
319
+ left: auto;
320
+ right: -5px;
321
+ top: -35px;
322
+ color: #eee;
323
+ }
324
+
325
+ .<?php echo $key; ?>-container #TB_closeWindowButton .tb-close-icon {
326
+ text-align: right;
327
+ line-height: 25px;
328
+ width: 25px;
329
+ height: 25px;
330
+ }
331
+
332
+ .<?php echo $key; ?>-container #TB_closeWindowButton:focus .tb-close-icon {
333
+ box-shadow: none;
334
+ outline: none;
335
+ }
336
+
337
+ .<?php echo $key; ?>-container #TB_closeWindowButton .tb-close-icon:before {
338
+ font: normal 25px dashicons;
339
+ }
340
+
341
+ body.<?php echo $suffix; ?> .<?php echo $key; ?>-container {
342
+ margin: auto !important;
343
+ height: 500px !important;
344
+ top: 0 !important;
345
+ left: 0 !important;
346
+ bottom: 0 !important;
347
+ right: 0 !important;
348
+ width: 600px !important;
349
+ }
350
+ </style>
351
+ <?php
352
+ }
353
+
354
+ /**
355
+ * Loads the js
356
+ *
357
+ * @param string $type The type of product.
358
+ * @param string $key The product key.
359
+ * @param string $src The url that will hijack the deactivate button url.
360
+ */
361
+ function add_js( $type, $key, $src ) {
362
+ $heading = 'plugin' === $type ? $this->heading_plugin : str_replace( '{theme}', $this->product->get_name(), $this->heading_theme );
363
+ $heading = apply_filters( $this->product->get_key() . '_feedback_deactivate_heading', $heading );
364
+ ?>
365
+ <script type="text/javascript" id="ti-deactivate-js">
366
+ (function ($) {
367
+ $(document).ready(function () {
368
+ var auto_trigger = false;
369
+ var target_element = 'tr[data-plugin^="<?php echo $this->product->get_slug(); ?>/"] span.deactivate a';
370
+ <?php
371
+ if ( 'theme' === $type ) {
372
+ ?>
373
+ auto_trigger = true;
374
+ if ($('a.ti-auto-anchor').length == 0) {
375
+ $('body').append($('<a class="ti-auto-anchor" href=""></a>'));
376
+ }
377
+ target_element = 'a.ti-auto-anchor';
378
+ <?php
379
+ }
380
+ ?>
381
+
382
+ if (auto_trigger) {
383
+ setTimeout(function () {
384
+ $('a.ti-auto-anchor').trigger('click');
385
+ }, <?php echo self::AUTO_TRIGGER_DEACTIVATE_WINDOW_SECONDS * 1000; ?> );
386
+ }
387
+ $(document).on('thickbox:removed', function () {
388
+ $.ajax({
389
+ url: ajaxurl,
390
+ method: 'post',
391
+ data: {
392
+ 'action': '<?php echo $key . __CLASS__; ?>',
393
+ 'nonce': '<?php echo wp_create_nonce( (string) __CLASS__ ); ?>',
394
+ 'type': '<?php echo $type; ?>',
395
+ 'key': '<?php echo $key; ?>'
396
+ },
397
+ });
398
+ });
399
+ var href = $(target_element).attr('href');
400
+ $('#<?php echo $key; ?>ti-deactivate-no').attr('data-ti-action', href).on('click', function (e) {
401
+ e.preventDefault();
402
+ e.stopPropagation();
403
+
404
+ $('body').unbind('thickbox:removed');
405
+ tb_remove();
406
+ var redirect = $(this).attr('data-ti-action');
407
+ if (redirect != '') {
408
+ location.href = redirect;
409
+ }
410
+ });
411
+
412
+ $('#<?php echo $key; ?> ul.ti-list label, #<?php echo $key; ?> ul.ti-list input[name="ti-deactivate-option"]').on('click', function (e) {
413
+ $('#<?php echo $key; ?>ti-deactivate-yes').val($('#<?php echo $key; ?>ti-deactivate-yes').attr('data-after-text'));
414
+
415
+ var radio = $(this).prop('tagName') === 'LABEL' ? $(this).parent() : $(this);
416
+ if (radio.parent().find('textarea').length > 0 && radio.parent().find('textarea').val().length === 0) {
417
+ $('#<?php echo $key; ?>ti-deactivate-yes').attr('disabled', 'disabled');
418
+ radio.parent().find('textarea').on('keyup', function (ee) {
419
+ if ($(this).val().length === 0) {
420
+ $('#<?php echo $key; ?>ti-deactivate-yes').attr('disabled', 'disabled');
421
+ } else {
422
+ $('#<?php echo $key; ?>ti-deactivate-yes').removeAttr('disabled');
423
+ }
424
+ });
425
+ } else {
426
+ $('#<?php echo $key; ?>ti-deactivate-yes').removeAttr('disabled');
427
+ }
428
+ });
429
+
430
+ $('#<?php echo $key; ?>ti-deactivate-yes').attr('data-ti-action', href).on('click', function (e) {
431
+ e.preventDefault();
432
+ e.stopPropagation();
433
+ $.ajax({
434
+ url: ajaxurl,
435
+ method: 'post',
436
+ data: {
437
+ 'action': '<?php echo $key . __CLASS__; ?>',
438
+ 'nonce': '<?php echo wp_create_nonce( (string) __CLASS__ ); ?>',
439
+ 'id': $('#<?php echo $key; ?> input[name="ti-deactivate-option"]:checked').parent().attr('ti-option-id'),
440
+ 'msg': $('#<?php echo $key; ?> input[name="ti-deactivate-option"]:checked').parent().find('textarea').val(),
441
+ 'type': '<?php echo $type; ?>',
442
+ 'key': '<?php echo $key; ?>'
443
+ },
444
+ });
445
+ var redirect = $(this).attr('data-ti-action');
446
+ if (redirect != '') {
447
+ location.href = redirect;
448
+ } else {
449
+ $('body').unbind('thickbox:removed');
450
+ tb_remove();
451
+ }
452
+ });
453
+
454
+ $(target_element).attr('name', '<?php echo wp_kses( $heading, array( 'span' => array() ) ); ?>').attr('href', '<?php echo $src; ?>').addClass('thickbox');
455
+ var thicbox_timer;
456
+ $(target_element).on('click', function () {
457
+ tiBindThickbox();
458
+ });
459
+
460
+ function tiBindThickbox() {
461
+ var thicbox_timer = setTimeout(function () {
462
+ if ($("#<?php echo esc_html( $key ); ?>").is(":visible")) {
463
+ $("body").trigger('thickbox:iframe:loaded');
464
+ $("#TB_window").addClass("<?php echo $key; ?>-container");
465
+ clearTimeout(thicbox_timer);
466
+ $('body').unbind('thickbox:removed');
467
+ } else {
468
+ tiBindThickbox();
469
+ }
470
+ }, 100);
471
+ }
472
+ });
473
+ })(jQuery);
474
+ </script>
475
+ <?php
476
+ }
477
+
478
+ /**
479
+ * Generates the HTML
480
+ *
481
+ * @param string $type The type of product.
482
+ * @param string $key The product key.
483
+ */
484
+ function get_html( $type, $key ) {
485
+ $options = 'plugin' === $type ? $this->options_plugin : $this->options_theme;
486
+ $button_submit_before = 'plugin' === $type ? $this->button_submit_before : 'Submit';
487
+ $button_submit = 'plugin' === $type ? $this->button_submit : 'Submit';
488
+ $options = $this->randomize_options( apply_filters( $this->product->get_key() . '_feedback_deactivate_options', $options ) );
489
+ $button_submit_before = apply_filters( $this->product->get_key() . '_feedback_deactivate_button_submit_before', $button_submit_before );
490
+ $button_submit = apply_filters( $this->product->get_key() . '_feedback_deactivate_button_submit', $button_submit );
491
+ $button_cancel = apply_filters( $this->product->get_key() . '_feedback_deactivate_button_cancel', $this->button_cancel );
492
+
493
+ $options += $this->other;
494
+
495
+ $list = '';
496
+ foreach ( $options as $title => $attributes ) {
497
+ $id = $attributes['id'];
498
+ $list .= '<li ti-option-id="' . $id . '"><input type="radio" name="ti-deactivate-option" id="' . $key . $id . '"><label for="' . $key . $id . '">' . str_replace( '{theme}', $this->product->get_name(), $title ) . '</label>';
499
+ if ( array_key_exists( 'type', $attributes ) ) {
500
+ $list .= '<div>';
501
+ $placeholder = array_key_exists( 'placeholder', $attributes ) ? $attributes['placeholder'] : '';
502
+ switch ( $attributes['type'] ) {
503
+ case 'text':
504
+ $list .= '<textarea style="width: 100%" rows="1" name="comments" placeholder="' . $placeholder . '"></textarea>';
505
+ break;
506
+ case 'textarea':
507
+ $list .= '<textarea style="width: 100%" rows="2" name="comments" placeholder="' . $placeholder . '"></textarea>';
508
+ break;
509
+ }
510
+ $list .= '</div>';
511
+ }
512
+ $list .= '</li>';
513
+ }
514
+
515
+ return '<div id="' . $this->product->get_key() . '">'
516
+ . '<ul class="ti-list">' . $list . '</ul>'
517
+ . '<div class="actions">'
518
+ . get_submit_button(
519
+ $button_submit, 'secondary', $this->product->get_key() . 'ti-deactivate-yes', false, array(
520
+ 'data-after-text' => $button_submit,
521
+ 'disabled' => true,
522
+ )
523
+ )
524
+ . get_submit_button( $button_cancel, 'primary', $this->product->get_key() . 'ti-deactivate-no', false )
525
+ . '</div></div>';
526
+ }
527
+
528
+ /**
529
+ * Called when the deactivate button is clicked
530
+ */
531
+ function post_deactivate() {
532
+ check_ajax_referer( (string) __CLASS__, 'nonce' );
533
+
534
+ if ( ! empty( $_POST['id'] ) ) {
535
+ $this->call_api(
536
+ array(
537
+ 'type' => 'deactivate',
538
+ 'id' => $_POST['id'],
539
+ 'comment' => isset( $_POST['msg'] ) ? $_POST['msg'] : '',
540
+ )
541
+ );
542
+ }
543
+
544
+ $this->post_deactivate_or_cancel();
545
+ }
546
+
547
+ /**
548
+ * Called when the deactivate/cancel button is clicked
549
+ */
550
+ private function post_deactivate_or_cancel() {
551
+ if ( isset( $_POST['type'] ) && isset( $_POST['key'] ) && 'theme' === $_POST['type'] ) {
552
+ set_transient( 'ti_sdk_pause_' . $_POST['key'], true, PAUSE_DEACTIVATE_WINDOW_DAYS * DAY_IN_SECONDS );
553
+ }
554
+ }
555
+ }
556
+ endif;
vendor/codeinwp/themeisle-sdk/class-themeisle-sdk-feedback-factory.php ADDED
@@ -0,0 +1,50 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <?php
2
+ /**
3
+ * The feedback factory class for ThemeIsle SDK
4
+ *
5
+ * @package ThemeIsleSDK
6
+ * @subpackage Feedback
7
+ * @copyright Copyright (c) 2017, Marius Cristea
8
+ * @license http://opensource.org/licenses/gpl-3.0.php GNU Public License
9
+ * @since 1.0.0
10
+ */
11
+ // Exit if accessed directly.
12
+ if ( ! defined( 'ABSPATH' ) ) {
13
+ exit;
14
+ }
15
+ if ( ! class_exists( 'ThemeIsle_SDK_Feedback_Factory' ) ) :
16
+ /**
17
+ * Feedback model for ThemeIsle SDK.
18
+ */
19
+ class ThemeIsle_SDK_Feedback_Factory {
20
+
21
+ /**
22
+ * @var array $instances collection of the instances that are registered with the factory
23
+ */
24
+ private $_instances = array();
25
+
26
+ /**
27
+ * ThemeIsle_SDK_Feedback_Factory constructor.
28
+ *
29
+ * @param ThemeIsle_SDK_Product $product_object Product Object.
30
+ * @param array $feedback_types the feedback types.
31
+ */
32
+ public function __construct( $product_object, $feedback_types ) {
33
+ if ( $product_object instanceof ThemeIsle_SDK_Product && $feedback_types && is_array( $feedback_types ) ) {
34
+ foreach ( $feedback_types as $type ) {
35
+ $class = 'ThemeIsle_SDK_Feedback_' . ucwords( $type );
36
+ $instance = new $class( $product_object );
37
+ $this->_instances[ $type ] = $instance;
38
+ $instance->setup_hooks();
39
+ }
40
+ }
41
+ }
42
+
43
+ /**
44
+ * Get the registered instances
45
+ */
46
+ public function get_instances() {
47
+ return $this->_instances;
48
+ }
49
+ }
50
+ endif;
vendor/codeinwp/themeisle-sdk/class-themeisle-sdk-feedback-review.php ADDED
@@ -0,0 +1,209 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <?php
2
+ /**
3
+ * The review feedback model class for ThemeIsle SDK
4
+ *
5
+ * @package ThemeIsleSDK
6
+ * @subpackage Feedback
7
+ * @copyright Copyright (c) 2017, Marius Cristea
8
+ * @license http://opensource.org/licenses/gpl-3.0.php GNU Public License
9
+ * @since 1.0.0
10
+ */
11
+ // Exit if accessed directly.
12
+ if ( ! defined( 'ABSPATH' ) ) {
13
+ exit;
14
+ }
15
+ if ( ! class_exists( 'ThemeIsle_SDK_Feedback_Review' ) ) :
16
+ /**
17
+ * Deactivate feedback model for ThemeIsle SDK.
18
+ */
19
+ class ThemeIsle_SDK_Feedback_Review extends ThemeIsle_SDK_Feedback {
20
+
21
+ /**
22
+ * @var string $heading The heading of the modal
23
+ */
24
+ private $heading = 'Hey, it’s great to see you have <b>{product}</b> active for a few days now. How is everything going? If you can spare a few moments to rate it on WordPress.org it would help us a lot (and boost my motivation). Cheers! <br/> <br/>~ {developer}, developer of {product}';
25
+
26
+ /**
27
+ * @var string $msg The text of the modal
28
+ */
29
+ private $msg = '';
30
+
31
+ /**
32
+ * @var string $button_cancel The text of the cancel button
33
+ */
34
+ private $button_cancel = 'No, thanks.';
35
+ /**
36
+ * @var array Developers who work for each type of product for review purpose.
37
+ */
38
+ private $developers = array(
39
+ 'plugin' => array( 'Marius', 'Bogdan' ),
40
+ 'theme' => array( 'Rodica', 'Andrei', 'Bogdan', 'Cristi' ),
41
+ );
42
+ /**
43
+ * @var string $button_already The text of the already did it button
44
+ */
45
+ private $button_do = 'Ok, I will gladly help.';
46
+
47
+ /**
48
+ * ThemeIsle_SDK_Feedback_Deactivate constructor.
49
+ *
50
+ * @param ThemeIsle_SDK_Product $product_object The product object.
51
+ */
52
+ public function __construct( $product_object ) {
53
+ parent::__construct( $product_object );
54
+ }
55
+
56
+ /**
57
+ * Registers the hooks
58
+ */
59
+ public function setup_hooks_child() {
60
+ add_action( 'wp_ajax_' . $this->product->get_key() . __CLASS__, array( $this, 'dismiss' ) );
61
+ }
62
+
63
+ /**
64
+ * Either we can notify or not.
65
+ *
66
+ * @return bool Notification available or not.
67
+ */
68
+ public function can_notify() {
69
+ if ( ! $this->product->is_wordpress_available() ) {
70
+ $this->disable();
71
+
72
+ return false;
73
+ }
74
+ $show = get_option( $this->product->get_key() . '_review_flag', 'yes' );
75
+ if ( 'no' === $show ) {
76
+ return false;
77
+ }
78
+ $finally_show = apply_filters( $this->product->get_key() . '_feedback_review_trigger', true );
79
+ if ( false !== $finally_show ) {
80
+ if ( is_array( $finally_show ) && ! empty( $finally_show ) ) {
81
+ $this->heading = $finally_show['heading'];
82
+ $this->msg = $finally_show['msg'];
83
+ }
84
+ } else {
85
+ return false;
86
+ }
87
+
88
+ return true;
89
+ }
90
+
91
+ /**
92
+ * Shows the notification
93
+ */
94
+ function show_notification() {
95
+ add_action( 'admin_notices', array( $this, 'admin_notices' ) );
96
+ }
97
+
98
+ /**
99
+ * Shows the admin notice
100
+ */
101
+ function admin_notices() {
102
+ $id = $this->product->get_key() . '_review';
103
+
104
+ $this->add_css( $this->product->get_key() );
105
+ $this->add_js( $this->product->get_key() );
106
+
107
+ echo '<div class="notice notice-success is-dismissible" id="' . $id . '" ><div class="themeisle-review-box">' . $this->get_html( $this->product->get_key() ) . '</div></div>';
108
+ }
109
+
110
+ /**
111
+ * Loads the css
112
+ *
113
+ * @param string $key The product key.
114
+ */
115
+ function add_css( $key ) {
116
+ ?>
117
+ <style type="text/css" id="<?php echo $key; ?>ti-review-css">
118
+ #<?php echo $key; ?>-review-notification {
119
+ padding-bottom: 5px;
120
+ }
121
+
122
+ #<?php echo $key; ?>-review-notification .review-dismiss {
123
+ margin-left: 5px;
124
+ }
125
+ </style>
126
+ <?php
127
+ }
128
+
129
+ /**
130
+ * Loads the js
131
+ *
132
+ * @param string $key The product key.
133
+ */
134
+ function add_js( $key ) {
135
+ ?>
136
+ <script type="text/javascript" id="<?php echo $key; ?>ti-review-js">
137
+ (function ($) {
138
+ $(document).ready(function () {
139
+ $('#<?php echo $key; ?>_review').on('click', '.notice-dismiss, .review-dismiss', function (e) {
140
+
141
+ $.ajax({
142
+ url: ajaxurl,
143
+ method: "post",
144
+ data: {
145
+ 'nonce': '<?php echo wp_create_nonce( (string) __CLASS__ ); ?>',
146
+ 'action': '<?php echo $this->product->get_key() . __CLASS__; ?>'
147
+ },
148
+ success: function () {
149
+ $('#<?php echo $key; ?>_review').html('<p><b>Thanks for your answer.</b></p>');
150
+ }
151
+ });
152
+ });
153
+ });
154
+ })(jQuery);
155
+ </script>
156
+ <?php
157
+ }
158
+
159
+ /**
160
+ * Generates the HTML
161
+ *
162
+ * @param string $key The product key.
163
+ */
164
+ function get_html( $key ) {
165
+ $link = 'https://wordpress.org/support/' . $this->product->get_type() . '/' . $this->product->get_slug() . '/reviews/#wporg-footer';
166
+ $heading = apply_filters( $this->product->get_key() . '_feedback_review_heading', $this->heading );
167
+ $heading = str_replace(
168
+ array( '{product}' ),
169
+ $this->product->get_friendly_name(), $heading
170
+ );
171
+ $heading = str_replace( '{developer}', $this->developers[ $this->product->get_type() ][ rand( 0, ( count( $this->developers[ $this->product->get_type() ] ) - 1 ) ) ], $heading );
172
+
173
+ $button_cancel = apply_filters( $this->product->get_key() . '_feedback_review_button_cancel', $this->button_cancel );
174
+ $button_do = apply_filters( $this->product->get_key() . '_feedback_review_button_do', $this->button_do );
175
+ $msg = apply_filters( $this->product->get_key() . '_feedback_review_message', $this->msg );
176
+
177
+ return '<div id="' . $this->product->get_key() . '-review-notification" class="themeisle-sdk-review-box">'
178
+ . '<p>' . $heading . '</p>'
179
+ . ( $msg ? '<p>' . $msg . '</p>' : '' )
180
+ . '<div class="actions">'
181
+ . '<a href="' . $link . '" target="_blank" class="button button-primary review-dismiss"> ' . $button_do . '</a>'
182
+ . get_submit_button( $button_cancel, 'review-dismiss ' . $this->product->get_key() . '-ti-review', $this->product->get_key() . 'ti-review-no', false )
183
+ . '</div></div>';
184
+ }
185
+
186
+ /**
187
+ * Called when the either button is clicked
188
+ */
189
+ function dismiss() {
190
+ check_ajax_referer( (string) __CLASS__, 'nonce' );
191
+
192
+ $this->disable();
193
+ }
194
+
195
+ /**
196
+ * Disables the notification
197
+ */
198
+ protected function disable() {
199
+ update_option( $this->product->get_key() . '_review_flag', 'no' );
200
+ }
201
+
202
+ /**
203
+ * Enables the notification
204
+ */
205
+ protected function enable() {
206
+ update_option( $this->product->get_key() . '_review_flag', 'yes' );
207
+ }
208
+ }
209
+ endif;
vendor/codeinwp/themeisle-sdk/class-themeisle-sdk-feedback-translate.php ADDED
@@ -0,0 +1,983 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <?php
2
+ /**
3
+ * The Translate feedback model class for ThemeIsle SDK
4
+ *
5
+ * @package ThemeIsleSDK
6
+ * @subpackage Feedback
7
+ * @copyright Copyright (c) 2017, Marius Cristea
8
+ * @license http://opensource.org/licenses/gpl-3.0.php GNU Public License
9
+ * @since 1.0.0
10
+ */
11
+ // Exit if accessed directly.
12
+ if ( ! defined( 'ABSPATH' ) ) {
13
+ exit;
14
+ }
15
+ if ( ! class_exists( 'ThemeIsle_SDK_Feedback_Translate' ) ) :
16
+ /**
17
+ * Translate feedback model for ThemeIsle SDK.
18
+ */
19
+ class ThemeIsle_SDK_Feedback_Translate extends ThemeIsle_SDK_Feedback {
20
+
21
+ /**
22
+ * @var string $heading The heading of the modal
23
+ */
24
+ private $heading = 'Improve {product}';
25
+ /**
26
+ * @var string The message.
27
+ */
28
+ private $msg = 'Translating <b>{product}</b> into as many languages as possible is a huge project. We still need help with a lot of them, so if you are good at translating into <b>{language}</b>, it would be greatly appreciated.
29
+ The process is easy, and you can join by following the link below!';
30
+ /**
31
+ * @var string $button_cancel The text of the cancel button
32
+ */
33
+ private $button_cancel = 'No, thanks.';
34
+ /**
35
+ * @var string $button_already The text of the already did it button
36
+ */
37
+ private $button_do = 'Ok, I will gladly help.';
38
+ /**
39
+ * @var array Array of available locals.
40
+ */
41
+ private $locales = array(
42
+ 'af' => array(
43
+ 'slug' => 'af',
44
+ 'name' => 'Afrikaans',
45
+ ),
46
+ 'ak' => array(
47
+ 'slug' => 'ak',
48
+ 'name' => 'Akan',
49
+ ),
50
+ 'am' => array(
51
+ 'slug' => 'am',
52
+ 'name' => 'Amharic',
53
+ ),
54
+ 'ar' => array(
55
+ 'slug' => 'ar',
56
+ 'name' => 'Arabic',
57
+ ),
58
+ 'arq' => array(
59
+ 'slug' => 'arq',
60
+ 'name' => 'Algerian Arabic',
61
+ ),
62
+ 'ary' => array(
63
+ 'slug' => 'ary',
64
+ 'name' => 'Moroccan Arabic',
65
+ ),
66
+ 'as' => array(
67
+ 'slug' => 'as',
68
+ 'name' => 'Assamese',
69
+ ),
70
+ 'ast' => array(
71
+ 'slug' => 'ast',
72
+ 'name' => 'Asturian',
73
+ ),
74
+ 'az' => array(
75
+ 'slug' => 'az',
76
+ 'name' => 'Azerbaijani',
77
+ ),
78
+ 'azb' => array(
79
+ 'slug' => 'azb',
80
+ 'name' => 'South Azerbaijani',
81
+ ),
82
+ 'az_TR' => array(
83
+ 'slug' => 'az-tr',
84
+ 'name' => 'Azerbaijani (Turkey)',
85
+ ),
86
+ 'ba' => array(
87
+ 'slug' => 'ba',
88
+ 'name' => 'Bashkir',
89
+ ),
90
+ 'bal' => array(
91
+ 'slug' => 'bal',
92
+ 'name' => 'Catalan (Balear)',
93
+ ),
94
+ 'bcc' => array(
95
+ 'slug' => 'bcc',
96
+ 'name' => 'Balochi Southern',
97
+ ),
98
+ 'bel' => array(
99
+ 'slug' => 'bel',
100
+ 'name' => 'Belarusian',
101
+ ),
102
+ 'bg_BG' => array(
103
+ 'slug' => 'bg',
104
+ 'name' => 'Bulgarian',
105
+ ),
106
+ 'bn_BD' => array(
107
+ 'slug' => 'bn',
108
+ 'name' => 'Bengali',
109
+ ),
110
+ 'bo' => array(
111
+ 'slug' => 'bo',
112
+ 'name' => 'Tibetan',
113
+ ),
114
+ 'bre' => array(
115
+ 'slug' => 'br',
116
+ 'name' => 'Breton',
117
+ ),
118
+ 'bs_BA' => array(
119
+ 'slug' => 'bs',
120
+ 'name' => 'Bosnian',
121
+ ),
122
+ 'ca' => array(
123
+ 'slug' => 'ca',
124
+ 'name' => 'Catalan',
125
+ ),
126
+ 'ceb' => array(
127
+ 'slug' => 'ceb',
128
+ 'name' => 'Cebuano',
129
+ ),
130
+ 'ckb' => array(
131
+ 'slug' => 'ckb',
132
+ 'name' => 'Kurdish (Sorani)',
133
+ ),
134
+ 'co' => array(
135
+ 'slug' => 'co',
136
+ 'name' => 'Corsican',
137
+ ),
138
+ 'cs_CZ' => array(
139
+ 'slug' => 'cs',
140
+ 'name' => 'Czech',
141
+ ),
142
+ 'cy' => array(
143
+ 'slug' => 'cy',
144
+ 'name' => 'Welsh',
145
+ ),
146
+ 'da_DK' => array(
147
+ 'slug' => 'da',
148
+ 'name' => 'Danish',
149
+ ),
150
+ 'de_DE' => array(
151
+ 'slug' => 'de',
152
+ 'name' => 'German',
153
+ ),
154
+ 'de_CH' => array(
155
+ 'slug' => 'de-ch',
156
+ 'name' => 'German (Switzerland)',
157
+ ),
158
+ 'dv' => array(
159
+ 'slug' => 'dv',
160
+ 'name' => 'Dhivehi',
161
+ ),
162
+ 'dzo' => array(
163
+ 'slug' => 'dzo',
164
+ 'name' => 'Dzongkha',
165
+ ),
166
+ 'el' => array(
167
+ 'slug' => 'el',
168
+ 'name' => 'Greek',
169
+ ),
170
+ 'art_xemoji' => array(
171
+ 'slug' => 'art-xemoji',
172
+ 'name' => 'Emoji',
173
+ ),
174
+ 'en_US' => array(
175
+ 'slug' => 'en',
176
+ 'name' => 'English',
177
+ ),
178
+ 'en_AU' => array(
179
+ 'slug' => 'en-au',
180
+ 'name' => 'English (Australia)',
181
+ ),
182
+ 'en_CA' => array(
183
+ 'slug' => 'en-ca',
184
+ 'name' => 'English (Canada)',
185
+ ),
186
+ 'en_GB' => array(
187
+ 'slug' => 'en-gb',
188
+ 'name' => 'English (UK)',
189
+ ),
190
+ 'en_NZ' => array(
191
+ 'slug' => 'en-nz',
192
+ 'name' => 'English (New Zealand)',
193
+ ),
194
+ 'en_ZA' => array(
195
+ 'slug' => 'en-za',
196
+ 'name' => 'English (South Africa)',
197
+ ),
198
+ 'eo' => array(
199
+ 'slug' => 'eo',
200
+ 'name' => 'Esperanto',
201
+ ),
202
+ 'es_ES' => array(
203
+ 'slug' => 'es',
204
+ 'name' => 'Spanish (Spain)',
205
+ ),
206
+ 'es_AR' => array(
207
+ 'slug' => 'es-ar',
208
+ 'name' => 'Spanish (Argentina)',
209
+ ),
210
+ 'es_CL' => array(
211
+ 'slug' => 'es-cl',
212
+ 'name' => 'Spanish (Chile)',
213
+ ),
214
+ 'es_CO' => array(
215
+ 'slug' => 'es-co',
216
+ 'name' => 'Spanish (Colombia)',
217
+ ),
218
+ 'es_CR' => array(
219
+ 'slug' => 'es-cr',
220
+ 'name' => 'Spanish (Costa Rica)',
221
+ ),
222
+ 'es_GT' => array(
223
+ 'slug' => 'es-gt',
224
+ 'name' => 'Spanish (Guatemala)',
225
+ ),
226
+ 'es_MX' => array(
227
+ 'slug' => 'es-mx',
228
+ 'name' => 'Spanish (Mexico)',
229
+ ),
230
+ 'es_PE' => array(
231
+ 'slug' => 'es-pe',
232
+ 'name' => 'Spanish (Peru)',
233
+ ),
234
+ 'es_PR' => array(
235
+ 'slug' => 'es-pr',
236
+ 'name' => 'Spanish (Puerto Rico)',
237
+ ),
238
+ 'es_VE' => array(
239
+ 'slug' => 'es-ve',
240
+ 'name' => 'Spanish (Venezuela)',
241
+ ),
242
+ 'et' => array(
243
+ 'slug' => 'et',
244
+ 'name' => 'Estonian',
245
+ ),
246
+ 'eu' => array(
247
+ 'slug' => 'eu',
248
+ 'name' => 'Basque',
249
+ ),
250
+ 'fa_IR' => array(
251
+ 'slug' => 'fa',
252
+ 'name' => 'Persian',
253
+ ),
254
+ 'fa_AF' => array(
255
+ 'slug' => 'fa-af',
256
+ 'name' => 'Persian (Afghanistan)',
257
+ ),
258
+ 'fuc' => array(
259
+ 'slug' => 'fuc',
260
+ 'name' => 'Fulah',
261
+ ),
262
+ 'fi' => array(
263
+ 'slug' => 'fi',
264
+ 'name' => 'Finnish',
265
+ ),
266
+ 'fo' => array(
267
+ 'slug' => 'fo',
268
+ 'name' => 'Faroese',
269
+ ),
270
+ 'fr_FR' => array(
271
+ 'slug' => 'fr',
272
+ 'name' => 'French (France)',
273
+ ),
274
+ 'fr_BE' => array(
275
+ 'slug' => 'fr-be',
276
+ 'name' => 'French (Belgium)',
277
+ ),
278
+ 'fr_CA' => array(
279
+ 'slug' => 'fr-ca',
280
+ 'name' => 'French (Canada)',
281
+ ),
282
+ 'frp' => array(
283
+ 'slug' => 'frp',
284
+ 'name' => 'Arpitan',
285
+ ),
286
+ 'fur' => array(
287
+ 'slug' => 'fur',
288
+ 'name' => 'Friulian',
289
+ ),
290
+ 'fy' => array(
291
+ 'slug' => 'fy',
292
+ 'name' => 'Frisian',
293
+ ),
294
+ 'ga' => array(
295
+ 'slug' => 'ga',
296
+ 'name' => 'Irish',
297
+ ),
298
+ 'gd' => array(
299
+ 'slug' => 'gd',
300
+ 'name' => 'Scottish Gaelic',
301
+ ),
302
+ 'gl_ES' => array(
303
+ 'slug' => 'gl',
304
+ 'name' => 'Galician',
305
+ ),
306
+ 'gn' => array(
307
+ 'slug' => 'gn',
308
+ 'name' => 'Guaraní',
309
+ ),
310
+ 'gsw' => array(
311
+ 'slug' => 'gsw',
312
+ 'name' => 'Swiss German',
313
+ ),
314
+ 'gu' => array(
315
+ 'slug' => 'gu',
316
+ 'name' => 'Gujarati',
317
+ ),
318
+ 'hat' => array(
319
+ 'slug' => 'hat',
320
+ 'name' => 'Haitian Creole',
321
+ ),
322
+ 'hau' => array(
323
+ 'slug' => 'hau',
324
+ 'name' => 'Hausa',
325
+ ),
326
+ 'haw_US' => array(
327
+ 'slug' => 'haw',
328
+ 'name' => 'Hawaiian',
329
+ ),
330
+ 'haz' => array(
331
+ 'slug' => 'haz',
332
+ 'name' => 'Hazaragi',
333
+ ),
334
+ 'he_IL' => array(
335
+ 'slug' => 'he',
336
+ 'name' => 'Hebrew',
337
+ ),
338
+ 'hi_IN' => array(
339
+ 'slug' => 'hi',
340
+ 'name' => 'Hindi',
341
+ ),
342
+ 'hr' => array(
343
+ 'slug' => 'hr',
344
+ 'name' => 'Croatian',
345
+ ),
346
+ 'hu_HU' => array(
347
+ 'slug' => 'hu',
348
+ 'name' => 'Hungarian',
349
+ ),
350
+ 'hy' => array(
351
+ 'slug' => 'hy',
352
+ 'name' => 'Armenian',
353
+ ),
354
+ 'id_ID' => array(
355
+ 'slug' => 'id',
356
+ 'name' => 'Indonesian',
357
+ ),
358
+ 'ido' => array(
359
+ 'slug' => 'ido',
360
+ 'name' => 'Ido',
361
+ ),
362
+ 'is_IS' => array(
363
+ 'slug' => 'is',
364
+ 'name' => 'Icelandic',
365
+ ),
366
+ 'it_IT' => array(
367
+ 'slug' => 'it',
368
+ 'name' => 'Italian',
369
+ ),
370
+ 'ja' => array(
371
+ 'slug' => 'ja',
372
+ 'name' => 'Japanese',
373
+ ),
374
+ 'jv_ID' => array(
375
+ 'slug' => 'jv',
376
+ 'name' => 'Javanese',
377
+ ),
378
+ 'ka_GE' => array(
379
+ 'slug' => 'ka',
380
+ 'name' => 'Georgian',
381
+ ),
382
+ 'kab' => array(
383
+ 'slug' => 'kab',
384
+ 'name' => 'Kabyle',
385
+ ),
386
+ 'kal' => array(
387
+ 'slug' => 'kal',
388
+ 'name' => 'Greenlandic',
389
+ ),
390
+ 'kin' => array(
391
+ 'slug' => 'kin',
392
+ 'name' => 'Kinyarwanda',
393
+ ),
394
+ 'kk' => array(
395
+ 'slug' => 'kk',
396
+ 'name' => 'Kazakh',
397
+ ),
398
+ 'km' => array(
399
+ 'slug' => 'km',
400
+ 'name' => 'Khmer',
401
+ ),
402
+ 'kn' => array(
403
+ 'slug' => 'kn',
404
+ 'name' => 'Kannada',
405
+ ),
406
+ 'ko_KR' => array(
407
+ 'slug' => 'ko',
408
+ 'name' => 'Korean',
409
+ ),
410
+ 'kir' => array(
411
+ 'slug' => 'kir',
412
+ 'name' => 'Kyrgyz',
413
+ ),
414
+ 'lb_LU' => array(
415
+ 'slug' => 'lb',
416
+ 'name' => 'Luxembourgish',
417
+ ),
418
+ 'li' => array(
419
+ 'slug' => 'li',
420
+ 'name' => 'Limburgish',
421
+ ),
422
+ 'lin' => array(
423
+ 'slug' => 'lin',
424
+ 'name' => 'Lingala',
425
+ ),
426
+ 'lo' => array(
427
+ 'slug' => 'lo',
428
+ 'name' => 'Lao',
429
+ ),
430
+ 'lt_LT' => array(
431
+ 'slug' => 'lt',
432
+ 'name' => 'Lithuanian',
433
+ ),
434
+ 'lv' => array(
435
+ 'slug' => 'lv',
436
+ 'name' => 'Latvian',
437
+ ),
438
+ 'me_ME' => array(
439
+ 'slug' => 'me',
440
+ 'name' => 'Montenegrin',
441
+ ),
442
+ 'mg_MG' => array(
443
+ 'slug' => 'mg',
444
+ 'name' => 'Malagasy',
445
+ ),
446
+ 'mk_MK' => array(
447
+ 'slug' => 'mk',
448
+ 'name' => 'Macedonian',
449
+ ),
450
+ 'ml_IN' => array(
451
+ 'slug' => 'ml',
452
+ 'name' => 'Malayalam',
453
+ ),
454
+ 'mlt' => array(
455
+ 'slug' => 'mlt',
456
+ 'name' => 'Maltese',
457
+ ),
458
+ 'mn' => array(
459
+ 'slug' => 'mn',
460
+ 'name' => 'Mongolian',
461
+ ),
462
+ 'mr' => array(
463
+ 'slug' => 'mr',
464
+ 'name' => 'Marathi',
465
+ ),
466
+ 'mri' => array(
467
+ 'slug' => 'mri',
468
+ 'name' => 'Maori',
469
+ ),
470
+ 'ms_MY' => array(
471
+ 'slug' => 'ms',
472
+ 'name' => 'Malay',
473
+ ),
474
+ 'my_MM' => array(
475
+ 'slug' => 'mya',
476
+ 'name' => 'Myanmar (Burmese)',
477
+ ),
478
+ 'ne_NP' => array(
479
+ 'slug' => 'ne',
480
+ 'name' => 'Nepali',
481
+ ),
482
+ 'nb_NO' => array(
483
+ 'slug' => 'nb',
484
+ 'name' => 'Norwegian (Bokmål)',
485
+ ),
486
+ 'nl_NL' => array(
487
+ 'slug' => 'nl',
488
+ 'name' => 'Dutch',
489
+ ),
490
+ 'nl_BE' => array(
491
+ 'slug' => 'nl-be',
492
+ 'name' => 'Dutch (Belgium)',
493
+ ),
494
+ 'nn_NO' => array(
495
+ 'slug' => 'nn',
496
+ 'name' => 'Norwegian (Nynorsk)',
497
+ ),
498
+ 'oci' => array(
499
+ 'slug' => 'oci',
500
+ 'name' => 'Occitan',
501
+ ),
502
+ 'ory' => array(
503
+ 'slug' => 'ory',
504
+ 'name' => 'Oriya',
505
+ ),
506
+ 'os' => array(
507
+ 'slug' => 'os',
508
+ 'name' => 'Ossetic',
509
+ ),
510
+ 'pa_IN' => array(
511
+ 'slug' => 'pa',
512
+ 'name' => 'Punjabi',
513
+ ),
514
+ 'pl_PL' => array(
515
+ 'slug' => 'pl',
516
+ 'name' => 'Polish',
517
+ ),
518
+ 'pt_BR' => array(
519
+ 'slug' => 'pt-br',
520
+ 'name' => 'Portuguese (Brazil)',
521
+ ),
522
+ 'pt_PT' => array(
523
+ 'slug' => 'pt',
524
+ 'name' => 'Portuguese (Portugal)',
525
+ ),
526
+ 'ps' => array(
527
+ 'slug' => 'ps',
528
+ 'name' => 'Pashto',
529
+ ),
530
+ 'rhg' => array(
531
+ 'slug' => 'rhg',
532
+ 'name' => 'Rohingya',
533
+ ),
534
+ 'ro_RO' => array(
535
+ 'slug' => 'ro',
536
+ 'name' => 'Romanian',
537
+ ),
538
+ 'roh' => array(
539
+ 'slug' => 'roh',
540
+ 'name' => 'Romansh',
541
+ ),
542
+ 'ru_RU' => array(
543
+ 'slug' => 'ru',
544
+ 'name' => 'Russian',
545
+ ),
546
+ 'rue' => array(
547
+ 'slug' => 'rue',
548
+ 'name' => 'Rusyn',
549
+ ),
550
+ 'rup_MK' => array(
551
+ 'slug' => 'rup',
552
+ 'name' => 'Aromanian',
553
+ ),
554
+ 'sah' => array(
555
+ 'slug' => 'sah',
556
+ 'name' => 'Sakha',
557
+ ),
558
+ 'sa_IN' => array(
559
+ 'slug' => 'sa-in',
560
+ 'name' => 'Sanskrit',
561
+ ),
562
+ 'scn' => array(
563
+ 'slug' => 'scn',
564
+ 'name' => 'Sicilian',
565
+ ),
566
+ 'si_LK' => array(
567
+ 'slug' => 'si',
568
+ 'name' => 'Sinhala',
569
+ ),
570
+ 'sk_SK' => array(
571
+ 'slug' => 'sk',
572
+ 'name' => 'Slovak',
573
+ ),
574
+ 'sl_SI' => array(
575
+ 'slug' => 'sl',
576
+ 'name' => 'Slovenian',
577
+ ),
578
+ 'sna' => array(
579
+ 'slug' => 'sna',
580
+ 'name' => 'Shona',
581
+ ),
582
+ 'snd' => array(
583
+ 'slug' => 'snd',
584
+ 'name' => 'Sindhi',
585
+ ),
586
+ 'so_SO' => array(
587
+ 'slug' => 'so',
588
+ 'name' => 'Somali',
589
+ ),
590
+ 'sq' => array(
591
+ 'slug' => 'sq',
592
+ 'name' => 'Albanian',
593
+ ),
594
+ 'sq_XK' => array(
595
+ 'slug' => 'sq-xk',
596
+ 'name' => 'Shqip (Kosovo)',
597
+ ),
598
+ 'sr_RS' => array(
599
+ 'slug' => 'sr',
600
+ 'name' => 'Serbian',
601
+ ),
602
+ 'srd' => array(
603
+ 'slug' => 'srd',
604
+ 'name' => 'Sardinian',
605
+ ),
606
+ 'su_ID' => array(
607
+ 'slug' => 'su',
608
+ 'name' => 'Sundanese',
609
+ ),
610
+ 'sv_SE' => array(
611
+ 'slug' => 'sv',
612
+ 'name' => 'Swedish',
613
+ ),
614
+ 'sw' => array(
615
+ 'slug' => 'sw',
616
+ 'name' => 'Swahili',
617
+ ),
618
+ 'syr' => array(
619
+ 'slug' => 'syr',
620
+ 'name' => 'Syriac',
621
+ ),
622
+ 'szl' => array(
623
+ 'slug' => 'szl',
624
+ 'name' => 'Silesian',
625
+ ),
626
+ 'ta_IN' => array(
627
+ 'slug' => 'ta',
628
+ 'name' => 'Tamil',
629
+ ),
630
+ 'ta_LK' => array(
631
+ 'slug' => 'ta-lk',
632
+ 'name' => 'Tamil (Sri Lanka)',
633
+ ),
634
+ 'tah' => array(
635
+ 'slug' => 'tah',
636
+ 'name' => 'Tahitian',
637
+ ),
638
+ 'te' => array(
639
+ 'slug' => 'te',
640
+ 'name' => 'Telugu',
641
+ ),
642
+ 'tg' => array(
643
+ 'slug' => 'tg',
644
+ 'name' => 'Tajik',
645
+ ),
646
+ 'th' => array(
647
+ 'slug' => 'th',
648
+ 'name' => 'Thai',
649
+ ),
650
+ 'tir' => array(
651
+ 'slug' => 'tir',
652
+ 'name' => 'Tigrinya',
653
+ ),
654
+ 'tl' => array(
655
+ 'slug' => 'tl',
656
+ 'name' => 'Tagalog',
657
+ ),
658
+ 'tr_TR' => array(
659
+ 'slug' => 'tr',
660
+ 'name' => 'Turkish',
661
+ ),
662
+ 'tt_RU' => array(
663
+ 'slug' => 'tt',
664
+ 'name' => 'Tatar',
665
+ ),
666
+ 'tuk' => array(
667
+ 'slug' => 'tuk',
668
+ 'name' => 'Turkmen',
669
+ ),
670
+ 'twd' => array(
671
+ 'slug' => 'twd',
672
+ 'name' => 'Tweants',
673
+ ),
674
+ 'tzm' => array(
675
+ 'slug' => 'tzm',
676
+ 'name' => 'Tamazight (Central Atlas)',
677
+ ),
678
+ 'ug_CN' => array(
679
+ 'slug' => 'ug',
680
+ 'name' => 'Uighur',
681
+ ),
682
+ 'uk' => array(
683
+ 'slug' => 'uk',
684
+ 'name' => 'Ukrainian',
685
+ ),
686
+ 'ur' => array(
687
+ 'slug' => 'ur',
688
+ 'name' => 'Urdu',
689
+ ),
690
+ 'uz_UZ' => array(
691
+ 'slug' => 'uz',
692
+ 'name' => 'Uzbek',
693
+ ),
694
+ 'vi' => array(
695
+ 'slug' => 'vi',
696
+ 'name' => 'Vietnamese',
697
+ ),
698
+ 'wa' => array(
699
+ 'slug' => 'wa',
700
+ 'name' => 'Walloon',
701
+ ),
702
+ 'xho' => array(
703
+ 'slug' => 'xho',
704
+ 'name' => 'Xhosa',
705
+ ),
706
+ 'xmf' => array(
707
+ 'slug' => 'xmf',
708
+ 'name' => 'Mingrelian',
709
+ ),
710
+ 'yor' => array(
711
+ 'slug' => 'yor',
712
+ 'name' => 'Yoruba',
713
+ ),
714
+ 'zh_CN' => array(
715
+ 'slug' => 'zh-cn',
716
+ 'name' => 'Chinese (China)',
717
+ ),
718
+ 'zh_HK' => array(
719
+ 'slug' => 'zh-hk',
720
+ 'name' => 'Chinese (Hong Kong)',
721
+ ),
722
+ 'zh_TW' => array(
723
+ 'slug' => 'zh-tw',
724
+ 'name' => 'Chinese (Taiwan)',
725
+ ),
726
+ 'de_DE_formal' => array(
727
+ 'slug' => 'de/formal',
728
+ 'name' => 'German (Formal)',
729
+ ),
730
+ 'nl_NL_formal' => array(
731
+ 'slug' => 'nl/formal',
732
+ 'name' => 'Dutch (Formal)',
733
+ ),
734
+ 'de_CH_informal' => array(
735
+ 'slug' => 'de-ch/informal',
736
+ 'name' => 'Chinese (Taiwan)',
737
+ ),
738
+ 'pt_PT_ao90' => array(
739
+ 'slug' => 'pt/ao90',
740
+ 'name' => 'Portuguese (Portugal, AO90)',
741
+ ),
742
+ );
743
+
744
+ /**
745
+ * ThemeIsle_SDK_Feedback_Translate constructor.
746
+ *
747
+ * @param ThemeIsle_SDK_Product $product_object The product object.
748
+ */
749
+ public function __construct( $product_object ) {
750
+ parent::__construct( $product_object );
751
+ }
752
+
753
+ /**
754
+ * Return the locale path.
755
+ *
756
+ * @param string $locale Locale code.
757
+ *
758
+ * @return string Locale path.
759
+ */
760
+ private function get_locale_paths( $locale ) {
761
+ if ( empty( $locale ) ) {
762
+ return '';
763
+ }
764
+
765
+ $slug = isset( $this->locales[ $locale ] ) ? $this->locales[ $locale ]['slug'] : '';
766
+ if ( empty( $slug ) ) {
767
+ return '';
768
+ }
769
+ if ( strpos( $slug, '/' ) === false ) {
770
+ $slug .= '/default';
771
+ }
772
+ $url = 'https://translate.wordpress.org/projects/wp-' . $this->product->get_type() . 's/' . $this->product->get_slug() . '/' . ( $this->product->get_type() === 'plugin' ? 'dev/' : '' ) . $slug . '?filters%5Bstatus%5D=untranslated&sort%5Bby%5D=random';
773
+
774
+ return $url;
775
+ }
776
+
777
+ /**
778
+ * Registers the hooks
779
+ */
780
+ public function setup_hooks_child() {
781
+ add_action( 'wp_ajax_' . $this->product->get_key() . __CLASS__, array( $this, 'dismiss' ) );
782
+ }
783
+
784
+ /**
785
+ * Either we should show the notification or not.
786
+ *
787
+ * @return bool Valid notification.
788
+ */
789
+ function can_notify() {
790
+ if ( ! $this->product->is_wordpress_available() ) {
791
+ $this->disable();
792
+ return false;
793
+ }
794
+ $show = get_option( $this->product->get_key() . '_translate_flag', 'yes' );
795
+ if ( 'no' === $show ) {
796
+ return false;
797
+ }
798
+ $lang = $this->get_user_locale();
799
+ if ( 'en_US' === $lang ) {
800
+ return false;
801
+ }
802
+ $languages = $this->get_translations();
803
+ if ( ! is_array( $languages ) ) {
804
+ return false;
805
+ }
806
+ if ( ! isset( $languages['translations'] ) ) {
807
+ return false;
808
+ }
809
+
810
+ $languages = $languages['translations'];
811
+ $available = wp_list_pluck( $languages, 'language' );
812
+ if ( in_array( $lang, $available ) ) {
813
+ return false;
814
+ }
815
+ if ( ! isset( $this->locales[ $lang ] ) ) {
816
+ return false;
817
+ }
818
+
819
+ return true;
820
+ }
821
+
822
+ /**
823
+ * Get the user's locale.
824
+ */
825
+ private function get_user_locale() {
826
+ global $wp_version;
827
+ if ( version_compare( $wp_version, '4.7.0', '>=' ) ) {
828
+ return get_user_locale();
829
+ }
830
+ $user = wp_get_current_user();
831
+ if ( $user ) {
832
+ $locale = $user->locale;
833
+ }
834
+ return $locale ? $locale : get_locale();
835
+ }
836
+
837
+ /**
838
+ * Shows the notification
839
+ */
840
+ function show_notification() {
841
+ add_action( 'admin_notices', array( $this, 'admin_notices' ) );
842
+ }
843
+
844
+ /**
845
+ * Shows the admin notice
846
+ */
847
+ function admin_notices() {
848
+ $id = $this->product->get_key() . '_translate';
849
+
850
+ $this->add_css( $this->product->get_key() );
851
+ $this->add_js( $this->product->get_key() );
852
+ $html = $this->get_html( $this->product->get_key() );
853
+
854
+ if ( $html ) {
855
+ echo '<div class="notice notice-success is-dismissible" id="' . $id . '" ><div class="themeisle-translate-box">' . $html . '</div></div>';
856
+ }
857
+ }
858
+
859
+ /**
860
+ * Loads the css
861
+ *
862
+ * @param string $key The product key.
863
+ */
864
+ function add_css( $key ) {
865
+ ?>
866
+ <style type="text/css" id="<?php echo $key; ?>ti-translate-css">
867
+ </style>
868
+ <?php
869
+ }
870
+
871
+ /**
872
+ * Loads the js
873
+ *
874
+ * @param string $key The product key.
875
+ */
876
+ function add_js( $key ) {
877
+ ?>
878
+ <script type="text/javascript" id="<?php echo $key; ?>ti-translate-js">
879
+ (function ($) {
880
+ $(document).ready(function () {
881
+ $('#<?php echo $key; ?>_translate').on('click', '.translate-dismiss', function (e) {
882
+
883
+ $.ajax({
884
+ url: ajaxurl,
885
+ method: "post",
886
+ data: {
887
+ 'nonce': '<?php echo wp_create_nonce( (string) __CLASS__ ); ?>',
888
+ 'action': '<?php echo $this->product->get_key() . __CLASS__; ?>'
889
+ },
890
+ success: function () {
891
+ $('#<?php echo $key; ?>_translate').html('<p><b>Thanks for your answer.</b></p>');
892
+ }
893
+ });
894
+ });
895
+ });
896
+ })(jQuery);
897
+ </script>
898
+ <?php
899
+ }
900
+
901
+ /**
902
+ * Fetch translations from api.
903
+ *
904
+ * @return mixed Translation array.
905
+ */
906
+ private function get_translations() {
907
+ $cache_key = $this->product->get_key() . '_all_languages';
908
+ $translations = get_transient( $cache_key );
909
+
910
+ if ( $translations === false ) {
911
+ require_once( ABSPATH . 'wp-admin/includes/translation-install.php' );
912
+ $translations = translations_api(
913
+ $this->product->get_type() . 's',
914
+ array(
915
+ 'slug' => $this->product->get_slug(),
916
+ 'version' => $this->product->get_version(),
917
+ )
918
+ );
919
+ set_transient( $cache_key, $translations, WEEK_IN_SECONDS );
920
+ }
921
+
922
+ return $translations;
923
+
924
+ }
925
+
926
+ /**
927
+ * Generates the HTML
928
+ *
929
+ * @param string $key The product key.
930
+ *
931
+ * @return void|string Html code of the notification.
932
+ */
933
+ function get_html( $key ) {
934
+ $lang = $this->get_user_locale();
935
+ $link = $this->get_locale_paths( $lang );
936
+ $heading = apply_filters( $this->product->get_key() . '_feedback_translate_heading', $this->heading );
937
+ $product = $this->product->get_friendly_name();
938
+ $heading = str_replace(
939
+ array( '{product}' ),
940
+ $product, $heading
941
+ );
942
+
943
+ $message = apply_filters( $this->product->get_key() . '_feedback_translation', $this->msg );
944
+ $language_meta = $this->locales[ $lang ];
945
+ $message = str_replace( '{language}', $language_meta['name'], $message );
946
+ $message = str_replace( '{product}', $product, $message );
947
+ $button_cancel = apply_filters( $this->product->get_key() . '_feedback_translate_button_cancel', $this->button_cancel );
948
+ $button_do = apply_filters( $this->product->get_key() . '_feedback_translate_button_do', $this->button_do );
949
+
950
+ return '<div id="' . $this->product->get_key() . '-translate-notification" class="themeisle-sdk-translate-box">'
951
+ . '<h2>' . $heading . '</h2>'
952
+ . '<p>' . $message . '</p>'
953
+ . '<div class="actions">'
954
+ . '<a href="' . $link . '" target="_blank" class="button button-primary translate-dismiss"> ' . $button_do . '</a>&nbsp;'
955
+ . get_submit_button( $button_cancel, 'translate-dismiss ' . $this->product->get_key() . '-ti-translate', $this->product->get_key() . 'ti-translate-no', false )
956
+ . '</div></br></div>';
957
+ }
958
+
959
+ /**
960
+ * Called when the either button is clicked
961
+ */
962
+ function dismiss() {
963
+ check_ajax_referer( (string) __CLASS__, 'nonce' );
964
+
965
+ $this->disable();
966
+ }
967
+
968
+ /**
969
+ * Disables the notification
970
+ */
971
+ protected function disable() {
972
+
973
+ update_option( $this->product->get_key() . '_translate_flag', 'no' );
974
+ }
975
+
976
+ /**
977
+ * Enables the notification
978
+ */
979
+ protected function enable() {
980
+ update_option( $this->product->get_key() . '_translate_flag', 'yes' );
981
+ }
982
+ }
983
+ endif;
vendor/codeinwp/themeisle-sdk/class-themeisle-sdk-feedback.php ADDED
@@ -0,0 +1,90 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <?php
2
+ /**
3
+ * The feedback model class for ThemeIsle SDK
4
+ *
5
+ * @package ThemeIsleSDK
6
+ * @subpackage Feedback
7
+ * @copyright Copyright (c) 2017, Marius Cristea
8
+ * @license http://opensource.org/licenses/gpl-3.0.php GNU Public License
9
+ * @since 1.0.0
10
+ */
11
+ // Exit if accessed directly.
12
+ if ( ! defined( 'ABSPATH' ) ) {
13
+ exit;
14
+ }
15
+ if ( ! class_exists( 'ThemeIsle_SDK_Feedback' ) ) :
16
+ /**
17
+ * Feedback model for ThemeIsle SDK.
18
+ */
19
+ abstract class ThemeIsle_SDK_Feedback {
20
+ /**
21
+ * @var ThemeIsle_SDK_Product $product Themeisle Product.
22
+ */
23
+ protected $product;
24
+
25
+ /**
26
+ * @var string $feedback_url Url where to send the feedback
27
+ */
28
+ private $feedback_url = 'http://feedback.themeisle.com/wordpress/wp-json/__pirate_feedback_/v1/feedback';
29
+
30
+ /**
31
+ * ThemeIsle_SDK_Feedback constructor.
32
+ *
33
+ * @param ThemeIsle_SDK_Product $product_object Product Object.
34
+ */
35
+ public function __construct( $product_object ) {
36
+ if ( $product_object instanceof ThemeIsle_SDK_Product ) {
37
+ $this->product = $product_object;
38
+ }
39
+ $this->setup_hooks();
40
+ }
41
+
42
+ /**
43
+ * Registers the hooks and then delegates to the child
44
+ */
45
+ public function setup_hooks() {
46
+ $this->setup_hooks_child();
47
+ }
48
+
49
+ /**
50
+ * Calls the API
51
+ *
52
+ * @param string $attributes The attributes of the post body.
53
+ */
54
+ protected function call_api( $attributes ) {
55
+ $slug = $this->product->get_slug();
56
+ $version = $this->product->get_version();
57
+ $attributes['slug'] = $slug;
58
+ $attributes['version'] = $version;
59
+
60
+ $response = wp_remote_post(
61
+ $this->feedback_url, array(
62
+ 'body' => $attributes,
63
+ )
64
+ );
65
+ }
66
+
67
+ /**
68
+ * Randomizes the options array
69
+ *
70
+ * @param array $options The options array.
71
+ */
72
+ function randomize_options( $options ) {
73
+ $new = array();
74
+ $keys = array_keys( $options );
75
+ shuffle( $keys );
76
+
77
+ foreach ( $keys as $key ) {
78
+ $new[ $key ] = $options[ $key ];
79
+ }
80
+
81
+ return $new;
82
+ }
83
+
84
+ /**
85
+ * Abstract function for delegating to the child
86
+ */
87
+ protected abstract function setup_hooks_child();
88
+
89
+ }
90
+ endif;
vendor/codeinwp/themeisle-sdk/class-themeisle-sdk-licenser.php ADDED
@@ -0,0 +1,686 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <?php
2
+ /**
3
+ * The main loader class for license handling.
4
+ *
5
+ * @package ThemeIsleSDK
6
+ * @subpackage Licenser
7
+ * @copyright Copyright (c) 2017, Marius Cristea
8
+ * @license http://opensource.org/licenses/gpl-3.0.php GNU Public License
9
+ * @since 1.0.0
10
+ */
11
+ if ( ! class_exists( 'ThemeIsle_SDK_Licenser' ) ) :
12
+ /**
13
+ * Class ThemeIsle_SDK_Licenser
14
+ *
15
+ * Used to update the themeisle products
16
+ */
17
+ class ThemeIsle_SDK_Licenser {
18
+
19
+ /**
20
+ * @var string $license_key The license key string
21
+ */
22
+ public $license_key;
23
+
24
+ /**
25
+ * @var bool $do_check This ensures that the custom API request only runs on the second time that WP fires the update check
26
+ */
27
+ private $do_check = false;
28
+
29
+ /**
30
+ * @var bool $failed_checks Number of failed checks to the api endpoint
31
+ */
32
+ private $failed_checks = 0;
33
+ /**
34
+ * @var ThemeIsle_SDK_Product $product The ThemeIsle Product.
35
+ */
36
+ private $product;
37
+ /**
38
+ * @var string $product_key The product update response key.
39
+ */
40
+ private $product_key;
41
+ /**
42
+ * @var int $max_failed Maximum failed checks allowed before show the notice
43
+ */
44
+ private static $max_failed = 5;
45
+
46
+ /**
47
+ * ThemeIsle_SDK_Licenser constructor.
48
+ *
49
+ * @param ThemeIsle_SDK_Product $product The product object.
50
+ */
51
+ public function __construct( $product ) {
52
+ $this->product = $product;
53
+
54
+ $this->product_key = $this->product->get_key() . '-update-response';
55
+ if ( ! $this->product->requires_license() ) {
56
+ $this->license_key = 'free';
57
+ } else {
58
+ $license_data = get_option( $this->product->get_key() . '_license_data', '' );
59
+ $this->failed_checks = intval( get_option( $this->product->get_key() . '_failed_checks', 0 ) );
60
+ if ( $license_data !== '' ) {
61
+ $this->license_key = isset( $license_data->key ) ? $license_data->key : get_option( $this->product->get_key() . '_license', '' );
62
+ } else {
63
+ $this->license_key = get_option( $this->product->get_key() . '_license', '' );
64
+ }
65
+ $this->register_license_hooks();
66
+ }
67
+ }
68
+
69
+ /**
70
+ * Register license hooks for the themeisle products
71
+ */
72
+ public function register_license_hooks() {
73
+ add_action( 'admin_init', array( $this, 'register_settings' ) );
74
+ add_action( 'admin_init', array( $this, 'activate_license' ) );
75
+ add_action( 'admin_init', array( $this, 'product_valid' ), 99999999 );
76
+ add_action( 'admin_notices', array( $this, 'show_notice' ) );
77
+ add_filter( $this->product->get_key() . '_license_status', array( $this, 'get_license_status' ) );
78
+ }
79
+
80
+ /**
81
+ * @param string $r Update payload.
82
+ * @param string $url The api url.
83
+ *
84
+ * @return mixed List of themes to check for update.
85
+ */
86
+ function disable_wporg_update( $r, $url ) {
87
+
88
+ if ( 0 !== strpos( $url, 'https://api.wordpress.org/themes/update-check/' ) ) {
89
+ return $r;
90
+ }
91
+
92
+ // Decode the JSON response
93
+ $themes = json_decode( $r['body']['themes'] );
94
+
95
+ unset( $themes->themes->{$this->product->get_slug()} );
96
+
97
+ // Encode the updated JSON response
98
+ $r['body']['themes'] = json_encode( $themes );
99
+
100
+ return $r;
101
+ }
102
+
103
+ /**
104
+ * Register the setting for the license of the product
105
+ *
106
+ * @return bool
107
+ */
108
+ public function register_settings() {
109
+ if ( ! is_admin() ) {
110
+ return false;
111
+ }
112
+ add_settings_field(
113
+ $this->product->get_key() . '_license',
114
+ $this->product->get_name() . ' license',
115
+ array( $this, 'license_view' ),
116
+ 'general'
117
+ );
118
+ }
119
+
120
+ /**
121
+ * The license view field
122
+ */
123
+ public function license_view() {
124
+ $status = $this->get_license_status();
125
+ $value = $this->license_key;
126
+
127
+ $activate_string = apply_filters( $this->product->get_key() . '_lc_activate_string', 'Activate' );
128
+ $deactivate_string = apply_filters( $this->product->get_key() . '_lc_deactivate_string', 'Deactivate' );
129
+ $valid_string = apply_filters( $this->product->get_key() . '_lc_valid_string', 'Valid' );
130
+ $invalid_string = apply_filters( $this->product->get_key() . '_lc_invalid_string', 'Invalid' );
131
+ $license_message = apply_filters( $this->product->get_key() . '_lc_license_message', 'Enter your license from %s purchase history in order to get %s updates' );
132
+
133
+ echo '<p ><input ' . ( ( $status === 'valid' ) ? ( 'style="border:1px solid #7ad03a; "' ) : '' ) . ' type="text" id="' . $this->product->get_key() . '_license" name="' . $this->product->get_key() . '_license" value="' . $value . '" /><a ' . ( ( $status === 'valid' ) ? ( 'style="color:#fff;background: #7ad03a; display: inline-block;text-decoration: none;font-size: 13px;line-height: 26px;height: 26px; margin-left:5px; padding: 0 10px 1px; -webkit-border-radius: 3px;border-radius: 3px; ">' . $valid_string ) : ( 'style="color:#fff;background: #dd3d36; display: inline-block;text-decoration: none;font-size: 13px;line-height: 26px;height: 26px; margin-left:5px; padding: 0 10px 1px; -webkit-border-radius: 3px;border-radius: 3px; ">' . $invalid_string ) ) . ' </a>&nbsp;&nbsp;&nbsp;<button name="' . $this->product->get_key() . '_btn_trigger" ' . ( ( $status === 'valid' ) ? ( ' class="button button-primary">' . $deactivate_string ) : ( ' class="button button-primary" value="yes" type="submit" >' . $activate_string ) ) . ' </button></p><p class="description">' . sprintf( $license_message, '<a href="' . $this->product->get_store_url() . '">' . $this->product->get_store_name() . '</a> ', $this->product->get_type() ) . '</p>';
134
+
135
+ }
136
+
137
+ /**
138
+ * Return the license status.
139
+ *
140
+ * @return string The License status.
141
+ */
142
+ public function get_license_status() {
143
+ $license_data = get_option( $this->product->get_key() . '_license_data', '' );
144
+ if ( $license_data !== '' ) {
145
+ return isset( $license_data->license ) ? $license_data->license : get_option( $this->product->get_key() . '_license_status', 'not_active' );
146
+ } else {
147
+ return get_option( $this->product->get_key() . '_license_status', 'not_active' );
148
+ }
149
+
150
+ }
151
+
152
+ /**
153
+ * Check if the license is active or not
154
+ *
155
+ * @return bool
156
+ */
157
+ public function check_activation() {
158
+ $license_data = get_option( $this->product->get_key() . '_license_data', '' );
159
+ if ( $license_data !== '' ) {
160
+ return isset( $license_data->error ) ? ( $license_data->error == 'no_activations_left' ) : false;
161
+ }
162
+
163
+ return false;
164
+ }
165
+
166
+ /**
167
+ * Check if the license is about to expire in the next month
168
+ *
169
+ * @return bool
170
+ */
171
+ function check_expiration() {
172
+ $license_data = get_option( $this->product->get_key() . '_license_data', '' );
173
+ if ( $license_data !== '' ) {
174
+ if ( isset( $license_data->expires ) ) {
175
+ if ( strtotime( $license_data->expires ) - time() < 30 * 24 * 3600 ) {
176
+ return true;
177
+ }
178
+ }
179
+ }
180
+
181
+ return false;
182
+ }
183
+
184
+ /**
185
+ * Return the renew url from the store used
186
+ *
187
+ * @return string The renew url.
188
+ */
189
+ function renew_url() {
190
+ $license_data = get_option( $this->product->get_key() . '_license_data', '' );
191
+ if ( $license_data !== '' ) {
192
+ if ( isset( $license_data->download_id ) && isset( $license_data->key ) ) {
193
+ return $this->product->get_store_url() . '/checkout/?edd_license_key=' . $license_data->key . '&download_id=' . $license_data->download_id;
194
+ }
195
+ }
196
+
197
+ return $this->product->get_store_url();
198
+ }
199
+
200
+ /**
201
+ * Check if we hide the notificatin nag or not
202
+ *
203
+ * @param string $hide The notification to hide.
204
+ *
205
+ * @return bool Either hide them or not.
206
+ */
207
+ function check_hide( $hide ) {
208
+ return true;
209
+ }
210
+
211
+ /**
212
+ * Show the admin notice regarding the license status
213
+ *
214
+ * @return bool
215
+ */
216
+ function show_notice() {
217
+ if ( ! is_admin() ) {
218
+ return false;
219
+ }
220
+ $status = $this->get_license_status();
221
+ $no_activations_string = apply_filters(
222
+ $this->product->get_key() . '_lc_no_activations_string', 'No activations left for %s !!!. You need to
223
+ upgrade your plan in order to use %s on more
224
+ websites. Please ask the %s
225
+ Staff for more details.'
226
+ );
227
+ $no_valid_string = apply_filters(
228
+ $this->product->get_key() . '_lc_no_valid_string', 'In order to benefit from updates and support for %s, please add
229
+ your license code from your <a href="%s" target="_blank">purchase history</a> and validate it <a
230
+ href="%s">here</a>. '
231
+ );
232
+ $expiration_string = apply_filters(
233
+ $this->product->get_key() . '_lc_expiration_string', 'Your license is about to expire
234
+ for %s. You can go to %s and renew it '
235
+ );
236
+ if ( $status != 'valid' ) {
237
+ if ( $this->check_activation() ) {
238
+ if ( $this->check_hide( 'activation' ) ) {
239
+ ?>
240
+ <div class="error">
241
+ <p><strong>
242
+ <?php
243
+ echo sprintf(
244
+ $no_activations_string, $this->product->get_name(), $this->product->get_name(), '<a href="' . $this->product->get_store_url() . '"
245
+ target="_blank">' . $this->product->get_store_name() . '</a>'
246
+ );
247
+ ?>
248
+ </strong>
249
+ </p>
250
+ </div>
251
+ <?php
252
+ return false;
253
+ }
254
+ }
255
+ ?>
256
+ <?php if ( $this->check_hide( 'valid' ) ) : ?>
257
+ <div class="error">
258
+ <p>
259
+ <strong><?php echo sprintf( $no_valid_string, $this->product->get_name() . ' ' . $this->product->get_type(), $this->product->get_store_url(), admin_url( 'options-general.php' ) . '#' . $this->product->get_key() ); ?> </strong>
260
+ </p>
261
+ </div>
262
+ <?php endif; ?>
263
+ <?php
264
+ } else {
265
+ if ( $this->check_expiration() ) {
266
+ if ( $this->check_hide( 'expiration' ) ) {
267
+ ?>
268
+ <div class="update-nag">
269
+ <p>
270
+ <strong>
271
+ <?php
272
+ echo sprintf(
273
+ $expiration_string, $this->product->get_name() . ' ' . $this->product->get_type(), '<a
274
+ href="' . $this->renew_url() . '"
275
+ target="_blank">' . $this->product->get_store_name() . '</a>'
276
+ );
277
+ ?>
278
+ </strong>
279
+ </p>
280
+ </div>
281
+ <?php
282
+ }
283
+ }
284
+ }
285
+ }
286
+
287
+ /**
288
+ * Run the license check call
289
+ */
290
+ public function product_valid() {
291
+ if ( false === ( $license = get_transient( $this->product->get_key() . '_license_data' ) ) ) {
292
+ $license = $this->check_license();
293
+ set_transient( $this->product->get_key() . '_license_data', $license, 12 * HOUR_IN_SECONDS );
294
+ update_option( $this->product->get_key() . '_license_data', $license );
295
+ }
296
+
297
+ }
298
+
299
+ /**
300
+ * Increment the failed checks
301
+ */
302
+ private function increment_failed_checks() {
303
+ $this->failed_checks ++;
304
+ update_option( $this->product->get_key() . '_failed_checks', $this->failed_checks );
305
+ }
306
+
307
+ /**
308
+ * Reset the failed checks
309
+ */
310
+ private function reset_failed_checks() {
311
+ $this->failed_checks = 1;
312
+ update_option( $this->product->get_key() . '_failed_checks', $this->failed_checks );
313
+ }
314
+
315
+ /**
316
+ * Check the license status
317
+ *
318
+ * @return object The license data.
319
+ */
320
+ public function check_license() {
321
+ $status = $this->get_license_status();
322
+ if ( $status == 'not_active' ) {
323
+ $license_data = new stdClass();
324
+ $license_data->license = 'not_active';
325
+
326
+ return $license_data;
327
+ }
328
+ $license = trim( $this->license_key );
329
+ $api_params = array(
330
+ 'edd_action' => 'check_license',
331
+ 'license' => $license,
332
+ 'item_name' => rawurlencode( $this->product->get_name() ),
333
+ 'url' => rawurlencode( home_url() ),
334
+ );
335
+ // Call the custom API.
336
+ $response = wp_remote_get(
337
+ add_query_arg( $api_params, $this->product->get_store_url() ), array(
338
+ 'timeout' => 15,
339
+ 'sslverify' => false,
340
+ )
341
+ );
342
+ if ( is_wp_error( $response ) ) {
343
+ $license_data = new stdClass();
344
+ $license_data->license = 'valid';
345
+
346
+ } else {
347
+ $license_data = json_decode( wp_remote_retrieve_body( $response ) );
348
+ if ( ! is_object( $license_data ) ) {
349
+ $license_data = new stdClass();
350
+ $license_data->license = 'valid';
351
+ }
352
+ }
353
+ $license_old = get_option( $this->product->get_key() . '_license_data', '' );
354
+ if ( $license_old->license == 'valid' && ( $license_data->license != $license_old->license ) ) {
355
+ $this->increment_failed_checks();
356
+ } else {
357
+ $this->reset_failed_checks();
358
+ }
359
+
360
+ if ( $this->failed_checks <= self::$max_failed ) {
361
+ return $license_old;
362
+ }
363
+
364
+ if ( isset( $license_old->hide_valid ) ) {
365
+ $license_data->hide_valid = true;
366
+ }
367
+
368
+ if ( ! isset( $license_data->key ) ) {
369
+ $license_data->key = isset( $license_old->key ) ? $license_old->key : '';
370
+ }
371
+
372
+ if ( isset( $license_old->hide_expiration ) ) {
373
+ $license_data->hide_expiration = true;
374
+ }
375
+
376
+ if ( isset( $license_old->hide_activation ) ) {
377
+ $license_data->hide_activation = true;
378
+ }
379
+
380
+ return $license_data;
381
+
382
+ }
383
+
384
+ /**
385
+ * Activate the license remotely
386
+ */
387
+ function activate_license() {
388
+ // listen for our activate button to be clicked
389
+ if ( isset( $_POST[ $this->product->get_key() . '_btn_trigger' ] ) ) {
390
+ $status = $this->get_license_status();
391
+ // retrieve the license from the database
392
+ $license = $_POST[ $this->product->get_key() . '_license' ];
393
+ $api_params = array(
394
+ 'license' => $license,
395
+ 'item_name' => rawurlencode( $this->product->get_name() ),
396
+ 'url' => rawurlencode( home_url() ),
397
+ );
398
+ if ( $status != 'valid' ) {
399
+ // data to send in our API request
400
+ $api_params['edd_action'] = 'activate_license';
401
+ } else {
402
+ $api_params['edd_action'] = 'deactivate_license';
403
+ }
404
+ // Call the custom API.
405
+ $response = wp_remote_get( add_query_arg( $api_params, $this->product->get_store_url() ) );
406
+ // make sure the response came back okay
407
+ if ( is_wp_error( $response ) ) {
408
+ $license_data = new stdClass();
409
+ $license_data->license = ( $status != 'valid' ) ? 'valid' : 'invalid';
410
+
411
+ } else {
412
+ $license_data = json_decode( wp_remote_retrieve_body( $response ) );
413
+ if ( ! is_object( $license_data ) ) {
414
+ $license_data = new stdClass();
415
+ $license_data->license = ( $status != 'valid' ) ? 'valid' : 'invalid';
416
+ }
417
+ }
418
+ if ( ! isset( $license_data->key ) ) {
419
+ $license_data->key = $license;
420
+ }
421
+ if ( $license_data->license == 'valid' ) {
422
+ $this->reset_failed_checks();
423
+ }
424
+
425
+ if ( isset( $license_data->plan ) ) {
426
+ update_option( $this->product->get_key() . '_license_plan', $license_data->plan );
427
+ }
428
+
429
+ update_option( $this->product->get_key() . '_license_data', $license_data );
430
+ delete_transient( $this->product->get_key() . '_license_data' );
431
+ set_transient( $this->product->get_key() . '_license_data', $license_data, 12 * HOUR_IN_SECONDS );
432
+
433
+ }
434
+ }
435
+
436
+ /**
437
+ * Enable the license system
438
+ */
439
+ public function enable() {
440
+ if ( $this->product->get_type() == 'plugin' ) {
441
+ add_filter(
442
+ 'pre_set_site_transient_update_plugins', array(
443
+ $this,
444
+ 'pre_set_site_transient_update_plugins_filter',
445
+ )
446
+ );
447
+ add_filter( 'plugins_api', array( $this, 'plugins_api_filter' ), 10, 3 );
448
+ add_filter( 'http_request_args', array( $this, 'http_request_args' ), 10, 2 );
449
+ }
450
+ if ( $this->product->get_type() == 'theme' ) {
451
+ add_filter( 'site_transient_update_themes', array( &$this, 'theme_update_transient' ) );
452
+ add_filter( 'delete_site_transient_update_themes', array( &$this, 'delete_theme_update_transient' ) );
453
+ add_action( 'load-update-core.php', array( &$this, 'delete_theme_update_transient' ) );
454
+ add_action( 'load-themes.php', array( &$this, 'delete_theme_update_transient' ) );
455
+ add_action( 'load-themes.php', array( &$this, 'load_themes_screen' ) );
456
+ add_filter( 'http_request_args', array( $this, 'disable_wporg_update' ), 5, 2 );
457
+
458
+ }
459
+
460
+ }
461
+
462
+ /**
463
+ * Load the Themes screen
464
+ */
465
+ function load_themes_screen() {
466
+ add_thickbox();
467
+ add_action( 'admin_notices', array( &$this, 'update_nag' ) );
468
+ }
469
+
470
+ /**
471
+ * Alter the nag for themes update
472
+ */
473
+ function update_nag() {
474
+ $theme = wp_get_theme( $this->product->get_slug() );
475
+ $api_response = get_transient( $this->product_key );
476
+ if ( false === $api_response ) {
477
+ return;
478
+ }
479
+ $update_url = wp_nonce_url( 'update.php?action=upgrade-theme&amp;theme=' . urlencode( $this->product->get_slug() ), 'upgrade-theme_' . $this->product->get_slug() );
480
+ $update_message = apply_filters( 'themeisle_sdk_license_update_message', 'Updating this theme will lose any customizations you have made. Cancel to stop, OK to update.' );
481
+ $update_onclick = ' onclick="if ( confirm(\'' . esc_js( $update_message ) . '\') ) {return true;}return false;"';
482
+ if ( version_compare( $this->product->get_version(), $api_response->new_version, '<' ) ) {
483
+ echo '<div id="update-nag">';
484
+ printf(
485
+ '<strong>%1$s %2$s</strong> is available. <a href="%3$s" class="thickbox" title="%4s">Check out what\'s new</a> or <a href="%5$s"%6$s>update now</a>.',
486
+ $theme->get( 'Name' ),
487
+ $api_response->new_version,
488
+ '#TB_inline?width=640&amp;inlineId=' . $this->product->get_version() . '_changelog',
489
+ $theme->get( 'Name' ),
490
+ $update_url,
491
+ $update_onclick
492
+ );
493
+ echo '</div>';
494
+ echo '<div id="' . $this->product->get_slug() . '_' . 'changelog" style="display:none;">';
495
+ echo wpautop( $api_response->sections['changelog'] );
496
+ echo '</div>';
497
+ }
498
+ }
499
+
500
+ /**
501
+ * @param mixed $value The transient data.
502
+ *
503
+ * @return mixed
504
+ */
505
+ function theme_update_transient( $value ) {
506
+ $update_data = $this->check_for_update();
507
+ if ( $update_data ) {
508
+ $value->response[ $this->product->get_slug() ] = $update_data;
509
+ }
510
+
511
+ return $value;
512
+ }
513
+
514
+ /**
515
+ * Delete the update transient
516
+ */
517
+ function delete_theme_update_transient() {
518
+ delete_transient( $this->product_key );
519
+ }
520
+
521
+ /**
522
+ * Check remote api for latest version.
523
+ *
524
+ * @return bool|mixed Update api response.
525
+ */
526
+ private function get_version_data() {
527
+ $api_params = array(
528
+ 'edd_action' => 'get_version',
529
+ 'version' => $this->product->get_version(),
530
+ 'license' => $this->license_key,
531
+ 'name' => $this->product->get_name(),
532
+ 'slug' => $this->product->get_slug(),
533
+ 'author' => $this->product->get_store_name(),
534
+ 'url' => rawurlencode( home_url() ),
535
+ );
536
+ $response = wp_remote_post(
537
+ $this->product->get_store_url(), array(
538
+ 'timeout' => 15,
539
+ 'sslverify' => false,
540
+ 'body' => $api_params,
541
+ )
542
+ );
543
+ if ( is_wp_error( $response ) || 200 != wp_remote_retrieve_response_code( $response ) ) {
544
+ return false;
545
+ }
546
+ $update_data = json_decode( wp_remote_retrieve_body( $response ) );
547
+ if ( ! is_object( $update_data ) ) {
548
+ return false;
549
+ }
550
+
551
+ return $update_data;
552
+ }
553
+
554
+ /**
555
+ * Check for updates
556
+ *
557
+ * @return array|bool Either the update data or false in case of failure
558
+ */
559
+ function check_for_update() {
560
+ $theme = wp_get_theme( $this->product->get_slug() );
561
+ $update_data = get_transient( $this->product_key );
562
+
563
+ if ( false === $update_data ) {
564
+ $failed = false;
565
+
566
+ $update_data = $this->get_version_data();
567
+ if ( empty( $update_data ) ) {
568
+ $failed = true;
569
+ }
570
+ // If the response failed, try again in 30 minutes.
571
+ if ( $failed ) {
572
+ $data = new stdClass;
573
+ $data->new_version = $this->product->get_version();
574
+ set_transient( $this->product_key, $data, strtotime( '+30 minutes' ) );
575
+
576
+ return false;
577
+ } else {
578
+ $update_data->sections = maybe_unserialize( $update_data->sections );
579
+ set_transient( $this->product_key, $update_data, strtotime( '+12 hours' ) );
580
+ }
581
+ }
582
+ if ( ! isset( $update_data->new_version ) ) {
583
+ return false;
584
+ }
585
+ if ( version_compare( $this->product->get_version(), $update_data->new_version, '>=' ) ) {
586
+ return false;
587
+ }
588
+
589
+ return (array) $update_data;
590
+ }
591
+
592
+ /**
593
+ * Check for Updates at the defined API endpoint and modify the update array.
594
+ *
595
+ * This function dives into the update API just when WordPress creates its update array,
596
+ * then adds a custom API call and injects the custom plugin data retrieved from the API.
597
+ * It is reassembled from parts of the native WordPress plugin update code.
598
+ * See wp-includes/update.php line 121 for the original wp_update_plugins() function.
599
+ *
600
+ * @uses api_request()
601
+ *
602
+ * @param array $_transient_data Update array build by WordPress.
603
+ *
604
+ * @return array Modified update array with custom plugin data.
605
+ */
606
+ public function pre_set_site_transient_update_plugins_filter( $_transient_data ) {
607
+ if ( empty( $_transient_data ) || ! $this->do_check ) {
608
+ $this->do_check = true;
609
+
610
+ return $_transient_data;
611
+ }
612
+ $api_response = $this->api_request();
613
+ if ( false !== $api_response && is_object( $api_response ) && isset( $api_response->new_version ) ) {
614
+ if ( version_compare( $this->product->get_version(), $api_response->new_version, '<' ) ) {
615
+ $_transient_data->response[ $this->product->get_slug() . '/' . $this->product->get_file() ] = $api_response;
616
+ }
617
+ }
618
+
619
+ return $_transient_data;
620
+ }
621
+
622
+ /**
623
+ * Calls the API and, if successfull, returns the object delivered by the API.
624
+ *
625
+ * @uses get_bloginfo()
626
+ * @uses wp_remote_post()
627
+ * @uses is_wp_error()
628
+ *
629
+ * @param string $_action The requested action.
630
+ * @param array $_data Parameters for the API action.
631
+ *
632
+ * @return false||object
633
+ */
634
+ private function api_request( $_action = '', $_data = '' ) {
635
+ $update_data = $this->get_version_data();
636
+ if ( empty( $update_data ) ) {
637
+ return false;
638
+ }
639
+ if ( $update_data && isset( $update_data->sections ) ) {
640
+ $update_data->sections = maybe_unserialize( $update_data->sections );
641
+ }
642
+ return $update_data;
643
+ }
644
+
645
+ /**
646
+ * Updates information on the "View version x.x details" page with custom data.
647
+ *
648
+ * @uses api_request()
649
+ *
650
+ * @param mixed $_data Plugin data.
651
+ * @param string $_action Action to send.
652
+ * @param object $_args Arguments to use.
653
+ *
654
+ * @return object $_data
655
+ */
656
+ public function plugins_api_filter( $_data, $_action = '', $_args = null ) {
657
+ if ( ( $_action != 'plugin_information' ) || ! isset( $_args->slug ) || ( $_args->slug != $this->product->get_slug() ) ) {
658
+ return $_data;
659
+ }
660
+ $api_response = $this->api_request();
661
+ if ( false !== $api_response ) {
662
+ $_data = $api_response;
663
+ }
664
+
665
+ return $_data;
666
+ }
667
+
668
+ /**
669
+ * Disable SSL verification in order to prevent download update failures
670
+ *
671
+ * @param array $args Http args.
672
+ * @param string $url Url to check.
673
+ *
674
+ * @return object $array
675
+ */
676
+ function http_request_args( $args, $url ) {
677
+ // If it is an https request and we are performing a package download, disable ssl verification
678
+ if ( strpos( $url, 'https://' ) !== false && strpos( $url, 'edd_action=package_download' ) ) {
679
+ $args['sslverify'] = false;
680
+ }
681
+
682
+ return $args;
683
+ }
684
+
685
+ }
686
+ endif;
vendor/codeinwp/themeisle-sdk/class-themeisle-sdk-loader.php ADDED
@@ -0,0 +1,96 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <?php
2
+ /**
3
+ * The main loader class for ThemeIsle SDK
4
+ *
5
+ * @package ThemeIsleSDK
6
+ * @subpackage Loader
7
+ * @copyright Copyright (c) 2017, Marius Cristea
8
+ * @license http://opensource.org/licenses/gpl-3.0.php GNU Public License
9
+ * @since 1.0.0
10
+ */
11
+ // Exit if accessed directly.
12
+ if ( ! defined( 'ABSPATH' ) ) {
13
+ exit;
14
+ }
15
+ if ( ! class_exists( 'ThemeIsle_SDK_Loader' ) ) :
16
+ /**
17
+ * Singleton loader for ThemeIsle SDK.
18
+ */
19
+ final class ThemeIsle_SDK_Loader {
20
+ /**
21
+ * @var ThemeIsle_SDK_Loader instance The singleton instance
22
+ */
23
+ private static $instance;
24
+ /**
25
+ * @var string $version The class version.
26
+ */
27
+ private static $version = '1.0.0';
28
+ /**
29
+ * @var array The products which use the SDK.
30
+ */
31
+ private static $products;
32
+
33
+ /**
34
+ * Register product into SDK.
35
+ *
36
+ * @param string $basefile The product basefile.
37
+ *
38
+ * @return ThemeIsle_SDK_Loader The singleton object.
39
+ */
40
+ public static function init_product( $basefile ) {
41
+
42
+ if ( ! isset( self::$instance ) && ! ( self::$instance instanceof ThemeIsle_SDK_Loader ) ) {
43
+ self::$instance = new ThemeIsle_SDK_Loader;
44
+
45
+ }
46
+ $product_object = new ThemeIsle_SDK_Product( $basefile );
47
+ self::$products[ $product_object->get_slug() ] = $product_object;
48
+
49
+ $notifications = array();
50
+ // Based on the WordPress Available file header we enable the logger or not.
51
+ if ( ! $product_object->is_wordpress_available() && apply_filters( $product_object->get_key() . '_enable_licenser', true ) === true ) {
52
+ $licenser = new ThemeIsle_SDK_Licenser( $product_object );
53
+ $licenser->enable();
54
+ }
55
+
56
+ $logger = new ThemeIsle_SDK_Logger( $product_object );
57
+ if ( $product_object->is_logger_active() ) {
58
+ $logger->enable();
59
+ } else {
60
+ $notifications[] = $logger;
61
+ }
62
+
63
+ $feedback = new ThemeIsle_SDK_Feedback_Factory( $product_object, $product_object->get_feedback_types() );
64
+
65
+ $instances = $feedback->get_instances();
66
+ if ( array_key_exists( 'review', $instances ) ) {
67
+ $notifications[] = $instances['review'];
68
+ }
69
+ if ( array_key_exists( 'translate', $instances ) ) {
70
+ $notifications[] = $instances['translate'];
71
+ }
72
+ new ThemeIsle_SDK_Notification_Manager( $product_object, $notifications );
73
+ if ( ! $product_object->is_external_author() ) {
74
+ new ThemeIsle_SDK_Widgets_Factory( $product_object, $product_object->get_widget_types() );
75
+ }
76
+ if ( ! $product_object->is_external_author() ) {
77
+ new ThemeIsle_SDK_Rollback( $product_object );
78
+ }
79
+
80
+ new ThemeIsle_SDK_Endpoints( $product_object );
81
+
82
+ return self::$instance;
83
+ }
84
+
85
+ /**
86
+ * Get all products using the SDK.
87
+ *
88
+ * @return array Products available.
89
+ */
90
+ public static function get_products() {
91
+ return self::$products;
92
+ }
93
+
94
+
95
+ }
96
+ endif;
vendor/codeinwp/themeisle-sdk/class-themeisle-sdk-logger.php ADDED
@@ -0,0 +1,227 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <?php
2
+ /**
3
+ * The main loader class for ThemeIsle SDK
4
+ *
5
+ * @package ThemeIsleSDK
6
+ * @subpackage Logger
7
+ * @copyright Copyright (c) 2017, Marius Cristea
8
+ * @license http://opensource.org/licenses/gpl-3.0.php GNU Public License
9
+ * @since 1.0.0
10
+ */
11
+ if ( ! class_exists( 'ThemeIsle_SDK_Logger' ) ) :
12
+ /**
13
+ * Class ThemeIsle_SDK_Logger
14
+ *
15
+ * Send the statistics to the Themeisle Endpoint
16
+ */
17
+ /**
18
+ * Class ThemeIsle_SDK_Logger
19
+ */
20
+ class ThemeIsle_SDK_Logger {
21
+
22
+ /**
23
+ * @var string $logging_url Url where to send the logs
24
+ */
25
+ private $logging_url = 'http://log.themeisle.com/wp-json/v1/logs/';
26
+
27
+ /**
28
+ * @var ThemeIsle_SDK_Product $product Themeisle Product.
29
+ */
30
+ private $product;
31
+
32
+ /**
33
+ * @var string $product_cron Cron name handler
34
+ */
35
+ private $product_cron;
36
+
37
+ /**
38
+ * @var string $heading The heading of the modal
39
+ */
40
+ private $heading = 'Do you enjoy <b>{product}</b>? Become a contributor by opting in to our anonymous data tracking. We guarantee no sensitive data is collected.';
41
+
42
+ /**
43
+ * @var string $button_submit The text of the submit button
44
+ */
45
+ private $button_submit = 'Sure, I would love to help.';
46
+
47
+ /**
48
+ * @var string $button_cancel The text of the cancel button
49
+ */
50
+ private $button_cancel = 'No, thanks.';
51
+
52
+ /**
53
+ * ThemeIsle_SDK_Logger constructor.
54
+ *
55
+ * @param ThemeIsle_SDK_Product $product_object Product Object.
56
+ */
57
+ public function __construct( $product_object ) {
58
+ if ( $product_object instanceof ThemeIsle_SDK_Product ) {
59
+ $this->product = $product_object;
60
+ $this->product_cron = $product_object->get_key() . '_log_activity';
61
+ }
62
+ add_action( 'wp_ajax_' . $this->product->get_key() . __CLASS__, array( $this, 'dismiss' ) );
63
+ }
64
+
65
+
66
+ /**
67
+ * Start the cron to send the log. It will randomize the interval in order to not send all the logs at the same time.
68
+ */
69
+ public function enable() {
70
+ if ( ! wp_next_scheduled( $this->product_cron ) ) {
71
+ wp_schedule_single_event( time() + ( rand( 15, 24 ) * 3600 ), $this->product_cron );
72
+ }
73
+ add_action( $this->product_cron, array( $this, 'send_log' ) );
74
+ }
75
+
76
+ /**
77
+ * Send the statistics to the api endpoint
78
+ */
79
+ public function send_log() {
80
+ $environment = array();
81
+ $theme = wp_get_theme();
82
+ $environment['theme'] = array();
83
+ $environment['theme']['name'] = $theme->get( 'Name' );
84
+ $environment['theme']['author'] = $theme->get( 'Author' );
85
+ $environment['plugins'] = get_option( 'active_plugins' );
86
+
87
+ wp_remote_post(
88
+ $this->logging_url, array(
89
+ 'method' => 'POST',
90
+ 'timeout' => 3,
91
+ 'redirection' => 5,
92
+ 'headers' => array(
93
+ 'X-ThemeIsle-Event' => 'log_site',
94
+ ),
95
+ 'body' => array(
96
+ 'site' => get_site_url(),
97
+ 'slug' => $this->product->get_slug(),
98
+ 'version' => $this->product->get_version(),
99
+ 'data' => apply_filters( $this->product->get_key() . '_logger_data', array() ),
100
+ 'environment' => $environment,
101
+ 'license' => apply_filters( $this->product->get_key() . '_license_status', '' ),
102
+ ),
103
+ )
104
+ );
105
+ }
106
+
107
+ /**
108
+ * Dismiss the notification
109
+ */
110
+ function dismiss() {
111
+ check_ajax_referer( (string) __CLASS__, 'nonce' );
112
+
113
+ $flag = intval( $_POST['enable'] ) === 1;
114
+ update_option( $this->product->logger_option, ( $flag ? 'yes' : 'no' ) );
115
+
116
+ if ( true === $flag ) {
117
+ $this->enable();
118
+ }
119
+ }
120
+
121
+ /**
122
+ * Either we should show the notification or not.
123
+ *
124
+ * @return bool Valida notification.
125
+ */
126
+ function can_notify() {
127
+ $show = $this->product->is_logger_active();
128
+ $checked = get_option( $this->product->logger_option, '' );
129
+ if ( ! $show && $checked == '' ) {
130
+ return true;
131
+ }
132
+
133
+ return false;
134
+ }
135
+
136
+ /**
137
+ * Shows the notification
138
+ */
139
+ function show_notification() {
140
+ add_action( 'admin_notices', array( $this, 'admin_notices' ) );
141
+ }
142
+
143
+ /**
144
+ * Shows the admin notice
145
+ */
146
+ function admin_notices() {
147
+ $id = $this->product->get_key() . '_logger';
148
+
149
+ $this->add_media( $this->product->get_key() );
150
+
151
+ echo '<div class="notice notice-success is-dismissible " id="' . $this->product->get_key() . '-logger-notification" ><div id="' . $id . '" class="themeisle-logger-box">' . $this->get_html( $this->product->get_key() ) . '</div></div>';
152
+ }
153
+
154
+ /**
155
+ * Generates the HTML
156
+ *
157
+ * @param string $key The product key.
158
+ */
159
+ function get_html( $key ) {
160
+ $heading = apply_filters( $this->product->get_key() . '_logger_heading', $this->heading );
161
+ $heading = str_replace(
162
+ array( '{product}' ), array(
163
+ trim( str_replace( 'Lite', '', $this->product->get_name() ) ),
164
+ ),
165
+ $heading
166
+ );
167
+ $button_submit = apply_filters( $this->product->get_key() . '_logger_button_submit', $this->button_submit );
168
+ $button_cancel = apply_filters( $this->product->get_key() . '_logger_button_cancel', $this->button_cancel );
169
+
170
+ return '<div >'
171
+ . '<p>' . $heading . '</p>'
172
+ . '<div class="actions">'
173
+ . get_submit_button(
174
+ $button_submit, 'primary ' . $this->product->get_key() . '-ti-logger', $this->product->get_key() . 'ti-logger-yes', false, array(
175
+ 'data-ti-log-enable' => 1,
176
+ )
177
+ )
178
+ . get_submit_button(
179
+ $button_cancel, 'secondary ' . $this->product->get_key() . '-ti-logger', $this->product->get_key() . 'ti-logger-no', false, array(
180
+ 'data-ti-log-enable' => 0,
181
+ )
182
+ )
183
+ . '</div></div>';
184
+ }
185
+
186
+ /**
187
+ * Loads the js
188
+ *
189
+ * @param string $key The product key.
190
+ */
191
+ function add_media( $key ) {
192
+ ?>
193
+ <style type="text/css">
194
+ #<?php echo $key; ?>-logger-notification {
195
+ padding-bottom: 5px;
196
+ }
197
+
198
+ #<?php echo $key; ?>-logger-notification .button {
199
+ margin-left: 5px;
200
+ }
201
+ </style>
202
+ <script type="text/javascript" id="<?php echo $key; ?>ti-logger-js">
203
+ (function ($) {
204
+ $(document).ready(function () {
205
+ $('.<?php echo $key; ?>-ti-logger').on('click', function (e) {
206
+
207
+ $.ajax({
208
+ url: ajaxurl,
209
+ method: "post",
210
+ data: {
211
+ 'nonce': '<?php echo wp_create_nonce( (string) __CLASS__ ); ?>',
212
+ 'action': '<?php echo $this->product->get_key() . __CLASS__; ?>',
213
+ 'enable': $(this).attr('data-ti-log-enable')
214
+ },
215
+ success: function () {
216
+ $('#<?php echo $key; ?>-logger-notification').hide();
217
+ }
218
+ });
219
+ });
220
+ });
221
+ })(jQuery);
222
+ </script>
223
+ <?php
224
+ }
225
+
226
+ }
227
+ endif;
vendor/codeinwp/themeisle-sdk/class-themeisle-sdk-notification-manager.php ADDED
@@ -0,0 +1,105 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <?php
2
+ /**
3
+ * The notification manager class for ThemeIsle SDK
4
+ *
5
+ * @package ThemeIsleSDK
6
+ * @subpackage Notification
7
+ * @copyright Copyright (c) 2017, Marius Cristea
8
+ * @license http://opensource.org/licenses/gpl-3.0.php GNU Public License
9
+ * @since 1.0.0
10
+ */
11
+ // Exit if accessed directly.
12
+ if ( ! defined( 'ABSPATH' ) ) {
13
+ exit;
14
+ }
15
+ if ( ! class_exists( 'ThemeIsle_SDK_Notification_Manager' ) ) :
16
+ /**
17
+ * Notification manager model for ThemeIsle SDK.
18
+ */
19
+ class ThemeIsle_SDK_Notification_Manager {
20
+ /**
21
+ * Time between notifications.
22
+ */
23
+ const NOTIFICATION_INTERVAL_HOURS = 100;
24
+ /**
25
+ * @var array Notifications for the current product.
26
+ */
27
+ static private $notifications = array();
28
+ /**
29
+ * @var ThemeIsle_SDK_Product Current product.
30
+ */
31
+ private $product;
32
+ /**
33
+ * @var array ThemeIsle_SDK_Feedback Feedbacks available.
34
+ */
35
+ private $callbacks = array();
36
+
37
+ /**
38
+ * ThemeIsle_SDK_Notification_Manager constructor.
39
+ *
40
+ * @param ThemeIsle_SDK_Product $product_object Product Object.
41
+ * @param array $callbacks the objects that will be called when a notification is due.
42
+ */
43
+ public function __construct( $product_object, $callbacks ) {
44
+ $this->product = $product_object;
45
+ $this->callbacks = $callbacks;
46
+ $this->setup_hooks();
47
+ }
48
+
49
+ /**
50
+ * Setup the notifications.
51
+ */
52
+ function setup_notifications() {
53
+ if ( ! current_user_can( 'manage_options' ) ) {
54
+ return;
55
+ }
56
+ // Load the notifications only if we have it installed after the required interval.
57
+ if ( ( time() - $this->product->get_install_time() ) > self::NOTIFICATION_INTERVAL_HOURS * HOUR_IN_SECONDS ) {
58
+ if ( $this->product instanceof ThemeIsle_SDK_Product && $this->callbacks && is_array( $this->callbacks ) ) {
59
+ foreach ( $this->callbacks as $instance ) {
60
+ self::$notifications[ $this->product->get_key() . get_class( $instance ) ] = $instance;
61
+ }
62
+ }
63
+ }
64
+ }
65
+
66
+ /**
67
+ * Setup the internal hooks
68
+ */
69
+ private function setup_hooks() {
70
+ add_action( 'admin_head', array( $this, 'show_notification' ) );
71
+ add_action( 'admin_init', array( $this, 'setup_notifications' ) );
72
+ }
73
+
74
+ /**
75
+ * Shows the notification
76
+ */
77
+ function show_notification() {
78
+ $instances = self::$notifications;
79
+ if ( empty( $instances ) ) {
80
+ return;
81
+ }
82
+
83
+ $available = array_keys( $instances );
84
+ $active = get_option( 'themeisle_sdk_active_notification', array() );
85
+
86
+ foreach ( $available as $key ) {
87
+ $instance = $instances[ $key ];
88
+ if ( $instance->can_notify() ) {
89
+
90
+ // Detect notification switch.
91
+ if ( empty( $active['key'] ) || ( $active['key'] != $key ) ) {
92
+ $active['key'] = $key;
93
+ $active['time'] = time();
94
+ update_option( 'themeisle_sdk_active_notification', $active );
95
+ }
96
+ if ( ( time() - $active['time'] ) > ( self::NOTIFICATION_INTERVAL_HOURS * HOUR_IN_SECONDS ) ) {
97
+ $instance->show_notification();
98
+ }
99
+ break;
100
+ }
101
+ }
102
+
103
+ }
104
+ }
105
+ endif;
vendor/codeinwp/themeisle-sdk/class-themeisle-sdk-product.php ADDED
@@ -0,0 +1,635 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <?php
2
+ /**
3
+ * The product model class for ThemeIsle SDK
4
+ *
5
+ * @package ThemeIsleSDK
6
+ * @subpackage Product
7
+ * @copyright Copyright (c) 2017, Marius Cristea
8
+ * @license http://opensource.org/licenses/gpl-3.0.php GNU Public License
9
+ * @since 1.0.0
10
+ */
11
+ // Exit if accessed directly.
12
+ if ( ! defined( 'ABSPATH' ) ) {
13
+ exit;
14
+ }
15
+ if ( ! class_exists( 'ThemeIsle_SDK_Product' ) ) :
16
+ /**
17
+ * Product model for ThemeIsle SDK.
18
+ */
19
+ class ThemeIsle_SDK_Product {
20
+ /**
21
+ * @var string $slug THe product slug.
22
+ */
23
+ private $slug;
24
+ /**
25
+ * @var string $basefile The file with headers.
26
+ */
27
+ private $basefile;
28
+ /**
29
+ * @var string $type The product type ( plugin | theme ).
30
+ */
31
+ private $type;
32
+ /**
33
+ * @var string $file The file name.
34
+ */
35
+ private $file;
36
+ /**
37
+ * @var string $name The product name.
38
+ */
39
+ private $name;
40
+ /**
41
+ * @var string $key The product ready key.
42
+ */
43
+ private $key;
44
+ /**
45
+ * @var string $author_url The url of the author.
46
+ */
47
+ private $author_url;
48
+ /**
49
+ * @var string $store_url The store url.
50
+ */
51
+ private $store_url;
52
+ /**
53
+ * @var int $install The date of install.
54
+ */
55
+ private $install;
56
+ /**
57
+ * @var string $store_name The store name.
58
+ */
59
+ private $store_name;
60
+ /**
61
+ * @var array $allowed_authors The allowed authors.
62
+ */
63
+ private $allowed_authors = array(
64
+ 'proteusthemes.com',
65
+ 'anarieldesign.com',
66
+ 'prothemedesign.com',
67
+ 'cssigniter.com',
68
+ );
69
+ /**
70
+ * @var array $allowed_external_products The allowed external_products.
71
+ */
72
+ private $allowed_products = array(
73
+ 'zermatt',
74
+ 'neto',
75
+ 'olsen',
76
+ 'benson',
77
+ 'romero',
78
+ 'carmack',
79
+ 'puzzle',
80
+ 'broadsheet',
81
+ 'girlywp',
82
+ 'veggie',
83
+ 'zeko',
84
+ 'maishawp',
85
+ 'didi',
86
+ 'liber',
87
+ 'medicpress-pt',
88
+ 'adrenaline-pt',
89
+ 'consultpress-pt',
90
+ 'legalpress-pt',
91
+ 'gympress-pt',
92
+ 'readable-pt',
93
+ 'bolts-pt',
94
+ );
95
+ /**
96
+ * @var bool $requires_license Either user needs to activate it with license.
97
+ */
98
+ private $requires_license;
99
+ /**
100
+ * @var bool $wordpress_available Either is available on WordPress or not.
101
+ */
102
+ private $wordpress_available;
103
+ /**
104
+ * @var string $version The product version.
105
+ */
106
+ private $version;
107
+ /**
108
+ * @var string $logger_option Logger option key.
109
+ */
110
+ public $logger_option;
111
+ /**
112
+ * @var string $pro_slug Pro slug, if available.
113
+ */
114
+ public $pro_slug;
115
+ /**
116
+ * @var string $feedback_types All the feedback types the product supports
117
+ */
118
+ private $feedback_types = array();
119
+
120
+ /**
121
+ * @var string $widget_types All the widget types the product supports
122
+ */
123
+ private $widget_types = array( 'dashboard_blog' );
124
+
125
+ /**
126
+ * ThemeIsle_SDK_Product constructor.
127
+ *
128
+ * @param string $basefile Product basefile.
129
+ */
130
+ public function __construct( $basefile ) {
131
+ if ( ! empty( $basefile ) ) {
132
+ if ( is_readable( $basefile ) ) {
133
+ $this->basefile = $basefile;
134
+ $this->setup_from_path();
135
+ $this->setup_from_fileheaders();
136
+ }
137
+ }
138
+ $install = get_option( $this->get_key() . '_install', 0 );
139
+ if ( $install === 0 ) {
140
+ $install = time();
141
+ update_option( $this->get_key() . '_install', time() );
142
+ }
143
+ $this->install = $install;
144
+
145
+ $this->logger_option = $this->get_key() . '_logger_flag';
146
+
147
+ }
148
+
149
+ /**
150
+ * Setup props from fileheaders.
151
+ */
152
+ public function setup_from_fileheaders() {
153
+ $file_headers = array(
154
+ 'Requires License' => 'Requires License',
155
+ 'WordPress Available' => 'WordPress Available',
156
+ 'Pro Slug' => 'Pro Slug',
157
+ 'Version' => 'Version',
158
+ );
159
+ if ( $this->type == 'plugin' ) {
160
+ $file_headers['Name'] = 'Plugin Name';
161
+ $file_headers['AuthorName'] = 'Author';
162
+ $file_headers['AuthorURI'] = 'Author URI';
163
+ }
164
+ if ( $this->type == 'theme' ) {
165
+ $file_headers['Name'] = 'Theme Name';
166
+ $file_headers['AuthorName'] = 'Author';
167
+ $file_headers['AuthorURI'] = 'Author URI';
168
+ }
169
+ $file_headers = get_file_data( $this->basefile, $file_headers );
170
+
171
+ $this->name = $file_headers['Name'];
172
+ $this->store_name = $file_headers['AuthorName'];
173
+ $this->author_url = $file_headers['AuthorURI'];
174
+ $this->store_url = $file_headers['AuthorURI'];
175
+ if ( $this->is_external_author() ) {
176
+ $this->store_url = 'https://themeisle.com';
177
+ $this->store_name = 'ThemeIsle';
178
+ }
179
+ $this->requires_license = ( $file_headers['Requires License'] == 'yes' ) ? true : false;
180
+ $this->wordpress_available = ( $file_headers['WordPress Available'] == 'yes' ) ? true : false;
181
+ $this->pro_slug = ! empty( $file_headers['Pro Slug'] ) ? $file_headers['Pro Slug'] : '';
182
+ $this->version = $file_headers['Version'];
183
+ if ( $this->require_uninstall_feedback() ) {
184
+ $this->feedback_types[] = 'deactivate';
185
+ }
186
+ if ( $this->is_wordpress_available() ) {
187
+ $this->feedback_types[] = 'review';
188
+ $this->feedback_types[] = 'translate';
189
+ }
190
+ }
191
+
192
+ /**
193
+ * Check if the product is by external author or not.
194
+ *
195
+ * @return bool Either is external author or no.
196
+ */
197
+ public function is_external_author() {
198
+ foreach ( $this->allowed_authors as $author ) {
199
+ if ( strpos( $this->author_url, $author ) !== false ) {
200
+ return true;
201
+ }
202
+ if ( in_array( $this->get_slug(), $this->allowed_products ) ) {
203
+ return true;
204
+ }
205
+ }
206
+
207
+ return false;
208
+ }
209
+
210
+ /**
211
+ * The magic var_dump info method.
212
+ *
213
+ * @return array Debug info.
214
+ */
215
+ public function __debugInfo() {
216
+ return array(
217
+ 'name' => $this->name,
218
+ 'slug' => $this->slug,
219
+ 'version' => $this->version,
220
+ 'basefile' => $this->basefile,
221
+ 'key' => $this->key,
222
+ 'type' => $this->type,
223
+ 'store_name' => $this->store_name,
224
+ 'store_url' => $this->store_url,
225
+ 'wordpress_available' => $this->wordpress_available,
226
+ 'requires_license' => $this->requires_license,
227
+ );
228
+
229
+ }
230
+
231
+ /**
232
+ * Setup props from path.
233
+ */
234
+ public function setup_from_path() {
235
+ $this->file = basename( $this->basefile );
236
+ $dir = dirname( $this->basefile );
237
+ $this->slug = basename( $dir );
238
+ $exts = explode( '.', $this->basefile );
239
+ $ext = $exts[ count( $exts ) - 1 ];
240
+ if ( $ext == 'css' ) {
241
+ $this->type = 'theme';
242
+ }
243
+ if ( $ext == 'php' ) {
244
+ $this->type = 'plugin';
245
+ }
246
+ $this->key = self::key_ready_name( $this->slug );
247
+ }
248
+
249
+ /**
250
+ * @param string $string the String to be normalized for cron handler.
251
+ *
252
+ * @return string $name The normalized string.
253
+ */
254
+ static function key_ready_name( $string ) {
255
+ return str_replace( '-', '_', strtolower( trim( $string ) ) );
256
+ }
257
+
258
+ /**
259
+ * Getter for product name.
260
+ *
261
+ * @return string The product name.
262
+ */
263
+ public function get_name() {
264
+ return $this->name;
265
+ }
266
+
267
+ /**
268
+ * Getter for product version.
269
+ *
270
+ * @return string The product version.
271
+ */
272
+ public function get_version() {
273
+ return $this->version;
274
+ }
275
+
276
+ /**
277
+ * If product is available on wordpress.org or not.
278
+ *
279
+ * @return bool Either is wp available or not.
280
+ */
281
+ public function is_wordpress_available() {
282
+ return $this->wordpress_available;
283
+ }
284
+
285
+ /**
286
+ * @return array Array of available versions.
287
+ */
288
+ private function get_plugin_versions() {
289
+
290
+ $url = sprintf( 'https://api.wordpress.org/plugins/info/1.0/%s', $this->get_slug() );
291
+ $response = wp_remote_get( $url );
292
+ if ( is_wp_error( $response ) ) {
293
+ return array();
294
+ }
295
+ $response = wp_remote_retrieve_body( $response );
296
+ $response = maybe_unserialize( $response );
297
+
298
+ if ( ! is_object( $response ) ) {
299
+ return array();
300
+ }
301
+ if ( ! isset( $response->versions ) ) {
302
+ return array();
303
+ }
304
+ $versions = array();
305
+ foreach ( $response->versions as $version => $zip ) {
306
+ $versions[] = array(
307
+ 'version' => $version,
308
+ 'url' => $zip,
309
+ );
310
+ }
311
+
312
+ return $versions;
313
+ }
314
+
315
+ /**
316
+ * @return string Return license key, if available.
317
+ */
318
+ private function get_license() {
319
+ $license_data = get_option( $this->get_key() . '_license_data', '' );
320
+
321
+ if ( empty( $license_data ) ) {
322
+ return '';
323
+ }
324
+ if ( ! isset( $license_data->key ) ) {
325
+ return '';
326
+ }
327
+
328
+ return $license_data->key;
329
+ }
330
+
331
+ /**
332
+ * @return array Array of available versions.
333
+ */
334
+ private function get_pro_versions() {
335
+ $license = $this->get_license();
336
+ $store_url = trailingslashit( $this->store_url );
337
+ $url = sprintf( '%s?edd_action=get_versions&name=%s&url=%s&license=%s', $store_url, urlencode( $this->get_name() ), urlencode( get_site_url() ), $license );
338
+ $response = wp_remote_get( $url );
339
+ if ( is_wp_error( $response ) ) {
340
+ return array();
341
+ }
342
+ $response = wp_remote_retrieve_body( $response );
343
+ $response = json_decode( $response );
344
+ if ( ! is_object( $response ) ) {
345
+ return array();
346
+ }
347
+ if ( ! isset( $response->versions ) ) {
348
+ return array();
349
+ }
350
+ $versions = array();
351
+ foreach ( $response->versions as $key => $version ) {
352
+ $versions[] = array(
353
+ 'version' => $version->version,
354
+ 'url' => $version->file,
355
+ );
356
+ }
357
+
358
+ return $versions;
359
+ }
360
+
361
+ /**
362
+ * Return theme versions.
363
+ *
364
+ * @return array Theme versions array.
365
+ */
366
+ public function get_theme_versions() {
367
+ $url = sprintf( 'https://api.wordpress.org/themes/info/1.1/?action=theme_information&request[slug]=%s&request[fields][versions]=true', $this->get_slug() );
368
+ $response = wp_remote_get( $url );
369
+ if ( is_wp_error( $response ) ) {
370
+ return array();
371
+ }
372
+ $response = wp_remote_retrieve_body( $response );
373
+ $response = json_decode( $response );
374
+
375
+ if ( ! is_object( $response ) ) {
376
+ return array();
377
+ }
378
+ if ( ! isset( $response->versions ) ) {
379
+ return array();
380
+ }
381
+ $versions = array();
382
+ foreach ( $response->versions as $version => $zip ) {
383
+ $versions[] = array(
384
+ 'version' => $version,
385
+ 'url' => $zip,
386
+ );
387
+ }
388
+
389
+ return $versions;
390
+ }
391
+
392
+ /**
393
+ * Get versions array from wp.org
394
+ *
395
+ * @return array Array of versions.
396
+ */
397
+ private function get_api_versions() {
398
+
399
+ $cache_key = $this->get_key() . '_' . preg_replace( '/[^0-9a-zA-Z ]/m', '', $this->version ) . 'versions';
400
+ $cache_versions = get_transient( $this->get_key() . '_' . preg_replace( '/[^0-9a-zA-Z ]/m', '', $this->version ) . 'versions' );
401
+ if ( false == $cache_versions ) {
402
+ $versions = array();
403
+ if ( ! $this->is_wordpress_available() ) {
404
+ $versions = $this->get_pro_versions();
405
+ } else {
406
+ if ( $this->get_type() === 'plugin' ) {
407
+ $versions = $this->get_plugin_versions();
408
+ }
409
+ if ( $this->get_type() === 'theme' ) {
410
+ $versions = $this->get_theme_versions();
411
+ }
412
+ }
413
+ set_transient( $cache_key, $versions, MONTH_IN_SECONDS );
414
+ } else {
415
+ $versions = is_array( $cache_versions ) ? $cache_versions : array();
416
+ }
417
+
418
+ return $versions;
419
+ }
420
+
421
+ /**
422
+ * Get the last rollback for this product.
423
+ *
424
+ * @return array The rollback version.
425
+ */
426
+ public function get_rollback() {
427
+ $rollback = array();
428
+ $versions = $this->get_api_versions();
429
+ $versions = apply_filters( $this->get_key() . '_rollbacks', $versions );
430
+
431
+ if ( $versions ) {
432
+ usort( $versions, array( $this, 'sort_rollback_array' ) );
433
+ foreach ( $versions as $version ) {
434
+ if ( isset( $version['version'] ) && isset( $version['url'] ) && version_compare( $this->version, $version['version'], '>' ) ) {
435
+ $rollback = $version;
436
+ break;
437
+ }
438
+ }
439
+ }
440
+
441
+ return $rollback;
442
+ }
443
+
444
+ /**
445
+ * Sort the rollbacks array in descending order.
446
+ */
447
+ public function sort_rollback_array( $a, $b ) {
448
+ return version_compare( $a['version'], $b['version'], '<' ) > 0;
449
+ }
450
+
451
+ /**
452
+ * If product can be rolled back.
453
+ *
454
+ * @return bool Can the product be rolled back or not.
455
+ */
456
+ public function can_rollback() {
457
+ if ( $this->get_type() === 'theme' ) {
458
+ if ( ! current_user_can( 'switch_themes' ) ) {
459
+ return false;
460
+ }
461
+ }
462
+ if ( $this->get_type() === 'plugin' ) {
463
+ if ( ! current_user_can( 'install_plugins' ) ) {
464
+ return false;
465
+ }
466
+ }
467
+ $rollback = $this->get_rollback();
468
+
469
+ return ! empty( $rollback );
470
+ }
471
+
472
+ /**
473
+ * Return the product key.
474
+ *
475
+ * @return string The product key.
476
+ */
477
+ public function get_key() {
478
+ return $this->key;
479
+ }
480
+
481
+ /**
482
+ * Return friendly name.
483
+ *
484
+ * @return string Friendly name.
485
+ */
486
+ public function get_friendly_name() {
487
+ $name = apply_filters( $this->get_key() . '_friendly_name', trim( str_replace( 'Lite', '', $this->get_name() ) ) );
488
+ $name = rtrim( $name, '- ' );
489
+
490
+ return $name;
491
+ }
492
+
493
+ /**
494
+ * Either the product requires license or not.
495
+ *
496
+ * @return bool Either requires license or not.
497
+ */
498
+ public function requires_license() {
499
+ return $this->requires_license;
500
+ }
501
+
502
+ /**
503
+ * Check if the product is either theme or plugin.
504
+ *
505
+ * @return string Product type.
506
+ */
507
+ public function get_type() {
508
+ return $this->type;
509
+ }
510
+
511
+ /**
512
+ * Returns the Store name.
513
+ *
514
+ * @return string Store name.
515
+ */
516
+ public function get_store_name() {
517
+ return $this->store_name;
518
+ }
519
+
520
+ /**
521
+ * Returns the store url.
522
+ *
523
+ * @return string The store url.
524
+ */
525
+ public function get_store_url() {
526
+ return $this->store_url;
527
+ }
528
+
529
+ /**
530
+ * Returns the product slug.
531
+ *
532
+ * @return string The product slug.
533
+ */
534
+ public function get_slug() {
535
+ return $this->slug;
536
+ }
537
+
538
+ /**
539
+ * Returns product basefile, which holds the metaheaders.
540
+ *
541
+ * @return string The product basefile.
542
+ */
543
+ public function get_basefile() {
544
+ return $this->basefile;
545
+ }
546
+
547
+ /**
548
+ * Returns product filename.
549
+ *
550
+ * @return string The product filename.
551
+ */
552
+ public function get_file() {
553
+ return $this->file;
554
+ }
555
+
556
+ /**
557
+ * Returns feedback types
558
+ *
559
+ * @return array The feedback types.
560
+ */
561
+ public function get_feedback_types() {
562
+ return apply_filters( $this->get_key() . '_feedback_types', $this->feedback_types );
563
+ }
564
+
565
+ /**
566
+ * Returns widget types
567
+ *
568
+ * @return array The widget types.
569
+ */
570
+ public function get_widget_types() {
571
+ return apply_filters( $this->get_key() . '_widget_types', $this->widget_types );
572
+ }
573
+
574
+ /**
575
+ * We log the user website and product version.
576
+ *
577
+ * @return bool Either we log the data or not.
578
+ */
579
+ public function is_logger_active() {
580
+ // If is not available on WordPress log this automatically.
581
+ if ( ! $this->is_wordpress_available() ) {
582
+ return true;
583
+ } else {
584
+ $pro_slug = $this->get_pro_slug();
585
+ if ( ! empty( $pro_slug ) ) {
586
+
587
+ $all_products = ThemeIsle_SDK_Loader::get_products();
588
+ if ( isset( $all_products[ $pro_slug ] ) ) {
589
+ return true;
590
+ }
591
+ }
592
+
593
+ return ( get_option( $this->get_key() . '_logger_flag', 'no' ) === 'yes' );
594
+
595
+ }
596
+ }
597
+
598
+ /**
599
+ * Returns the pro slug, if available.
600
+ *
601
+ * @return string The pro slug.
602
+ */
603
+ public function get_pro_slug() {
604
+ return $this->pro_slug;
605
+ }
606
+
607
+ /**
608
+ * Return the install timestamp.
609
+ *
610
+ * @return int The install timestamp.
611
+ */
612
+ public function get_install_time() {
613
+ return $this->install;
614
+ }
615
+
616
+ /**
617
+ * We require feedback on uninstall.
618
+ *
619
+ * @return bool Either we should require feedback on uninstall or not.
620
+ */
621
+ public function require_uninstall_feedback() {
622
+ if ( $this->get_type() == 'theme' && ! $this->is_external_author() ) {
623
+ return ! get_transient( 'ti_sdk_pause_' . $this->get_key(), false );
624
+ }
625
+
626
+ if ( $this->get_type() == 'plugin' ) {
627
+
628
+ return true;
629
+ }
630
+
631
+ return false;
632
+ }
633
+
634
+ }
635
+ endif;
vendor/codeinwp/themeisle-sdk/class-themeisle-sdk-rollback.php ADDED
@@ -0,0 +1,223 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <?php
2
+ /**
3
+ * The rollback class for ThemeIsle SDK
4
+ *
5
+ * @package ThemeIsleSDK
6
+ * @subpackage Rollback
7
+ * @copyright Copyright (c) 2017, Marius Cristea
8
+ * @license http://opensource.org/licenses/gpl-3.0.php GNU Public License
9
+ * @since 1.0.0
10
+ */
11
+ // Exit if accessed directly.
12
+ if ( ! defined( 'ABSPATH' ) ) {
13
+ exit;
14
+ }
15
+ if ( ! class_exists( 'ThemeIsle_SDK_Rollback' ) ) :
16
+ /**
17
+ * Rollback for ThemeIsle SDK.
18
+ */
19
+ class ThemeIsle_SDK_Rollback {
20
+
21
+ /**
22
+ * @var ThemeIsle_SDK_Product $product Themeisle Product.
23
+ */
24
+ protected $product;
25
+
26
+
27
+ /**
28
+ * ThemeIsle_SDK_Rollback constructor.
29
+ *
30
+ * @param ThemeIsle_SDK_Product $product_object Product Object.
31
+ */
32
+ public function __construct( $product_object ) {
33
+ if ( $product_object instanceof ThemeIsle_SDK_Product ) {
34
+ $this->product = $product_object;
35
+ }
36
+ if ( $this->product->can_rollback() ) {
37
+ $this->show_link();
38
+ $this->add_hooks();
39
+
40
+ }
41
+ }
42
+
43
+ /**
44
+ * Add js scripts for themes rollback.
45
+ */
46
+ public function add_footer() {
47
+ $screen = get_current_screen();
48
+ if ( ! isset( $screen->parent_file ) ) {
49
+ return;
50
+ }
51
+ if ( $screen->parent_file !== 'themes.php' ) {
52
+ return;
53
+ }
54
+ if ( $this->product->get_type() === 'plugin' ) {
55
+ return;
56
+ }
57
+
58
+ $version = $this->product->get_rollback();
59
+ ?>
60
+ <script type="text/javascript">
61
+ jQuery(document).ready(function ($) {
62
+ setInterval(checkTheme, 500);
63
+
64
+ function checkTheme() {
65
+ var theme = '<?php echo esc_attr( $this->product->get_slug() ); ?>-action';
66
+
67
+ if (jQuery('#' + theme).length > 0) {
68
+ if (jQuery('.theme-overlay.active').is(':visible')) {
69
+ if (jQuery('#' + theme + '-rollback').length === 0) {
70
+ jQuery('.theme-actions .active-theme').prepend('<a class="button" style="float:left" id="' + theme + '-rollback" href="<?php echo esc_url( wp_nonce_url( admin_url( 'admin-post.php?action=' . $this->product->get_key() . '_rollback' ), $this->product->get_key() . '_rollback' ) ); ?>">Rollback to v<?php echo esc_attr( $version['version'] ); ?></a>')
71
+ }
72
+ }
73
+
74
+ }
75
+ }
76
+ })
77
+
78
+ </script>
79
+ <?php
80
+
81
+ }
82
+
83
+ /**
84
+ * Set the rollback hook. Strangely, this does not work if placed in the ThemeIsle_SDK_Rollback class, so it is being called from there instead.
85
+ */
86
+ public function add_hooks() {
87
+ add_action( 'admin_post_' . $this->product->get_key() . '_rollback', array( $this, 'start_rollback' ) );
88
+ add_action( 'admin_footer', array( $this, 'add_footer' ) );
89
+ }
90
+
91
+ /**
92
+ * If product can be rolled back, show the link to rollback.
93
+ */
94
+ private function show_link() {
95
+ add_filter(
96
+ 'plugin_action_links_' . plugin_basename( $this->product->get_basefile() ), array(
97
+ $this,
98
+ 'add_rollback_link',
99
+ )
100
+ );
101
+ }
102
+
103
+ /**
104
+ * Show the rollback links in the plugin page.
105
+ *
106
+ * @return array The links.
107
+ */
108
+ public function add_rollback_link( $links ) {
109
+ $version = $this->product->get_rollback();
110
+ $links[] = '<a href="' . wp_nonce_url( admin_url( 'admin-post.php?action=' . $this->product->get_key() . '_rollback' ), $this->product->get_key() . '_rollback' ) . '">' . sprintf( apply_filters( $this->product->get_key() . '_rollback_label', 'Rollback to v%s' ), $version['version'] ) . '</a>';
111
+
112
+ return $links;
113
+ }
114
+
115
+ /**
116
+ * Start the rollback operation.
117
+ */
118
+ public function start_rollback() {
119
+ if ( ! isset( $_GET['_wpnonce'] ) || ! wp_verify_nonce( $_GET['_wpnonce'], $this->product->get_key() . '_rollback' ) ) {
120
+ wp_nonce_ays( '' );
121
+ }
122
+
123
+ if ( $this->product->get_type() === 'plugin' ) {
124
+ $this->start_rollback_plugin();
125
+ } elseif ( $this->product->get_type() === 'theme' ) {
126
+ $this->start_rollback_theme();
127
+ }
128
+ }
129
+
130
+ /**
131
+ * Alter links and remove duplicate customize message.
132
+ *
133
+ * @param array $links Array of old links.
134
+ *
135
+ * @return mixed Array of links.
136
+ */
137
+ public function alter_links_theme_upgrade( $links ) {
138
+ if ( isset( $links['preview'] ) ) {
139
+ $links['preview'] = str_replace( '<span aria-hidden="true">Customize</span>', '', $links['preview'] );
140
+ }
141
+
142
+ return $links;
143
+ }
144
+
145
+ /**
146
+ * Start the rollback operation for the theme.
147
+ */
148
+ private function start_rollback_theme() {
149
+ add_filter( 'update_theme_complete_actions', array( $this, 'alter_links_theme_upgrade' ) );
150
+ $rollback = $this->product->get_rollback();
151
+ $transient = get_site_transient( 'update_themes' );
152
+ $folder = $this->product->get_slug();
153
+ $version = $rollback['version'];
154
+ $temp_array = array(
155
+ 'new_version' => $version,
156
+ 'package' => $rollback['url'],
157
+ );
158
+
159
+ $transient->response[ $folder . '/style.css' ] = $temp_array;
160
+ set_site_transient( 'update_themes', $transient );
161
+
162
+ $transient = get_transient( $this->product->get_key() . '_warning_rollback' );
163
+
164
+ if ( false === $transient ) {
165
+ set_transient( $this->product->get_key() . '_warning_rollback', 'in progress', 30 );
166
+ require_once( ABSPATH . 'wp-admin/includes/class-wp-upgrader.php' );
167
+ $title = sprintf( apply_filters( $this->product->get_key() . '_rollback_message', 'Rolling back %s to v%s' ), $this->product->get_name(), $version );
168
+ $theme = $folder . '/style.css';
169
+ $nonce = 'upgrade-theme_' . $theme;
170
+ $url = 'update.php?action=upgrade-theme&theme=' . urlencode( $theme );
171
+
172
+ $upgrader = new Theme_Upgrader( new Theme_Upgrader_Skin( compact( 'title', 'nonce', 'url', 'theme' ) ) );
173
+ $upgrader->upgrade( $theme );
174
+ delete_transient( $this->product->get_key() . '_warning_rollback' );
175
+ wp_die(
176
+ '', $title, array(
177
+ 'response' => 200,
178
+ )
179
+ );
180
+ }
181
+ }
182
+
183
+ /**
184
+ * Start the rollback operation for the plugin.
185
+ */
186
+ private function start_rollback_plugin() {
187
+ $rollback = $this->product->get_rollback();
188
+ $plugin_transient = get_site_transient( 'update_plugins' );
189
+ $plugin_folder = $this->product->get_slug();
190
+ $plugin_file = $this->product->get_file();
191
+ $version = $rollback['version'];
192
+ $temp_array = array(
193
+ 'slug' => $plugin_folder,
194
+ 'new_version' => $version,
195
+ 'package' => $rollback['url'],
196
+ );
197
+
198
+ $temp_object = (object) $temp_array;
199
+ $plugin_transient->response[ $plugin_folder . '/' . $plugin_file ] = $temp_object;
200
+ set_site_transient( 'update_plugins', $plugin_transient );
201
+
202
+ $transient = get_transient( $this->product->get_key() . '_warning_rollback' );
203
+
204
+ if ( false === $transient ) {
205
+ set_transient( $this->product->get_key() . '_warning_rollback', 'in progress', 30 );
206
+ require_once( ABSPATH . 'wp-admin/includes/class-wp-upgrader.php' );
207
+ $title = sprintf( apply_filters( $this->product->get_key() . '_rollback_message', 'Rolling back %s to v%s' ), $this->product->get_name(), $version );
208
+ $plugin = $plugin_folder . '/' . $plugin_file;
209
+ $nonce = 'upgrade-plugin_' . $plugin;
210
+ $url = 'update.php?action=upgrade-plugin&plugin=' . urlencode( $plugin );
211
+ $upgrader_skin = new Plugin_Upgrader_Skin( compact( 'title', 'nonce', 'url', 'plugin' ) );
212
+ $upgrader = new Plugin_Upgrader( $upgrader_skin );
213
+ $upgrader->upgrade( $plugin );
214
+ delete_transient( $this->product->get_key() . '_warning_rollback' );
215
+ wp_die(
216
+ '', $title, array(
217
+ 'response' => 200,
218
+ )
219
+ );
220
+ }
221
+ }
222
+ }
223
+ endif;
vendor/codeinwp/themeisle-sdk/class-themeisle-sdk-widget-dashboard-blog.php ADDED
@@ -0,0 +1,412 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <?php
2
+ /**
3
+ * The blog dashboard model class for ThemeIsle SDK
4
+ *
5
+ * @package ThemeIsleSDK
6
+ * @subpackage Widgets
7
+ * @copyright Copyright (c) 2017, Marius Cristea
8
+ * @license http://opensource.org/licenses/gpl-3.0.php GNU Public License
9
+ * @since 1.0.0
10
+ */
11
+ // Exit if accessed directly.
12
+ if ( ! defined( 'ABSPATH' ) ) {
13
+ exit;
14
+ }
15
+ if ( ! class_exists( 'ThemeIsle_SDK_Widget_Dashboard_Blog' ) ) :
16
+ /**
17
+ * Blog dashboard widget model for ThemeIsle SDK.
18
+ */
19
+ class ThemeIsle_SDK_Widget_Dashboard_Blog extends ThemeIsle_SDK_Widget {
20
+
21
+ /**
22
+ * @var array instance The instances.
23
+ */
24
+ protected $product;
25
+ /**
26
+ * @var array Feed items.
27
+ */
28
+ private $items = array();
29
+
30
+ /**
31
+ * ThemeIsle_SDK_Widget_Dashboard_Blog constructor.
32
+ *
33
+ * @param ThemeIsle_SDK_Product $product_object The product object.
34
+ */
35
+ public function __construct( $product_object ) {
36
+ $this->product = $product_object;
37
+ parent::__construct( $product_object );
38
+ }
39
+
40
+ /**
41
+ * Registers the hooks
42
+ */
43
+ public function setup_hooks_child() {
44
+ $this->setup_vars();
45
+ add_action( 'wp_dashboard_setup', array( &$this, 'add_widget' ) );
46
+ add_action( 'wp_network_dashboard_setup', array( &$this, 'add_widget' ) );
47
+ add_filter( 'themeisle_sdk_recommend_plugin_or_theme', array( &$this, 'recommend_plugin_or_theme' ) );
48
+ }
49
+
50
+ /**
51
+ * Setup class variables
52
+ */
53
+ function setup_vars() {
54
+ $this->dashboard_name = apply_filters( 'themeisle_sdk_dashboard_widget_name', 'WordPress Guides/Tutorials' );
55
+ $this->feeds = apply_filters(
56
+ 'themeisle_sdk_dashboard_widget_feeds', array(
57
+ 'https://themeisle.com/blog/feed',
58
+ )
59
+ );
60
+ }
61
+
62
+ /**
63
+ * Add widget to the dashboard
64
+ *
65
+ * @return string|void
66
+ */
67
+ function add_widget() {
68
+ global $wp_meta_boxes;
69
+ if ( isset( $wp_meta_boxes['dashboard']['normal']['core']['themeisle'] ) ) {
70
+ return;
71
+ }
72
+ wp_add_dashboard_widget(
73
+ 'themeisle', $this->dashboard_name, array(
74
+ &$this,
75
+ 'render_dashboard_widget',
76
+ )
77
+ );
78
+ }
79
+
80
+ /**
81
+ * Setup feed items.
82
+ */
83
+ private function setup_feeds() {
84
+ $items_normalized = array();
85
+ if ( false === ( $items_normalized = get_transient( 'themeisle_sdk_feed_items' ) ) ) {
86
+ // Load SimplePie Instance
87
+ $feed = fetch_feed( $this->feeds );
88
+ // TODO report error when is an error loading the feed
89
+ if ( is_wp_error( $feed ) ) {
90
+ return;
91
+ }
92
+
93
+ $items = $feed->get_items( 0, 5 );
94
+ foreach ( (array) $items as $item ) {
95
+ $items_normalized[] = array(
96
+ 'title' => $item->get_title(),
97
+ 'date' => $item->get_date( 'U' ),
98
+ 'link' => $item->get_permalink(),
99
+ );
100
+ }
101
+ set_transient( 'themeisle_sdk_feed_items', $items_normalized, 48 * HOUR_IN_SECONDS );
102
+ }
103
+ $this->items = $items_normalized;
104
+ }
105
+
106
+ /**
107
+ * Render widget content
108
+ */
109
+ function render_dashboard_widget() {
110
+ $this->setup_feeds();
111
+ if ( empty( $this->items ) || ! is_array( $this->items ) ) {
112
+ return;
113
+ }
114
+ ?>
115
+ <style type="text/css">
116
+ #themeisle ul li.ti-dw-recommend-item {
117
+ padding-left: 7px;
118
+ border-top: 1px solid #eee;
119
+ margin-bottom: 0px;
120
+ padding-top: 6px;
121
+ }
122
+
123
+ #themeisle h2.hndle {
124
+ background-image: url('data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHZpZXdCb3g9IjAgMCA3Ny4xMiA3Ny4xMiI+PHRpdGxlPkFzc2V0IDM8L3RpdGxlPjxwYXRoIGQ9Ik03NS43Niw0Ny42cS0xLjUsNi40Ni00LjA3LDkuMjZBMzYuMjIsMzYuMjIsMCwwLDEsNjMuMjYsNjNhNTEsNTEsMCwwLDEtOS43OSw0LjZoLS4xNXY0LjgyQTQuNjYsNC42NiwwLDAsMSw1Miw3NS43Niw0LjA3LDQuMDcsMCwwLDEsNDksNzcuMTJhNCw0LDAsMCwxLTIuMTgtLjYxQTQuOTQsNC45NCwwLDAsMSw0NS4xOSw3NWE0LjQyLDQuNDIsMCwwLDEtNy41NCwwLDQuOTQsNC45NCwwLDAsMS0xLjU4LDEuNSwzLjc1LDMuNzUsMCwwLDEtMiwuNjFBNC4yNyw0LjI3LDAsMCwxLDMwLjI3LDc1YTQuOTQsNC45NCwwLDAsMS0xLjU4LDEuNSw0LDQsMCwwLDEtMi4xOC42MSwzLjkzLDMuOTMsMCwwLDEtMy4xNi0xLjQzLDUuMyw1LjMsMCwwLDEtMS4yMS0zLjU0LDEzLjgxLDEzLjgxLDAsMCwxLTguNTgsMywxMy4yMywxMy4yMywwLDAsMS05LTMuNDdBMTguMjEsMTguMjEsMCwwLDAsOSw3MC43OWExNC4yNiwxNC4yNiwwLDAsMS03LjgzLTUuNDIsMTYuMTIsMTYuMTIsMCwwLDAsNS4xOS4wNywxMi44OSwxMi44OSwwLDAsMCw0LjktMS43M1EzLjE1LDU1LjQzLDEuMDUsNTAuNDZhMTgsMTgsMCwwLDEtMS02LjkzQTQwLDQwLDAsMCwxLDEuMjEsMzQsMjYuNTksMjYuNTksMCwwLDEsNS4yNywyNC4xUTguNDQsMTkuNDMsMTMsMTkuNDNhMy40MSwzLjQxLDAsMCwxLDMuNDcsMi4yNmMuNi0uOCwxLjItMS41NiwxLjgxLTIuMjZsLjQ1LS40NS43NS0uNzUsMS4wNS0xLjgxYTM1LjIsMzUuMiwwLDAsMSwyLjExLTMuMzIsMjguNTcsMjguNTcsMCwwLDEsOS4xMi03LjY4QTIzLjQsMjMuNCwwLDAsMSw0Mi45MywyLjU2YTIyLjIyLDIyLjIyLDAsMCwxLDIuNzEuMTVBOC4xNiw4LjE2LDAsMCwxLDUxLjgxLDAsOC42OSw4LjY5LDAsMCwxLDU4LDIuNDFhMS41MSwxLjUxLDAsMCwxLC4xNS42OGMwLC4yNS0uNTUuOTMtMS42NiwybC0uMy4zYTkuNjksOS42OSwwLDAsMSwxLjU4LjgzYy41NS4zNS44My42NS44My45YTEuNjIsMS42MiwwLDAsMS0uNiwxbC0uMTUuMTVxNi43OCw2LDguNTgsMTYuMjdBMy4zLDMuMywwLDAsMSw2OSwyMy4zNWE2LjQ4LDYuNDgsMCwwLDEsNC4yMiwyLjFxMy45MiwzLjMyLDMuOTIsMTEuOUE0Mi4wNSw0Mi4wNSwwLDAsMSw3NS43Niw0Ny42Wk01My42Miw1NC4wN2EyNCwyNCwwLDAsMS0xNCw0LjUyQTIxLjQxLDIxLjQxLDAsMCwxLDI3LDU0LjY3LDI0LjI4LDI0LjI4LDAsMCwxLDE4LjUzLDQ1YTI5LDI5LDAsMCwxLTMtMTMsMzEuNzgsMzEuNzgsMCwwLDEsLjkxLTcuNTNBMzIuMTcsMzIuMTcsMCwwLDAsMTEuOSw0MS4yN2EzMy41LDMzLjUsMCwwLDAsMi43OSwxMy40LDI5LjEsMjkuMSwwLDAsMCw3LjksMTAuODUsNC42OCw0LjY4LDAsMCwxLDEuNjYtMS44OCw0LjE3LDQuMTcsMCwwLDEsNC40NC0uMDgsNC41LDQuNSwwLDAsMSwxLjU4LDEuNjZBNC4yLDQuMiwwLDAsMSwzNCw2M2EzLjgzLDMuODMsMCwwLDEsMiwuNiw0LjUsNC41LDAsMCwxLDEuNTgsMS42Niw0LjI3LDQuMjcsMCwwLDEsNy41NCwwLDQuNSw0LjUsMCwwLDEsMS41OC0xLjY2LDQuMTcsNC4xNywwLDAsMSw0LjQ0LjA4LDMuODYsMy44NiwwLDAsMSwxLjUxLDEuNzMsMzAuMTcsMzAuMTcsMCwwLDAsNy42OC05Ljk0LDMxLjE4LDMxLjE4LDAsMCwwLDMuMTYtMTIuMzVBMjguMzksMjguMzksMCwwLDEsNTMuNjIsNTQuMDdaTTI4Ljc3LDY1LjM3YTMuMSwzLjEsMCwwLDAtNC4zNywwLDMuMDYsMy4wNiwwLDAsMC0uOSwyLjI2djQuODJhMy4zMiwzLjMyLDAsMCwwLC45LDIuMzMsMi45MywyLjkzLDAsMCwwLDQuMzcsMCwzLjMyLDMuMzIsMCwwLDAsLjktMi4zM1Y2Ny42M0EzLjA2LDMuMDYsMCwwLDAsMjguNzcsNjUuMzdabS45LTQ4YTQuMjQsNC4yNCwwLDAsMCwzLjQ3LDEuNzMsNC40NSw0LjQ1LDAsMCwwLDMuNTQtMS43Myw2LDYsMCwwLDAsMS40My0zLjkyLDUuNyw1LjcsMCwwLDAtMS40My0zLjg0QTQuNTMsNC41MywwLDAsMCwzMy4xNCw4YTQuMzEsNC4zMSwwLDAsMC0zLjQ3LDEuNjYsNS43OSw1Ljc5LDAsMCwwLTEuMzUsMy43N0E2LjMzLDYuMzMsMCwwLDAsMjkuNjcsMTcuNFptNi40OCw0OGEzLjEsMy4xLDAsMCwwLTQuMzcsMCwzLjA2LDMuMDYsMCwwLDAtLjksMi4yNnY0LjgyYTMuMzIsMy4zMiwwLDAsMCwuOSwyLjMzLDIuOTMsMi45MywwLDAsMCw0LjM3LDAsMy4zMiwzLjMyLDAsMCwwLC45LTIuMzNWNjcuNjNBMy4wNiwzLjA2LDAsMCwwLDM2LjE1LDY1LjM3Wm0tNC4wNy01NC4zYTIuMzcsMi4zNywwLDAsMSwyLTEsMi4xNywyLjE3LDAsMCwxLDEuODgsMSw0LjEsNC4xLDAsMCwxLDAsNC41MiwyLjE3LDIuMTcsMCwwLDEtMS44OCwxLDIuMzcsMi4zNywwLDAsMS0yLTEsMy43MiwzLjcyLDAsMCwxLS43NS0yLjM0QTMuNDksMy40OSwwLDAsMSwzMi4wOCwxMS4wN1ptNSw5LjQxYTIwLjYxLDIwLjYxLDAsMCwwLTMuNTQsMTIuMjgsMTcuMTUsMTcuMTUsMCwwLDAsNC4wNywxMSwxMi40MywxMi40MywwLDAsMCw5Ljg3LDQuNDUsMTUuMywxNS4zLDAsMCwwLDktMywxMywxMywwLDAsMCwuNi0zLjMycTAtMy4zMi0zLjE2LTMuMzFhOC41OCw4LjU4LDAsMCwwLTIsLjNxLTcuODMsMS41LTExLjU5LS4zLTQuNTMtMi4xMi00LjUyLTkuMzRBMzcuOTIsMzcuOTIsMCwwLDEsMzcuMDUsMjAuNDhaTTYxLjQ1LDE3QTEyLjg0LDEyLjg0LDAsMCwwLDUxLjIxLDEyLjJhMTUuMTEsMTUuMTEsMCwwLDAtNi40LDEuNDMsMTcuODMsMTcuODMsMCwwLDAtNS41LDRxLTYuMTgsMjAuNjQsNi4xOCwyMC42NEEyNC43NSwyNC43NSwwLDAsMCw0OSwzNy44MWEzOC45MiwzOC45MiwwLDAsMSw0LjgyLS40NmMxLjgxLDAsMy4wNi40NiwzLjc3LDEuMzZxMS4zNSwxLjUuNzUsNS4xMmEyMS43MiwyMS43MiwwLDAsMCw1LTcuMTVBMjEuMzgsMjEuMzgsMCwwLDAsNjUuMDcsMjgsMTcuNDQsMTcuNDQsMCwwLDAsNjEuNDUsMTdaTTQzLjYsNjUuMzdhMi43MiwyLjcyLDAsMCwwLTIuMS0uOSwzLDMsMCwwLDAtMi4xOS45LDMuMDYsMy4wNiwwLDAsMC0uOSwyLjI2djQuODJhMy4zMiwzLjMyLDAsMCwwLC45LDIuMzMsMi44NCwyLjg0LDAsMCwwLDIuMTksMSwyLjYxLDIuNjEsMCwwLDAsMi4xLTEsMy40NSwzLjQ1LDAsMCwwLC44My0yLjMzVjY3LjYzQTMuMTcsMy4xNywwLDAsMCw0My42LDY1LjM3Wm03LjQ2LDBhMywzLDAsMCwwLTIuMTgtLjksMi43MywyLjczLDAsMCwwLTIuMTEuOSwzLjE3LDMuMTcsMCwwLDAtLjgzLDIuMjZ2NC44MmEzLjQ1LDMuNDUsMCwwLDAsLjgzLDIuMzMsMi42MSwyLjYxLDAsMCwwLDIuMTEsMSwyLjgzLDIuODMsMCwwLDAsMi4xOC0xLDMuMzIsMy4zMiwwLDAsMCwuOS0yLjMzVjY3LjYzQTMuMDYsMy4wNiwwLDAsMCw1MS4wNiw2NS4zN1oiLz48L3N2Zz4=');
125
+ background-repeat: no-repeat;
126
+ background-position: 92% 50%;
127
+ background-size: 30px;
128
+ }
129
+
130
+ #themeisle .inside {
131
+ padding: 0;
132
+ }
133
+
134
+ .ti-feed-list {
135
+ padding: 0 12px 5px;
136
+ margin-bottom: 10px;
137
+ border-bottom: 1px solid #eee;
138
+ }
139
+
140
+ .ti-dw-feed-item a {
141
+ display: flex;
142
+ align-items: center;
143
+ margin-bottom: 5px;
144
+ padding: 5px;
145
+ transition: .2s ease;
146
+ border-radius: 3px;
147
+ }
148
+
149
+ .ti-dw-feed-item a:hover {
150
+ background-color: #f8f8f8;
151
+ }
152
+
153
+ .ti-dw-feed-item a:hover .ti-dw-date-container {
154
+ opacity: .9;
155
+ }
156
+
157
+ .ti-dw-feed-item .ti-dw-month-container {
158
+ margin-top: -5px;
159
+ text-transform: uppercase;
160
+ font-size: 10px;
161
+ letter-spacing: 1px;
162
+ font-weight: 700;
163
+ }
164
+
165
+ .ti-dw-feed-item .ti-dw-date-container {
166
+ border-radius: 3px;
167
+ transition: .2s ease;
168
+ min-height: 35px;
169
+ margin-right: 5px;
170
+ min-width: 35px;
171
+ text-align: center;
172
+ border: 1px solid #2a6f97;
173
+ color: #fff;
174
+ background: #2ea2cc;
175
+ display: flex;
176
+ flex-direction: column;
177
+ justify-content: center;
178
+ }
179
+
180
+ .ti-dw-footer {
181
+ padding: 0 12px 5px;
182
+ text-align: center;
183
+ }
184
+
185
+ .ti-dw-recommend-item {
186
+ display: block;
187
+ }
188
+
189
+ .ti-dw-recommend-item span {
190
+ color: #72777c;
191
+ }
192
+
193
+ .ti-dw-powered-by {
194
+ font-size: 11px;
195
+ margin-top: 3px;
196
+ display: block;
197
+ color: #72777c;
198
+ }
199
+
200
+ .ti-dw-powered-by span {
201
+ font-weight: 600;
202
+ }
203
+
204
+ </style>
205
+ <ul class="ti-feed-list">
206
+ <?php
207
+ foreach ( $this->items as $item ) {
208
+ ?>
209
+ <li class="ti-dw-feed-item">
210
+ <a href="
211
+ <?php
212
+ echo add_query_arg(
213
+ array(
214
+ 'utm_campaign' => 'feed',
215
+ 'utm_medium' => 'dashboard_widget',
216
+ ), $item['link']
217
+ );
218
+ ?>
219
+ " target="_blank">
220
+ <span class="ti-dw-date-container"><span
221
+ class="ti-dw-day-container"><?php echo date( 'd', $item['date'] ); ?></span> <span
222
+ class="ti-dw-month-container"><?php echo substr( date( 'M', $item['date'] ), 0, 3 ); ?></span></span><?php echo $item['title']; ?>
223
+ </a>
224
+ </li>
225
+ <?php
226
+ }
227
+ ?>
228
+ </ul>
229
+ <?php
230
+ $recommend = apply_filters( 'themeisle_sdk_recommend_plugin_or_theme', array() );
231
+ if ( is_array( $recommend ) && ! empty( $recommend ) ) {
232
+
233
+ $type = $recommend['type'];
234
+ if ( ( $type == 'theme' && current_user_can( 'install_themes' ) ) || ( $type == 'plugin' && current_user_can( 'install_plugins' ) ) ) {
235
+ add_thickbox();
236
+ $url = add_query_arg(
237
+ array(
238
+ 'theme' => $recommend['slug'],
239
+ ), network_admin_url( 'theme-install.php' )
240
+ );
241
+
242
+ if ( 'plugin' === $type ) {
243
+
244
+ $url = add_query_arg(
245
+ array(
246
+ 'tab' => 'plugin-information',
247
+ 'plugin' => $recommend['slug'],
248
+ ), network_admin_url( 'plugin-install.php' )
249
+ );
250
+ }
251
+ ?>
252
+ <div class="ti-dw-footer">
253
+ <span class="ti-dw-recommend-item ">
254
+ <span class="ti-dw-recommend"><?php echo apply_filters( 'themeisle_sdk_dashboard_popular_label', sprintf( 'Popular %s', ucwords( $type ) ) ); ?>
255
+ : </span>
256
+ <?php
257
+ echo trim(
258
+ str_replace(
259
+ array(
260
+ 'lite',
261
+ 'Lite',
262
+ ), '', $recommend['name']
263
+ )
264
+ );
265
+ ?>
266
+ (<a class="thickbox open-plugin-details-modal"
267
+ href="<?php echo $url . '&TB_iframe=true&width=600&height=500'; ?>"><?php echo apply_filters( 'themeisle_sdk_dashboard_install_label', 'Install' ); ?></a>)
268
+ </span>
269
+ <span class="ti-dw-powered-by">
270
+ Powered by <span><?php echo esc_attr( $this->product->get_friendly_name() ); ?></span>
271
+ </span>
272
+ </div>
273
+
274
+ <?php
275
+ }
276
+ }
277
+ ?>
278
+
279
+ <?php
280
+
281
+ }
282
+
283
+ /**
284
+ * Either the current product is installed or not.
285
+ *
286
+ * @param array $val The current recommended product.
287
+ *
288
+ * @return bool Either we should exclude the plugin or not.
289
+ */
290
+ public function remove_current_products( $val ) {
291
+ if ( $val['type'] === 'theme' ) {
292
+ $exist = wp_get_theme( $val['slug'] );
293
+
294
+ return ! $exist->exists();
295
+ } else {
296
+ $all_plugins = array_keys( get_plugins() );
297
+ foreach ( $all_plugins as $slug ) {
298
+ if ( strpos( $slug, $val['slug'] ) !== false ) {
299
+ return false;
300
+ }
301
+ }
302
+
303
+ return true;
304
+ }
305
+ }
306
+
307
+ /**
308
+ * Fetch themes from wporg api.
309
+ *
310
+ * @param string $author The author name.
311
+ *
312
+ * @return array The list of themes.
313
+ */
314
+ function get_themes_from_wporg( $author ) {
315
+ $products = wp_remote_get(
316
+ 'https://api.wordpress.org/themes/info/1.1/?action=query_themes&request[author]=' . $author . '&request[per_page]=30&request[fields][active_installs]=true'
317
+ );
318
+ $products = json_decode( wp_remote_retrieve_body( $products ) );
319
+ if ( is_object( $products ) ) {
320
+ $products = isset( $products->themes ) ? $products->themes : array();
321
+ } else {
322
+ $products = array();
323
+ }
324
+
325
+ return $products;
326
+ }
327
+
328
+ /**
329
+ * Fetch plugin from wporg api.
330
+ *
331
+ * @param string $author The author slug.
332
+ *
333
+ * @return array The list of plugins for the selected author.
334
+ */
335
+ function get_plugins_from_wporg( $author ) {
336
+ $products = wp_remote_get(
337
+ 'https://api.wordpress.org/plugins/info/1.1/?action=query_plugins&request[author]=' . $author . '&request[author]=codeinwp&request[per_page]=20&request[fields][active_installs]=true'
338
+ );
339
+ $products = json_decode( wp_remote_retrieve_body( $products ) );
340
+ if ( is_object( $products ) ) {
341
+ $products = isset( $products->plugins ) ? $products->plugins : array();
342
+ } else {
343
+ $products = array();
344
+ }
345
+
346
+ return $products;
347
+ }
348
+
349
+ /**
350
+ * Fetch products from the recomended section.
351
+ *
352
+ * @return array|mixed The list of products to use in recomended section.
353
+ */
354
+ function get_product_from_api() {
355
+ if ( false === ( $products = get_transient( 'themeisle_sdk_products' ) ) ) {
356
+ $products = array();
357
+ $themeisle_themes = $this->get_themes_from_wporg( 'themeisle' );
358
+ $codeinwp_themes = $this->get_themes_from_wporg( 'codeinwp' );
359
+
360
+ $themeisle_plugins = $this->get_plugins_from_wporg( 'themeisle' );
361
+ $codeinwp_plugins = $this->get_plugins_from_wporg( 'codeinwp' );
362
+
363
+ $all_themes = array_merge( $themeisle_themes, $codeinwp_themes );
364
+ foreach ( $all_themes as $theme ) {
365
+ if ( $theme->active_installs < 4999 ) {
366
+ continue;
367
+ }
368
+ $products[] = array(
369
+ 'name' => $theme->name,
370
+ 'type' => 'theme',
371
+ 'slug' => $theme->slug,
372
+ 'installs' => $theme->active_installs,
373
+ );
374
+ }
375
+ $all_plugins = array_merge( $themeisle_plugins, $codeinwp_plugins );
376
+ foreach ( $all_plugins as $plugin ) {
377
+ if ( $plugin->active_installs < 5999 ) {
378
+ continue;
379
+ }
380
+ $products[] = array(
381
+ 'name' => $plugin->name,
382
+ 'type' => 'plugin',
383
+ 'slug' => $plugin->slug,
384
+ 'installs' => $plugin->active_installs,
385
+ );
386
+ }
387
+ set_transient( 'themeisle_sdk_products', $products, 6 * HOUR_IN_SECONDS );
388
+ }
389
+
390
+ return $products;
391
+ }
392
+
393
+ /**
394
+ * Contact the API and fetch the recommended plugins/themes
395
+ */
396
+ function recommend_plugin_or_theme() {
397
+ $products = $this->get_product_from_api();
398
+ if ( ! is_array( $products ) ) {
399
+ $products = array();
400
+ }
401
+ $products = array_filter( $products, array( $this, 'remove_current_products' ) );
402
+ $products = array_merge( $products );
403
+ if ( count( $products ) > 1 ) {
404
+ shuffle( $products );
405
+ $products = array_slice( $products, 0, 1 );
406
+ }
407
+ $to_recommend = isset( $products[0] ) ? $products[0] : $products;
408
+
409
+ return $to_recommend;
410
+ }
411
+ }
412
+ endif;
vendor/codeinwp/themeisle-sdk/class-themeisle-sdk-widget.php ADDED
@@ -0,0 +1,50 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <?php
2
+ /**
3
+ * The widget model class for ThemeIsle SDK
4
+ *
5
+ * @package ThemeIsleSDK
6
+ * @subpackage Widgets
7
+ * @copyright Copyright (c) 2017, Marius Cristea
8
+ * @license http://opensource.org/licenses/gpl-3.0.php GNU Public License
9
+ * @since 1.0.0
10
+ */
11
+ // Exit if accessed directly.
12
+ if ( ! defined( 'ABSPATH' ) ) {
13
+ exit;
14
+ }
15
+ if ( ! class_exists( 'ThemeIsle_SDK_Widget' ) ) :
16
+ /**
17
+ * Widget model for ThemeIsle SDK.
18
+ */
19
+ abstract class ThemeIsle_SDK_Widget {
20
+ /**
21
+ * @var ThemeIsle_SDK_Product $product Themeisle Product.
22
+ */
23
+ protected $product;
24
+
25
+ /**
26
+ * ThemeIsle_SDK_Widget constructor.
27
+ *
28
+ * @param ThemeIsle_SDK_Product $product_object Product Object.
29
+ */
30
+ public function __construct( $product_object ) {
31
+ if ( $product_object instanceof ThemeIsle_SDK_Product ) {
32
+ $this->product = $product_object;
33
+ }
34
+ $this->setup_hooks();
35
+ }
36
+
37
+ /**
38
+ * Registers the hooks and then delegates to the child
39
+ */
40
+ public function setup_hooks() {
41
+ $this->setup_hooks_child();
42
+ }
43
+
44
+ /**
45
+ * Abstract function for delegating to the child
46
+ */
47
+ protected abstract function setup_hooks_child();
48
+
49
+ }
50
+ endif;
vendor/codeinwp/themeisle-sdk/class-themeisle-sdk-widgets-factory.php ADDED
@@ -0,0 +1,37 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <?php
2
+ /**
3
+ * The widgets factory class for ThemeIsle SDK
4
+ *
5
+ * @package ThemeIsleSDK
6
+ * @subpackage Widgets
7
+ * @copyright Copyright (c) 2017, Marius Cristea
8
+ * @license http://opensource.org/licenses/gpl-3.0.php GNU Public License
9
+ * @since 1.0.0
10
+ */
11
+ // Exit if accessed directly.
12
+ if ( ! defined( 'ABSPATH' ) ) {
13
+ exit;
14
+ }
15
+ if ( ! class_exists( 'ThemeIsle_SDK_Widgets_Factory' ) ) :
16
+ /**
17
+ * Widgets factory model for ThemeIsle SDK.
18
+ */
19
+ class ThemeIsle_SDK_Widgets_Factory {
20
+
21
+ /**
22
+ * ThemeIsle_SDK_Widgets_Factory constructor.
23
+ *
24
+ * @param ThemeIsle_SDK_Product $product_object Product Object.
25
+ * @param array $widgets the widgets.
26
+ */
27
+ public function __construct( $product_object, $widgets ) {
28
+ if ( $product_object instanceof ThemeIsle_SDK_Product && $widgets && is_array( $widgets ) ) {
29
+ foreach ( $widgets as $widget ) {
30
+ $class = 'ThemeIsle_SDK_Widget_' . str_replace( ' ', '_', ucwords( str_replace( '_', ' ', $widget ) ) );
31
+ $instance = new $class( $product_object );
32
+ $instance->setup_hooks();
33
+ }
34
+ }
35
+ }
36
+ }
37
+ endif;
vendor/codeinwp/themeisle-sdk/composer.json ADDED
@@ -0,0 +1,24 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ {
2
+ "name": "codeinwp/themeisle-sdk",
3
+ "description": "ThemeIsle SDK ",
4
+ "keywords": [
5
+ "wordpress"
6
+ ],
7
+ "homepage": "https://github.com/Codeinwp/themeisle-sdk",
8
+ "license": "GPL-2.0+",
9
+ "authors": [
10
+ {
11
+ "name": "ThemeIsle team",
12
+ "email": "friends@themeisle.com",
13
+ "homepage": "https://themeisle.com"
14
+ }
15
+ ],
16
+ "autoload": {
17
+ "files": [
18
+ "load.php"
19
+ ]
20
+ },
21
+ "support": {
22
+ "issues": "https://github.com/Codeinwp/themeisle-sdk/issues"
23
+ }
24
+ }
vendor/codeinwp/themeisle-sdk/index.php ADDED
@@ -0,0 +1,5 @@
 
 
 
 
 
1
+ <?php
2
+ /**
3
+ * @package ThemeIsleSDK
4
+ * Ignore this.
5
+ */
vendor/codeinwp/themeisle-sdk/load.php ADDED
@@ -0,0 +1,35 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <?php
2
+ /**
3
+ * Loader for the ThemeIsleSDK
4
+ *
5
+ * Logic for loading always the latest SDK from the installed themes/plugins.
6
+ *
7
+ * @package ThemeIsleSDK
8
+ * @copyright Copyright (c) 2017, Marius Cristea
9
+ * @license http://opensource.org/licenses/gpl-2.0.php GNU Public License
10
+ * @since 1.1.0
11
+ */
12
+
13
+ // Current SDK version and path.
14
+ $themeisle_sdk_version = '2.2.7';
15
+ $themeisle_sdk_path = dirname( __FILE__ );
16
+
17
+ global $themeisle_sdk_max_version;
18
+ global $themeisle_sdk_max_path;
19
+
20
+ if ( version_compare( $themeisle_sdk_version, $themeisle_sdk_max_version ) >= 0 ) {
21
+ $themeisle_sdk_max_version = $themeisle_sdk_version;
22
+ $themeisle_sdk_max_path = $themeisle_sdk_path;
23
+ }
24
+
25
+ // load the latest sdk version from the active Themeisle products
26
+ if ( ! function_exists( 'themeisle_sdk_load_latest' ) ) :
27
+ /**
28
+ * Always load the latest sdk version.
29
+ */
30
+ function themeisle_sdk_load_latest() {
31
+ global $themeisle_sdk_max_path;
32
+ require_once $themeisle_sdk_max_path . '/start.php';
33
+ }
34
+ endif;
35
+ add_action( 'init', 'themeisle_sdk_load_latest' );
vendor/codeinwp/themeisle-sdk/start.php ADDED
@@ -0,0 +1,38 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <?php
2
+ /**
3
+ * File responsible for sdk files loading.
4
+ *
5
+ * @package ThemeIsleSDK
6
+ * @copyright Copyright (c) 2017, Marius Cristea
7
+ * @license http://opensource.org/licenses/gpl-2.0.php GNU Public License
8
+ * @since 1.1.0
9
+ */
10
+ $products = apply_filters( 'themeisle_sdk_products', array() );
11
+ $path = dirname( __FILE__ );
12
+ $files_to_load = array(
13
+ 'class-themeisle-sdk-loader.php',
14
+ 'class-themeisle-sdk-product.php',
15
+ 'class-themeisle-sdk-logger.php',
16
+ 'class-themeisle-sdk-licenser.php',
17
+ 'class-themeisle-sdk-rollback.php',
18
+ 'class-themeisle-sdk-feedback-factory.php',
19
+ 'class-themeisle-sdk-feedback.php',
20
+ 'class-themeisle-sdk-feedback-deactivate.php',
21
+ 'class-themeisle-sdk-feedback-review.php',
22
+ 'class-themeisle-sdk-feedback-translate.php',
23
+ 'class-themeisle-sdk-notification-manager.php',
24
+ 'class-themeisle-sdk-widget.php',
25
+ 'class-themeisle-sdk-widget-dashboard-blog.php',
26
+ 'class-themeisle-sdk-widgets-factory.php',
27
+ 'class-themeisle-sdk-endpoints.php',
28
+ );
29
+
30
+ foreach ( $files_to_load as $file ) {
31
+ $file_path = $path . '/' . $file;
32
+ if ( is_readable( $file_path ) ) {
33
+ require_once $file_path;
34
+ }
35
+ }
36
+ foreach ( $products as $product ) {
37
+ ThemeIsle_SDK_Loader::init_product( $product );
38
+ }
vendor/composer/ClassLoader.php ADDED
@@ -0,0 +1,413 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <?php
2
+
3
+ /*
4
+ * This file is part of Composer.
5
+ *
6
+ * (c) Nils Adermann <naderman@naderman.de>
7
+ * Jordi Boggiano <j.boggiano@seld.be>
8
+ *
9
+ * For the full copyright and license information, please view the LICENSE
10
+ * file that was distributed with this source code.
11
+ */
12
+
13
+ namespace Composer\Autoload;
14
+
15
+ /**
16
+ * ClassLoader implements a PSR-0, PSR-4 and classmap class loader.
17
+ *
18
+ * $loader = new \Composer\Autoload\ClassLoader();
19
+ *
20
+ * // register classes with namespaces
21
+ * $loader->add('Symfony\Component', __DIR__.'/component');
22
+ * $loader->add('Symfony', __DIR__.'/framework');
23
+ *
24
+ * // activate the autoloader
25
+ * $loader->register();
26
+ *
27
+ * // to enable searching the include path (eg. for PEAR packages)
28
+ * $loader->setUseIncludePath(true);
29
+ *
30
+ * In this example, if you try to use a class in the Symfony\Component
31
+ * namespace or one of its children (Symfony\Component\Console for instance),
32
+ * the autoloader will first look for the class under the component/
33
+ * directory, and it will then fallback to the framework/ directory if not
34
+ * found before giving up.
35
+ *
36
+ * This class is loosely based on the Symfony UniversalClassLoader.
37
+ *
38
+ * @author Fabien Potencier <fabien@symfony.com>
39
+ * @author Jordi Boggiano <j.boggiano@seld.be>
40
+ * @see http://www.php-fig.org/psr/psr-0/
41
+ * @see http://www.php-fig.org/psr/psr-4/
42
+ */
43
+ class ClassLoader
44
+ {
45
+ // PSR-4
46
+ private $prefixLengthsPsr4 = array();
47
+ private $prefixDirsPsr4 = array();
48
+ private $fallbackDirsPsr4 = array();
49
+
50
+ // PSR-0
51
+ private $prefixesPsr0 = array();
52
+ private $fallbackDirsPsr0 = array();
53
+
54
+ private $useIncludePath = false;
55
+ private $classMap = array();
56
+
57
+ private $classMapAuthoritative = false;
58
+
59
+ public function getPrefixes()
60
+ {
61
+ if (!empty($this->prefixesPsr0)) {
62
+ return call_user_func_array('array_merge', $this->prefixesPsr0);
63
+ }
64
+
65
+ return array();
66
+ }
67
+
68
+ public function getPrefixesPsr4()
69
+ {
70
+ return $this->prefixDirsPsr4;
71
+ }
72
+
73
+ public function getFallbackDirs()
74
+ {
75
+ return $this->fallbackDirsPsr0;
76
+ }
77
+
78
+ public function getFallbackDirsPsr4()
79
+ {
80
+ return $this->fallbackDirsPsr4;
81
+ }
82
+
83
+ public function getClassMap()
84
+ {
85
+ return $this->classMap;
86
+ }
87
+
88
+ /**
89
+ * @param array $classMap Class to filename map
90
+ */
91
+ public function addClassMap(array $classMap)
92
+ {
93
+ if ($this->classMap) {
94
+ $this->classMap = array_merge($this->classMap, $classMap);
95
+ } else {
96
+ $this->classMap = $classMap;
97
+ }
98
+ }
99
+
100
+ /**
101
+ * Registers a set of PSR-0 directories for a given prefix, either
102
+ * appending or prepending to the ones previously set for this prefix.
103
+ *
104
+ * @param string $prefix The prefix
105
+ * @param array|string $paths The PSR-0 root directories
106
+ * @param bool $prepend Whether to prepend the directories
107
+ */
108
+ public function add($prefix, $paths, $prepend = false)
109
+ {
110
+ if (!$prefix) {
111
+ if ($prepend) {
112
+ $this->fallbackDirsPsr0 = array_merge(
113
+ (array) $paths,
114
+ $this->fallbackDirsPsr0
115
+ );
116
+ } else {
117
+ $this->fallbackDirsPsr0 = array_merge(
118
+ $this->fallbackDirsPsr0,
119
+ (array) $paths
120
+ );
121
+ }
122
+
123
+ return;
124
+ }
125
+
126
+ $first = $prefix[0];
127
+ if (!isset($this->prefixesPsr0[$first][$prefix])) {
128
+ $this->prefixesPsr0[$first][$prefix] = (array) $paths;
129
+
130
+ return;
131
+ }
132
+ if ($prepend) {
133
+ $this->prefixesPsr0[$first][$prefix] = array_merge(
134
+ (array) $paths,
135
+ $this->prefixesPsr0[$first][$prefix]
136
+ );
137
+ } else {
138
+ $this->prefixesPsr0[$first][$prefix] = array_merge(
139
+ $this->prefixesPsr0[$first][$prefix],
140
+ (array) $paths
141
+ );
142
+ }
143
+ }
144
+
145
+ /**
146
+ * Registers a set of PSR-4 directories for a given namespace, either
147
+ * appending or prepending to the ones previously set for this namespace.
148
+ *
149
+ * @param string $prefix The prefix/namespace, with trailing '\\'
150
+ * @param array|string $paths The PSR-4 base directories
151
+ * @param bool $prepend Whether to prepend the directories
152
+ *
153
+ * @throws \InvalidArgumentException
154
+ */
155
+ public function addPsr4($prefix, $paths, $prepend = false)
156
+ {
157
+ if (!$prefix) {
158
+ // Register directories for the root namespace.
159
+ if ($prepend) {
160
+ $this->fallbackDirsPsr4 = array_merge(
161
+ (array) $paths,
162
+ $this->fallbackDirsPsr4
163
+ );
164
+ } else {
165
+ $this->fallbackDirsPsr4 = array_merge(
166
+ $this->fallbackDirsPsr4,
167
+ (array) $paths
168
+ );
169
+ }
170
+ } elseif (!isset($this->prefixDirsPsr4[$prefix])) {
171
+ // Register directories for a new namespace.
172
+ $length = strlen($prefix);
173
+ if ('\\' !== $prefix[$length - 1]) {
174
+ throw new \InvalidArgumentException("A non-empty PSR-4 prefix must end with a namespace separator.");
175
+ }
176
+ $this->prefixLengthsPsr4[$prefix[0]][$prefix] = $length;
177
+ $this->prefixDirsPsr4[$prefix] = (array) $paths;
178
+ } elseif ($prepend) {
179
+ // Prepend directories for an already registered namespace.
180
+ $this->prefixDirsPsr4[$prefix] = array_merge(
181
+ (array) $paths,
182
+ $this->prefixDirsPsr4[$prefix]
183
+ );
184
+ } else {
185
+ // Append directories for an already registered namespace.
186
+ $this->prefixDirsPsr4[$prefix] = array_merge(
187
+ $this->prefixDirsPsr4[$prefix],
188
+ (array) $paths
189
+ );
190
+ }
191
+ }
192
+
193
+ /**
194
+ * Registers a set of PSR-0 directories for a given prefix,
195
+ * replacing any others previously set for this prefix.
196
+ *
197
+ * @param string $prefix The prefix
198
+ * @param array|string $paths The PSR-0 base directories
199
+ */
200
+ public function set($prefix, $paths)
201
+ {
202
+ if (!$prefix) {
203
+ $this->fallbackDirsPsr0 = (array) $paths;
204
+ } else {
205
+ $this->prefixesPsr0[$prefix[0]][$prefix] = (array) $paths;
206
+ }
207
+ }
208
+
209
+ /**
210
+ * Registers a set of PSR-4 directories for a given namespace,
211
+ * replacing any others previously set for this namespace.
212
+ *
213
+ * @param string $prefix The prefix/namespace, with trailing '\\'
214
+ * @param array|string $paths The PSR-4 base directories
215
+ *
216
+ * @throws \InvalidArgumentException
217
+ */
218
+ public function setPsr4($prefix, $paths)
219
+ {
220
+ if (!$prefix) {
221
+ $this->fallbackDirsPsr4 = (array) $paths;
222
+ } else {
223
+ $length = strlen($prefix);
224
+ if ('\\' !== $prefix[$length - 1]) {
225
+ throw new \InvalidArgumentException("A non-empty PSR-4 prefix must end with a namespace separator.");
226
+ }
227
+ $this->prefixLengthsPsr4[$prefix[0]][$prefix] = $length;
228
+ $this->prefixDirsPsr4[$prefix] = (array) $paths;
229
+ }
230
+ }
231
+
232
+ /**
233
+ * Turns on searching the include path for class files.
234
+ *
235
+ * @param bool $useIncludePath
236
+ */
237
+ public function setUseIncludePath($useIncludePath)
238
+ {
239
+ $this->useIncludePath = $useIncludePath;
240
+ }
241
+
242
+ /**
243
+ * Can be used to check if the autoloader uses the include path to check
244
+ * for classes.
245
+ *
246
+ * @return bool
247
+ */
248
+ public function getUseIncludePath()
249
+ {
250
+ return $this->useIncludePath;
251
+ }
252
+
253
+ /**
254
+ * Turns off searching the prefix and fallback directories for classes
255
+ * that have not been registered with the class map.
256
+ *
257
+ * @param bool $classMapAuthoritative
258
+ */
259
+ public function setClassMapAuthoritative($classMapAuthoritative)
260
+ {
261
+ $this->classMapAuthoritative = $classMapAuthoritative;
262
+ }
263
+
264
+ /**
265
+ * Should class lookup fail if not found in the current class map?
266
+ *
267
+ * @return bool
268
+ */
269
+ public function isClassMapAuthoritative()
270
+ {
271
+ return $this->classMapAuthoritative;
272
+ }
273
+
274
+ /**
275
+ * Registers this instance as an autoloader.
276
+ *
277
+ * @param bool $prepend Whether to prepend the autoloader or not
278
+ */
279
+ public function register($prepend = false)
280
+ {
281
+ spl_autoload_register(array($this, 'loadClass'), true, $prepend);
282
+ }
283
+
284
+ /**
285
+ * Unregisters this instance as an autoloader.
286
+ */
287
+ public function unregister()
288
+ {
289
+ spl_autoload_unregister(array($this, 'loadClass'));
290
+ }
291
+
292
+ /**
293
+ * Loads the given class or interface.
294
+ *
295
+ * @param string $class The name of the class
296
+ * @return bool|null True if loaded, null otherwise
297
+ */
298
+ public function loadClass($class)
299
+ {
300
+ if ($file = $this->findFile($class)) {
301
+ includeFile($file);
302
+
303
+ return true;
304
+ }
305
+ }
306
+
307
+ /**
308
+ * Finds the path to the file where the class is defined.
309
+ *
310
+ * @param string $class The name of the class
311
+ *
312
+ * @return string|false The path if found, false otherwise
313
+ */
314
+ public function findFile($class)
315
+ {
316
+ // work around for PHP 5.3.0 - 5.3.2 https://bugs.php.net/50731
317
+ if ('\\' == $class[0]) {
318
+ $class = substr($class, 1);
319
+ }
320
+
321
+ // class map lookup
322
+ if (isset($this->classMap[$class])) {
323
+ return $this->classMap[$class];
324
+ }
325
+ if ($this->classMapAuthoritative) {
326
+ return false;
327
+ }
328
+
329
+ $file = $this->findFileWithExtension($class, '.php');
330
+
331
+ // Search for Hack files if we are running on HHVM
332
+ if ($file === null && defined('HHVM_VERSION')) {
333
+ $file = $this->findFileWithExtension($class, '.hh');
334
+ }
335
+
336
+ if ($file === null) {
337
+ // Remember that this class does not exist.
338
+ return $this->classMap[$class] = false;
339
+ }
340
+
341
+ return $file;
342
+ }
343
+
344
+ private function findFileWithExtension($class, $ext)
345
+ {
346
+ // PSR-4 lookup
347
+ $logicalPathPsr4 = strtr($class, '\\', DIRECTORY_SEPARATOR) . $ext;
348
+
349
+ $first = $class[0];
350
+ if (isset($this->prefixLengthsPsr4[$first])) {
351
+ foreach ($this->prefixLengthsPsr4[$first] as $prefix => $length) {
352
+ if (0 === strpos($class, $prefix)) {
353
+ foreach ($this->prefixDirsPsr4[$prefix] as $dir) {
354
+ if (file_exists($file = $dir . DIRECTORY_SEPARATOR . substr($logicalPathPsr4, $length))) {
355
+ return $file;
356
+ }
357
+ }
358
+ }
359
+ }
360
+ }
361
+
362
+ // PSR-4 fallback dirs
363
+ foreach ($this->fallbackDirsPsr4 as $dir) {
364
+ if (file_exists($file = $dir . DIRECTORY_SEPARATOR . $logicalPathPsr4)) {
365
+ return $file;
366
+ }
367
+ }
368
+
369
+ // PSR-0 lookup
370
+ if (false !== $pos = strrpos($class, '\\')) {
371
+ // namespaced class name
372
+ $logicalPathPsr0 = substr($logicalPathPsr4, 0, $pos + 1)
373
+ . strtr(substr($logicalPathPsr4, $pos + 1), '_', DIRECTORY_SEPARATOR);
374
+ } else {
375
+ // PEAR-like class name
376
+ $logicalPathPsr0 = strtr($class, '_', DIRECTORY_SEPARATOR) . $ext;
377
+ }
378
+
379
+ if (isset($this->prefixesPsr0[$first])) {
380
+ foreach ($this->prefixesPsr0[$first] as $prefix => $dirs) {
381
+ if (0 === strpos($class, $prefix)) {
382
+ foreach ($dirs as $dir) {
383
+ if (file_exists($file = $dir . DIRECTORY_SEPARATOR . $logicalPathPsr0)) {
384
+ return $file;
385
+ }
386
+ }
387
+ }
388
+ }
389
+ }
390
+
391
+ // PSR-0 fallback dirs
392
+ foreach ($this->fallbackDirsPsr0 as $dir) {
393
+ if (file_exists($file = $dir . DIRECTORY_SEPARATOR . $logicalPathPsr0)) {
394
+ return $file;
395
+ }
396
+ }
397
+
398
+ // PSR-0 include paths.
399
+ if ($this->useIncludePath && $file = stream_resolve_include_path($logicalPathPsr0)) {
400
+ return $file;
401
+ }
402
+ }
403
+ }
404
+
405
+ /**
406
+ * Scope isolated include.
407
+ *
408
+ * Prevents access to $this/self from included files.
409
+ */
410
+ function includeFile($file)
411
+ {
412
+ include $file;
413
+ }
vendor/composer/LICENSE ADDED
@@ -0,0 +1,21 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+
2
+ Copyright (c) 2016 Nils Adermann, Jordi Boggiano
3
+
4
+ Permission is hereby granted, free of charge, to any person obtaining a copy
5
+ of this software and associated documentation files (the "Software"), to deal
6
+ in the Software without restriction, including without limitation the rights
7
+ to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
8
+ copies of the Software, and to permit persons to whom the Software is furnished
9
+ to do so, subject to the following conditions:
10
+
11
+ The above copyright notice and this permission notice shall be included in all
12
+ copies or substantial portions of the Software.
13
+
14
+ THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
15
+ IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
16
+ FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
17
+ AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
18
+ LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
19
+ OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
20
+ THE SOFTWARE.
21
+
vendor/composer/autoload_classmap.php ADDED
@@ -0,0 +1,9 @@
 
 
 
 
 
 
 
 
 
1
+ <?php
2
+
3
+ // autoload_classmap.php @generated by Composer
4
+
5
+ $vendorDir = dirname(dirname(__FILE__));
6
+ $baseDir = dirname($vendorDir);
7
+
8
+ return array(
9
+ );
vendor/composer/autoload_files.php ADDED
@@ -0,0 +1,10 @@
 
 
 
 
 
 
 
 
 
 
1
+ <?php
2
+
3
+ // autoload_files.php @generated by Composer
4
+
5
+ $vendorDir = dirname(dirname(__FILE__));
6
+ $baseDir = dirname($vendorDir);
7
+
8
+ return array(
9
+ '957c51f8f334b5ea3be310bfb8b3492c' => $vendorDir . '/codeinwp/themeisle-sdk/load.php',
10
+ );
vendor/composer/autoload_namespaces.php ADDED
@@ -0,0 +1,9 @@
 
 
 
 
 
 
 
 
 
1
+ <?php
2
+
3
+ // autoload_namespaces.php @generated by Composer
4
+
5
+ $vendorDir = dirname(dirname(__FILE__));
6
+ $baseDir = dirname($vendorDir);
7
+
8
+ return array(
9
+ );
vendor/composer/autoload_psr4.php ADDED
@@ -0,0 +1,9 @@
 
 
 
 
 
 
 
 
 
1
+ <?php
2
+
3
+ // autoload_psr4.php @generated by Composer
4
+
5
+ $vendorDir = dirname(dirname(__FILE__));
6
+ $baseDir = dirname($vendorDir);
7
+
8
+ return array(
9
+ );
vendor/composer/autoload_real.php ADDED
@@ -0,0 +1,59 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <?php
2
+
3
+ // autoload_real.php @generated by Composer
4
+
5
+ class ComposerAutoloaderInit8c2f842343acbc55fdeb8617e53eec1f
6
+ {
7
+ private static $loader;
8
+
9
+ public static function loadClassLoader($class)
10
+ {
11
+ if ('Composer\Autoload\ClassLoader' === $class) {
12
+ require __DIR__ . '/ClassLoader.php';
13
+ }
14
+ }
15
+
16
+ public static function getLoader()
17
+ {
18
+ if (null !== self::$loader) {
19
+ return self::$loader;
20
+ }
21
+
22
+ spl_autoload_register(array('ComposerAutoloaderInit8c2f842343acbc55fdeb8617e53eec1f', 'loadClassLoader'), true, true);
23
+ self::$loader = $loader = new \Composer\Autoload\ClassLoader();
24
+ spl_autoload_unregister(array('ComposerAutoloaderInit8c2f842343acbc55fdeb8617e53eec1f', 'loadClassLoader'));
25
+
26
+ $map = require __DIR__ . '/autoload_namespaces.php';
27
+ foreach ($map as $namespace => $path) {
28
+ $loader->set($namespace, $path);
29
+ }
30
+
31
+ $map = require __DIR__ . '/autoload_psr4.php';
32
+ foreach ($map as $namespace => $path) {
33
+ $loader->setPsr4($namespace, $path);
34
+ }
35
+
36
+ $classMap = require __DIR__ . '/autoload_classmap.php';
37
+ if ($classMap) {
38
+ $loader->addClassMap($classMap);
39
+ }
40
+
41
+ $loader->register(true);
42
+
43
+ $includeFiles = require __DIR__ . '/autoload_files.php';
44
+ foreach ($includeFiles as $fileIdentifier => $file) {
45
+ composerRequire8c2f842343acbc55fdeb8617e53eec1f($fileIdentifier, $file);
46
+ }
47
+
48
+ return $loader;
49
+ }
50
+ }
51
+
52
+ function composerRequire8c2f842343acbc55fdeb8617e53eec1f($fileIdentifier, $file)
53
+ {
54
+ if (empty($GLOBALS['__composer_autoload_files'][$fileIdentifier])) {
55
+ require $file;
56
+
57
+ $GLOBALS['__composer_autoload_files'][$fileIdentifier] = true;
58
+ }
59
+ }
vendor/composer/installed.json ADDED
@@ -0,0 +1,42 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ [
2
+ {
3
+ "name": "codeinwp/themeisle-sdk",
4
+ "version": "dev-master",
5
+ "version_normalized": "9999999-dev",
6
+ "source": {
7
+ "type": "git",
8
+ "url": "https://github.com/Codeinwp/themeisle-sdk.git",
9
+ "reference": "caa9bf2b2c48c12a0ac745b6e2880c94339a777d"
10
+ },
11
+ "dist": {
12
+ "type": "zip",
13
+ "url": "https://api.github.com/repos/Codeinwp/themeisle-sdk/zipball/caa9bf2b2c48c12a0ac745b6e2880c94339a777d",
14
+ "reference": "caa9bf2b2c48c12a0ac745b6e2880c94339a777d",
15
+ "shasum": ""
16
+ },
17
+ "time": "2018-07-19 07:48:21",
18
+ "type": "library",
19
+ "installation-source": "dist",
20
+ "autoload": {
21
+ "files": [
22
+ "load.php"
23
+ ]
24
+ },
25
+ "notification-url": "https://packagist.org/downloads/",
26
+ "license": [
27
+ "GPL-2.0+"
28
+ ],
29
+ "authors": [
30
+ {
31
+ "name": "ThemeIsle team",
32
+ "email": "friends@themeisle.com",
33
+ "homepage": "https://themeisle.com"
34
+ }
35
+ ],
36
+ "description": "ThemeIsle SDK ",
37
+ "homepage": "https://github.com/Codeinwp/themeisle-sdk",
38
+ "keywords": [
39
+ "wordpress"
40
+ ]
41
+ }
42
+ ]