EmbedPress – Embed Google Docs, YouTube, Maps, Vimeo, Wistia Videos & Upload PDF, PPT in Gutenberg & Elementor - Version 2.2.0

Version Description

Download this release

Release Info

Developer andergmartins
Plugin Icon wp plugin EmbedPress – Embed Google Docs, YouTube, Maps, Vimeo, Wistia Videos & Upload PDF, PPT in Gutenberg & Elementor
Version 2.2.0
Comparing to
See all releases

Code changes from version 2.1.6 to 2.2.0

Files changed (48) hide show
  1. CONTRIBUTING.md +1 -1
  2. EmbedPress/AMP/Adapter/Reddit.php +11 -10
  3. EmbedPress/AMP/Adapter/Twitter.php +7 -6
  4. EmbedPress/AMP/EmbedHandler.php +6 -5
  5. EmbedPress/AutoLoader.php +20 -16
  6. EmbedPress/Compatibility.php +35 -0
  7. EmbedPress/Core.php +250 -88
  8. EmbedPress/CoreLegacy.php +415 -0
  9. EmbedPress/{Disabler.php → DisablerLegacy.php} +17 -15
  10. EmbedPress/Ends/Back/Handler.php +34 -29
  11. EmbedPress/Ends/Back/Settings.php +151 -129
  12. EmbedPress/Ends/Back/index.html +6 -6
  13. EmbedPress/Ends/Front/Handler.php +18 -15
  14. EmbedPress/Ends/Front/index.html +6 -6
  15. EmbedPress/Ends/Handler.php +11 -7
  16. EmbedPress/Ends/index.html +6 -6
  17. EmbedPress/Loader.php +37 -29
  18. EmbedPress/Plugins/Html/Field.php +28 -24
  19. EmbedPress/Plugins/Html/index.html +6 -6
  20. EmbedPress/Plugins/Plugin.php +40 -30
  21. EmbedPress/Plugins/index.html +6 -6
  22. EmbedPress/Providers/Giphy.php +10 -9
  23. EmbedPress/Providers/GoogleDocs.php +13 -11
  24. EmbedPress/Providers/GoogleMaps.php +8 -6
  25. EmbedPress/Providers/Twitch.php +42 -41
  26. EmbedPress/Providers/index.html +6 -6
  27. EmbedPress/RestAPI.php +51 -0
  28. EmbedPress/Shortcode.php +95 -80
  29. EmbedPress/ThirdParty/BeaverBuilder.php +11 -10
  30. EmbedPress/index.html +6 -6
  31. assets/css/font.css +69 -56
  32. assets/css/index.html +6 -6
  33. assets/css/preview.css +10 -10
  34. assets/css/vendor/bootstrap/bootstrap.css +1282 -819
  35. assets/css/vendor/bootstrap/bootstrap.css.map +13 -1
  36. assets/css/vendor/bootstrap/index.html +6 -6
  37. assets/css/vendor/index.html +6 -6
  38. assets/js/index.html +6 -6
  39. assets/js/preview.js +313 -317
  40. assets/js/settings.js +3 -3
  41. assets/js/vendor/bootstrap/bootstrap.js +327 -332
  42. assets/js/vendor/bootstrap/index.html +6 -6
  43. assets/js/vendor/index.html +6 -6
  44. autoloader.php +5 -5
  45. embedpress.php +23 -13
  46. includes.php +18 -18
  47. providers.php +6 -6
  48. readme.txt +16 -1
CONTRIBUTING.md CHANGED
@@ -28,7 +28,7 @@ EmbedPress follows the [Semantic Versioning 2.0.0](http://semver.org), which mea
28
  ```
29
  - `/includes.php` - Look for the line/code below and replace `x.x.x` with the new version.
30
  ```
31
- define('EMBEDPRESS_PLG_VERSION', "x.x.x");
32
  ```
33
  - `/embedpress.php` - Look for the line/code below and replace `x.x.x` with the new version.
34
  ```
28
  ```
29
  - `/includes.php` - Look for the line/code below and replace `x.x.x` with the new version.
30
  ```
31
+ define('EMBEDPRESS_VERSION', "x.x.x");
32
  ```
33
  - `/embedpress.php` - Look for the line/code below and replace `x.x.x` with the new version.
34
  ```
EmbedPress/AMP/Adapter/Reddit.php CHANGED
@@ -1,4 +1,5 @@
1
  <?php
 
2
  namespace EmbedPress\AMP\Adapter;
3
 
4
 
@@ -15,7 +16,7 @@ namespace EmbedPress\AMP\Adapter;
15
  * @abstract
16
  */
17
  class Reddit
18
- {
19
  /**
20
  * @var object
21
  */
@@ -40,12 +41,12 @@ class Reddit
40
  /**
41
  * The constructor.
42
  *
43
- * @param object $urlData
44
  */
45
  public function __construct($parsedContent, $urlData, $attributes)
46
  {
47
- add_action( 'amp_post_template_head', [$this, 'addScripts']);
48
-
49
  $this->parsedContent = $parsedContent;
50
  $this->urlData = $urlData;
51
  $this->attributes = $attributes;
@@ -59,11 +60,11 @@ class Reddit
59
  public function process()
60
  {
61
  // Check we have the required class
62
- if (! class_exists('AMP_HTML_Utils')) {
63
  return $this->parsedContent;
64
  }
65
 
66
- $defaults = [
67
  'data-width' => 100,
68
  'data-height' => 100,
69
  ];
@@ -71,13 +72,13 @@ class Reddit
71
 
72
  $parsedContent = \AMP_HTML_Utils::build_tag(
73
  'amp-reddit',
74
- array(
75
  'data-src' => $this->urlData->originalContent,
76
  'layout' => 'responsive',
77
  'data-embedtype' => "post",
78
  'width' => $attributes['data-width'],
79
  'height' => $attributes['data-height'],
80
- )
81
  );
82
 
83
  return $parsedContent;
@@ -88,10 +89,10 @@ class Reddit
88
  */
89
  public function addScripts()
90
  {
91
- if ( ! defined( 'PPEMB_REDDIT_AMP_SCRIPT_LOADED' ) ) {
92
  echo '<script async custom-element="amp-reddit" src="https://cdn.ampproject.org/v0/amp-reddit-0.1.js"></script>';
93
 
94
- define( 'PPEMB_REDDIT_AMP_SCRIPT_LOADED', 1 );
95
  }
96
  }
97
  }
1
  <?php
2
+
3
  namespace EmbedPress\AMP\Adapter;
4
 
5
 
16
  * @abstract
17
  */
18
  class Reddit
19
+ {
20
  /**
21
  * @var object
22
  */
41
  /**
42
  * The constructor.
43
  *
44
+ * @param object $urlData
45
  */
46
  public function __construct($parsedContent, $urlData, $attributes)
47
  {
48
+ add_action('amp_post_template_head', [$this, 'addScripts']);
49
+
50
  $this->parsedContent = $parsedContent;
51
  $this->urlData = $urlData;
52
  $this->attributes = $attributes;
60
  public function process()
61
  {
62
  // Check we have the required class
63
+ if ( ! class_exists('AMP_HTML_Utils')) {
64
  return $this->parsedContent;
65
  }
66
 
67
+ $defaults = [
68
  'data-width' => 100,
69
  'data-height' => 100,
70
  ];
72
 
73
  $parsedContent = \AMP_HTML_Utils::build_tag(
74
  'amp-reddit',
75
+ [
76
  'data-src' => $this->urlData->originalContent,
77
  'layout' => 'responsive',
78
  'data-embedtype' => "post",
79
  'width' => $attributes['data-width'],
80
  'height' => $attributes['data-height'],
81
+ ]
82
  );
83
 
84
  return $parsedContent;
89
  */
90
  public function addScripts()
91
  {
92
+ if ( ! defined('PPEMB_REDDIT_AMP_SCRIPT_LOADED')) {
93
  echo '<script async custom-element="amp-reddit" src="https://cdn.ampproject.org/v0/amp-reddit-0.1.js"></script>';
94
 
95
+ define('PPEMB_REDDIT_AMP_SCRIPT_LOADED', 1);
96
  }
97
  }
98
  }
EmbedPress/AMP/Adapter/Twitter.php CHANGED
@@ -1,4 +1,5 @@
1
  <?php
 
2
  namespace EmbedPress\AMP\Adapter;
3
 
4
 
@@ -15,7 +16,7 @@ namespace EmbedPress\AMP\Adapter;
15
  * @abstract
16
  */
17
  class Twitter
18
- {
19
  /**
20
  * @var object
21
  */
@@ -40,14 +41,14 @@ class Twitter
40
  /**
41
  * The constructor.
42
  *
43
- * @param object $urlData
44
  */
45
  public function __construct($parsedContent, $urlData, $attributes)
46
  {
47
  if (class_exists('AMP_Twitter_Embed_Handler')) {
48
  $this->ampEmbedHandler = new \AMP_Twitter_Embed_Handler;
49
 
50
- add_action( 'amp_post_template_head', [$this, 'addScripts']);
51
  }
52
 
53
  $this->parsedContent = $parsedContent;
@@ -63,7 +64,7 @@ class Twitter
63
  public function process()
64
  {
65
  // Check we have the adapter set
66
- if (! isset($this->ampEmbedHandler)) {
67
  return $this->parsedContent;
68
  }
69
 
@@ -81,10 +82,10 @@ class Twitter
81
  */
82
  public function addScripts()
83
  {
84
- if ( ! defined( 'PPEMB_TWITTER_AMP_SCRIPT_LOADED' ) ) {
85
  echo '<script async custom-element="amp-twitter" src="https://cdn.ampproject.org/v0/amp-twitter-0.1.js"></script>';
86
 
87
- define( 'PPEMB_TWITTER_AMP_SCRIPT_LOADED', 1 );
88
  }
89
  }
90
  }
1
  <?php
2
+
3
  namespace EmbedPress\AMP\Adapter;
4
 
5
 
16
  * @abstract
17
  */
18
  class Twitter
19
+ {
20
  /**
21
  * @var object
22
  */
41
  /**
42
  * The constructor.
43
  *
44
+ * @param object $urlData
45
  */
46
  public function __construct($parsedContent, $urlData, $attributes)
47
  {
48
  if (class_exists('AMP_Twitter_Embed_Handler')) {
49
  $this->ampEmbedHandler = new \AMP_Twitter_Embed_Handler;
50
 
51
+ add_action('amp_post_template_head', [$this, 'addScripts']);
52
  }
53
 
54
  $this->parsedContent = $parsedContent;
64
  public function process()
65
  {
66
  // Check we have the adapter set
67
+ if ( ! isset($this->ampEmbedHandler)) {
68
  return $this->parsedContent;
69
  }
70
 
82
  */
83
  public function addScripts()
84
  {
85
+ if ( ! defined('PPEMB_TWITTER_AMP_SCRIPT_LOADED')) {
86
  echo '<script async custom-element="amp-twitter" src="https://cdn.ampproject.org/v0/amp-twitter-0.1.js"></script>';
87
 
88
+ define('PPEMB_TWITTER_AMP_SCRIPT_LOADED', 1);
89
  }
90
  }
91
  }
EmbedPress/AMP/EmbedHandler.php CHANGED
@@ -1,4 +1,5 @@
1
  <?php
 
2
  namespace EmbedPress\AMP;
3
 
4
 
@@ -15,21 +16,21 @@ namespace EmbedPress\AMP;
15
  * @abstract
16
  */
17
  abstract class EmbedHandler
18
- {
19
  /**
20
  * Process embeds to check if need to adapt for AMP pages. This is compatible
21
  * witht the AMP plugin from Automattic.
22
  *
23
- * @param string $parsedContent
24
- * @param object $urlData
25
- * @param array $attributes
26
  *
27
  * @return object
28
  */
29
  static function processParsedContent($parsedContent, $urlData, $attributes)
30
  {
31
  // Check if we don't have the AMP plugin installed to bypass
32
- if (! class_exists('AMP_Base_Embed_Handler')) {
33
  return $parsedContent;
34
  }
35
 
1
  <?php
2
+
3
  namespace EmbedPress\AMP;
4
 
5
 
16
  * @abstract
17
  */
18
  abstract class EmbedHandler
19
+ {
20
  /**
21
  * Process embeds to check if need to adapt for AMP pages. This is compatible
22
  * witht the AMP plugin from Automattic.
23
  *
24
+ * @param string $parsedContent
25
+ * @param object $urlData
26
+ * @param array $attributes
27
  *
28
  * @return object
29
  */
30
  static function processParsedContent($parsedContent, $urlData, $attributes)
31
  {
32
  // Check if we don't have the AMP plugin installed to bypass
33
+ if ( ! class_exists('AMP_Base_Embed_Handler')) {
34
  return $parsedContent;
35
  }
36
 
EmbedPress/AutoLoader.php CHANGED
@@ -1,4 +1,5 @@
1
  <?php
 
2
  namespace EmbedPress;
3
 
4
  (defined('ABSPATH') && defined('EMBEDPRESS_IS_LOADED')) or die("No direct script access allowed.");
@@ -24,7 +25,7 @@ class AutoLoader
24
  *
25
  * @var array
26
  */
27
- protected static $prefixes = array();
28
 
29
  /**
30
  * Associative array of prefixes for loading specialized camelCase classes
@@ -36,7 +37,7 @@ class AutoLoader
36
  *
37
  * @var array
38
  */
39
- protected static $camelPrefixes = array();
40
 
41
  /**
42
  * @since 1.0.0
@@ -54,7 +55,8 @@ class AutoLoader
54
  * @access protected
55
  * @static
56
  *
57
- * @param string $method The method name which will be called.
 
58
  * @return void
59
  */
60
  protected static function registerLoader($method)
@@ -63,7 +65,7 @@ class AutoLoader
63
  static::$instance = new static();
64
  }
65
 
66
- spl_autoload_register(array(static::$instance, $method));
67
  }
68
 
69
  /**
@@ -72,9 +74,9 @@ class AutoLoader
72
  * @since 1.0.0
73
  * @static
74
  *
75
- * @param string $prefix The namespace prefix.
76
- * @param string $baseDir A base directory for class files in the namespace.
77
- * @param bool $prepend If true, prepend the base directory to the stack instead of
78
  * appending it; this causes it to be searched first rather than last.
79
  *
80
  * @return void
@@ -99,7 +101,7 @@ class AutoLoader
99
 
100
  // initialise the namespace prefix array
101
  if (empty(self::$prefixes[$prefix])) {
102
- self::$prefixes[$prefix] = array();
103
  }
104
 
105
  // retain the base directory for the namespace prefix
@@ -117,7 +119,7 @@ class AutoLoader
117
  * @access protected
118
  * @static
119
  *
120
- * @param string $class The fully-qualified class name.
121
  *
122
  * @return mixed The mapped file name on success, or boolean false on failure.
123
  */
@@ -146,8 +148,8 @@ class AutoLoader
146
  * @access protected
147
  * @static
148
  *
149
- * @param string $prefix The namespace prefix.
150
- * @param string $className The relative class name.
151
  *
152
  * @return mixed False if no mapped file can be loaded | path that was loaded
153
  */
@@ -164,6 +166,7 @@ class AutoLoader
164
 
165
  if (is_file($path)) {
166
  require_once $path;
 
167
  return $path;
168
  }
169
  }
@@ -181,15 +184,15 @@ class AutoLoader
181
  * @since 1.0.0
182
  * @static
183
  *
184
- * @param string $prefix
185
- * @param string $baseDir
186
  *
187
  * @return void
188
  * @throws \Exception
189
  */
190
  public static function registerCamelBase($prefix, $baseDir)
191
  {
192
- if (!is_dir($baseDir)) {
193
  throw new \Exception("Cannot register '{$prefix}'. The requested base directory does not exist!'");
194
  }
195
 
@@ -209,13 +212,13 @@ class AutoLoader
209
  * @since 1.0.0
210
  * @access protected
211
  *
212
- * @param string $class
213
  *
214
  * @return mixed Bool/string
215
  */
216
  protected function loadCamelClass($class)
217
  {
218
- if (!class_exists($class)) {
219
  foreach (self::$camelPrefixes as $prefix => $baseDir) {
220
  if (strpos($class, $prefix) === 0) {
221
  $parts = preg_split('/(?<=[a-z])(?=[A-Z])/x', substr($class, strlen($prefix)));
@@ -225,6 +228,7 @@ class AutoLoader
225
 
226
  if (is_file($filePath)) {
227
  require_once $filePath;
 
228
  return $filePath;
229
  }
230
  }
1
  <?php
2
+
3
  namespace EmbedPress;
4
 
5
  (defined('ABSPATH') && defined('EMBEDPRESS_IS_LOADED')) or die("No direct script access allowed.");
25
  *
26
  * @var array
27
  */
28
+ protected static $prefixes = [];
29
 
30
  /**
31
  * Associative array of prefixes for loading specialized camelCase classes
37
  *
38
  * @var array
39
  */
40
+ protected static $camelPrefixes = [];
41
 
42
  /**
43
  * @since 1.0.0
55
  * @access protected
56
  * @static
57
  *
58
+ * @param string $method The method name which will be called.
59
+ *
60
  * @return void
61
  */
62
  protected static function registerLoader($method)
65
  static::$instance = new static();
66
  }
67
 
68
+ spl_autoload_register([static::$instance, $method]);
69
  }
70
 
71
  /**
74
  * @since 1.0.0
75
  * @static
76
  *
77
+ * @param string $prefix The namespace prefix.
78
+ * @param string $baseDir A base directory for class files in the namespace.
79
+ * @param bool $prepend If true, prepend the base directory to the stack instead of
80
  * appending it; this causes it to be searched first rather than last.
81
  *
82
  * @return void
101
 
102
  // initialise the namespace prefix array
103
  if (empty(self::$prefixes[$prefix])) {
104
+ self::$prefixes[$prefix] = [];
105
  }
106
 
107
  // retain the base directory for the namespace prefix
119
  * @access protected
120
  * @static
121
  *
122
+ * @param string $class The fully-qualified class name.
123
  *
124
  * @return mixed The mapped file name on success, or boolean false on failure.
125
  */
148
  * @access protected
149
  * @static
150
  *
151
+ * @param string $prefix The namespace prefix.
152
+ * @param string $className The relative class name.
153
  *
154
  * @return mixed False if no mapped file can be loaded | path that was loaded
155
  */
166
 
167
  if (is_file($path)) {
168
  require_once $path;
169
+
170
  return $path;
171
  }
172
  }
184
  * @since 1.0.0
185
  * @static
186
  *
187
+ * @param string $prefix
188
+ * @param string $baseDir
189
  *
190
  * @return void
191
  * @throws \Exception
192
  */
193
  public static function registerCamelBase($prefix, $baseDir)
194
  {
195
+ if ( ! is_dir($baseDir)) {
196
  throw new \Exception("Cannot register '{$prefix}'. The requested base directory does not exist!'");
197
  }
198
 
212
  * @since 1.0.0
213
  * @access protected
214
  *
215
+ * @param string $class
216
  *
217
  * @return mixed Bool/string
218
  */
219
  protected function loadCamelClass($class)
220
  {
221
+ if ( ! class_exists($class)) {
222
  foreach (self::$camelPrefixes as $prefix => $baseDir) {
223
  if (strpos($class, $prefix) === 0) {
224
  $parts = preg_split('/(?<=[a-z])(?=[A-Z])/x', substr($class, strlen($prefix)));
228
 
229
  if (is_file($filePath)) {
230
  require_once $filePath;
231
+
232
  return $filePath;
233
  }
234
  }
EmbedPress/Compatibility.php ADDED
@@ -0,0 +1,35 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <?php
2
+
3
+ namespace EmbedPress;
4
+
5
+ (defined('ABSPATH') && defined('EMBEDPRESS_IS_LOADED')) or die("No direct script access allowed.");
6
+
7
+ /**
8
+ * Class Compatibility.
9
+ *
10
+ * @package EmbedPress
11
+ * @author EmbedPress <help@embedpress.com>
12
+ * @copyright Copyright (C) 2018 EmbedPress. All rights reserved.
13
+ * @license GPLv2 or later
14
+ */
15
+ class Compatibility
16
+ {
17
+ /**
18
+ * Returns true if is WordPress 5.x or any beta version.
19
+ *
20
+ * @return bool
21
+ */
22
+ public static function isWordPress5()
23
+ {
24
+ global $wp_version;
25
+
26
+ return version_compare($wp_version, '5.0', '>=') || substr($wp_version, 0, 2) === '5.';
27
+ }
28
+
29
+ public static function isClassicalEditorActive()
30
+ {
31
+ $isActive = is_plugin_active('classic-editor/classic-editor.php');
32
+
33
+ return $isActive;
34
+ }
35
+ }
EmbedPress/Core.php CHANGED
@@ -1,15 +1,14 @@
1
  <?php
 
2
  namespace EmbedPress;
3
 
4
- use \EmbedPress\AutoLoader;
5
- use \EmbedPress\Loader;
6
- use \EmbedPress\Ends\Back\Handler as EndHandlerAdmin;
7
- use \EmbedPress\Ends\Front\Handler as EndHandlerPublic;
8
 
9
  (defined('ABSPATH') && defined('EMBEDPRESS_IS_LOADED')) or die("No direct script access allowed.");
10
 
11
  /**
12
- * Entity that glues together all pieces that the plugin is made of.
13
  *
14
  * @package EmbedPress
15
  * @author EmbedPress <help@embedpress.com>
@@ -25,7 +24,7 @@ class Core
25
  * @since 1.0.0
26
  * @access protected
27
  *
28
- * @var string $pluginName The name of the plugin.
29
  */
30
  protected $pluginName;
31
 
@@ -35,7 +34,7 @@ class Core
35
  * @since 1.0.0
36
  * @access protected
37
  *
38
- * @var string $pluginVersion The version of the plugin.
39
  */
40
  protected $pluginVersion;
41
 
@@ -45,7 +44,7 @@ class Core
45
  * @since 1.0.0
46
  * @access protected
47
  *
48
- * @var \EmbedPress\Loader $pluginVersion The version of the plugin.
49
  */
50
  protected $loaderInstance;
51
 
@@ -58,7 +57,7 @@ class Core
58
  *
59
  * @var array
60
  */
61
- private static $plugins = array();
62
 
63
  /**
64
  * Initialize the plugin and set its properties.
@@ -69,8 +68,8 @@ class Core
69
  */
70
  public function __construct()
71
  {
72
- $this->pluginName = EMBEDPRESS_PLG_NAME;
73
- $this->pluginVersion = EMBEDPRESS_PLG_VERSION;
74
 
75
  $this->loaderInstance = new Loader();
76
  }
@@ -122,37 +121,29 @@ class Core
122
  {
123
  global $wp_actions;
124
 
 
 
 
 
125
  if (is_admin()) {
126
  $plgSettings = self::getSettings();
127
 
128
- $settingsClassNamespace = '\EmbedPress\Ends\Back\Settings';
129
- add_action('admin_menu', array($settingsClassNamespace, 'registerMenuItem'));
130
- add_action('admin_init', array($settingsClassNamespace, 'registerActions'));
131
  unset($settingsClassNamespace);
132
 
133
- add_filter('plugin_action_links_embedpress/embedpress.php', array('\EmbedPress\Core', 'handleActionLinks'), 10, 2);
134
-
135
- add_action('admin_enqueue_scripts', array('\EmbedPress\Ends\Back\Handler', 'enqueueStyles'));
136
 
137
- add_action('init', array('\EmbedPress\Disabler', 'run'), 1);
138
- add_action('init', array($this, 'configureTinyMCE'), 1);
139
 
140
  $plgHandlerAdminInstance = new EndHandlerAdmin($this->getPluginName(), $this->getPluginVersion());
141
 
142
  if ((bool)$plgSettings->enablePluginInAdmin) {
143
  $this->loaderInstance->add_action('admin_enqueue_scripts', $plgHandlerAdminInstance, 'enqueueScripts');
144
  }
145
-
146
- $onAjaxCallbackName = "doShortcodeReceivedViaAjax";
147
- $this->loaderInstance->add_action('wp_ajax_embedpress_do_ajax_request', $plgHandlerAdminInstance, $onAjaxCallbackName);
148
- $this->loaderInstance->add_action('wp_ajax_nopriv_embedpress_do_ajax_request', $plgHandlerAdminInstance, $onAjaxCallbackName);
149
-
150
- $this->loaderInstance->add_action('wp_ajax_embedpress_get_embed_url_info', $plgHandlerAdminInstance, "getUrlInfoViaAjax");
151
-
152
- unset($onAjaxCallbackName, $plgHandlerAdminInstance);
153
  } else {
154
- add_action('init', array('\EmbedPress\Disabler', 'run'), 1);
155
-
156
  $plgHandlerPublicInstance = new EndHandlerPublic($this->getPluginName(), $this->getPluginVersion());
157
 
158
  $this->loaderInstance->add_action('wp_enqueue_scripts', $plgHandlerPublicInstance, 'enqueueScripts');
@@ -162,14 +153,201 @@ class Core
162
  }
163
 
164
  // Add support for embeds on AMP pages
165
- add_filter('pp_embed_parsed_content', array('\EmbedPress\AMP\EmbedHandler', 'processParsedContent'), 10, 3);
166
 
167
  // Add support for our embeds on Beaver Builder. Without this it only run the native embeds.
168
- add_filter('fl_builder_before_render_shortcodes', array('\\EmbedPress\\ThirdParty\\BeaverBuilder', 'before_render_shortcodes'));
 
169
 
170
  $this->loaderInstance->run();
171
  }
172
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
173
  /**
174
  * Callback called right after the plugin has been activated.
175
  *
@@ -180,7 +358,6 @@ class Core
180
  */
181
  public static function onPluginActivationCallback()
182
  {
183
- add_filter('rewrite_rules_array', array('\EmbedPress\Disabler', 'disableDefaultEmbedRewriteRules'));
184
  flush_rewrite_rules();
185
  }
186
 
@@ -194,7 +371,6 @@ class Core
194
  */
195
  public static function onPluginDeactivationCallback()
196
  {
197
- remove_filter('rewrite_rules_array', array('\EmbedPress\Disabler', 'disableDefaultEmbedRewriteRules'));
198
  flush_rewrite_rules();
199
  }
200
 
@@ -208,7 +384,7 @@ class Core
208
  */
209
  public static function getAdditionalServiceProviders()
210
  {
211
- $additionalProvidersFilePath = EMBEDPRESS_PATH_BASE .'providers.php';
212
  if (file_exists($additionalProvidersFilePath)) {
213
  include $additionalProvidersFilePath;
214
 
@@ -217,7 +393,7 @@ class Core
217
  }
218
  }
219
 
220
- return array();
221
  }
222
 
223
  /**
@@ -226,12 +402,28 @@ class Core
226
  * @since 1.0.0
227
  * @static
228
  *
229
- * @param string $serviceProviderAlias The service's slug.
 
230
  * @return boolean
231
  */
232
  public static function canServiceProviderBeResponsive($serviceProviderAlias)
233
  {
234
- return in_array($serviceProviderAlias, array("dailymotion", "kickstarter", "rutube", "ted", "vimeo", "youtube", "ustream", "google-docs", "animatron", "amcharts", "on-aol-com", "animoto", "videojug", 'issuu'));
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
235
  }
236
 
237
  /**
@@ -246,11 +438,11 @@ class Core
246
  {
247
  $settings = get_option(EMBEDPRESS_PLG_NAME);
248
 
249
- if (!isset($settings['enablePluginInAdmin'])) {
250
  $settings['enablePluginInAdmin'] = true;
251
  }
252
 
253
- if (!isset($settings['enablePluginInFront'])) {
254
  $settings['enablePluginInFront'] = true;
255
  }
256
 
@@ -263,7 +455,8 @@ class Core
263
  * @since 1.4.0
264
  * @static
265
  *
266
- * @param array $pluginMeta Associative array containing plugin's name, slug and namespace
 
267
  * @return void
268
  */
269
  public static function registerPlugin($pluginMeta)
@@ -274,24 +467,27 @@ class Core
274
  return;
275
  }
276
 
277
- if (!isset(self::$plugins[$pluginMeta->slug])) {
278
- AutoLoader::register($pluginMeta->namespace, WP_PLUGIN_DIR .'/'. EMBEDPRESS_PLG_NAME .'-'. $pluginMeta->slug .'/'. $pluginMeta->name);
 
279
 
280
  $plugin = "{$pluginMeta->namespace}\Plugin";
281
  if (\defined("{$plugin}::SLUG") && $plugin::SLUG !== null) {
282
  self::$plugins[$pluginMeta->slug] = $pluginMeta->namespace;
283
 
284
- $bsFilePath = $plugin::PATH . EMBEDPRESS_PLG_NAME .'-'. $plugin::SLUG .'.php';
285
 
286
- register_activation_hook($bsFilePath, array($plugin::NAMESPACE_STRING, 'onActivationCallback'));
287
- register_deactivation_hook($bsFilePath, array($plugin::NAMESPACE_STRING, 'onDeactivationCallback'));
288
 
289
- add_action('admin_init', array($plugin, 'onLoadAdminCallback'));
290
 
291
- add_action(EMBEDPRESS_PLG_NAME .':'. $plugin::SLUG .':settings:register', array($plugin, 'registerSettings'));
292
- add_action(EMBEDPRESS_PLG_NAME .':settings:render:tab', array($plugin, 'renderTab'));
 
293
 
294
- add_filter('plugin_action_links_embedpress-'. $plugin::SLUG .'/embedpress-'. $plugin::SLUG .'.php', array($plugin, 'handleActionLinks'), 10, 2);
 
295
 
296
  $plugin::registerEvents();
297
  }
@@ -321,7 +517,8 @@ class Core
321
  */
322
  public static function handleActionLinks($links, $file)
323
  {
324
- $settingsLink = '<a href="'. admin_url('admin.php?page=embedpress') .'" aria-label="'. __('Open settings page', 'embedpress') .'">'. __('Settings', 'embedpress') .'</a>';
 
325
 
326
  array_unshift($links, $settingsLink);
327
 
@@ -334,9 +531,9 @@ class Core
334
  * @since 1.4.0
335
  * @static
336
  *
337
- * @param boolean $isAllowed
338
- * @param string $host
339
- * @param string $url
340
  *
341
  * @return boolean
342
  */
@@ -348,39 +545,4 @@ class Core
348
 
349
  return $isAllowed;
350
  }
351
-
352
- /**
353
- * Add filters to configure the TinyMCE editor.
354
- *
355
- * @since 1.6.2
356
- */
357
- public function configureTinyMCE()
358
- {
359
- add_filter('teeny_mce_before_init', array($this, 'hookOnPaste'));
360
- add_filter('tiny_mce_before_init', array($this, 'hookOnPaste'));
361
- }
362
-
363
- /**
364
- * Hook the onPaste methof to the paste_preprocess config in the editor.
365
- *
366
- * @since 1.6.2
367
- *
368
- * @param array $mceInit
369
- *
370
- * @return array
371
- */
372
- public function hookOnPaste($mceInit)
373
- {
374
- $settings = self::getSettings();
375
-
376
- if (isset($settings->enablePluginInAdmin) && $settings->enablePluginInAdmin) {
377
- // We hook here because the onPaste is sometimes called after the content was already added to the editor.
378
- // If you copy text from the editor and paste there, it will give no way to use a normal onPaste event hook
379
- // to modify the input since it was already injected.
380
- $mceInit['paste_preprocess'] = 'function (plugin, args) {EmbedPress.onPaste(plugin, args);}';
381
- }
382
-
383
-
384
- return $mceInit;
385
- }
386
  }
1
  <?php
2
+
3
  namespace EmbedPress;
4
 
5
+ use EmbedPress\Ends\Back\Handler as EndHandlerAdmin;
6
+ use EmbedPress\Ends\Front\Handler as EndHandlerPublic;
 
 
7
 
8
  (defined('ABSPATH') && defined('EMBEDPRESS_IS_LOADED')) or die("No direct script access allowed.");
9
 
10
  /**
11
+ * Entity that glues together all pieces that the plugin is made of, for WordPress 5+.
12
  *
13
  * @package EmbedPress
14
  * @author EmbedPress <help@embedpress.com>
24
  * @since 1.0.0
25
  * @access protected
26
  *
27
+ * @var string $pluginName The name of the plugin.
28
  */
29
  protected $pluginName;
30
 
34
  * @since 1.0.0
35
  * @access protected
36
  *
37
+ * @var string $pluginVersion The version of the plugin.
38
  */
39
  protected $pluginVersion;
40
 
44
  * @since 1.0.0
45
  * @access protected
46
  *
47
+ * @var \EmbedPress\Loader $pluginVersion The version of the plugin.
48
  */
49
  protected $loaderInstance;
50
 
57
  *
58
  * @var array
59
  */
60
+ private static $plugins = [];
61
 
62
  /**
63
  * Initialize the plugin and set its properties.
68
  */
69
  public function __construct()
70
  {
71
+ $this->pluginName = EMBEDPRESS_PLG_NAME;
72
+ $this->pluginVersion = EMBEDPRESS_VERSION;
73
 
74
  $this->loaderInstance = new Loader();
75
  }
121
  {
122
  global $wp_actions;
123
 
124
+ add_filter('oembed_providers', [$this, 'addOEmbedProviders']);
125
+ add_action('rest_api_init', [$this, 'registerOEmbedRestRoutes']);
126
+ // add_filter('oembed_result', [$this, 'oembedResult'], 10, 3);
127
+
128
  if (is_admin()) {
129
  $plgSettings = self::getSettings();
130
 
131
+ $settingsClassNamespace = '\\EmbedPress\\Ends\\Back\\Settings';
132
+ add_action('admin_menu', [$settingsClassNamespace, 'registerMenuItem']);
133
+ add_action('admin_init', [$settingsClassNamespace, 'registerActions']);
134
  unset($settingsClassNamespace);
135
 
136
+ add_filter('plugin_action_links_embedpress/embedpress.php', ['\\EmbedPress\\Core', 'handleActionLinks'], 10,
137
+ 2);
 
138
 
139
+ add_action('admin_enqueue_scripts', ['\\EmbedPress\\Ends\\Back\\Handler', 'enqueueStyles']);
 
140
 
141
  $plgHandlerAdminInstance = new EndHandlerAdmin($this->getPluginName(), $this->getPluginVersion());
142
 
143
  if ((bool)$plgSettings->enablePluginInAdmin) {
144
  $this->loaderInstance->add_action('admin_enqueue_scripts', $plgHandlerAdminInstance, 'enqueueScripts');
145
  }
 
 
 
 
 
 
 
 
146
  } else {
 
 
147
  $plgHandlerPublicInstance = new EndHandlerPublic($this->getPluginName(), $this->getPluginVersion());
148
 
149
  $this->loaderInstance->add_action('wp_enqueue_scripts', $plgHandlerPublicInstance, 'enqueueScripts');
153
  }
154
 
155
  // Add support for embeds on AMP pages
156
+ add_filter('pp_embed_parsed_content', ['\\EmbedPress\\AMP\\EmbedHandler', 'processParsedContent'], 10, 3);
157
 
158
  // Add support for our embeds on Beaver Builder. Without this it only run the native embeds.
159
+ add_filter('fl_builder_before_render_shortcodes',
160
+ ['\\EmbedPress\\ThirdParty\\BeaverBuilder', 'before_render_shortcodes']);
161
 
162
  $this->loaderInstance->run();
163
  }
164
 
165
+ public function oembedResult($html, $url, $args)
166
+ {
167
+ // apply_filters( 'oembed_result', $this->data2html( $data, $url ), $url, $args );
168
+ var_dump($html, $url, $args);
169
+ die;
170
+
171
+ return $html;
172
+ }
173
+
174
+ /**
175
+ * @param $providers
176
+ *
177
+ * @return mixed
178
+ */
179
+ public function addOEmbedProviders($providers)
180
+ {
181
+ $newProviders = [
182
+ // Viddler
183
+ '#https?://(.+\.)?viddler\.com/v/.+#i' => 'viddler',
184
+
185
+ // Deviantart.com (http://www.deviantart.com)
186
+ '#https?://(.+\.)?deviantart\.com/art/.+#i' => 'devianart',
187
+ '#https?://(.+\.)?deviantart\.com/.+#i' => 'devianart',
188
+ '#https?://(.+\.)?deviantart\.com/.*/d.+#i' => 'devianart',
189
+ '#https?://(.+\.)?fav\.me/.+#i' => 'devianart',
190
+ '#https?://(.+\.)?sta\.sh/.+#i' => 'devianart',
191
+
192
+ // chirbit.com (http://www.chirbit.com/)
193
+ '#https?://(.+\.)?chirb\.it/.+#i' => 'chirbit',
194
+
195
+
196
+ // nfb.ca (http://www.nfb.ca/)
197
+ '#https?://(.+\.)?nfb\.ca/film/.+#i' => 'nfb',
198
+
199
+ // Dotsub (http://dotsub.com/)
200
+ '#https?://(.+\.)?dotsub\.com/view/.+#i' => 'dotsub',
201
+
202
+ // Rdio (http://rdio.com/)
203
+ '#https?://(.+\.)?rdio\.com/(artist|people)/.+#i' => 'rdio',
204
+
205
+ // Sapo Videos (http://videos.sapo.pt)
206
+ '#https?://(.+\.)?videos\.sapo\.pt/.+#i' => 'sapo',
207
+
208
+ // Official FM (http://official.fm)
209
+ '#https?://(.+\.)?official\.fm/(tracks|playlists)/.+#i' => 'officialfm',
210
+
211
+ // HuffDuffer (http://huffduffer.com)
212
+ '#https?://(.+\.)?huffduffer\.com/.+#i' => 'huffduffer',
213
+
214
+ // Shoudio (http://shoudio.com)
215
+ '#https?://(.+\.)?shoudio\.(com|io)/.+#i' => 'shoudio',
216
+
217
+ // Moby Picture (http://www.mobypicture.com)
218
+ '#https?://(.+\.)?mobypicture\.com/user/.+/view/.+#i' => 'mobypicture',
219
+ '#https?://(.+\.)?moby\.to/.+#i',
220
+
221
+ // 23HQ (http://www.23hq.com)
222
+ '#https?://(.+\.)?23hq\.com/.+/photo/.+#i' => '23hq',
223
+
224
+ // Cacoo (https://cacoo.com)
225
+ '#https?://(.+\.)?cacoo\.com/diagrams/.+#i' => 'cacoo',
226
+
227
+ // Dipity (http://www.dipity.com)
228
+ '#https?://(.+\.)?dipity\.com/.+#i' => 'dipity',
229
+
230
+ // Roomshare (http://roomshare.jp)
231
+ '#https?://(.+\.)?roomshare\.jp/(en/)?post/.+#i' => 'roomshare',
232
+
233
+ // Crowd Ranking (http://crowdranking.com)
234
+ '#https?://(.+\.)?c9ng\.com/.+#i' => 'crowd',
235
+
236
+ // CircuitLab (https://www.circuitlab.com/)
237
+ '#https?://(.+\.)?circuitlab\.com/circuit/.+#i' => 'circuitlab',
238
+
239
+ // Coub (http://coub.com/)
240
+ '#https?://(.+\.)?coub\.com/(view|embed)/.+#i' => 'coub',
241
+
242
+ // Ustream (http://www.ustream.tv)
243
+ '#https?://(.+\.)?ustream\.(tv|com)/.+#i' => 'ustream',
244
+
245
+ // Daily Mile (http://www.dailymile.com)
246
+ '#https?://(.+\.)?dailymile\.com/people/.+/entries/.+#i' => 'daily',
247
+
248
+ // Sketchfab (http://sketchfab.com)
249
+ '#https?://(.+\.)?sketchfab\.com/models/.+#i' => 'sketchfab',
250
+ '#https?://(.+\.)?sketchfab\.com/.+/folders/.+#i' => 'sketchfab',
251
+
252
+ // AudioSnaps (http://audiosnaps.com)
253
+ '#https?://(.+\.)?audiosnaps\.com/k/.+#i' => 'audiosnaps',
254
+
255
+ // RapidEngage (https://rapidengage.com)
256
+ '#https?://(.+\.)?rapidengage\.com/s/.+#i' => 'rapidengage',
257
+
258
+ // Getty Images (http://www.gettyimages.com/)
259
+ '#https?://(.+\.)?gty\.im/.+#i' => 'gettyimages',
260
+ '#https?://(.+\.)?gettyimages\.com/detail/photo/.+#i' => 'gettyimages',
261
+
262
+ // amCharts Live Editor (http://live.amcharts.com/)
263
+ '#https?://(.+\.)?live\.amcharts\.com/.+#i' => 'amcharts',
264
+
265
+ // Infogram (https://infogr.am/)
266
+ '#https?://(.+\.)?infogr\.am/.+#i' => 'infogram',
267
+
268
+ // ChartBlocks (http://www.chartblocks.com/)
269
+ '#https?://(.+\.)?public\.chartblocks\.com/c/.+#i' => 'chartblocks',
270
+
271
+ // ReleaseWire (http://www.releasewire.com/)
272
+ '#https?://(.+\.)?rwire\.com/.+#i' => 'releasewire',
273
+
274
+ // ShortNote (https://www.shortnote.jp/)
275
+ '#https?://(.+\.)?shortnote\.jp/view/notes/.+#i' => 'shortnote',
276
+
277
+ // EgliseInfo (http://egliseinfo.catholique.fr/)
278
+ '#https?://(.+\.)?egliseinfo\.catholique\.fr/.+#i' => 'egliseinfo',
279
+
280
+ // Silk (http://www.silk.co/)
281
+ '#https?://(.+\.)?silk\.co/explore/.+#i' => 'silk',
282
+ '#https?://(.+\.)?silk\.co/s/embed/.+#i' => 'silk',
283
+
284
+ // http://bambuser.com
285
+ '#https?://(.+\.)?bambuser\.com/v/.+#i' => 'bambuser',
286
+
287
+ // https://clyp.it
288
+ '#https?://(.+\.)?clyp\.it/.+#i' => 'clyp',
289
+
290
+ // https://gist.github.com
291
+ '#https?://(.+\.)?gist\.github\.com/.+#i' => 'github',
292
+
293
+ // https://portfolium.com
294
+ '#https?://(.+\.)?portfolium\.com/.+#i' => 'portfolium',
295
+
296
+ // http://rutube.ru
297
+ '#https?://(.+\.)?rutube\.ru/video/.+#i' => 'rutube',
298
+
299
+ // http://www.videojug.com
300
+ '#https?://(.+\.)?videojug\.com/.+#i' => 'videojug',
301
+
302
+ // https://vine.com
303
+ '#https?://(.+\.)?vine\.co/v/.+#i' => 'vine',
304
+
305
+ // Google Shortened Url
306
+ '#https?://(.+\.)?goo\.gl/.+#i' => 'google',
307
+
308
+ // Google Maps
309
+ '#https?://(.+\.)?google\.com/maps/.+#i' => 'googlemaps',
310
+ '#https?://(.+\.)?maps\.google\.com/.+#i' => 'googlemaps',
311
+
312
+ // Google Docs
313
+ '#https?://(.+\.)?docs\.google\.com/(.+/)?(document|presentation|spreadsheets|forms|drawings)/.+#i' => 'googledocs',
314
+
315
+ // Twitch.tv
316
+ '#https?://(.+\.)?twitch\.tv/.+#i' => 'twitch',
317
+
318
+ // Giphy
319
+ '#https?://(.+\.)?giphy\.com/gifs/.+#i' => 'giphy',
320
+ '#https?://(.+\.)?i\.giphy\.com/.+#i' => 'giphy',
321
+ '#https?://(.+\.)?gph\.is/.+#i' => 'giphy',
322
+
323
+ // Wistia
324
+ '#https?://(.+\.)?wistia\.com/medias/.+#i' => 'wistia',
325
+ '#https?://(.+\.)?fast\.wistia\.com/embed/medias/.+#i\.jsonp' => 'wistia',
326
+ ];
327
+
328
+ foreach ($newProviders as $url => &$data) {
329
+ $data = [rest_url('embedpress/v1/oembed/' . $data), true];
330
+ }
331
+
332
+ $providers = array_merge($providers, $newProviders);
333
+
334
+ return $providers;
335
+ }
336
+
337
+ /**
338
+ * Register OEmbed Rest Routes
339
+ */
340
+ public function registerOEmbedRestRoutes()
341
+ {
342
+ register_rest_route(
343
+ 'embedpress/v1', '/oembed/(?P<provider>[a-zA-Z0-9\-]+)',
344
+ [
345
+ 'methods' => \WP_REST_Server::READABLE,
346
+ 'callback' => ['\\EmbedPress\\RestAPI', 'oembed'],
347
+ ]
348
+ );
349
+ }
350
+
351
  /**
352
  * Callback called right after the plugin has been activated.
353
  *
358
  */
359
  public static function onPluginActivationCallback()
360
  {
 
361
  flush_rewrite_rules();
362
  }
363
 
371
  */
372
  public static function onPluginDeactivationCallback()
373
  {
 
374
  flush_rewrite_rules();
375
  }
376
 
384
  */
385
  public static function getAdditionalServiceProviders()
386
  {
387
+ $additionalProvidersFilePath = EMBEDPRESS_PATH_BASE . 'providers.php';
388
  if (file_exists($additionalProvidersFilePath)) {
389
  include $additionalProvidersFilePath;
390
 
393
  }
394
  }
395
 
396
+ return [];
397
  }
398
 
399
  /**
402
  * @since 1.0.0
403
  * @static
404
  *
405
+ * @param string $serviceProviderAlias The service's slug.
406
+ *
407
  * @return boolean
408
  */
409
  public static function canServiceProviderBeResponsive($serviceProviderAlias)
410
  {
411
+ return in_array($serviceProviderAlias, [
412
+ "dailymotion",
413
+ "kickstarter",
414
+ "rutube",
415
+ "ted",
416
+ "vimeo",
417
+ "youtube",
418
+ "ustream",
419
+ "google-docs",
420
+ "animatron",
421
+ "amcharts",
422
+ "on-aol-com",
423
+ "animoto",
424
+ "videojug",
425
+ 'issuu',
426
+ ]);
427
  }
428
 
429
  /**
438
  {
439
  $settings = get_option(EMBEDPRESS_PLG_NAME);
440
 
441
+ if ( ! isset($settings['enablePluginInAdmin'])) {
442
  $settings['enablePluginInAdmin'] = true;
443
  }
444
 
445
+ if ( ! isset($settings['enablePluginInFront'])) {
446
  $settings['enablePluginInFront'] = true;
447
  }
448
 
455
  * @since 1.4.0
456
  * @static
457
  *
458
+ * @param array $pluginMeta Associative array containing plugin's name, slug and namespace
459
+ *
460
  * @return void
461
  */
462
  public static function registerPlugin($pluginMeta)
467
  return;
468
  }
469
 
470
+ if ( ! isset(self::$plugins[$pluginMeta->slug])) {
471
+ AutoLoader::register($pluginMeta->namespace,
472
+ WP_PLUGIN_DIR . '/' . EMBEDPRESS_PLG_NAME . '-' . $pluginMeta->slug . '/' . $pluginMeta->name);
473
 
474
  $plugin = "{$pluginMeta->namespace}\Plugin";
475
  if (\defined("{$plugin}::SLUG") && $plugin::SLUG !== null) {
476
  self::$plugins[$pluginMeta->slug] = $pluginMeta->namespace;
477
 
478
+ $bsFilePath = $plugin::PATH . EMBEDPRESS_PLG_NAME . '-' . $plugin::SLUG . '.php';
479
 
480
+ register_activation_hook($bsFilePath, [$plugin::NAMESPACE_STRING, 'onActivationCallback']);
481
+ register_deactivation_hook($bsFilePath, [$plugin::NAMESPACE_STRING, 'onDeactivationCallback']);
482
 
483
+ add_action('admin_init', [$plugin, 'onLoadAdminCallback']);
484
 
485
+ add_action(EMBEDPRESS_PLG_NAME . ':' . $plugin::SLUG . ':settings:register',
486
+ [$plugin, 'registerSettings']);
487
+ add_action(EMBEDPRESS_PLG_NAME . ':settings:render:tab', [$plugin, 'renderTab']);
488
 
489
+ add_filter('plugin_action_links_embedpress-' . $plugin::SLUG . '/embedpress-' . $plugin::SLUG . '.php',
490
+ [$plugin, 'handleActionLinks'], 10, 2);
491
 
492
  $plugin::registerEvents();
493
  }
517
  */
518
  public static function handleActionLinks($links, $file)
519
  {
520
+ $settingsLink = '<a href="' . admin_url('admin.php?page=embedpress') . '" aria-label="' . __('Open settings page',
521
+ 'embedpress') . '">' . __('Settings', 'embedpress') . '</a>';
522
 
523
  array_unshift($links, $settingsLink);
524
 
531
  * @since 1.4.0
532
  * @static
533
  *
534
+ * @param boolean $isAllowed
535
+ * @param string $host
536
+ * @param string $url
537
  *
538
  * @return boolean
539
  */
545
 
546
  return $isAllowed;
547
  }
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
548
  }
EmbedPress/CoreLegacy.php ADDED
@@ -0,0 +1,415 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <?php
2
+
3
+ namespace EmbedPress;
4
+
5
+ use EmbedPress\Ends\Back\Handler as EndHandlerAdmin;
6
+ use EmbedPress\Ends\Front\Handler as EndHandlerPublic;
7
+
8
+ (defined('ABSPATH') && defined('EMBEDPRESS_IS_LOADED')) or die("No direct script access allowed.");
9
+
10
+ /**
11
+ * Entity that glues together all pieces that the plugin is made of, for WordPress before 5.0.
12
+ *
13
+ * @package EmbedPress
14
+ * @author EmbedPress <help@embedpress.com>
15
+ * @copyright Copyright (C) 2018 EmbedPress. All rights reserved.
16
+ * @license GPLv2 or later
17
+ * @since 1.0.0
18
+ */
19
+ class CoreLegacy
20
+ {
21
+ /**
22
+ * The name of the plugin.
23
+ *
24
+ * @since 1.0.0
25
+ * @access protected
26
+ *
27
+ * @var string $pluginName The name of the plugin.
28
+ */
29
+ protected $pluginName;
30
+
31
+ /**
32
+ * The version of the plugin.
33
+ *
34
+ * @since 1.0.0
35
+ * @access protected
36
+ *
37
+ * @var string $pluginVersion The version of the plugin.
38
+ */
39
+ protected $pluginVersion;
40
+
41
+ /**
42
+ * An instance of the plugin loader.
43
+ *
44
+ * @since 1.0.0
45
+ * @access protected
46
+ *
47
+ * @var \EmbedPress\Loader $pluginVersion The version of the plugin.
48
+ */
49
+ protected $loaderInstance;
50
+
51
+ /**
52
+ * An associative array storing all registered/active EmbedPress plugins and their namespaces.
53
+ *
54
+ * @since 1.4.0
55
+ * @access private
56
+ * @static
57
+ *
58
+ * @var array
59
+ */
60
+ private static $plugins = [];
61
+
62
+ /**
63
+ * Initialize the plugin and set its properties.
64
+ *
65
+ * @since 1.0.0
66
+ *
67
+ * @return void
68
+ */
69
+ public function __construct()
70
+ {
71
+ $this->pluginName = EMBEDPRESS_PLG_NAME;
72
+ $this->pluginVersion = EMBEDPRESS_VERSION;
73
+
74
+ $this->loaderInstance = new Loader();
75
+ }
76
+
77
+ /**
78
+ * Method that retrieves the plugin name.
79
+ *
80
+ * @since 1.0.0
81
+ *
82
+ * @return string
83
+ */
84
+ public function getPluginName()
85
+ {
86
+ return $this->pluginName;
87
+ }
88
+
89
+ /**
90
+ * Method that retrieves the plugin version.
91
+ *
92
+ * @since 1.0.0
93
+ *
94
+ * @return string
95
+ */
96
+ public function getPluginVersion()
97
+ {
98
+ return $this->pluginVersion;
99
+ }
100
+
101
+ /**
102
+ * Method that retrieves the loader instance.
103
+ *
104
+ * @since 1.0.0
105
+ *
106
+ * @return \EmbedPress\Loader
107
+ */
108
+ public function getLoader()
109
+ {
110
+ return $this->loaderInstance;
111
+ }
112
+
113
+ /**
114
+ * Method responsible to connect all required hooks in order to make the plugin work.
115
+ *
116
+ * @since 1.0.0
117
+ *
118
+ * @return void
119
+ */
120
+ public function initialize()
121
+ {
122
+ global $wp_actions;
123
+
124
+ if (is_admin()) {
125
+ $plgSettings = self::getSettings();
126
+
127
+ $settingsClassNamespace = '\\EmbedPress\\Ends\\Back\\Settings';
128
+ add_action('admin_menu', [$settingsClassNamespace, 'registerMenuItem']);
129
+ add_action('admin_init', [$settingsClassNamespace, 'registerActions']);
130
+ unset($settingsClassNamespace);
131
+
132
+ add_filter('plugin_action_links_embedpress/embedpress.php',
133
+ ['\\EmbedPress\\CoreLegacy', 'handleActionLinks'], 10, 2);
134
+
135
+ add_action('admin_enqueue_scripts', ['\\EmbedPress\\Ends\\Back\\Handler', 'enqueueStyles']);
136
+
137
+ add_action('init', ['\\EmbedPress\\DisablerLegacy', 'run'], 1);
138
+ add_action('init', [$this, 'configureTinyMCE'], 1);
139
+
140
+ $plgHandlerAdminInstance = new EndHandlerAdmin($this->getPluginName(), $this->getPluginVersion());
141
+
142
+ if ((bool)$plgSettings->enablePluginInAdmin) {
143
+ $this->loaderInstance->add_action('admin_enqueue_scripts', $plgHandlerAdminInstance, 'enqueueScripts');
144
+ }
145
+
146
+ $onAjaxCallbackName = "doShortcodeReceivedViaAjax";
147
+ $this->loaderInstance->add_action('wp_ajax_embedpress_do_ajax_request', $plgHandlerAdminInstance,
148
+ $onAjaxCallbackName);
149
+ $this->loaderInstance->add_action('wp_ajax_nopriv_embedpress_do_ajax_request', $plgHandlerAdminInstance,
150
+ $onAjaxCallbackName);
151
+
152
+ $this->loaderInstance->add_action('wp_ajax_embedpress_get_embed_url_info', $plgHandlerAdminInstance,
153
+ "getUrlInfoViaAjax");
154
+
155
+ unset($onAjaxCallbackName, $plgHandlerAdminInstance);
156
+ } else {
157
+ add_action('init', ['\\EmbedPress\\DisablerLegacy', 'run'], 1);
158
+
159
+ $plgHandlerPublicInstance = new EndHandlerPublic($this->getPluginName(), $this->getPluginVersion());
160
+
161
+ $this->loaderInstance->add_action('wp_enqueue_scripts', $plgHandlerPublicInstance, 'enqueueScripts');
162
+ $this->loaderInstance->add_action('wp_enqueue_scripts', $plgHandlerPublicInstance, 'enqueueStyles');
163
+
164
+ unset($plgHandlerPublicInstance);
165
+ }
166
+
167
+ // Add support for embeds on AMP pages
168
+ add_filter('pp_embed_parsed_content', ['\\EmbedPress\\AMP\\EmbedHandler', 'processParsedContent'], 10, 3);
169
+
170
+ // Add support for our embeds on Beaver Builder. Without this it only run the native embeds.
171
+ add_filter('fl_builder_before_render_shortcodes',
172
+ ['\\EmbedPress\\ThirdParty\\BeaverBuilder', 'before_render_shortcodes']);
173
+
174
+ $this->loaderInstance->run();
175
+ }
176
+
177
+ /**
178
+ * Callback called right after the plugin has been activated.
179
+ *
180
+ * @since 1.0.0
181
+ * @static
182
+ *
183
+ * @return void
184
+ */
185
+ public static function onPluginActivationCallback()
186
+ {
187
+ add_filter('rewrite_rules_array', ['\\EmbedPress\\DisablerLegacy', 'disableDefaultEmbedRewriteRules']);
188
+ flush_rewrite_rules();
189
+ }
190
+
191
+ /**
192
+ * Callback called right after the plugin has been deactivated.
193
+ *
194
+ * @since 1.0.0
195
+ * @static
196
+ *
197
+ * @return void
198
+ */
199
+ public static function onPluginDeactivationCallback()
200
+ {
201
+ remove_filter('rewrite_rules_array', ['\\EmbedPress\\DisablerLegacy', 'disableDefaultEmbedRewriteRules']);
202
+ flush_rewrite_rules();
203
+ }
204
+
205
+ /**
206
+ * Method that retrieves all additional service providers defined in the ~<plugin_root_path>/providers.php file.
207
+ *
208
+ * @since 1.0.0
209
+ * @static
210
+ *
211
+ * @return array
212
+ */
213
+ public static function getAdditionalServiceProviders()
214
+ {
215
+ $additionalProvidersFilePath = EMBEDPRESS_PATH_BASE . 'providers.php';
216
+ if (file_exists($additionalProvidersFilePath)) {
217
+ include $additionalProvidersFilePath;
218
+
219
+ if (isset($additionalServiceProviders)) {
220
+ return $additionalServiceProviders;
221
+ }
222
+ }
223
+
224
+ return [];
225
+ }
226
+
227
+ /**
228
+ * Method that checks if an embed of a given service provider can be responsive.
229
+ *
230
+ * @since 1.0.0
231
+ * @static
232
+ *
233
+ * @param string $serviceProviderAlias The service's slug.
234
+ *
235
+ * @return boolean
236
+ */
237
+ public static function canServiceProviderBeResponsive($serviceProviderAlias)
238
+ {
239
+ $providers = [
240
+
241
+ ];
242
+
243
+ return in_array($serviceProviderAlias, [
244
+ "dailymotion",
245
+ "kickstarter",
246
+ "rutube",
247
+ "ted",
248
+ "vimeo",
249
+ "youtube",
250
+ "ustream",
251
+ "google-docs",
252
+ "animatron",
253
+ "amcharts",
254
+ "on-aol-com",
255
+ "animoto",
256
+ "videojug",
257
+ 'issuu',
258
+ ]);
259
+ }
260
+
261
+ /**
262
+ * Method that retrieves the plugin settings defined by the user.
263
+ *
264
+ * @since 1.0.0
265
+ * @static
266
+ *
267
+ * @return object
268
+ */
269
+ public static function getSettings()
270
+ {
271
+ $settings = get_option(EMBEDPRESS_PLG_NAME);
272
+
273
+ if ( ! isset($settings['enablePluginInAdmin'])) {
274
+ $settings['enablePluginInAdmin'] = true;
275
+ }
276
+
277
+ if ( ! isset($settings['enablePluginInFront'])) {
278
+ $settings['enablePluginInFront'] = true;
279
+ }
280
+
281
+ return (object)$settings;
282
+ }
283
+
284
+ /**
285
+ * Method that register an EmbedPress plugin.
286
+ *
287
+ * @since 1.4.0
288
+ * @static
289
+ *
290
+ * @param array $pluginMeta Associative array containing plugin's name, slug and namespace
291
+ *
292
+ * @return void
293
+ */
294
+ public static function registerPlugin($pluginMeta)
295
+ {
296
+ $pluginMeta = json_decode(json_encode($pluginMeta));
297
+
298
+ if (empty($pluginMeta->name) || empty($pluginMeta->slug) || empty($pluginMeta->namespace)) {
299
+ return;
300
+ }
301
+
302
+ if ( ! isset(self::$plugins[$pluginMeta->slug])) {
303
+ AutoLoader::register($pluginMeta->namespace,
304
+ WP_PLUGIN_DIR . '/' . EMBEDPRESS_PLG_NAME . '-' . $pluginMeta->slug . '/' . $pluginMeta->name);
305
+
306
+ $plugin = "{$pluginMeta->namespace}\Plugin";
307
+ if (\defined("{$plugin}::SLUG") && $plugin::SLUG !== null) {
308
+ self::$plugins[$pluginMeta->slug] = $pluginMeta->namespace;
309
+
310
+ $bsFilePath = $plugin::PATH . EMBEDPRESS_PLG_NAME . '-' . $plugin::SLUG . '.php';
311
+
312
+ register_activation_hook($bsFilePath, [$plugin::NAMESPACE_STRING, 'onActivationCallback']);
313
+ register_deactivation_hook($bsFilePath, [$plugin::NAMESPACE_STRING, 'onDeactivationCallback']);
314
+
315
+ add_action('admin_init', [$plugin, 'onLoadAdminCallback']);
316
+
317
+ add_action(EMBEDPRESS_PLG_NAME . ':' . $plugin::SLUG . ':settings:register',
318
+ [$plugin, 'registerSettings']);
319
+ add_action(EMBEDPRESS_PLG_NAME . ':settings:render:tab', [$plugin, 'renderTab']);
320
+
321
+ add_filter('plugin_action_links_embedpress-' . $plugin::SLUG . '/embedpress-' . $plugin::SLUG . '.php',
322
+ [$plugin, 'handleActionLinks'], 10, 2);
323
+
324
+ $plugin::registerEvents();
325
+ }
326
+ }
327
+ }
328
+
329
+ /**
330
+ * Retrieve all registered plugins.
331
+ *
332
+ * @since 1.4.0
333
+ * @static
334
+ *
335
+ * @return array
336
+ */
337
+ public static function getPlugins()
338
+ {
339
+ return self::$plugins;
340
+ }
341
+
342
+ /**
343
+ * Handle links displayed below the plugin name in the WordPress Installed Plugins page.
344
+ *
345
+ * @since 1.4.0
346
+ * @static
347
+ *
348
+ * @return array
349
+ */
350
+ public static function handleActionLinks($links, $file)
351
+ {
352
+ $settingsLink = '<a href="' . admin_url('admin.php?page=embedpress') . '" aria-label="' . __('Open settings page',
353
+ 'embedpress') . '">' . __('Settings', 'embedpress') . '</a>';
354
+
355
+ array_unshift($links, $settingsLink);
356
+
357
+ return $links;
358
+ }
359
+
360
+ /**
361
+ * Method that ensures the API's url are whitelisted to WordPress external requests.
362
+ *
363
+ * @since 1.4.0
364
+ * @static
365
+ *
366
+ * @param boolean $isAllowed
367
+ * @param string $host
368
+ * @param string $url
369
+ *
370
+ * @return boolean
371
+ */
372
+ public static function allowApiHost($isAllowed, $host, $url)
373
+ {
374
+ if ($host === EMBEDPRESS_LICENSES_API_HOST) {
375
+ $isAllowed = true;
376
+ }
377
+
378
+ return $isAllowed;
379
+ }
380
+
381
+ /**
382
+ * Add filters to configure the TinyMCE editor.
383
+ *
384
+ * @since 1.6.2
385
+ */
386
+ public function configureTinyMCE()
387
+ {
388
+ add_filter('teeny_mce_before_init', [$this, 'hookOnPaste']);
389
+ add_filter('tiny_mce_before_init', [$this, 'hookOnPaste']);
390
+ }
391
+
392
+ /**
393
+ * Hook the onPaste methof to the paste_preprocess config in the editor.
394
+ *
395
+ * @since 1.6.2
396
+ *
397
+ * @param array $mceInit
398
+ *
399
+ * @return array
400
+ */
401
+ public function hookOnPaste($mceInit)
402
+ {
403
+ $settings = self::getSettings();
404
+
405
+ if (isset($settings->enablePluginInAdmin) && $settings->enablePluginInAdmin) {
406
+ // We hook here because the onPaste is sometimes called after the content was already added to the editor.
407
+ // If you copy text from the editor and paste there, it will give no way to use a normal onPaste event hook
408
+ // to modify the input since it was already injected.
409
+ $mceInit['paste_preprocess'] = 'function (plugin, args) {EmbedPress.onPaste(plugin, args);}';
410
+ }
411
+
412
+
413
+ return $mceInit;
414
+ }
415
+ }
EmbedPress/{Disabler.php → DisablerLegacy.php} RENAMED
@@ -1,7 +1,6 @@
1
  <?php
2
- namespace EmbedPress;
3
 
4
- use \EmbedPress\Shortcode;
5
 
6
  (defined('ABSPATH') && defined('EMBEDPRESS_IS_LOADED')) or die("No direct script access allowed.");
7
 
@@ -14,7 +13,7 @@ use \EmbedPress\Shortcode;
14
  * @license GPLv2 or later
15
  * @since 1.0.0
16
  */
17
- class Disabler
18
  {
19
  /**
20
  * Method that replaces the embed shortcodes.
@@ -31,7 +30,8 @@ class Disabler
31
  }
32
 
33
  /**
34
- * Disable all actions/filters related to the embed. This is required to make sure our "shortcode" overrides the WordPress one.
 
35
  *
36
  * @since 1.0.0
37
  * @access protected
@@ -44,7 +44,7 @@ class Disabler
44
  global $wp, $wp_embed;
45
 
46
  // Remove the embed query var.
47
- $wp->public_query_vars = array_diff($wp->public_query_vars, array("embed"));
48
 
49
  // Remove the REST API endpoint.
50
  remove_action('rest_api_init', 'wp_oembed_register_route');
@@ -62,7 +62,7 @@ class Disabler
62
  remove_action('wp_head', 'wp_oembed_add_host_js');
63
 
64
  // Disable all TinyMCE plugins embed-related.
65
- add_filter('tiny_mce_plugins', array('\EmbedPress\Disabler', 'disableDefaultEmbedTinyMCERelatedPlugins'));
66
 
67
  remove_action('rest_api_init', 'wp_oembed_register_route');
68
 
@@ -77,26 +77,26 @@ class Disabler
77
  wp_embed_unregister_handler("googlevideo");
78
 
79
  // Remove all embeds rewrite rules.
80
- add_filter('rewrite_rules_array', array('\EmbedPress\Disabler', 'disableDefaultEmbedRewriteRules'));
81
 
82
  // Disable the method that determines if default embed handlers should be loaded.
83
  add_filter('wp_maybe_load_embeds', '__return_false');
84
 
85
  // Disable the method that transform any URL from content to {@link WP_Embed::shortcode()}.
86
- remove_filter('the_content', array($wp_embed, 'run_shortcode'), 8);
87
- remove_filter('the_content', array($wp_embed, 'autoembed'), 8);
88
 
89
  // Remove {@link WP_Embed::shortcode()} from execution.
90
  remove_shortcode(EMBEDPRESS_SHORTCODE);
91
 
92
  // Attempts to embed all URLs in a post.
93
- add_filter('the_content', array('\EmbedPress\Ends\Front\Handler', 'autoEmbedUrls'));
94
 
95
  wp_deregister_script('wp-embed');
96
 
97
- add_filter('http_request_host_is_external', array('\EmbedPress\Core', 'allowApiHost'), 10, 3);
98
 
99
- add_action('tiny_mce_before_init', array('\EmbedPress\Ends\Front\Handler', 'renderPreviewBoxInEditors'));
100
  }
101
 
102
  /**
@@ -105,7 +105,8 @@ class Disabler
105
  * @since 1.0.0
106
  * @static
107
  *
108
- * @param array $rules WordPress rewrite rules.
 
109
  * @return array
110
  */
111
  public static function disableDefaultEmbedRewriteRules($rules)
@@ -127,12 +128,13 @@ class Disabler
127
  * @since 1.0.0
128
  * @static
129
  *
130
- * @param array $plugins An array containing enabled plugins.
 
131
  * @return array
132
  */
133
  public static function disableDefaultEmbedTinyMCERelatedPlugins($plugins)
134
  {
135
- $blackListedPlugins = array("wpembed", "wpview");
136
 
137
  return array_diff($plugins, $blackListedPlugins);
138
  }
1
  <?php
 
2
 
3
+ namespace EmbedPress;
4
 
5
  (defined('ABSPATH') && defined('EMBEDPRESS_IS_LOADED')) or die("No direct script access allowed.");
6
 
13
  * @license GPLv2 or later
14
  * @since 1.0.0
15
  */
16
+ class DisablerLegacy
17
  {
18
  /**
19
  * Method that replaces the embed shortcodes.
30
  }
31
 
32
  /**
33
+ * Disable all actions/filters related to the embed. This is required to make sure our "shortcode" overrides the
34
+ * WordPress one.
35
  *
36
  * @since 1.0.0
37
  * @access protected
44
  global $wp, $wp_embed;
45
 
46
  // Remove the embed query var.
47
+ $wp->public_query_vars = array_diff($wp->public_query_vars, ["embed"]);
48
 
49
  // Remove the REST API endpoint.
50
  remove_action('rest_api_init', 'wp_oembed_register_route');
62
  remove_action('wp_head', 'wp_oembed_add_host_js');
63
 
64
  // Disable all TinyMCE plugins embed-related.
65
+ add_filter('tiny_mce_plugins', ['\\EmbedPress\\DisablerLegacy', 'disableDefaultEmbedTinyMCERelatedPlugins']);
66
 
67
  remove_action('rest_api_init', 'wp_oembed_register_route');
68
 
77
  wp_embed_unregister_handler("googlevideo");
78
 
79
  // Remove all embeds rewrite rules.
80
+ add_filter('rewrite_rules_array', ['\\EmbedPress\\DisablerLegacy', 'disableDefaultEmbedRewriteRules']);
81
 
82
  // Disable the method that determines if default embed handlers should be loaded.
83
  add_filter('wp_maybe_load_embeds', '__return_false');
84
 
85
  // Disable the method that transform any URL from content to {@link WP_Embed::shortcode()}.
86
+ remove_filter('the_content', [$wp_embed, 'run_shortcode'], 8);
87
+ remove_filter('the_content', [$wp_embed, 'autoembed'], 8);
88
 
89
  // Remove {@link WP_Embed::shortcode()} from execution.
90
  remove_shortcode(EMBEDPRESS_SHORTCODE);
91
 
92
  // Attempts to embed all URLs in a post.
93
+ add_filter('the_content', ['\\EmbedPress\\Ends\\Front\\Handler', 'autoEmbedUrls']);
94
 
95
  wp_deregister_script('wp-embed');
96
 
97
+ add_filter('http_request_host_is_external', ['\\EmbedPress\\CoreLegacy', 'allowApiHost'], 10, 3);
98
 
99
+ add_action('tiny_mce_before_init', ['\\EmbedPress\\Ends\\Front\\Handler', 'renderPreviewBoxInEditors']);
100
  }
101
 
102
  /**
105
  * @since 1.0.0
106
  * @static
107
  *
108
+ * @param array $rules WordPress rewrite rules.
109
+ *
110
  * @return array
111
  */
112
  public static function disableDefaultEmbedRewriteRules($rules)
128
  * @since 1.0.0
129
  * @static
130
  *
131
+ * @param array $plugins An array containing enabled plugins.
132
+ *
133
  * @return array
134
  */
135
  public static function disableDefaultEmbedTinyMCERelatedPlugins($plugins)
136
  {
137
+ $blackListedPlugins = ["wpembed", "wpview"];
138
 
139
  return array_diff($plugins, $blackListedPlugins);
140
  }
EmbedPress/Ends/Back/Handler.php CHANGED
@@ -1,10 +1,11 @@
1
  <?php
 
2
  namespace EmbedPress\Ends\Back;
3
 
4
- use \EmbedPress\Ends\Handler as EndHandlerAbstract;
5
- use \EmbedPress\Shortcode;
6
- use \EmbedPress\Core;
7
- use \Embera\Embera;
8
 
9
  (defined('ABSPATH') && defined('EMBEDPRESS_IS_LOADED')) or die("No direct script access allowed.");
10
 
@@ -34,28 +35,32 @@ class Handler extends EndHandlerAbstract
34
 
35
  $urlSchemes = apply_filters('embedpress:getAdditionalURLSchemes', $this->getUrlSchemes());
36
 
37
- wp_enqueue_script("bootbox-bootstrap", EMBEDPRESS_URL_ASSETS .'js/vendor/bootstrap/bootstrap.min.js', array('jquery'), $this->pluginVersion, true);
38
- wp_enqueue_script("bootbox", EMBEDPRESS_URL_ASSETS .'js/vendor/bootbox.min.js', array('jquery', 'bootbox-bootstrap'), $this->pluginVersion, true);
39
- wp_enqueue_script($this->pluginName, EMBEDPRESS_URL_ASSETS .'js/preview.js', array('jquery', 'bootbox'), $this->pluginVersion, true);
40
- wp_localize_script($this->pluginName, '$data', array(
41
- 'previewSettings' => array(
42
- 'baseUrl' => get_site_url() .'/',
 
 
 
43
  'versionUID' => $this->pluginVersion,
44
- 'debug' => true
45
- ),
46
  'EMBEDPRESS_SHORTCODE' => EMBEDPRESS_SHORTCODE,
47
  'EMBEDPRESS_URL_ASSETS' => EMBEDPRESS_URL_ASSETS,
48
- 'urlSchemes' => $urlSchemes
49
- ));
50
 
51
  $installedPlugins = Core::getPlugins();
52
  if (count($installedPlugins) > 0) {
53
  foreach ($installedPlugins as $plgSlug => $plgNamespace) {
54
  $plgScriptPathRelative = "assets/js/embedpress.{$plgSlug}.js";
55
- $plgName = "embedpress-{$plgSlug}";
56
 
57
  if (file_exists(WP_PLUGIN_DIR . "/{$plgName}/{$plgScriptPathRelative}")) {
58
- wp_enqueue_script($plgName, plugins_url($plgName) .'/'. $plgScriptPathRelative, array($this->pluginName), $this->pluginVersion, true);
 
59
  }
60
  }
61
  }
@@ -86,9 +91,9 @@ class Handler extends EndHandlerAbstract
86
  {
87
  $subject = isset($_POST['subject']) ? $_POST['subject'] : "";
88
 
89
- $response = array(
90
- 'data' => Shortcode::parseContent($subject, true)
91
- );
92
 
93
  header('Content-Type:application/json;charset=UTF-8');
94
  echo json_encode($response);
@@ -107,16 +112,16 @@ class Handler extends EndHandlerAbstract
107
  {
108
  $url = isset($_GET['url']) ? trim($_GET['url']) : "";
109
 
110
- $response = array(
111
  'url' => $url,
112
- 'canBeResponsive' => false
113
- );
114
 
115
- if (!!strlen($response['url'])) {
116
  $embera = new Embera();
117
 
118
  $additionalServiceProviders = Core::getAdditionalServiceProviders();
119
- if (!empty($additionalServiceProviders)) {
120
  foreach ($additionalServiceProviders as $serviceProviderClassName => $serviceProviderUrls) {
121
  Shortcode::addServiceProvider($serviceProviderClassName, $serviceProviderUrls, $embera);
122
  }
@@ -124,7 +129,7 @@ class Handler extends EndHandlerAbstract
124
 
125
  $urlInfo = $embera->getUrlInfo($response['url']);
126
  if (isset($urlInfo[$response['url']])) {
127
- $urlInfo = (object)$urlInfo[$response['url']];
128
  $response['canBeResponsive'] = Core::canServiceProviderBeResponsive($urlInfo->provider_alias);
129
  }
130
  }
@@ -142,7 +147,7 @@ class Handler extends EndHandlerAbstract
142
  */
143
  public function getUrlSchemes()
144
  {
145
- return array(
146
  // PollDaddy
147
  '*.polldaddy.com/s/*',
148
  '*.polldaddy.com/poll/*',
@@ -355,7 +360,7 @@ class Handler extends EndHandlerAbstract
355
  'gist.github.com/*/*',
356
 
357
  // http://issuu.com
358
- 'issuu.com/*',
359
 
360
  // https://portfolium.com
361
  'portfolium.com/*',
@@ -406,7 +411,7 @@ class Handler extends EndHandlerAbstract
406
 
407
  // Wistia
408
  '*.wistia.com/medias/*',
409
- 'fast.wistia.com/embed/medias/*.jsonp'
410
- );
411
  }
412
  }
1
  <?php
2
+
3
  namespace EmbedPress\Ends\Back;
4
 
5
+ use EmbedPress\Core;
6
+ use EmbedPress\Ends\Handler as EndHandlerAbstract;
7
+ use EmbedPress\Shortcode;
8
+ use Embera\Embera;
9
 
10
  (defined('ABSPATH') && defined('EMBEDPRESS_IS_LOADED')) or die("No direct script access allowed.");
11
 
35
 
36
  $urlSchemes = apply_filters('embedpress:getAdditionalURLSchemes', $this->getUrlSchemes());
37
 
38
+ wp_enqueue_script("bootbox-bootstrap", EMBEDPRESS_URL_ASSETS . 'js/vendor/bootstrap/bootstrap.min.js',
39
+ ['jquery'], $this->pluginVersion, true);
40
+ wp_enqueue_script("bootbox", EMBEDPRESS_URL_ASSETS . 'js/vendor/bootbox.min.js',
41
+ ['jquery', 'bootbox-bootstrap'], $this->pluginVersion, true);
42
+ wp_enqueue_script($this->pluginName, EMBEDPRESS_URL_ASSETS . 'js/preview.js', ['jquery', 'bootbox'],
43
+ $this->pluginVersion, true);
44
+ wp_localize_script($this->pluginName, '$data', [
45
+ 'previewSettings' => [
46
+ 'baseUrl' => get_site_url() . '/',
47
  'versionUID' => $this->pluginVersion,
48
+ 'debug' => true,
49
+ ],
50
  'EMBEDPRESS_SHORTCODE' => EMBEDPRESS_SHORTCODE,
51
  'EMBEDPRESS_URL_ASSETS' => EMBEDPRESS_URL_ASSETS,
52
+ 'urlSchemes' => $urlSchemes,
53
+ ]);
54
 
55
  $installedPlugins = Core::getPlugins();
56
  if (count($installedPlugins) > 0) {
57
  foreach ($installedPlugins as $plgSlug => $plgNamespace) {
58
  $plgScriptPathRelative = "assets/js/embedpress.{$plgSlug}.js";
59
+ $plgName = "embedpress-{$plgSlug}";
60
 
61
  if (file_exists(WP_PLUGIN_DIR . "/{$plgName}/{$plgScriptPathRelative}")) {
62
+ wp_enqueue_script($plgName, plugins_url($plgName) . '/' . $plgScriptPathRelative,
63
+ [$this->pluginName], $this->pluginVersion, true);
64
  }
65
  }
66
  }
91
  {
92
  $subject = isset($_POST['subject']) ? $_POST['subject'] : "";
93
 
94
+ $response = [
95
+ 'data' => Shortcode::parseContent($subject, true),
96
+ ];
97
 
98
  header('Content-Type:application/json;charset=UTF-8');
99
  echo json_encode($response);
112
  {
113
  $url = isset($_GET['url']) ? trim($_GET['url']) : "";
114
 
115
+ $response = [
116
  'url' => $url,
117
+ 'canBeResponsive' => false,
118
+ ];
119
 
120
+ if ( ! ! strlen($response['url'])) {
121
  $embera = new Embera();
122
 
123
  $additionalServiceProviders = Core::getAdditionalServiceProviders();
124
+ if ( ! empty($additionalServiceProviders)) {
125
  foreach ($additionalServiceProviders as $serviceProviderClassName => $serviceProviderUrls) {
126
  Shortcode::addServiceProvider($serviceProviderClassName, $serviceProviderUrls, $embera);
127
  }
129
 
130
  $urlInfo = $embera->getUrlInfo($response['url']);
131
  if (isset($urlInfo[$response['url']])) {
132
+ $urlInfo = (object)$urlInfo[$response['url']];
133
  $response['canBeResponsive'] = Core::canServiceProviderBeResponsive($urlInfo->provider_alias);
134
  }
135
  }
147
  */
148
  public function getUrlSchemes()
149
  {
150
+ return [
151
  // PollDaddy
152
  '*.polldaddy.com/s/*',
153
  '*.polldaddy.com/poll/*',
360
  'gist.github.com/*/*',
361
 
362
  // http://issuu.com
363
+ 'issuu.com/*',
364
 
365
  // https://portfolium.com
366
  'portfolium.com/*',
411
 
412
  // Wistia
413
  '*.wistia.com/medias/*',
414
+ 'fast.wistia.com/embed/medias/*.jsonp',
415
+ ];
416
  }
417
  }
EmbedPress/Ends/Back/Settings.php CHANGED
@@ -1,7 +1,8 @@
1
  <?php
 
2
  namespace EmbedPress\Ends\Back;
3
 
4
- use \EmbedPress\Core;
5
 
6
  (defined('ABSPATH') && defined('EMBEDPRESS_IS_LOADED')) or die("No direct script access allowed.");
7
 
@@ -24,9 +25,9 @@ class Settings
24
  * @access private
25
  * @static
26
  *
27
- * @var string $namespace
28
  */
29
- private static $namespace = '\EmbedPress\Ends\Back\Settings';
30
 
31
  /**
32
  * The plugin's unique identifier.
@@ -35,7 +36,7 @@ class Settings
35
  * @access private
36
  * @static
37
  *
38
- * @var string $identifier
39
  */
40
  private static $identifier = "plg_embedpress";
41
 
@@ -46,7 +47,7 @@ class Settings
46
  * @access private
47
  * @static
48
  *
49
- * @var string $sectionAdminIdentifier
50
  */
51
  private static $sectionAdminIdentifier = "embedpress_options_admin";
52
 
@@ -57,41 +58,18 @@ class Settings
57
  * @access private
58
  * @static
59
  *
60
- * @var string $sectionGroupIdentifier The name of the plugin.
61
  */
62
  private static $sectionGroupIdentifier = "embedpress";
63
 
64
- /**
65
- * Map to all settings.
66
- *
67
- * @since 1.0.0
68
- * @access private
69
- * @static
70
- *
71
- * @var string $fieldMap
72
- */
73
- private static $fieldMap = array(
74
- 'enablePluginInAdmin' => array(
75
- 'label' => "Load previews in the admin editor",
76
- 'section' => "admin"
77
- ),
78
- 'enablePluginInFront' => array(
79
- 'label' => "Load previews in the frontend editor",
80
- 'section' => "admin"
81
- ),
82
- 'forceFacebookLanguage' => array(
83
- 'label' => "Facebook embed language",
84
- 'section' => "admin"
85
- )
86
- );
87
-
88
  /**
89
  * Class constructor. This prevents the class being directly instantiated.
90
  *
91
  * @since 1.0.0
92
  */
93
  public function __construct()
94
- {}
 
95
 
96
  /**
97
  * This prevents the class being cloned.
@@ -99,7 +77,8 @@ class Settings
99
  * @since 1.0.0
100
  */
101
  public function __clone()
102
- {}
 
103
 
104
  /**
105
  * Method that adds an sub-item for EmbedPress to the WordPress Settings menu.
@@ -109,7 +88,8 @@ class Settings
109
  */
110
  public static function registerMenuItem()
111
  {
112
- add_menu_page('EmbedPress Settings', 'EmbedPress', 'manage_options', 'embedpress', array(self::$namespace, 'renderForm'), null, 64);
 
113
  }
114
 
115
  /**
@@ -127,18 +107,39 @@ class Settings
127
  $activeTab = "";
128
  }
129
 
130
- if (!empty($activeTab) && has_action($action)) {
131
- do_action($action, array(
132
  'id' => self::$sectionAdminIdentifier,
133
- 'slug' => self::$identifier
134
- ));
135
  } else {
136
- register_setting(self::$sectionGroupIdentifier, self::$sectionGroupIdentifier, array(self::$namespace, "validateForm"));
 
137
 
138
  add_settings_section(self::$sectionAdminIdentifier, '', null, self::$identifier);
139
 
140
- foreach (self::$fieldMap as $fieldName => $field) {
141
- add_settings_field($fieldName, $field['label'], array(self::$namespace, "renderField_{$fieldName}"), self::$identifier, self::${"section". ucfirst($field['section']) ."Identifier"});
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
142
  }
143
  }
144
  }
@@ -146,23 +147,25 @@ class Settings
146
  /**
147
  * Returns true if the plugin is active
148
  *
149
- * @param string $plugin
150
  *
151
  * @return boolean
152
  */
153
- protected static function is_plugin_active( $plugin ) {
154
- return is_plugin_active( "{$plugin}/{$plugin}.php" );
 
155
  }
156
 
157
  /**
158
  * Returns true if the plugin is installed
159
  *
160
- * @param string $plugin
161
  *
162
  * @return boolean
163
  */
164
- protected static function is_plugin_installed( $plugin ) {
165
- return file_exists( plugin_dir_path( EMBEDPRESS_ROOT ) . "{$plugin}/{$plugin}.php" );
 
166
  }
167
 
168
  /**
@@ -176,16 +179,18 @@ class Settings
176
  // Add the color picker css file
177
  wp_enqueue_style('wp-color-picker');
178
  // Include our custom jQuery file with WordPress Color Picker dependency
179
- wp_enqueue_script('ep-settings', EMBEDPRESS_URL_ASSETS .'js/settings.js', array('wp-color-picker'), EMBEDPRESS_PLG_VERSION, true);
 
180
 
181
- $activeTab = isset($_GET['tab']) ? strtolower($_GET['tab']) : "";
182
- $settingsFieldsIdentifier = !empty($activeTab) ? "embedpress:{$activeTab}" : self::$sectionGroupIdentifier;
183
- $settingsSectionsIdentifier = !empty($activeTab) ? "embedpress:{$activeTab}" : self::$identifier;
184
  ?>
185
  <div id="embedpress-settings-wrapper">
186
  <header>
187
  <h1 class="pressshack-title">
188
- <a href="//wordpress.org/plugins/embedpress" target="_blank" rel="noopener noreferrer" title="EmbedPress">
 
189
  EmbedPress
190
  </a>
191
  </h1>
@@ -195,13 +200,15 @@ class Settings
195
 
196
  <div>
197
  <h2 class="nav-tab-wrapper">
198
- <a href="?page=embedpress" class="nav-tab<?php echo $activeTab === 'embedpress' || empty($activeTab) ? ' nav-tab-active' : ''; ?> ">
 
199
  General settings
200
  </a>
201
 
202
  <?php do_action('embedpress:settings:render:tab', $activeTab); ?>
203
 
204
- <a href="?page=embedpress&tab=addons" class="nav-tab<?php echo $activeTab === 'addons' ? ' nav-tab-active' : ''; ?> ">
 
205
  Add-ons
206
  </a>
207
  </h2>
@@ -217,73 +224,77 @@ class Settings
217
 
218
  <?php if ($activeTab === 'addons') : ?>
219
  <?php
220
- $icons_base_path = plugins_url( 'embedpress' ) . '/assets/images/' ;
221
 
222
- $addons = array(
223
- 'embedpress-youtube' => array(
224
- 'title' => __( 'The YouTube Add-on for EmbedPress', 'embedpress' ),
225
- 'description' => __( 'Get more features for your YouTube embeds in WordPress.', 'embedpress' ),
 
226
  'available' => true,
227
- 'installed' => static::is_plugin_installed( 'embedpress-youtube' ),
228
- 'active' => static::is_plugin_active( 'embedpress-youtube' ),
229
- ),
230
- 'embedpress-vimeo' => array(
231
- 'title' => __( 'The Vimeo Add-on for EmbedPress', 'embedpress' ),
232
- 'description' => __( 'Get more features for your Vimeo embeds in WordPress.', 'embedpress' ),
233
  'available' => true,
234
- 'installed' => static::is_plugin_installed( 'embedpress-vimeo' ),
235
- 'active' => static::is_plugin_active( 'embedpress-vimeo' ),
236
- ),
237
- 'embedpress-wistia' => array(
238
- 'title' => __( 'The Wistia Add-on for EmbedPress', 'embedpress' ),
239
- 'description' => __( 'Get more features for your Wistia embeds in WordPress.', 'embedpress' ),
240
  'available' => true,
241
- 'installed' => static::is_plugin_installed( 'embedpress-wistia' ),
242
- 'active' => static::is_plugin_active( 'embedpress-wistia' ),
243
- ),
244
- );
245
 
246
- $args = array(
247
  'addons' => $addons,
248
  'icons_base_path' => $icons_base_path,
249
- 'labels' => array(
250
- 'active' => __( 'Active', 'publishpress' ),
251
- 'installed' => __( 'Installed', 'publishpress' ),
252
- 'get_pro_addons' => __( 'Get Pro Add-ons!', 'publishpress' ),
253
- 'coming_soon' => __( 'Coming soon', 'publishpress' ),
254
- ),
255
- );
256
 
257
  ?>
258
  <div class="ep-module-settings">
259
  <ul class="ep-block-addons-items">
260
- <?php foreach ( $addons as $name => $addon ): ?>
261
- <li class="ep-block-addons-item ">
262
- <img src="<?php echo $icons_base_path . $name; ?>.jpg">
263
- <h3><?php echo $addon['title']; ?></h3>
264
- <p><?php echo $addon['description']; ?></p>
265
-
266
- <?php if ( $addon['available'] ): ?>
267
- <?php if ( $addon['installed'] ): ?>
268
- <?php if ( $addon['active'] ): ?>
269
- <div>
270
- <span class="dashicons dashicons-yes"></span><span><?php echo __( 'Active', 'embedpress' ); ?></span>
271
- </div>
 
 
 
 
 
 
272
  <?php else: ?>
273
- <div>
274
- <span><?php echo __( 'Installed', 'embedpress' ); ?></span>
275
- </div>
 
 
276
  <?php endif; ?>
277
  <?php else: ?>
278
- <a href="https://embedpress.com/embedpress-addons/" class="button button-primary">
279
- <span class="dashicons dashicons-cart"></span> <?php echo __( 'Get Pro Add-ons!', 'embedpress' ); ?>
280
- </a>
281
  <?php endif; ?>
282
- <?php else: ?>
283
- <div><?php echo __( 'Coming soon', 'embedpress' ); ?></div>
284
- <?php endif; ?>
285
- </li>
286
- <?php endforeach; ?>
287
  </ul>
288
  </div>
289
  <?php endif; ?>
@@ -291,25 +302,36 @@ class Settings
291
 
292
  <footer>
293
  <p>
294
- <a href="//wordpress.org/support/plugin/embedpress/reviews/#new-post" target="_blank" rel="noopener noreferrer">If you like <strong>EmbedPress</strong> please leave us a <span class="dashicons dashicons-star-filled"></span><span class="dashicons dashicons-star-filled"></span><span class="dashicons dashicons-star-filled"></span><span class="dashicons dashicons-star-filled"></span><span class="dashicons dashicons-star-filled"></span> rating. Thank you!</a>
 
 
 
 
 
 
295
  </p>
296
  <hr>
297
  <nav>
298
  <ul>
299
  <li>
300
- <a href="//embedpress.com" target="_blank" rel="noopener noreferrer" title="About EmbedPress">About</a>
 
301
  </li>
302
  <li>
303
- <a href="//embedpress.com/docs/sources-support" target="_blank" rel="noopener noreferrer" title="List of supported sources by EmbedPress">Supported sources</a>
 
304
  </li>
305
  <li>
306
- <a href="//embedpress.com/docs" target="_blank" rel="noopener noreferrer" title="EmbedPress Documentation">Documentation</a>
 
307
  </li>
308
  <li>
309
- <a href="//embedpress.com/addons/" target="_blank" rel="noopener noreferrer" title="EmbedPress Add-Ons">Add-Ons</a>
 
310
  </li>
311
  <li>
312
- <a href="//embedpress.com/contact" target="_blank" rel="noopener noreferrer" title="Contact the EmbedPress team">Contact</a>
 
313
  </li>
314
  <li>
315
  <a href="//twitter.com/embedpress" target="_blank" rel="noopener noreferrer">
@@ -339,17 +361,17 @@ class Settings
339
  * @since 1.0.0
340
  * @static
341
  *
342
- * @param mixed $freshData Data received from the form.
343
  *
344
  * @return array
345
  */
346
  public static function validateForm($freshData)
347
  {
348
- $data = array(
349
- 'enablePluginInAdmin' => (bool)$freshData['enablePluginInAdmin'],
350
- 'enablePluginInFront' => (bool)$freshData['enablePluginInFront'],
351
- 'fbLanguage' => $freshData['fbLanguage']
352
- );
353
 
354
  return $data;
355
  }
@@ -366,11 +388,11 @@ class Settings
366
 
367
  $options = get_option(self::$sectionGroupIdentifier);
368
 
369
- $options[$fieldName] = !isset($options[$fieldName]) ? true : (bool)$options[$fieldName];
370
 
371
- echo '<label><input type="radio" id="'. $fieldName .'_0" name="'. self::$sectionGroupIdentifier .'['. $fieldName .']" value="0" '. (!$options[$fieldName] ? "checked" : "") .' /> No</label>';
372
  echo "&nbsp;&nbsp;";
373
- echo '<label><input type="radio" id="'. $fieldName .'_1" name="'. self::$sectionGroupIdentifier .'['. $fieldName .']" value="1" '. ($options[$fieldName] ? "checked" : "") .' /> Yes</label>';
374
  echo '<p class="description">Do you want EmbedPress to run here in the admin area? Disabling this <strong>will not</strong> affect your frontend embeds.</p>';
375
  }
376
 
@@ -386,11 +408,11 @@ class Settings
386
 
387
  $options = get_option(self::$sectionGroupIdentifier);
388
 
389
- $options[$fieldName] = !isset($options[$fieldName]) ? true : (bool)$options[$fieldName];
390
 
391
- echo '<label><input type="radio" id="'. $fieldName .'_0" name="'. self::$sectionGroupIdentifier .'['. $fieldName .']" value="0" '. (!$options[$fieldName] ? "checked" : "") .' /> No</label>';
392
  echo "&nbsp;&nbsp;";
393
- echo '<label><input type="radio" id="'. $fieldName .'_1" name="'. self::$sectionGroupIdentifier .'['. $fieldName .']" value="1" '. ($options[$fieldName] ? "checked" : "") .' /> Yes</label>';
394
  echo '<p class="description">Do you want EmbedPress to run within editors in frontend (if there\'s any)? Disabling this <strong>will not</strong> affect embeds seem by your regular users in frontend.</p>';
395
  }
396
 
@@ -406,15 +428,15 @@ class Settings
406
 
407
  $options = get_option(self::$sectionGroupIdentifier);
408
 
409
- $options[$fieldName] = !isset($options[$fieldName]) ? "" : $options[$fieldName];
410
 
411
  $facebookLocales = self::getFacebookAvailableLocales();
412
 
413
- echo '<select name="'. self::$sectionGroupIdentifier .'['. $fieldName .']">';
414
  echo '<option value="0">Automatic (by Facebook)</option>';
415
  echo '<optgroup label="Available">';
416
  foreach ($facebookLocales as $locale => $localeName) {
417
- echo '<option value="'. $locale .'"'. ($options[$fieldName] === $locale ? ' selected' : '') .'>'. $localeName .'</option>';
418
  }
419
  echo '</optgroup>';
420
  echo '</select>';
@@ -432,7 +454,7 @@ class Settings
432
  */
433
  public static function getFacebookAvailableLocales()
434
  {
435
- $locales = array(
436
  'af_ZA' => "Afrikaans",
437
  'ak_GH' => "Akan",
438
  'am_ET' => "Amharic",
@@ -574,8 +596,8 @@ class Settings
574
  'zh_HK' => "Traditional Chinese (Hong Kong)",
575
  'zh_TW' => "Traditional Chinese (Taiwan)",
576
  'zu_ZA' => "Zulu",
577
- 'zz_TR' => "Zazaki"
578
- );
579
 
580
  return $locales;
581
  }
1
  <?php
2
+
3
  namespace EmbedPress\Ends\Back;
4
 
5
+ use EmbedPress\Compatibility;
6
 
7
  (defined('ABSPATH') && defined('EMBEDPRESS_IS_LOADED')) or die("No direct script access allowed.");
8
 
25
  * @access private
26
  * @static
27
  *
28
+ * @var string $namespace
29
  */
30
+ private static $namespace = '\\EmbedPress\\Ends\\Back\\Settings';
31
 
32
  /**
33
  * The plugin's unique identifier.
36
  * @access private
37
  * @static
38
  *
39
+ * @var string $identifier
40
  */
41
  private static $identifier = "plg_embedpress";
42
 
47
  * @access private
48
  * @static
49
  *
50
+ * @var string $sectionAdminIdentifier
51
  */
52
  private static $sectionAdminIdentifier = "embedpress_options_admin";
53
 
58
  * @access private
59
  * @static
60
  *
61
+ * @var string $sectionGroupIdentifier The name of the plugin.
62
  */
63
  private static $sectionGroupIdentifier = "embedpress";
64
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
65
  /**
66
  * Class constructor. This prevents the class being directly instantiated.
67
  *
68
  * @since 1.0.0
69
  */
70
  public function __construct()
71
+ {
72
+ }
73
 
74
  /**
75
  * This prevents the class being cloned.
77
  * @since 1.0.0
78
  */
79
  public function __clone()
80
+ {
81
+ }
82
 
83
  /**
84
  * Method that adds an sub-item for EmbedPress to the WordPress Settings menu.
88
  */
89
  public static function registerMenuItem()
90
  {
91
+ add_menu_page('EmbedPress Settings', 'EmbedPress', 'manage_options', 'embedpress',
92
+ [self::$namespace, 'renderForm'], null, 64);
93
  }
94
 
95
  /**
107
  $activeTab = "";
108
  }
109
 
110
+ if ( ! empty($activeTab) && has_action($action)) {
111
+ do_action($action, [
112
  'id' => self::$sectionAdminIdentifier,
113
+ 'slug' => self::$identifier,
114
+ ]);
115
  } else {
116
+ register_setting(self::$sectionGroupIdentifier, self::$sectionGroupIdentifier,
117
+ [self::$namespace, "validateForm"]);
118
 
119
  add_settings_section(self::$sectionAdminIdentifier, '', null, self::$identifier);
120
 
121
+ $fieldMap = [];
122
+ if ( ! Compatibility::isWordPress5() || Compatibility::isClassicalEditorActive()) {
123
+ $fieldMap = [
124
+ 'enablePluginInAdmin' => [
125
+ 'label' => "Load previews in the admin editor",
126
+ 'section' => "admin",
127
+ ],
128
+ 'enablePluginInFront' => [
129
+ 'label' => "Load previews in the frontend editor",
130
+ 'section' => "admin",
131
+ ],
132
+ ];
133
+ }
134
+
135
+ $fieldMap['forceFacebookLanguage'] = [
136
+ 'label' => "Facebook embed language",
137
+ 'section' => "admin",
138
+ ];
139
+
140
+ foreach ($fieldMap as $fieldName => $field) {
141
+ add_settings_field($fieldName, $field['label'], [self::$namespace, "renderField_{$fieldName}"],
142
+ self::$identifier, self::${"section" . ucfirst($field['section']) . "Identifier"});
143
  }
144
  }
145
  }
147
  /**
148
  * Returns true if the plugin is active
149
  *
150
+ * @param string $plugin
151
  *
152
  * @return boolean
153
  */
154
+ protected static function is_plugin_active($plugin)
155
+ {
156
+ return is_plugin_active("{$plugin}/{$plugin}.php");
157
  }
158
 
159
  /**
160
  * Returns true if the plugin is installed
161
  *
162
+ * @param string $plugin
163
  *
164
  * @return boolean
165
  */
166
+ protected static function is_plugin_installed($plugin)
167
+ {
168
+ return file_exists(plugin_dir_path(EMBEDPRESS_ROOT) . "{$plugin}/{$plugin}.php");
169
  }
170
 
171
  /**
179
  // Add the color picker css file
180
  wp_enqueue_style('wp-color-picker');
181
  // Include our custom jQuery file with WordPress Color Picker dependency
182
+ wp_enqueue_script('ep-settings', EMBEDPRESS_URL_ASSETS . 'js/settings.js', ['wp-color-picker'],
183
+ EMBEDPRESS_VERSION, true);
184
 
185
+ $activeTab = isset($_GET['tab']) ? strtolower($_GET['tab']) : "";
186
+ $settingsFieldsIdentifier = ! empty($activeTab) ? "embedpress:{$activeTab}" : self::$sectionGroupIdentifier;
187
+ $settingsSectionsIdentifier = ! empty($activeTab) ? "embedpress:{$activeTab}" : self::$identifier;
188
  ?>
189
  <div id="embedpress-settings-wrapper">
190
  <header>
191
  <h1 class="pressshack-title">
192
+ <a href="//wordpress.org/plugins/embedpress" target="_blank" rel="noopener noreferrer"
193
+ title="EmbedPress">
194
  EmbedPress
195
  </a>
196
  </h1>
200
 
201
  <div>
202
  <h2 class="nav-tab-wrapper">
203
+ <a href="?page=embedpress"
204
+ class="nav-tab<?php echo $activeTab === 'embedpress' || empty($activeTab) ? ' nav-tab-active' : ''; ?> ">
205
  General settings
206
  </a>
207
 
208
  <?php do_action('embedpress:settings:render:tab', $activeTab); ?>
209
 
210
+ <a href="?page=embedpress&tab=addons"
211
+ class="nav-tab<?php echo $activeTab === 'addons' ? ' nav-tab-active' : ''; ?> ">
212
  Add-ons
213
  </a>
214
  </h2>
224
 
225
  <?php if ($activeTab === 'addons') : ?>
226
  <?php
227
+ $icons_base_path = plugins_url('embedpress') . '/assets/images/';
228
 
229
+ $addons = [
230
+ 'embedpress-youtube' => [
231
+ 'title' => __('The YouTube Add-on for EmbedPress', 'embedpress'),
232
+ 'description' => __('Get more features for your YouTube embeds in WordPress.',
233
+ 'embedpress'),
234
  'available' => true,
235
+ 'installed' => static::is_plugin_installed('embedpress-youtube'),
236
+ 'active' => static::is_plugin_active('embedpress-youtube'),
237
+ ],
238
+ 'embedpress-vimeo' => [
239
+ 'title' => __('The Vimeo Add-on for EmbedPress', 'embedpress'),
240
+ 'description' => __('Get more features for your Vimeo embeds in WordPress.', 'embedpress'),
241
  'available' => true,
242
+ 'installed' => static::is_plugin_installed('embedpress-vimeo'),
243
+ 'active' => static::is_plugin_active('embedpress-vimeo'),
244
+ ],
245
+ 'embedpress-wistia' => [
246
+ 'title' => __('The Wistia Add-on for EmbedPress', 'embedpress'),
247
+ 'description' => __('Get more features for your Wistia embeds in WordPress.', 'embedpress'),
248
  'available' => true,
249
+ 'installed' => static::is_plugin_installed('embedpress-wistia'),
250
+ 'active' => static::is_plugin_active('embedpress-wistia'),
251
+ ],
252
+ ];
253
 
254
+ $args = [
255
  'addons' => $addons,
256
  'icons_base_path' => $icons_base_path,
257
+ 'labels' => [
258
+ 'active' => __('Active', 'publishpress'),
259
+ 'installed' => __('Installed', 'publishpress'),
260
+ 'get_pro_addons' => __('Get Pro Add-ons!', 'publishpress'),
261
+ 'coming_soon' => __('Coming soon', 'publishpress'),
262
+ ],
263
+ ];
264
 
265
  ?>
266
  <div class="ep-module-settings">
267
  <ul class="ep-block-addons-items">
268
+ <?php foreach ($addons as $name => $addon): ?>
269
+ <li class="ep-block-addons-item ">
270
+ <img src="<?php echo $icons_base_path . $name; ?>.jpg">
271
+ <h3><?php echo $addon['title']; ?></h3>
272
+ <p><?php echo $addon['description']; ?></p>
273
+
274
+ <?php if ($addon['available']): ?>
275
+ <?php if ($addon['installed']): ?>
276
+ <?php if ($addon['active']): ?>
277
+ <div>
278
+ <span class="dashicons dashicons-yes"></span><span><?php echo __('Active',
279
+ 'embedpress'); ?></span>
280
+ </div>
281
+ <?php else: ?>
282
+ <div>
283
+ <span><?php echo __('Installed', 'embedpress'); ?></span>
284
+ </div>
285
+ <?php endif; ?>
286
  <?php else: ?>
287
+ <a href="https://embedpress.com/embedpress-addons/"
288
+ class="button button-primary">
289
+ <span class="dashicons dashicons-cart"></span> <?php echo __('Get Pro Add-ons!',
290
+ 'embedpress'); ?>
291
+ </a>
292
  <?php endif; ?>
293
  <?php else: ?>
294
+ <div><?php echo __('Coming soon', 'embedpress'); ?></div>
 
 
295
  <?php endif; ?>
296
+ </li>
297
+ <?php endforeach; ?>
 
 
 
298
  </ul>
299
  </div>
300
  <?php endif; ?>
302
 
303
  <footer>
304
  <p>
305
+ <a href="//wordpress.org/support/plugin/embedpress/reviews/#new-post" target="_blank"
306
+ rel="noopener noreferrer">If you like <strong>EmbedPress</strong> please leave us a <span
307
+ class="dashicons dashicons-star-filled"></span><span
308
+ class="dashicons dashicons-star-filled"></span><span
309
+ class="dashicons dashicons-star-filled"></span><span
310
+ class="dashicons dashicons-star-filled"></span><span
311
+ class="dashicons dashicons-star-filled"></span> rating. Thank you!</a>
312
  </p>
313
  <hr>
314
  <nav>
315
  <ul>
316
  <li>
317
+ <a href="//embedpress.com" target="_blank" rel="noopener noreferrer"
318
+ title="About EmbedPress">About</a>
319
  </li>
320
  <li>
321
+ <a href="//embedpress.com/docs/sources-support" target="_blank" rel="noopener noreferrer"
322
+ title="List of supported sources by EmbedPress">Supported sources</a>
323
  </li>
324
  <li>
325
+ <a href="//embedpress.com/docs" target="_blank" rel="noopener noreferrer"
326
+ title="EmbedPress Documentation">Documentation</a>
327
  </li>
328
  <li>
329
+ <a href="//embedpress.com/addons/" target="_blank" rel="noopener noreferrer"
330
+ title="EmbedPress Add-Ons">Add-Ons</a>
331
  </li>
332
  <li>
333
+ <a href="//embedpress.com/contact" target="_blank" rel="noopener noreferrer"
334
+ title="Contact the EmbedPress team">Contact</a>
335
  </li>
336
  <li>
337
  <a href="//twitter.com/embedpress" target="_blank" rel="noopener noreferrer">
361
  * @since 1.0.0
362
  * @static
363
  *
364
+ * @param mixed $freshData Data received from the form.
365
  *
366
  * @return array
367
  */
368
  public static function validateForm($freshData)
369
  {
370
+ $data = [
371
+ 'enablePluginInAdmin' => isset($freshData['enablePluginInAdmin']) ? (bool)$freshData['enablePluginInAdmin'] : true,
372
+ 'enablePluginInFront' => isset($freshData['enablePluginInFront']) ? (bool)$freshData['enablePluginInFront'] : true,
373
+ 'fbLanguage' => $freshData['fbLanguage'],
374
+ ];
375
 
376
  return $data;
377
  }
388
 
389
  $options = get_option(self::$sectionGroupIdentifier);
390
 
391
+ $options[$fieldName] = ! isset($options[$fieldName]) ? true : (bool)$options[$fieldName];
392
 
393
+ echo '<label><input type="radio" id="' . $fieldName . '_0" name="' . self::$sectionGroupIdentifier . '[' . $fieldName . ']" value="0" ' . (! $options[$fieldName] ? "checked" : "") . ' /> No</label>';
394
  echo "&nbsp;&nbsp;";
395
+ echo '<label><input type="radio" id="' . $fieldName . '_1" name="' . self::$sectionGroupIdentifier . '[' . $fieldName . ']" value="1" ' . ($options[$fieldName] ? "checked" : "") . ' /> Yes</label>';
396
  echo '<p class="description">Do you want EmbedPress to run here in the admin area? Disabling this <strong>will not</strong> affect your frontend embeds.</p>';
397
  }
398
 
408
 
409
  $options = get_option(self::$sectionGroupIdentifier);
410
 
411
+ $options[$fieldName] = ! isset($options[$fieldName]) ? true : (bool)$options[$fieldName];
412
 
413
+ echo '<label><input type="radio" id="' . $fieldName . '_0" name="' . self::$sectionGroupIdentifier . '[' . $fieldName . ']" value="0" ' . (! $options[$fieldName] ? "checked" : "") . ' /> No</label>';
414
  echo "&nbsp;&nbsp;";
415
+ echo '<label><input type="radio" id="' . $fieldName . '_1" name="' . self::$sectionGroupIdentifier . '[' . $fieldName . ']" value="1" ' . ($options[$fieldName] ? "checked" : "") . ' /> Yes</label>';
416
  echo '<p class="description">Do you want EmbedPress to run within editors in frontend (if there\'s any)? Disabling this <strong>will not</strong> affect embeds seem by your regular users in frontend.</p>';
417
  }
418
 
428
 
429
  $options = get_option(self::$sectionGroupIdentifier);
430
 
431
+ $options[$fieldName] = ! isset($options[$fieldName]) ? "" : $options[$fieldName];
432
 
433
  $facebookLocales = self::getFacebookAvailableLocales();
434
 
435
+ echo '<select name="' . self::$sectionGroupIdentifier . '[' . $fieldName . ']">';
436
  echo '<option value="0">Automatic (by Facebook)</option>';
437
  echo '<optgroup label="Available">';
438
  foreach ($facebookLocales as $locale => $localeName) {
439
+ echo '<option value="' . $locale . '"' . ($options[$fieldName] === $locale ? ' selected' : '') . '>' . $localeName . '</option>';
440
  }
441
  echo '</optgroup>';
442
  echo '</select>';
454
  */
455
  public static function getFacebookAvailableLocales()
456
  {
457
+ $locales = [
458
  'af_ZA' => "Afrikaans",
459
  'ak_GH' => "Akan",
460
  'am_ET' => "Amharic",
596
  'zh_HK' => "Traditional Chinese (Hong Kong)",
597
  'zh_TW' => "Traditional Chinese (Taiwan)",
598
  'zu_ZA' => "Zulu",
599
+ 'zz_TR' => "Zazaki",
600
+ ];
601
 
602
  return $locales;
603
  }
EmbedPress/Ends/Back/index.html CHANGED
@@ -1,9 +1,9 @@
1
  <!DOCTYPE html>
2
  <html>
3
- <head>
4
- <title>403 Forbidden</title>
5
- </head>
6
- <body>
7
- <p>Directory access is forbidden.</p>
8
- </body>
9
  </html>
1
  <!DOCTYPE html>
2
  <html>
3
+ <head>
4
+ <title>403 Forbidden</title>
5
+ </head>
6
+ <body>
7
+ <p>Directory access is forbidden.</p>
8
+ </body>
9
  </html>
EmbedPress/Ends/Front/Handler.php CHANGED
@@ -1,10 +1,11 @@
1
  <?php
 
2
  namespace EmbedPress\Ends\Front;
3
 
4
- use \EmbedPress\Ends\Handler as EndHandlerAbstract;
5
- use \EmbedPress\Ends\Back\Handler as BackEndHandler;
6
- use \EmbedPress\Shortcode;
7
- use \EmbedPress\Core;
8
 
9
  (defined('ABSPATH') && defined('EMBEDPRESS_IS_LOADED')) or die("No direct script access allowed.");
10
 
@@ -31,7 +32,7 @@ class Handler extends EndHandlerAbstract
31
  */
32
  public static function enqueueStyles()
33
  {
34
- wp_enqueue_style(EMBEDPRESS_PLG_NAME, EMBEDPRESS_URL_ASSETS .'css/embedpress.css');
35
  }
36
 
37
  /**
@@ -40,23 +41,24 @@ class Handler extends EndHandlerAbstract
40
  * @since 1.5.0
41
  * @static
42
  *
43
- * @param string $content The content to be searched.
44
  *
45
  * @return string The potentially modified content.
46
  */
47
  public static function autoEmbedUrls($content)
48
  {
49
  // Replace line breaks from all HTML elements with placeholders.
50
- $content = wp_replace_in_html_tags($content, array("\n" => '<!-- embedpress-line-break -->'));
51
 
52
  // Look for links in the content (not wrapped by shortcode)
53
  if (preg_match('#(^|\s|>)https?://#i', $content)) {
54
- $callbackFingerprint = array('\EmbedPress\Ends\Front\Handler', 'autoEmbedUrlsCallback');
55
 
56
  // Find URLs on their own line.
57
  $content = preg_replace_callback('|^(\s*)(https?://[^\s<>"]+)(\s*)$|im', $callbackFingerprint, $content);
58
  // Find URLs in their own paragraph.
59
- $content = preg_replace_callback('|(<p(?: [^>]*)?>\s*)(https?://[^\s<>"]+)(\s*<\/p>)|i', $callbackFingerprint, $content);
 
60
  }
61
 
62
  // Put the line breaks back.
@@ -69,12 +71,13 @@ class Handler extends EndHandlerAbstract
69
  * @since 1.5.0
70
  * @static
71
  *
72
- * @param array $match A regex match array.
73
  *
74
  * @return string The embed HTML on success, otherwise the original URL.
75
  */
76
- public static function autoEmbedUrlsCallback($match) {
77
- $return = Shortcode::do_shortcode(array(), $match[2]);
 
78
 
79
  return $match[1] . $return . $match[3];
80
  }
@@ -85,7 +88,7 @@ class Handler extends EndHandlerAbstract
85
  * @since 1.6.0
86
  * @static
87
  *
88
- * @param string $editorHTML The HTML which will be rendered as an editor, like TinyMCE.
89
  *
90
  * @return string The HTML which will be rendered as an editor, like TinyMCE
91
  */
@@ -93,8 +96,8 @@ class Handler extends EndHandlerAbstract
93
  {
94
  $plgSettings = Core::getSettings();
95
 
96
- if (!is_admin() && (bool)$plgSettings->enablePluginInFront) {
97
- $backEndHandler = new BackEndHandler(EMBEDPRESS_PLG_NAME, EMBEDPRESS_PLG_VERSION);
98
 
99
  $backEndHandler->enqueueScripts();
100
  }
1
  <?php
2
+
3
  namespace EmbedPress\Ends\Front;
4
 
5
+ use EmbedPress\Core;
6
+ use EmbedPress\Ends\Back\Handler as BackEndHandler;
7
+ use EmbedPress\Ends\Handler as EndHandlerAbstract;
8
+ use EmbedPress\Shortcode;
9
 
10
  (defined('ABSPATH') && defined('EMBEDPRESS_IS_LOADED')) or die("No direct script access allowed.");
11
 
32
  */
33
  public static function enqueueStyles()
34
  {
35
+ wp_enqueue_style(EMBEDPRESS_PLG_NAME, EMBEDPRESS_URL_ASSETS . 'css/embedpress.css');
36
  }
37
 
38
  /**
41
  * @since 1.5.0
42
  * @static
43
  *
44
+ * @param string $content The content to be searched.
45
  *
46
  * @return string The potentially modified content.
47
  */
48
  public static function autoEmbedUrls($content)
49
  {
50
  // Replace line breaks from all HTML elements with placeholders.
51
+ $content = wp_replace_in_html_tags($content, ["\n" => '<!-- embedpress-line-break -->']);
52
 
53
  // Look for links in the content (not wrapped by shortcode)
54
  if (preg_match('#(^|\s|>)https?://#i', $content)) {
55
+ $callbackFingerprint = ['\\EmbedPress\\Ends\\Front\\Handler', 'autoEmbedUrlsCallback'];
56
 
57
  // Find URLs on their own line.
58
  $content = preg_replace_callback('|^(\s*)(https?://[^\s<>"]+)(\s*)$|im', $callbackFingerprint, $content);
59
  // Find URLs in their own paragraph.
60
+ $content = preg_replace_callback('|(<p(?: [^>]*)?>\s*)(https?://[^\s<>"]+)(\s*<\/p>)|i',
61
+ $callbackFingerprint, $content);
62
  }
63
 
64
  // Put the line breaks back.
71
  * @since 1.5.0
72
  * @static
73
  *
74
+ * @param array $match A regex match array.
75
  *
76
  * @return string The embed HTML on success, otherwise the original URL.
77
  */
78
+ public static function autoEmbedUrlsCallback($match)
79
+ {
80
+ $return = Shortcode::do_shortcode([], $match[2]);
81
 
82
  return $match[1] . $return . $match[3];
83
  }
88
  * @since 1.6.0
89
  * @static
90
  *
91
+ * @param string $editorHTML The HTML which will be rendered as an editor, like TinyMCE.
92
  *
93
  * @return string The HTML which will be rendered as an editor, like TinyMCE
94
  */
96
  {
97
  $plgSettings = Core::getSettings();
98
 
99
+ if ( ! is_admin() && (bool)$plgSettings->enablePluginInFront) {
100
+ $backEndHandler = new BackEndHandler(EMBEDPRESS_PLG_NAME, EMBEDPRESS_VERSION);
101
 
102
  $backEndHandler->enqueueScripts();
103
  }
EmbedPress/Ends/Front/index.html CHANGED
@@ -1,9 +1,9 @@
1
  <!DOCTYPE html>
2
  <html>
3
- <head>
4
- <title>403 Forbidden</title>
5
- </head>
6
- <body>
7
- <p>Directory access is forbidden.</p>
8
- </body>
9
  </html>
1
  <!DOCTYPE html>
2
  <html>
3
+ <head>
4
+ <title>403 Forbidden</title>
5
+ </head>
6
+ <body>
7
+ <p>Directory access is forbidden.</p>
8
+ </body>
9
  </html>
EmbedPress/Ends/Handler.php CHANGED
@@ -1,4 +1,5 @@
1
  <?php
 
2
  namespace EmbedPress\Ends;
3
 
4
  (defined('ABSPATH') && defined('EMBEDPRESS_IS_LOADED')) or die("No direct script access allowed.");
@@ -21,7 +22,7 @@ abstract class Handler
21
  * @since 1.0.0
22
  * @access private
23
  *
24
- * @var string $pluginName The name of the plugin.
25
  */
26
  protected $pluginName;
27
 
@@ -31,7 +32,7 @@ abstract class Handler
31
  * @since 1.0.0
32
  * @access private
33
  *
34
- * @var string $pluginVersion The version of the plugin.
35
  */
36
  protected $pluginVersion;
37
 
@@ -40,13 +41,14 @@ abstract class Handler
40
  *
41
  * @since 1.0.0
42
  *
43
- * @param string $pluginName - The name of the plugin.
44
- * @param string $pluginVersion - The version of the plugin.
 
45
  * @return void
46
  */
47
  public function __construct($pluginName, $pluginVersion)
48
  {
49
- $this->pluginName = $pluginName;
50
  $this->pluginVersion = $pluginVersion;
51
  }
52
 
@@ -58,7 +60,8 @@ abstract class Handler
58
  * @return void
59
  */
60
  public function enqueueScripts()
61
- {}
 
62
 
63
  /**
64
  * Method that register all stylesheets for the admin area.
@@ -69,5 +72,6 @@ abstract class Handler
69
  * @return void
70
  */
71
  public static function enqueueStyles()
72
- {}
 
73
  }
1
  <?php
2
+
3
  namespace EmbedPress\Ends;
4
 
5
  (defined('ABSPATH') && defined('EMBEDPRESS_IS_LOADED')) or die("No direct script access allowed.");
22
  * @since 1.0.0
23
  * @access private
24
  *
25
+ * @var string $pluginName The name of the plugin.
26
  */
27
  protected $pluginName;
28
 
32
  * @since 1.0.0
33
  * @access private
34
  *
35
+ * @var string $pluginVersion The version of the plugin.
36
  */
37
  protected $pluginVersion;
38
 
41
  *
42
  * @since 1.0.0
43
  *
44
+ * @param string $pluginName - The name of the plugin.
45
+ * @param string $pluginVersion - The version of the plugin.
46
+ *
47
  * @return void
48
  */
49
  public function __construct($pluginName, $pluginVersion)
50
  {
51
+ $this->pluginName = $pluginName;
52
  $this->pluginVersion = $pluginVersion;
53
  }
54
 
60
  * @return void
61
  */
62
  public function enqueueScripts()
63
+ {
64
+ }
65
 
66
  /**
67
  * Method that register all stylesheets for the admin area.
72
  * @return void
73
  */
74
  public static function enqueueStyles()
75
+ {
76
+ }
77
  }
EmbedPress/Ends/index.html CHANGED
@@ -1,9 +1,9 @@
1
  <!DOCTYPE html>
2
  <html>
3
- <head>
4
- <title>403 Forbidden</title>
5
- </head>
6
- <body>
7
- <p>Directory access is forbidden.</p>
8
- </body>
9
  </html>
1
  <!DOCTYPE html>
2
  <html>
3
+ <head>
4
+ <title>403 Forbidden</title>
5
+ </head>
6
+ <body>
7
+ <p>Directory access is forbidden.</p>
8
+ </body>
9
  </html>
EmbedPress/Loader.php CHANGED
@@ -1,4 +1,5 @@
1
  <?php
 
2
  namespace EmbedPress;
3
 
4
  (defined('ABSPATH') && defined('EMBEDPRESS_IS_LOADED')) or die("No direct script access allowed.");
@@ -20,7 +21,7 @@ class Loader
20
  * @since 1.0.0
21
  * @access protected
22
  *
23
- * @var array $actions The actions registered with WordPress to fire when the plugin loads.
24
  */
25
  protected $actions;
26
 
@@ -30,7 +31,7 @@ class Loader
30
  * @since 1.0.0
31
  * @access protected
32
  *
33
- * @var array $filters The filters registered with WordPress to fire when the plugin loads.
34
  */
35
  protected $filters;
36
 
@@ -43,8 +44,8 @@ class Loader
43
  */
44
  public function __construct()
45
  {
46
- $this->actions = array();
47
- $this->filters = array();
48
  }
49
 
50
  /**
@@ -52,11 +53,13 @@ class Loader
52
  *
53
  * @since 1.0.0
54
  *
55
- * @param string $hook The name of the WordPress action that is being registered.
56
- * @param object $component A reference to the instance of the object on which the action is defined.
57
- * @param string $callback The name of the function definition on the $component.
58
- * @param int $priority Optional. he priority at which the function should be fired. Default is 10.
59
- * @param int $accepted_args Optional. The number of arguments that should be passed to the $callback. Default is 1.
 
 
60
  * @return void
61
  */
62
  public function add_action($hook, $component, $callback, $priority = 10, $accepted_args = 1)
@@ -69,11 +72,13 @@ class Loader
69
  *
70
  * @since 1.0.0
71
  *
72
- * @param string $hook The name of the WordPress filter that is being registered.
73
- * @param object $component A reference to the instance of the object on which the filter is defined.
74
- * @param string $callback The name of the function definition on the $component.
75
- * @param int $priority Optional. he priority at which the function should be fired. Default is 10.
76
- * @param int $accepted_args Optional. The number of arguments that should be passed to the $callback. Default is 1.
 
 
77
  * @return void
78
  */
79
  public function add_filter($hook, $component, $callback, $priority = 10, $accepted_args = 1)
@@ -87,23 +92,24 @@ class Loader
87
  * @since 1.0.0
88
  * @access private
89
  *
90
- * @param array $hooks The collection of hooks that is being registered (that is, actions or filters).
91
- * @param string $hook The name of the WordPress filter that is being registered.
92
- * @param object $component A reference to the instance of the object on which the filter is defined.
93
- * @param string $callback The name of the function definition on the $component.
94
- * @param int $priority The priority at which the function should be fired.
95
- * @param int $accepted_args The number of arguments that should be passed to the $callback.
 
96
  * @return array The collection of actions and filters registered with WordPress.
97
  */
98
  private function add($hooks, $hook, $component, $callback, $priority, $accepted_args)
99
  {
100
- $hooks[] = array(
101
  'hook' => $hook,
102
  'component' => $component,
103
  'callback' => $callback,
104
  'priority' => $priority,
105
- 'accepted_args' => $accepted_args
106
- );
107
 
108
  return $hooks;
109
  }
@@ -118,15 +124,17 @@ class Loader
118
  public function run()
119
  {
120
  foreach ($this->filters as $hook) {
121
- add_filter($hook['hook'], array(
122
- $hook['component'], $hook['callback']
123
- ), $hook['priority'], $hook['accepted_args']);
 
124
  }
125
 
126
  foreach ($this->actions as $hook) {
127
- add_action($hook['hook'], array(
128
- $hook['component'], $hook['callback']
129
- ), $hook['priority'], $hook['accepted_args']);
 
130
  }
131
  }
132
  }
1
  <?php
2
+
3
  namespace EmbedPress;
4
 
5
  (defined('ABSPATH') && defined('EMBEDPRESS_IS_LOADED')) or die("No direct script access allowed.");
21
  * @since 1.0.0
22
  * @access protected
23
  *
24
+ * @var array $actions The actions registered with WordPress to fire when the plugin loads.
25
  */
26
  protected $actions;
27
 
31
  * @since 1.0.0
32
  * @access protected
33
  *
34
+ * @var array $filters The filters registered with WordPress to fire when the plugin loads.
35
  */
36
  protected $filters;
37
 
44
  */
45
  public function __construct()
46
  {
47
+ $this->actions = [];
48
+ $this->filters = [];
49
  }
50
 
51
  /**
53
  *
54
  * @since 1.0.0
55
  *
56
+ * @param string $hook The name of the WordPress action that is being registered.
57
+ * @param object $component A reference to the instance of the object on which the action is defined.
58
+ * @param string $callback The name of the function definition on the $component.
59
+ * @param int $priority Optional. he priority at which the function should be fired. Default is 10.
60
+ * @param int $accepted_args Optional. The number of arguments that should be passed to the $callback. Default
61
+ * is 1.
62
+ *
63
  * @return void
64
  */
65
  public function add_action($hook, $component, $callback, $priority = 10, $accepted_args = 1)
72
  *
73
  * @since 1.0.0
74
  *
75
+ * @param string $hook The name of the WordPress filter that is being registered.
76
+ * @param object $component A reference to the instance of the object on which the filter is defined.
77
+ * @param string $callback The name of the function definition on the $component.
78
+ * @param int $priority Optional. he priority at which the function should be fired. Default is 10.
79
+ * @param int $accepted_args Optional. The number of arguments that should be passed to the $callback. Default
80
+ * is 1.
81
+ *
82
  * @return void
83
  */
84
  public function add_filter($hook, $component, $callback, $priority = 10, $accepted_args = 1)
92
  * @since 1.0.0
93
  * @access private
94
  *
95
+ * @param array $hooks The collection of hooks that is being registered (that is, actions or filters).
96
+ * @param string $hook The name of the WordPress filter that is being registered.
97
+ * @param object $component A reference to the instance of the object on which the filter is defined.
98
+ * @param string $callback The name of the function definition on the $component.
99
+ * @param int $priority The priority at which the function should be fired.
100
+ * @param int $accepted_args The number of arguments that should be passed to the $callback.
101
+ *
102
  * @return array The collection of actions and filters registered with WordPress.
103
  */
104
  private function add($hooks, $hook, $component, $callback, $priority, $accepted_args)
105
  {
106
+ $hooks[] = [
107
  'hook' => $hook,
108
  'component' => $component,
109
  'callback' => $callback,
110
  'priority' => $priority,
111
+ 'accepted_args' => $accepted_args,
112
+ ];
113
 
114
  return $hooks;
115
  }
124
  public function run()
125
  {
126
  foreach ($this->filters as $hook) {
127
+ add_filter($hook['hook'], [
128
+ $hook['component'],
129
+ $hook['callback'],
130
+ ], $hook['priority'], $hook['accepted_args']);
131
  }
132
 
133
  foreach ($this->actions as $hook) {
134
+ add_action($hook['hook'], [
135
+ $hook['component'],
136
+ $hook['callback'],
137
+ ], $hook['priority'], $hook['accepted_args']);
138
  }
139
  }
140
  }
EmbedPress/Plugins/Html/Field.php CHANGED
@@ -1,4 +1,5 @@
1
  <?php
 
2
  namespace EmbedPress\Plugins\Html;
3
 
4
  (defined('ABSPATH') && defined('EMBEDPRESS_IS_LOADED')) or die("No direct script access allowed.");
@@ -12,7 +13,6 @@ namespace EmbedPress\Plugins\Html;
12
  * @license GPLv2 or later
13
  * @since 1.4.0
14
  */
15
-
16
  class Field
17
  {
18
  /**
@@ -26,7 +26,7 @@ class Field
26
  */
27
  protected static function text($value)
28
  {
29
- $html = '<input type="text" name="embedpress:{{slug}}[{{name}}]" class="{{classes}}" placeholder="{{placeholder}}" value="'. (string)$value .'">';
30
 
31
  return $html;
32
  }
@@ -42,7 +42,7 @@ class Field
42
  */
43
  protected static function textarea($value)
44
  {
45
- $html = '<textarea name="embedpress:{{slug}}[{{name}}]" class="{{classes}}" placeholder="{{placeholder}}">'. (string)$value .'</textarea>';
46
 
47
  return $html;
48
  }
@@ -58,12 +58,12 @@ class Field
58
  */
59
  protected static function radio($options, $value = null)
60
  {
61
- $html = array();
62
 
63
  foreach ((array)$options as $optionValue => $optionLabel) {
64
  $html[] = '<label>';
65
- $html[] = '<input type="radio" name="embedpress:{{slug}}[{{name}}]" class="{{classes}}" value="'. $optionValue .'"'. ($value === $optionValue ? ' checked' : '') .'>';
66
- $html[] = '&nbsp;'. $optionLabel;
67
  $html[] = '</label>&nbsp;&nbsp;';
68
  }
69
 
@@ -83,10 +83,10 @@ class Field
83
  */
84
  protected static function select($options, $value = null)
85
  {
86
- $html = array('<select name="embedpress:{{slug}}[{{name}}]" class="{{classes}}">');
87
 
88
  foreach ((array)$options as $optionValue => $optionLabel) {
89
- $html[] = '<option value="'. $optionValue .'"'. ($value === (string)$optionValue ? ' selected' : '') .'>'. $optionLabel .'</option>';
90
  }
91
 
92
  $html[] = '</select>';
@@ -102,7 +102,9 @@ class Field
102
  * @since 1.4.0
103
  * @static
104
  *
105
- * @param array $params There's two available keys: 'field' which holds the field schema; and 'pluginSlug' which represents the slug of the plugin where the field belongs to.
 
 
106
  * @return void
107
  */
108
  public static function render($params)
@@ -121,14 +123,14 @@ class Field
121
  $value = isset($options[$field->slug]) ? $options[$field->slug] : (isset($field->default) ? $field->default : '');
122
  }
123
 
124
- if (in_array($field->type, array('bool', 'boolean'))) {
125
- $html = self::radio(array(
126
  0 => 'No',
127
- 1 => 'Yes'
128
- ), (int)$value);
129
- } else if (isset($field->options)) {
130
  $html = self::select((array)$field->options, (string)$value);
131
- } else if (in_array($field->type, array('textarea'))) {
132
  $html = self::textarea((string)$value);
133
  } else {
134
  $html = self::text((string)$value);
@@ -136,13 +138,15 @@ class Field
136
 
137
  $html = str_replace('{{slug}}', $params['pluginSlug'], $html);
138
  $html = str_replace('{{name}}', $field->slug, $html);
139
- $html = str_replace('{{classes}}', implode(' ', (!empty($field->classes) ? (array)$field->classes : array())), $html);
140
- $html = str_replace('{{placeholder}}', (!empty($field->placeholder) ? (string)$field->placeholder : ""), $html);
 
 
141
 
142
  $html .= wp_nonce_field("{$pluginSlug}:nonce", "{$pluginSlug}:nonce");
143
 
144
  if ($field->slug === "license_key") {
145
- $licenseStatusClass = "ep-label-danger";
146
  $currentLicenseStatus = isset($options['license']['status']) ? trim(strtoupper($options['license']['status'])) : "";
147
  switch ($currentLicenseStatus) {
148
  case '':
@@ -168,7 +172,7 @@ class Field
168
  $licenseStatusMessage = "Your license key has reached its activation limit";
169
  break;
170
  case 'VALID':
171
- $licenseStatusClass = "ep-label-success";
172
  $licenseStatusMessage = "Activated";
173
  break;
174
  default:
@@ -176,19 +180,19 @@ class Field
176
  break;
177
  }
178
 
179
- $html .= '<br/><br/><strong>Status: <span class="'. $licenseStatusClass .'">'. __($licenseStatusMessage) .'</span>.</strong><br/><br/>';
180
 
181
- if (!(isset($options['license']['status']) && $options['license']['status'] === 'valid')) {
182
- $html .= '<a href="'. EMBEDPRESS_LICENSES_MORE_INFO_URL .'" target="_blank" class="ep-small-link ep-small-spacing" rel="noopener noreferrer" style="display: inline-block; margin-left: 20px;" title="'. __('Click here to read more about licenses.') .'">' . __('More information') . '</a>';
183
  $html .= '<br/><br/>';
184
  }
185
 
186
  $html .= '<hr>';
187
  }
188
 
189
- if (!empty($field->description)) {
190
  $html .= '<br/>';
191
- $html .= '<p class="description">'. $field->description .'</p>';
192
  }
193
 
194
  echo $html;
1
  <?php
2
+
3
  namespace EmbedPress\Plugins\Html;
4
 
5
  (defined('ABSPATH') && defined('EMBEDPRESS_IS_LOADED')) or die("No direct script access allowed.");
13
  * @license GPLv2 or later
14
  * @since 1.4.0
15
  */
 
16
  class Field
17
  {
18
  /**
26
  */
27
  protected static function text($value)
28
  {
29
+ $html = '<input type="text" name="embedpress:{{slug}}[{{name}}]" class="{{classes}}" placeholder="{{placeholder}}" value="' . (string)$value . '">';
30
 
31
  return $html;
32
  }
42
  */
43
  protected static function textarea($value)
44
  {
45
+ $html = '<textarea name="embedpress:{{slug}}[{{name}}]" class="{{classes}}" placeholder="{{placeholder}}">' . (string)$value . '</textarea>';
46
 
47
  return $html;
48
  }
58
  */
59
  protected static function radio($options, $value = null)
60
  {
61
+ $html = [];
62
 
63
  foreach ((array)$options as $optionValue => $optionLabel) {
64
  $html[] = '<label>';
65
+ $html[] = '<input type="radio" name="embedpress:{{slug}}[{{name}}]" class="{{classes}}" value="' . $optionValue . '"' . ($value === $optionValue ? ' checked' : '') . '>';
66
+ $html[] = '&nbsp;' . $optionLabel;
67
  $html[] = '</label>&nbsp;&nbsp;';
68
  }
69
 
83
  */
84
  protected static function select($options, $value = null)
85
  {
86
+ $html = ['<select name="embedpress:{{slug}}[{{name}}]" class="{{classes}}">'];
87
 
88
  foreach ((array)$options as $optionValue => $optionLabel) {
89
+ $html[] = '<option value="' . $optionValue . '"' . ($value === (string)$optionValue ? ' selected' : '') . '>' . $optionLabel . '</option>';
90
  }
91
 
92
  $html[] = '</select>';
102
  * @since 1.4.0
103
  * @static
104
  *
105
+ * @param array $params There's two available keys: 'field' which holds the field schema; and 'pluginSlug' which
106
+ * represents the slug of the plugin where the field belongs to.
107
+ *
108
  * @return void
109
  */
110
  public static function render($params)
123
  $value = isset($options[$field->slug]) ? $options[$field->slug] : (isset($field->default) ? $field->default : '');
124
  }
125
 
126
+ if (in_array($field->type, ['bool', 'boolean'])) {
127
+ $html = self::radio([
128
  0 => 'No',
129
+ 1 => 'Yes',
130
+ ], (int)$value);
131
+ } elseif (isset($field->options)) {
132
  $html = self::select((array)$field->options, (string)$value);
133
+ } elseif (in_array($field->type, ['textarea'])) {
134
  $html = self::textarea((string)$value);
135
  } else {
136
  $html = self::text((string)$value);
138
 
139
  $html = str_replace('{{slug}}', $params['pluginSlug'], $html);
140
  $html = str_replace('{{name}}', $field->slug, $html);
141
+ $html = str_replace('{{classes}}', implode(' ', (! empty($field->classes) ? (array)$field->classes : [])),
142
+ $html);
143
+ $html = str_replace('{{placeholder}}', (! empty($field->placeholder) ? (string)$field->placeholder : ""),
144
+ $html);
145
 
146
  $html .= wp_nonce_field("{$pluginSlug}:nonce", "{$pluginSlug}:nonce");
147
 
148
  if ($field->slug === "license_key") {
149
+ $licenseStatusClass = "ep-label-danger";
150
  $currentLicenseStatus = isset($options['license']['status']) ? trim(strtoupper($options['license']['status'])) : "";
151
  switch ($currentLicenseStatus) {
152
  case '':
172
  $licenseStatusMessage = "Your license key has reached its activation limit";
173
  break;
174
  case 'VALID':
175
+ $licenseStatusClass = "ep-label-success";
176
  $licenseStatusMessage = "Activated";
177
  break;
178
  default:
180
  break;
181
  }
182
 
183
+ $html .= '<br/><br/><strong>Status: <span class="' . $licenseStatusClass . '">' . __($licenseStatusMessage) . '</span>.</strong><br/><br/>';
184
 
185
+ if ( ! (isset($options['license']['status']) && $options['license']['status'] === 'valid')) {
186
+ $html .= '<a href="' . EMBEDPRESS_LICENSES_MORE_INFO_URL . '" target="_blank" class="ep-small-link ep-small-spacing" rel="noopener noreferrer" style="display: inline-block; margin-left: 20px;" title="' . __('Click here to read more about licenses.') . '">' . __('More information') . '</a>';
187
  $html .= '<br/><br/>';
188
  }
189
 
190
  $html .= '<hr>';
191
  }
192
 
193
+ if ( ! empty($field->description)) {
194
  $html .= '<br/>';
195
+ $html .= '<p class="description">' . $field->description . '</p>';
196
  }
197
 
198
  echo $html;
EmbedPress/Plugins/Html/index.html CHANGED
@@ -1,9 +1,9 @@
1
  <!DOCTYPE html>
2
  <html>
3
- <head>
4
- <title>403 Forbidden</title>
5
- </head>
6
- <body>
7
- <p>Directory access is forbidden.</p>
8
- </body>
9
  </html>
1
  <!DOCTYPE html>
2
  <html>
3
+ <head>
4
+ <title>403 Forbidden</title>
5
+ </head>
6
+ <body>
7
+ <p>Directory access is forbidden.</p>
8
+ </body>
9
  </html>
EmbedPress/Plugins/Plugin.php CHANGED
@@ -1,9 +1,10 @@
1
  <?php
 
2
  namespace EmbedPress\Plugins;
3
 
4
  use PublishPress\EDD_License\Core\Container as EDDContainer;
5
- use PublishPress\EDD_License\Core\ServicesConfig as EDDServicesConfig;
6
  use PublishPress\EDD_License\Core\Services as EDDServices;
 
7
 
8
  (defined('ABSPATH') && defined('EMBEDPRESS_IS_LOADED')) or die("No direct script access allowed.");
9
 
@@ -38,7 +39,7 @@ abstract class Plugin
38
  $config->setPluginVersion(static::VERSION);
39
  $config->setEddItemId(static::EDD_ID);
40
  $config->setPluginAuthor('EmbedPress');
41
- $config->setPluginFile(EMBEDPRESS_PLG_NAME .'/'. EMBEDPRESS_PLG_NAME .'.php');
42
 
43
  $services = new EDDServices($config);
44
 
@@ -75,7 +76,7 @@ abstract class Plugin
75
  */
76
  protected static function isEmbedPressActive()
77
  {
78
- $isEmbedPressActive = is_plugin_active(EMBEDPRESS_PLG_NAME .'/'. EMBEDPRESS_PLG_NAME .'.php');
79
 
80
  return $isEmbedPressActive;
81
  }
@@ -87,13 +88,14 @@ abstract class Plugin
87
  * @access protected
88
  * @static
89
  *
90
- * @param string $err The error code.
 
91
  * @return string
92
  */
93
  protected static function getErrorMessage($err = '')
94
  {
95
  if ($err === 'ERR_MISSING_DEPENDENCY') {
96
- return __('Please, <strong>install</strong> and <strong>activate <a href="https://wordpress.org/plugins/'. EMBEDPRESS_PLG_NAME .'" target="_blank" rel="noopener noreferrer">'. EMBEDPRESS .'</a></strong> plugin in order to make <em>'. EMBEDPRESS .' - '. static::NAME .'</em> to work.');
97
  }
98
 
99
  return $err;
@@ -109,8 +111,8 @@ abstract class Plugin
109
  */
110
  public static function onLoadAdminCallback()
111
  {
112
- $pluginSignature = EMBEDPRESS_PLG_NAME .'-'. static::SLUG .'/'. EMBEDPRESS_PLG_NAME .'-'. static::SLUG .'.php';
113
- if (is_admin() && !self::isEmbedPressActive() && is_plugin_active($pluginSignature)) {
114
  deactivate_plugins($pluginSignature);
115
  } else {
116
  static::registerSettings();
@@ -147,7 +149,7 @@ abstract class Plugin
147
  */
148
  public static function onDeactivationCallback()
149
  {
150
- delete_option(EMBEDPRESS_PLG_NAME .':'. static::SLUG);
151
  }
152
 
153
  /**
@@ -156,17 +158,18 @@ abstract class Plugin
156
  * @since 1.4.0
157
  * @static
158
  *
159
- * @param array $postData The data coming from the form via POST.
 
160
  * @return array
161
  */
162
  public static function validateForm($postData)
163
  {
164
- $pluginSlugNonce = EMBEDPRESS_PLG_NAME .':'. static::SLUG .':nonce';
165
- if (!check_admin_referer($pluginSlugNonce, $pluginSlugNonce)) {
166
  return;
167
  }
168
 
169
- $data = array();
170
 
171
  $schema = static::getOptionsSchema();
172
  foreach ($schema as $fieldSlug => $field) {
@@ -176,7 +179,8 @@ abstract class Plugin
176
  $value = isset($field['default']) ? $field['default'] : null;
177
  }
178
 
179
- settype($value, isset($field['type']) && in_array(strtolower($field['type']), array('bool', 'boolean', 'int', 'integer', 'float', 'string')) ? $field['type'] : 'string');
 
180
 
181
  $data[$fieldSlug] = $value;
182
  }
@@ -197,6 +201,7 @@ abstract class Plugin
197
  * @static
198
  *
199
  * @param array Data after validation.
 
200
  * @return void
201
  */
202
  public static function onAfterFormValidation(&$data)
@@ -216,7 +221,8 @@ abstract class Plugin
216
  {
217
  ?>
218
 
219
- <a href="?page=<?php echo EMBEDPRESS_PLG_NAME; ?>&tab=<?php echo static::SLUG; ?>" class="nav-tab<?php echo $activeTab === static::SLUG ? ' nav-tab-active' : ''; ?> "><?php echo static::NAME; ?></a>
 
220
 
221
  <?php
222
  }
@@ -231,10 +237,11 @@ abstract class Plugin
231
  */
232
  public static function registerSettings()
233
  {
234
- $identifier = EMBEDPRESS_PLG_NAME .':'. static::SLUG;
235
 
236
- register_setting($identifier, $identifier, array(static::NAMESPACE_STRING, 'validateForm'));
237
- add_settings_section($identifier, EMBEDPRESS .' > '. static::NAME .' Settings', array(static::NAMESPACE_STRING, 'onAfterRegisterSettings'), $identifier);
 
238
 
239
  self::registerSettingsFields();
240
  }
@@ -249,16 +256,17 @@ abstract class Plugin
249
  */
250
  public static function registerSettingsFields()
251
  {
252
- $identifier = EMBEDPRESS_PLG_NAME .':'. static::SLUG;
253
 
254
  $schema = static::getOptionsSchema();
255
  foreach ($schema as $fieldSlug => $field) {
256
  $field['slug'] = $fieldSlug;
257
 
258
- add_settings_field($fieldSlug, $field['label'], array(__NAMESPACE__ .'\Html\Field', 'render'), $identifier, $identifier, array(
259
- 'pluginSlug' => static::SLUG,
260
- 'field' => $field
261
- ));
 
262
  }
263
  }
264
 
@@ -285,20 +293,21 @@ abstract class Plugin
285
  */
286
  public static function getOptions()
287
  {
288
- $options = (array)get_option(EMBEDPRESS_PLG_NAME .':'. static::SLUG);
289
  if (empty($options) || (count($options) === 1 && empty($options[0]))) {
290
- $options = array();
291
- $schema = static::getOptionsSchema();
292
  foreach ($schema as $fieldSlug => $field) {
293
  $value = isset($field['default']) ? $field['default'] : "";
294
 
295
- settype($value, isset($field['type']) && in_array(strtolower($field['type']), array('bool', 'boolean', 'int', 'integer', 'float', 'string')) ? $field['type'] : 'string');
 
296
 
297
  if ($fieldSlug === "license_key") {
298
- $options['license'] = array(
299
  'key' => $value,
300
- 'status' => "missing"
301
- );
302
  } else {
303
  $options[$fieldSlug] = $value;
304
  }
@@ -318,7 +327,8 @@ abstract class Plugin
318
  */
319
  public static function handleActionLinks($links, $file)
320
  {
321
- $settingsLink = '<a href="'. admin_url('admin.php?page='. EMBEDPRESS_PLG_NAME .'&tab='. static::SLUG) .'" aria-label="'. __('Open settings page', 'embedpress-'. static::SLUG) .'">'. __('Settings', 'embedpress-'. static::SLUG) .'</a>';
 
322
 
323
  array_unshift($links, $settingsLink);
324
 
1
  <?php
2
+
3
  namespace EmbedPress\Plugins;
4
 
5
  use PublishPress\EDD_License\Core\Container as EDDContainer;
 
6
  use PublishPress\EDD_License\Core\Services as EDDServices;
7
+ use PublishPress\EDD_License\Core\ServicesConfig as EDDServicesConfig;
8
 
9
  (defined('ABSPATH') && defined('EMBEDPRESS_IS_LOADED')) or die("No direct script access allowed.");
10
 
39
  $config->setPluginVersion(static::VERSION);
40
  $config->setEddItemId(static::EDD_ID);
41
  $config->setPluginAuthor('EmbedPress');
42
+ $config->setPluginFile(EMBEDPRESS_PLG_NAME . '/' . EMBEDPRESS_PLG_NAME . '.php');
43
 
44
  $services = new EDDServices($config);
45
 
76
  */
77
  protected static function isEmbedPressActive()
78
  {
79
+ $isEmbedPressActive = is_plugin_active(EMBEDPRESS_PLG_NAME . '/' . EMBEDPRESS_PLG_NAME . '.php');
80
 
81
  return $isEmbedPressActive;
82
  }
88
  * @access protected
89
  * @static
90
  *
91
+ * @param string $err The error code.
92
+ *
93
  * @return string
94
  */
95
  protected static function getErrorMessage($err = '')
96
  {
97
  if ($err === 'ERR_MISSING_DEPENDENCY') {
98
+ return __('Please, <strong>install</strong> and <strong>activate <a href="https://wordpress.org/plugins/' . EMBEDPRESS_PLG_NAME . '" target="_blank" rel="noopener noreferrer">' . EMBEDPRESS . '</a></strong> plugin in order to make <em>' . EMBEDPRESS . ' - ' . static::NAME . '</em> to work.');
99
  }
100
 
101
  return $err;
111
  */
112
  public static function onLoadAdminCallback()
113
  {
114
+ $pluginSignature = EMBEDPRESS_PLG_NAME . '-' . static::SLUG . '/' . EMBEDPRESS_PLG_NAME . '-' . static::SLUG . '.php';
115
+ if (is_admin() && ! self::isEmbedPressActive() && is_plugin_active($pluginSignature)) {
116
  deactivate_plugins($pluginSignature);
117
  } else {
118
  static::registerSettings();
149
  */
150
  public static function onDeactivationCallback()
151
  {
152
+ delete_option(EMBEDPRESS_PLG_NAME . ':' . static::SLUG);
153
  }
154
 
155
  /**
158
  * @since 1.4.0
159
  * @static
160
  *
161
+ * @param array $postData The data coming from the form via POST.
162
+ *
163
  * @return array
164
  */
165
  public static function validateForm($postData)
166
  {
167
+ $pluginSlugNonce = EMBEDPRESS_PLG_NAME . ':' . static::SLUG . ':nonce';
168
+ if ( ! check_admin_referer($pluginSlugNonce, $pluginSlugNonce)) {
169
  return;
170
  }
171
 
172
+ $data = [];
173
 
174
  $schema = static::getOptionsSchema();
175
  foreach ($schema as $fieldSlug => $field) {
179
  $value = isset($field['default']) ? $field['default'] : null;
180
  }
181
 
182
+ settype($value, isset($field['type']) && in_array(strtolower($field['type']),
183
+ ['bool', 'boolean', 'int', 'integer', 'float', 'string']) ? $field['type'] : 'string');
184
 
185
  $data[$fieldSlug] = $value;
186
  }
201
  * @static
202
  *
203
  * @param array Data after validation.
204
+ *
205
  * @return void
206
  */
207
  public static function onAfterFormValidation(&$data)
221
  {
222
  ?>
223
 
224
+ <a href="?page=<?php echo EMBEDPRESS_PLG_NAME; ?>&tab=<?php echo static::SLUG; ?>"
225
+ class="nav-tab<?php echo $activeTab === static::SLUG ? ' nav-tab-active' : ''; ?> "><?php echo static::NAME; ?></a>
226
 
227
  <?php
228
  }
237
  */
238
  public static function registerSettings()
239
  {
240
+ $identifier = EMBEDPRESS_PLG_NAME . ':' . static::SLUG;
241
 
242
+ register_setting($identifier, $identifier, [static::NAMESPACE_STRING, 'validateForm']);
243
+ add_settings_section($identifier, EMBEDPRESS . ' > ' . static::NAME . ' Settings',
244
+ [static::NAMESPACE_STRING, 'onAfterRegisterSettings'], $identifier);
245
 
246
  self::registerSettingsFields();
247
  }
256
  */
257
  public static function registerSettingsFields()
258
  {
259
+ $identifier = EMBEDPRESS_PLG_NAME . ':' . static::SLUG;
260
 
261
  $schema = static::getOptionsSchema();
262
  foreach ($schema as $fieldSlug => $field) {
263
  $field['slug'] = $fieldSlug;
264
 
265
+ add_settings_field($fieldSlug, $field['label'], [__NAMESPACE__ . '\Html\Field', 'render'], $identifier,
266
+ $identifier, [
267
+ 'pluginSlug' => static::SLUG,
268
+ 'field' => $field,
269
+ ]);
270
  }
271
  }
272
 
293
  */
294
  public static function getOptions()
295
  {
296
+ $options = (array)get_option(EMBEDPRESS_PLG_NAME . ':' . static::SLUG);
297
  if (empty($options) || (count($options) === 1 && empty($options[0]))) {
298
+ $options = [];
299
+ $schema = static::getOptionsSchema();
300
  foreach ($schema as $fieldSlug => $field) {
301
  $value = isset($field['default']) ? $field['default'] : "";
302
 
303
+ settype($value, isset($field['type']) && in_array(strtolower($field['type']),
304
+ ['bool', 'boolean', 'int', 'integer', 'float', 'string']) ? $field['type'] : 'string');
305
 
306
  if ($fieldSlug === "license_key") {
307
+ $options['license'] = [
308
  'key' => $value,
309
+ 'status' => "missing",
310
+ ];
311
  } else {
312
  $options[$fieldSlug] = $value;
313
  }
327
  */
328
  public static function handleActionLinks($links, $file)
329
  {
330
+ $settingsLink = '<a href="' . admin_url('admin.php?page=' . EMBEDPRESS_PLG_NAME . '&tab=' . static::SLUG) . '" aria-label="' . __('Open settings page',
331
+ 'embedpress-' . static::SLUG) . '">' . __('Settings', 'embedpress-' . static::SLUG) . '</a>';
332
 
333
  array_unshift($links, $settingsLink);
334
 
EmbedPress/Plugins/index.html CHANGED
@@ -1,9 +1,9 @@
1
  <!DOCTYPE html>
2
  <html>
3
- <head>
4
- <title>403 Forbidden</title>
5
- </head>
6
- <body>
7
- <p>Directory access is forbidden.</p>
8
- </body>
9
  </html>
1
  <!DOCTYPE html>
2
  <html>
3
+ <head>
4
+ <title>403 Forbidden</title>
5
+ </head>
6
+ <body>
7
+ <p>Directory access is forbidden.</p>
8
+ </body>
9
  </html>
EmbedPress/Providers/Giphy.php CHANGED
@@ -1,7 +1,8 @@
1
  <?php
 
2
  namespace EmbedPress\Providers;
3
 
4
- use \Embera\Adapters\Service as EmberaService;
5
 
6
  (defined('ABSPATH') && defined('EMBEDPRESS_IS_LOADED')) or die("No direct script access allowed.");
7
 
@@ -53,20 +54,20 @@ class Giphy extends EmberaService
53
  if (preg_match($this->urlRegexPattern, $url, $matches)) {
54
  $gifId = count($matches) > 3 && strtolower($matches[3]) === ".gif" ? $matches[2] : $matches[1];
55
 
56
- $html = ''.
57
- '<a href="https://giphy.com/gifs/'. $gifId .'">'.
58
- '<img src="https://media.giphy.com/media/'. $gifId .'/giphy.gif" alt="" width="{width}" height="{height}">'.
59
- '</a>';
60
 
61
- $response = array(
62
  'type' => 'image',
63
  'provider_name' => 'Giphy',
64
  'provider_url' => 'https://giphy.com',
65
  'url' => $url,
66
- 'html' => $html
67
- );
68
  } else {
69
- $response = array();
70
  }
71
 
72
  return $response;
1
  <?php
2
+
3
  namespace EmbedPress\Providers;
4
 
5
+ use Embera\Adapters\Service as EmberaService;
6
 
7
  (defined('ABSPATH') && defined('EMBEDPRESS_IS_LOADED')) or die("No direct script access allowed.");
8
 
54
  if (preg_match($this->urlRegexPattern, $url, $matches)) {
55
  $gifId = count($matches) > 3 && strtolower($matches[3]) === ".gif" ? $matches[2] : $matches[1];
56
 
57
+ $html = '' .
58
+ '<a href="https://giphy.com/gifs/' . $gifId . '">' .
59
+ '<img src="https://media.giphy.com/media/' . $gifId . '/giphy.gif" alt="" width="{width}" height="{height}">' .
60
+ '</a>';
61
 
62
+ $response = [
63
  'type' => 'image',
64
  'provider_name' => 'Giphy',
65
  'provider_url' => 'https://giphy.com',
66
  'url' => $url,
67
+ 'html' => $html,
68
+ ];
69
  } else {
70
+ $response = [];
71
  }
72
 
73
  return $response;
EmbedPress/Providers/GoogleDocs.php CHANGED
@@ -1,7 +1,8 @@
1
  <?php
 
2
  namespace EmbedPress\Providers;
3
 
4
- use \Embera\Adapters\Service as EmberaService;
5
 
6
  (defined('ABSPATH') && defined('EMBEDPRESS_IS_LOADED')) or die("No direct script access allowed.");
7
 
@@ -26,7 +27,8 @@ class GoogleDocs extends EmberaService
26
  */
27
  public function validateUrl()
28
  {
29
- return preg_match('~http[s]?:\/\/((?:www\.)?docs\.google\.com\/(?:document|presentation|spreadsheets|forms|drawings)\/[a-z0-9\/\?=_\-\.\,&%\$#\@\!\+]*)~i', $this->url);
 
30
  }
31
 
32
  /**
@@ -41,13 +43,13 @@ class GoogleDocs extends EmberaService
41
  $iframeSrc = html_entity_decode($this->url);
42
 
43
  // Check the type of document
44
- preg_match('~google\.com/(document|presentation|spreadsheets|forms|drawings)/~i', $iframeSrc, $matches);
45
  $type = $matches[1];
46
 
47
  switch ($type) {
48
  case 'document':
49
  // Check if the url still doesn't have the embedded param, and add if needed
50
- if (!preg_match('~([?&])embedded=true~i', $iframeSrc, $matches)) {
51
  if (substr_count($iframeSrc, '?')) {
52
  $iframeSrc .= '&embedded=true';
53
  } else {
@@ -69,8 +71,8 @@ class GoogleDocs extends EmberaService
69
  $query = $query[1];
70
  $query = explode('&', $query);
71
 
72
- if (!empty($query)) {
73
- $hasWidgetParam = false;
74
  $hasHeadersParam = false;
75
 
76
  foreach ($query as $param) {
@@ -81,11 +83,11 @@ class GoogleDocs extends EmberaService
81
  }
82
  }
83
 
84
- if (!$hasWidgetParam) {
85
  $iframeSrc .= '&widget=true';
86
  }
87
 
88
- if (!$hasHeadersParam) {
89
  $iframeSrc .= '&headers=false';
90
  }
91
  }
@@ -105,13 +107,13 @@ class GoogleDocs extends EmberaService
105
  $html = '<img src="' . $iframeSrc . '" width="960" height="720" />';
106
  }
107
 
108
- return array(
109
  'type' => 'rich',
110
  'provider_name' => 'Google Docs',
111
  'provider_url' => 'https://docs.google.com',
112
  'title' => 'Unknown title',
113
  'html' => $html,
114
- 'wrapper_class' => 'ose-google-docs-' . $type
115
- );
116
  }
117
  }
1
  <?php
2
+
3
  namespace EmbedPress\Providers;
4
 
5
+ use Embera\Adapters\Service as EmberaService;
6
 
7
  (defined('ABSPATH') && defined('EMBEDPRESS_IS_LOADED')) or die("No direct script access allowed.");
8
 
27
  */
28
  public function validateUrl()
29
  {
30
+ return preg_match('~http[s]?:\/\/((?:www\.)?docs\.google\.com\/(?:.*/)?(?:document|presentation|spreadsheets|forms|drawings)\/[a-z0-9\/\?=_\-\.\,&%\$#\@\!\+]*)~i',
31
+ $this->url);
32
  }
33
 
34
  /**
43
  $iframeSrc = html_entity_decode($this->url);
44
 
45
  // Check the type of document
46
+ preg_match('~google\.com/(?:.+/)?(document|presentation|spreadsheets|forms|drawings)/~i', $iframeSrc, $matches);
47
  $type = $matches[1];
48
 
49
  switch ($type) {
50
  case 'document':
51
  // Check if the url still doesn't have the embedded param, and add if needed
52
+ if ( ! preg_match('~([?&])embedded=true~i', $iframeSrc, $matches)) {
53
  if (substr_count($iframeSrc, '?')) {
54
  $iframeSrc .= '&embedded=true';
55
  } else {
71
  $query = $query[1];
72
  $query = explode('&', $query);
73
 
74
+ if ( ! empty($query)) {
75
+ $hasWidgetParam = false;
76
  $hasHeadersParam = false;
77
 
78
  foreach ($query as $param) {
83
  }
84
  }
85
 
86
+ if ( ! $hasWidgetParam) {
87
  $iframeSrc .= '&widget=true';
88
  }
89
 
90
+ if ( ! $hasHeadersParam) {
91
  $iframeSrc .= '&headers=false';
92
  }
93
  }
107
  $html = '<img src="' . $iframeSrc . '" width="960" height="720" />';
108
  }
109
 
110
+ return [
111
  'type' => 'rich',
112
  'provider_name' => 'Google Docs',
113
  'provider_url' => 'https://docs.google.com',
114
  'title' => 'Unknown title',
115
  'html' => $html,
116
+ 'wrapper_class' => 'ose-google-docs-' . $type,
117
+ ];
118
  }
119
  }
EmbedPress/Providers/GoogleMaps.php CHANGED
@@ -1,7 +1,8 @@
1
  <?php
 
2
  namespace EmbedPress\Providers;
3
 
4
- use \Embera\Adapters\Service as EmberaService;
5
 
6
  (defined('ABSPATH') && defined('EMBEDPRESS_IS_LOADED')) or die("No direct script access allowed.");
7
 
@@ -26,7 +27,8 @@ class GoogleMaps extends EmberaService
26
  */
27
  public function validateUrl()
28
  {
29
- return preg_match('~http[s]?:\/\/(?:(?:(?:www\.|maps\.)?(?:google\.com?))|(?:goo\.gl))(?:\.[a-z]{2})?\/(?:maps\/)?([a-z0-9\/%,+\-_=!:@\.&*\$#?\']*)~i', $this->url);
 
30
  }
31
 
32
  /**
@@ -45,19 +47,19 @@ class GoogleMaps extends EmberaService
45
  $iframeSrc = $this->url;
46
  } else {
47
  // Extract coordinates and zoom from the url
48
- if (preg_match('~@(-?[0-9\.]+,-?[0-9\.]+).+,([0-9\.]+z)~i', $this->url, $matches)) {
49
  $iframeSrc = 'http://maps.google.com/maps?hl=en&ie=UTF8&ll=' . $matches[1] . '&spn=' . $matches[1] . '&t=m&z=' . round($matches[2]) . '&output=embed';
50
  } else {
51
- return array();
52
  }
53
  }
54
 
55
- return array(
56
  'type' => 'rich',
57
  'provider_name' => 'Google Maps',
58
  'provider_url' => 'https://maps.google.com',
59
  'title' => 'Unknown title',
60
  'html' => '<iframe width="600" height="450" src="' . $iframeSrc . '" frameborder="0"></iframe>',
61
- );
62
  }
63
  }
1
  <?php
2
+
3
  namespace EmbedPress\Providers;
4
 
5
+ use Embera\Adapters\Service as EmberaService;
6
 
7
  (defined('ABSPATH') && defined('EMBEDPRESS_IS_LOADED')) or die("No direct script access allowed.");
8
 
27
  */
28
  public function validateUrl()
29
  {
30
+ return preg_match('~http[s]?:\/\/(?:(?:(?:www\.|maps\.)?(?:google\.com?))|(?:goo\.gl))(?:\.[a-z]{2})?\/(?:maps\/)?(?:place\/)?(?:[a-z0-9\/%+\-_]*)?([a-z0-9\/%,+\-_=!:@\.&*\$#?\']*)~i',
31
+ $this->url);
32
  }
33
 
34
  /**
47
  $iframeSrc = $this->url;
48
  } else {
49
  // Extract coordinates and zoom from the url
50
+ if (preg_match('~@(-?[0-9\.]+,-?[0-9\.]+).+,([0-9\.]+[a-z])~i', $this->url, $matches)) {
51
  $iframeSrc = 'http://maps.google.com/maps?hl=en&ie=UTF8&ll=' . $matches[1] . '&spn=' . $matches[1] . '&t=m&z=' . round($matches[2]) . '&output=embed';
52
  } else {
53
+ return [];
54
  }
55
  }
56
 
57
+ return [
58
  'type' => 'rich',
59
  'provider_name' => 'Google Maps',
60
  'provider_url' => 'https://maps.google.com',
61
  'title' => 'Unknown title',
62
  'html' => '<iframe width="600" height="450" src="' . $iframeSrc . '" frameborder="0"></iframe>',
63
+ ];
64
  }
65
  }
EmbedPress/Providers/Twitch.php CHANGED
@@ -1,4 +1,5 @@
1
  <?php
 
2
  namespace EmbedPress\Providers;
3
 
4
  use Embera\Adapters\Service as EmberaService;
@@ -39,28 +40,28 @@ class Twitch extends EmberaService
39
  return preg_match($this->urlRegexPattern, $this->url);
40
  }
41
 
42
- /**
43
- * Return the type of the embed based on the URL.
44
- *
45
- * @param $url
46
- *
47
- * @return string
48
- */
49
  protected function getType($url)
50
  {
51
- if ( stristr($url, 'clips.twitch.tv') ) {
52
- return 'clip';
53
- }
54
 
55
- if ( stristr($url, '/videos/') ) {
56
- return 'video';
57
- }
58
 
59
- if ( preg_match('#/chat$#', $url) ) {
60
- return 'chat';
61
- }
62
 
63
- return 'channel';
64
  }
65
 
66
  /**
@@ -72,10 +73,10 @@ class Twitch extends EmberaService
72
  */
73
  public function fakeResponse()
74
  {
75
- $url = $this->getUrl();
76
- $providerUrl = 'https://twitch.tv';
77
- $html = '';
78
- $src = '';
79
 
80
  if (preg_match("{$this->urlRegexPattern}i", $url, $matches)) {
81
  $channelName = $matches[1];
@@ -83,40 +84,40 @@ class Twitch extends EmberaService
83
  $type = $this->getType($url);
84
 
85
  // Clip, channel, chat, collection, or video?
86
- switch ($type) {
87
- case 'clip':
88
- $src = 'https://clips.twitch.tv/embed?clip=' . $channelName . '&autoplay=false';
89
- $attrs = 'scrolling="no" frameborder="0" allowfullscreen="true"';
90
- break;
91
-
92
- case 'video':
93
- $channelName = $matches[2];
94
- $src = 'https://player.twitch.tv/?video=' . $channelName;
95
- $attrs = 'scrolling="no" frameborder="0" allowfullscreen="true"';
96
  break;
97
 
98
- case 'channel':
 
 
 
 
 
 
99
  $src = 'https://player.twitch.tv/?channel=' . $channelName;
100
- $attrs = 'scrolling="no" frameborder="0" allowfullscreen="true"';
101
  break;
102
 
103
- case 'chat':
104
- $src = 'http://www.twitch.tv/embed/' . $channelName . '/chat';
105
- $attrs = 'scrolling="yes" frameborder="0" allowfullscreen="true" id="' . $channelName . '"';
106
- break;
107
  }
108
 
109
  $html = '<iframe src="' . $src . '" height="{height}" width="{width}" ' . $attrs . '></iframe>';
110
 
111
- $response = array(
112
  'type' => $type,
113
  'provider_name' => 'Twitch',
114
  'provider_url' => $providerUrl,
115
  'url' => $url,
116
- 'html' => $html
117
- );
118
  } else {
119
- $response = array();
120
  }
121
 
122
  return $response;
1
  <?php
2
+
3
  namespace EmbedPress\Providers;
4
 
5
  use Embera\Adapters\Service as EmberaService;
40
  return preg_match($this->urlRegexPattern, $this->url);
41
  }
42
 
43
+ /**
44
+ * Return the type of the embed based on the URL.
45
+ *
46
+ * @param $url
47
+ *
48
+ * @return string
49
+ */
50
  protected function getType($url)
51
  {
52
+ if (stristr($url, 'clips.twitch.tv')) {
53
+ return 'clip';
54
+ }
55
 
56
+ if (stristr($url, '/videos/')) {
57
+ return 'video';
58
+ }
59
 
60
+ if (preg_match('#/chat$#', $url)) {
61
+ return 'chat';
62
+ }
63
 
64
+ return 'channel';
65
  }
66
 
67
  /**
73
  */
74
  public function fakeResponse()
75
  {
76
+ $url = $this->getUrl();
77
+ $providerUrl = 'https://twitch.tv';
78
+ $html = '';
79
+ $src = '';
80
 
81
  if (preg_match("{$this->urlRegexPattern}i", $url, $matches)) {
82
  $channelName = $matches[1];
84
  $type = $this->getType($url);
85
 
86
  // Clip, channel, chat, collection, or video?
87
+ switch ($type) {
88
+ case 'clip':
89
+ $src = 'https://clips.twitch.tv/embed?clip=' . $channelName . '&autoplay=false';
90
+ $attrs = 'scrolling="no" frameborder="0" allowfullscreen="true"';
 
 
 
 
 
 
91
  break;
92
 
93
+ case 'video':
94
+ $channelName = $matches[2];
95
+ $src = 'https://player.twitch.tv/?video=' . $channelName;
96
+ $attrs = 'scrolling="no" frameborder="0" allowfullscreen="true"';
97
+ break;
98
+
99
+ case 'channel':
100
  $src = 'https://player.twitch.tv/?channel=' . $channelName;
101
+ $attrs = 'scrolling="no" frameborder="0" allowfullscreen="true"';
102
  break;
103
 
104
+ case 'chat':
105
+ $src = 'http://www.twitch.tv/embed/' . $channelName . '/chat';
106
+ $attrs = 'scrolling="yes" frameborder="0" allowfullscreen="true" id="' . $channelName . '"';
107
+ break;
108
  }
109
 
110
  $html = '<iframe src="' . $src . '" height="{height}" width="{width}" ' . $attrs . '></iframe>';
111
 
112
+ $response = [
113
  'type' => $type,
114
  'provider_name' => 'Twitch',
115
  'provider_url' => $providerUrl,
116
  'url' => $url,
117
+ 'html' => $html,
118
+ ];
119
  } else {
120
+ $response = [];
121
  }
122
 
123
  return $response;
EmbedPress/Providers/index.html CHANGED
@@ -1,9 +1,9 @@
1
  <!DOCTYPE html>
2
  <html>
3
- <head>
4
- <title>403 Forbidden</title>
5
- </head>
6
- <body>
7
- <p>Directory access is forbidden.</p>
8
- </body>
9
  </html>
1
  <!DOCTYPE html>
2
  <html>
3
+ <head>
4
+ <title>403 Forbidden</title>
5
+ </head>
6
+ <body>
7
+ <p>Directory access is forbidden.</p>
8
+ </body>
9
  </html>
EmbedPress/RestAPI.php ADDED
@@ -0,0 +1,51 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <?php
2
+
3
+ namespace EmbedPress;
4
+
5
+ (defined('ABSPATH') && defined('EMBEDPRESS_IS_LOADED')) or die("No direct script access allowed.");
6
+
7
+ /**
8
+ * Entity responsible for maintaining and registering all hooks that power the plugin.
9
+ *
10
+ * @package EmbedPress
11
+ * @author EmbedPress <help@embedpress.com>
12
+ * @copyright Copyright (C) 2018 EmbedPress. All rights reserved.
13
+ * @license GPLv2 or later
14
+ * @since 1.0.0
15
+ */
16
+ class RestAPI
17
+ {
18
+ /**
19
+ * @param \WP_REST_Request $request
20
+ */
21
+ public static function oembed($request)
22
+ {
23
+ $url = sanitize_url($request->get_param('url'));
24
+
25
+ if (empty($url)) {
26
+ return new \WP_Error('embedpress_invalid_url', 'Invalid Embed URL', ['status' => 404]);
27
+ }
28
+
29
+ $config = [];
30
+ $embera = new \Embera\Embera($config);
31
+
32
+ $additionalServiceProviders = Core::getAdditionalServiceProviders();
33
+ if ( ! empty($additionalServiceProviders)) {
34
+ foreach ($additionalServiceProviders as $serviceProviderClassName => $serviceProviderUrls) {
35
+ Shortcode::addServiceProvider($serviceProviderClassName, $serviceProviderUrls, $embera);
36
+ }
37
+ }
38
+
39
+ $urlInfo = $embera->getUrlInfo($url);
40
+ if (isset($urlInfo[$url])) {
41
+ $urlInfo = (object)$urlInfo[$url];
42
+ $response['canBeResponsive'] = Core::canServiceProviderBeResponsive($urlInfo->provider_alias);
43
+ }
44
+
45
+ if (empty($urlInfo)) {
46
+ return new \WP_Error('embedpress_invalid_url', 'Invalid Embed URL', ['status' => 404]);
47
+ }
48
+
49
+ return new \WP_REST_Response($urlInfo, 202);
50
+ }
51
+ }
EmbedPress/Shortcode.php CHANGED
@@ -1,9 +1,9 @@
1
  <?php
 
2
  namespace EmbedPress;
3
 
4
- use \EmbedPress\Core;
5
- use \Embera\Embera;
6
- use \Embera\Formatter;
7
 
8
  (defined('ABSPATH') && defined('EMBEDPRESS_IS_LOADED')) or die("No direct script access allowed.");
9
 
@@ -25,7 +25,7 @@ class Shortcode
25
  * @access private
26
  * @static
27
  *
28
- * @var string $oEmbedInstance
29
  */
30
  private static $oEmbedInstance = null;
31
 
@@ -40,7 +40,8 @@ class Shortcode
40
  public static function register()
41
  {
42
  // Register the new shortcode for embeds.
43
- add_shortcode(EMBEDPRESS_SHORTCODE, array('\\EmbedPress\\Shortcode', 'do_shortcode'));
 
44
  }
45
 
46
  /**
@@ -49,11 +50,12 @@ class Shortcode
49
  * @since 1.0.0
50
  * @static
51
  *
52
- * @param array $attributes Array of attributes
53
- * @param string $subject The given string
 
54
  * @return string
55
  */
56
- public static function do_shortcode($attributes = array(), $subject = null)
57
  {
58
  $embed = self::parseContent($subject, true, $attributes);
59
 
@@ -68,32 +70,34 @@ class Shortcode
68
  *
69
  * @param string The raw content that will be replaced.
70
  * @param boolean Optional. If true, new lines at the end of the embeded code are stripped.
 
71
  * @return string
72
  */
73
- public static function parseContent($subject, $stripNewLine = false, $customAttributes = array())
74
  {
75
- if (!empty($subject)) {
76
  if (empty($customAttributes)) {
77
  $customAttributes = self::parseContentAttributesFromString($subject);
78
  }
79
 
80
- $content = preg_replace('/(\['. EMBEDPRESS_SHORTCODE .'(?:\]|.+?\])|\[\/'. EMBEDPRESS_SHORTCODE .'\])/i', "", $subject);
 
81
 
82
  // Converts any special HTML entities back to characters.
83
  $content = htmlspecialchars_decode($content);
84
 
85
  // Check if the WP_oEmbed class is loaded
86
- if (!self::$oEmbedInstance) {
87
- require_once ABSPATH .'wp-includes/class-oembed.php';
88
 
89
  self::$oEmbedInstance = _wp_oembed_get_object();
90
  }
91
 
92
- $emberaInstanceSettings = array(
93
- 'params' => array()
94
- );
95
 
96
- $content_uid = md5( $content );
97
 
98
  $attributes = self::parseContentAttributes($customAttributes, $content_uid);
99
  if (isset($attributes['width']) || isset($attributes['height'])) {
@@ -118,7 +122,7 @@ class Shortcode
118
  $emberaInstance = new Embera($emberaInstanceSettings);
119
  // Add support to the user's custom service providers
120
  $additionalServiceProviders = Core::getAdditionalServiceProviders();
121
- if (!empty($additionalServiceProviders)) {
122
  foreach ($additionalServiceProviders as $serviceProviderClassName => $serviceProviderUrls) {
123
  self::addServiceProvider($serviceProviderClassName, $serviceProviderUrls, $emberaInstance);
124
  }
@@ -148,22 +152,22 @@ class Shortcode
148
  }
149
 
150
  // Transform all shortcode attributes into html form. I.e.: {foo: "joe"} -> foo="joe"
151
- $attributesHtml = array();
152
  foreach ($attributes as $attrName => $attrValue) {
153
- $attributesHtml[] = $attrName .'="'. $attrValue .'"';
154
  }
155
 
156
  // Define the EmbedPress html template where the generated embed will be injected in
157
- $embedTemplate = '<div '. implode(' ', $attributesHtml) .'>{html}</div>';
158
 
159
  // Check if $content is a google shortened url and tries to extract from it which Google service it refers to.
160
  if (preg_match('/http[s]?:\/\/goo\.gl\/(?:([a-z]+)\/)?[a-z0-9]+\/?$/i', $content, $matches)) {
161
  // Fetch all headers from the short-url so we can know how to handle its original content depending on the service.
162
  $headers = get_headers($content);
163
 
164
- $supportedServicesHeadersPatterns = array(
165
- 'maps' => '/^Location:\s+(http[s]?:\/\/.+)$/i'
166
- );
167
 
168
  $service = isset($matches[1]) ? strtolower($matches[1]) : null;
169
  // No specific service was found in the url.
@@ -182,9 +186,10 @@ class Shortcode
182
  // Check if the Google service is supported atm.
183
  if (isset($supportedServicesHeadersPatterns[$service])) {
184
  // Tries to extract the url based on its headers.
185
- $originalUrl = self::extractContentFromHeaderAsArray($supportedServicesHeadersPatterns[$service], $headers);
 
186
  // Replace the shortened url with its original url if the specific header was found.
187
- if (!empty($originalUrl)) {
188
  $content = $originalUrl;
189
  }
190
  unset($originalUrl);
@@ -195,7 +200,7 @@ class Shortcode
195
 
196
  // Facebook is a special case. WordPress will try to embed them using OEmbed, but they always end up embedding the profile page, regardless
197
  // if the url was pointing to a photo, a post, etc. So, since Embera can embed only facebook-media/posts, we'll use it only for that.
198
- if (isset($urlData->provider_name) && in_array($urlData->provider_name, array('Facebook'))) {
199
  // Check if this is a Facebook profile url.
200
  if (preg_match('/facebook\.com\/(?:[^\/]+?)\/?$/', $content, $match)) {
201
  // Try to embed the url using WP's OSEmbed.
@@ -209,13 +214,13 @@ class Shortcode
209
  $parsedContent = self::$oEmbedInstance->get_html($content, $attributes);
210
  }
211
 
212
- if (!$parsedContent) {
213
- if (!isset($emberaInstance)) {
214
  // If the embed couldn't be generated, we'll try to use Embera's API
215
  $emberaInstance = new Embera($emberaInstanceSettings);
216
  // Add support to the user's custom service providers
217
  $additionalServiceProviders = Core::getAdditionalServiceProviders();
218
- if (!empty($additionalServiceProviders)) {
219
  foreach ($additionalServiceProviders as $serviceProviderClassName => $serviceProviderUrls) {
220
  self::addServiceProvider($serviceProviderClassName, $serviceProviderUrls, $emberaInstance);
221
  }
@@ -240,26 +245,29 @@ class Shortcode
240
  $parsedContent = str_replace("'", '"', $parsedContent);
241
 
242
  // Replace the flag `{provider_alias}` which is used by Embera with the "ose-<serviceProviderAlias>". I.e: YouTube -> "ose-youtube"
243
- $parsedContent = preg_replace('/((?:ose-)?\{provider_alias\})/i', "ose-". strtolower($urlData->provider_name), $parsedContent);
 
244
  }
245
 
246
  if (isset($urlData->provider_name) || (is_array($urlData) && isset($urlData[$content]['provider_name']))) {
247
  // NFB seems to always return their embed code with all HTML entities into their applicable characters string.
248
  if ((isset($urlData->provider_name) && strtoupper($urlData->provider_name) === "NATIONAL FILM BOARD OF CANADA") || (is_array($urlData) && isset($urlData[$content]['provider_name']) && strtoupper($urlData[$content]['provider_name']) === "NATIONAL FILM BOARD OF CANADA")) {
249
  $parsedContent = html_entity_decode($parsedContent);
250
- } else if ((isset($urlData->provider_name) && strtoupper($urlData->provider_name) === "FACEBOOK") || (is_array($urlData) && isset($urlData[$content]['provider_name']) && strtoupper($urlData[$content]['provider_name']) === "FACEBOOK")) {
251
  $plgSettings = Core::getSettings();
252
 
253
  // Check if the user wants to force a certain language into Facebook embeds.
254
- $locale = isset($plgSettings->fbLanguage) && !empty($plgSettings->fbLanguage) ? $plgSettings->fbLanguage : false;
255
- if (!!$locale) {
256
  // Replace the automatically detected language by Facebook's API with the language chosen by the user.
257
- $parsedContent = preg_replace('/\/[a-z]{2}\_[a-z]{2}\/sdk\.js/i', "/{$locale}/sdk.js", $parsedContent);
 
258
  }
259
 
260
  // Make sure `adapt_container_width` parameter is set to false. Setting to true, as it is by default, might cause Facebook to render embeds inside editors (in admin) with only 180px wide.
261
  if (is_admin()) {
262
- $parsedContent = preg_replace('~data\-adapt\-container\-width=\"(?:true|1)\"~i', 'data-adapt-container-width="0"', $parsedContent);
 
263
  }
264
 
265
  unset($locale, $plgSettings);
@@ -271,7 +279,7 @@ class Shortcode
271
  // This assure that the iframe has the same dimensions the user wants to
272
  if (isset($emberaInstanceSettings['params']['width']) || isset($emberaInstanceSettings['params']['height'])) {
273
  if (isset($emberaInstanceSettings['params']['width']) && isset($emberaInstanceSettings['params']['height'])) {
274
- $customWidth = (int)$emberaInstanceSettings['params']['width'];
275
  $customHeight = (int)$emberaInstanceSettings['params']['height'];
276
  } else {
277
  if (preg_match('~width="(\d+)"|width\s+:\s+(\d+)~i', $parsedContent, $matches)) {
@@ -286,30 +294,33 @@ class Shortcode
286
  $iframeRatio = ceil($iframeWidth / $iframeHeight);
287
 
288
  if (isset($emberaInstanceSettings['params']['width'])) {
289
- $customWidth = (int)$emberaInstanceSettings['params']['width'];
290
  $customHeight = ceil($customWidth / $iframeRatio);
291
  } else {
292
  $customHeight = (int)$emberaInstanceSettings['params']['height'];
293
- $customWidth = $iframeRatio * $customHeight;
294
  }
295
  }
296
  }
297
 
298
  if (isset($customWidth) && isset($customHeight)) {
299
  if (preg_match('~width="(\d+)"~i', $parsedContent)) {
300
- $parsedContent = preg_replace('~width="(\d+)"~i', 'width="'. $customWidth .'"', $parsedContent);
 
301
  }
302
 
303
  if (preg_match('~height="(\d+)"~i', $parsedContent)) {
304
- $parsedContent = preg_replace('~height="(\d+)"~i', 'height="'. $customHeight .'"', $parsedContent);
 
305
  }
306
 
307
  if (preg_match('~width\s+:\s+(\d+)~i', $parsedContent)) {
308
- $parsedContent = preg_replace('~width\s+:\s+(\d+)~i', 'width: '. $customWidth, $parseContent);
309
  }
310
 
311
  if (preg_match('~height\s+:\s+(\d+)~i', $parsedContent)) {
312
- $parsedContent = preg_replace('~height\s+:\s+(\d+)~i', 'height: '. $customHeight, $parseContent);
 
313
  }
314
  }
315
  }
@@ -320,12 +331,12 @@ class Shortcode
320
 
321
  $parsedContent = apply_filters('pp_embed_parsed_content', $parsedContent, $urlData, $attributes);
322
 
323
- if (!empty($parsedContent)) {
324
- $embed = (object)array_merge((array)$urlData, array(
325
  'attributes' => (object)$attributes,
326
  'embed' => $parsedContent,
327
- 'url' => $content
328
- ));
329
 
330
  $embed = apply_filters('embedpress:onAfterEmbed', $embed);
331
 
@@ -342,9 +353,10 @@ class Shortcode
342
  * @since 1.0.0
343
  * @static
344
  *
345
- * @param string $className The new SP class name.
346
- * @param string $reference The new SP reference name.
347
- * @param \Embera\Embera $emberaInstance The embera's instance where the SP will be registered in.
 
348
  * @return boolean
349
  */
350
  public static function addServiceProvider($className, $reference, &$emberaInstance)
@@ -354,8 +366,8 @@ class Shortcode
354
  }
355
 
356
  if (is_string($reference)) {
357
- $emberaInstance->addProvider($reference, EMBEDPRESS_NAMESPACE ."\\Providers\\{$className}");
358
- } else if (is_array($reference)) {
359
  foreach ($reference as $serviceProviderUrl) {
360
  self::addServiceProvider($className, $serviceProviderUrl, $emberaInstance);
361
  }
@@ -370,12 +382,13 @@ class Shortcode
370
  * @since 1.0.0
371
  * @static
372
  *
373
- * @param string $subject The given shortcoded string.
 
374
  * @return array
375
  */
376
  public static function parseContentAttributesFromString($subject)
377
  {
378
- $customAttributes = array();
379
  if (preg_match('/\[embed\s*(.*?)\]/i', stripslashes($subject), $m)) {
380
  if (preg_match_all('/(\!?\w+-?\w*)(?:="(.+?)")?/i', stripslashes($m[1]), $matches)) {
381
  $attributes = $matches[1];
@@ -397,21 +410,22 @@ class Shortcode
397
  * @access private
398
  * @static
399
  *
400
- * @param array $customAttributes The array containing the embed attributes.
401
- * @param string $content_uid An optional string specifying a unique ID for the embed
 
402
  * @return array
403
  */
404
  private static function parseContentAttributes(array $customAttributes, $content_uid = null)
405
  {
406
- $attributes = array(
407
- 'class' => array("embedpress-wrapper")
408
- );
409
 
410
- $embedShouldBeResponsive = true;
411
  $embedShouldHaveCustomDimensions = false;
412
- if (!empty($customAttributes)) {
413
  if (isset($customAttributes['class'])) {
414
- if (!empty($customAttributes['class'])) {
415
  $customAttributes['class'] = explode(' ', $customAttributes['class']);
416
 
417
  $attributes['class'] = array_merge($attributes['class'], $customAttributes['class']);
@@ -421,33 +435,33 @@ class Shortcode
421
  }
422
 
423
  if (isset($customAttributes['width'])) {
424
- if (!empty($customAttributes['width'])) {
425
- $attributes['width'] = (int)$customAttributes['width'];
426
  $embedShouldHaveCustomDimensions = true;
427
  }
428
  }
429
 
430
  if (isset($customAttributes['height'])) {
431
- if (!empty($customAttributes['height'])) {
432
- $attributes['height'] = (int)$customAttributes['height'];
433
  $embedShouldHaveCustomDimensions = true;
434
  }
435
  }
436
 
437
- if (!empty($customAttributes)) {
438
  $attrNameDefaultPrefix = "data-";
439
  foreach ($customAttributes as $attrName => $attrValue) {
440
  if (is_numeric($attrName)) {
441
- $attrName = $attrValue;
442
  $attrValue = "";
443
  }
444
 
445
  $attrName = str_replace($attrNameDefaultPrefix, "", $attrName);
446
 
447
- if (!strlen($attrValue)) {
448
  if ($attrName[0] === "!") {
449
  $attrValue = "false";
450
- $attrName = substr($attrName, 1);
451
  } else {
452
  $attrValue = "true";
453
  }
@@ -458,13 +472,13 @@ class Shortcode
458
  }
459
 
460
  // Check if there's any "responsive" parameter
461
- $responsiveAttributes = array("responsive", "data-responsive");
462
  foreach ($responsiveAttributes as $responsiveAttr) {
463
  if (isset($attributes[$responsiveAttr])) {
464
- if (!strlen($attributes[$responsiveAttr])) { // If the parameter is passed but have no value, it will be true by default
465
  $embedShouldBeResponsive = true;
466
  } else {
467
- $embedShouldBeResponsive = !self::valueIsFalse($attributes[$responsiveAttr]);
468
  }
469
 
470
  break;
@@ -475,11 +489,11 @@ class Shortcode
475
 
476
  $attributes['class'][] = 'ose-{provider_alias}';
477
 
478
- if (! empty($content_uid)) {
479
  $attributes['class'][] = 'ose-uid-' . $content_uid;
480
  }
481
 
482
- if ($embedShouldBeResponsive && !$embedShouldHaveCustomDimensions) {
483
  $attributes['class'][] = 'responsive';
484
  } else {
485
  $attributes['data-responsive'] = "false";
@@ -496,7 +510,8 @@ class Shortcode
496
  * @since 1.0.0
497
  * @static
498
  *
499
- * @param mixed $subject The value to be checked.
 
500
  * @return boolean
501
  */
502
  public static function valueIsFalse($subject)
@@ -524,8 +539,8 @@ class Shortcode
524
  * @access private
525
  * @static
526
  *
527
- * @param string $headerPattern Regex pattern the header and its value must match.
528
- * @param array $headersList A list of headers resulted from a get_headers() call.
529
  *
530
  * @return mixed
531
  */
@@ -565,7 +580,7 @@ class Shortcode
565
  if (substr_count($key, '-')) {
566
  unset($data->$key);
567
 
568
- $key = str_replace('-', '_', $key);
569
  $data->$key = $value;
570
  }
571
  }
@@ -574,7 +589,7 @@ class Shortcode
574
  if (substr_count($key, '-')) {
575
  unset($data[$key]);
576
 
577
- $key = str_replace('-', '_', $key);
578
  $data[$key] = $value;
579
  }
580
  }
1
  <?php
2
+
3
  namespace EmbedPress;
4
 
5
+ use Embera\Embera;
6
+ use Embera\Formatter;
 
7
 
8
  (defined('ABSPATH') && defined('EMBEDPRESS_IS_LOADED')) or die("No direct script access allowed.");
9
 
25
  * @access private
26
  * @static
27
  *
28
+ * @var string $oEmbedInstance
29
  */
30
  private static $oEmbedInstance = null;
31
 
40
  public static function register()
41
  {
42
  // Register the new shortcode for embeds.
43
+ add_shortcode(EMBEDPRESS_SHORTCODE, ['\\EmbedPress\\Shortcode', 'do_shortcode']);
44
+ add_shortcode('embed_oembed_html', ['\\EmbedPress\\Shortcode', 'do_shortcode']);
45
  }
46
 
47
  /**
50
  * @since 1.0.0
51
  * @static
52
  *
53
+ * @param array $attributes Array of attributes
54
+ * @param string $subject The given string
55
+ *
56
  * @return string
57
  */
58
+ public static function do_shortcode($attributes = [], $subject = null)
59
  {
60
  $embed = self::parseContent($subject, true, $attributes);
61
 
70
  *
71
  * @param string The raw content that will be replaced.
72
  * @param boolean Optional. If true, new lines at the end of the embeded code are stripped.
73
+ *
74
  * @return string
75
  */
76
+ public static function parseContent($subject, $stripNewLine = false, $customAttributes = [])
77
  {
78
+ if ( ! empty($subject)) {
79
  if (empty($customAttributes)) {
80
  $customAttributes = self::parseContentAttributesFromString($subject);
81
  }
82
 
83
+ $content = preg_replace('/(\[' . EMBEDPRESS_SHORTCODE . '(?:\]|.+?\])|\[\/' . EMBEDPRESS_SHORTCODE . '\])/i',
84
+ "", $subject);
85
 
86
  // Converts any special HTML entities back to characters.
87
  $content = htmlspecialchars_decode($content);
88
 
89
  // Check if the WP_oEmbed class is loaded
90
+ if ( ! self::$oEmbedInstance) {
91
+ require_once ABSPATH . 'wp-includes/class-oembed.php';
92
 
93
  self::$oEmbedInstance = _wp_oembed_get_object();
94
  }
95
 
96
+ $emberaInstanceSettings = [
97
+ 'params' => [],
98
+ ];
99
 
100
+ $content_uid = md5($content);
101
 
102
  $attributes = self::parseContentAttributes($customAttributes, $content_uid);
103
  if (isset($attributes['width']) || isset($attributes['height'])) {
122
  $emberaInstance = new Embera($emberaInstanceSettings);
123
  // Add support to the user's custom service providers
124
  $additionalServiceProviders = Core::getAdditionalServiceProviders();
125
+ if ( ! empty($additionalServiceProviders)) {
126
  foreach ($additionalServiceProviders as $serviceProviderClassName => $serviceProviderUrls) {
127
  self::addServiceProvider($serviceProviderClassName, $serviceProviderUrls, $emberaInstance);
128
  }
152
  }
153
 
154
  // Transform all shortcode attributes into html form. I.e.: {foo: "joe"} -> foo="joe"
155
+ $attributesHtml = [];
156
  foreach ($attributes as $attrName => $attrValue) {
157
+ $attributesHtml[] = $attrName . '="' . $attrValue . '"';
158
  }
159
 
160
  // Define the EmbedPress html template where the generated embed will be injected in
161
+ $embedTemplate = '<div ' . implode(' ', $attributesHtml) . '>{html}</div>';
162
 
163
  // Check if $content is a google shortened url and tries to extract from it which Google service it refers to.
164
  if (preg_match('/http[s]?:\/\/goo\.gl\/(?:([a-z]+)\/)?[a-z0-9]+\/?$/i', $content, $matches)) {
165
  // Fetch all headers from the short-url so we can know how to handle its original content depending on the service.
166
  $headers = get_headers($content);
167
 
168
+ $supportedServicesHeadersPatterns = [
169
+ 'maps' => '/^Location:\s+(http[s]?:\/\/.+)$/i',
170
+ ];
171
 
172
  $service = isset($matches[1]) ? strtolower($matches[1]) : null;
173
  // No specific service was found in the url.
186
  // Check if the Google service is supported atm.
187
  if (isset($supportedServicesHeadersPatterns[$service])) {
188
  // Tries to extract the url based on its headers.
189
+ $originalUrl = self::extractContentFromHeaderAsArray($supportedServicesHeadersPatterns[$service],
190
+ $headers);
191
  // Replace the shortened url with its original url if the specific header was found.
192
+ if ( ! empty($originalUrl)) {
193
  $content = $originalUrl;
194
  }
195
  unset($originalUrl);
200
 
201
  // Facebook is a special case. WordPress will try to embed them using OEmbed, but they always end up embedding the profile page, regardless
202
  // if the url was pointing to a photo, a post, etc. So, since Embera can embed only facebook-media/posts, we'll use it only for that.
203
+ if (isset($urlData->provider_name) && in_array($urlData->provider_name, ['Facebook'])) {
204
  // Check if this is a Facebook profile url.
205
  if (preg_match('/facebook\.com\/(?:[^\/]+?)\/?$/', $content, $match)) {
206
  // Try to embed the url using WP's OSEmbed.
214
  $parsedContent = self::$oEmbedInstance->get_html($content, $attributes);
215
  }
216
 
217
+ if ( ! $parsedContent) {
218
+ if ( ! isset($emberaInstance)) {
219
  // If the embed couldn't be generated, we'll try to use Embera's API
220
  $emberaInstance = new Embera($emberaInstanceSettings);
221
  // Add support to the user's custom service providers
222
  $additionalServiceProviders = Core::getAdditionalServiceProviders();
223
+ if ( ! empty($additionalServiceProviders)) {
224
  foreach ($additionalServiceProviders as $serviceProviderClassName => $serviceProviderUrls) {
225
  self::addServiceProvider($serviceProviderClassName, $serviceProviderUrls, $emberaInstance);
226
  }
245
  $parsedContent = str_replace("'", '"', $parsedContent);
246
 
247
  // Replace the flag `{provider_alias}` which is used by Embera with the "ose-<serviceProviderAlias>". I.e: YouTube -> "ose-youtube"
248
+ $parsedContent = preg_replace('/((?:ose-)?\{provider_alias\})/i',
249
+ "ose-" . strtolower($urlData->provider_name), $parsedContent);
250
  }
251
 
252
  if (isset($urlData->provider_name) || (is_array($urlData) && isset($urlData[$content]['provider_name']))) {
253
  // NFB seems to always return their embed code with all HTML entities into their applicable characters string.
254
  if ((isset($urlData->provider_name) && strtoupper($urlData->provider_name) === "NATIONAL FILM BOARD OF CANADA") || (is_array($urlData) && isset($urlData[$content]['provider_name']) && strtoupper($urlData[$content]['provider_name']) === "NATIONAL FILM BOARD OF CANADA")) {
255
  $parsedContent = html_entity_decode($parsedContent);
256
+ } elseif ((isset($urlData->provider_name) && strtoupper($urlData->provider_name) === "FACEBOOK") || (is_array($urlData) && isset($urlData[$content]['provider_name']) && strtoupper($urlData[$content]['provider_name']) === "FACEBOOK")) {
257
  $plgSettings = Core::getSettings();
258
 
259
  // Check if the user wants to force a certain language into Facebook embeds.
260
+ $locale = isset($plgSettings->fbLanguage) && ! empty($plgSettings->fbLanguage) ? $plgSettings->fbLanguage : false;
261
+ if ( ! ! $locale) {
262
  // Replace the automatically detected language by Facebook's API with the language chosen by the user.
263
+ $parsedContent = preg_replace('/\/[a-z]{2}\_[a-z]{2}\/sdk\.js/i', "/{$locale}/sdk.js",
264
+ $parsedContent);
265
  }
266
 
267
  // Make sure `adapt_container_width` parameter is set to false. Setting to true, as it is by default, might cause Facebook to render embeds inside editors (in admin) with only 180px wide.
268
  if (is_admin()) {
269
+ $parsedContent = preg_replace('~data\-adapt\-container\-width=\"(?:true|1)\"~i',
270
+ 'data-adapt-container-width="0"', $parsedContent);
271
  }
272
 
273
  unset($locale, $plgSettings);
279
  // This assure that the iframe has the same dimensions the user wants to
280
  if (isset($emberaInstanceSettings['params']['width']) || isset($emberaInstanceSettings['params']['height'])) {
281
  if (isset($emberaInstanceSettings['params']['width']) && isset($emberaInstanceSettings['params']['height'])) {
282
+ $customWidth = (int)$emberaInstanceSettings['params']['width'];
283
  $customHeight = (int)$emberaInstanceSettings['params']['height'];
284
  } else {
285
  if (preg_match('~width="(\d+)"|width\s+:\s+(\d+)~i', $parsedContent, $matches)) {
294
  $iframeRatio = ceil($iframeWidth / $iframeHeight);
295
 
296
  if (isset($emberaInstanceSettings['params']['width'])) {
297
+ $customWidth = (int)$emberaInstanceSettings['params']['width'];
298
  $customHeight = ceil($customWidth / $iframeRatio);
299
  } else {
300
  $customHeight = (int)$emberaInstanceSettings['params']['height'];
301
+ $customWidth = $iframeRatio * $customHeight;
302
  }
303
  }
304
  }
305
 
306
  if (isset($customWidth) && isset($customHeight)) {
307
  if (preg_match('~width="(\d+)"~i', $parsedContent)) {
308
+ $parsedContent = preg_replace('~width="(\d+)"~i', 'width="' . $customWidth . '"',
309
+ $parsedContent);
310
  }
311
 
312
  if (preg_match('~height="(\d+)"~i', $parsedContent)) {
313
+ $parsedContent = preg_replace('~height="(\d+)"~i', 'height="' . $customHeight . '"',
314
+ $parsedContent);
315
  }
316
 
317
  if (preg_match('~width\s+:\s+(\d+)~i', $parsedContent)) {
318
+ $parsedContent = preg_replace('~width\s+:\s+(\d+)~i', 'width: ' . $customWidth, $parseContent);
319
  }
320
 
321
  if (preg_match('~height\s+:\s+(\d+)~i', $parsedContent)) {
322
+ $parsedContent = preg_replace('~height\s+:\s+(\d+)~i', 'height: ' . $customHeight,
323
+ $parseContent);
324
  }
325
  }
326
  }
331
 
332
  $parsedContent = apply_filters('pp_embed_parsed_content', $parsedContent, $urlData, $attributes);
333
 
334
+ if ( ! empty($parsedContent)) {
335
+ $embed = (object)array_merge((array)$urlData, [
336
  'attributes' => (object)$attributes,
337
  'embed' => $parsedContent,
338
+ 'url' => $content,
339
+ ]);
340
 
341
  $embed = apply_filters('embedpress:onAfterEmbed', $embed);
342
 
353
  * @since 1.0.0
354
  * @static
355
  *
356
+ * @param string $className The new SP class name.
357
+ * @param string $reference The new SP reference name.
358
+ * @param \Embera\Embera $emberaInstance The embera's instance where the SP will be registered in.
359
+ *
360
  * @return boolean
361
  */
362
  public static function addServiceProvider($className, $reference, &$emberaInstance)
366
  }
367
 
368
  if (is_string($reference)) {
369
+ $emberaInstance->addProvider($reference, EMBEDPRESS_NAMESPACE . "\\Providers\\{$className}");
370
+ } elseif (is_array($reference)) {
371
  foreach ($reference as $serviceProviderUrl) {
372
  self::addServiceProvider($className, $serviceProviderUrl, $emberaInstance);
373
  }
382
  * @since 1.0.0
383
  * @static
384
  *
385
+ * @param string $subject The given shortcoded string.
386
+ *
387
  * @return array
388
  */
389
  public static function parseContentAttributesFromString($subject)
390
  {
391
+ $customAttributes = [];
392
  if (preg_match('/\[embed\s*(.*?)\]/i', stripslashes($subject), $m)) {
393
  if (preg_match_all('/(\!?\w+-?\w*)(?:="(.+?)")?/i', stripslashes($m[1]), $matches)) {
394
  $attributes = $matches[1];
410
  * @access private
411
  * @static
412
  *
413
+ * @param array $customAttributes The array containing the embed attributes.
414
+ * @param string $content_uid An optional string specifying a unique ID for the embed
415
+ *
416
  * @return array
417
  */
418
  private static function parseContentAttributes(array $customAttributes, $content_uid = null)
419
  {
420
+ $attributes = [
421
+ 'class' => ["embedpress-wrapper"],
422
+ ];
423
 
424
+ $embedShouldBeResponsive = true;
425
  $embedShouldHaveCustomDimensions = false;
426
+ if ( ! empty($customAttributes)) {
427
  if (isset($customAttributes['class'])) {
428
+ if ( ! empty($customAttributes['class'])) {
429
  $customAttributes['class'] = explode(' ', $customAttributes['class']);
430
 
431
  $attributes['class'] = array_merge($attributes['class'], $customAttributes['class']);
435
  }
436
 
437
  if (isset($customAttributes['width'])) {
438
+ if ( ! empty($customAttributes['width'])) {
439
+ $attributes['width'] = (int)$customAttributes['width'];
440
  $embedShouldHaveCustomDimensions = true;
441
  }
442
  }
443
 
444
  if (isset($customAttributes['height'])) {
445
+ if ( ! empty($customAttributes['height'])) {
446
+ $attributes['height'] = (int)$customAttributes['height'];
447
  $embedShouldHaveCustomDimensions = true;
448
  }
449
  }
450
 
451
+ if ( ! empty($customAttributes)) {
452
  $attrNameDefaultPrefix = "data-";
453
  foreach ($customAttributes as $attrName => $attrValue) {
454
  if (is_numeric($attrName)) {
455
+ $attrName = $attrValue;
456
  $attrValue = "";
457
  }
458
 
459
  $attrName = str_replace($attrNameDefaultPrefix, "", $attrName);
460
 
461
+ if ( ! strlen($attrValue)) {
462
  if ($attrName[0] === "!") {
463
  $attrValue = "false";
464
+ $attrName = substr($attrName, 1);
465
  } else {
466
  $attrValue = "true";
467
  }
472
  }
473
 
474
  // Check if there's any "responsive" parameter
475
+ $responsiveAttributes = ["responsive", "data-responsive"];
476
  foreach ($responsiveAttributes as $responsiveAttr) {
477
  if (isset($attributes[$responsiveAttr])) {
478
+ if ( ! strlen($attributes[$responsiveAttr])) { // If the parameter is passed but have no value, it will be true by default
479
  $embedShouldBeResponsive = true;
480
  } else {
481
+ $embedShouldBeResponsive = ! self::valueIsFalse($attributes[$responsiveAttr]);
482
  }
483
 
484
  break;
489
 
490
  $attributes['class'][] = 'ose-{provider_alias}';
491
 
492
+ if ( ! empty($content_uid)) {
493
  $attributes['class'][] = 'ose-uid-' . $content_uid;
494
  }
495
 
496
+ if ($embedShouldBeResponsive && ! $embedShouldHaveCustomDimensions) {
497
  $attributes['class'][] = 'responsive';
498
  } else {
499
  $attributes['data-responsive'] = "false";
510
  * @since 1.0.0
511
  * @static
512
  *
513
+ * @param mixed $subject The value to be checked.
514
+ *
515
  * @return boolean
516
  */
517
  public static function valueIsFalse($subject)
539
  * @access private
540
  * @static
541
  *
542
+ * @param string $headerPattern Regex pattern the header and its value must match.
543
+ * @param array $headersList A list of headers resulted from a get_headers() call.
544
  *
545
  * @return mixed
546
  */
580
  if (substr_count($key, '-')) {
581
  unset($data->$key);
582
 
583
+ $key = str_replace('-', '_', $key);
584
  $data->$key = $value;
585
  }
586
  }
589
  if (substr_count($key, '-')) {
590
  unset($data[$key]);
591
 
592
+ $key = str_replace('-', '_', $key);
593
  $data[$key] = $value;
594
  }
595
  }
EmbedPress/ThirdParty/BeaverBuilder.php CHANGED
@@ -1,4 +1,5 @@
1
  <?php
 
2
  namespace EmbedPress\ThirdParty;
3
 
4
  (defined('ABSPATH') && defined('EMBEDPRESS_IS_LOADED')) or die("No direct script access allowed.");
@@ -24,20 +25,20 @@ class BeaverBuilder
24
  */
25
  public static function before_render_shortcodes($content)
26
  {
27
- global $shortcode_tags;
28
 
29
- // Back up current registered shortcodes and clear them all out
30
- $orig_shortcode_tags = $shortcode_tags;
31
- remove_all_shortcodes();
32
 
33
- add_shortcode( EMBEDPRESS_SHORTCODE, array('\\EmbedPress\\Shortcode', 'do_shortcode') );
34
 
35
- // Do the shortcode (only the [embed] one is registered)
36
- $content = do_shortcode( $content, true );
37
 
38
- // Put the original shortcodes back
39
- $shortcode_tags = $orig_shortcode_tags;
40
 
41
- return $content;
42
  }
43
  }
1
  <?php
2
+
3
  namespace EmbedPress\ThirdParty;
4
 
5
  (defined('ABSPATH') && defined('EMBEDPRESS_IS_LOADED')) or die("No direct script access allowed.");
25
  */
26
  public static function before_render_shortcodes($content)
27
  {
28
+ global $shortcode_tags;
29
 
30
+ // Back up current registered shortcodes and clear them all out
31
+ $orig_shortcode_tags = $shortcode_tags;
32
+ remove_all_shortcodes();
33
 
34
+ add_shortcode(EMBEDPRESS_SHORTCODE, ['\\EmbedPress\\Shortcode', 'do_shortcode']);
35
 
36
+ // Do the shortcode (only the [embed] one is registered)
37
+ $content = do_shortcode($content, true);
38
 
39
+ // Put the original shortcodes back
40
+ $shortcode_tags = $orig_shortcode_tags;
41
 
42
+ return $content;
43
  }
44
  }
EmbedPress/index.html CHANGED
@@ -1,9 +1,9 @@
1
  <!DOCTYPE html>
2
  <html>
3
- <head>
4
- <title>403 Forbidden</title>
5
- </head>
6
- <body>
7
- <p>Directory access is forbidden.</p>
8
- </body>
9
  </html>
1
  <!DOCTYPE html>
2
  <html>
3
+ <head>
4
+ <title>403 Forbidden</title>
5
+ </head>
6
+ <body>
7
+ <p>Directory access is forbidden.</p>
8
+ </body>
9
  </html>
assets/css/font.css CHANGED
@@ -7,15 +7,16 @@
7
  */
8
 
9
  @font-face {
10
- font-family: 'EmbedPress';
11
- src: url('../fonts/embedpress.eot?80956116');
12
- src: url('../fonts/embedpress.eot?80956116#iefix') format('embedded-opentype'),
13
- url('../fonts/embedpress.woff?80956116') format('woff'),
14
- url('../fonts/embedpress.ttf?80956116') format('truetype'),
15
- url('../fonts/embedpress.svg?80956116#embedpress') format('svg');
16
- font-weight: normal;
17
- font-style: normal;
18
  }
 
19
  /* Chrome hack: SVG is rendered more smooth in Windozze. 100% magic, uncomment if you need it. */
20
  /* Note, that will break hinting! In other OS-es font will be not as sharp as it could be */
21
  /*
@@ -27,68 +28,80 @@
27
  }
28
  */
29
 
30
- [class^="embedpress-icon-"]:before, [class*=" embedpress-icon-"]:before {
31
- font-family: "EmbedPress";
32
- font-style: normal;
33
- font-weight: normal;
34
- speak: none;
 
 
 
 
 
 
 
35
 
36
- display: inline-block;
37
- text-decoration: inherit;
38
- width: 1em;
39
- margin-right: .2em;
40
- text-align: center;
41
- /* opacity: .8; */
42
 
43
- /* For safety - reset parent styles, that can break glyph codes*/
44
- font-variant: normal;
45
- text-transform: none;
46
 
47
- /* fix buttons height, for twitter bootstrap */
48
- line-height: 1em;
 
49
 
50
- /* Animation center compensation - margins should be symmetric */
51
- /* remove if not needed */
52
- margin-left: .2em;
53
 
54
- /* you can be more comfortable with increased icons size */
55
- /* font-size: 120%; */
 
56
 
57
- /* Font smoothing. That was taken from TWBS */
58
- -webkit-font-smoothing: antialiased;
59
- -moz-osx-font-smoothing: grayscale;
60
 
61
- /* Uncomment for 3D effect */
62
- /* text-shadow: 1px 1px 1px rgba(127, 127, 127, 0.3); */
63
  }
64
 
65
- .embedpress-icon-pencil:before {content:'\0041';}
66
- .embedpress-icon-gear:before{content:'\0042';}
67
- .embedpress-icon-x:before{content:'\0043';}
 
 
 
 
68
 
69
  .embedpress-icon-reload {
70
- -webkit-animation: embedpress-spin 2s infinite linear;
71
- animation: embedpress-spin 2s infinite linear;
 
 
 
 
72
  }
73
- .embedpress-icon-reload:before{content:'\0044';}
74
 
75
  @-webkit-keyframes embedpress-spin {
76
- 0% {
77
- -webkit-transform: rotate(0deg);
78
- transform: rotate(0deg);
79
- }
80
- 100% {
81
- -webkit-transform: rotate(359deg);
82
- transform: rotate(359deg);
83
- }
84
  }
 
85
  @keyframes embedpress-spin {
86
- 0% {
87
- -webkit-transform: rotate(0deg);
88
- transform: rotate(0deg);
89
- }
90
- 100% {
91
- -webkit-transform: rotate(359deg);
92
- transform: rotate(359deg);
93
- }
94
  }
7
  */
8
 
9
  @font-face {
10
+ font-family: 'EmbedPress';
11
+ src: url('../fonts/embedpress.eot?80956116');
12
+ src: url('../fonts/embedpress.eot?80956116#iefix') format('embedded-opentype'),
13
+ url('../fonts/embedpress.woff?80956116') format('woff'),
14
+ url('../fonts/embedpress.ttf?80956116') format('truetype'),
15
+ url('../fonts/embedpress.svg?80956116#embedpress') format('svg');
16
+ font-weight: normal;
17
+ font-style: normal;
18
  }
19
+
20
  /* Chrome hack: SVG is rendered more smooth in Windozze. 100% magic, uncomment if you need it. */
21
  /* Note, that will break hinting! In other OS-es font will be not as sharp as it could be */
22
  /*
28
  }
29
  */
30
 
31
+ [class^="embedpress-icon-"]:before, [class*=" embedpress-icon-"]:before {
32
+ font-family: "EmbedPress";
33
+ font-style: normal;
34
+ font-weight: normal;
35
+ speak: none;
36
+
37
+ display: inline-block;
38
+ text-decoration: inherit;
39
+ width: 1em;
40
+ margin-right: .2em;
41
+ text-align: center;
42
+ /* opacity: .8; */
43
 
44
+ /* For safety - reset parent styles, that can break glyph codes*/
45
+ font-variant: normal;
46
+ text-transform: none;
 
 
 
47
 
48
+ /* fix buttons height, for twitter bootstrap */
49
+ line-height: 1em;
 
50
 
51
+ /* Animation center compensation - margins should be symmetric */
52
+ /* remove if not needed */
53
+ margin-left: .2em;
54
 
55
+ /* you can be more comfortable with increased icons size */
56
+ /* font-size: 120%; */
 
57
 
58
+ /* Font smoothing. That was taken from TWBS */
59
+ -webkit-font-smoothing: antialiased;
60
+ -moz-osx-font-smoothing: grayscale;
61
 
62
+ /* Uncomment for 3D effect */
63
+ /* text-shadow: 1px 1px 1px rgba(127, 127, 127, 0.3); */
64
+ }
65
 
66
+ .embedpress-icon-pencil:before {
67
+ content: '\0041';
68
  }
69
 
70
+ .embedpress-icon-gear:before {
71
+ content: '\0042';
72
+ }
73
+
74
+ .embedpress-icon-x:before {
75
+ content: '\0043';
76
+ }
77
 
78
  .embedpress-icon-reload {
79
+ -webkit-animation: embedpress-spin 2s infinite linear;
80
+ animation: embedpress-spin 2s infinite linear;
81
+ }
82
+
83
+ .embedpress-icon-reload:before {
84
+ content: '\0044';
85
  }
 
86
 
87
  @-webkit-keyframes embedpress-spin {
88
+ 0% {
89
+ -webkit-transform: rotate(0deg);
90
+ transform: rotate(0deg);
91
+ }
92
+ 100% {
93
+ -webkit-transform: rotate(359deg);
94
+ transform: rotate(359deg);
95
+ }
96
  }
97
+
98
  @keyframes embedpress-spin {
99
+ 0% {
100
+ -webkit-transform: rotate(0deg);
101
+ transform: rotate(0deg);
102
+ }
103
+ 100% {
104
+ -webkit-transform: rotate(359deg);
105
+ transform: rotate(359deg);
106
+ }
107
  }
assets/css/index.html CHANGED
@@ -1,9 +1,9 @@
1
  <!DOCTYPE html>
2
  <html>
3
- <head>
4
- <title>403 Forbidden</title>
5
- </head>
6
- <body>
7
- <p>Directory access is forbidden.</p>
8
- </body>
9
  </html>
1
  <!DOCTYPE html>
2
  <html>
3
+ <head>
4
+ <title>403 Forbidden</title>
5
+ </head>
6
+ <body>
7
+ <p>Directory access is forbidden.</p>
8
+ </body>
9
  </html>
assets/css/preview.css CHANGED
@@ -124,22 +124,22 @@
124
  }
125
 
126
  .modal {
127
- text-align: center;
128
  }
129
 
130
  @media screen and (min-width: 768px) {
131
- .modal:before {
132
- display: inline-block;
133
- vertical-align: middle;
134
- content: " ";
135
- height: 100%;
136
- }
137
  }
138
 
139
  .modal-dialog {
140
- display: inline-block;
141
- text-align: left;
142
- vertical-align: middle;
143
  }
144
 
145
  span.hidden {
124
  }
125
 
126
  .modal {
127
+ text-align: center;
128
  }
129
 
130
  @media screen and (min-width: 768px) {
131
+ .modal:before {
132
+ display: inline-block;
133
+ vertical-align: middle;
134
+ content: " ";
135
+ height: 100%;
136
+ }
137
  }
138
 
139
  .modal-dialog {
140
+ display: inline-block;
141
+ text-align: left;
142
+ vertical-align: middle;
143
  }
144
 
145
  span.hidden {
assets/css/vendor/bootstrap/bootstrap.css CHANGED
@@ -8,177 +8,218 @@
8
  */
9
 
10
  .embedpress-modal fieldset {
11
- padding: 0;
12
- margin: 0;
13
- border: 0;
14
- min-width: 0; }
 
15
 
16
  .embedpress-modal legend {
17
- display: block;
18
- width: 100%;
19
- padding: 0;
20
- margin-bottom: 20px;
21
- font-size: 21px;
22
- line-height: inherit;
23
- color: #333333;
24
- border: 0;
25
- border-bottom: 1px solid #e5e5e5; }
 
26
 
27
  .embedpress-modal label {
28
- display: inline-block;
29
- max-width: 100%;
30
- margin-bottom: 5px;
31
- font-weight: bold; }
 
32
 
33
  .embedpress-modal input[type="search"] {
34
- box-sizing: border-box; }
 
35
 
36
  .embedpress-modal input[type="radio"],
37
  .embedpress-modal input[type="checkbox"] {
38
- margin: 4px 0 0;
39
- margin-top: 1px \9;
40
- line-height: normal; }
 
41
 
42
  .embedpress-modal input[type="file"] {
43
- display: block; }
 
44
 
45
  .embedpress-modal input[type="range"] {
46
- display: block;
47
- width: 100%; }
 
48
 
49
  .embedpress-modal select[multiple],
50
  .embedpress-modal select[size] {
51
- height: auto; }
 
52
 
53
  .embedpress-modal input[type="file"]:focus,
54
  .embedpress-modal input[type="radio"]:focus,
55
  .embedpress-modal input[type="checkbox"]:focus {
56
- outline: 5px auto -webkit-focus-ring-color;
57
- outline-offset: -2px; }
 
58
 
59
  .embedpress-modal output {
60
- display: block;
61
- padding-top: 7px;
62
- font-size: 14px;
63
- line-height: 1.42857;
64
- color: #555555; }
 
65
 
66
  .embedpress-modal .form-control {
67
- display: block;
68
- width: 100%;
69
- height: 34px;
70
- padding: 6px 12px;
71
- font-size: 14px;
72
- line-height: 1.42857;
73
- color: #555555;
74
- background-color: #fff;
75
- background-image: none;
76
- border: 1px solid #ccc;
77
- border-radius: 4px;
78
- box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.075);
79
- transition: border-color ease-in-out 0.15s, box-shadow ease-in-out 0.15s; }
80
- .embedpress-modal .form-control:focus {
 
 
81
  border-color: #66afe9;
82
  outline: 0;
83
- box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.075), 0 0 8px rgba(102, 175, 233, 0.6); }
84
- .embedpress-modal .form-control::-moz-placeholder {
 
 
 
 
 
 
 
85
  color: #999;
86
- opacity: 1; }
87
- .embedpress-modal .form-control:-ms-input-placeholder {
88
- color: #999; }
89
- .embedpress-modal .form-control::-webkit-input-placeholder {
90
- color: #999; }
91
- .embedpress-modal .form-control::-ms-expand {
 
92
  border: 0;
93
- background-color: transparent; }
94
- .embedpress-modal .form-control[disabled], .embedpress-modal .form-control[readonly],
95
- fieldset[disabled] .embedpress-modal .form-control {
 
 
96
  background-color: #eeeeee;
97
- opacity: 1; }
98
- .embedpress-modal .form-control[disabled],
99
- fieldset[disabled] .embedpress-modal .form-control {
100
- cursor: not-allowed; }
 
 
 
101
 
102
  .embedpress-modal textarea.form-control {
103
- height: auto; }
 
104
 
105
  .embedpress-modal input[type="search"] {
106
- -webkit-appearance: none; }
 
107
 
108
  @media screen and (-webkit-min-device-pixel-ratio: 0) {
109
- .embedpress-modal input[type="date"].form-control,
110
- .embedpress-modal input[type="time"].form-control,
111
- .embedpress-modal input[type="datetime-local"].form-control,
112
- .embedpress-modal input[type="month"].form-control {
113
- line-height: 34px; }
114
- .embedpress-modal input[type="date"].input-sm, .embedpress-modal .input-group-sm > input[type="date"].form-control, .embedpress-modal .input-group-sm > input[type="date"].input-group-addon, .embedpress-modal .input-group-sm > .input-group-btn > input[type="date"].btn,
115
- .input-group-sm .embedpress-modal input[type="date"],
116
- .embedpress-modal input[type="time"].input-sm, .embedpress-modal .input-group-sm > input[type="time"].form-control, .embedpress-modal .input-group-sm > input[type="time"].input-group-addon, .embedpress-modal .input-group-sm > .input-group-btn > input[type="time"].btn,
117
- .input-group-sm
118
- .embedpress-modal input[type="time"],
119
- .embedpress-modal input[type="datetime-local"].input-sm, .embedpress-modal .input-group-sm > input[type="datetime-local"].form-control, .embedpress-modal .input-group-sm > input[type="datetime-local"].input-group-addon, .embedpress-modal .input-group-sm > .input-group-btn > input[type="datetime-local"].btn,
120
- .input-group-sm
121
- .embedpress-modal input[type="datetime-local"],
122
- .embedpress-modal input[type="month"].input-sm, .embedpress-modal .input-group-sm > input[type="month"].form-control, .embedpress-modal .input-group-sm > input[type="month"].input-group-addon, .embedpress-modal .input-group-sm > .input-group-btn > input[type="month"].btn,
123
- .input-group-sm
124
- .embedpress-modal input[type="month"] {
125
- line-height: 30px; }
126
- .embedpress-modal input[type="date"].input-lg, .embedpress-modal .input-group-lg > input[type="date"].form-control, .embedpress-modal .input-group-lg > input[type="date"].input-group-addon, .embedpress-modal .input-group-lg > .input-group-btn > input[type="date"].btn,
127
- .input-group-lg .embedpress-modal input[type="date"],
128
- .embedpress-modal input[type="time"].input-lg, .embedpress-modal .input-group-lg > input[type="time"].form-control, .embedpress-modal .input-group-lg > input[type="time"].input-group-addon, .embedpress-modal .input-group-lg > .input-group-btn > input[type="time"].btn,
129
- .input-group-lg
130
- .embedpress-modal input[type="time"],
131
- .embedpress-modal input[type="datetime-local"].input-lg, .embedpress-modal .input-group-lg > input[type="datetime-local"].form-control, .embedpress-modal .input-group-lg > input[type="datetime-local"].input-group-addon, .embedpress-modal .input-group-lg > .input-group-btn > input[type="datetime-local"].btn,
132
- .input-group-lg
133
- .embedpress-modal input[type="datetime-local"],
134
- .embedpress-modal input[type="month"].input-lg, .embedpress-modal .input-group-lg > input[type="month"].form-control, .embedpress-modal .input-group-lg > input[type="month"].input-group-addon, .embedpress-modal .input-group-lg > .input-group-btn > input[type="month"].btn,
135
- .input-group-lg
136
- .embedpress-modal input[type="month"] {
137
- line-height: 46px; } }
 
 
 
 
 
 
138
 
139
  .embedpress-modal .form-group {
140
- margin-bottom: 15px; }
 
141
 
142
  .embedpress-modal .radio,
143
  .embedpress-modal .checkbox {
144
- position: relative;
145
- display: block;
146
- margin-top: 10px;
147
- margin-bottom: 10px; }
148
- .embedpress-modal .radio label,
149
- .embedpress-modal .checkbox label {
 
 
150
  min-height: 20px;
151
  padding-left: 20px;
152
  margin-bottom: 0;
153
  font-weight: normal;
154
- cursor: pointer; }
 
155
 
156
  .embedpress-modal .radio input[type="radio"],
157
  .embedpress-modal .radio-inline input[type="radio"],
158
  .embedpress-modal .checkbox input[type="checkbox"],
159
  .embedpress-modal .checkbox-inline input[type="checkbox"] {
160
- position: absolute;
161
- margin-left: -20px;
162
- margin-top: 4px \9; }
 
163
 
164
  .embedpress-modal .radio + .radio,
165
  .embedpress-modal .checkbox + .checkbox {
166
- margin-top: -5px; }
 
167
 
168
  .embedpress-modal .radio-inline,
169
  .embedpress-modal .checkbox-inline {
170
- position: relative;
171
- display: inline-block;
172
- padding-left: 20px;
173
- margin-bottom: 0;
174
- vertical-align: middle;
175
- font-weight: normal;
176
- cursor: pointer; }
 
177
 
178
  .embedpress-modal .radio-inline + .radio-inline,
179
  .embedpress-modal .checkbox-inline + .checkbox-inline {
180
- margin-top: 0;
181
- margin-left: 10px; }
 
182
 
183
  .embedpress-modal input[type="radio"][disabled], .embedpress-modal input[type="radio"].disabled,
184
  fieldset[disabled] .embedpress-modal input[type="radio"],
@@ -186,135 +227,161 @@ fieldset[disabled] .embedpress-modal input[type="radio"],
186
  .embedpress-modal input[type="checkbox"].disabled,
187
  fieldset[disabled]
188
  .embedpress-modal input[type="checkbox"] {
189
- cursor: not-allowed; }
 
190
 
191
  .embedpress-modal .radio-inline.disabled,
192
  fieldset[disabled] .embedpress-modal .radio-inline,
193
  .embedpress-modal .checkbox-inline.disabled,
194
  fieldset[disabled]
195
  .embedpress-modal .checkbox-inline {
196
- cursor: not-allowed; }
 
197
 
198
  .embedpress-modal .radio.disabled label,
199
  fieldset[disabled] .embedpress-modal .radio label,
200
  .embedpress-modal .checkbox.disabled label,
201
  fieldset[disabled]
202
  .embedpress-modal .checkbox label {
203
- cursor: not-allowed; }
 
204
 
205
  .embedpress-modal .form-control-static {
206
- padding-top: 7px;
207
- padding-bottom: 7px;
208
- margin-bottom: 0;
209
- min-height: 34px; }
210
- .embedpress-modal .form-control-static.input-lg, .embedpress-modal .input-group-lg > .form-control-static.form-control, .embedpress-modal .input-group-lg > .form-control-static.input-group-addon, .embedpress-modal .input-group-lg > .input-group-btn > .form-control-static.btn, .embedpress-modal .form-control-static.input-sm, .embedpress-modal .input-group-sm > .form-control-static.form-control, .embedpress-modal .input-group-sm > .form-control-static.input-group-addon, .embedpress-modal .input-group-sm > .input-group-btn > .form-control-static.btn {
 
 
211
  padding-left: 0;
212
- padding-right: 0; }
 
213
 
214
  .embedpress-modal .input-sm, .embedpress-modal .input-group-sm > .form-control, .embedpress-modal .input-group-sm > .input-group-addon, .embedpress-modal .input-group-sm > .input-group-btn > .btn {
215
- height: 30px;
216
- padding: 5px 10px;
217
- font-size: 12px;
218
- line-height: 1.5;
219
- border-radius: 3px; }
 
220
 
221
  .embedpress-modal select.input-sm, .embedpress-modal .input-group-sm > select.form-control, .embedpress-modal .input-group-sm > select.input-group-addon, .embedpress-modal .input-group-sm > .input-group-btn > select.btn {
222
- height: 30px;
223
- line-height: 30px; }
 
224
 
225
  .embedpress-modal textarea.input-sm, .embedpress-modal .input-group-sm > textarea.form-control, .embedpress-modal .input-group-sm > textarea.input-group-addon, .embedpress-modal .input-group-sm > .input-group-btn > textarea.btn,
226
  .embedpress-modal select[multiple].input-sm, .embedpress-modal .input-group-sm > select[multiple].form-control, .embedpress-modal .input-group-sm > select[multiple].input-group-addon, .embedpress-modal .input-group-sm > .input-group-btn > select[multiple].btn {
227
- height: auto; }
 
228
 
229
  .embedpress-modal .form-group-sm .form-control {
230
- height: 30px;
231
- padding: 5px 10px;
232
- font-size: 12px;
233
- line-height: 1.5;
234
- border-radius: 3px; }
 
235
 
236
  .embedpress-modal .form-group-sm select.form-control {
237
- height: 30px;
238
- line-height: 30px; }
 
239
 
240
  .embedpress-modal .form-group-sm textarea.form-control,
241
  .embedpress-modal .form-group-sm select[multiple].form-control {
242
- height: auto; }
 
243
 
244
  .embedpress-modal .form-group-sm .form-control-static {
245
- height: 30px;
246
- min-height: 32px;
247
- padding: 6px 10px;
248
- font-size: 12px;
249
- line-height: 1.5; }
 
250
 
251
  .embedpress-modal .input-lg, .embedpress-modal .input-group-lg > .form-control, .embedpress-modal .input-group-lg > .input-group-addon, .embedpress-modal .input-group-lg > .input-group-btn > .btn {
252
- height: 46px;
253
- padding: 10px 16px;
254
- font-size: 18px;
255
- line-height: 1.33333;
256
- border-radius: 6px; }
 
257
 
258
  .embedpress-modal select.input-lg, .embedpress-modal .input-group-lg > select.form-control, .embedpress-modal .input-group-lg > select.input-group-addon, .embedpress-modal .input-group-lg > .input-group-btn > select.btn {
259
- height: 46px;
260
- line-height: 46px; }
 
261
 
262
  .embedpress-modal textarea.input-lg, .embedpress-modal .input-group-lg > textarea.form-control, .embedpress-modal .input-group-lg > textarea.input-group-addon, .embedpress-modal .input-group-lg > .input-group-btn > textarea.btn,
263
  .embedpress-modal select[multiple].input-lg, .embedpress-modal .input-group-lg > select[multiple].form-control, .embedpress-modal .input-group-lg > select[multiple].input-group-addon, .embedpress-modal .input-group-lg > .input-group-btn > select[multiple].btn {
264
- height: auto; }
 
265
 
266
  .embedpress-modal .form-group-lg .form-control {
267
- height: 46px;
268
- padding: 10px 16px;
269
- font-size: 18px;
270
- line-height: 1.33333;
271
- border-radius: 6px; }
 
272
 
273
  .embedpress-modal .form-group-lg select.form-control {
274
- height: 46px;
275
- line-height: 46px; }
 
276
 
277
  .embedpress-modal .form-group-lg textarea.form-control,
278
  .embedpress-modal .form-group-lg select[multiple].form-control {
279
- height: auto; }
 
280
 
281
  .embedpress-modal .form-group-lg .form-control-static {
282
- height: 46px;
283
- min-height: 38px;
284
- padding: 11px 16px;
285
- font-size: 18px;
286
- line-height: 1.33333; }
 
287
 
288
  .embedpress-modal .has-feedback {
289
- position: relative; }
290
- .embedpress-modal .has-feedback .form-control {
291
- padding-right: 42.5px; }
 
 
 
292
 
293
  .embedpress-modal .form-control-feedback {
294
- position: absolute;
295
- top: 0;
296
- right: 0;
297
- z-index: 2;
298
- display: block;
299
- width: 34px;
300
- height: 34px;
301
- line-height: 34px;
302
- text-align: center;
303
- pointer-events: none; }
 
304
 
305
  .embedpress-modal .input-lg + .form-control-feedback, .embedpress-modal .input-group-lg > .form-control + .form-control-feedback, .embedpress-modal .input-group-lg > .input-group-addon + .form-control-feedback, .embedpress-modal .input-group-lg > .input-group-btn > .btn + .form-control-feedback,
306
  .embedpress-modal .input-group-lg + .form-control-feedback,
307
  .embedpress-modal .form-group-lg .form-control + .form-control-feedback {
308
- width: 46px;
309
- height: 46px;
310
- line-height: 46px; }
 
311
 
312
  .embedpress-modal .input-sm + .form-control-feedback, .embedpress-modal .input-group-sm > .form-control + .form-control-feedback, .embedpress-modal .input-group-sm > .input-group-addon + .form-control-feedback, .embedpress-modal .input-group-sm > .input-group-btn > .btn + .form-control-feedback,
313
  .embedpress-modal .input-group-sm + .form-control-feedback,
314
  .embedpress-modal .form-group-sm .form-control + .form-control-feedback {
315
- width: 30px;
316
- height: 30px;
317
- line-height: 30px; }
 
318
 
319
  .embedpress-modal .has-success .help-block,
320
  .embedpress-modal .has-success .control-label,
@@ -326,22 +393,28 @@ fieldset[disabled]
326
  .embedpress-modal .has-success.checkbox label,
327
  .embedpress-modal .has-success.radio-inline label,
328
  .embedpress-modal .has-success.checkbox-inline label {
329
- color: #3c763d; }
 
330
 
331
  .embedpress-modal .has-success .form-control {
332
- border-color: #3c763d;
333
- box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.075); }
334
- .embedpress-modal .has-success .form-control:focus {
 
 
335
  border-color: #2b542c;
336
- box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.075), 0 0 6px #67b168; }
 
337
 
338
  .embedpress-modal .has-success .input-group-addon {
339
- color: #3c763d;
340
- border-color: #3c763d;
341
- background-color: #dff0d8; }
 
342
 
343
  .embedpress-modal .has-success .form-control-feedback {
344
- color: #3c763d; }
 
345
 
346
  .embedpress-modal .has-warning .help-block,
347
  .embedpress-modal .has-warning .control-label,
@@ -353,22 +426,28 @@ fieldset[disabled]
353
  .embedpress-modal .has-warning.checkbox label,
354
  .embedpress-modal .has-warning.radio-inline label,
355
  .embedpress-modal .has-warning.checkbox-inline label {
356
- color: #8a6d3b; }
 
357
 
358
  .embedpress-modal .has-warning .form-control {
359
- border-color: #8a6d3b;
360
- box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.075); }
361
- .embedpress-modal .has-warning .form-control:focus {
 
 
362
  border-color: #66512c;
363
- box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.075), 0 0 6px #c0a16b; }
 
364
 
365
  .embedpress-modal .has-warning .input-group-addon {
366
- color: #8a6d3b;
367
- border-color: #8a6d3b;
368
- background-color: #fcf8e3; }
 
369
 
370
  .embedpress-modal .has-warning .form-control-feedback {
371
- color: #8a6d3b; }
 
372
 
373
  .embedpress-modal .has-error .help-block,
374
  .embedpress-modal .has-error .control-label,
@@ -380,649 +459,879 @@ fieldset[disabled]
380
  .embedpress-modal .has-error.checkbox label,
381
  .embedpress-modal .has-error.radio-inline label,
382
  .embedpress-modal .has-error.checkbox-inline label {
383
- color: #a94442; }
 
384
 
385
  .embedpress-modal .has-error .form-control {
386
- border-color: #a94442;
387
- box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.075); }
388
- .embedpress-modal .has-error .form-control:focus {
 
 
389
  border-color: #843534;
390
- box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.075), 0 0 6px #ce8483; }
 
391
 
392
  .embedpress-modal .has-error .input-group-addon {
393
- color: #a94442;
394
- border-color: #a94442;
395
- background-color: #f2dede; }
 
396
 
397
  .embedpress-modal .has-error .form-control-feedback {
398
- color: #a94442; }
 
399
 
400
  .embedpress-modal .has-feedback label ~ .form-control-feedback {
401
- top: 25px; }
 
402
 
403
  .embedpress-modal .has-feedback label.sr-only ~ .form-control-feedback {
404
- top: 0; }
 
405
 
406
  .embedpress-modal .help-block {
407
- display: block;
408
- margin-top: 5px;
409
- margin-bottom: 10px;
410
- color: #737373; }
 
411
 
412
  @media (min-width: 768px) {
413
- .embedpress-modal .form-inline .form-group {
414
- display: inline-block;
415
- margin-bottom: 0;
416
- vertical-align: middle; }
417
- .embedpress-modal .form-inline .form-control {
418
- display: inline-block;
419
- width: auto;
420
- vertical-align: middle; }
421
- .embedpress-modal .form-inline .form-control-static {
422
- display: inline-block; }
423
- .embedpress-modal .form-inline .input-group {
424
- display: inline-table;
425
- vertical-align: middle; }
 
 
 
 
 
 
 
 
426
  .embedpress-modal .form-inline .input-group .input-group-addon,
427
  .embedpress-modal .form-inline .input-group .input-group-btn,
428
  .embedpress-modal .form-inline .input-group .form-control {
429
- width: auto; }
430
- .embedpress-modal .form-inline .input-group > .form-control {
431
- width: 100%; }
432
- .embedpress-modal .form-inline .control-label {
433
- margin-bottom: 0;
434
- vertical-align: middle; }
435
- .embedpress-modal .form-inline .radio,
436
- .embedpress-modal .form-inline .checkbox {
437
- display: inline-block;
438
- margin-top: 0;
439
- margin-bottom: 0;
440
- vertical-align: middle; }
 
 
 
 
 
 
 
 
441
  .embedpress-modal .form-inline .radio label,
442
  .embedpress-modal .form-inline .checkbox label {
443
- padding-left: 0; }
444
- .embedpress-modal .form-inline .radio input[type="radio"],
445
- .embedpress-modal .form-inline .checkbox input[type="checkbox"] {
446
- position: relative;
447
- margin-left: 0; }
448
- .embedpress-modal .form-inline .has-feedback .form-control-feedback {
449
- top: 0; } }
 
 
 
 
 
 
450
 
451
  .embedpress-modal .form-horizontal .radio,
452
  .embedpress-modal .form-horizontal .checkbox,
453
  .embedpress-modal .form-horizontal .radio-inline,
454
  .embedpress-modal .form-horizontal .checkbox-inline {
455
- margin-top: 0;
456
- margin-bottom: 0;
457
- padding-top: 7px; }
 
458
 
459
  .embedpress-modal .form-horizontal .radio,
460
  .embedpress-modal .form-horizontal .checkbox {
461
- min-height: 27px; }
 
462
 
463
  .embedpress-modal .form-horizontal .form-group {
464
- margin-left: -15px;
465
- margin-right: -15px; }
466
- .embedpress-modal .form-horizontal .form-group:before, .embedpress-modal .form-horizontal .form-group:after {
 
 
467
  content: " ";
468
- display: table; }
469
- .embedpress-modal .form-horizontal .form-group:after {
470
- clear: both; }
 
 
 
471
 
472
  @media (min-width: 768px) {
473
- .embedpress-modal .form-horizontal .control-label {
474
- text-align: right;
475
- margin-bottom: 0;
476
- padding-top: 7px; } }
 
 
477
 
478
  .embedpress-modal .form-horizontal .has-feedback .form-control-feedback {
479
- right: 15px; }
 
480
 
481
  @media (min-width: 768px) {
482
- .embedpress-modal .form-horizontal .form-group-lg .control-label {
483
- padding-top: 11px;
484
- font-size: 18px; } }
 
 
485
 
486
  @media (min-width: 768px) {
487
- .embedpress-modal .form-horizontal .form-group-sm .control-label {
488
- padding-top: 6px;
489
- font-size: 12px; } }
 
 
490
 
491
  .embedpress-modal .btn {
492
- display: inline-block;
493
- margin-bottom: 0;
494
- font-weight: normal;
495
- text-align: center;
496
- vertical-align: middle;
497
- -ms-touch-action: manipulation;
498
- touch-action: manipulation;
499
- cursor: pointer;
500
- background-image: none;
501
- border: 1px solid transparent;
502
- white-space: nowrap;
503
- padding: 6px 12px;
504
- font-size: 14px;
505
- line-height: 1.42857;
506
- border-radius: 4px;
507
- -webkit-user-select: none;
508
- -moz-user-select: none;
509
- -ms-user-select: none;
510
- user-select: none; }
511
- .embedpress-modal .btn:focus, .embedpress-modal .btn.focus, .embedpress-modal .btn:active:focus, .embedpress-modal .btn:active.focus, .embedpress-modal .btn.active:focus, .embedpress-modal .btn.active.focus {
 
 
512
  outline: 5px auto -webkit-focus-ring-color;
513
- outline-offset: -2px; }
514
- .embedpress-modal .btn:hover, .embedpress-modal .btn:focus, .embedpress-modal .btn.focus {
 
 
515
  color: #333;
516
- text-decoration: none; }
517
- .embedpress-modal .btn:active, .embedpress-modal .btn.active {
 
 
518
  outline: 0;
519
  background-image: none;
520
- box-shadow: inset 0 3px 5px rgba(0, 0, 0, 0.125); }
521
- .embedpress-modal .btn.disabled, .embedpress-modal .btn[disabled],
522
- fieldset[disabled] .embedpress-modal .btn {
 
 
523
  cursor: not-allowed;
524
  opacity: 0.65;
525
  filter: alpha(opacity=65);
526
- box-shadow: none; }
 
527
 
528
  .embedpress-modal a.btn.disabled,
529
  fieldset[disabled] .embedpress-modal a.btn {
530
- pointer-events: none; }
 
531
 
532
  .embedpress-modal .btn-default {
533
- color: #333;
534
- background-color: #fff;
535
- border-color: #ccc; }
536
- .embedpress-modal .btn-default:focus, .embedpress-modal .btn-default.focus {
 
 
537
  color: #333;
538
  background-color: #e6e6e6;
539
- border-color: #8c8c8c; }
540
- .embedpress-modal .btn-default:hover {
 
 
541
  color: #333;
542
  background-color: #e6e6e6;
543
- border-color: #adadad; }
544
- .embedpress-modal .btn-default:active, .embedpress-modal .btn-default.active,
545
- .open > .embedpress-modal .btn-default.dropdown-toggle {
 
 
546
  color: #333;
547
  background-color: #e6e6e6;
548
- border-color: #adadad; }
549
- .embedpress-modal .btn-default:active:hover, .embedpress-modal .btn-default:active:focus, .embedpress-modal .btn-default:active.focus, .embedpress-modal .btn-default.active:hover, .embedpress-modal .btn-default.active:focus, .embedpress-modal .btn-default.active.focus,
550
- .open > .embedpress-modal .btn-default.dropdown-toggle:hover,
551
- .open > .embedpress-modal .btn-default.dropdown-toggle:focus,
552
- .open > .embedpress-modal .btn-default.dropdown-toggle.focus {
553
- color: #333;
554
- background-color: #d4d4d4;
555
- border-color: #8c8c8c; }
556
- .embedpress-modal .btn-default:active, .embedpress-modal .btn-default.active,
557
- .open > .embedpress-modal .btn-default.dropdown-toggle {
558
- background-image: none; }
559
- .embedpress-modal .btn-default.disabled:hover, .embedpress-modal .btn-default.disabled:focus, .embedpress-modal .btn-default.disabled.focus, .embedpress-modal .btn-default[disabled]:hover, .embedpress-modal .btn-default[disabled]:focus, .embedpress-modal .btn-default[disabled].focus,
560
- fieldset[disabled] .embedpress-modal .btn-default:hover,
561
- fieldset[disabled] .embedpress-modal .btn-default:focus,
562
- fieldset[disabled] .embedpress-modal .btn-default.focus {
 
 
 
 
 
 
563
  background-color: #fff;
564
- border-color: #ccc; }
565
- .embedpress-modal .btn-default .badge {
 
 
566
  color: #fff;
567
- background-color: #333; }
 
568
 
569
  .embedpress-modal .btn-primary {
570
- color: #fff;
571
- background-color: #337ab7;
572
- border-color: #2e6da4; }
573
- .embedpress-modal .btn-primary:focus, .embedpress-modal .btn-primary.focus {
 
 
574
  color: #fff;
575
  background-color: #286090;
576
- border-color: #122b40; }
577
- .embedpress-modal .btn-primary:hover {
 
 
578
  color: #fff;
579
  background-color: #286090;
580
- border-color: #204d74; }
581
- .embedpress-modal .btn-primary:active, .embedpress-modal .btn-primary.active,
582
- .open > .embedpress-modal .btn-primary.dropdown-toggle {
 
 
583
  color: #fff;
584
  background-color: #286090;
585
- border-color: #204d74; }
586
- .embedpress-modal .btn-primary:active:hover, .embedpress-modal .btn-primary:active:focus, .embedpress-modal .btn-primary:active.focus, .embedpress-modal .btn-primary.active:hover, .embedpress-modal .btn-primary.active:focus, .embedpress-modal .btn-primary.active.focus,
587
- .open > .embedpress-modal .btn-primary.dropdown-toggle:hover,
588
- .open > .embedpress-modal .btn-primary.dropdown-toggle:focus,
589
- .open > .embedpress-modal .btn-primary.dropdown-toggle.focus {
590
- color: #fff;
591
- background-color: #204d74;
592
- border-color: #122b40; }
593
- .embedpress-modal .btn-primary:active, .embedpress-modal .btn-primary.active,
594
- .open > .embedpress-modal .btn-primary.dropdown-toggle {
595
- background-image: none; }
596
- .embedpress-modal .btn-primary.disabled:hover, .embedpress-modal .btn-primary.disabled:focus, .embedpress-modal .btn-primary.disabled.focus, .embedpress-modal .btn-primary[disabled]:hover, .embedpress-modal .btn-primary[disabled]:focus, .embedpress-modal .btn-primary[disabled].focus,
597
- fieldset[disabled] .embedpress-modal .btn-primary:hover,
598
- fieldset[disabled] .embedpress-modal .btn-primary:focus,
599
- fieldset[disabled] .embedpress-modal .btn-primary.focus {
 
 
 
 
 
 
600
  background-color: #337ab7;
601
- border-color: #2e6da4; }
602
- .embedpress-modal .btn-primary .badge {
 
 
603
  color: #337ab7;
604
- background-color: #fff; }
 
605
 
606
  .embedpress-modal .btn-success {
607
- color: #fff;
608
- background-color: #5cb85c;
609
- border-color: #4cae4c; }
610
- .embedpress-modal .btn-success:focus, .embedpress-modal .btn-success.focus {
 
 
611
  color: #fff;
612
  background-color: #449d44;
613
- border-color: #255625; }
614
- .embedpress-modal .btn-success:hover {
 
 
615
  color: #fff;
616
  background-color: #449d44;
617
- border-color: #398439; }
618
- .embedpress-modal .btn-success:active, .embedpress-modal .btn-success.active,
619
- .open > .embedpress-modal .btn-success.dropdown-toggle {
 
 
620
  color: #fff;
621
  background-color: #449d44;
622
- border-color: #398439; }
623
- .embedpress-modal .btn-success:active:hover, .embedpress-modal .btn-success:active:focus, .embedpress-modal .btn-success:active.focus, .embedpress-modal .btn-success.active:hover, .embedpress-modal .btn-success.active:focus, .embedpress-modal .btn-success.active.focus,
624
- .open > .embedpress-modal .btn-success.dropdown-toggle:hover,
625
- .open > .embedpress-modal .btn-success.dropdown-toggle:focus,
626
- .open > .embedpress-modal .btn-success.dropdown-toggle.focus {
627
- color: #fff;
628
- background-color: #398439;
629
- border-color: #255625; }
630
- .embedpress-modal .btn-success:active, .embedpress-modal .btn-success.active,
631
- .open > .embedpress-modal .btn-success.dropdown-toggle {
632
- background-image: none; }
633
- .embedpress-modal .btn-success.disabled:hover, .embedpress-modal .btn-success.disabled:focus, .embedpress-modal .btn-success.disabled.focus, .embedpress-modal .btn-success[disabled]:hover, .embedpress-modal .btn-success[disabled]:focus, .embedpress-modal .btn-success[disabled].focus,
634
- fieldset[disabled] .embedpress-modal .btn-success:hover,
635
- fieldset[disabled] .embedpress-modal .btn-success:focus,
636
- fieldset[disabled] .embedpress-modal .btn-success.focus {
 
 
 
 
 
 
637
  background-color: #5cb85c;
638
- border-color: #4cae4c; }
639
- .embedpress-modal .btn-success .badge {
 
 
640
  color: #5cb85c;
641
- background-color: #fff; }
 
642
 
643
  .embedpress-modal .btn-info {
644
- color: #fff;
645
- background-color: #5bc0de;
646
- border-color: #46b8da; }
647
- .embedpress-modal .btn-info:focus, .embedpress-modal .btn-info.focus {
 
 
648
  color: #fff;
649
  background-color: #31b0d5;
650
- border-color: #1b6d85; }
651
- .embedpress-modal .btn-info:hover {
 
 
652
  color: #fff;
653
  background-color: #31b0d5;
654
- border-color: #269abc; }
655
- .embedpress-modal .btn-info:active, .embedpress-modal .btn-info.active,
656
- .open > .embedpress-modal .btn-info.dropdown-toggle {
 
 
657
  color: #fff;
658
  background-color: #31b0d5;
659
- border-color: #269abc; }
660
- .embedpress-modal .btn-info:active:hover, .embedpress-modal .btn-info:active:focus, .embedpress-modal .btn-info:active.focus, .embedpress-modal .btn-info.active:hover, .embedpress-modal .btn-info.active:focus, .embedpress-modal .btn-info.active.focus,
661
- .open > .embedpress-modal .btn-info.dropdown-toggle:hover,
662
- .open > .embedpress-modal .btn-info.dropdown-toggle:focus,
663
- .open > .embedpress-modal .btn-info.dropdown-toggle.focus {
664
- color: #fff;
665
- background-color: #269abc;
666
- border-color: #1b6d85; }
667
- .embedpress-modal .btn-info:active, .embedpress-modal .btn-info.active,
668
- .open > .embedpress-modal .btn-info.dropdown-toggle {
669
- background-image: none; }
670
- .embedpress-modal .btn-info.disabled:hover, .embedpress-modal .btn-info.disabled:focus, .embedpress-modal .btn-info.disabled.focus, .embedpress-modal .btn-info[disabled]:hover, .embedpress-modal .btn-info[disabled]:focus, .embedpress-modal .btn-info[disabled].focus,
671
- fieldset[disabled] .embedpress-modal .btn-info:hover,
672
- fieldset[disabled] .embedpress-modal .btn-info:focus,
673
- fieldset[disabled] .embedpress-modal .btn-info.focus {
 
 
 
 
 
 
674
  background-color: #5bc0de;
675
- border-color: #46b8da; }
676
- .embedpress-modal .btn-info .badge {
 
 
677
  color: #5bc0de;
678
- background-color: #fff; }
 
679
 
680
  .embedpress-modal .btn-warning {
681
- color: #fff;
682
- background-color: #f0ad4e;
683
- border-color: #eea236; }
684
- .embedpress-modal .btn-warning:focus, .embedpress-modal .btn-warning.focus {
 
 
685
  color: #fff;
686
  background-color: #ec971f;
687
- border-color: #985f0d; }
688
- .embedpress-modal .btn-warning:hover {
 
 
689
  color: #fff;
690
  background-color: #ec971f;
691
- border-color: #d58512; }
692
- .embedpress-modal .btn-warning:active, .embedpress-modal .btn-warning.active,
693
- .open > .embedpress-modal .btn-warning.dropdown-toggle {
 
 
694
  color: #fff;
695
  background-color: #ec971f;
696
- border-color: #d58512; }
697
- .embedpress-modal .btn-warning:active:hover, .embedpress-modal .btn-warning:active:focus, .embedpress-modal .btn-warning:active.focus, .embedpress-modal .btn-warning.active:hover, .embedpress-modal .btn-warning.active:focus, .embedpress-modal .btn-warning.active.focus,
698
- .open > .embedpress-modal .btn-warning.dropdown-toggle:hover,
699
- .open > .embedpress-modal .btn-warning.dropdown-toggle:focus,
700
- .open > .embedpress-modal .btn-warning.dropdown-toggle.focus {
701
- color: #fff;
702
- background-color: #d58512;
703
- border-color: #985f0d; }
704
- .embedpress-modal .btn-warning:active, .embedpress-modal .btn-warning.active,
705
- .open > .embedpress-modal .btn-warning.dropdown-toggle {
706
- background-image: none; }
707
- .embedpress-modal .btn-warning.disabled:hover, .embedpress-modal .btn-warning.disabled:focus, .embedpress-modal .btn-warning.disabled.focus, .embedpress-modal .btn-warning[disabled]:hover, .embedpress-modal .btn-warning[disabled]:focus, .embedpress-modal .btn-warning[disabled].focus,
708
- fieldset[disabled] .embedpress-modal .btn-warning:hover,
709
- fieldset[disabled] .embedpress-modal .btn-warning:focus,
710
- fieldset[disabled] .embedpress-modal .btn-warning.focus {
 
 
 
 
 
 
711
  background-color: #f0ad4e;
712
- border-color: #eea236; }
713
- .embedpress-modal .btn-warning .badge {
 
 
714
  color: #f0ad4e;
715
- background-color: #fff; }
 
716
 
717
  .embedpress-modal .btn-danger {
718
- color: #fff;
719
- background-color: #d9534f;
720
- border-color: #d43f3a; }
721
- .embedpress-modal .btn-danger:focus, .embedpress-modal .btn-danger.focus {
 
 
722
  color: #fff;
723
  background-color: #c9302c;
724
- border-color: #761c19; }
725
- .embedpress-modal .btn-danger:hover {
 
 
726
  color: #fff;
727
  background-color: #c9302c;
728
- border-color: #ac2925; }
729
- .embedpress-modal .btn-danger:active, .embedpress-modal .btn-danger.active,
730
- .open > .embedpress-modal .btn-danger.dropdown-toggle {
 
 
731
  color: #fff;
732
  background-color: #c9302c;
733
- border-color: #ac2925; }
734
- .embedpress-modal .btn-danger:active:hover, .embedpress-modal .btn-danger:active:focus, .embedpress-modal .btn-danger:active.focus, .embedpress-modal .btn-danger.active:hover, .embedpress-modal .btn-danger.active:focus, .embedpress-modal .btn-danger.active.focus,
735
- .open > .embedpress-modal .btn-danger.dropdown-toggle:hover,
736
- .open > .embedpress-modal .btn-danger.dropdown-toggle:focus,
737
- .open > .embedpress-modal .btn-danger.dropdown-toggle.focus {
738
- color: #fff;
739
- background-color: #ac2925;
740
- border-color: #761c19; }
741
- .embedpress-modal .btn-danger:active, .embedpress-modal .btn-danger.active,
742
- .open > .embedpress-modal .btn-danger.dropdown-toggle {
743
- background-image: none; }
744
- .embedpress-modal .btn-danger.disabled:hover, .embedpress-modal .btn-danger.disabled:focus, .embedpress-modal .btn-danger.disabled.focus, .embedpress-modal .btn-danger[disabled]:hover, .embedpress-modal .btn-danger[disabled]:focus, .embedpress-modal .btn-danger[disabled].focus,
745
- fieldset[disabled] .embedpress-modal .btn-danger:hover,
746
- fieldset[disabled] .embedpress-modal .btn-danger:focus,
747
- fieldset[disabled] .embedpress-modal .btn-danger.focus {
 
 
 
 
 
 
748
  background-color: #d9534f;
749
- border-color: #d43f3a; }
750
- .embedpress-modal .btn-danger .badge {
 
 
751
  color: #d9534f;
752
- background-color: #fff; }
 
753
 
754
  .embedpress-modal .btn-link {
755
- color: #337ab7;
756
- font-weight: normal;
757
- border-radius: 0; }
758
- .embedpress-modal .btn-link, .embedpress-modal .btn-link:active, .embedpress-modal .btn-link.active, .embedpress-modal .btn-link[disabled],
759
- fieldset[disabled] .embedpress-modal .btn-link {
 
 
760
  background-color: transparent;
761
- box-shadow: none; }
762
- .embedpress-modal .btn-link, .embedpress-modal .btn-link:hover, .embedpress-modal .btn-link:focus, .embedpress-modal .btn-link:active {
763
- border-color: transparent; }
764
- .embedpress-modal .btn-link:hover, .embedpress-modal .btn-link:focus {
 
 
 
 
765
  color: #23527c;
766
  text-decoration: underline;
767
- background-color: transparent; }
768
- .embedpress-modal .btn-link[disabled]:hover, .embedpress-modal .btn-link[disabled]:focus,
769
- fieldset[disabled] .embedpress-modal .btn-link:hover,
770
- fieldset[disabled] .embedpress-modal .btn-link:focus {
 
 
771
  color: #777777;
772
- text-decoration: none; }
 
773
 
774
  .embedpress-modal .btn-lg, .embedpress-modal .btn-group-lg > .btn {
775
- padding: 10px 16px;
776
- font-size: 18px;
777
- line-height: 1.33333;
778
- border-radius: 6px; }
 
779
 
780
  .embedpress-modal .btn-sm, .embedpress-modal .btn-group-sm > .btn {
781
- padding: 5px 10px;
782
- font-size: 12px;
783
- line-height: 1.5;
784
- border-radius: 3px; }
 
785
 
786
  .embedpress-modal .btn-xs, .embedpress-modal .btn-group-xs > .btn {
787
- padding: 1px 5px;
788
- font-size: 12px;
789
- line-height: 1.5;
790
- border-radius: 3px; }
 
791
 
792
  .embedpress-modal .btn-block {
793
- display: block;
794
- width: 100%; }
 
795
 
796
  .embedpress-modal .btn-block + .btn-block {
797
- margin-top: 5px; }
 
798
 
799
  .embedpress-modal input[type="submit"].btn-block,
800
  .embedpress-modal input[type="reset"].btn-block,
801
  .embedpress-modal input[type="button"].btn-block {
802
- width: 100%; }
 
803
 
804
  .embedpress-modal .btn-group,
805
  .embedpress-modal .btn-group-vertical {
806
- position: relative;
807
- display: inline-block;
808
- vertical-align: middle; }
809
- .embedpress-modal .btn-group > .btn,
810
- .embedpress-modal .btn-group-vertical > .btn {
811
  position: relative;
812
- float: left; }
813
- .embedpress-modal .btn-group > .btn:hover, .embedpress-modal .btn-group > .btn:focus, .embedpress-modal .btn-group > .btn:active, .embedpress-modal .btn-group > .btn.active,
814
- .embedpress-modal .btn-group-vertical > .btn:hover,
815
- .embedpress-modal .btn-group-vertical > .btn:focus,
816
- .embedpress-modal .btn-group-vertical > .btn:active,
817
- .embedpress-modal .btn-group-vertical > .btn.active {
818
- z-index: 2; }
 
 
 
 
 
 
 
 
 
 
819
 
820
  .embedpress-modal .btn-group .btn + .btn,
821
  .embedpress-modal .btn-group .btn + .btn-group,
822
  .embedpress-modal .btn-group .btn-group + .btn,
823
  .embedpress-modal .btn-group .btn-group + .btn-group {
824
- margin-left: -1px; }
 
825
 
826
  .embedpress-modal .btn-toolbar {
827
- margin-left: -5px; }
828
- .embedpress-modal .btn-toolbar:before, .embedpress-modal .btn-toolbar:after {
 
 
829
  content: " ";
830
- display: table; }
831
- .embedpress-modal .btn-toolbar:after {
832
- clear: both; }
833
- .embedpress-modal .btn-toolbar .btn,
834
- .embedpress-modal .btn-toolbar .btn-group,
835
- .embedpress-modal .btn-toolbar .input-group {
836
- float: left; }
837
- .embedpress-modal .btn-toolbar > .btn,
838
- .embedpress-modal .btn-toolbar > .btn-group,
839
- .embedpress-modal .btn-toolbar > .input-group {
840
- margin-left: 5px; }
 
 
 
 
 
 
 
841
 
842
  .embedpress-modal .btn-group > .btn:not(:first-child):not(:last-child):not(.dropdown-toggle) {
843
- border-radius: 0; }
 
844
 
845
  .embedpress-modal .btn-group > .btn:first-child {
846
- margin-left: 0; }
847
- .embedpress-modal .btn-group > .btn:first-child:not(:last-child):not(.dropdown-toggle) {
 
 
848
  border-bottom-right-radius: 0;
849
- border-top-right-radius: 0; }
 
850
 
851
  .embedpress-modal .btn-group > .btn:last-child:not(:first-child),
852
  .embedpress-modal .btn-group > .dropdown-toggle:not(:first-child) {
853
- border-bottom-left-radius: 0;
854
- border-top-left-radius: 0; }
 
855
 
856
  .embedpress-modal .btn-group > .btn-group {
857
- float: left; }
 
858
 
859
  .embedpress-modal .btn-group > .btn-group:not(:first-child):not(:last-child) > .btn {
860
- border-radius: 0; }
 
861
 
862
  .embedpress-modal .btn-group > .btn-group:first-child:not(:last-child) > .btn:last-child,
863
  .embedpress-modal .btn-group > .btn-group:first-child:not(:last-child) > .dropdown-toggle {
864
- border-bottom-right-radius: 0;
865
- border-top-right-radius: 0; }
 
866
 
867
  .embedpress-modal .btn-group > .btn-group:last-child:not(:first-child) > .btn:first-child {
868
- border-bottom-left-radius: 0;
869
- border-top-left-radius: 0; }
 
870
 
871
  .embedpress-modal .btn-group .dropdown-toggle:active,
872
  .embedpress-modal .btn-group.open .dropdown-toggle {
873
- outline: 0; }
 
874
 
875
  .embedpress-modal .btn-group > .btn + .dropdown-toggle {
876
- padding-left: 8px;
877
- padding-right: 8px; }
 
878
 
879
  .embedpress-modal .btn-group > .btn-lg + .dropdown-toggle, .embedpress-modal .btn-group-lg.btn-group > .btn + .dropdown-toggle {
880
- padding-left: 12px;
881
- padding-right: 12px; }
 
882
 
883
  .embedpress-modal .btn-group.open .dropdown-toggle {
884
- box-shadow: inset 0 3px 5px rgba(0, 0, 0, 0.125); }
885
- .embedpress-modal .btn-group.open .dropdown-toggle.btn-link {
886
- box-shadow: none; }
 
 
 
887
 
888
  .embedpress-modal .btn .caret {
889
- margin-left: 0; }
 
890
 
891
  .embedpress-modal .btn-lg .caret, .embedpress-modal .btn-group-lg > .btn .caret {
892
- border-width: 5px 5px 0;
893
- border-bottom-width: 0; }
 
894
 
895
  .embedpress-modal .dropup .btn-lg .caret, .embedpress-modal .dropup .btn-group-lg > .btn .caret {
896
- border-width: 0 5px 5px; }
 
897
 
898
  .embedpress-modal .btn-group-vertical > .btn,
899
  .embedpress-modal .btn-group-vertical > .btn-group,
900
  .embedpress-modal .btn-group-vertical > .btn-group > .btn {
901
- display: block;
902
- float: none;
903
- width: 100%;
904
- max-width: 100%; }
 
905
 
906
  .embedpress-modal .btn-group-vertical > .btn-group:before, .embedpress-modal .btn-group-vertical > .btn-group:after {
907
- content: " ";
908
- display: table; }
 
909
 
910
  .embedpress-modal .btn-group-vertical > .btn-group:after {
911
- clear: both; }
 
912
 
913
  .embedpress-modal .btn-group-vertical > .btn-group > .btn {
914
- float: none; }
 
915
 
916
  .embedpress-modal .btn-group-vertical > .btn + .btn,
917
  .embedpress-modal .btn-group-vertical > .btn + .btn-group,
918
  .embedpress-modal .btn-group-vertical > .btn-group + .btn,
919
  .embedpress-modal .btn-group-vertical > .btn-group + .btn-group {
920
- margin-top: -1px;
921
- margin-left: 0; }
 
922
 
923
  .embedpress-modal .btn-group-vertical > .btn:not(:first-child):not(:last-child) {
924
- border-radius: 0; }
 
925
 
926
  .embedpress-modal .btn-group-vertical > .btn:first-child:not(:last-child) {
927
- border-top-right-radius: 4px;
928
- border-top-left-radius: 4px;
929
- border-bottom-right-radius: 0;
930
- border-bottom-left-radius: 0; }
 
931
 
932
  .embedpress-modal .btn-group-vertical > .btn:last-child:not(:first-child) {
933
- border-top-right-radius: 0;
934
- border-top-left-radius: 0;
935
- border-bottom-right-radius: 4px;
936
- border-bottom-left-radius: 4px; }
 
937
 
938
  .embedpress-modal .btn-group-vertical > .btn-group:not(:first-child):not(:last-child) > .btn {
939
- border-radius: 0; }
 
940
 
941
  .embedpress-modal .btn-group-vertical > .btn-group:first-child:not(:last-child) > .btn:last-child,
942
  .embedpress-modal .btn-group-vertical > .btn-group:first-child:not(:last-child) > .dropdown-toggle {
943
- border-bottom-right-radius: 0;
944
- border-bottom-left-radius: 0; }
 
945
 
946
  .embedpress-modal .btn-group-vertical > .btn-group:last-child:not(:first-child) > .btn:first-child {
947
- border-top-right-radius: 0;
948
- border-top-left-radius: 0; }
 
949
 
950
  .embedpress-modal .btn-group-justified {
951
- display: table;
952
- width: 100%;
953
- table-layout: fixed;
954
- border-collapse: separate; }
955
- .embedpress-modal .btn-group-justified > .btn,
956
- .embedpress-modal .btn-group-justified > .btn-group {
 
 
957
  float: none;
958
  display: table-cell;
959
- width: 1%; }
960
- .embedpress-modal .btn-group-justified > .btn-group .btn {
961
- width: 100%; }
962
- .embedpress-modal .btn-group-justified > .btn-group .dropdown-menu {
963
- left: auto; }
 
 
 
 
 
964
 
965
  .embedpress-modal [data-toggle="buttons"] > .btn input[type="radio"],
966
  .embedpress-modal [data-toggle="buttons"] > .btn input[type="checkbox"],
967
  .embedpress-modal [data-toggle="buttons"] > .btn-group > .btn input[type="radio"],
968
  .embedpress-modal [data-toggle="buttons"] > .btn-group > .btn input[type="checkbox"] {
969
- position: absolute;
970
- clip: rect(0, 0, 0, 0);
971
- pointer-events: none; }
 
972
 
973
  .embedpress-modal .input-group {
974
- position: relative;
975
- display: table;
976
- border-collapse: separate; }
977
- .embedpress-modal .input-group[class*="col-"] {
 
 
978
  float: none;
979
  padding-left: 0;
980
- padding-right: 0; }
981
- .embedpress-modal .input-group .form-control {
 
 
982
  position: relative;
983
  z-index: 2;
984
  float: left;
985
  width: 100%;
986
- margin-bottom: 0; }
987
- .embedpress-modal .input-group .form-control:focus {
988
- z-index: 3; }
 
 
 
989
 
990
  .embedpress-modal .input-group-addon,
991
  .embedpress-modal .input-group-btn,
992
  .embedpress-modal .input-group .form-control {
993
- display: table-cell; }
994
- .embedpress-modal .input-group-addon:not(:first-child):not(:last-child),
995
- .embedpress-modal .input-group-btn:not(:first-child):not(:last-child),
996
- .embedpress-modal .input-group .form-control:not(:first-child):not(:last-child) {
997
- border-radius: 0; }
 
 
 
998
 
999
  .embedpress-modal .input-group-addon,
1000
  .embedpress-modal .input-group-btn {
1001
- width: 1%;
1002
- white-space: nowrap;
1003
- vertical-align: middle; }
 
1004
 
1005
  .embedpress-modal .input-group-addon {
1006
- padding: 6px 12px;
1007
- font-size: 14px;
1008
- font-weight: normal;
1009
- line-height: 1;
1010
- color: #555555;
1011
- text-align: center;
1012
- background-color: #eeeeee;
1013
- border: 1px solid #ccc;
1014
- border-radius: 4px; }
1015
- .embedpress-modal .input-group-addon.input-sm, .embedpress-modal .input-group-sm > .input-group-addon, .embedpress-modal .input-group-sm > .input-group-btn > .input-group-addon.btn {
 
 
1016
  padding: 5px 10px;
1017
  font-size: 12px;
1018
- border-radius: 3px; }
1019
- .embedpress-modal .input-group-addon.input-lg, .embedpress-modal .input-group-lg > .input-group-addon, .embedpress-modal .input-group-lg > .input-group-btn > .input-group-addon.btn {
 
 
1020
  padding: 10px 16px;
1021
  font-size: 18px;
1022
- border-radius: 6px; }
1023
- .embedpress-modal .input-group-addon input[type="radio"],
1024
- .embedpress-modal .input-group-addon input[type="checkbox"] {
1025
- margin-top: 0; }
 
 
 
1026
 
1027
  .embedpress-modal .input-group .form-control:first-child,
1028
  .embedpress-modal .input-group-addon:first-child,
@@ -1031,11 +1340,13 @@ fieldset[disabled] .embedpress-modal a.btn {
1031
  .embedpress-modal .input-group-btn:first-child > .dropdown-toggle,
1032
  .embedpress-modal .input-group-btn:last-child > .btn:not(:last-child):not(.dropdown-toggle),
1033
  .embedpress-modal .input-group-btn:last-child > .btn-group:not(:last-child) > .btn {
1034
- border-bottom-right-radius: 0;
1035
- border-top-right-radius: 0; }
 
1036
 
1037
  .embedpress-modal .input-group-addon:first-child {
1038
- border-right: 0; }
 
1039
 
1040
  .embedpress-modal .input-group .form-control:last-child,
1041
  .embedpress-modal .input-group-addon:last-child,
@@ -1044,178 +1355,242 @@ fieldset[disabled] .embedpress-modal a.btn {
1044
  .embedpress-modal .input-group-btn:last-child > .dropdown-toggle,
1045
  .embedpress-modal .input-group-btn:first-child > .btn:not(:first-child),
1046
  .embedpress-modal .input-group-btn:first-child > .btn-group:not(:first-child) > .btn {
1047
- border-bottom-left-radius: 0;
1048
- border-top-left-radius: 0; }
 
1049
 
1050
  .embedpress-modal .input-group-addon:last-child {
1051
- border-left: 0; }
 
1052
 
1053
  .embedpress-modal .input-group-btn {
1054
- position: relative;
1055
- font-size: 0;
1056
- white-space: nowrap; }
1057
- .embedpress-modal .input-group-btn > .btn {
1058
- position: relative; }
1059
- .embedpress-modal .input-group-btn > .btn + .btn {
1060
- margin-left: -1px; }
1061
- .embedpress-modal .input-group-btn > .btn:hover, .embedpress-modal .input-group-btn > .btn:focus, .embedpress-modal .input-group-btn > .btn:active {
1062
- z-index: 2; }
1063
- .embedpress-modal .input-group-btn:first-child > .btn,
1064
- .embedpress-modal .input-group-btn:first-child > .btn-group {
1065
- margin-right: -1px; }
1066
- .embedpress-modal .input-group-btn:last-child > .btn,
1067
- .embedpress-modal .input-group-btn:last-child > .btn-group {
1068
  z-index: 2;
1069
- margin-left: -1px; }
 
 
 
 
 
 
 
 
 
 
 
1070
 
1071
  .embedpress-modal .close {
1072
- float: right;
1073
- font-size: 21px;
1074
- font-weight: bold;
1075
- line-height: 1;
1076
- color: #000;
1077
- text-shadow: 0 1px 0 #fff;
1078
- opacity: 0.2;
1079
- filter: alpha(opacity=20); }
1080
- .embedpress-modal .close:hover, .embedpress-modal .close:focus {
 
 
1081
  color: #000;
1082
  text-decoration: none;
1083
  cursor: pointer;
1084
  opacity: 0.5;
1085
- filter: alpha(opacity=50); }
 
1086
 
1087
  .embedpress-modal button.close {
1088
- padding: 0;
1089
- cursor: pointer;
1090
- background: transparent;
1091
- border: 0;
1092
- -webkit-appearance: none; }
 
1093
 
1094
  .modal-open {
1095
- overflow: hidden; }
 
1096
 
1097
  .modal {
1098
- display: none;
1099
- overflow: hidden;
1100
- position: fixed;
1101
- top: 0;
1102
- right: 0;
1103
- bottom: 0;
1104
- left: 0;
1105
- z-index: 100010;
1106
- -webkit-overflow-scrolling: touch;
1107
- outline: 0; }
1108
- .modal.fade .modal-dialog {
 
 
1109
  transform: translate(0, -25%);
1110
- transition: transform 0.3s ease-out; }
1111
- .modal.in .modal-dialog {
1112
- transform: translate(0, 0); }
 
 
 
1113
 
1114
  .modal-open .modal {
1115
- overflow-x: hidden;
1116
- overflow-y: auto; }
 
1117
 
1118
  .modal-dialog {
1119
- position: relative;
1120
- width: auto;
1121
- margin: 10px; }
 
1122
 
1123
  .modal-content {
1124
- position: relative;
1125
- background-color: #fff;
1126
- border: 1px solid #999;
1127
- border: 1px solid rgba(0, 0, 0, 0.2);
1128
- border-radius: 6px;
1129
- box-shadow: 0 3px 9px rgba(0, 0, 0, 0.5);
1130
- background-clip: padding-box;
1131
- outline: 0; }
 
1132
 
1133
  .modal-backdrop {
1134
- position: fixed;
1135
- top: 0;
1136
- right: 0;
1137
- bottom: 0;
1138
- left: 0;
1139
- z-index: 100001;
1140
- background-color: #000; }
1141
- .modal-backdrop.fade {
 
 
1142
  opacity: 0;
1143
- filter: alpha(opacity=0); }
1144
- .modal-backdrop.in {
 
 
1145
  opacity: 0.5;
1146
- filter: alpha(opacity=50); }
 
1147
 
1148
  .modal-header {
1149
- padding: 15px;
1150
- border-bottom: 1px solid #e5e5e5; }
1151
- .modal-header:before, .modal-header:after {
 
 
1152
  content: " ";
1153
- display: table; }
1154
- .modal-header:after {
1155
- clear: both; }
 
 
 
1156
 
1157
  .modal-header .close {
1158
- margin-top: -2px; }
 
1159
 
1160
  .modal-title {
1161
- margin: 0;
1162
- line-height: 1.42857; }
 
1163
 
1164
  .modal-body {
1165
- position: relative;
1166
- padding: 15px; }
 
1167
 
1168
  .modal-footer {
1169
- padding: 15px;
1170
- text-align: right;
1171
- border-top: 1px solid #e5e5e5; }
1172
- .modal-footer:before, .modal-footer:after {
 
 
1173
  content: " ";
1174
- display: table; }
1175
- .modal-footer:after {
1176
- clear: both; }
1177
- .modal-footer .btn + .btn {
 
 
 
 
1178
  margin-left: 5px;
1179
- margin-bottom: 0; }
1180
- .modal-footer .btn-group .btn + .btn {
1181
- margin-left: -1px; }
1182
- .modal-footer .btn-block + .btn-block {
1183
- margin-left: 0; }
 
 
 
 
 
1184
 
1185
  .modal-scrollbar-measure {
1186
- position: absolute;
1187
- top: -9999px;
1188
- width: 50px;
1189
- height: 50px;
1190
- overflow: scroll; }
 
1191
 
1192
  @media (min-width: 768px) {
1193
- .modal-dialog {
1194
- width: 600px;
1195
- margin: 30px auto; }
1196
- .modal-content {
1197
- box-shadow: 0 5px 15px rgba(0, 0, 0, 0.5); }
1198
- .modal-sm {
1199
- width: 300px; } }
 
 
 
 
 
 
1200
 
1201
  @media (min-width: 992px) {
1202
- .modal-lg {
1203
- width: 900px; } }
 
 
1204
 
1205
  @-ms-viewport {
1206
- width: device-width; }
 
1207
 
1208
  .visible-xs {
1209
- display: none !important; }
 
1210
 
1211
  .visible-sm {
1212
- display: none !important; }
 
1213
 
1214
  .visible-md {
1215
- display: none !important; }
 
1216
 
1217
  .visible-lg {
1218
- display: none !important; }
 
1219
 
1220
  .visible-xs-block,
1221
  .visible-xs-inline,
@@ -1229,148 +1604,236 @@ fieldset[disabled] .embedpress-modal a.btn {
1229
  .visible-lg-block,
1230
  .visible-lg-inline,
1231
  .visible-lg-inline-block {
1232
- display: none !important; }
 
1233
 
1234
  @media (max-width: 767px) {
1235
- .visible-xs {
1236
- display: block !important; }
1237
- table.visible-xs {
1238
- display: table !important; }
1239
- tr.visible-xs {
1240
- display: table-row !important; }
1241
- th.visible-xs,
1242
- td.visible-xs {
1243
- display: table-cell !important; } }
 
 
 
 
 
 
 
 
1244
 
1245
  @media (max-width: 767px) {
1246
- .visible-xs-block {
1247
- display: block !important; } }
 
 
1248
 
1249
  @media (max-width: 767px) {
1250
- .visible-xs-inline {
1251
- display: inline !important; } }
 
 
1252
 
1253
  @media (max-width: 767px) {
1254
- .visible-xs-inline-block {
1255
- display: inline-block !important; } }
 
 
1256
 
1257
  @media (min-width: 768px) and (max-width: 991px) {
1258
- .visible-sm {
1259
- display: block !important; }
1260
- table.visible-sm {
1261
- display: table !important; }
1262
- tr.visible-sm {
1263
- display: table-row !important; }
1264
- th.visible-sm,
1265
- td.visible-sm {
1266
- display: table-cell !important; } }
 
 
 
 
 
 
 
 
1267
 
1268
  @media (min-width: 768px) and (max-width: 991px) {
1269
- .visible-sm-block {
1270
- display: block !important; } }
 
 
1271
 
1272
  @media (min-width: 768px) and (max-width: 991px) {
1273
- .visible-sm-inline {
1274
- display: inline !important; } }
 
 
1275
 
1276
  @media (min-width: 768px) and (max-width: 991px) {
1277
- .visible-sm-inline-block {
1278
- display: inline-block !important; } }
 
 
1279
 
1280
  @media (min-width: 992px) and (max-width: 1199px) {
1281
- .visible-md {
1282
- display: block !important; }
1283
- table.visible-md {
1284
- display: table !important; }
1285
- tr.visible-md {
1286
- display: table-row !important; }
1287
- th.visible-md,
1288
- td.visible-md {
1289
- display: table-cell !important; } }
 
 
 
 
 
 
 
 
1290
 
1291
  @media (min-width: 992px) and (max-width: 1199px) {
1292
- .visible-md-block {
1293
- display: block !important; } }
 
 
1294
 
1295
  @media (min-width: 992px) and (max-width: 1199px) {
1296
- .visible-md-inline {
1297
- display: inline !important; } }
 
 
1298
 
1299
  @media (min-width: 992px) and (max-width: 1199px) {
1300
- .visible-md-inline-block {
1301
- display: inline-block !important; } }
 
 
1302
 
1303
  @media (min-width: 1200px) {
1304
- .visible-lg {
1305
- display: block !important; }
1306
- table.visible-lg {
1307
- display: table !important; }
1308
- tr.visible-lg {
1309
- display: table-row !important; }
1310
- th.visible-lg,
1311
- td.visible-lg {
1312
- display: table-cell !important; } }
 
 
 
 
 
 
 
 
1313
 
1314
  @media (min-width: 1200px) {
1315
- .visible-lg-block {
1316
- display: block !important; } }
 
 
1317
 
1318
  @media (min-width: 1200px) {
1319
- .visible-lg-inline {
1320
- display: inline !important; } }
 
 
1321
 
1322
  @media (min-width: 1200px) {
1323
- .visible-lg-inline-block {
1324
- display: inline-block !important; } }
 
 
1325
 
1326
  @media (max-width: 767px) {
1327
- .hidden-xs {
1328
- display: none !important; } }
 
 
1329
 
1330
  @media (min-width: 768px) and (max-width: 991px) {
1331
- .hidden-sm {
1332
- display: none !important; } }
 
 
1333
 
1334
  @media (min-width: 992px) and (max-width: 1199px) {
1335
- .hidden-md {
1336
- display: none !important; } }
 
 
1337
 
1338
  @media (min-width: 1200px) {
1339
- .hidden-lg {
1340
- display: none !important; } }
 
 
1341
 
1342
  .visible-print {
1343
- display: none !important; }
 
1344
 
1345
  @media print {
1346
- .visible-print {
1347
- display: block !important; }
1348
- table.visible-print {
1349
- display: table !important; }
1350
- tr.visible-print {
1351
- display: table-row !important; }
1352
- th.visible-print,
1353
- td.visible-print {
1354
- display: table-cell !important; } }
 
 
 
 
 
 
 
 
1355
 
1356
  .visible-print-block {
1357
- display: none !important; }
1358
- @media print {
 
 
1359
  .visible-print-block {
1360
- display: block !important; } }
 
 
1361
 
1362
  .visible-print-inline {
1363
- display: none !important; }
1364
- @media print {
 
 
1365
  .visible-print-inline {
1366
- display: inline !important; } }
 
 
1367
 
1368
  .visible-print-inline-block {
1369
- display: none !important; }
1370
- @media print {
 
 
1371
  .visible-print-inline-block {
1372
- display: inline-block !important; } }
 
 
1373
 
1374
  @media print {
1375
- .hidden-print {
1376
- display: none !important; } }
 
 
8
  */
9
 
10
  .embedpress-modal fieldset {
11
+ padding: 0;
12
+ margin: 0;
13
+ border: 0;
14
+ min-width: 0;
15
+ }
16
 
17
  .embedpress-modal legend {
18
+ display: block;
19
+ width: 100%;
20
+ padding: 0;
21
+ margin-bottom: 20px;
22
+ font-size: 21px;
23
+ line-height: inherit;
24
+ color: #333333;
25
+ border: 0;
26
+ border-bottom: 1px solid #e5e5e5;
27
+ }
28
 
29
  .embedpress-modal label {
30
+ display: inline-block;
31
+ max-width: 100%;
32
+ margin-bottom: 5px;
33
+ font-weight: bold;
34
+ }
35
 
36
  .embedpress-modal input[type="search"] {
37
+ box-sizing: border-box;
38
+ }
39
 
40
  .embedpress-modal input[type="radio"],
41
  .embedpress-modal input[type="checkbox"] {
42
+ margin: 4px 0 0;
43
+ margin-top: 1px \9;
44
+ line-height: normal;
45
+ }
46
 
47
  .embedpress-modal input[type="file"] {
48
+ display: block;
49
+ }
50
 
51
  .embedpress-modal input[type="range"] {
52
+ display: block;
53
+ width: 100%;
54
+ }
55
 
56
  .embedpress-modal select[multiple],
57
  .embedpress-modal select[size] {
58
+ height: auto;
59
+ }
60
 
61
  .embedpress-modal input[type="file"]:focus,
62
  .embedpress-modal input[type="radio"]:focus,
63
  .embedpress-modal input[type="checkbox"]:focus {
64
+ outline: 5px auto -webkit-focus-ring-color;
65
+ outline-offset: -2px;
66
+ }
67
 
68
  .embedpress-modal output {
69
+ display: block;
70
+ padding-top: 7px;
71
+ font-size: 14px;
72
+ line-height: 1.42857;
73
+ color: #555555;
74
+ }
75
 
76
  .embedpress-modal .form-control {
77
+ display: block;
78
+ width: 100%;
79
+ height: 34px;
80
+ padding: 6px 12px;
81
+ font-size: 14px;
82
+ line-height: 1.42857;
83
+ color: #555555;
84
+ background-color: #fff;
85
+ background-image: none;
86
+ border: 1px solid #ccc;
87
+ border-radius: 4px;
88
+ box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.075);
89
+ transition: border-color ease-in-out 0.15s, box-shadow ease-in-out 0.15s;
90
+ }
91
+
92
+ .embedpress-modal .form-control:focus {
93
  border-color: #66afe9;
94
  outline: 0;
95
+ box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.075), 0 0 8px rgba(102, 175, 233, 0.6);
96
+ }
97
+
98
+ .embedpress-modal .form-control::-moz-placeholder {
99
+ color: #999;
100
+ opacity: 1;
101
+ }
102
+
103
+ .embedpress-modal .form-control:-ms-input-placeholder {
104
  color: #999;
105
+ }
106
+
107
+ .embedpress-modal .form-control::-webkit-input-placeholder {
108
+ color: #999;
109
+ }
110
+
111
+ .embedpress-modal .form-control::-ms-expand {
112
  border: 0;
113
+ background-color: transparent;
114
+ }
115
+
116
+ .embedpress-modal .form-control[disabled], .embedpress-modal .form-control[readonly],
117
+ fieldset[disabled] .embedpress-modal .form-control {
118
  background-color: #eeeeee;
119
+ opacity: 1;
120
+ }
121
+
122
+ .embedpress-modal .form-control[disabled],
123
+ fieldset[disabled] .embedpress-modal .form-control {
124
+ cursor: not-allowed;
125
+ }
126
 
127
  .embedpress-modal textarea.form-control {
128
+ height: auto;
129
+ }
130
 
131
  .embedpress-modal input[type="search"] {
132
+ -webkit-appearance: none;
133
+ }
134
 
135
  @media screen and (-webkit-min-device-pixel-ratio: 0) {
136
+ .embedpress-modal input[type="date"].form-control,
137
+ .embedpress-modal input[type="time"].form-control,
138
+ .embedpress-modal input[type="datetime-local"].form-control,
139
+ .embedpress-modal input[type="month"].form-control {
140
+ line-height: 34px;
141
+ }
142
+
143
+ .embedpress-modal input[type="date"].input-sm, .embedpress-modal .input-group-sm > input[type="date"].form-control, .embedpress-modal .input-group-sm > input[type="date"].input-group-addon, .embedpress-modal .input-group-sm > .input-group-btn > input[type="date"].btn,
144
+ .input-group-sm .embedpress-modal input[type="date"],
145
+ .embedpress-modal input[type="time"].input-sm, .embedpress-modal .input-group-sm > input[type="time"].form-control, .embedpress-modal .input-group-sm > input[type="time"].input-group-addon, .embedpress-modal .input-group-sm > .input-group-btn > input[type="time"].btn,
146
+ .input-group-sm
147
+ .embedpress-modal input[type="time"],
148
+ .embedpress-modal input[type="datetime-local"].input-sm, .embedpress-modal .input-group-sm > input[type="datetime-local"].form-control, .embedpress-modal .input-group-sm > input[type="datetime-local"].input-group-addon, .embedpress-modal .input-group-sm > .input-group-btn > input[type="datetime-local"].btn,
149
+ .input-group-sm
150
+ .embedpress-modal input[type="datetime-local"],
151
+ .embedpress-modal input[type="month"].input-sm, .embedpress-modal .input-group-sm > input[type="month"].form-control, .embedpress-modal .input-group-sm > input[type="month"].input-group-addon, .embedpress-modal .input-group-sm > .input-group-btn > input[type="month"].btn,
152
+ .input-group-sm
153
+ .embedpress-modal input[type="month"] {
154
+ line-height: 30px;
155
+ }
156
+
157
+ .embedpress-modal input[type="date"].input-lg, .embedpress-modal .input-group-lg > input[type="date"].form-control, .embedpress-modal .input-group-lg > input[type="date"].input-group-addon, .embedpress-modal .input-group-lg > .input-group-btn > input[type="date"].btn,
158
+ .input-group-lg .embedpress-modal input[type="date"],
159
+ .embedpress-modal input[type="time"].input-lg, .embedpress-modal .input-group-lg > input[type="time"].form-control, .embedpress-modal .input-group-lg > input[type="time"].input-group-addon, .embedpress-modal .input-group-lg > .input-group-btn > input[type="time"].btn,
160
+ .input-group-lg
161
+ .embedpress-modal input[type="time"],
162
+ .embedpress-modal input[type="datetime-local"].input-lg, .embedpress-modal .input-group-lg > input[type="datetime-local"].form-control, .embedpress-modal .input-group-lg > input[type="datetime-local"].input-group-addon, .embedpress-modal .input-group-lg > .input-group-btn > input[type="datetime-local"].btn,
163
+ .input-group-lg
164
+ .embedpress-modal input[type="datetime-local"],
165
+ .embedpress-modal input[type="month"].input-lg, .embedpress-modal .input-group-lg > input[type="month"].form-control, .embedpress-modal .input-group-lg > input[type="month"].input-group-addon, .embedpress-modal .input-group-lg > .input-group-btn > input[type="month"].btn,
166
+ .input-group-lg
167
+ .embedpress-modal input[type="month"] {
168
+ line-height: 46px;
169
+ }
170
+ }
171
 
172
  .embedpress-modal .form-group {
173
+ margin-bottom: 15px;
174
+ }
175
 
176
  .embedpress-modal .radio,
177
  .embedpress-modal .checkbox {
178
+ position: relative;
179
+ display: block;
180
+ margin-top: 10px;
181
+ margin-bottom: 10px;
182
+ }
183
+
184
+ .embedpress-modal .radio label,
185
+ .embedpress-modal .checkbox label {
186
  min-height: 20px;
187
  padding-left: 20px;
188
  margin-bottom: 0;
189
  font-weight: normal;
190
+ cursor: pointer;
191
+ }
192
 
193
  .embedpress-modal .radio input[type="radio"],
194
  .embedpress-modal .radio-inline input[type="radio"],
195
  .embedpress-modal .checkbox input[type="checkbox"],
196
  .embedpress-modal .checkbox-inline input[type="checkbox"] {
197
+ position: absolute;
198
+ margin-left: -20px;
199
+ margin-top: 4px \9;
200
+ }
201
 
202
  .embedpress-modal .radio + .radio,
203
  .embedpress-modal .checkbox + .checkbox {
204
+ margin-top: -5px;
205
+ }
206
 
207
  .embedpress-modal .radio-inline,
208
  .embedpress-modal .checkbox-inline {
209
+ position: relative;
210
+ display: inline-block;
211
+ padding-left: 20px;
212
+ margin-bottom: 0;
213
+ vertical-align: middle;
214
+ font-weight: normal;
215
+ cursor: pointer;
216
+ }
217
 
218
  .embedpress-modal .radio-inline + .radio-inline,
219
  .embedpress-modal .checkbox-inline + .checkbox-inline {
220
+ margin-top: 0;
221
+ margin-left: 10px;
222
+ }
223
 
224
  .embedpress-modal input[type="radio"][disabled], .embedpress-modal input[type="radio"].disabled,
225
  fieldset[disabled] .embedpress-modal input[type="radio"],
227
  .embedpress-modal input[type="checkbox"].disabled,
228
  fieldset[disabled]
229
  .embedpress-modal input[type="checkbox"] {
230
+ cursor: not-allowed;
231
+ }
232
 
233
  .embedpress-modal .radio-inline.disabled,
234
  fieldset[disabled] .embedpress-modal .radio-inline,
235
  .embedpress-modal .checkbox-inline.disabled,
236
  fieldset[disabled]
237
  .embedpress-modal .checkbox-inline {
238
+ cursor: not-allowed;
239
+ }
240
 
241
  .embedpress-modal .radio.disabled label,
242
  fieldset[disabled] .embedpress-modal .radio label,
243
  .embedpress-modal .checkbox.disabled label,
244
  fieldset[disabled]
245
  .embedpress-modal .checkbox label {
246
+ cursor: not-allowed;
247
+ }
248
 
249
  .embedpress-modal .form-control-static {
250
+ padding-top: 7px;
251
+ padding-bottom: 7px;
252
+ margin-bottom: 0;
253
+ min-height: 34px;
254
+ }
255
+
256
+ .embedpress-modal .form-control-static.input-lg, .embedpress-modal .input-group-lg > .form-control-static.form-control, .embedpress-modal .input-group-lg > .form-control-static.input-group-addon, .embedpress-modal .input-group-lg > .input-group-btn > .form-control-static.btn, .embedpress-modal .form-control-static.input-sm, .embedpress-modal .input-group-sm > .form-control-static.form-control, .embedpress-modal .input-group-sm > .form-control-static.input-group-addon, .embedpress-modal .input-group-sm > .input-group-btn > .form-control-static.btn {
257
  padding-left: 0;
258
+ padding-right: 0;
259
+ }
260
 
261
  .embedpress-modal .input-sm, .embedpress-modal .input-group-sm > .form-control, .embedpress-modal .input-group-sm > .input-group-addon, .embedpress-modal .input-group-sm > .input-group-btn > .btn {
262
+ height: 30px;
263
+ padding: 5px 10px;
264
+ font-size: 12px;
265
+ line-height: 1.5;
266
+ border-radius: 3px;
267
+ }
268
 
269
  .embedpress-modal select.input-sm, .embedpress-modal .input-group-sm > select.form-control, .embedpress-modal .input-group-sm > select.input-group-addon, .embedpress-modal .input-group-sm > .input-group-btn > select.btn {
270
+ height: 30px;
271
+ line-height: 30px;
272
+ }
273
 
274
  .embedpress-modal textarea.input-sm, .embedpress-modal .input-group-sm > textarea.form-control, .embedpress-modal .input-group-sm > textarea.input-group-addon, .embedpress-modal .input-group-sm > .input-group-btn > textarea.btn,
275
  .embedpress-modal select[multiple].input-sm, .embedpress-modal .input-group-sm > select[multiple].form-control, .embedpress-modal .input-group-sm > select[multiple].input-group-addon, .embedpress-modal .input-group-sm > .input-group-btn > select[multiple].btn {
276
+ height: auto;
277
+ }
278
 
279
  .embedpress-modal .form-group-sm .form-control {
280
+ height: 30px;
281
+ padding: 5px 10px;
282
+ font-size: 12px;
283
+ line-height: 1.5;
284
+ border-radius: 3px;
285
+ }
286
 
287
  .embedpress-modal .form-group-sm select.form-control {
288
+ height: 30px;
289
+ line-height: 30px;
290
+ }
291
 
292
  .embedpress-modal .form-group-sm textarea.form-control,
293
  .embedpress-modal .form-group-sm select[multiple].form-control {
294
+ height: auto;
295
+ }
296
 
297
  .embedpress-modal .form-group-sm .form-control-static {
298
+ height: 30px;
299
+ min-height: 32px;
300
+ padding: 6px 10px;
301
+ font-size: 12px;
302
+ line-height: 1.5;
303
+ }
304
 
305
  .embedpress-modal .input-lg, .embedpress-modal .input-group-lg > .form-control, .embedpress-modal .input-group-lg > .input-group-addon, .embedpress-modal .input-group-lg > .input-group-btn > .btn {
306
+ height: 46px;
307
+ padding: 10px 16px;
308
+ font-size: 18px;
309
+ line-height: 1.33333;
310
+ border-radius: 6px;
311
+ }
312
 
313
  .embedpress-modal select.input-lg, .embedpress-modal .input-group-lg > select.form-control, .embedpress-modal .input-group-lg > select.input-group-addon, .embedpress-modal .input-group-lg > .input-group-btn > select.btn {
314
+ height: 46px;
315
+ line-height: 46px;
316
+ }
317
 
318
  .embedpress-modal textarea.input-lg, .embedpress-modal .input-group-lg > textarea.form-control, .embedpress-modal .input-group-lg > textarea.input-group-addon, .embedpress-modal .input-group-lg > .input-group-btn > textarea.btn,
319
  .embedpress-modal select[multiple].input-lg, .embedpress-modal .input-group-lg > select[multiple].form-control, .embedpress-modal .input-group-lg > select[multiple].input-group-addon, .embedpress-modal .input-group-lg > .input-group-btn > select[multiple].btn {
320
+ height: auto;
321
+ }
322
 
323
  .embedpress-modal .form-group-lg .form-control {
324
+ height: 46px;
325
+ padding: 10px 16px;
326
+ font-size: 18px;
327
+ line-height: 1.33333;
328
+ border-radius: 6px;
329
+ }
330
 
331
  .embedpress-modal .form-group-lg select.form-control {
332
+ height: 46px;
333
+ line-height: 46px;
334
+ }
335
 
336
  .embedpress-modal .form-group-lg textarea.form-control,
337
  .embedpress-modal .form-group-lg select[multiple].form-control {
338
+ height: auto;
339
+ }
340
 
341
  .embedpress-modal .form-group-lg .form-control-static {
342
+ height: 46px;
343
+ min-height: 38px;
344
+ padding: 11px 16px;
345
+ font-size: 18px;
346
+ line-height: 1.33333;
347
+ }
348
 
349
  .embedpress-modal .has-feedback {
350
+ position: relative;
351
+ }
352
+
353
+ .embedpress-modal .has-feedback .form-control {
354
+ padding-right: 42.5px;
355
+ }
356
 
357
  .embedpress-modal .form-control-feedback {
358
+ position: absolute;
359
+ top: 0;
360
+ right: 0;
361
+ z-index: 2;
362
+ display: block;
363
+ width: 34px;
364
+ height: 34px;
365
+ line-height: 34px;
366
+ text-align: center;
367
+ pointer-events: none;
368
+ }
369
 
370
  .embedpress-modal .input-lg + .form-control-feedback, .embedpress-modal .input-group-lg > .form-control + .form-control-feedback, .embedpress-modal .input-group-lg > .input-group-addon + .form-control-feedback, .embedpress-modal .input-group-lg > .input-group-btn > .btn + .form-control-feedback,
371
  .embedpress-modal .input-group-lg + .form-control-feedback,
372
  .embedpress-modal .form-group-lg .form-control + .form-control-feedback {
373
+ width: 46px;
374
+ height: 46px;
375
+ line-height: 46px;
376
+ }
377
 
378
  .embedpress-modal .input-sm + .form-control-feedback, .embedpress-modal .input-group-sm > .form-control + .form-control-feedback, .embedpress-modal .input-group-sm > .input-group-addon + .form-control-feedback, .embedpress-modal .input-group-sm > .input-group-btn > .btn + .form-control-feedback,
379
  .embedpress-modal .input-group-sm + .form-control-feedback,
380
  .embedpress-modal .form-group-sm .form-control + .form-control-feedback {
381
+ width: 30px;
382
+ height: 30px;
383
+ line-height: 30px;
384
+ }
385
 
386
  .embedpress-modal .has-success .help-block,
387
  .embedpress-modal .has-success .control-label,
393
  .embedpress-modal .has-success.checkbox label,
394
  .embedpress-modal .has-success.radio-inline label,
395
  .embedpress-modal .has-success.checkbox-inline label {
396
+ color: #3c763d;
397
+ }
398
 
399
  .embedpress-modal .has-success .form-control {
400
+ border-color: #3c763d;
401
+ box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.075);
402
+ }
403
+
404
+ .embedpress-modal .has-success .form-control:focus {
405
  border-color: #2b542c;
406
+ box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.075), 0 0 6px #67b168;
407
+ }
408
 
409
  .embedpress-modal .has-success .input-group-addon {
410
+ color: #3c763d;
411
+ border-color: #3c763d;
412
+ background-color: #dff0d8;
413
+ }
414
 
415
  .embedpress-modal .has-success .form-control-feedback {
416
+ color: #3c763d;
417
+ }
418
 
419
  .embedpress-modal .has-warning .help-block,
420
  .embedpress-modal .has-warning .control-label,
426
  .embedpress-modal .has-warning.checkbox label,
427
  .embedpress-modal .has-warning.radio-inline label,
428
  .embedpress-modal .has-warning.checkbox-inline label {
429
+ color: #8a6d3b;
430
+ }
431
 
432
  .embedpress-modal .has-warning .form-control {
433
+ border-color: #8a6d3b;
434
+ box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.075);
435
+ }
436
+
437
+ .embedpress-modal .has-warning .form-control:focus {
438
  border-color: #66512c;
439
+ box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.075), 0 0 6px #c0a16b;
440
+ }
441
 
442
  .embedpress-modal .has-warning .input-group-addon {
443
+ color: #8a6d3b;
444
+ border-color: #8a6d3b;
445
+ background-color: #fcf8e3;
446
+ }
447
 
448
  .embedpress-modal .has-warning .form-control-feedback {
449
+ color: #8a6d3b;
450
+ }
451
 
452
  .embedpress-modal .has-error .help-block,
453
  .embedpress-modal .has-error .control-label,
459
  .embedpress-modal .has-error.checkbox label,
460
  .embedpress-modal .has-error.radio-inline label,
461
  .embedpress-modal .has-error.checkbox-inline label {
462
+ color: #a94442;
463
+ }
464
 
465
  .embedpress-modal .has-error .form-control {
466
+ border-color: #a94442;
467
+ box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.075);
468
+ }
469
+
470
+ .embedpress-modal .has-error .form-control:focus {
471
  border-color: #843534;
472
+ box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.075), 0 0 6px #ce8483;
473
+ }
474
 
475
  .embedpress-modal .has-error .input-group-addon {
476
+ color: #a94442;
477
+ border-color: #a94442;
478
+ background-color: #f2dede;
479
+ }
480
 
481
  .embedpress-modal .has-error .form-control-feedback {
482
+ color: #a94442;
483
+ }
484
 
485
  .embedpress-modal .has-feedback label ~ .form-control-feedback {
486
+ top: 25px;
487
+ }
488
 
489
  .embedpress-modal .has-feedback label.sr-only ~ .form-control-feedback {
490
+ top: 0;
491
+ }
492
 
493
  .embedpress-modal .help-block {
494
+ display: block;
495
+ margin-top: 5px;
496
+ margin-bottom: 10px;
497
+ color: #737373;
498
+ }
499
 
500
  @media (min-width: 768px) {
501
+ .embedpress-modal .form-inline .form-group {
502
+ display: inline-block;
503
+ margin-bottom: 0;
504
+ vertical-align: middle;
505
+ }
506
+
507
+ .embedpress-modal .form-inline .form-control {
508
+ display: inline-block;
509
+ width: auto;
510
+ vertical-align: middle;
511
+ }
512
+
513
+ .embedpress-modal .form-inline .form-control-static {
514
+ display: inline-block;
515
+ }
516
+
517
+ .embedpress-modal .form-inline .input-group {
518
+ display: inline-table;
519
+ vertical-align: middle;
520
+ }
521
+
522
  .embedpress-modal .form-inline .input-group .input-group-addon,
523
  .embedpress-modal .form-inline .input-group .input-group-btn,
524
  .embedpress-modal .form-inline .input-group .form-control {
525
+ width: auto;
526
+ }
527
+
528
+ .embedpress-modal .form-inline .input-group > .form-control {
529
+ width: 100%;
530
+ }
531
+
532
+ .embedpress-modal .form-inline .control-label {
533
+ margin-bottom: 0;
534
+ vertical-align: middle;
535
+ }
536
+
537
+ .embedpress-modal .form-inline .radio,
538
+ .embedpress-modal .form-inline .checkbox {
539
+ display: inline-block;
540
+ margin-top: 0;
541
+ margin-bottom: 0;
542
+ vertical-align: middle;
543
+ }
544
+
545
  .embedpress-modal .form-inline .radio label,
546
  .embedpress-modal .form-inline .checkbox label {
547
+ padding-left: 0;
548
+ }
549
+
550
+ .embedpress-modal .form-inline .radio input[type="radio"],
551
+ .embedpress-modal .form-inline .checkbox input[type="checkbox"] {
552
+ position: relative;
553
+ margin-left: 0;
554
+ }
555
+
556
+ .embedpress-modal .form-inline .has-feedback .form-control-feedback {
557
+ top: 0;
558
+ }
559
+ }
560
 
561
  .embedpress-modal .form-horizontal .radio,
562
  .embedpress-modal .form-horizontal .checkbox,
563
  .embedpress-modal .form-horizontal .radio-inline,
564
  .embedpress-modal .form-horizontal .checkbox-inline {
565
+ margin-top: 0;
566
+ margin-bottom: 0;
567
+ padding-top: 7px;
568
+ }
569
 
570
  .embedpress-modal .form-horizontal .radio,
571
  .embedpress-modal .form-horizontal .checkbox {
572
+ min-height: 27px;
573
+ }
574
 
575
  .embedpress-modal .form-horizontal .form-group {
576
+ margin-left: -15px;
577
+ margin-right: -15px;
578
+ }
579
+
580
+ .embedpress-modal .form-horizontal .form-group:before, .embedpress-modal .form-horizontal .form-group:after {
581
  content: " ";
582
+ display: table;
583
+ }
584
+
585
+ .embedpress-modal .form-horizontal .form-group:after {
586
+ clear: both;
587
+ }
588
 
589
  @media (min-width: 768px) {
590
+ .embedpress-modal .form-horizontal .control-label {
591
+ text-align: right;
592
+ margin-bottom: 0;
593
+ padding-top: 7px;
594
+ }
595
+ }
596
 
597
  .embedpress-modal .form-horizontal .has-feedback .form-control-feedback {
598
+ right: 15px;
599
+ }
600
 
601
  @media (min-width: 768px) {
602
+ .embedpress-modal .form-horizontal .form-group-lg .control-label {
603
+ padding-top: 11px;
604
+ font-size: 18px;
605
+ }
606
+ }
607
 
608
  @media (min-width: 768px) {
609
+ .embedpress-modal .form-horizontal .form-group-sm .control-label {
610
+ padding-top: 6px;
611
+ font-size: 12px;
612
+ }
613
+ }
614
 
615
  .embedpress-modal .btn {
616
+ display: inline-block;
617
+ margin-bottom: 0;
618
+ font-weight: normal;
619
+ text-align: center;
620
+ vertical-align: middle;
621
+ -ms-touch-action: manipulation;
622
+ touch-action: manipulation;
623
+ cursor: pointer;
624
+ background-image: none;
625
+ border: 1px solid transparent;
626
+ white-space: nowrap;
627
+ padding: 6px 12px;
628
+ font-size: 14px;
629
+ line-height: 1.42857;
630
+ border-radius: 4px;
631
+ -webkit-user-select: none;
632
+ -moz-user-select: none;
633
+ -ms-user-select: none;
634
+ user-select: none;
635
+ }
636
+
637
+ .embedpress-modal .btn:focus, .embedpress-modal .btn.focus, .embedpress-modal .btn:active:focus, .embedpress-modal .btn:active.focus, .embedpress-modal .btn.active:focus, .embedpress-modal .btn.active.focus {
638
  outline: 5px auto -webkit-focus-ring-color;
639
+ outline-offset: -2px;
640
+ }
641
+
642
+ .embedpress-modal .btn:hover, .embedpress-modal .btn:focus, .embedpress-modal .btn.focus {
643
  color: #333;
644
+ text-decoration: none;
645
+ }
646
+
647
+ .embedpress-modal .btn:active, .embedpress-modal .btn.active {
648
  outline: 0;
649
  background-image: none;
650
+ box-shadow: inset 0 3px 5px rgba(0, 0, 0, 0.125);
651
+ }
652
+
653
+ .embedpress-modal .btn.disabled, .embedpress-modal .btn[disabled],
654
+ fieldset[disabled] .embedpress-modal .btn {
655
  cursor: not-allowed;
656
  opacity: 0.65;
657
  filter: alpha(opacity=65);
658
+ box-shadow: none;
659
+ }
660
 
661
  .embedpress-modal a.btn.disabled,
662
  fieldset[disabled] .embedpress-modal a.btn {
663
+ pointer-events: none;
664
+ }
665
 
666
  .embedpress-modal .btn-default {
667
+ color: #333;
668
+ background-color: #fff;
669
+ border-color: #ccc;
670
+ }
671
+
672
+ .embedpress-modal .btn-default:focus, .embedpress-modal .btn-default.focus {
673
  color: #333;
674
  background-color: #e6e6e6;
675
+ border-color: #8c8c8c;
676
+ }
677
+
678
+ .embedpress-modal .btn-default:hover {
679
  color: #333;
680
  background-color: #e6e6e6;
681
+ border-color: #adadad;
682
+ }
683
+
684
+ .embedpress-modal .btn-default:active, .embedpress-modal .btn-default.active,
685
+ .open > .embedpress-modal .btn-default.dropdown-toggle {
686
  color: #333;
687
  background-color: #e6e6e6;
688
+ border-color: #adadad;
689
+ }
690
+
691
+ .embedpress-modal .btn-default:active:hover, .embedpress-modal .btn-default:active:focus, .embedpress-modal .btn-default:active.focus, .embedpress-modal .btn-default.active:hover, .embedpress-modal .btn-default.active:focus, .embedpress-modal .btn-default.active.focus,
692
+ .open > .embedpress-modal .btn-default.dropdown-toggle:hover,
693
+ .open > .embedpress-modal .btn-default.dropdown-toggle:focus,
694
+ .open > .embedpress-modal .btn-default.dropdown-toggle.focus {
695
+ color: #333;
696
+ background-color: #d4d4d4;
697
+ border-color: #8c8c8c;
698
+ }
699
+
700
+ .embedpress-modal .btn-default:active, .embedpress-modal .btn-default.active,
701
+ .open > .embedpress-modal .btn-default.dropdown-toggle {
702
+ background-image: none;
703
+ }
704
+
705
+ .embedpress-modal .btn-default.disabled:hover, .embedpress-modal .btn-default.disabled:focus, .embedpress-modal .btn-default.disabled.focus, .embedpress-modal .btn-default[disabled]:hover, .embedpress-modal .btn-default[disabled]:focus, .embedpress-modal .btn-default[disabled].focus,
706
+ fieldset[disabled] .embedpress-modal .btn-default:hover,
707
+ fieldset[disabled] .embedpress-modal .btn-default:focus,
708
+ fieldset[disabled] .embedpress-modal .btn-default.focus {
709
  background-color: #fff;
710
+ border-color: #ccc;
711
+ }
712
+
713
+ .embedpress-modal .btn-default .badge {
714
  color: #fff;
715
+ background-color: #333;
716
+ }
717
 
718
  .embedpress-modal .btn-primary {
719
+ color: #fff;
720
+ background-color: #337ab7;
721
+ border-color: #2e6da4;
722
+ }
723
+
724
+ .embedpress-modal .btn-primary:focus, .embedpress-modal .btn-primary.focus {
725
  color: #fff;
726
  background-color: #286090;
727
+ border-color: #122b40;
728
+ }
729
+
730
+ .embedpress-modal .btn-primary:hover {
731
  color: #fff;
732
  background-color: #286090;
733
+ border-color: #204d74;
734
+ }
735
+
736
+ .embedpress-modal .btn-primary:active, .embedpress-modal .btn-primary.active,
737
+ .open > .embedpress-modal .btn-primary.dropdown-toggle {
738
  color: #fff;
739
  background-color: #286090;
740
+ border-color: #204d74;
741
+ }
742
+
743
+ .embedpress-modal .btn-primary:active:hover, .embedpress-modal .btn-primary:active:focus, .embedpress-modal .btn-primary:active.focus, .embedpress-modal .btn-primary.active:hover, .embedpress-modal .btn-primary.active:focus, .embedpress-modal .btn-primary.active.focus,
744
+ .open > .embedpress-modal .btn-primary.dropdown-toggle:hover,
745
+ .open > .embedpress-modal .btn-primary.dropdown-toggle:focus,
746
+ .open > .embedpress-modal .btn-primary.dropdown-toggle.focus {
747
+ color: #fff;
748
+ background-color: #204d74;
749
+ border-color: #122b40;
750
+ }
751
+
752
+ .embedpress-modal .btn-primary:active, .embedpress-modal .btn-primary.active,
753
+ .open > .embedpress-modal .btn-primary.dropdown-toggle {
754
+ background-image: none;
755
+ }
756
+
757
+ .embedpress-modal .btn-primary.disabled:hover, .embedpress-modal .btn-primary.disabled:focus, .embedpress-modal .btn-primary.disabled.focus, .embedpress-modal .btn-primary[disabled]:hover, .embedpress-modal .btn-primary[disabled]:focus, .embedpress-modal .btn-primary[disabled].focus,
758
+ fieldset[disabled] .embedpress-modal .btn-primary:hover,
759
+ fieldset[disabled] .embedpress-modal .btn-primary:focus,
760
+ fieldset[disabled] .embedpress-modal .btn-primary.focus {
761
  background-color: #337ab7;
762
+ border-color: #2e6da4;
763
+ }
764
+
765
+ .embedpress-modal .btn-primary .badge {
766
  color: #337ab7;
767
+ background-color: #fff;
768
+ }
769
 
770
  .embedpress-modal .btn-success {
771
+ color: #fff;
772
+ background-color: #5cb85c;
773
+ border-color: #4cae4c;
774
+ }
775
+
776
+ .embedpress-modal .btn-success:focus, .embedpress-modal .btn-success.focus {
777
  color: #fff;
778
  background-color: #449d44;
779
+ border-color: #255625;
780
+ }
781
+
782
+ .embedpress-modal .btn-success:hover {
783
  color: #fff;
784
  background-color: #449d44;
785
+ border-color: #398439;
786
+ }
787
+
788
+ .embedpress-modal .btn-success:active, .embedpress-modal .btn-success.active,
789
+ .open > .embedpress-modal .btn-success.dropdown-toggle {
790
  color: #fff;
791
  background-color: #449d44;
792
+ border-color: #398439;
793
+ }
794
+
795
+ .embedpress-modal .btn-success:active:hover, .embedpress-modal .btn-success:active:focus, .embedpress-modal .btn-success:active.focus, .embedpress-modal .btn-success.active:hover, .embedpress-modal .btn-success.active:focus, .embedpress-modal .btn-success.active.focus,
796
+ .open > .embedpress-modal .btn-success.dropdown-toggle:hover,
797
+ .open > .embedpress-modal .btn-success.dropdown-toggle:focus,
798
+ .open > .embedpress-modal .btn-success.dropdown-toggle.focus {
799
+ color: #fff;
800
+ background-color: #398439;
801
+ border-color: #255625;
802
+ }
803
+
804
+ .embedpress-modal .btn-success:active, .embedpress-modal .btn-success.active,
805
+ .open > .embedpress-modal .btn-success.dropdown-toggle {
806
+ background-image: none;
807
+ }
808
+
809
+ .embedpress-modal .btn-success.disabled:hover, .embedpress-modal .btn-success.disabled:focus, .embedpress-modal .btn-success.disabled.focus, .embedpress-modal .btn-success[disabled]:hover, .embedpress-modal .btn-success[disabled]:focus, .embedpress-modal .btn-success[disabled].focus,
810
+ fieldset[disabled] .embedpress-modal .btn-success:hover,
811
+ fieldset[disabled] .embedpress-modal .btn-success:focus,
812
+ fieldset[disabled] .embedpress-modal .btn-success.focus {
813
  background-color: #5cb85c;
814
+ border-color: #4cae4c;
815
+ }
816
+
817
+ .embedpress-modal .btn-success .badge {
818
  color: #5cb85c;
819
+ background-color: #fff;
820
+ }
821
 
822
  .embedpress-modal .btn-info {
823
+ color: #fff;
824
+ background-color: #5bc0de;
825
+ border-color: #46b8da;
826
+ }
827
+
828
+ .embedpress-modal .btn-info:focus, .embedpress-modal .btn-info.focus {
829
  color: #fff;
830
  background-color: #31b0d5;
831
+ border-color: #1b6d85;
832
+ }
833
+
834
+ .embedpress-modal .btn-info:hover {
835
  color: #fff;
836
  background-color: #31b0d5;
837
+ border-color: #269abc;
838
+ }
839
+
840
+ .embedpress-modal .btn-info:active, .embedpress-modal .btn-info.active,
841
+ .open > .embedpress-modal .btn-info.dropdown-toggle {
842
  color: #fff;
843
  background-color: #31b0d5;
844
+ border-color: #269abc;
845
+ }
846
+
847
+ .embedpress-modal .btn-info:active:hover, .embedpress-modal .btn-info:active:focus, .embedpress-modal .btn-info:active.focus, .embedpress-modal .btn-info.active:hover, .embedpress-modal .btn-info.active:focus, .embedpress-modal .btn-info.active.focus,
848
+ .open > .embedpress-modal .btn-info.dropdown-toggle:hover,
849
+ .open > .embedpress-modal .btn-info.dropdown-toggle:focus,
850
+ .open > .embedpress-modal .btn-info.dropdown-toggle.focus {
851
+ color: #fff;
852
+ background-color: #269abc;
853
+ border-color: #1b6d85;
854
+ }
855
+
856
+ .embedpress-modal .btn-info:active, .embedpress-modal .btn-info.active,
857
+ .open > .embedpress-modal .btn-info.dropdown-toggle {
858
+ background-image: none;
859
+ }
860
+
861
+ .embedpress-modal .btn-info.disabled:hover, .embedpress-modal .btn-info.disabled:focus, .embedpress-modal .btn-info.disabled.focus, .embedpress-modal .btn-info[disabled]:hover, .embedpress-modal .btn-info[disabled]:focus, .embedpress-modal .btn-info[disabled].focus,
862
+ fieldset[disabled] .embedpress-modal .btn-info:hover,
863
+ fieldset[disabled] .embedpress-modal .btn-info:focus,
864
+ fieldset[disabled] .embedpress-modal .btn-info.focus {
865
  background-color: #5bc0de;
866
+ border-color: #46b8da;
867
+ }
868
+
869
+ .embedpress-modal .btn-info .badge {
870
  color: #5bc0de;
871
+ background-color: #fff;
872
+ }
873
 
874
  .embedpress-modal .btn-warning {
875
+ color: #fff;
876
+ background-color: #f0ad4e;
877
+ border-color: #eea236;
878
+ }
879
+
880
+ .embedpress-modal .btn-warning:focus, .embedpress-modal .btn-warning.focus {
881
  color: #fff;
882
  background-color: #ec971f;
883
+ border-color: #985f0d;
884
+ }
885
+
886
+ .embedpress-modal .btn-warning:hover {
887
  color: #fff;
888
  background-color: #ec971f;
889
+ border-color: #d58512;
890
+ }
891
+
892
+ .embedpress-modal .btn-warning:active, .embedpress-modal .btn-warning.active,
893
+ .open > .embedpress-modal .btn-warning.dropdown-toggle {
894
  color: #fff;
895
  background-color: #ec971f;
896
+ border-color: #d58512;
897
+ }
898
+
899
+ .embedpress-modal .btn-warning:active:hover, .embedpress-modal .btn-warning:active:focus, .embedpress-modal .btn-warning:active.focus, .embedpress-modal .btn-warning.active:hover, .embedpress-modal .btn-warning.active:focus, .embedpress-modal .btn-warning.active.focus,
900
+ .open > .embedpress-modal .btn-warning.dropdown-toggle:hover,
901
+ .open > .embedpress-modal .btn-warning.dropdown-toggle:focus,
902
+ .open > .embedpress-modal .btn-warning.dropdown-toggle.focus {
903
+ color: #fff;
904
+ background-color: #d58512;
905
+ border-color: #985f0d;
906
+ }
907
+
908
+ .embedpress-modal .btn-warning:active, .embedpress-modal .btn-warning.active,
909
+ .open > .embedpress-modal .btn-warning.dropdown-toggle {
910
+ background-image: none;
911
+ }
912
+
913
+ .embedpress-modal .btn-warning.disabled:hover, .embedpress-modal .btn-warning.disabled:focus, .embedpress-modal .btn-warning.disabled.focus, .embedpress-modal .btn-warning[disabled]:hover, .embedpress-modal .btn-warning[disabled]:focus, .embedpress-modal .btn-warning[disabled].focus,
914
+ fieldset[disabled] .embedpress-modal .btn-warning:hover,
915
+ fieldset[disabled] .embedpress-modal .btn-warning:focus,
916
+ fieldset[disabled] .embedpress-modal .btn-warning.focus {
917
  background-color: #f0ad4e;
918
+ border-color: #eea236;
919
+ }
920
+
921
+ .embedpress-modal .btn-warning .badge {
922
  color: #f0ad4e;
923
+ background-color: #fff;
924
+ }
925
 
926
  .embedpress-modal .btn-danger {
927
+ color: #fff;
928
+ background-color: #d9534f;
929
+ border-color: #d43f3a;
930
+ }
931
+
932
+ .embedpress-modal .btn-danger:focus, .embedpress-modal .btn-danger.focus {
933
  color: #fff;
934
  background-color: #c9302c;
935
+ border-color: #761c19;
936
+ }
937
+
938
+ .embedpress-modal .btn-danger:hover {
939
  color: #fff;
940
  background-color: #c9302c;
941
+ border-color: #ac2925;
942
+ }
943
+
944
+ .embedpress-modal .btn-danger:active, .embedpress-modal .btn-danger.active,
945
+ .open > .embedpress-modal .btn-danger.dropdown-toggle {
946
  color: #fff;
947
  background-color: #c9302c;
948
+ border-color: #ac2925;
949
+ }
950
+
951
+ .embedpress-modal .btn-danger:active:hover, .embedpress-modal .btn-danger:active:focus, .embedpress-modal .btn-danger:active.focus, .embedpress-modal .btn-danger.active:hover, .embedpress-modal .btn-danger.active:focus, .embedpress-modal .btn-danger.active.focus,
952
+ .open > .embedpress-modal .btn-danger.dropdown-toggle:hover,
953
+ .open > .embedpress-modal .btn-danger.dropdown-toggle:focus,
954
+ .open > .embedpress-modal .btn-danger.dropdown-toggle.focus {
955
+ color: #fff;
956
+ background-color: #ac2925;
957
+ border-color: #761c19;
958
+ }
959
+
960
+ .embedpress-modal .btn-danger:active, .embedpress-modal .btn-danger.active,
961
+ .open > .embedpress-modal .btn-danger.dropdown-toggle {
962
+ background-image: none;
963
+ }
964
+
965
+ .embedpress-modal .btn-danger.disabled:hover, .embedpress-modal .btn-danger.disabled:focus, .embedpress-modal .btn-danger.disabled.focus, .embedpress-modal .btn-danger[disabled]:hover, .embedpress-modal .btn-danger[disabled]:focus, .embedpress-modal .btn-danger[disabled].focus,
966
+ fieldset[disabled] .embedpress-modal .btn-danger:hover,
967
+ fieldset[disabled] .embedpress-modal .btn-danger:focus,
968
+ fieldset[disabled] .embedpress-modal .btn-danger.focus {
969
  background-color: #d9534f;
970
+ border-color: #d43f3a;
971
+ }
972
+
973
+ .embedpress-modal .btn-danger .badge {
974
  color: #d9534f;
975
+ background-color: #fff;
976
+ }
977
 
978
  .embedpress-modal .btn-link {
979
+ color: #337ab7;
980
+ font-weight: normal;
981
+ border-radius: 0;
982
+ }
983
+
984
+ .embedpress-modal .btn-link, .embedpress-modal .btn-link:active, .embedpress-modal .btn-link.active, .embedpress-modal .btn-link[disabled],
985
+ fieldset[disabled] .embedpress-modal .btn-link {
986
  background-color: transparent;
987
+ box-shadow: none;
988
+ }
989
+
990
+ .embedpress-modal .btn-link, .embedpress-modal .btn-link:hover, .embedpress-modal .btn-link:focus, .embedpress-modal .btn-link:active {
991
+ border-color: transparent;
992
+ }
993
+
994
+ .embedpress-modal .btn-link:hover, .embedpress-modal .btn-link:focus {
995
  color: #23527c;
996
  text-decoration: underline;
997
+ background-color: transparent;
998
+ }
999
+
1000
+ .embedpress-modal .btn-link[disabled]:hover, .embedpress-modal .btn-link[disabled]:focus,
1001
+ fieldset[disabled] .embedpress-modal .btn-link:hover,
1002
+ fieldset[disabled] .embedpress-modal .btn-link:focus {
1003
  color: #777777;
1004
+ text-decoration: none;
1005
+ }
1006
 
1007
  .embedpress-modal .btn-lg, .embedpress-modal .btn-group-lg > .btn {
1008
+ padding: 10px 16px;
1009
+ font-size: 18px;
1010
+ line-height: 1.33333;
1011
+ border-radius: 6px;
1012
+ }
1013
 
1014
  .embedpress-modal .btn-sm, .embedpress-modal .btn-group-sm > .btn {
1015
+ padding: 5px 10px;
1016
+ font-size: 12px;
1017
+ line-height: 1.5;
1018
+ border-radius: 3px;
1019
+ }
1020
 
1021
  .embedpress-modal .btn-xs, .embedpress-modal .btn-group-xs > .btn {
1022
+ padding: 1px 5px;
1023
+ font-size: 12px;
1024
+ line-height: 1.5;
1025
+ border-radius: 3px;
1026
+ }
1027
 
1028
  .embedpress-modal .btn-block {
1029
+ display: block;
1030
+ width: 100%;
1031
+ }
1032
 
1033
  .embedpress-modal .btn-block + .btn-block {
1034
+ margin-top: 5px;
1035
+ }
1036
 
1037
  .embedpress-modal input[type="submit"].btn-block,
1038
  .embedpress-modal input[type="reset"].btn-block,
1039
  .embedpress-modal input[type="button"].btn-block {
1040
+ width: 100%;
1041
+ }
1042
 
1043
  .embedpress-modal .btn-group,
1044
  .embedpress-modal .btn-group-vertical {
 
 
 
 
 
1045
  position: relative;
1046
+ display: inline-block;
1047
+ vertical-align: middle;
1048
+ }
1049
+
1050
+ .embedpress-modal .btn-group > .btn,
1051
+ .embedpress-modal .btn-group-vertical > .btn {
1052
+ position: relative;
1053
+ float: left;
1054
+ }
1055
+
1056
+ .embedpress-modal .btn-group > .btn:hover, .embedpress-modal .btn-group > .btn:focus, .embedpress-modal .btn-group > .btn:active, .embedpress-modal .btn-group > .btn.active,
1057
+ .embedpress-modal .btn-group-vertical > .btn:hover,
1058
+ .embedpress-modal .btn-group-vertical > .btn:focus,
1059
+ .embedpress-modal .btn-group-vertical > .btn:active,
1060
+ .embedpress-modal .btn-group-vertical > .btn.active {
1061
+ z-index: 2;
1062
+ }
1063
 
1064
  .embedpress-modal .btn-group .btn + .btn,
1065
  .embedpress-modal .btn-group .btn + .btn-group,
1066
  .embedpress-modal .btn-group .btn-group + .btn,
1067
  .embedpress-modal .btn-group .btn-group + .btn-group {
1068
+ margin-left: -1px;
1069
+ }
1070
 
1071
  .embedpress-modal .btn-toolbar {
1072
+ margin-left: -5px;
1073
+ }
1074
+
1075
+ .embedpress-modal .btn-toolbar:before, .embedpress-modal .btn-toolbar:after {
1076
  content: " ";
1077
+ display: table;
1078
+ }
1079
+
1080
+ .embedpress-modal .btn-toolbar:after {
1081
+ clear: both;
1082
+ }
1083
+
1084
+ .embedpress-modal .btn-toolbar .btn,
1085
+ .embedpress-modal .btn-toolbar .btn-group,
1086
+ .embedpress-modal .btn-toolbar .input-group {
1087
+ float: left;
1088
+ }
1089
+
1090
+ .embedpress-modal .btn-toolbar > .btn,
1091
+ .embedpress-modal .btn-toolbar > .btn-group,
1092
+ .embedpress-modal .btn-toolbar > .input-group {
1093
+ margin-left: 5px;
1094
+ }
1095
 
1096
  .embedpress-modal .btn-group > .btn:not(:first-child):not(:last-child):not(.dropdown-toggle) {
1097
+ border-radius: 0;
1098
+ }
1099
 
1100
  .embedpress-modal .btn-group > .btn:first-child {
1101
+ margin-left: 0;
1102
+ }
1103
+
1104
+ .embedpress-modal .btn-group > .btn:first-child:not(:last-child):not(.dropdown-toggle) {
1105
  border-bottom-right-radius: 0;
1106
+ border-top-right-radius: 0;
1107
+ }
1108
 
1109
  .embedpress-modal .btn-group > .btn:last-child:not(:first-child),
1110
  .embedpress-modal .btn-group > .dropdown-toggle:not(:first-child) {
1111
+ border-bottom-left-radius: 0;
1112
+ border-top-left-radius: 0;
1113
+ }
1114
 
1115
  .embedpress-modal .btn-group > .btn-group {
1116
+ float: left;
1117
+ }
1118
 
1119
  .embedpress-modal .btn-group > .btn-group:not(:first-child):not(:last-child) > .btn {
1120
+ border-radius: 0;
1121
+ }
1122
 
1123
  .embedpress-modal .btn-group > .btn-group:first-child:not(:last-child) > .btn:last-child,
1124
  .embedpress-modal .btn-group > .btn-group:first-child:not(:last-child) > .dropdown-toggle {
1125
+ border-bottom-right-radius: 0;
1126
+ border-top-right-radius: 0;
1127
+ }
1128
 
1129
  .embedpress-modal .btn-group > .btn-group:last-child:not(:first-child) > .btn:first-child {
1130
+ border-bottom-left-radius: 0;
1131
+ border-top-left-radius: 0;
1132
+ }
1133
 
1134
  .embedpress-modal .btn-group .dropdown-toggle:active,
1135
  .embedpress-modal .btn-group.open .dropdown-toggle {
1136
+ outline: 0;
1137
+ }
1138
 
1139
  .embedpress-modal .btn-group > .btn + .dropdown-toggle {
1140
+ padding-left: 8px;
1141
+ padding-right: 8px;
1142
+ }
1143
 
1144
  .embedpress-modal .btn-group > .btn-lg + .dropdown-toggle, .embedpress-modal .btn-group-lg.btn-group > .btn + .dropdown-toggle {
1145
+ padding-left: 12px;
1146
+ padding-right: 12px;
1147
+ }
1148
 
1149
  .embedpress-modal .btn-group.open .dropdown-toggle {
1150
+ box-shadow: inset 0 3px 5px rgba(0, 0, 0, 0.125);
1151
+ }
1152
+
1153
+ .embedpress-modal .btn-group.open .dropdown-toggle.btn-link {
1154
+ box-shadow: none;
1155
+ }
1156
 
1157
  .embedpress-modal .btn .caret {
1158
+ margin-left: 0;
1159
+ }
1160
 
1161
  .embedpress-modal .btn-lg .caret, .embedpress-modal .btn-group-lg > .btn .caret {
1162
+ border-width: 5px 5px 0;
1163
+ border-bottom-width: 0;
1164
+ }
1165
 
1166
  .embedpress-modal .dropup .btn-lg .caret, .embedpress-modal .dropup .btn-group-lg > .btn .caret {
1167
+ border-width: 0 5px 5px;
1168
+ }
1169
 
1170
  .embedpress-modal .btn-group-vertical > .btn,
1171
  .embedpress-modal .btn-group-vertical > .btn-group,
1172
  .embedpress-modal .btn-group-vertical > .btn-group > .btn {
1173
+ display: block;
1174
+ float: none;
1175
+ width: 100%;
1176
+ max-width: 100%;
1177
+ }
1178
 
1179
  .embedpress-modal .btn-group-vertical > .btn-group:before, .embedpress-modal .btn-group-vertical > .btn-group:after {
1180
+ content: " ";
1181
+ display: table;
1182
+ }
1183
 
1184
  .embedpress-modal .btn-group-vertical > .btn-group:after {
1185
+ clear: both;
1186
+ }
1187
 
1188
  .embedpress-modal .btn-group-vertical > .btn-group > .btn {
1189
+ float: none;
1190
+ }
1191
 
1192
  .embedpress-modal .btn-group-vertical > .btn + .btn,
1193
  .embedpress-modal .btn-group-vertical > .btn + .btn-group,
1194
  .embedpress-modal .btn-group-vertical > .btn-group + .btn,
1195
  .embedpress-modal .btn-group-vertical > .btn-group + .btn-group {
1196
+ margin-top: -1px;
1197
+ margin-left: 0;
1198
+ }
1199
 
1200
  .embedpress-modal .btn-group-vertical > .btn:not(:first-child):not(:last-child) {
1201
+ border-radius: 0;
1202
+ }
1203
 
1204
  .embedpress-modal .btn-group-vertical > .btn:first-child:not(:last-child) {
1205
+ border-top-right-radius: 4px;
1206
+ border-top-left-radius: 4px;
1207
+ border-bottom-right-radius: 0;
1208
+ border-bottom-left-radius: 0;
1209
+ }
1210
 
1211
  .embedpress-modal .btn-group-vertical > .btn:last-child:not(:first-child) {
1212
+ border-top-right-radius: 0;
1213
+ border-top-left-radius: 0;
1214
+ border-bottom-right-radius: 4px;
1215
+ border-bottom-left-radius: 4px;
1216
+ }
1217
 
1218
  .embedpress-modal .btn-group-vertical > .btn-group:not(:first-child):not(:last-child) > .btn {
1219
+ border-radius: 0;
1220
+ }
1221
 
1222
  .embedpress-modal .btn-group-vertical > .btn-group:first-child:not(:last-child) > .btn:last-child,
1223
  .embedpress-modal .btn-group-vertical > .btn-group:first-child:not(:last-child) > .dropdown-toggle {
1224
+ border-bottom-right-radius: 0;
1225
+ border-bottom-left-radius: 0;
1226
+ }
1227
 
1228
  .embedpress-modal .btn-group-vertical > .btn-group:last-child:not(:first-child) > .btn:first-child {
1229
+ border-top-right-radius: 0;
1230
+ border-top-left-radius: 0;
1231
+ }
1232
 
1233
  .embedpress-modal .btn-group-justified {
1234
+ display: table;
1235
+ width: 100%;
1236
+ table-layout: fixed;
1237
+ border-collapse: separate;
1238
+ }
1239
+
1240
+ .embedpress-modal .btn-group-justified > .btn,
1241
+ .embedpress-modal .btn-group-justified > .btn-group {
1242
  float: none;
1243
  display: table-cell;
1244
+ width: 1%;
1245
+ }
1246
+
1247
+ .embedpress-modal .btn-group-justified > .btn-group .btn {
1248
+ width: 100%;
1249
+ }
1250
+
1251
+ .embedpress-modal .btn-group-justified > .btn-group .dropdown-menu {
1252
+ left: auto;
1253
+ }
1254
 
1255
  .embedpress-modal [data-toggle="buttons"] > .btn input[type="radio"],
1256
  .embedpress-modal [data-toggle="buttons"] > .btn input[type="checkbox"],
1257
  .embedpress-modal [data-toggle="buttons"] > .btn-group > .btn input[type="radio"],
1258
  .embedpress-modal [data-toggle="buttons"] > .btn-group > .btn input[type="checkbox"] {
1259
+ position: absolute;
1260
+ clip: rect(0, 0, 0, 0);
1261
+ pointer-events: none;
1262
+ }
1263
 
1264
  .embedpress-modal .input-group {
1265
+ position: relative;
1266
+ display: table;
1267
+ border-collapse: separate;
1268
+ }
1269
+
1270
+ .embedpress-modal .input-group[class*="col-"] {
1271
  float: none;
1272
  padding-left: 0;
1273
+ padding-right: 0;
1274
+ }
1275
+
1276
+ .embedpress-modal .input-group .form-control {
1277
  position: relative;
1278
  z-index: 2;
1279
  float: left;
1280
  width: 100%;
1281
+ margin-bottom: 0;
1282
+ }
1283
+
1284
+ .embedpress-modal .input-group .form-control:focus {
1285
+ z-index: 3;
1286
+ }
1287
 
1288
  .embedpress-modal .input-group-addon,
1289
  .embedpress-modal .input-group-btn,
1290
  .embedpress-modal .input-group .form-control {
1291
+ display: table-cell;
1292
+ }
1293
+
1294
+ .embedpress-modal .input-group-addon:not(:first-child):not(:last-child),
1295
+ .embedpress-modal .input-group-btn:not(:first-child):not(:last-child),
1296
+ .embedpress-modal .input-group .form-control:not(:first-child):not(:last-child) {
1297
+ border-radius: 0;
1298
+ }
1299
 
1300
  .embedpress-modal .input-group-addon,
1301
  .embedpress-modal .input-group-btn {
1302
+ width: 1%;
1303
+ white-space: nowrap;
1304
+ vertical-align: middle;
1305
+ }
1306
 
1307
  .embedpress-modal .input-group-addon {
1308
+ padding: 6px 12px;
1309
+ font-size: 14px;
1310
+ font-weight: normal;
1311
+ line-height: 1;
1312
+ color: #555555;
1313
+ text-align: center;
1314
+ background-color: #eeeeee;
1315
+ border: 1px solid #ccc;
1316
+ border-radius: 4px;
1317
+ }
1318
+
1319
+ .embedpress-modal .input-group-addon.input-sm, .embedpress-modal .input-group-sm > .input-group-addon, .embedpress-modal .input-group-sm > .input-group-btn > .input-group-addon.btn {
1320
  padding: 5px 10px;
1321
  font-size: 12px;
1322
+ border-radius: 3px;
1323
+ }
1324
+
1325
+ .embedpress-modal .input-group-addon.input-lg, .embedpress-modal .input-group-lg > .input-group-addon, .embedpress-modal .input-group-lg > .input-group-btn > .input-group-addon.btn {
1326
  padding: 10px 16px;
1327
  font-size: 18px;
1328
+ border-radius: 6px;
1329
+ }
1330
+
1331
+ .embedpress-modal .input-group-addon input[type="radio"],
1332
+ .embedpress-modal .input-group-addon input[type="checkbox"] {
1333
+ margin-top: 0;
1334
+ }
1335
 
1336
  .embedpress-modal .input-group .form-control:first-child,
1337
  .embedpress-modal .input-group-addon:first-child,
1340
  .embedpress-modal .input-group-btn:first-child > .dropdown-toggle,
1341
  .embedpress-modal .input-group-btn:last-child > .btn:not(:last-child):not(.dropdown-toggle),
1342
  .embedpress-modal .input-group-btn:last-child > .btn-group:not(:last-child) > .btn {
1343
+ border-bottom-right-radius: 0;
1344
+ border-top-right-radius: 0;
1345
+ }
1346
 
1347
  .embedpress-modal .input-group-addon:first-child {
1348
+ border-right: 0;
1349
+ }
1350
 
1351
  .embedpress-modal .input-group .form-control:last-child,
1352
  .embedpress-modal .input-group-addon:last-child,
1355
  .embedpress-modal .input-group-btn:last-child > .dropdown-toggle,
1356
  .embedpress-modal .input-group-btn:first-child > .btn:not(:first-child),
1357
  .embedpress-modal .input-group-btn:first-child > .btn-group:not(:first-child) > .btn {
1358
+ border-bottom-left-radius: 0;
1359
+ border-top-left-radius: 0;
1360
+ }
1361
 
1362
  .embedpress-modal .input-group-addon:last-child {
1363
+ border-left: 0;
1364
+ }
1365
 
1366
  .embedpress-modal .input-group-btn {
1367
+ position: relative;
1368
+ font-size: 0;
1369
+ white-space: nowrap;
1370
+ }
1371
+
1372
+ .embedpress-modal .input-group-btn > .btn {
1373
+ position: relative;
1374
+ }
1375
+
1376
+ .embedpress-modal .input-group-btn > .btn + .btn {
1377
+ margin-left: -1px;
1378
+ }
1379
+
1380
+ .embedpress-modal .input-group-btn > .btn:hover, .embedpress-modal .input-group-btn > .btn:focus, .embedpress-modal .input-group-btn > .btn:active {
1381
  z-index: 2;
1382
+ }
1383
+
1384
+ .embedpress-modal .input-group-btn:first-child > .btn,
1385
+ .embedpress-modal .input-group-btn:first-child > .btn-group {
1386
+ margin-right: -1px;
1387
+ }
1388
+
1389
+ .embedpress-modal .input-group-btn:last-child > .btn,
1390
+ .embedpress-modal .input-group-btn:last-child > .btn-group {
1391
+ z-index: 2;
1392
+ margin-left: -1px;
1393
+ }
1394
 
1395
  .embedpress-modal .close {
1396
+ float: right;
1397
+ font-size: 21px;
1398
+ font-weight: bold;
1399
+ line-height: 1;
1400
+ color: #000;
1401
+ text-shadow: 0 1px 0 #fff;
1402
+ opacity: 0.2;
1403
+ filter: alpha(opacity=20);
1404
+ }
1405
+
1406
+ .embedpress-modal .close:hover, .embedpress-modal .close:focus {
1407
  color: #000;
1408
  text-decoration: none;
1409
  cursor: pointer;
1410
  opacity: 0.5;
1411
+ filter: alpha(opacity=50);
1412
+ }
1413
 
1414
  .embedpress-modal button.close {
1415
+ padding: 0;
1416
+ cursor: pointer;
1417
+ background: transparent;
1418
+ border: 0;
1419
+ -webkit-appearance: none;
1420
+ }
1421
 
1422
  .modal-open {
1423
+ overflow: hidden;
1424
+ }
1425
 
1426
  .modal {
1427
+ display: none;
1428
+ overflow: hidden;
1429
+ position: fixed;
1430
+ top: 0;
1431
+ right: 0;
1432
+ bottom: 0;
1433
+ left: 0;
1434
+ z-index: 100010;
1435
+ -webkit-overflow-scrolling: touch;
1436
+ outline: 0;
1437
+ }
1438
+
1439
+ .modal.fade .modal-dialog {
1440
  transform: translate(0, -25%);
1441
+ transition: transform 0.3s ease-out;
1442
+ }
1443
+
1444
+ .modal.in .modal-dialog {
1445
+ transform: translate(0, 0);
1446
+ }
1447
 
1448
  .modal-open .modal {
1449
+ overflow-x: hidden;
1450
+ overflow-y: auto;
1451
+ }
1452
 
1453
  .modal-dialog {
1454
+ position: relative;
1455
+ width: auto;
1456
+ margin: 10px;
1457
+ }
1458
 
1459
  .modal-content {
1460
+ position: relative;
1461
+ background-color: #fff;
1462
+ border: 1px solid #999;
1463
+ border: 1px solid rgba(0, 0, 0, 0.2);
1464
+ border-radius: 6px;
1465
+ box-shadow: 0 3px 9px rgba(0, 0, 0, 0.5);
1466
+ background-clip: padding-box;
1467
+ outline: 0;
1468
+ }
1469
 
1470
  .modal-backdrop {
1471
+ position: fixed;
1472
+ top: 0;
1473
+ right: 0;
1474
+ bottom: 0;
1475
+ left: 0;
1476
+ z-index: 100001;
1477
+ background-color: #000;
1478
+ }
1479
+
1480
+ .modal-backdrop.fade {
1481
  opacity: 0;
1482
+ filter: alpha(opacity=0);
1483
+ }
1484
+
1485
+ .modal-backdrop.in {
1486
  opacity: 0.5;
1487
+ filter: alpha(opacity=50);
1488
+ }
1489
 
1490
  .modal-header {
1491
+ padding: 15px;
1492
+ border-bottom: 1px solid #e5e5e5;
1493
+ }
1494
+
1495
+ .modal-header:before, .modal-header:after {
1496
  content: " ";
1497
+ display: table;
1498
+ }
1499
+
1500
+ .modal-header:after {
1501
+ clear: both;
1502
+ }
1503
 
1504
  .modal-header .close {
1505
+ margin-top: -2px;
1506
+ }
1507
 
1508
  .modal-title {
1509
+ margin: 0;
1510
+ line-height: 1.42857;
1511
+ }
1512
 
1513
  .modal-body {
1514
+ position: relative;
1515
+ padding: 15px;
1516
+ }
1517
 
1518
  .modal-footer {
1519
+ padding: 15px;
1520
+ text-align: right;
1521
+ border-top: 1px solid #e5e5e5;
1522
+ }
1523
+
1524
+ .modal-footer:before, .modal-footer:after {
1525
  content: " ";
1526
+ display: table;
1527
+ }
1528
+
1529
+ .modal-footer:after {
1530
+ clear: both;
1531
+ }
1532
+
1533
+ .modal-footer .btn + .btn {
1534
  margin-left: 5px;
1535
+ margin-bottom: 0;
1536
+ }
1537
+
1538
+ .modal-footer .btn-group .btn + .btn {
1539
+ margin-left: -1px;
1540
+ }
1541
+
1542
+ .modal-footer .btn-block + .btn-block {
1543
+ margin-left: 0;
1544
+ }
1545
 
1546
  .modal-scrollbar-measure {
1547
+ position: absolute;
1548
+ top: -9999px;
1549
+ width: 50px;
1550
+ height: 50px;
1551
+ overflow: scroll;
1552
+ }
1553
 
1554
  @media (min-width: 768px) {
1555
+ .modal-dialog {
1556
+ width: 600px;
1557
+ margin: 30px auto;
1558
+ }
1559
+
1560
+ .modal-content {
1561
+ box-shadow: 0 5px 15px rgba(0, 0, 0, 0.5);
1562
+ }
1563
+
1564
+ .modal-sm {
1565
+ width: 300px;
1566
+ }
1567
+ }
1568
 
1569
  @media (min-width: 992px) {
1570
+ .modal-lg {
1571
+ width: 900px;
1572
+ }
1573
+ }
1574
 
1575
  @-ms-viewport {
1576
+ width: device-width;
1577
+ }
1578
 
1579
  .visible-xs {
1580
+ display: none !important;
1581
+ }
1582
 
1583
  .visible-sm {
1584
+ display: none !important;
1585
+ }
1586
 
1587
  .visible-md {
1588
+ display: none !important;
1589
+ }
1590
 
1591
  .visible-lg {
1592
+ display: none !important;
1593
+ }
1594
 
1595
  .visible-xs-block,
1596
  .visible-xs-inline,
1604
  .visible-lg-block,
1605
  .visible-lg-inline,
1606
  .visible-lg-inline-block {
1607
+ display: none !important;
1608
+ }
1609
 
1610
  @media (max-width: 767px) {
1611
+ .visible-xs {
1612
+ display: block !important;
1613
+ }
1614
+
1615
+ table.visible-xs {
1616
+ display: table !important;
1617
+ }
1618
+
1619
+ tr.visible-xs {
1620
+ display: table-row !important;
1621
+ }
1622
+
1623
+ th.visible-xs,
1624
+ td.visible-xs {
1625
+ display: table-cell !important;
1626
+ }
1627
+ }
1628
 
1629
  @media (max-width: 767px) {
1630
+ .visible-xs-block {
1631
+ display: block !important;
1632
+ }
1633
+ }
1634
 
1635
  @media (max-width: 767px) {
1636
+ .visible-xs-inline {
1637
+ display: inline !important;
1638
+ }
1639
+ }
1640
 
1641
  @media (max-width: 767px) {
1642
+ .visible-xs-inline-block {
1643
+ display: inline-block !important;
1644
+ }
1645
+ }
1646
 
1647
  @media (min-width: 768px) and (max-width: 991px) {
1648
+ .visible-sm {
1649
+ display: block !important;
1650
+ }
1651
+
1652
+ table.visible-sm {
1653
+ display: table !important;
1654
+ }
1655
+
1656
+ tr.visible-sm {
1657
+ display: table-row !important;
1658
+ }
1659
+
1660
+ th.visible-sm,
1661
+ td.visible-sm {
1662
+ display: table-cell !important;
1663
+ }
1664
+ }
1665
 
1666
  @media (min-width: 768px) and (max-width: 991px) {
1667
+ .visible-sm-block {
1668
+ display: block !important;
1669
+ }
1670
+ }
1671
 
1672
  @media (min-width: 768px) and (max-width: 991px) {
1673
+ .visible-sm-inline {
1674
+ display: inline !important;
1675
+ }
1676
+ }
1677
 
1678
  @media (min-width: 768px) and (max-width: 991px) {
1679
+ .visible-sm-inline-block {
1680
+ display: inline-block !important;
1681
+ }
1682
+ }
1683
 
1684
  @media (min-width: 992px) and (max-width: 1199px) {
1685
+ .visible-md {
1686
+ display: block !important;
1687
+ }
1688
+
1689
+ table.visible-md {
1690
+ display: table !important;
1691
+ }
1692
+
1693
+ tr.visible-md {
1694
+ display: table-row !important;
1695
+ }
1696
+
1697
+ th.visible-md,
1698
+ td.visible-md {
1699
+ display: table-cell !important;
1700
+ }
1701
+ }
1702
 
1703
  @media (min-width: 992px) and (max-width: 1199px) {
1704
+ .visible-md-block {
1705
+ display: block !important;
1706
+ }
1707
+ }
1708
 
1709
  @media (min-width: 992px) and (max-width: 1199px) {
1710
+ .visible-md-inline {
1711
+ display: inline !important;
1712
+ }
1713
+ }
1714
 
1715
  @media (min-width: 992px) and (max-width: 1199px) {
1716
+ .visible-md-inline-block {
1717
+ display: inline-block !important;
1718
+ }
1719
+ }
1720
 
1721
  @media (min-width: 1200px) {
1722
+ .visible-lg {
1723
+ display: block !important;
1724
+ }
1725
+
1726
+ table.visible-lg {
1727
+ display: table !important;
1728
+ }
1729
+
1730
+ tr.visible-lg {
1731
+ display: table-row !important;
1732
+ }
1733
+
1734
+ th.visible-lg,
1735
+ td.visible-lg {
1736
+ display: table-cell !important;
1737
+ }
1738
+ }
1739
 
1740
  @media (min-width: 1200px) {
1741
+ .visible-lg-block {
1742
+ display: block !important;
1743
+ }
1744
+ }
1745
 
1746
  @media (min-width: 1200px) {
1747
+ .visible-lg-inline {
1748
+ display: inline !important;
1749
+ }
1750
+ }
1751
 
1752
  @media (min-width: 1200px) {
1753
+ .visible-lg-inline-block {
1754
+ display: inline-block !important;
1755
+ }
1756
+ }
1757
 
1758
  @media (max-width: 767px) {
1759
+ .hidden-xs {
1760
+ display: none !important;
1761
+ }
1762
+ }
1763
 
1764
  @media (min-width: 768px) and (max-width: 991px) {
1765
+ .hidden-sm {
1766
+ display: none !important;
1767
+ }
1768
+ }
1769
 
1770
  @media (min-width: 992px) and (max-width: 1199px) {
1771
+ .hidden-md {
1772
+ display: none !important;
1773
+ }
1774
+ }
1775
 
1776
  @media (min-width: 1200px) {
1777
+ .hidden-lg {
1778
+ display: none !important;
1779
+ }
1780
+ }
1781
 
1782
  .visible-print {
1783
+ display: none !important;
1784
+ }
1785
 
1786
  @media print {
1787
+ .visible-print {
1788
+ display: block !important;
1789
+ }
1790
+
1791
+ table.visible-print {
1792
+ display: table !important;
1793
+ }
1794
+
1795
+ tr.visible-print {
1796
+ display: table-row !important;
1797
+ }
1798
+
1799
+ th.visible-print,
1800
+ td.visible-print {
1801
+ display: table-cell !important;
1802
+ }
1803
+ }
1804
 
1805
  .visible-print-block {
1806
+ display: none !important;
1807
+ }
1808
+
1809
+ @media print {
1810
  .visible-print-block {
1811
+ display: block !important;
1812
+ }
1813
+ }
1814
 
1815
  .visible-print-inline {
1816
+ display: none !important;
1817
+ }
1818
+
1819
+ @media print {
1820
  .visible-print-inline {
1821
+ display: inline !important;
1822
+ }
1823
+ }
1824
 
1825
  .visible-print-inline-block {
1826
+ display: none !important;
1827
+ }
1828
+
1829
+ @media print {
1830
  .visible-print-inline-block {
1831
+ display: inline-block !important;
1832
+ }
1833
+ }
1834
 
1835
  @media print {
1836
+ .hidden-print {
1837
+ display: none !important;
1838
+ }
1839
+ }
assets/css/vendor/bootstrap/bootstrap.css.map CHANGED
@@ -1 +1,13 @@
1
- {"version":3,"sources":["bootstrap.css"],"names":[],"mappings":"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","file":"bootstrap.css","sourcesContent":[".embedpress-modal fieldset {\n padding: 0;\n margin: 0;\n border: 0;\n min-width: 0; }\n\n.embedpress-modal legend {\n display: block;\n width: 100%;\n padding: 0;\n margin-bottom: 20px;\n font-size: 21px;\n line-height: inherit;\n color: #333333;\n border: 0;\n border-bottom: 1px solid #e5e5e5; }\n\n.embedpress-modal label {\n display: inline-block;\n max-width: 100%;\n margin-bottom: 5px;\n font-weight: bold; }\n\n.embedpress-modal input[type=\"search\"] {\n -webkit-box-sizing: border-box;\n -moz-box-sizing: border-box;\n box-sizing: border-box; }\n\n.embedpress-modal input[type=\"radio\"],\n.embedpress-modal input[type=\"checkbox\"] {\n margin: 4px 0 0;\n margin-top: 1px \\9;\n line-height: normal; }\n\n.embedpress-modal input[type=\"file\"] {\n display: block; }\n\n.embedpress-modal input[type=\"range\"] {\n display: block;\n width: 100%; }\n\n.embedpress-modal select[multiple],\n.embedpress-modal select[size] {\n height: auto; }\n\n.embedpress-modal input[type=\"file\"]:focus,\n.embedpress-modal input[type=\"radio\"]:focus,\n.embedpress-modal input[type=\"checkbox\"]:focus {\n outline: 5px auto -webkit-focus-ring-color;\n outline-offset: -2px; }\n\n.embedpress-modal output {\n display: block;\n padding-top: 7px;\n font-size: 14px;\n line-height: 1.42857;\n color: #555555; }\n\n.embedpress-modal .form-control {\n display: block;\n width: 100%;\n height: 34px;\n padding: 6px 12px;\n font-size: 14px;\n line-height: 1.42857;\n color: #555555;\n background-color: #fff;\n background-image: none;\n border: 1px solid #ccc;\n border-radius: 4px;\n -webkit-box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.075);\n box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.075);\n -webkit-transition: border-color ease-in-out 0.15s, box-shadow ease-in-out 0.15s;\n -o-transition: border-color ease-in-out 0.15s, box-shadow ease-in-out 0.15s;\n transition: border-color ease-in-out 0.15s, box-shadow ease-in-out 0.15s; }\n .embedpress-modal .form-control:focus {\n border-color: #66afe9;\n outline: 0;\n -webkit-box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.075), 0 0 8px rgba(102, 175, 233, 0.6);\n box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.075), 0 0 8px rgba(102, 175, 233, 0.6); }\n .embedpress-modal .form-control::-moz-placeholder {\n color: #999;\n opacity: 1; }\n .embedpress-modal .form-control:-ms-input-placeholder {\n color: #999; }\n .embedpress-modal .form-control::-webkit-input-placeholder {\n color: #999; }\n .embedpress-modal .form-control::-ms-expand {\n border: 0;\n background-color: transparent; }\n .embedpress-modal .form-control[disabled], .embedpress-modal .form-control[readonly],\n fieldset[disabled] .embedpress-modal .form-control {\n background-color: #eeeeee;\n opacity: 1; }\n .embedpress-modal .form-control[disabled],\n fieldset[disabled] .embedpress-modal .form-control {\n cursor: not-allowed; }\n\n.embedpress-modal textarea.form-control {\n height: auto; }\n\n.embedpress-modal input[type=\"search\"] {\n -webkit-appearance: none; }\n\n@media screen and (-webkit-min-device-pixel-ratio: 0) {\n .embedpress-modal input[type=\"date\"].form-control,\n .embedpress-modal input[type=\"time\"].form-control,\n .embedpress-modal input[type=\"datetime-local\"].form-control,\n .embedpress-modal input[type=\"month\"].form-control {\n line-height: 34px; }\n .embedpress-modal input[type=\"date\"].input-sm, .embedpress-modal .input-group-sm > input[type=\"date\"].form-control, .embedpress-modal .input-group-sm > input[type=\"date\"].input-group-addon, .embedpress-modal .input-group-sm > .input-group-btn > input[type=\"date\"].btn,\n .input-group-sm .embedpress-modal input[type=\"date\"],\n .embedpress-modal input[type=\"time\"].input-sm, .embedpress-modal .input-group-sm > input[type=\"time\"].form-control, .embedpress-modal .input-group-sm > input[type=\"time\"].input-group-addon, .embedpress-modal .input-group-sm > .input-group-btn > input[type=\"time\"].btn,\n .input-group-sm\n .embedpress-modal input[type=\"time\"],\n .embedpress-modal input[type=\"datetime-local\"].input-sm, .embedpress-modal .input-group-sm > input[type=\"datetime-local\"].form-control, .embedpress-modal .input-group-sm > input[type=\"datetime-local\"].input-group-addon, .embedpress-modal .input-group-sm > .input-group-btn > input[type=\"datetime-local\"].btn,\n .input-group-sm\n .embedpress-modal input[type=\"datetime-local\"],\n .embedpress-modal input[type=\"month\"].input-sm, .embedpress-modal .input-group-sm > input[type=\"month\"].form-control, .embedpress-modal .input-group-sm > input[type=\"month\"].input-group-addon, .embedpress-modal .input-group-sm > .input-group-btn > input[type=\"month\"].btn,\n .input-group-sm\n .embedpress-modal input[type=\"month\"] {\n line-height: 30px; }\n .embedpress-modal input[type=\"date\"].input-lg, .embedpress-modal .input-group-lg > input[type=\"date\"].form-control, .embedpress-modal .input-group-lg > input[type=\"date\"].input-group-addon, .embedpress-modal .input-group-lg > .input-group-btn > input[type=\"date\"].btn,\n .input-group-lg .embedpress-modal input[type=\"date\"],\n .embedpress-modal input[type=\"time\"].input-lg, .embedpress-modal .input-group-lg > input[type=\"time\"].form-control, .embedpress-modal .input-group-lg > input[type=\"time\"].input-group-addon, .embedpress-modal .input-group-lg > .input-group-btn > input[type=\"time\"].btn,\n .input-group-lg\n .embedpress-modal input[type=\"time\"],\n .embedpress-modal input[type=\"datetime-local\"].input-lg, .embedpress-modal .input-group-lg > input[type=\"datetime-local\"].form-control, .embedpress-modal .input-group-lg > input[type=\"datetime-local\"].input-group-addon, .embedpress-modal .input-group-lg > .input-group-btn > input[type=\"datetime-local\"].btn,\n .input-group-lg\n .embedpress-modal input[type=\"datetime-local\"],\n .embedpress-modal input[type=\"month\"].input-lg, .embedpress-modal .input-group-lg > input[type=\"month\"].form-control, .embedpress-modal .input-group-lg > input[type=\"month\"].input-group-addon, .embedpress-modal .input-group-lg > .input-group-btn > input[type=\"month\"].btn,\n .input-group-lg\n .embedpress-modal input[type=\"month\"] {\n line-height: 46px; } }\n\n.embedpress-modal .form-group {\n margin-bottom: 15px; }\n\n.embedpress-modal .radio,\n.embedpress-modal .checkbox {\n position: relative;\n display: block;\n margin-top: 10px;\n margin-bottom: 10px; }\n .embedpress-modal .radio label,\n .embedpress-modal .checkbox label {\n min-height: 20px;\n padding-left: 20px;\n margin-bottom: 0;\n font-weight: normal;\n cursor: pointer; }\n\n.embedpress-modal .radio input[type=\"radio\"],\n.embedpress-modal .radio-inline input[type=\"radio\"],\n.embedpress-modal .checkbox input[type=\"checkbox\"],\n.embedpress-modal .checkbox-inline input[type=\"checkbox\"] {\n position: absolute;\n margin-left: -20px;\n margin-top: 4px \\9; }\n\n.embedpress-modal .radio + .radio,\n.embedpress-modal .checkbox + .checkbox {\n margin-top: -5px; }\n\n.embedpress-modal .radio-inline,\n.embedpress-modal .checkbox-inline {\n position: relative;\n display: inline-block;\n padding-left: 20px;\n margin-bottom: 0;\n vertical-align: middle;\n font-weight: normal;\n cursor: pointer; }\n\n.embedpress-modal .radio-inline + .radio-inline,\n.embedpress-modal .checkbox-inline + .checkbox-inline {\n margin-top: 0;\n margin-left: 10px; }\n\n.embedpress-modal input[type=\"radio\"][disabled], .embedpress-modal input[type=\"radio\"].disabled,\nfieldset[disabled] .embedpress-modal input[type=\"radio\"],\n.embedpress-modal input[type=\"checkbox\"][disabled],\n.embedpress-modal input[type=\"checkbox\"].disabled,\nfieldset[disabled]\n.embedpress-modal input[type=\"checkbox\"] {\n cursor: not-allowed; }\n\n.embedpress-modal .radio-inline.disabled,\nfieldset[disabled] .embedpress-modal .radio-inline,\n.embedpress-modal .checkbox-inline.disabled,\nfieldset[disabled]\n.embedpress-modal .checkbox-inline {\n cursor: not-allowed; }\n\n.embedpress-modal .radio.disabled label,\nfieldset[disabled] .embedpress-modal .radio label,\n.embedpress-modal .checkbox.disabled label,\nfieldset[disabled]\n.embedpress-modal .checkbox label {\n cursor: not-allowed; }\n\n.embedpress-modal .form-control-static {\n padding-top: 7px;\n padding-bottom: 7px;\n margin-bottom: 0;\n min-height: 34px; }\n .embedpress-modal .form-control-static.input-lg, .embedpress-modal .input-group-lg > .form-control-static.form-control, .embedpress-modal .input-group-lg > .form-control-static.input-group-addon, .embedpress-modal .input-group-lg > .input-group-btn > .form-control-static.btn, .embedpress-modal .form-control-static.input-sm, .embedpress-modal .input-group-sm > .form-control-static.form-control, .embedpress-modal .input-group-sm > .form-control-static.input-group-addon, .embedpress-modal .input-group-sm > .input-group-btn > .form-control-static.btn {\n padding-left: 0;\n padding-right: 0; }\n\n.embedpress-modal .input-sm, .embedpress-modal .input-group-sm > .form-control, .embedpress-modal .input-group-sm > .input-group-addon, .embedpress-modal .input-group-sm > .input-group-btn > .btn {\n height: 30px;\n padding: 5px 10px;\n font-size: 12px;\n line-height: 1.5;\n border-radius: 3px; }\n\n.embedpress-modal select.input-sm, .embedpress-modal .input-group-sm > select.form-control, .embedpress-modal .input-group-sm > select.input-group-addon, .embedpress-modal .input-group-sm > .input-group-btn > select.btn {\n height: 30px;\n line-height: 30px; }\n\n.embedpress-modal textarea.input-sm, .embedpress-modal .input-group-sm > textarea.form-control, .embedpress-modal .input-group-sm > textarea.input-group-addon, .embedpress-modal .input-group-sm > .input-group-btn > textarea.btn,\n.embedpress-modal select[multiple].input-sm, .embedpress-modal .input-group-sm > select[multiple].form-control, .embedpress-modal .input-group-sm > select[multiple].input-group-addon, .embedpress-modal .input-group-sm > .input-group-btn > select[multiple].btn {\n height: auto; }\n\n.embedpress-modal .form-group-sm .form-control {\n height: 30px;\n padding: 5px 10px;\n font-size: 12px;\n line-height: 1.5;\n border-radius: 3px; }\n\n.embedpress-modal .form-group-sm select.form-control {\n height: 30px;\n line-height: 30px; }\n\n.embedpress-modal .form-group-sm textarea.form-control,\n.embedpress-modal .form-group-sm select[multiple].form-control {\n height: auto; }\n\n.embedpress-modal .form-group-sm .form-control-static {\n height: 30px;\n min-height: 32px;\n padding: 6px 10px;\n font-size: 12px;\n line-height: 1.5; }\n\n.embedpress-modal .input-lg, .embedpress-modal .input-group-lg > .form-control, .embedpress-modal .input-group-lg > .input-group-addon, .embedpress-modal .input-group-lg > .input-group-btn > .btn {\n height: 46px;\n padding: 10px 16px;\n font-size: 18px;\n line-height: 1.33333;\n border-radius: 6px; }\n\n.embedpress-modal select.input-lg, .embedpress-modal .input-group-lg > select.form-control, .embedpress-modal .input-group-lg > select.input-group-addon, .embedpress-modal .input-group-lg > .input-group-btn > select.btn {\n height: 46px;\n line-height: 46px; }\n\n.embedpress-modal textarea.input-lg, .embedpress-modal .input-group-lg > textarea.form-control, .embedpress-modal .input-group-lg > textarea.input-group-addon, .embedpress-modal .input-group-lg > .input-group-btn > textarea.btn,\n.embedpress-modal select[multiple].input-lg, .embedpress-modal .input-group-lg > select[multiple].form-control, .embedpress-modal .input-group-lg > select[multiple].input-group-addon, .embedpress-modal .input-group-lg > .input-group-btn > select[multiple].btn {\n height: auto; }\n\n.embedpress-modal .form-group-lg .form-control {\n height: 46px;\n padding: 10px 16px;\n font-size: 18px;\n line-height: 1.33333;\n border-radius: 6px; }\n\n.embedpress-modal .form-group-lg select.form-control {\n height: 46px;\n line-height: 46px; }\n\n.embedpress-modal .form-group-lg textarea.form-control,\n.embedpress-modal .form-group-lg select[multiple].form-control {\n height: auto; }\n\n.embedpress-modal .form-group-lg .form-control-static {\n height: 46px;\n min-height: 38px;\n padding: 11px 16px;\n font-size: 18px;\n line-height: 1.33333; }\n\n.embedpress-modal .has-feedback {\n position: relative; }\n .embedpress-modal .has-feedback .form-control {\n padding-right: 42.5px; }\n\n.embedpress-modal .form-control-feedback {\n position: absolute;\n top: 0;\n right: 0;\n z-index: 2;\n display: block;\n width: 34px;\n height: 34px;\n line-height: 34px;\n text-align: center;\n pointer-events: none; }\n\n.embedpress-modal .input-lg + .form-control-feedback, .embedpress-modal .input-group-lg > .form-control + .form-control-feedback, .embedpress-modal .input-group-lg > .input-group-addon + .form-control-feedback, .embedpress-modal .input-group-lg > .input-group-btn > .btn + .form-control-feedback,\n.embedpress-modal .input-group-lg + .form-control-feedback,\n.embedpress-modal .form-group-lg .form-control + .form-control-feedback {\n width: 46px;\n height: 46px;\n line-height: 46px; }\n\n.embedpress-modal .input-sm + .form-control-feedback, .embedpress-modal .input-group-sm > .form-control + .form-control-feedback, .embedpress-modal .input-group-sm > .input-group-addon + .form-control-feedback, .embedpress-modal .input-group-sm > .input-group-btn > .btn + .form-control-feedback,\n.embedpress-modal .input-group-sm + .form-control-feedback,\n.embedpress-modal .form-group-sm .form-control + .form-control-feedback {\n width: 30px;\n height: 30px;\n line-height: 30px; }\n\n.embedpress-modal .has-success .help-block,\n.embedpress-modal .has-success .control-label,\n.embedpress-modal .has-success .radio,\n.embedpress-modal .has-success .checkbox,\n.embedpress-modal .has-success .radio-inline,\n.embedpress-modal .has-success .checkbox-inline,\n.embedpress-modal .has-success.radio label,\n.embedpress-modal .has-success.checkbox label,\n.embedpress-modal .has-success.radio-inline label,\n.embedpress-modal .has-success.checkbox-inline label {\n color: #3c763d; }\n\n.embedpress-modal .has-success .form-control {\n border-color: #3c763d;\n -webkit-box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.075);\n box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.075); }\n .embedpress-modal .has-success .form-control:focus {\n border-color: #2b542c;\n -webkit-box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.075), 0 0 6px #67b168;\n box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.075), 0 0 6px #67b168; }\n\n.embedpress-modal .has-success .input-group-addon {\n color: #3c763d;\n border-color: #3c763d;\n background-color: #dff0d8; }\n\n.embedpress-modal .has-success .form-control-feedback {\n color: #3c763d; }\n\n.embedpress-modal .has-warning .help-block,\n.embedpress-modal .has-warning .control-label,\n.embedpress-modal .has-warning .radio,\n.embedpress-modal .has-warning .checkbox,\n.embedpress-modal .has-warning .radio-inline,\n.embedpress-modal .has-warning .checkbox-inline,\n.embedpress-modal .has-warning.radio label,\n.embedpress-modal .has-warning.checkbox label,\n.embedpress-modal .has-warning.radio-inline label,\n.embedpress-modal .has-warning.checkbox-inline label {\n color: #8a6d3b; }\n\n.embedpress-modal .has-warning .form-control {\n border-color: #8a6d3b;\n -webkit-box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.075);\n box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.075); }\n .embedpress-modal .has-warning .form-control:focus {\n border-color: #66512c;\n -webkit-box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.075), 0 0 6px #c0a16b;\n box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.075), 0 0 6px #c0a16b; }\n\n.embedpress-modal .has-warning .input-group-addon {\n color: #8a6d3b;\n border-color: #8a6d3b;\n background-color: #fcf8e3; }\n\n.embedpress-modal .has-warning .form-control-feedback {\n color: #8a6d3b; }\n\n.embedpress-modal .has-error .help-block,\n.embedpress-modal .has-error .control-label,\n.embedpress-modal .has-error .radio,\n.embedpress-modal .has-error .checkbox,\n.embedpress-modal .has-error .radio-inline,\n.embedpress-modal .has-error .checkbox-inline,\n.embedpress-modal .has-error.radio label,\n.embedpress-modal .has-error.checkbox label,\n.embedpress-modal .has-error.radio-inline label,\n.embedpress-modal .has-error.checkbox-inline label {\n color: #a94442; }\n\n.embedpress-modal .has-error .form-control {\n border-color: #a94442;\n -webkit-box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.075);\n box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.075); }\n .embedpress-modal .has-error .form-control:focus {\n border-color: #843534;\n -webkit-box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.075), 0 0 6px #ce8483;\n box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.075), 0 0 6px #ce8483; }\n\n.embedpress-modal .has-error .input-group-addon {\n color: #a94442;\n border-color: #a94442;\n background-color: #f2dede; }\n\n.embedpress-modal .has-error .form-control-feedback {\n color: #a94442; }\n\n.embedpress-modal .has-feedback label ~ .form-control-feedback {\n top: 25px; }\n\n.embedpress-modal .has-feedback label.sr-only ~ .form-control-feedback {\n top: 0; }\n\n.embedpress-modal .help-block {\n display: block;\n margin-top: 5px;\n margin-bottom: 10px;\n color: #737373; }\n\n@media (min-width: 768px) {\n .embedpress-modal .form-inline .form-group {\n display: inline-block;\n margin-bottom: 0;\n vertical-align: middle; }\n .embedpress-modal .form-inline .form-control {\n display: inline-block;\n width: auto;\n vertical-align: middle; }\n .embedpress-modal .form-inline .form-control-static {\n display: inline-block; }\n .embedpress-modal .form-inline .input-group {\n display: inline-table;\n vertical-align: middle; }\n .embedpress-modal .form-inline .input-group .input-group-addon,\n .embedpress-modal .form-inline .input-group .input-group-btn,\n .embedpress-modal .form-inline .input-group .form-control {\n width: auto; }\n .embedpress-modal .form-inline .input-group > .form-control {\n width: 100%; }\n .embedpress-modal .form-inline .control-label {\n margin-bottom: 0;\n vertical-align: middle; }\n .embedpress-modal .form-inline .radio,\n .embedpress-modal .form-inline .checkbox {\n display: inline-block;\n margin-top: 0;\n margin-bottom: 0;\n vertical-align: middle; }\n .embedpress-modal .form-inline .radio label,\n .embedpress-modal .form-inline .checkbox label {\n padding-left: 0; }\n .embedpress-modal .form-inline .radio input[type=\"radio\"],\n .embedpress-modal .form-inline .checkbox input[type=\"checkbox\"] {\n position: relative;\n margin-left: 0; }\n .embedpress-modal .form-inline .has-feedback .form-control-feedback {\n top: 0; } }\n\n.embedpress-modal .form-horizontal .radio,\n.embedpress-modal .form-horizontal .checkbox,\n.embedpress-modal .form-horizontal .radio-inline,\n.embedpress-modal .form-horizontal .checkbox-inline {\n margin-top: 0;\n margin-bottom: 0;\n padding-top: 7px; }\n\n.embedpress-modal .form-horizontal .radio,\n.embedpress-modal .form-horizontal .checkbox {\n min-height: 27px; }\n\n.embedpress-modal .form-horizontal .form-group {\n margin-left: -15px;\n margin-right: -15px; }\n .embedpress-modal .form-horizontal .form-group:before, .embedpress-modal .form-horizontal .form-group:after {\n content: \" \";\n display: table; }\n .embedpress-modal .form-horizontal .form-group:after {\n clear: both; }\n\n@media (min-width: 768px) {\n .embedpress-modal .form-horizontal .control-label {\n text-align: right;\n margin-bottom: 0;\n padding-top: 7px; } }\n\n.embedpress-modal .form-horizontal .has-feedback .form-control-feedback {\n right: 15px; }\n\n@media (min-width: 768px) {\n .embedpress-modal .form-horizontal .form-group-lg .control-label {\n padding-top: 11px;\n font-size: 18px; } }\n\n@media (min-width: 768px) {\n .embedpress-modal .form-horizontal .form-group-sm .control-label {\n padding-top: 6px;\n font-size: 12px; } }\n\n.embedpress-modal .btn {\n display: inline-block;\n margin-bottom: 0;\n font-weight: normal;\n text-align: center;\n vertical-align: middle;\n touch-action: manipulation;\n cursor: pointer;\n background-image: none;\n border: 1px solid transparent;\n white-space: nowrap;\n padding: 6px 12px;\n font-size: 14px;\n line-height: 1.42857;\n border-radius: 4px;\n -webkit-user-select: none;\n -moz-user-select: none;\n -ms-user-select: none;\n user-select: none; }\n .embedpress-modal .btn:focus, .embedpress-modal .btn.focus, .embedpress-modal .btn:active:focus, .embedpress-modal .btn:active.focus, .embedpress-modal .btn.active:focus, .embedpress-modal .btn.active.focus {\n outline: 5px auto -webkit-focus-ring-color;\n outline-offset: -2px; }\n .embedpress-modal .btn:hover, .embedpress-modal .btn:focus, .embedpress-modal .btn.focus {\n color: #333;\n text-decoration: none; }\n .embedpress-modal .btn:active, .embedpress-modal .btn.active {\n outline: 0;\n background-image: none;\n -webkit-box-shadow: inset 0 3px 5px rgba(0, 0, 0, 0.125);\n box-shadow: inset 0 3px 5px rgba(0, 0, 0, 0.125); }\n .embedpress-modal .btn.disabled, .embedpress-modal .btn[disabled],\n fieldset[disabled] .embedpress-modal .btn {\n cursor: not-allowed;\n opacity: 0.65;\n filter: alpha(opacity=65);\n -webkit-box-shadow: none;\n box-shadow: none; }\n\n.embedpress-modal a.btn.disabled,\nfieldset[disabled] .embedpress-modal a.btn {\n pointer-events: none; }\n\n.embedpress-modal .btn-default {\n color: #333;\n background-color: #fff;\n border-color: #ccc; }\n .embedpress-modal .btn-default:focus, .embedpress-modal .btn-default.focus {\n color: #333;\n background-color: #e6e6e6;\n border-color: #8c8c8c; }\n .embedpress-modal .btn-default:hover {\n color: #333;\n background-color: #e6e6e6;\n border-color: #adadad; }\n .embedpress-modal .btn-default:active, .embedpress-modal .btn-default.active,\n .open > .embedpress-modal .btn-default.dropdown-toggle {\n color: #333;\n background-color: #e6e6e6;\n border-color: #adadad; }\n .embedpress-modal .btn-default:active:hover, .embedpress-modal .btn-default:active:focus, .embedpress-modal .btn-default:active.focus, .embedpress-modal .btn-default.active:hover, .embedpress-modal .btn-default.active:focus, .embedpress-modal .btn-default.active.focus,\n .open > .embedpress-modal .btn-default.dropdown-toggle:hover,\n .open > .embedpress-modal .btn-default.dropdown-toggle:focus,\n .open > .embedpress-modal .btn-default.dropdown-toggle.focus {\n color: #333;\n background-color: #d4d4d4;\n border-color: #8c8c8c; }\n .embedpress-modal .btn-default:active, .embedpress-modal .btn-default.active,\n .open > .embedpress-modal .btn-default.dropdown-toggle {\n background-image: none; }\n .embedpress-modal .btn-default.disabled:hover, .embedpress-modal .btn-default.disabled:focus, .embedpress-modal .btn-default.disabled.focus, .embedpress-modal .btn-default[disabled]:hover, .embedpress-modal .btn-default[disabled]:focus, .embedpress-modal .btn-default[disabled].focus,\n fieldset[disabled] .embedpress-modal .btn-default:hover,\n fieldset[disabled] .embedpress-modal .btn-default:focus,\n fieldset[disabled] .embedpress-modal .btn-default.focus {\n background-color: #fff;\n border-color: #ccc; }\n .embedpress-modal .btn-default .badge {\n color: #fff;\n background-color: #333; }\n\n.embedpress-modal .btn-primary {\n color: #fff;\n background-color: #337ab7;\n border-color: #2e6da4; }\n .embedpress-modal .btn-primary:focus, .embedpress-modal .btn-primary.focus {\n color: #fff;\n background-color: #286090;\n border-color: #122b40; }\n .embedpress-modal .btn-primary:hover {\n color: #fff;\n background-color: #286090;\n border-color: #204d74; }\n .embedpress-modal .btn-primary:active, .embedpress-modal .btn-primary.active,\n .open > .embedpress-modal .btn-primary.dropdown-toggle {\n color: #fff;\n background-color: #286090;\n border-color: #204d74; }\n .embedpress-modal .btn-primary:active:hover, .embedpress-modal .btn-primary:active:focus, .embedpress-modal .btn-primary:active.focus, .embedpress-modal .btn-primary.active:hover, .embedpress-modal .btn-primary.active:focus, .embedpress-modal .btn-primary.active.focus,\n .open > .embedpress-modal .btn-primary.dropdown-toggle:hover,\n .open > .embedpress-modal .btn-primary.dropdown-toggle:focus,\n .open > .embedpress-modal .btn-primary.dropdown-toggle.focus {\n color: #fff;\n background-color: #204d74;\n border-color: #122b40; }\n .embedpress-modal .btn-primary:active, .embedpress-modal .btn-primary.active,\n .open > .embedpress-modal .btn-primary.dropdown-toggle {\n background-image: none; }\n .embedpress-modal .btn-primary.disabled:hover, .embedpress-modal .btn-primary.disabled:focus, .embedpress-modal .btn-primary.disabled.focus, .embedpress-modal .btn-primary[disabled]:hover, .embedpress-modal .btn-primary[disabled]:focus, .embedpress-modal .btn-primary[disabled].focus,\n fieldset[disabled] .embedpress-modal .btn-primary:hover,\n fieldset[disabled] .embedpress-modal .btn-primary:focus,\n fieldset[disabled] .embedpress-modal .btn-primary.focus {\n background-color: #337ab7;\n border-color: #2e6da4; }\n .embedpress-modal .btn-primary .badge {\n color: #337ab7;\n background-color: #fff; }\n\n.embedpress-modal .btn-success {\n color: #fff;\n background-color: #5cb85c;\n border-color: #4cae4c; }\n .embedpress-modal .btn-success:focus, .embedpress-modal .btn-success.focus {\n color: #fff;\n background-color: #449d44;\n border-color: #255625; }\n .embedpress-modal .btn-success:hover {\n color: #fff;\n background-color: #449d44;\n border-color: #398439; }\n .embedpress-modal .btn-success:active, .embedpress-modal .btn-success.active,\n .open > .embedpress-modal .btn-success.dropdown-toggle {\n color: #fff;\n background-color: #449d44;\n border-color: #398439; }\n .embedpress-modal .btn-success:active:hover, .embedpress-modal .btn-success:active:focus, .embedpress-modal .btn-success:active.focus, .embedpress-modal .btn-success.active:hover, .embedpress-modal .btn-success.active:focus, .embedpress-modal .btn-success.active.focus,\n .open > .embedpress-modal .btn-success.dropdown-toggle:hover,\n .open > .embedpress-modal .btn-success.dropdown-toggle:focus,\n .open > .embedpress-modal .btn-success.dropdown-toggle.focus {\n color: #fff;\n background-color: #398439;\n border-color: #255625; }\n .embedpress-modal .btn-success:active, .embedpress-modal .btn-success.active,\n .open > .embedpress-modal .btn-success.dropdown-toggle {\n background-image: none; }\n .embedpress-modal .btn-success.disabled:hover, .embedpress-modal .btn-success.disabled:focus, .embedpress-modal .btn-success.disabled.focus, .embedpress-modal .btn-success[disabled]:hover, .embedpress-modal .btn-success[disabled]:focus, .embedpress-modal .btn-success[disabled].focus,\n fieldset[disabled] .embedpress-modal .btn-success:hover,\n fieldset[disabled] .embedpress-modal .btn-success:focus,\n fieldset[disabled] .embedpress-modal .btn-success.focus {\n background-color: #5cb85c;\n border-color: #4cae4c; }\n .embedpress-modal .btn-success .badge {\n color: #5cb85c;\n background-color: #fff; }\n\n.embedpress-modal .btn-info {\n color: #fff;\n background-color: #5bc0de;\n border-color: #46b8da; }\n .embedpress-modal .btn-info:focus, .embedpress-modal .btn-info.focus {\n color: #fff;\n background-color: #31b0d5;\n border-color: #1b6d85; }\n .embedpress-modal .btn-info:hover {\n color: #fff;\n background-color: #31b0d5;\n border-color: #269abc; }\n .embedpress-modal .btn-info:active, .embedpress-modal .btn-info.active,\n .open > .embedpress-modal .btn-info.dropdown-toggle {\n color: #fff;\n background-color: #31b0d5;\n border-color: #269abc; }\n .embedpress-modal .btn-info:active:hover, .embedpress-modal .btn-info:active:focus, .embedpress-modal .btn-info:active.focus, .embedpress-modal .btn-info.active:hover, .embedpress-modal .btn-info.active:focus, .embedpress-modal .btn-info.active.focus,\n .open > .embedpress-modal .btn-info.dropdown-toggle:hover,\n .open > .embedpress-modal .btn-info.dropdown-toggle:focus,\n .open > .embedpress-modal .btn-info.dropdown-toggle.focus {\n color: #fff;\n background-color: #269abc;\n border-color: #1b6d85; }\n .embedpress-modal .btn-info:active, .embedpress-modal .btn-info.active,\n .open > .embedpress-modal .btn-info.dropdown-toggle {\n background-image: none; }\n .embedpress-modal .btn-info.disabled:hover, .embedpress-modal .btn-info.disabled:focus, .embedpress-modal .btn-info.disabled.focus, .embedpress-modal .btn-info[disabled]:hover, .embedpress-modal .btn-info[disabled]:focus, .embedpress-modal .btn-info[disabled].focus,\n fieldset[disabled] .embedpress-modal .btn-info:hover,\n fieldset[disabled] .embedpress-modal .btn-info:focus,\n fieldset[disabled] .embedpress-modal .btn-info.focus {\n background-color: #5bc0de;\n border-color: #46b8da; }\n .embedpress-modal .btn-info .badge {\n color: #5bc0de;\n background-color: #fff; }\n\n.embedpress-modal .btn-warning {\n color: #fff;\n background-color: #f0ad4e;\n border-color: #eea236; }\n .embedpress-modal .btn-warning:focus, .embedpress-modal .btn-warning.focus {\n color: #fff;\n background-color: #ec971f;\n border-color: #985f0d; }\n .embedpress-modal .btn-warning:hover {\n color: #fff;\n background-color: #ec971f;\n border-color: #d58512; }\n .embedpress-modal .btn-warning:active, .embedpress-modal .btn-warning.active,\n .open > .embedpress-modal .btn-warning.dropdown-toggle {\n color: #fff;\n background-color: #ec971f;\n border-color: #d58512; }\n .embedpress-modal .btn-warning:active:hover, .embedpress-modal .btn-warning:active:focus, .embedpress-modal .btn-warning:active.focus, .embedpress-modal .btn-warning.active:hover, .embedpress-modal .btn-warning.active:focus, .embedpress-modal .btn-warning.active.focus,\n .open > .embedpress-modal .btn-warning.dropdown-toggle:hover,\n .open > .embedpress-modal .btn-warning.dropdown-toggle:focus,\n .open > .embedpress-modal .btn-warning.dropdown-toggle.focus {\n color: #fff;\n background-color: #d58512;\n border-color: #985f0d; }\n .embedpress-modal .btn-warning:active, .embedpress-modal .btn-warning.active,\n .open > .embedpress-modal .btn-warning.dropdown-toggle {\n background-image: none; }\n .embedpress-modal .btn-warning.disabled:hover, .embedpress-modal .btn-warning.disabled:focus, .embedpress-modal .btn-warning.disabled.focus, .embedpress-modal .btn-warning[disabled]:hover, .embedpress-modal .btn-warning[disabled]:focus, .embedpress-modal .btn-warning[disabled].focus,\n fieldset[disabled] .embedpress-modal .btn-warning:hover,\n fieldset[disabled] .embedpress-modal .btn-warning:focus,\n fieldset[disabled] .embedpress-modal .btn-warning.focus {\n background-color: #f0ad4e;\n border-color: #eea236; }\n .embedpress-modal .btn-warning .badge {\n color: #f0ad4e;\n background-color: #fff; }\n\n.embedpress-modal .btn-danger {\n color: #fff;\n background-color: #d9534f;\n border-color: #d43f3a; }\n .embedpress-modal .btn-danger:focus, .embedpress-modal .btn-danger.focus {\n color: #fff;\n background-color: #c9302c;\n border-color: #761c19; }\n .embedpress-modal .btn-danger:hover {\n color: #fff;\n background-color: #c9302c;\n border-color: #ac2925; }\n .embedpress-modal .btn-danger:active, .embedpress-modal .btn-danger.active,\n .open > .embedpress-modal .btn-danger.dropdown-toggle {\n color: #fff;\n background-color: #c9302c;\n border-color: #ac2925; }\n .embedpress-modal .btn-danger:active:hover, .embedpress-modal .btn-danger:active:focus, .embedpress-modal .btn-danger:active.focus, .embedpress-modal .btn-danger.active:hover, .embedpress-modal .btn-danger.active:focus, .embedpress-modal .btn-danger.active.focus,\n .open > .embedpress-modal .btn-danger.dropdown-toggle:hover,\n .open > .embedpress-modal .btn-danger.dropdown-toggle:focus,\n .open > .embedpress-modal .btn-danger.dropdown-toggle.focus {\n color: #fff;\n background-color: #ac2925;\n border-color: #761c19; }\n .embedpress-modal .btn-danger:active, .embedpress-modal .btn-danger.active,\n .open > .embedpress-modal .btn-danger.dropdown-toggle {\n background-image: none; }\n .embedpress-modal .btn-danger.disabled:hover, .embedpress-modal .btn-danger.disabled:focus, .embedpress-modal .btn-danger.disabled.focus, .embedpress-modal .btn-danger[disabled]:hover, .embedpress-modal .btn-danger[disabled]:focus, .embedpress-modal .btn-danger[disabled].focus,\n fieldset[disabled] .embedpress-modal .btn-danger:hover,\n fieldset[disabled] .embedpress-modal .btn-danger:focus,\n fieldset[disabled] .embedpress-modal .btn-danger.focus {\n background-color: #d9534f;\n border-color: #d43f3a; }\n .embedpress-modal .btn-danger .badge {\n color: #d9534f;\n background-color: #fff; }\n\n.embedpress-modal .btn-link {\n color: #337ab7;\n font-weight: normal;\n border-radius: 0; }\n .embedpress-modal .btn-link, .embedpress-modal .btn-link:active, .embedpress-modal .btn-link.active, .embedpress-modal .btn-link[disabled],\n fieldset[disabled] .embedpress-modal .btn-link {\n background-color: transparent;\n -webkit-box-shadow: none;\n box-shadow: none; }\n .embedpress-modal .btn-link, .embedpress-modal .btn-link:hover, .embedpress-modal .btn-link:focus, .embedpress-modal .btn-link:active {\n border-color: transparent; }\n .embedpress-modal .btn-link:hover, .embedpress-modal .btn-link:focus {\n color: #23527c;\n text-decoration: underline;\n background-color: transparent; }\n .embedpress-modal .btn-link[disabled]:hover, .embedpress-modal .btn-link[disabled]:focus,\n fieldset[disabled] .embedpress-modal .btn-link:hover,\n fieldset[disabled] .embedpress-modal .btn-link:focus {\n color: #777777;\n text-decoration: none; }\n\n.embedpress-modal .btn-lg, .embedpress-modal .btn-group-lg > .btn {\n padding: 10px 16px;\n font-size: 18px;\n line-height: 1.33333;\n border-radius: 6px; }\n\n.embedpress-modal .btn-sm, .embedpress-modal .btn-group-sm > .btn {\n padding: 5px 10px;\n font-size: 12px;\n line-height: 1.5;\n border-radius: 3px; }\n\n.embedpress-modal .btn-xs, .embedpress-modal .btn-group-xs > .btn {\n padding: 1px 5px;\n font-size: 12px;\n line-height: 1.5;\n border-radius: 3px; }\n\n.embedpress-modal .btn-block {\n display: block;\n width: 100%; }\n\n.embedpress-modal .btn-block + .btn-block {\n margin-top: 5px; }\n\n.embedpress-modal input[type=\"submit\"].btn-block,\n.embedpress-modal input[type=\"reset\"].btn-block,\n.embedpress-modal input[type=\"button\"].btn-block {\n width: 100%; }\n\n.embedpress-modal .btn-group,\n.embedpress-modal .btn-group-vertical {\n position: relative;\n display: inline-block;\n vertical-align: middle; }\n .embedpress-modal .btn-group > .btn,\n .embedpress-modal .btn-group-vertical > .btn {\n position: relative;\n float: left; }\n .embedpress-modal .btn-group > .btn:hover, .embedpress-modal .btn-group > .btn:focus, .embedpress-modal .btn-group > .btn:active, .embedpress-modal .btn-group > .btn.active,\n .embedpress-modal .btn-group-vertical > .btn:hover,\n .embedpress-modal .btn-group-vertical > .btn:focus,\n .embedpress-modal .btn-group-vertical > .btn:active,\n .embedpress-modal .btn-group-vertical > .btn.active {\n z-index: 2; }\n\n.embedpress-modal .btn-group .btn + .btn,\n.embedpress-modal .btn-group .btn + .btn-group,\n.embedpress-modal .btn-group .btn-group + .btn,\n.embedpress-modal .btn-group .btn-group + .btn-group {\n margin-left: -1px; }\n\n.embedpress-modal .btn-toolbar {\n margin-left: -5px; }\n .embedpress-modal .btn-toolbar:before, .embedpress-modal .btn-toolbar:after {\n content: \" \";\n display: table; }\n .embedpress-modal .btn-toolbar:after {\n clear: both; }\n .embedpress-modal .btn-toolbar .btn,\n .embedpress-modal .btn-toolbar .btn-group,\n .embedpress-modal .btn-toolbar .input-group {\n float: left; }\n .embedpress-modal .btn-toolbar > .btn,\n .embedpress-modal .btn-toolbar > .btn-group,\n .embedpress-modal .btn-toolbar > .input-group {\n margin-left: 5px; }\n\n.embedpress-modal .btn-group > .btn:not(:first-child):not(:last-child):not(.dropdown-toggle) {\n border-radius: 0; }\n\n.embedpress-modal .btn-group > .btn:first-child {\n margin-left: 0; }\n .embedpress-modal .btn-group > .btn:first-child:not(:last-child):not(.dropdown-toggle) {\n border-bottom-right-radius: 0;\n border-top-right-radius: 0; }\n\n.embedpress-modal .btn-group > .btn:last-child:not(:first-child),\n.embedpress-modal .btn-group > .dropdown-toggle:not(:first-child) {\n border-bottom-left-radius: 0;\n border-top-left-radius: 0; }\n\n.embedpress-modal .btn-group > .btn-group {\n float: left; }\n\n.embedpress-modal .btn-group > .btn-group:not(:first-child):not(:last-child) > .btn {\n border-radius: 0; }\n\n.embedpress-modal .btn-group > .btn-group:first-child:not(:last-child) > .btn:last-child,\n.embedpress-modal .btn-group > .btn-group:first-child:not(:last-child) > .dropdown-toggle {\n border-bottom-right-radius: 0;\n border-top-right-radius: 0; }\n\n.embedpress-modal .btn-group > .btn-group:last-child:not(:first-child) > .btn:first-child {\n border-bottom-left-radius: 0;\n border-top-left-radius: 0; }\n\n.embedpress-modal .btn-group .dropdown-toggle:active,\n.embedpress-modal .btn-group.open .dropdown-toggle {\n outline: 0; }\n\n.embedpress-modal .btn-group > .btn + .dropdown-toggle {\n padding-left: 8px;\n padding-right: 8px; }\n\n.embedpress-modal .btn-group > .btn-lg + .dropdown-toggle, .embedpress-modal .btn-group-lg.btn-group > .btn + .dropdown-toggle {\n padding-left: 12px;\n padding-right: 12px; }\n\n.embedpress-modal .btn-group.open .dropdown-toggle {\n -webkit-box-shadow: inset 0 3px 5px rgba(0, 0, 0, 0.125);\n box-shadow: inset 0 3px 5px rgba(0, 0, 0, 0.125); }\n .embedpress-modal .btn-group.open .dropdown-toggle.btn-link {\n -webkit-box-shadow: none;\n box-shadow: none; }\n\n.embedpress-modal .btn .caret {\n margin-left: 0; }\n\n.embedpress-modal .btn-lg .caret, .embedpress-modal .btn-group-lg > .btn .caret {\n border-width: 5px 5px 0;\n border-bottom-width: 0; }\n\n.embedpress-modal .dropup .btn-lg .caret, .embedpress-modal .dropup .btn-group-lg > .btn .caret {\n border-width: 0 5px 5px; }\n\n.embedpress-modal .btn-group-vertical > .btn,\n.embedpress-modal .btn-group-vertical > .btn-group,\n.embedpress-modal .btn-group-vertical > .btn-group > .btn {\n display: block;\n float: none;\n width: 100%;\n max-width: 100%; }\n\n.embedpress-modal .btn-group-vertical > .btn-group:before, .embedpress-modal .btn-group-vertical > .btn-group:after {\n content: \" \";\n display: table; }\n\n.embedpress-modal .btn-group-vertical > .btn-group:after {\n clear: both; }\n\n.embedpress-modal .btn-group-vertical > .btn-group > .btn {\n float: none; }\n\n.embedpress-modal .btn-group-vertical > .btn + .btn,\n.embedpress-modal .btn-group-vertical > .btn + .btn-group,\n.embedpress-modal .btn-group-vertical > .btn-group + .btn,\n.embedpress-modal .btn-group-vertical > .btn-group + .btn-group {\n margin-top: -1px;\n margin-left: 0; }\n\n.embedpress-modal .btn-group-vertical > .btn:not(:first-child):not(:last-child) {\n border-radius: 0; }\n\n.embedpress-modal .btn-group-vertical > .btn:first-child:not(:last-child) {\n border-top-right-radius: 4px;\n border-top-left-radius: 4px;\n border-bottom-right-radius: 0;\n border-bottom-left-radius: 0; }\n\n.embedpress-modal .btn-group-vertical > .btn:last-child:not(:first-child) {\n border-top-right-radius: 0;\n border-top-left-radius: 0;\n border-bottom-right-radius: 4px;\n border-bottom-left-radius: 4px; }\n\n.embedpress-modal .btn-group-vertical > .btn-group:not(:first-child):not(:last-child) > .btn {\n border-radius: 0; }\n\n.embedpress-modal .btn-group-vertical > .btn-group:first-child:not(:last-child) > .btn:last-child,\n.embedpress-modal .btn-group-vertical > .btn-group:first-child:not(:last-child) > .dropdown-toggle {\n border-bottom-right-radius: 0;\n border-bottom-left-radius: 0; }\n\n.embedpress-modal .btn-group-vertical > .btn-group:last-child:not(:first-child) > .btn:first-child {\n border-top-right-radius: 0;\n border-top-left-radius: 0; }\n\n.embedpress-modal .btn-group-justified {\n display: table;\n width: 100%;\n table-layout: fixed;\n border-collapse: separate; }\n .embedpress-modal .btn-group-justified > .btn,\n .embedpress-modal .btn-group-justified > .btn-group {\n float: none;\n display: table-cell;\n width: 1%; }\n .embedpress-modal .btn-group-justified > .btn-group .btn {\n width: 100%; }\n .embedpress-modal .btn-group-justified > .btn-group .dropdown-menu {\n left: auto; }\n\n.embedpress-modal [data-toggle=\"buttons\"] > .btn input[type=\"radio\"],\n.embedpress-modal [data-toggle=\"buttons\"] > .btn input[type=\"checkbox\"],\n.embedpress-modal [data-toggle=\"buttons\"] > .btn-group > .btn input[type=\"radio\"],\n.embedpress-modal [data-toggle=\"buttons\"] > .btn-group > .btn input[type=\"checkbox\"] {\n position: absolute;\n clip: rect(0, 0, 0, 0);\n pointer-events: none; }\n\n.embedpress-modal .input-group {\n position: relative;\n display: table;\n border-collapse: separate; }\n .embedpress-modal .input-group[class*=\"col-\"] {\n float: none;\n padding-left: 0;\n padding-right: 0; }\n .embedpress-modal .input-group .form-control {\n position: relative;\n z-index: 2;\n float: left;\n width: 100%;\n margin-bottom: 0; }\n .embedpress-modal .input-group .form-control:focus {\n z-index: 3; }\n\n.embedpress-modal .input-group-addon,\n.embedpress-modal .input-group-btn,\n.embedpress-modal .input-group .form-control {\n display: table-cell; }\n .embedpress-modal .input-group-addon:not(:first-child):not(:last-child),\n .embedpress-modal .input-group-btn:not(:first-child):not(:last-child),\n .embedpress-modal .input-group .form-control:not(:first-child):not(:last-child) {\n border-radius: 0; }\n\n.embedpress-modal .input-group-addon,\n.embedpress-modal .input-group-btn {\n width: 1%;\n white-space: nowrap;\n vertical-align: middle; }\n\n.embedpress-modal .input-group-addon {\n padding: 6px 12px;\n font-size: 14px;\n font-weight: normal;\n line-height: 1;\n color: #555555;\n text-align: center;\n background-color: #eeeeee;\n border: 1px solid #ccc;\n border-radius: 4px; }\n .embedpress-modal .input-group-addon.input-sm, .embedpress-modal .input-group-sm > .input-group-addon, .embedpress-modal .input-group-sm > .input-group-btn > .input-group-addon.btn {\n padding: 5px 10px;\n font-size: 12px;\n border-radius: 3px; }\n .embedpress-modal .input-group-addon.input-lg, .embedpress-modal .input-group-lg > .input-group-addon, .embedpress-modal .input-group-lg > .input-group-btn > .input-group-addon.btn {\n padding: 10px 16px;\n font-size: 18px;\n border-radius: 6px; }\n .embedpress-modal .input-group-addon input[type=\"radio\"],\n .embedpress-modal .input-group-addon input[type=\"checkbox\"] {\n margin-top: 0; }\n\n.embedpress-modal .input-group .form-control:first-child,\n.embedpress-modal .input-group-addon:first-child,\n.embedpress-modal .input-group-btn:first-child > .btn,\n.embedpress-modal .input-group-btn:first-child > .btn-group > .btn,\n.embedpress-modal .input-group-btn:first-child > .dropdown-toggle,\n.embedpress-modal .input-group-btn:last-child > .btn:not(:last-child):not(.dropdown-toggle),\n.embedpress-modal .input-group-btn:last-child > .btn-group:not(:last-child) > .btn {\n border-bottom-right-radius: 0;\n border-top-right-radius: 0; }\n\n.embedpress-modal .input-group-addon:first-child {\n border-right: 0; }\n\n.embedpress-modal .input-group .form-control:last-child,\n.embedpress-modal .input-group-addon:last-child,\n.embedpress-modal .input-group-btn:last-child > .btn,\n.embedpress-modal .input-group-btn:last-child > .btn-group > .btn,\n.embedpress-modal .input-group-btn:last-child > .dropdown-toggle,\n.embedpress-modal .input-group-btn:first-child > .btn:not(:first-child),\n.embedpress-modal .input-group-btn:first-child > .btn-group:not(:first-child) > .btn {\n border-bottom-left-radius: 0;\n border-top-left-radius: 0; }\n\n.embedpress-modal .input-group-addon:last-child {\n border-left: 0; }\n\n.embedpress-modal .input-group-btn {\n position: relative;\n font-size: 0;\n white-space: nowrap; }\n .embedpress-modal .input-group-btn > .btn {\n position: relative; }\n .embedpress-modal .input-group-btn > .btn + .btn {\n margin-left: -1px; }\n .embedpress-modal .input-group-btn > .btn:hover, .embedpress-modal .input-group-btn > .btn:focus, .embedpress-modal .input-group-btn > .btn:active {\n z-index: 2; }\n .embedpress-modal .input-group-btn:first-child > .btn,\n .embedpress-modal .input-group-btn:first-child > .btn-group {\n margin-right: -1px; }\n .embedpress-modal .input-group-btn:last-child > .btn,\n .embedpress-modal .input-group-btn:last-child > .btn-group {\n z-index: 2;\n margin-left: -1px; }\n\n.embedpress-modal .close {\n float: right;\n font-size: 21px;\n font-weight: bold;\n line-height: 1;\n color: #000;\n text-shadow: 0 1px 0 #fff;\n opacity: 0.2;\n filter: alpha(opacity=20); }\n .embedpress-modal .close:hover, .embedpress-modal .close:focus {\n color: #000;\n text-decoration: none;\n cursor: pointer;\n opacity: 0.5;\n filter: alpha(opacity=50); }\n\n.embedpress-modal button.close {\n padding: 0;\n cursor: pointer;\n background: transparent;\n border: 0;\n -webkit-appearance: none; }\n\n.modal-open {\n overflow: hidden; }\n\n.modal {\n display: none;\n overflow: hidden;\n position: fixed;\n top: 0;\n right: 0;\n bottom: 0;\n left: 0;\n z-index: 1050;\n -webkit-overflow-scrolling: touch;\n outline: 0; }\n .modal.fade .modal-dialog {\n -webkit-transform: translate(0, -25%);\n -ms-transform: translate(0, -25%);\n -o-transform: translate(0, -25%);\n transform: translate(0, -25%);\n -webkit-transition: -webkit-transform 0.3s ease-out;\n -moz-transition: -moz-transform 0.3s ease-out;\n -o-transition: -o-transform 0.3s ease-out;\n transition: transform 0.3s ease-out; }\n .modal.in .modal-dialog {\n -webkit-transform: translate(0, 0);\n -ms-transform: translate(0, 0);\n -o-transform: translate(0, 0);\n transform: translate(0, 0); }\n\n.modal-open .modal {\n overflow-x: hidden;\n overflow-y: auto; }\n\n.modal-dialog {\n position: relative;\n width: auto;\n margin: 10px; }\n\n.modal-content {\n position: relative;\n background-color: #fff;\n border: 1px solid #999;\n border: 1px solid rgba(0, 0, 0, 0.2);\n border-radius: 6px;\n -webkit-box-shadow: 0 3px 9px rgba(0, 0, 0, 0.5);\n box-shadow: 0 3px 9px rgba(0, 0, 0, 0.5);\n background-clip: padding-box;\n outline: 0; }\n\n.modal-backdrop {\n position: fixed;\n top: 0;\n right: 0;\n bottom: 0;\n left: 0;\n z-index: 1040;\n background-color: #000; }\n .modal-backdrop.fade {\n opacity: 0;\n filter: alpha(opacity=0); }\n .modal-backdrop.in {\n opacity: 0.5;\n filter: alpha(opacity=50); }\n\n.modal-header {\n padding: 15px;\n border-bottom: 1px solid #e5e5e5; }\n .modal-header:before, .modal-header:after {\n content: \" \";\n display: table; }\n .modal-header:after {\n clear: both; }\n\n.modal-header .close {\n margin-top: -2px; }\n\n.modal-title {\n margin: 0;\n line-height: 1.42857; }\n\n.modal-body {\n position: relative;\n padding: 15px; }\n\n.modal-footer {\n padding: 15px;\n text-align: right;\n border-top: 1px solid #e5e5e5; }\n .modal-footer:before, .modal-footer:after {\n content: \" \";\n display: table; }\n .modal-footer:after {\n clear: both; }\n .modal-footer .btn + .btn {\n margin-left: 5px;\n margin-bottom: 0; }\n .modal-footer .btn-group .btn + .btn {\n margin-left: -1px; }\n .modal-footer .btn-block + .btn-block {\n margin-left: 0; }\n\n.modal-scrollbar-measure {\n position: absolute;\n top: -9999px;\n width: 50px;\n height: 50px;\n overflow: scroll; }\n\n@media (min-width: 768px) {\n .modal-dialog {\n width: 600px;\n margin: 30px auto; }\n .modal-content {\n -webkit-box-shadow: 0 5px 15px rgba(0, 0, 0, 0.5);\n box-shadow: 0 5px 15px rgba(0, 0, 0, 0.5); }\n .modal-sm {\n width: 300px; } }\n\n@media (min-width: 992px) {\n .modal-lg {\n width: 900px; } }\n\n@-ms-viewport {\n width: device-width; }\n\n.visible-xs {\n display: none !important; }\n\n.visible-sm {\n display: none !important; }\n\n.visible-md {\n display: none !important; }\n\n.visible-lg {\n display: none !important; }\n\n.visible-xs-block,\n.visible-xs-inline,\n.visible-xs-inline-block,\n.visible-sm-block,\n.visible-sm-inline,\n.visible-sm-inline-block,\n.visible-md-block,\n.visible-md-inline,\n.visible-md-inline-block,\n.visible-lg-block,\n.visible-lg-inline,\n.visible-lg-inline-block {\n display: none !important; }\n\n@media (max-width: 767px) {\n .visible-xs {\n display: block !important; }\n table.visible-xs {\n display: table !important; }\n tr.visible-xs {\n display: table-row !important; }\n th.visible-xs,\n td.visible-xs {\n display: table-cell !important; } }\n\n@media (max-width: 767px) {\n .visible-xs-block {\n display: block !important; } }\n\n@media (max-width: 767px) {\n .visible-xs-inline {\n display: inline !important; } }\n\n@media (max-width: 767px) {\n .visible-xs-inline-block {\n display: inline-block !important; } }\n\n@media (min-width: 768px) and (max-width: 991px) {\n .visible-sm {\n display: block !important; }\n table.visible-sm {\n display: table !important; }\n tr.visible-sm {\n display: table-row !important; }\n th.visible-sm,\n td.visible-sm {\n display: table-cell !important; } }\n\n@media (min-width: 768px) and (max-width: 991px) {\n .visible-sm-block {\n display: block !important; } }\n\n@media (min-width: 768px) and (max-width: 991px) {\n .visible-sm-inline {\n display: inline !important; } }\n\n@media (min-width: 768px) and (max-width: 991px) {\n .visible-sm-inline-block {\n display: inline-block !important; } }\n\n@media (min-width: 992px) and (max-width: 1199px) {\n .visible-md {\n display: block !important; }\n table.visible-md {\n display: table !important; }\n tr.visible-md {\n display: table-row !important; }\n th.visible-md,\n td.visible-md {\n display: table-cell !important; } }\n\n@media (min-width: 992px) and (max-width: 1199px) {\n .visible-md-block {\n display: block !important; } }\n\n@media (min-width: 992px) and (max-width: 1199px) {\n .visible-md-inline {\n display: inline !important; } }\n\n@media (min-width: 992px) and (max-width: 1199px) {\n .visible-md-inline-block {\n display: inline-block !important; } }\n\n@media (min-width: 1200px) {\n .visible-lg {\n display: block !important; }\n table.visible-lg {\n display: table !important; }\n tr.visible-lg {\n display: table-row !important; }\n th.visible-lg,\n td.visible-lg {\n display: table-cell !important; } }\n\n@media (min-width: 1200px) {\n .visible-lg-block {\n display: block !important; } }\n\n@media (min-width: 1200px) {\n .visible-lg-inline {\n display: inline !important; } }\n\n@media (min-width: 1200px) {\n .visible-lg-inline-block {\n display: inline-block !important; } }\n\n@media (max-width: 767px) {\n .hidden-xs {\n display: none !important; } }\n\n@media (min-width: 768px) and (max-width: 991px) {\n .hidden-sm {\n display: none !important; } }\n\n@media (min-width: 992px) and (max-width: 1199px) {\n .hidden-md {\n display: none !important; } }\n\n@media (min-width: 1200px) {\n .hidden-lg {\n display: none !important; } }\n\n.visible-print {\n display: none !important; }\n\n@media print {\n .visible-print {\n display: block !important; }\n table.visible-print {\n display: table !important; }\n tr.visible-print {\n display: table-row !important; }\n th.visible-print,\n td.visible-print {\n display: table-cell !important; } }\n\n.visible-print-block {\n display: none !important; }\n @media print {\n .visible-print-block {\n display: block !important; } }\n\n.visible-print-inline {\n display: none !important; }\n @media print {\n .visible-print-inline {\n display: inline !important; } }\n\n.visible-print-inline-block {\n display: none !important; }\n @media print {\n .visible-print-inline-block {\n display: inline-block !important; } }\n\n@media print {\n .hidden-print {\n display: none !important; } }\n"],"sourceRoot":"/source/"}
 
 
 
 
 
 
 
 
 
 
 
 
1
+ {
2
+ "version": 3,
3
+ "sources": [
4
+ "bootstrap.css"
5
+ ],
6
+ "names": [],
7
+ "mappings": "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",
8
+ "file": "bootstrap.css",
9
+ "sourcesContent": [
10
+ ".embedpress-modal fieldset {\n padding: 0;\n margin: 0;\n border: 0;\n min-width: 0; }\n\n.embedpress-modal legend {\n display: block;\n width: 100%;\n padding: 0;\n margin-bottom: 20px;\n font-size: 21px;\n line-height: inherit;\n color: #333333;\n border: 0;\n border-bottom: 1px solid #e5e5e5; }\n\n.embedpress-modal label {\n display: inline-block;\n max-width: 100%;\n margin-bottom: 5px;\n font-weight: bold; }\n\n.embedpress-modal input[type=\"search\"] {\n -webkit-box-sizing: border-box;\n -moz-box-sizing: border-box;\n box-sizing: border-box; }\n\n.embedpress-modal input[type=\"radio\"],\n.embedpress-modal input[type=\"checkbox\"] {\n margin: 4px 0 0;\n margin-top: 1px \\9;\n line-height: normal; }\n\n.embedpress-modal input[type=\"file\"] {\n display: block; }\n\n.embedpress-modal input[type=\"range\"] {\n display: block;\n width: 100%; }\n\n.embedpress-modal select[multiple],\n.embedpress-modal select[size] {\n height: auto; }\n\n.embedpress-modal input[type=\"file\"]:focus,\n.embedpress-modal input[type=\"radio\"]:focus,\n.embedpress-modal input[type=\"checkbox\"]:focus {\n outline: 5px auto -webkit-focus-ring-color;\n outline-offset: -2px; }\n\n.embedpress-modal output {\n display: block;\n padding-top: 7px;\n font-size: 14px;\n line-height: 1.42857;\n color: #555555; }\n\n.embedpress-modal .form-control {\n display: block;\n width: 100%;\n height: 34px;\n padding: 6px 12px;\n font-size: 14px;\n line-height: 1.42857;\n color: #555555;\n background-color: #fff;\n background-image: none;\n border: 1px solid #ccc;\n border-radius: 4px;\n -webkit-box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.075);\n box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.075);\n -webkit-transition: border-color ease-in-out 0.15s, box-shadow ease-in-out 0.15s;\n -o-transition: border-color ease-in-out 0.15s, box-shadow ease-in-out 0.15s;\n transition: border-color ease-in-out 0.15s, box-shadow ease-in-out 0.15s; }\n .embedpress-modal .form-control:focus {\n border-color: #66afe9;\n outline: 0;\n -webkit-box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.075), 0 0 8px rgba(102, 175, 233, 0.6);\n box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.075), 0 0 8px rgba(102, 175, 233, 0.6); }\n .embedpress-modal .form-control::-moz-placeholder {\n color: #999;\n opacity: 1; }\n .embedpress-modal .form-control:-ms-input-placeholder {\n color: #999; }\n .embedpress-modal .form-control::-webkit-input-placeholder {\n color: #999; }\n .embedpress-modal .form-control::-ms-expand {\n border: 0;\n background-color: transparent; }\n .embedpress-modal .form-control[disabled], .embedpress-modal .form-control[readonly],\n fieldset[disabled] .embedpress-modal .form-control {\n background-color: #eeeeee;\n opacity: 1; }\n .embedpress-modal .form-control[disabled],\n fieldset[disabled] .embedpress-modal .form-control {\n cursor: not-allowed; }\n\n.embedpress-modal textarea.form-control {\n height: auto; }\n\n.embedpress-modal input[type=\"search\"] {\n -webkit-appearance: none; }\n\n@media screen and (-webkit-min-device-pixel-ratio: 0) {\n .embedpress-modal input[type=\"date\"].form-control,\n .embedpress-modal input[type=\"time\"].form-control,\n .embedpress-modal input[type=\"datetime-local\"].form-control,\n .embedpress-modal input[type=\"month\"].form-control {\n line-height: 34px; }\n .embedpress-modal input[type=\"date\"].input-sm, .embedpress-modal .input-group-sm > input[type=\"date\"].form-control, .embedpress-modal .input-group-sm > input[type=\"date\"].input-group-addon, .embedpress-modal .input-group-sm > .input-group-btn > input[type=\"date\"].btn,\n .input-group-sm .embedpress-modal input[type=\"date\"],\n .embedpress-modal input[type=\"time\"].input-sm, .embedpress-modal .input-group-sm > input[type=\"time\"].form-control, .embedpress-modal .input-group-sm > input[type=\"time\"].input-group-addon, .embedpress-modal .input-group-sm > .input-group-btn > input[type=\"time\"].btn,\n .input-group-sm\n .embedpress-modal input[type=\"time\"],\n .embedpress-modal input[type=\"datetime-local\"].input-sm, .embedpress-modal .input-group-sm > input[type=\"datetime-local\"].form-control, .embedpress-modal .input-group-sm > input[type=\"datetime-local\"].input-group-addon, .embedpress-modal .input-group-sm > .input-group-btn > input[type=\"datetime-local\"].btn,\n .input-group-sm\n .embedpress-modal input[type=\"datetime-local\"],\n .embedpress-modal input[type=\"month\"].input-sm, .embedpress-modal .input-group-sm > input[type=\"month\"].form-control, .embedpress-modal .input-group-sm > input[type=\"month\"].input-group-addon, .embedpress-modal .input-group-sm > .input-group-btn > input[type=\"month\"].btn,\n .input-group-sm\n .embedpress-modal input[type=\"month\"] {\n line-height: 30px; }\n .embedpress-modal input[type=\"date\"].input-lg, .embedpress-modal .input-group-lg > input[type=\"date\"].form-control, .embedpress-modal .input-group-lg > input[type=\"date\"].input-group-addon, .embedpress-modal .input-group-lg > .input-group-btn > input[type=\"date\"].btn,\n .input-group-lg .embedpress-modal input[type=\"date\"],\n .embedpress-modal input[type=\"time\"].input-lg, .embedpress-modal .input-group-lg > input[type=\"time\"].form-control, .embedpress-modal .input-group-lg > input[type=\"time\"].input-group-addon, .embedpress-modal .input-group-lg > .input-group-btn > input[type=\"time\"].btn,\n .input-group-lg\n .embedpress-modal input[type=\"time\"],\n .embedpress-modal input[type=\"datetime-local\"].input-lg, .embedpress-modal .input-group-lg > input[type=\"datetime-local\"].form-control, .embedpress-modal .input-group-lg > input[type=\"datetime-local\"].input-group-addon, .embedpress-modal .input-group-lg > .input-group-btn > input[type=\"datetime-local\"].btn,\n .input-group-lg\n .embedpress-modal input[type=\"datetime-local\"],\n .embedpress-modal input[type=\"month\"].input-lg, .embedpress-modal .input-group-lg > input[type=\"month\"].form-control, .embedpress-modal .input-group-lg > input[type=\"month\"].input-group-addon, .embedpress-modal .input-group-lg > .input-group-btn > input[type=\"month\"].btn,\n .input-group-lg\n .embedpress-modal input[type=\"month\"] {\n line-height: 46px; } }\n\n.embedpress-modal .form-group {\n margin-bottom: 15px; }\n\n.embedpress-modal .radio,\n.embedpress-modal .checkbox {\n position: relative;\n display: block;\n margin-top: 10px;\n margin-bottom: 10px; }\n .embedpress-modal .radio label,\n .embedpress-modal .checkbox label {\n min-height: 20px;\n padding-left: 20px;\n margin-bottom: 0;\n font-weight: normal;\n cursor: pointer; }\n\n.embedpress-modal .radio input[type=\"radio\"],\n.embedpress-modal .radio-inline input[type=\"radio\"],\n.embedpress-modal .checkbox input[type=\"checkbox\"],\n.embedpress-modal .checkbox-inline input[type=\"checkbox\"] {\n position: absolute;\n margin-left: -20px;\n margin-top: 4px \\9; }\n\n.embedpress-modal .radio + .radio,\n.embedpress-modal .checkbox + .checkbox {\n margin-top: -5px; }\n\n.embedpress-modal .radio-inline,\n.embedpress-modal .checkbox-inline {\n position: relative;\n display: inline-block;\n padding-left: 20px;\n margin-bottom: 0;\n vertical-align: middle;\n font-weight: normal;\n cursor: pointer; }\n\n.embedpress-modal .radio-inline + .radio-inline,\n.embedpress-modal .checkbox-inline + .checkbox-inline {\n margin-top: 0;\n margin-left: 10px; }\n\n.embedpress-modal input[type=\"radio\"][disabled], .embedpress-modal input[type=\"radio\"].disabled,\nfieldset[disabled] .embedpress-modal input[type=\"radio\"],\n.embedpress-modal input[type=\"checkbox\"][disabled],\n.embedpress-modal input[type=\"checkbox\"].disabled,\nfieldset[disabled]\n.embedpress-modal input[type=\"checkbox\"] {\n cursor: not-allowed; }\n\n.embedpress-modal .radio-inline.disabled,\nfieldset[disabled] .embedpress-modal .radio-inline,\n.embedpress-modal .checkbox-inline.disabled,\nfieldset[disabled]\n.embedpress-modal .checkbox-inline {\n cursor: not-allowed; }\n\n.embedpress-modal .radio.disabled label,\nfieldset[disabled] .embedpress-modal .radio label,\n.embedpress-modal .checkbox.disabled label,\nfieldset[disabled]\n.embedpress-modal .checkbox label {\n cursor: not-allowed; }\n\n.embedpress-modal .form-control-static {\n padding-top: 7px;\n padding-bottom: 7px;\n margin-bottom: 0;\n min-height: 34px; }\n .embedpress-modal .form-control-static.input-lg, .embedpress-modal .input-group-lg > .form-control-static.form-control, .embedpress-modal .input-group-lg > .form-control-static.input-group-addon, .embedpress-modal .input-group-lg > .input-group-btn > .form-control-static.btn, .embedpress-modal .form-control-static.input-sm, .embedpress-modal .input-group-sm > .form-control-static.form-control, .embedpress-modal .input-group-sm > .form-control-static.input-group-addon, .embedpress-modal .input-group-sm > .input-group-btn > .form-control-static.btn {\n padding-left: 0;\n padding-right: 0; }\n\n.embedpress-modal .input-sm, .embedpress-modal .input-group-sm > .form-control, .embedpress-modal .input-group-sm > .input-group-addon, .embedpress-modal .input-group-sm > .input-group-btn > .btn {\n height: 30px;\n padding: 5px 10px;\n font-size: 12px;\n line-height: 1.5;\n border-radius: 3px; }\n\n.embedpress-modal select.input-sm, .embedpress-modal .input-group-sm > select.form-control, .embedpress-modal .input-group-sm > select.input-group-addon, .embedpress-modal .input-group-sm > .input-group-btn > select.btn {\n height: 30px;\n line-height: 30px; }\n\n.embedpress-modal textarea.input-sm, .embedpress-modal .input-group-sm > textarea.form-control, .embedpress-modal .input-group-sm > textarea.input-group-addon, .embedpress-modal .input-group-sm > .input-group-btn > textarea.btn,\n.embedpress-modal select[multiple].input-sm, .embedpress-modal .input-group-sm > select[multiple].form-control, .embedpress-modal .input-group-sm > select[multiple].input-group-addon, .embedpress-modal .input-group-sm > .input-group-btn > select[multiple].btn {\n height: auto; }\n\n.embedpress-modal .form-group-sm .form-control {\n height: 30px;\n padding: 5px 10px;\n font-size: 12px;\n line-height: 1.5;\n border-radius: 3px; }\n\n.embedpress-modal .form-group-sm select.form-control {\n height: 30px;\n line-height: 30px; }\n\n.embedpress-modal .form-group-sm textarea.form-control,\n.embedpress-modal .form-group-sm select[multiple].form-control {\n height: auto; }\n\n.embedpress-modal .form-group-sm .form-control-static {\n height: 30px;\n min-height: 32px;\n padding: 6px 10px;\n font-size: 12px;\n line-height: 1.5; }\n\n.embedpress-modal .input-lg, .embedpress-modal .input-group-lg > .form-control, .embedpress-modal .input-group-lg > .input-group-addon, .embedpress-modal .input-group-lg > .input-group-btn > .btn {\n height: 46px;\n padding: 10px 16px;\n font-size: 18px;\n line-height: 1.33333;\n border-radius: 6px; }\n\n.embedpress-modal select.input-lg, .embedpress-modal .input-group-lg > select.form-control, .embedpress-modal .input-group-lg > select.input-group-addon, .embedpress-modal .input-group-lg > .input-group-btn > select.btn {\n height: 46px;\n line-height: 46px; }\n\n.embedpress-modal textarea.input-lg, .embedpress-modal .input-group-lg > textarea.form-control, .embedpress-modal .input-group-lg > textarea.input-group-addon, .embedpress-modal .input-group-lg > .input-group-btn > textarea.btn,\n.embedpress-modal select[multiple].input-lg, .embedpress-modal .input-group-lg > select[multiple].form-control, .embedpress-modal .input-group-lg > select[multiple].input-group-addon, .embedpress-modal .input-group-lg > .input-group-btn > select[multiple].btn {\n height: auto; }\n\n.embedpress-modal .form-group-lg .form-control {\n height: 46px;\n padding: 10px 16px;\n font-size: 18px;\n line-height: 1.33333;\n border-radius: 6px; }\n\n.embedpress-modal .form-group-lg select.form-control {\n height: 46px;\n line-height: 46px; }\n\n.embedpress-modal .form-group-lg textarea.form-control,\n.embedpress-modal .form-group-lg select[multiple].form-control {\n height: auto; }\n\n.embedpress-modal .form-group-lg .form-control-static {\n height: 46px;\n min-height: 38px;\n padding: 11px 16px;\n font-size: 18px;\n line-height: 1.33333; }\n\n.embedpress-modal .has-feedback {\n position: relative; }\n .embedpress-modal .has-feedback .form-control {\n padding-right: 42.5px; }\n\n.embedpress-modal .form-control-feedback {\n position: absolute;\n top: 0;\n right: 0;\n z-index: 2;\n display: block;\n width: 34px;\n height: 34px;\n line-height: 34px;\n text-align: center;\n pointer-events: none; }\n\n.embedpress-modal .input-lg + .form-control-feedback, .embedpress-modal .input-group-lg > .form-control + .form-control-feedback, .embedpress-modal .input-group-lg > .input-group-addon + .form-control-feedback, .embedpress-modal .input-group-lg > .input-group-btn > .btn + .form-control-feedback,\n.embedpress-modal .input-group-lg + .form-control-feedback,\n.embedpress-modal .form-group-lg .form-control + .form-control-feedback {\n width: 46px;\n height: 46px;\n line-height: 46px; }\n\n.embedpress-modal .input-sm + .form-control-feedback, .embedpress-modal .input-group-sm > .form-control + .form-control-feedback, .embedpress-modal .input-group-sm > .input-group-addon + .form-control-feedback, .embedpress-modal .input-group-sm > .input-group-btn > .btn + .form-control-feedback,\n.embedpress-modal .input-group-sm + .form-control-feedback,\n.embedpress-modal .form-group-sm .form-control + .form-control-feedback {\n width: 30px;\n height: 30px;\n line-height: 30px; }\n\n.embedpress-modal .has-success .help-block,\n.embedpress-modal .has-success .control-label,\n.embedpress-modal .has-success .radio,\n.embedpress-modal .has-success .checkbox,\n.embedpress-modal .has-success .radio-inline,\n.embedpress-modal .has-success .checkbox-inline,\n.embedpress-modal .has-success.radio label,\n.embedpress-modal .has-success.checkbox label,\n.embedpress-modal .has-success.radio-inline label,\n.embedpress-modal .has-success.checkbox-inline label {\n color: #3c763d; }\n\n.embedpress-modal .has-success .form-control {\n border-color: #3c763d;\n -webkit-box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.075);\n box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.075); }\n .embedpress-modal .has-success .form-control:focus {\n border-color: #2b542c;\n -webkit-box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.075), 0 0 6px #67b168;\n box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.075), 0 0 6px #67b168; }\n\n.embedpress-modal .has-success .input-group-addon {\n color: #3c763d;\n border-color: #3c763d;\n background-color: #dff0d8; }\n\n.embedpress-modal .has-success .form-control-feedback {\n color: #3c763d; }\n\n.embedpress-modal .has-warning .help-block,\n.embedpress-modal .has-warning .control-label,\n.embedpress-modal .has-warning .radio,\n.embedpress-modal .has-warning .checkbox,\n.embedpress-modal .has-warning .radio-inline,\n.embedpress-modal .has-warning .checkbox-inline,\n.embedpress-modal .has-warning.radio label,\n.embedpress-modal .has-warning.checkbox label,\n.embedpress-modal .has-warning.radio-inline label,\n.embedpress-modal .has-warning.checkbox-inline label {\n color: #8a6d3b; }\n\n.embedpress-modal .has-warning .form-control {\n border-color: #8a6d3b;\n -webkit-box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.075);\n box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.075); }\n .embedpress-modal .has-warning .form-control:focus {\n border-color: #66512c;\n -webkit-box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.075), 0 0 6px #c0a16b;\n box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.075), 0 0 6px #c0a16b; }\n\n.embedpress-modal .has-warning .input-group-addon {\n color: #8a6d3b;\n border-color: #8a6d3b;\n background-color: #fcf8e3; }\n\n.embedpress-modal .has-warning .form-control-feedback {\n color: #8a6d3b; }\n\n.embedpress-modal .has-error .help-block,\n.embedpress-modal .has-error .control-label,\n.embedpress-modal .has-error .radio,\n.embedpress-modal .has-error .checkbox,\n.embedpress-modal .has-error .radio-inline,\n.embedpress-modal .has-error .checkbox-inline,\n.embedpress-modal .has-error.radio label,\n.embedpress-modal .has-error.checkbox label,\n.embedpress-modal .has-error.radio-inline label,\n.embedpress-modal .has-error.checkbox-inline label {\n color: #a94442; }\n\n.embedpress-modal .has-error .form-control {\n border-color: #a94442;\n -webkit-box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.075);\n box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.075); }\n .embedpress-modal .has-error .form-control:focus {\n border-color: #843534;\n -webkit-box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.075), 0 0 6px #ce8483;\n box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.075), 0 0 6px #ce8483; }\n\n.embedpress-modal .has-error .input-group-addon {\n color: #a94442;\n border-color: #a94442;\n background-color: #f2dede; }\n\n.embedpress-modal .has-error .form-control-feedback {\n color: #a94442; }\n\n.embedpress-modal .has-feedback label ~ .form-control-feedback {\n top: 25px; }\n\n.embedpress-modal .has-feedback label.sr-only ~ .form-control-feedback {\n top: 0; }\n\n.embedpress-modal .help-block {\n display: block;\n margin-top: 5px;\n margin-bottom: 10px;\n color: #737373; }\n\n@media (min-width: 768px) {\n .embedpress-modal .form-inline .form-group {\n display: inline-block;\n margin-bottom: 0;\n vertical-align: middle; }\n .embedpress-modal .form-inline .form-control {\n display: inline-block;\n width: auto;\n vertical-align: middle; }\n .embedpress-modal .form-inline .form-control-static {\n display: inline-block; }\n .embedpress-modal .form-inline .input-group {\n display: inline-table;\n vertical-align: middle; }\n .embedpress-modal .form-inline .input-group .input-group-addon,\n .embedpress-modal .form-inline .input-group .input-group-btn,\n .embedpress-modal .form-inline .input-group .form-control {\n width: auto; }\n .embedpress-modal .form-inline .input-group > .form-control {\n width: 100%; }\n .embedpress-modal .form-inline .control-label {\n margin-bottom: 0;\n vertical-align: middle; }\n .embedpress-modal .form-inline .radio,\n .embedpress-modal .form-inline .checkbox {\n display: inline-block;\n margin-top: 0;\n margin-bottom: 0;\n vertical-align: middle; }\n .embedpress-modal .form-inline .radio label,\n .embedpress-modal .form-inline .checkbox label {\n padding-left: 0; }\n .embedpress-modal .form-inline .radio input[type=\"radio\"],\n .embedpress-modal .form-inline .checkbox input[type=\"checkbox\"] {\n position: relative;\n margin-left: 0; }\n .embedpress-modal .form-inline .has-feedback .form-control-feedback {\n top: 0; } }\n\n.embedpress-modal .form-horizontal .radio,\n.embedpress-modal .form-horizontal .checkbox,\n.embedpress-modal .form-horizontal .radio-inline,\n.embedpress-modal .form-horizontal .checkbox-inline {\n margin-top: 0;\n margin-bottom: 0;\n padding-top: 7px; }\n\n.embedpress-modal .form-horizontal .radio,\n.embedpress-modal .form-horizontal .checkbox {\n min-height: 27px; }\n\n.embedpress-modal .form-horizontal .form-group {\n margin-left: -15px;\n margin-right: -15px; }\n .embedpress-modal .form-horizontal .form-group:before, .embedpress-modal .form-horizontal .form-group:after {\n content: \" \";\n display: table; }\n .embedpress-modal .form-horizontal .form-group:after {\n clear: both; }\n\n@media (min-width: 768px) {\n .embedpress-modal .form-horizontal .control-label {\n text-align: right;\n margin-bottom: 0;\n padding-top: 7px; } }\n\n.embedpress-modal .form-horizontal .has-feedback .form-control-feedback {\n right: 15px; }\n\n@media (min-width: 768px) {\n .embedpress-modal .form-horizontal .form-group-lg .control-label {\n padding-top: 11px;\n font-size: 18px; } }\n\n@media (min-width: 768px) {\n .embedpress-modal .form-horizontal .form-group-sm .control-label {\n padding-top: 6px;\n font-size: 12px; } }\n\n.embedpress-modal .btn {\n display: inline-block;\n margin-bottom: 0;\n font-weight: normal;\n text-align: center;\n vertical-align: middle;\n touch-action: manipulation;\n cursor: pointer;\n background-image: none;\n border: 1px solid transparent;\n white-space: nowrap;\n padding: 6px 12px;\n font-size: 14px;\n line-height: 1.42857;\n border-radius: 4px;\n -webkit-user-select: none;\n -moz-user-select: none;\n -ms-user-select: none;\n user-select: none; }\n .embedpress-modal .btn:focus, .embedpress-modal .btn.focus, .embedpress-modal .btn:active:focus, .embedpress-modal .btn:active.focus, .embedpress-modal .btn.active:focus, .embedpress-modal .btn.active.focus {\n outline: 5px auto -webkit-focus-ring-color;\n outline-offset: -2px; }\n .embedpress-modal .btn:hover, .embedpress-modal .btn:focus, .embedpress-modal .btn.focus {\n color: #333;\n text-decoration: none; }\n .embedpress-modal .btn:active, .embedpress-modal .btn.active {\n outline: 0;\n background-image: none;\n -webkit-box-shadow: inset 0 3px 5px rgba(0, 0, 0, 0.125);\n box-shadow: inset 0 3px 5px rgba(0, 0, 0, 0.125); }\n .embedpress-modal .btn.disabled, .embedpress-modal .btn[disabled],\n fieldset[disabled] .embedpress-modal .btn {\n cursor: not-allowed;\n opacity: 0.65;\n filter: alpha(opacity=65);\n -webkit-box-shadow: none;\n box-shadow: none; }\n\n.embedpress-modal a.btn.disabled,\nfieldset[disabled] .embedpress-modal a.btn {\n pointer-events: none; }\n\n.embedpress-modal .btn-default {\n color: #333;\n background-color: #fff;\n border-color: #ccc; }\n .embedpress-modal .btn-default:focus, .embedpress-modal .btn-default.focus {\n color: #333;\n background-color: #e6e6e6;\n border-color: #8c8c8c; }\n .embedpress-modal .btn-default:hover {\n color: #333;\n background-color: #e6e6e6;\n border-color: #adadad; }\n .embedpress-modal .btn-default:active, .embedpress-modal .btn-default.active,\n .open > .embedpress-modal .btn-default.dropdown-toggle {\n color: #333;\n background-color: #e6e6e6;\n border-color: #adadad; }\n .embedpress-modal .btn-default:active:hover, .embedpress-modal .btn-default:active:focus, .embedpress-modal .btn-default:active.focus, .embedpress-modal .btn-default.active:hover, .embedpress-modal .btn-default.active:focus, .embedpress-modal .btn-default.active.focus,\n .open > .embedpress-modal .btn-default.dropdown-toggle:hover,\n .open > .embedpress-modal .btn-default.dropdown-toggle:focus,\n .open > .embedpress-modal .btn-default.dropdown-toggle.focus {\n color: #333;\n background-color: #d4d4d4;\n border-color: #8c8c8c; }\n .embedpress-modal .btn-default:active, .embedpress-modal .btn-default.active,\n .open > .embedpress-modal .btn-default.dropdown-toggle {\n background-image: none; }\n .embedpress-modal .btn-default.disabled:hover, .embedpress-modal .btn-default.disabled:focus, .embedpress-modal .btn-default.disabled.focus, .embedpress-modal .btn-default[disabled]:hover, .embedpress-modal .btn-default[disabled]:focus, .embedpress-modal .btn-default[disabled].focus,\n fieldset[disabled] .embedpress-modal .btn-default:hover,\n fieldset[disabled] .embedpress-modal .btn-default:focus,\n fieldset[disabled] .embedpress-modal .btn-default.focus {\n background-color: #fff;\n border-color: #ccc; }\n .embedpress-modal .btn-default .badge {\n color: #fff;\n background-color: #333; }\n\n.embedpress-modal .btn-primary {\n color: #fff;\n background-color: #337ab7;\n border-color: #2e6da4; }\n .embedpress-modal .btn-primary:focus, .embedpress-modal .btn-primary.focus {\n color: #fff;\n background-color: #286090;\n border-color: #122b40; }\n .embedpress-modal .btn-primary:hover {\n color: #fff;\n background-color: #286090;\n border-color: #204d74; }\n .embedpress-modal .btn-primary:active, .embedpress-modal .btn-primary.active,\n .open > .embedpress-modal .btn-primary.dropdown-toggle {\n color: #fff;\n background-color: #286090;\n border-color: #204d74; }\n .embedpress-modal .btn-primary:active:hover, .embedpress-modal .btn-primary:active:focus, .embedpress-modal .btn-primary:active.focus, .embedpress-modal .btn-primary.active:hover, .embedpress-modal .btn-primary.active:focus, .embedpress-modal .btn-primary.active.focus,\n .open > .embedpress-modal .btn-primary.dropdown-toggle:hover,\n .open > .embedpress-modal .btn-primary.dropdown-toggle:focus,\n .open > .embedpress-modal .btn-primary.dropdown-toggle.focus {\n color: #fff;\n background-color: #204d74;\n border-color: #122b40; }\n .embedpress-modal .btn-primary:active, .embedpress-modal .btn-primary.active,\n .open > .embedpress-modal .btn-primary.dropdown-toggle {\n background-image: none; }\n .embedpress-modal .btn-primary.disabled:hover, .embedpress-modal .btn-primary.disabled:focus, .embedpress-modal .btn-primary.disabled.focus, .embedpress-modal .btn-primary[disabled]:hover, .embedpress-modal .btn-primary[disabled]:focus, .embedpress-modal .btn-primary[disabled].focus,\n fieldset[disabled] .embedpress-modal .btn-primary:hover,\n fieldset[disabled] .embedpress-modal .btn-primary:focus,\n fieldset[disabled] .embedpress-modal .btn-primary.focus {\n background-color: #337ab7;\n border-color: #2e6da4; }\n .embedpress-modal .btn-primary .badge {\n color: #337ab7;\n background-color: #fff; }\n\n.embedpress-modal .btn-success {\n color: #fff;\n background-color: #5cb85c;\n border-color: #4cae4c; }\n .embedpress-modal .btn-success:focus, .embedpress-modal .btn-success.focus {\n color: #fff;\n background-color: #449d44;\n border-color: #255625; }\n .embedpress-modal .btn-success:hover {\n color: #fff;\n background-color: #449d44;\n border-color: #398439; }\n .embedpress-modal .btn-success:active, .embedpress-modal .btn-success.active,\n .open > .embedpress-modal .btn-success.dropdown-toggle {\n color: #fff;\n background-color: #449d44;\n border-color: #398439; }\n .embedpress-modal .btn-success:active:hover, .embedpress-modal .btn-success:active:focus, .embedpress-modal .btn-success:active.focus, .embedpress-modal .btn-success.active:hover, .embedpress-modal .btn-success.active:focus, .embedpress-modal .btn-success.active.focus,\n .open > .embedpress-modal .btn-success.dropdown-toggle:hover,\n .open > .embedpress-modal .btn-success.dropdown-toggle:focus,\n .open > .embedpress-modal .btn-success.dropdown-toggle.focus {\n color: #fff;\n background-color: #398439;\n border-color: #255625; }\n .embedpress-modal .btn-success:active, .embedpress-modal .btn-success.active,\n .open > .embedpress-modal .btn-success.dropdown-toggle {\n background-image: none; }\n .embedpress-modal .btn-success.disabled:hover, .embedpress-modal .btn-success.disabled:focus, .embedpress-modal .btn-success.disabled.focus, .embedpress-modal .btn-success[disabled]:hover, .embedpress-modal .btn-success[disabled]:focus, .embedpress-modal .btn-success[disabled].focus,\n fieldset[disabled] .embedpress-modal .btn-success:hover,\n fieldset[disabled] .embedpress-modal .btn-success:focus,\n fieldset[disabled] .embedpress-modal .btn-success.focus {\n background-color: #5cb85c;\n border-color: #4cae4c; }\n .embedpress-modal .btn-success .badge {\n color: #5cb85c;\n background-color: #fff; }\n\n.embedpress-modal .btn-info {\n color: #fff;\n background-color: #5bc0de;\n border-color: #46b8da; }\n .embedpress-modal .btn-info:focus, .embedpress-modal .btn-info.focus {\n color: #fff;\n background-color: #31b0d5;\n border-color: #1b6d85; }\n .embedpress-modal .btn-info:hover {\n color: #fff;\n background-color: #31b0d5;\n border-color: #269abc; }\n .embedpress-modal .btn-info:active, .embedpress-modal .btn-info.active,\n .open > .embedpress-modal .btn-info.dropdown-toggle {\n color: #fff;\n background-color: #31b0d5;\n border-color: #269abc; }\n .embedpress-modal .btn-info:active:hover, .embedpress-modal .btn-info:active:focus, .embedpress-modal .btn-info:active.focus, .embedpress-modal .btn-info.active:hover, .embedpress-modal .btn-info.active:focus, .embedpress-modal .btn-info.active.focus,\n .open > .embedpress-modal .btn-info.dropdown-toggle:hover,\n .open > .embedpress-modal .btn-info.dropdown-toggle:focus,\n .open > .embedpress-modal .btn-info.dropdown-toggle.focus {\n color: #fff;\n background-color: #269abc;\n border-color: #1b6d85; }\n .embedpress-modal .btn-info:active, .embedpress-modal .btn-info.active,\n .open > .embedpress-modal .btn-info.dropdown-toggle {\n background-image: none; }\n .embedpress-modal .btn-info.disabled:hover, .embedpress-modal .btn-info.disabled:focus, .embedpress-modal .btn-info.disabled.focus, .embedpress-modal .btn-info[disabled]:hover, .embedpress-modal .btn-info[disabled]:focus, .embedpress-modal .btn-info[disabled].focus,\n fieldset[disabled] .embedpress-modal .btn-info:hover,\n fieldset[disabled] .embedpress-modal .btn-info:focus,\n fieldset[disabled] .embedpress-modal .btn-info.focus {\n background-color: #5bc0de;\n border-color: #46b8da; }\n .embedpress-modal .btn-info .badge {\n color: #5bc0de;\n background-color: #fff; }\n\n.embedpress-modal .btn-warning {\n color: #fff;\n background-color: #f0ad4e;\n border-color: #eea236; }\n .embedpress-modal .btn-warning:focus, .embedpress-modal .btn-warning.focus {\n color: #fff;\n background-color: #ec971f;\n border-color: #985f0d; }\n .embedpress-modal .btn-warning:hover {\n color: #fff;\n background-color: #ec971f;\n border-color: #d58512; }\n .embedpress-modal .btn-warning:active, .embedpress-modal .btn-warning.active,\n .open > .embedpress-modal .btn-warning.dropdown-toggle {\n color: #fff;\n background-color: #ec971f;\n border-color: #d58512; }\n .embedpress-modal .btn-warning:active:hover, .embedpress-modal .btn-warning:active:focus, .embedpress-modal .btn-warning:active.focus, .embedpress-modal .btn-warning.active:hover, .embedpress-modal .btn-warning.active:focus, .embedpress-modal .btn-warning.active.focus,\n .open > .embedpress-modal .btn-warning.dropdown-toggle:hover,\n .open > .embedpress-modal .btn-warning.dropdown-toggle:focus,\n .open > .embedpress-modal .btn-warning.dropdown-toggle.focus {\n color: #fff;\n background-color: #d58512;\n border-color: #985f0d; }\n .embedpress-modal .btn-warning:active, .embedpress-modal .btn-warning.active,\n .open > .embedpress-modal .btn-warning.dropdown-toggle {\n background-image: none; }\n .embedpress-modal .btn-warning.disabled:hover, .embedpress-modal .btn-warning.disabled:focus, .embedpress-modal .btn-warning.disabled.focus, .embedpress-modal .btn-warning[disabled]:hover, .embedpress-modal .btn-warning[disabled]:focus, .embedpress-modal .btn-warning[disabled].focus,\n fieldset[disabled] .embedpress-modal .btn-warning:hover,\n fieldset[disabled] .embedpress-modal .btn-warning:focus,\n fieldset[disabled] .embedpress-modal .btn-warning.focus {\n background-color: #f0ad4e;\n border-color: #eea236; }\n .embedpress-modal .btn-warning .badge {\n color: #f0ad4e;\n background-color: #fff; }\n\n.embedpress-modal .btn-danger {\n color: #fff;\n background-color: #d9534f;\n border-color: #d43f3a; }\n .embedpress-modal .btn-danger:focus, .embedpress-modal .btn-danger.focus {\n color: #fff;\n background-color: #c9302c;\n border-color: #761c19; }\n .embedpress-modal .btn-danger:hover {\n color: #fff;\n background-color: #c9302c;\n border-color: #ac2925; }\n .embedpress-modal .btn-danger:active, .embedpress-modal .btn-danger.active,\n .open > .embedpress-modal .btn-danger.dropdown-toggle {\n color: #fff;\n background-color: #c9302c;\n border-color: #ac2925; }\n .embedpress-modal .btn-danger:active:hover, .embedpress-modal .btn-danger:active:focus, .embedpress-modal .btn-danger:active.focus, .embedpress-modal .btn-danger.active:hover, .embedpress-modal .btn-danger.active:focus, .embedpress-modal .btn-danger.active.focus,\n .open > .embedpress-modal .btn-danger.dropdown-toggle:hover,\n .open > .embedpress-modal .btn-danger.dropdown-toggle:focus,\n .open > .embedpress-modal .btn-danger.dropdown-toggle.focus {\n color: #fff;\n background-color: #ac2925;\n border-color: #761c19; }\n .embedpress-modal .btn-danger:active, .embedpress-modal .btn-danger.active,\n .open > .embedpress-modal .btn-danger.dropdown-toggle {\n background-image: none; }\n .embedpress-modal .btn-danger.disabled:hover, .embedpress-modal .btn-danger.disabled:focus, .embedpress-modal .btn-danger.disabled.focus, .embedpress-modal .btn-danger[disabled]:hover, .embedpress-modal .btn-danger[disabled]:focus, .embedpress-modal .btn-danger[disabled].focus,\n fieldset[disabled] .embedpress-modal .btn-danger:hover,\n fieldset[disabled] .embedpress-modal .btn-danger:focus,\n fieldset[disabled] .embedpress-modal .btn-danger.focus {\n background-color: #d9534f;\n border-color: #d43f3a; }\n .embedpress-modal .btn-danger .badge {\n color: #d9534f;\n background-color: #fff; }\n\n.embedpress-modal .btn-link {\n color: #337ab7;\n font-weight: normal;\n border-radius: 0; }\n .embedpress-modal .btn-link, .embedpress-modal .btn-link:active, .embedpress-modal .btn-link.active, .embedpress-modal .btn-link[disabled],\n fieldset[disabled] .embedpress-modal .btn-link {\n background-color: transparent;\n -webkit-box-shadow: none;\n box-shadow: none; }\n .embedpress-modal .btn-link, .embedpress-modal .btn-link:hover, .embedpress-modal .btn-link:focus, .embedpress-modal .btn-link:active {\n border-color: transparent; }\n .embedpress-modal .btn-link:hover, .embedpress-modal .btn-link:focus {\n color: #23527c;\n text-decoration: underline;\n background-color: transparent; }\n .embedpress-modal .btn-link[disabled]:hover, .embedpress-modal .btn-link[disabled]:focus,\n fieldset[disabled] .embedpress-modal .btn-link:hover,\n fieldset[disabled] .embedpress-modal .btn-link:focus {\n color: #777777;\n text-decoration: none; }\n\n.embedpress-modal .btn-lg, .embedpress-modal .btn-group-lg > .btn {\n padding: 10px 16px;\n font-size: 18px;\n line-height: 1.33333;\n border-radius: 6px; }\n\n.embedpress-modal .btn-sm, .embedpress-modal .btn-group-sm > .btn {\n padding: 5px 10px;\n font-size: 12px;\n line-height: 1.5;\n border-radius: 3px; }\n\n.embedpress-modal .btn-xs, .embedpress-modal .btn-group-xs > .btn {\n padding: 1px 5px;\n font-size: 12px;\n line-height: 1.5;\n border-radius: 3px; }\n\n.embedpress-modal .btn-block {\n display: block;\n width: 100%; }\n\n.embedpress-modal .btn-block + .btn-block {\n margin-top: 5px; }\n\n.embedpress-modal input[type=\"submit\"].btn-block,\n.embedpress-modal input[type=\"reset\"].btn-block,\n.embedpress-modal input[type=\"button\"].btn-block {\n width: 100%; }\n\n.embedpress-modal .btn-group,\n.embedpress-modal .btn-group-vertical {\n position: relative;\n display: inline-block;\n vertical-align: middle; }\n .embedpress-modal .btn-group > .btn,\n .embedpress-modal .btn-group-vertical > .btn {\n position: relative;\n float: left; }\n .embedpress-modal .btn-group > .btn:hover, .embedpress-modal .btn-group > .btn:focus, .embedpress-modal .btn-group > .btn:active, .embedpress-modal .btn-group > .btn.active,\n .embedpress-modal .btn-group-vertical > .btn:hover,\n .embedpress-modal .btn-group-vertical > .btn:focus,\n .embedpress-modal .btn-group-vertical > .btn:active,\n .embedpress-modal .btn-group-vertical > .btn.active {\n z-index: 2; }\n\n.embedpress-modal .btn-group .btn + .btn,\n.embedpress-modal .btn-group .btn + .btn-group,\n.embedpress-modal .btn-group .btn-group + .btn,\n.embedpress-modal .btn-group .btn-group + .btn-group {\n margin-left: -1px; }\n\n.embedpress-modal .btn-toolbar {\n margin-left: -5px; }\n .embedpress-modal .btn-toolbar:before, .embedpress-modal .btn-toolbar:after {\n content: \" \";\n display: table; }\n .embedpress-modal .btn-toolbar:after {\n clear: both; }\n .embedpress-modal .btn-toolbar .btn,\n .embedpress-modal .btn-toolbar .btn-group,\n .embedpress-modal .btn-toolbar .input-group {\n float: left; }\n .embedpress-modal .btn-toolbar > .btn,\n .embedpress-modal .btn-toolbar > .btn-group,\n .embedpress-modal .btn-toolbar > .input-group {\n margin-left: 5px; }\n\n.embedpress-modal .btn-group > .btn:not(:first-child):not(:last-child):not(.dropdown-toggle) {\n border-radius: 0; }\n\n.embedpress-modal .btn-group > .btn:first-child {\n margin-left: 0; }\n .embedpress-modal .btn-group > .btn:first-child:not(:last-child):not(.dropdown-toggle) {\n border-bottom-right-radius: 0;\n border-top-right-radius: 0; }\n\n.embedpress-modal .btn-group > .btn:last-child:not(:first-child),\n.embedpress-modal .btn-group > .dropdown-toggle:not(:first-child) {\n border-bottom-left-radius: 0;\n border-top-left-radius: 0; }\n\n.embedpress-modal .btn-group > .btn-group {\n float: left; }\n\n.embedpress-modal .btn-group > .btn-group:not(:first-child):not(:last-child) > .btn {\n border-radius: 0; }\n\n.embedpress-modal .btn-group > .btn-group:first-child:not(:last-child) > .btn:last-child,\n.embedpress-modal .btn-group > .btn-group:first-child:not(:last-child) > .dropdown-toggle {\n border-bottom-right-radius: 0;\n border-top-right-radius: 0; }\n\n.embedpress-modal .btn-group > .btn-group:last-child:not(:first-child) > .btn:first-child {\n border-bottom-left-radius: 0;\n border-top-left-radius: 0; }\n\n.embedpress-modal .btn-group .dropdown-toggle:active,\n.embedpress-modal .btn-group.open .dropdown-toggle {\n outline: 0; }\n\n.embedpress-modal .btn-group > .btn + .dropdown-toggle {\n padding-left: 8px;\n padding-right: 8px; }\n\n.embedpress-modal .btn-group > .btn-lg + .dropdown-toggle, .embedpress-modal .btn-group-lg.btn-group > .btn + .dropdown-toggle {\n padding-left: 12px;\n padding-right: 12px; }\n\n.embedpress-modal .btn-group.open .dropdown-toggle {\n -webkit-box-shadow: inset 0 3px 5px rgba(0, 0, 0, 0.125);\n box-shadow: inset 0 3px 5px rgba(0, 0, 0, 0.125); }\n .embedpress-modal .btn-group.open .dropdown-toggle.btn-link {\n -webkit-box-shadow: none;\n box-shadow: none; }\n\n.embedpress-modal .btn .caret {\n margin-left: 0; }\n\n.embedpress-modal .btn-lg .caret, .embedpress-modal .btn-group-lg > .btn .caret {\n border-width: 5px 5px 0;\n border-bottom-width: 0; }\n\n.embedpress-modal .dropup .btn-lg .caret, .embedpress-modal .dropup .btn-group-lg > .btn .caret {\n border-width: 0 5px 5px; }\n\n.embedpress-modal .btn-group-vertical > .btn,\n.embedpress-modal .btn-group-vertical > .btn-group,\n.embedpress-modal .btn-group-vertical > .btn-group > .btn {\n display: block;\n float: none;\n width: 100%;\n max-width: 100%; }\n\n.embedpress-modal .btn-group-vertical > .btn-group:before, .embedpress-modal .btn-group-vertical > .btn-group:after {\n content: \" \";\n display: table; }\n\n.embedpress-modal .btn-group-vertical > .btn-group:after {\n clear: both; }\n\n.embedpress-modal .btn-group-vertical > .btn-group > .btn {\n float: none; }\n\n.embedpress-modal .btn-group-vertical > .btn + .btn,\n.embedpress-modal .btn-group-vertical > .btn + .btn-group,\n.embedpress-modal .btn-group-vertical > .btn-group + .btn,\n.embedpress-modal .btn-group-vertical > .btn-group + .btn-group {\n margin-top: -1px;\n margin-left: 0; }\n\n.embedpress-modal .btn-group-vertical > .btn:not(:first-child):not(:last-child) {\n border-radius: 0; }\n\n.embedpress-modal .btn-group-vertical > .btn:first-child:not(:last-child) {\n border-top-right-radius: 4px;\n border-top-left-radius: 4px;\n border-bottom-right-radius: 0;\n border-bottom-left-radius: 0; }\n\n.embedpress-modal .btn-group-vertical > .btn:last-child:not(:first-child) {\n border-top-right-radius: 0;\n border-top-left-radius: 0;\n border-bottom-right-radius: 4px;\n border-bottom-left-radius: 4px; }\n\n.embedpress-modal .btn-group-vertical > .btn-group:not(:first-child):not(:last-child) > .btn {\n border-radius: 0; }\n\n.embedpress-modal .btn-group-vertical > .btn-group:first-child:not(:last-child) > .btn:last-child,\n.embedpress-modal .btn-group-vertical > .btn-group:first-child:not(:last-child) > .dropdown-toggle {\n border-bottom-right-radius: 0;\n border-bottom-left-radius: 0; }\n\n.embedpress-modal .btn-group-vertical > .btn-group:last-child:not(:first-child) > .btn:first-child {\n border-top-right-radius: 0;\n border-top-left-radius: 0; }\n\n.embedpress-modal .btn-group-justified {\n display: table;\n width: 100%;\n table-layout: fixed;\n border-collapse: separate; }\n .embedpress-modal .btn-group-justified > .btn,\n .embedpress-modal .btn-group-justified > .btn-group {\n float: none;\n display: table-cell;\n width: 1%; }\n .embedpress-modal .btn-group-justified > .btn-group .btn {\n width: 100%; }\n .embedpress-modal .btn-group-justified > .btn-group .dropdown-menu {\n left: auto; }\n\n.embedpress-modal [data-toggle=\"buttons\"] > .btn input[type=\"radio\"],\n.embedpress-modal [data-toggle=\"buttons\"] > .btn input[type=\"checkbox\"],\n.embedpress-modal [data-toggle=\"buttons\"] > .btn-group > .btn input[type=\"radio\"],\n.embedpress-modal [data-toggle=\"buttons\"] > .btn-group > .btn input[type=\"checkbox\"] {\n position: absolute;\n clip: rect(0, 0, 0, 0);\n pointer-events: none; }\n\n.embedpress-modal .input-group {\n position: relative;\n display: table;\n border-collapse: separate; }\n .embedpress-modal .input-group[class*=\"col-\"] {\n float: none;\n padding-left: 0;\n padding-right: 0; }\n .embedpress-modal .input-group .form-control {\n position: relative;\n z-index: 2;\n float: left;\n width: 100%;\n margin-bottom: 0; }\n .embedpress-modal .input-group .form-control:focus {\n z-index: 3; }\n\n.embedpress-modal .input-group-addon,\n.embedpress-modal .input-group-btn,\n.embedpress-modal .input-group .form-control {\n display: table-cell; }\n .embedpress-modal .input-group-addon:not(:first-child):not(:last-child),\n .embedpress-modal .input-group-btn:not(:first-child):not(:last-child),\n .embedpress-modal .input-group .form-control:not(:first-child):not(:last-child) {\n border-radius: 0; }\n\n.embedpress-modal .input-group-addon,\n.embedpress-modal .input-group-btn {\n width: 1%;\n white-space: nowrap;\n vertical-align: middle; }\n\n.embedpress-modal .input-group-addon {\n padding: 6px 12px;\n font-size: 14px;\n font-weight: normal;\n line-height: 1;\n color: #555555;\n text-align: center;\n background-color: #eeeeee;\n border: 1px solid #ccc;\n border-radius: 4px; }\n .embedpress-modal .input-group-addon.input-sm, .embedpress-modal .input-group-sm > .input-group-addon, .embedpress-modal .input-group-sm > .input-group-btn > .input-group-addon.btn {\n padding: 5px 10px;\n font-size: 12px;\n border-radius: 3px; }\n .embedpress-modal .input-group-addon.input-lg, .embedpress-modal .input-group-lg > .input-group-addon, .embedpress-modal .input-group-lg > .input-group-btn > .input-group-addon.btn {\n padding: 10px 16px;\n font-size: 18px;\n border-radius: 6px; }\n .embedpress-modal .input-group-addon input[type=\"radio\"],\n .embedpress-modal .input-group-addon input[type=\"checkbox\"] {\n margin-top: 0; }\n\n.embedpress-modal .input-group .form-control:first-child,\n.embedpress-modal .input-group-addon:first-child,\n.embedpress-modal .input-group-btn:first-child > .btn,\n.embedpress-modal .input-group-btn:first-child > .btn-group > .btn,\n.embedpress-modal .input-group-btn:first-child > .dropdown-toggle,\n.embedpress-modal .input-group-btn:last-child > .btn:not(:last-child):not(.dropdown-toggle),\n.embedpress-modal .input-group-btn:last-child > .btn-group:not(:last-child) > .btn {\n border-bottom-right-radius: 0;\n border-top-right-radius: 0; }\n\n.embedpress-modal .input-group-addon:first-child {\n border-right: 0; }\n\n.embedpress-modal .input-group .form-control:last-child,\n.embedpress-modal .input-group-addon:last-child,\n.embedpress-modal .input-group-btn:last-child > .btn,\n.embedpress-modal .input-group-btn:last-child > .btn-group > .btn,\n.embedpress-modal .input-group-btn:last-child > .dropdown-toggle,\n.embedpress-modal .input-group-btn:first-child > .btn:not(:first-child),\n.embedpress-modal .input-group-btn:first-child > .btn-group:not(:first-child) > .btn {\n border-bottom-left-radius: 0;\n border-top-left-radius: 0; }\n\n.embedpress-modal .input-group-addon:last-child {\n border-left: 0; }\n\n.embedpress-modal .input-group-btn {\n position: relative;\n font-size: 0;\n white-space: nowrap; }\n .embedpress-modal .input-group-btn > .btn {\n position: relative; }\n .embedpress-modal .input-group-btn > .btn + .btn {\n margin-left: -1px; }\n .embedpress-modal .input-group-btn > .btn:hover, .embedpress-modal .input-group-btn > .btn:focus, .embedpress-modal .input-group-btn > .btn:active {\n z-index: 2; }\n .embedpress-modal .input-group-btn:first-child > .btn,\n .embedpress-modal .input-group-btn:first-child > .btn-group {\n margin-right: -1px; }\n .embedpress-modal .input-group-btn:last-child > .btn,\n .embedpress-modal .input-group-btn:last-child > .btn-group {\n z-index: 2;\n margin-left: -1px; }\n\n.embedpress-modal .close {\n float: right;\n font-size: 21px;\n font-weight: bold;\n line-height: 1;\n color: #000;\n text-shadow: 0 1px 0 #fff;\n opacity: 0.2;\n filter: alpha(opacity=20); }\n .embedpress-modal .close:hover, .embedpress-modal .close:focus {\n color: #000;\n text-decoration: none;\n cursor: pointer;\n opacity: 0.5;\n filter: alpha(opacity=50); }\n\n.embedpress-modal button.close {\n padding: 0;\n cursor: pointer;\n background: transparent;\n border: 0;\n -webkit-appearance: none; }\n\n.modal-open {\n overflow: hidden; }\n\n.modal {\n display: none;\n overflow: hidden;\n position: fixed;\n top: 0;\n right: 0;\n bottom: 0;\n left: 0;\n z-index: 1050;\n -webkit-overflow-scrolling: touch;\n outline: 0; }\n .modal.fade .modal-dialog {\n -webkit-transform: translate(0, -25%);\n -ms-transform: translate(0, -25%);\n -o-transform: translate(0, -25%);\n transform: translate(0, -25%);\n -webkit-transition: -webkit-transform 0.3s ease-out;\n -moz-transition: -moz-transform 0.3s ease-out;\n -o-transition: -o-transform 0.3s ease-out;\n transition: transform 0.3s ease-out; }\n .modal.in .modal-dialog {\n -webkit-transform: translate(0, 0);\n -ms-transform: translate(0, 0);\n -o-transform: translate(0, 0);\n transform: translate(0, 0); }\n\n.modal-open .modal {\n overflow-x: hidden;\n overflow-y: auto; }\n\n.modal-dialog {\n position: relative;\n width: auto;\n margin: 10px; }\n\n.modal-content {\n position: relative;\n background-color: #fff;\n border: 1px solid #999;\n border: 1px solid rgba(0, 0, 0, 0.2);\n border-radius: 6px;\n -webkit-box-shadow: 0 3px 9px rgba(0, 0, 0, 0.5);\n box-shadow: 0 3px 9px rgba(0, 0, 0, 0.5);\n background-clip: padding-box;\n outline: 0; }\n\n.modal-backdrop {\n position: fixed;\n top: 0;\n right: 0;\n bottom: 0;\n left: 0;\n z-index: 1040;\n background-color: #000; }\n .modal-backdrop.fade {\n opacity: 0;\n filter: alpha(opacity=0); }\n .modal-backdrop.in {\n opacity: 0.5;\n filter: alpha(opacity=50); }\n\n.modal-header {\n padding: 15px;\n border-bottom: 1px solid #e5e5e5; }\n .modal-header:before, .modal-header:after {\n content: \" \";\n display: table; }\n .modal-header:after {\n clear: both; }\n\n.modal-header .close {\n margin-top: -2px; }\n\n.modal-title {\n margin: 0;\n line-height: 1.42857; }\n\n.modal-body {\n position: relative;\n padding: 15px; }\n\n.modal-footer {\n padding: 15px;\n text-align: right;\n border-top: 1px solid #e5e5e5; }\n .modal-footer:before, .modal-footer:after {\n content: \" \";\n display: table; }\n .modal-footer:after {\n clear: both; }\n .modal-footer .btn + .btn {\n margin-left: 5px;\n margin-bottom: 0; }\n .modal-footer .btn-group .btn + .btn {\n margin-left: -1px; }\n .modal-footer .btn-block + .btn-block {\n margin-left: 0; }\n\n.modal-scrollbar-measure {\n position: absolute;\n top: -9999px;\n width: 50px;\n height: 50px;\n overflow: scroll; }\n\n@media (min-width: 768px) {\n .modal-dialog {\n width: 600px;\n margin: 30px auto; }\n .modal-content {\n -webkit-box-shadow: 0 5px 15px rgba(0, 0, 0, 0.5);\n box-shadow: 0 5px 15px rgba(0, 0, 0, 0.5); }\n .modal-sm {\n width: 300px; } }\n\n@media (min-width: 992px) {\n .modal-lg {\n width: 900px; } }\n\n@-ms-viewport {\n width: device-width; }\n\n.visible-xs {\n display: none !important; }\n\n.visible-sm {\n display: none !important; }\n\n.visible-md {\n display: none !important; }\n\n.visible-lg {\n display: none !important; }\n\n.visible-xs-block,\n.visible-xs-inline,\n.visible-xs-inline-block,\n.visible-sm-block,\n.visible-sm-inline,\n.visible-sm-inline-block,\n.visible-md-block,\n.visible-md-inline,\n.visible-md-inline-block,\n.visible-lg-block,\n.visible-lg-inline,\n.visible-lg-inline-block {\n display: none !important; }\n\n@media (max-width: 767px) {\n .visible-xs {\n display: block !important; }\n table.visible-xs {\n display: table !important; }\n tr.visible-xs {\n display: table-row !important; }\n th.visible-xs,\n td.visible-xs {\n display: table-cell !important; } }\n\n@media (max-width: 767px) {\n .visible-xs-block {\n display: block !important; } }\n\n@media (max-width: 767px) {\n .visible-xs-inline {\n display: inline !important; } }\n\n@media (max-width: 767px) {\n .visible-xs-inline-block {\n display: inline-block !important; } }\n\n@media (min-width: 768px) and (max-width: 991px) {\n .visible-sm {\n display: block !important; }\n table.visible-sm {\n display: table !important; }\n tr.visible-sm {\n display: table-row !important; }\n th.visible-sm,\n td.visible-sm {\n display: table-cell !important; } }\n\n@media (min-width: 768px) and (max-width: 991px) {\n .visible-sm-block {\n display: block !important; } }\n\n@media (min-width: 768px) and (max-width: 991px) {\n .visible-sm-inline {\n display: inline !important; } }\n\n@media (min-width: 768px) and (max-width: 991px) {\n .visible-sm-inline-block {\n display: inline-block !important; } }\n\n@media (min-width: 992px) and (max-width: 1199px) {\n .visible-md {\n display: block !important; }\n table.visible-md {\n display: table !important; }\n tr.visible-md {\n display: table-row !important; }\n th.visible-md,\n td.visible-md {\n display: table-cell !important; } }\n\n@media (min-width: 992px) and (max-width: 1199px) {\n .visible-md-block {\n display: block !important; } }\n\n@media (min-width: 992px) and (max-width: 1199px) {\n .visible-md-inline {\n display: inline !important; } }\n\n@media (min-width: 992px) and (max-width: 1199px) {\n .visible-md-inline-block {\n display: inline-block !important; } }\n\n@media (min-width: 1200px) {\n .visible-lg {\n display: block !important; }\n table.visible-lg {\n display: table !important; }\n tr.visible-lg {\n display: table-row !important; }\n th.visible-lg,\n td.visible-lg {\n display: table-cell !important; } }\n\n@media (min-width: 1200px) {\n .visible-lg-block {\n display: block !important; } }\n\n@media (min-width: 1200px) {\n .visible-lg-inline {\n display: inline !important; } }\n\n@media (min-width: 1200px) {\n .visible-lg-inline-block {\n display: inline-block !important; } }\n\n@media (max-width: 767px) {\n .hidden-xs {\n display: none !important; } }\n\n@media (min-width: 768px) and (max-width: 991px) {\n .hidden-sm {\n display: none !important; } }\n\n@media (min-width: 992px) and (max-width: 1199px) {\n .hidden-md {\n display: none !important; } }\n\n@media (min-width: 1200px) {\n .hidden-lg {\n display: none !important; } }\n\n.visible-print {\n display: none !important; }\n\n@media print {\n .visible-print {\n display: block !important; }\n table.visible-print {\n display: table !important; }\n tr.visible-print {\n display: table-row !important; }\n th.visible-print,\n td.visible-print {\n display: table-cell !important; } }\n\n.visible-print-block {\n display: none !important; }\n @media print {\n .visible-print-block {\n display: block !important; } }\n\n.visible-print-inline {\n display: none !important; }\n @media print {\n .visible-print-inline {\n display: inline !important; } }\n\n.visible-print-inline-block {\n display: none !important; }\n @media print {\n .visible-print-inline-block {\n display: inline-block !important; } }\n\n@media print {\n .hidden-print {\n display: none !important; } }\n"
11
+ ],
12
+ "sourceRoot": "/source/"
13
+ }
assets/css/vendor/bootstrap/index.html CHANGED
@@ -1,9 +1,9 @@
1
  <!DOCTYPE html>
2
  <html>
3
- <head>
4
- <title>403 Forbidden</title>
5
- </head>
6
- <body>
7
- <p>Directory access is forbidden.</p>
8
- </body>
9
  </html>
1
  <!DOCTYPE html>
2
  <html>
3
+ <head>
4
+ <title>403 Forbidden</title>
5
+ </head>
6
+ <body>
7
+ <p>Directory access is forbidden.</p>
8
+ </body>
9
  </html>
assets/css/vendor/index.html CHANGED
@@ -1,9 +1,9 @@
1
  <!DOCTYPE html>
2
  <html>
3
- <head>
4
- <title>403 Forbidden</title>
5
- </head>
6
- <body>
7
- <p>Directory access is forbidden.</p>
8
- </body>
9
  </html>
1
  <!DOCTYPE html>
2
  <html>
3
+ <head>
4
+ <title>403 Forbidden</title>
5
+ </head>
6
+ <body>
7
+ <p>Directory access is forbidden.</p>
8
+ </body>
9
  </html>
assets/js/index.html CHANGED
@@ -1,9 +1,9 @@
1
  <!DOCTYPE html>
2
  <html>
3
- <head>
4
- <title>403 Forbidden</title>
5
- </head>
6
- <body>
7
- <p>Directory access is forbidden.</p>
8
- </body>
9
  </html>
1
  <!DOCTYPE html>
2
  <html>
3
+ <head>
4
+ <title>403 Forbidden</title>
5
+ </head>
6
+ <body>
7
+ <p>Directory access is forbidden.</p>
8
+ </body>
9
  </html>
assets/js/preview.js CHANGED
@@ -5,32 +5,32 @@
5
  * @license GPLv2 or later
6
  * @since 1.0
7
  */
8
- (function($, String, $data, undefined) {
9
- "use strict";
10
 
11
- $(window.document).ready(function() {
12
- String.prototype.capitalizeFirstLetter = function() {
13
  return this.charAt(0).toUpperCase() + this.slice(1);
14
- }
15
 
16
- String.prototype.isValidUrl = function() {
17
  var rule = /^(https?|embedpresss?):\/\//i;
18
 
19
  return rule.test(this.toString());
20
- }
21
 
22
- String.prototype.hasShortcode = function(shortcode) {
23
- var shortcodeRule = new RegExp('\\['+ shortcode +'(?:\\]|.+?\\])', "ig");
24
  return !!this.toString().match(shortcodeRule);
25
- }
26
 
27
- String.prototype.stripShortcode = function(shortcode) {
28
- var stripRule = new RegExp('(\\['+ shortcode +'(?:\\]|.+?\\])|\\[\\/'+ shortcode +'\\])', "ig");
29
- return this.toString().replace(stripRule, "");
30
- }
31
 
32
- String.prototype.setShortcodeAttribute = function(attr, value, shortcode, replaceInsteadOfMerge) {
33
- replaceInsteadOfMerge = typeof replaceInsteadOfMerge === "undefined" ? false : replaceInsteadOfMerge;
34
  var subject = this.toString();
35
 
36
  if (subject.hasShortcode(shortcode)) {
@@ -40,7 +40,7 @@
40
  if (replaceInsteadOfMerge) {
41
  attributes[attr] = value;
42
  } else {
43
- attributes[attr] += " " + value;
44
  }
45
  } else {
46
  attributes[attr] = value;
@@ -52,7 +52,7 @@
52
  parsedAttributes.push(attr + '="' + attributes[attr] + '"');
53
  }
54
 
55
- subject = '[' + shortcode + ' ' + parsedAttributes.join(" ") + ']' + subject.stripShortcode(shortcode) + '[/' + shortcode + ']';
56
  } else {
57
  subject = '[' + shortcode + ']' + subject.stripShortcode(shortcode) + '[/' + shortcode + ']';
58
  }
@@ -61,9 +61,9 @@
61
  } else {
62
  return subject;
63
  }
64
- }
65
 
66
- String.prototype.getShortcodeAttributes = function(shortcode) {
67
  var subject = this.toString();
68
  if (subject.hasShortcode(shortcode)) {
69
  var attributes = {};
@@ -76,12 +76,12 @@
76
  var attrValue;
77
  if (match[2] === undefined) {
78
  // Prevent `class` property being empty an treated as a boolean param
79
- if (attrName.toLowerCase() !== "class") {
80
  if (attrName.indexOf('!') === 0) {
81
- attrName = attrName.replace('!', "");
82
- attrValue = "false";
83
  } else {
84
- attrValue = "true";
85
  }
86
 
87
  attributes[attrName] = attrValue;
@@ -89,7 +89,7 @@
89
  } else {
90
  attrValue = match[2];
91
  if (attrValue.isBoolean()) {
92
- attrValue = attrValue.isFalse() ? "false" : "true";
93
  }
94
 
95
  attributes[attrName] = attrValue;
@@ -103,56 +103,56 @@
103
  } else {
104
  return {};
105
  }
106
- }
107
 
108
- String.prototype.isBoolean = function() {
109
  var subject = this.toString().trim().toLowerCase();
110
 
111
  return subject.isTrue(false) || subject.isFalse();
112
  };
113
 
114
- String.prototype.isTrue = function(defaultValue) {
115
  var subject = this.toString().trim().toLowerCase();
116
  defaultValue = typeof defaultValue === undefined ? true : defaultValue;
117
 
118
  switch (subject) {
119
- case "":
120
- defaultValue += "";
121
  return !defaultValue.isFalse();
122
- case "1":
123
- case "true":
124
- case "on":
125
- case "yes":
126
- case "y":
127
  return true;
128
  default:
129
  return false;
130
  }
131
  };
132
 
133
- String.prototype.isFalse = function() {
134
  var subject = this.toString().trim().toLowerCase();
135
 
136
  switch (subject) {
137
- case "0":
138
- case "false":
139
- case "off":
140
- case "no":
141
- case "n":
142
- case "nil":
143
- case "null":
144
  return true;
145
  default:
146
  return false;
147
  }
148
  };
149
 
150
- var SHORTCODE_REGEXP = new RegExp('\\[\/?'+ $data.EMBEDPRESS_SHORTCODE +'\\]', "gi");
151
 
152
- var EmbedPress = function() {
153
  var self = this;
154
 
155
- var PLG_SYSTEM_ASSETS_CSS_PATH = $data.EMBEDPRESS_URL_ASSETS +"css";
156
  var PLG_CONTENT_ASSETS_CSS_PATH = PLG_SYSTEM_ASSETS_CSS_PATH;
157
 
158
  /**
@@ -161,7 +161,7 @@
161
  * @type Object
162
  */
163
  self.params = {
164
- baseUrl : '',
165
  versionUID: '0'
166
  };
167
 
@@ -208,7 +208,7 @@
208
  $(self.onReady);
209
  };
210
 
211
- self.addEvent = function(event, element, callback) {
212
  if (typeof element.on !== 'undefined') {
213
  element.on(event, callback);
214
  } else {
@@ -218,28 +218,27 @@
218
  }
219
  };
220
 
221
- self.isEmpty = function(list) {
222
  return list.length === 0;
223
  };
224
 
225
- self.isDefined = function(attribute) {
226
  return (typeof attribute !== 'undefined') && (attribute !== null);
227
- }
228
 
229
- self.makeId = function() {
230
- var text = "";
231
- var possible = "abcdefghijklmnopqrstuvwxyz0123456789";
232
 
233
- for( var i=0; i < 5; i++ )
234
  text += possible.charAt(Math.floor(Math.random() * possible.length));
235
 
236
  return text;
237
  };
238
 
239
- self.loadAsyncDynamicJsCodeFromElement = function(subject, wrapper, editorInstance)
240
- {
241
  subject = $(subject);
242
- if (subject.prop('tagName').toLowerCase() === "script") {
243
  var scriptSrc = subject.attr('src') || null;
244
  if (!scriptSrc) {
245
  self.addScriptDeclaration(wrapper, subject.html(), editorInstance);
@@ -249,23 +248,23 @@
249
  } else {
250
  var innerScriptsList = $('script', subject);
251
  if (innerScriptsList.length > 0) {
252
- $.each(innerScriptsList, function(innerScriptIndex, innerScript) {
253
  self.loadAsyncDynamicJsCodeFromElement(innerScript, wrapper, editorInstance);
254
  });
255
  }
256
  }
257
- }
258
 
259
  /**
260
  * Method executed on the document ready event
261
  *
262
  * @return void
263
  */
264
- self.onReady = function() {
265
- var findEditors = function() {
266
  // Wait until the editor is available
267
  var interval = window.setInterval(
268
- function() {
269
  var editorsFound = self.getEditors();
270
  if (editorsFound.length) {
271
  self.loadedEditors = editorsFound;
@@ -289,15 +288,15 @@
289
 
290
  // Add support for the Beaver Builder.
291
  if (typeof FLLightbox !== 'undefined') {
292
- $.each(FLLightbox._instances, function(index) {
293
- FLLightbox._instances[index].on('open', function() {
294
- setTimeout(function() {
295
  findEditors();
296
  }, 500);
297
  });
298
 
299
- FLLightbox._instances[index].on('didHideLightbox', function() {
300
- setTimeout(function() {
301
  findEditors();
302
  }, 500);
303
  });
@@ -309,15 +308,15 @@
309
  * Detects if tinymce object is available
310
  * @return Boolean True, if available
311
  */
312
- self.tinymceIsAvailable = function() {
313
- return typeof window.tinymce === 'object' || typeof window.tinyMCE === "object";
314
- }
315
 
316
  /**
317
  * Returns true if the controller panel is active
318
  * @return Boolean True, if the controller panel is active
319
  */
320
- self.controllerPanelIsActive = function() {
321
  return typeof self.activeControllerPanel !== 'undefined' && self.activeControllerPanel !== null;
322
  };
323
 
@@ -325,7 +324,7 @@
325
  * Returns the editor
326
  * @return Object The editor
327
  */
328
- self.getEditors = function() {
329
  if (!window.tinymce || !window.tinymce.editors || window.tinymce.editors.length === 0) {
330
  return [];
331
  }
@@ -341,13 +340,13 @@
341
  * @param function onsuccess The callback called on success
342
  * @return void
343
  */
344
- self.getParsedContent = function(content, onsuccess) {
345
  // Get the parsed content
346
  $.ajax({
347
  type: 'POST',
348
- url: self.params.baseUrl +"wp-admin/admin-ajax.php",
349
  data: {
350
- action: "embedpress_do_ajax_request",
351
  subject: content
352
  },
353
  success: onsuccess,
@@ -356,14 +355,14 @@
356
  });
357
  };
358
 
359
- self.addStylesheet = function(url, editorInstance) {
360
  var head = editorInstance.getDoc().getElementsByTagName('head')[0];
361
 
362
  var $style = $('<link rel="stylesheet" type="text/css" href="' + url + '">');
363
  $style.appendTo(head);
364
- }
365
 
366
- self.convertURLSchemeToPattern = function(scheme) {
367
  var prefix = '(.*)((?:http|embedpress)s?:\\/\\/(?:www\\.)?',
368
  suffix = '[\\/]?)(.*)',
369
  pattern;
@@ -375,18 +374,18 @@
375
  return prefix + scheme + suffix;
376
  };
377
 
378
- self.getProvidersURLPatterns = function() {
379
  // @todo: Add option to disable/enable the providers
380
  var patterns = [];
381
 
382
- self.each($data.urlSchemes, function convertEachURLSchemesToPattern(scheme) {
383
  patterns.push(self.convertURLSchemeToPattern(scheme));
384
  });
385
 
386
  return patterns;
387
  };
388
 
389
- self.addScript = function(source, callback, wrapper, editorInstance) {
390
  var doc = editorInstance.getDoc();
391
 
392
  if (typeof wrapper === 'undefined' || !wrapper) {
@@ -405,7 +404,7 @@
405
  wrapper.append($script);
406
  };
407
 
408
- self.addScriptDeclaration = function(wrapper, declaration, editorInstance) {
409
  var doc = editorInstance.getDoc(),
410
  $script = $(doc.createElement('script'));
411
 
@@ -414,19 +413,19 @@
414
  $script.text(declaration);
415
  };
416
 
417
- self.addURLsPlaceholder = function(node, url, editorInstance) {
418
  var uid = self.makeId();
419
 
420
- var wrapperClasses = ["embedpress_wrapper", "embedpress_placeholder", "wpview", "wpview-wrap"];
421
 
422
  var shortcodeAttributes = node.value.getShortcodeAttributes($data.EMBEDPRESS_SHORTCODE);
423
  var customAttributes = shortcodeAttributes;
424
 
425
- var customClasses = "";
426
  if (!!Object.keys(shortcodeAttributes).length) {
427
- var specialAttributes = ["class", "href", "data-href"];
428
  // Iterates over each attribute of shortcodeAttributes to add the prefix "data-" if missing
429
- var dataPrefix = "data-";
430
  var prefixedShortcodeAttributes = [];
431
  for (var attr in shortcodeAttributes) {
432
  if (specialAttributes.indexOf(attr) === -1) {
@@ -436,8 +435,8 @@
436
  prefixedShortcodeAttributes[attr] = shortcodeAttributes[attr];
437
  }
438
  } else {
439
- attr = attr.replace(dataPrefix, "");
440
- if (attr === "class") {
441
  wrapperClasses.push(shortcodeAttributes[attr]);
442
  }
443
  }
@@ -447,41 +446,41 @@
447
  prefixedShortcodeAttributes = dataPrefix = null;
448
  }
449
 
450
- if (("data-width" in shortcodeAttributes || "data-height" in shortcodeAttributes) && "data-responsive" in shortcodeAttributes) {
451
- shortcodeAttributes['data-responsive'] = "false";
452
  }
453
 
454
  var wrapper = new self.Node('div', 1);
455
  var wrapperSettings = {
456
- 'class' : Array.from(new Set(wrapperClasses)).join(" "),
457
- 'data-url' : url,
458
- 'data-uid' : uid,
459
- 'id' : 'embedpress_wrapper_' + uid,
460
  'data-loading-text': 'Loading your embed...'
461
  };
462
 
463
  wrapperSettings = $.extend({}, wrapperSettings, shortcodeAttributes);
464
 
465
  if (wrapperSettings.class.indexOf('is-loading') === -1) {
466
- wrapperSettings.class += " is-loading";
467
  }
468
 
469
  wrapper.attr(wrapperSettings);
470
 
471
  var panel = new self.Node('div', 1);
472
  panel.attr({
473
- 'id' : 'embedpress_controller_panel_' + uid,
474
  'class': 'embedpress_controller_panel embedpress_ignore_mouseout hidden'
475
  });
476
  wrapper.append(panel);
477
 
478
- function createGhostNode(htmlTag, content) {
479
- htmlTag = htmlTag || "span";
480
- content = content || "&nbsp;";
481
 
482
  var ghostNode = new self.Node(htmlTag, 1);
483
  ghostNode.attr({
484
- 'class': "hidden"
485
  });
486
 
487
  var ghostText = new self.Node('#text', 3);
@@ -493,7 +492,7 @@
493
 
494
  var editButton = new self.Node('div', 1);
495
  editButton.attr({
496
- 'id' : 'embedpress_button_edit_' + uid,
497
  'class': 'embedpress_ignore_mouseout embedpress_controller_button'
498
  });
499
  var editButtonIcon = new self.Node('div', 1);
@@ -506,7 +505,7 @@
506
 
507
  var removeButton = new self.Node('div', 1);
508
  removeButton.attr({
509
- 'id' : 'embedpress_button_remove_' + uid,
510
  'class': 'embedpress_ignore_mouseout embedpress_controller_button'
511
  });
512
  var removeButtonIcon = new self.Node('div', 1);
@@ -522,39 +521,39 @@
522
  node.replace(wrapper);
523
 
524
  // Trigger the timeout which will load the content
525
- window.setTimeout(function() {
526
  self.parseContentAsync(uid, url, customAttributes, editorInstance);
527
  }, 200);
528
 
529
  return wrapper;
530
  };
531
 
532
- self.parseContentAsync = function(uid, url, customAttributes, editorInstance) {
533
- customAttributes = typeof customAttributes === "undefined" ? {} : customAttributes;
534
 
535
  url = self.decodeEmbedURLSpecialChars(url, true, customAttributes);
536
  var rawUrl = url.stripShortcode($data.EMBEDPRESS_SHORTCODE);
537
 
538
  $(self).triggerHandler('EmbedPress.beforeEmbed', {
539
- 'url' : rawUrl,
540
  'meta': {
541
  'attributes': customAttributes || {}
542
  }
543
  });
544
 
545
  // Get the parsed embed code from the EmbedPress plugin
546
- self.getParsedContent(url, function getParsedContentCallback(result) {
547
- var embeddedContent = (typeof result.data === "object" ? result.data.embed : result.data).stripShortcode($data.EMBEDPRESS_SHORTCODE);
548
 
549
  var $wrapper = $(self.getElementInContentById('embedpress_wrapper_' + uid, editorInstance));
550
  var wrapperParent = $($wrapper.parent());
551
 
552
  // Check if $wrapper was rendered inside a <p> element.
553
- if (wrapperParent.prop('tagName') && wrapperParent.prop('tagName').toUpperCase() === "P") {
554
  wrapperParent.replaceWith($wrapper);
555
  // Check if there's at least one "space" after $wrapper.
556
  var nextSibling = $($wrapper).next();
557
- if (!nextSibling.length || nextSibling.prop('tagName').toUpperCase() !== "P") {
558
  //$('<p>&nbsp;</p>').insertAfter($wrapper);
559
  }
560
  nextSibling = null;
@@ -564,7 +563,7 @@
564
  // Check if the url could not be embedded for some reason.
565
  if (rawUrl === embeddedContent) {
566
  // Echoes the raw url
567
- $wrapper.replaceWith($('<p>'+ rawUrl +'</p>'));
568
  return;
569
  }
570
 
@@ -574,7 +573,7 @@
574
  var $content;
575
  try {
576
  $content = $(embeddedContent);
577
- } catch(err) {
578
  // Fallback to a div, if the result is not a html markup, e.g. a url
579
  $content = $('<div>');
580
  $content.html(embeddedContent);
@@ -588,14 +587,14 @@
588
 
589
  $wrapper.append(contentWrapper);
590
 
591
- setTimeout(function() {
592
- editorInstance.undoManager.transact(function() {
593
  var iframe = editorInstance.getDoc().createElement('iframe');
594
  iframe.src = tinymce.Env.ie ? 'javascript:""' : '';
595
  iframe.frameBorder = '0';
596
  iframe.allowTransparency = 'true';
597
  iframe.scrolling = 'no';
598
- iframe.class = "wpview-sandbox";
599
  iframe.style.width = '100%';
600
 
601
  contentWrapper.append(iframe);
@@ -608,29 +607,29 @@
608
 
609
  var iframeDoc = iframeWindow.document;
610
 
611
- $(iframe).load(function() {
612
  var maximumChecksAllowed = 8;
613
  var checkIndex = 0;
614
 
615
- var checkerInterval = setInterval(function() {
616
  if (checkIndex === maximumChecksAllowed) {
617
  clearInterval(checkerInterval);
618
 
619
- setTimeout(function() {
620
  $wrapper.css('width', iframe.width);
621
  $wrapper.css('height', iframe.height);
622
  }, 100);
623
  } else {
624
  if (customAttributes.height) {
625
  iframe.height = customAttributes.height;
626
- iframe.style.height = customAttributes.height +'px';
627
  } else {
628
  iframe.height = $('body', iframeDoc).height();
629
  }
630
 
631
  if (customAttributes.width) {
632
  iframe.width = customAttributes.width;
633
- iframe.style.width = customAttributes.width +'px';
634
  } else {
635
  iframe.width = $('body', iframeDoc).width();
636
  }
@@ -642,31 +641,31 @@
642
 
643
  iframeDoc.open();
644
  iframeDoc.write(
645
- '<!DOCTYPE html>'+
646
- '<html>'+
647
- '<head>'+
648
- '<meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />'+
649
- '<style>'+
650
- 'html {'+
651
- 'background: transparent;'+
652
- 'padding: 0;'+
653
- 'margin: 0;'+
654
- '}'+
655
- 'body#wpview-iframe-sandbox {'+
656
- 'background: transparent;'+
657
- 'padding: 1px 0 !important;'+
658
- 'margin: -1px 0 0 !important;'+
659
- '}'+
660
- 'body#wpview-iframe-sandbox:before,'+
661
- 'body#wpview-iframe-sandbox:after {'+
662
- 'display: none;'+
663
- 'content: "";'+
664
- '}'+
665
- '</style>'+
666
- '</head>'+
667
- '<body id="wpview-iframe-sandbox" class="'+ editorInstance.getBody().className +'" style="display: inline-block;">'+
668
- $content.html() +
669
- '</body>'+
670
  '</html>'
671
  );
672
  iframeDoc.close();
@@ -680,35 +679,35 @@
680
 
681
  $wrapper.append($('<span class="wpview-end"></span>'));
682
 
683
- if (result && result.data && typeof result.data === "object") {
684
  result.data.width = $($wrapper).width();
685
  result.data.height = $($wrapper).height();
686
  }
687
 
688
  $(self).triggerHandler('EmbedPress.afterEmbed', {
689
- 'meta' : result.data,
690
- 'url' : rawUrl,
691
  'wrapper': $wrapper
692
  });
693
  });
694
  };
695
 
696
- self.appendElementsIntoWrapper = function(elementsList, wrapper, editorInstance) {
697
  if (elementsList.length > 0) {
698
- $.each(elementsList, function appendElementIntoWrapper(elementIndex, element) {
699
  // Check if the element is a script and do not add it now (if added here it wouldn't be executed)
700
  if (element.tagName.toLowerCase() !== 'script') {
701
  wrapper.append($(element));
702
 
703
  if (element.tagName.toLowerCase() === 'iframe') {
704
- $(element).ready(function() {
705
- window.setTimeout(function() {
706
- $.each(editorInstance.dom.select('div.embedpress_wrapper iframe'), function(elementIndex, iframe) {
707
  self.fixIframeSize(iframe);
708
  });
709
  }, 300);
710
  });
711
- } else if (element.tagName.toLowerCase() === "div") {
712
  if ($('img', $(element)).length || $('blockquote', wrapper).length) {
713
  // This ensures that the embed wrapper have the same width as its content
714
  $($(element).parents('.embedpress_wrapper').get(0)).addClass('dynamic-width');
@@ -725,7 +724,7 @@
725
  return wrapper;
726
  };
727
 
728
- self.encodeEmbedURLSpecialChars = function(content) {
729
  if (content.match(SHORTCODE_REGEXP)) {
730
  var subject = content.replace(SHORTCODE_REGEXP, '');
731
 
@@ -746,10 +745,10 @@
746
  return content;
747
  };
748
 
749
- self.decodeEmbedURLSpecialChars = function(content, applyShortcode, attributes) {
750
  var encodingRegexpRule = /embedpress(s?):\/\//;
751
- applyShortcode = (typeof applyShortcode === "undefined") ? true : applyShortcode;
752
- attributes = (typeof attributes === "undefined") ? {} : attributes;
753
 
754
  var isEncoded = content.match(encodingRegexpRule);
755
 
@@ -757,11 +756,11 @@
757
  content = content.replace(/embedpress(s?):\/\//, 'http$1://');
758
  content = content.replace('::__at__::', '@').trim();
759
 
760
- if ("class" in attributes) {
761
  var classesList = attributes.class.split(/\s/g);
762
  var shouldRemoveDynamicWidthClass = false;
763
  for (var classIndex = 0; classIndex < classesList.length; classIndex++) {
764
- if (classesList[classIndex] === "dynamic-width") {
765
  shouldRemoveDynamicWidthClass = classIndex;
766
  break;
767
  }
@@ -774,7 +773,7 @@
774
  delete attributes.class;
775
  }
776
 
777
- attributes.class = classesList.join(" ");
778
  }
779
 
780
  shouldRemoveDynamicWidthClass = classesList = classIndex = null;
@@ -789,19 +788,18 @@
789
  attrValue = attributes[attrName];
790
 
791
  // Prevent `class` property being empty an treated as a boolean param
792
- if (attrName.toLowerCase() === "class" && !attrValue.length) {
793
- continue;
794
- }
795
- else {
796
  if (attrValue.isBoolean()) {
797
- shortcode += " ";
798
  if (attrValue.isFalse()) {
799
- shortcode += "!";
800
  }
801
 
802
- shortcode += attrName
803
  } else {
804
- shortcode += ' '+ attrName +'="'+ attrValue +'"';
805
  }
806
  }
807
  }
@@ -820,24 +818,24 @@
820
  *
821
  * @return void
822
  */
823
- self.onFindEditor = function(editorInstance) {
824
- self.each = tinymce.each;
825
  self.extend = tinymce.extend;
826
- self.JSON = tinymce.util.JSON;
827
- self.Node = tinymce.html.Node;
828
 
829
- function onFindEditorCallback() {
830
  $(window.document.getElementsByTagName('head')[0]).append($('<link rel="stylesheet" type="text/css" href="' + (PLG_SYSTEM_ASSETS_CSS_PATH + '/vendor/bootstrap/bootstrap.min.css?v=' + self.params.versionUID) + '">'));
831
 
832
  self.addStylesheet(PLG_SYSTEM_ASSETS_CSS_PATH + '/font.css?v=' + self.params.versionUID, editorInstance, editorInstance);
833
  self.addStylesheet(PLG_SYSTEM_ASSETS_CSS_PATH + '/preview.css?v=' + self.params.versionUID, editorInstance, editorInstance);
834
  self.addStylesheet(PLG_CONTENT_ASSETS_CSS_PATH + '/embedpress.css?v=' + self.params.versionUID, editorInstance, editorInstance);
835
  self.addEvent('nodechange', editorInstance, self.onNodeChange);
836
- self.addEvent('keydown', editorInstance, function(e) {
837
  self.onKeyDown(e, editorInstance);
838
  });
839
 
840
- var onUndoCallback = function(e) {
841
  self.onUndo(e, editorInstance);
842
  };
843
 
@@ -845,18 +843,18 @@
845
  self.addEvent('undo', editorInstance.undoManager, onUndoCallback); // JCE
846
 
847
  var doc = editorInstance.getDoc();
848
- $(doc).on('mouseenter', '.embedpress_wrapper', function(e) {
849
  self.onMouseEnter(e, editorInstance);
850
  });
851
  $(doc).on('mouseout', '.embedpress_wrapper', self.onMouseOut);
852
- $(doc).on('mousedown', '.embedpress_wrapper > .embedpress_controller_panel', function(e) {
853
- self.cancelEvent(e, editorInstance)
854
  });
855
  doc = null;
856
 
857
  // Add the node filter that will convert the url into the preview box for the embed code
858
- editorInstance.parser.addNodeFilter('#text', function addNodeFilterIntoParser(nodes, arg) {
859
- self.each(nodes, function eachNodeInParser(node) {
860
  // Stop if the node is "isolated". It would generate an error in the browser console and break.
861
  if (node.parent === null && node.prev === null) {
862
  return;
@@ -864,7 +862,6 @@
864
 
865
  var subject = node.value.trim();
866
 
867
-
868
  if (!subject.isValidUrl()) {
869
  if (!subject.match(SHORTCODE_REGEXP)) {
870
  return;
@@ -877,14 +874,13 @@
877
  }
878
  }
879
 
880
-
881
  subject = node.value.stripShortcode($data.EMBEDPRESS_SHORTCODE).trim();
882
 
883
  // These patterns need to have groups for the pre and post texts
884
  // @TODO: maybe remove this list of URLs? Let the server side code decide what URL should be parsed
885
  var patterns = self.getProvidersURLPatterns();
886
 
887
- (function tryToMatchContentAgainstUrlPatternWithIndex(urlPatternIndex) {
888
  if (urlPatternIndex < patterns.length) {
889
  var urlPattern = patterns[urlPatternIndex];
890
  var urlPatternRegex = new RegExp(urlPattern);
@@ -898,22 +894,22 @@
898
 
899
  var wrapper = self.addURLsPlaceholder(node, url, editorInstance);
900
 
901
- setTimeout(function() {
902
  var doc = editorInstance.getDoc();
903
 
904
  if (doc === null) {
905
  return;
906
  }
907
 
908
- var previewWrapper = $(doc.querySelector('#'+ wrapper.attributes.map['id']));
909
  var previewWrapperParent = $(previewWrapper.parent());
910
 
911
- if (previewWrapperParent && previewWrapperParent.prop('tagName') && previewWrapperParent.prop('tagName').toUpperCase() === "P") {
912
  previewWrapperParent.replaceWith(previewWrapper);
913
  }
914
 
915
  var previewWrapperOlderSibling = previewWrapper.prev();
916
- if (previewWrapperOlderSibling && previewWrapperOlderSibling.prop('tagName') && previewWrapperOlderSibling.prop('tagName').toUpperCase() === "P" && !previewWrapperOlderSibling.html().replace(/\&nbsp\;/i, '').length) {
917
  previewWrapperOlderSibling.remove();
918
  } else {
919
  if (typeof previewWrapperOlderSibling.html() !== 'undefined') {
@@ -926,7 +922,7 @@
926
  }
927
 
928
  var previewWrapperYoungerSibling = previewWrapper.next();
929
- if (previewWrapperYoungerSibling && previewWrapperYoungerSibling.length && previewWrapperYoungerSibling.prop('tagName').toUpperCase() === "P") {
930
  if (!previewWrapperYoungerSibling.next().length && !previewWrapperYoungerSibling.html().replace(/\&nbsp\;/i, '').length) {
931
  previewWrapperYoungerSibling.remove();
932
  $('<p>&nbsp;</p>').insertAfter(previewWrapper);
@@ -935,7 +931,7 @@
935
  $('<p>&nbsp;</p>').insertAfter(previewWrapper);
936
  }
937
 
938
- setTimeout(function() {
939
  editorInstance.selection.select(editorInstance.getBody(), true);
940
  editorInstance.selection.collapse(false);
941
  }, 50);
@@ -950,29 +946,29 @@
950
  });
951
 
952
  // Add the filter that will convert the preview box/embed code back to the raw url
953
- editorInstance.serializer.addNodeFilter('div', function addNodeFilterIntoSerializer(nodes, arg) {
954
- self.each(nodes, function eachNodeInSerializer(node) {
955
  // Stop if the node is "isolated". It would generate an error in the browser console and break.
956
  if (node.parent === null && node.prev === null) {
957
  return;
958
  }
959
 
960
- var nodeClasses = (node.attributes.map.class || "").split(' ');
961
- var wrapperFactoryClasses = ["embedpress_wrapper", "embedpress_placeholder", "wpview", "wpview-wrap"];
962
 
963
- var isWrapped = nodeClasses.filter(function(n) {
964
  return wrapperFactoryClasses.indexOf(n) != -1;
965
  }).length > 0;
966
 
967
  if (isWrapped) {
968
- var factoryAttributes = ["id", "style", "data-loading-text", "data-uid", "data-url"];
969
  var customAttributes = {};
970
- var dataPrefix = "data-";
971
  for (var attr in node.attributes.map) {
972
- if (attr.toLowerCase() !== "class") {
973
  if (factoryAttributes.indexOf(attr) < 0) {
974
  // Remove the "data-" prefix for more readability
975
- customAttributes[attr.replace(dataPrefix, "")] = node.attributes.map[attr];
976
  }
977
  } else {
978
  var customClasses = [];
@@ -984,7 +980,7 @@
984
  }
985
 
986
  if (!!customClasses.length) {
987
- customAttributes.class = customClasses.join(" ");
988
  }
989
  }
990
  }
@@ -1002,10 +998,10 @@
1002
  });
1003
  });
1004
 
1005
- editorInstance.serializer.addNodeFilter('p', function addNodeFilterIntoSerializer(nodes, arg) {
1006
- self.each(nodes, function eachNodeInSerializer(node) {
1007
  if (node.firstChild == node.lastChild) {
1008
- if (node.firstChild && "value" in node.firstChild && (node.firstChild.value === "&nbsp;" || !node.firstChild.value.trim().length)) {
1009
  node.remove();
1010
  }
1011
  }
@@ -1014,8 +1010,8 @@
1014
 
1015
  //@todo:isthiseachreallynecessary?
1016
  // Add event to reconfigure wrappers every time the content is loaded
1017
- tinymce.each(tinymce.editors, function onEachEditor(editor) {
1018
- self.addEvent('loadContent', editor, function onInitEditor(ed) {
1019
  self.configureWrappers(editor);
1020
  });
1021
  });
@@ -1024,7 +1020,7 @@
1024
 
1025
  // @todo: This is needed only for JCE, to fix the img placeholder. Try to find out a better approach to avoid the placeholder blink
1026
  window.setTimeout(
1027
- function afterTimeoutOnFindEditor() {
1028
  /*
1029
  * This is required because after load/refresh the page, the
1030
  * onLoadContent is not being triggered automatically, so
@@ -1040,7 +1036,7 @@
1040
  // Let's make sure the inner doc has been fully loaded first.
1041
  var checkTimesLimit = 100;
1042
  var checkIndex = 0;
1043
- var statusCheckerInterval = setInterval(function() {
1044
  if (checkIndex === checkTimesLimit) {
1045
  clearInterval(statusCheckerInterval);
1046
  alert('For some reason TinyMCE was not fully loaded yet. Please, refresh the page and try again.');
@@ -1056,7 +1052,7 @@
1056
  }, 250);
1057
  };
1058
 
1059
- self.fixIframeSize = function(iframe) {
1060
  var maxWidth = 480;
1061
  if ($(iframe).width() > maxWidth && !$(iframe).data('size-fixed')) {
1062
  var ratio = $(iframe).height() / $(iframe).width();
@@ -1067,7 +1063,7 @@
1067
 
1068
  $(iframe).data('size-fixed', true);
1069
  }
1070
- }
1071
 
1072
  /**
1073
  * Function triggered on mouse enter the wrapper
@@ -1075,7 +1071,7 @@
1075
  * @param object e The event
1076
  * @return void
1077
  */
1078
- self.onMouseEnter = function(e, editorInstance) {
1079
  self.displayPreviewControllerPanel($(e.currentTarget), editorInstance);
1080
  };
1081
 
@@ -1085,7 +1081,7 @@
1085
  * @param object e The event
1086
  * @return void
1087
  */
1088
- self.onMouseOut = function(e) {
1089
  // Check if the destiny is not a child element
1090
  // Chrome
1091
  if (self.isDefined(e.toElement)) {
@@ -1117,18 +1113,18 @@
1117
  * @return void
1118
  */
1119
 
1120
- self.onPaste = function(plugin, args) {
1121
  var urlPatternRegex = new RegExp(/(https?):\/\/([w]{3}\.)?.+?(?:\s|$)/i);
1122
  var urlPatternsList = self.getProvidersURLPatterns();
1123
 
1124
  // Split the pasted content into separated lines.
1125
  var contentLines = args.content.split(/\n/g) || [];
1126
- contentLines = contentLines.map(function(line, itemIndex) {
1127
  // Check if there's a url into `line`.
1128
  if (line.match(urlPatternRegex)) {
1129
  // Split the current line across its space-characters to isolate the url.
1130
  let termsList = line.trim().split(/\s+/);
1131
- termsList = termsList.map(function(term, termIndex) {
1132
  // Check if the term into the current line is a url.
1133
  var match = term.match(urlPatternRegex);
1134
  if (match) {
@@ -1136,7 +1132,7 @@
1136
  // Isolates that url from the rest of the content if the service is supported.
1137
  var urlPattern = new RegExp(urlPatternsList[urlPatternIndex]);
1138
  if (urlPattern.test(term)) {
1139
- return '</p><p>'+ match[0] +'</p><p>';
1140
  }
1141
  }
1142
  }
@@ -1156,7 +1152,7 @@
1156
  var content = contentLines.join('');
1157
 
1158
  if (content.replace(/<br>$/, '') !== args.content) {
1159
- args.content = '<p>'+ args.content +'</p>';
1160
  }
1161
  };
1162
 
@@ -1169,22 +1165,22 @@
1169
  * @param object e The event
1170
  * @return void
1171
  */
1172
- self.onNodeChange = function(e) {
1173
  // Fix the clone parent on break lines issue
1174
  // Check if a line break was added
1175
  if (e.element.tagName === 'BR') {
1176
  // Check one of the parent elements is a clonned embed wrapper
1177
  if (e.parents.length > 0) {
1178
- $.each(e.parents, function(index, parent) {
1179
  if ($(parent).hasClass('embedpress_wrapper')) {
1180
  // Remove the cloned wrapper and replace with a 'br' tag
1181
  $(parent).replaceWith($('<br>'));
1182
  }
1183
  });
1184
  }
1185
- } else if (e.element.tagName === "IFRAME") {
1186
  if (e.parents.length > 0) {
1187
- $.each(e.parents, function(index, parent) {
1188
  parent = $(parent);
1189
  if (parent.hasClass('embedpress_wrapper')) {
1190
  var wrapper = $('.embedpress-wrapper', parent);
@@ -1197,14 +1193,14 @@
1197
  }
1198
  };
1199
 
1200
- self.onKeyDown = function(e, editorInstance) {
1201
  var node = editorInstance.selection.getNode();
1202
 
1203
  if (e.keyCode == 8 || e.keyCode == 46) {
1204
  if (node.nodeName.toLowerCase() === 'p') {
1205
  var children = $(node).children();
1206
  if (children.length > 0) {
1207
- $.each(children, function() {
1208
  // On delete, make sure to remove the wrapper and children, not only the wrapper
1209
  if ($(this).hasClass('embedpress_wrapper') || $(this).hasClass('embedpress_ignore_mouseout')) {
1210
  $(this).remove();
@@ -1245,9 +1241,9 @@
1245
  }
1246
 
1247
  return true;
1248
- }
1249
 
1250
- self.getWrapperFromChild = function(element) {
1251
  // Is the wrapper
1252
  if ($(element).hasClass('embedpress_wrapper')) {
1253
  return element;
@@ -1262,12 +1258,12 @@
1262
  return false;
1263
  };
1264
 
1265
- self.onUndo = function(e, editorInstance) {
1266
  // Force re-render everything
1267
  editorInstance.load();
1268
  };
1269
 
1270
- self.cancelEvent = function(e, editorInstance) {
1271
  e.preventDefault();
1272
  e.stopPropagation();
1273
  editorInstance.dom.events.cancel();
@@ -1283,14 +1279,14 @@
1283
  * @param Object e The event
1284
  * @return void
1285
  */
1286
- self.onClickEditButton = function(e, editorInstance) {
1287
  // Prevent edition of the panel
1288
  self.cancelEvent(e, editorInstance);
1289
 
1290
  self.activeWrapperForModal = self.activeWrapper;
1291
 
1292
  var $wrapper = self.activeWrapperForModal;
1293
- var wrapperUid = $wrapper.prop('id').replace("embedpress_wrapper_", "");
1294
 
1295
  var customAttributes = {};
1296
 
@@ -1300,98 +1296,98 @@
1300
  embedItem = null;
1301
  }
1302
 
1303
- $.each($embedInnerWrapper[0].attributes, function() {
1304
  if (this.specified) {
1305
- if (this.name !== "class") {
1306
- customAttributes[this.name.replace('data-', "").toLowerCase()] = this.value;
1307
  }
1308
  }
1309
  });
1310
 
1311
- var embedWidth = (((embedItem && embedItem.width()) || $embedInnerWrapper.data('width')) || $embedInnerWrapper.width()) || "";
1312
- var embedHeight = (((embedItem && embedItem.height()) || $embedInnerWrapper.data('height')) || $embedInnerWrapper.height()) || "";
1313
 
1314
  embedItem = $embedInnerWrapper = null;
1315
 
1316
  $('<div class="loader-indicator"><i class="embedpress-icon-reload"></i></div>').appendTo($wrapper);
1317
 
1318
- setTimeout(function() {
1319
  $.ajax({
1320
- type: "GET",
1321
- url: self.params.baseUrl +"wp-admin/admin-ajax.php",
1322
  data: {
1323
- action: "embedpress_get_embed_url_info",
1324
  url: self.decodeEmbedURLSpecialChars($wrapper.data('url'), false)
1325
  },
1326
- beforeSend: function(request, requestSettings) {
1327
  $('.loader-indicator', $wrapper).addClass('is-loading');
1328
  },
1329
- success: function(response) {
1330
  if (!response) {
1331
  bootbox.alert('Unable to get a valid response from the server.');
1332
  return;
1333
  }
1334
  if (response.canBeResponsive) {
1335
  var embedShouldBeResponsive = true;
1336
- if ("width" in customAttributes || "height" in customAttributes) {
1337
  embedShouldBeResponsive = false;
1338
- } else if ("responsive" in customAttributes && customAttributes['responsive'].isFalse()) {
1339
  embedShouldBeResponsive = false;
1340
  }
1341
  }
1342
 
1343
  bootbox.dialog({
1344
- className: "embedpress-modal",
1345
- title: "Editing Embed properties",
1346
- message: '<form id="form-'+ wrapperUid +'" embedpress>'+
1347
- '<div class="row">'+
1348
- '<div class="col-md-12">'+
1349
- '<div class="form-group">'+
1350
- '<label for="input-url-'+ wrapperUid +'">Url</label>'+
1351
- '<input class="form-control" type="url" id="input-url-'+ wrapperUid +'" value="'+ self.decodeEmbedURLSpecialChars($wrapper.data('url'), false) +'">'+
1352
- '</div>'+
1353
- '</div>'+
1354
- '</div>'+
1355
- '<div class="row">'+
1356
- (response.canBeResponsive ?
1357
- '<div class="col-md-12">'+
1358
- '<label>Responsive</label>'+
1359
- '<div class="form-group">'+
1360
- '<label class="radio-inline">'+
1361
- '<input type="radio" name="input-responsive-'+ wrapperUid +'" id="input-responsive-1-'+ wrapperUid +'" value="1"'+ (embedShouldBeResponsive ? ' checked="checked"' : '') +'> Yes'+
1362
- '</label>'+
1363
- '<label class="radio-inline">'+
1364
- '<input type="radio" name="input-responsive-'+ wrapperUid +'" id="input-responsive-0-'+ wrapperUid +'" value="0"'+ (!embedShouldBeResponsive ? ' checked="checked"' : '') +'> No'+
1365
- '</label>'+
1366
- '</div>'+
1367
- '</div>' : '')+
1368
- '<div class="col-md-6">'+
1369
- '<div class="form-group">'+
1370
- '<label for="input-width-'+ wrapperUid +'">Width</label>'+
1371
- '<input class="form-control" type="integer" id="input-width-'+ wrapperUid +'" value="'+ embedWidth +'"'+ (embedShouldBeResponsive ? ' disabled' : '') +'>'+
1372
- '</div>'+
1373
- '</div>'+
1374
- '<div class="col-md-6">'+
1375
- '<div class="form-group">'+
1376
- '<label for="input-height-'+ wrapperUid +'">Height</label>'+
1377
- '<input class="form-control" type="integer" id="input-height-'+ wrapperUid +'" value="'+ embedHeight +'"'+ (embedShouldBeResponsive ? ' disabled' : '') +'>'+
1378
- '</div>'+
1379
- '</div>'+
1380
- '</div>'+
1381
- '</form>',
1382
  buttons: {
1383
  danger: {
1384
- label: "Cancel",
1385
- className: "btn-default",
1386
- callback: function() {
1387
  // do nothing
1388
  self.activeWrapperForModal = null;
1389
  }
1390
  },
1391
  success: {
1392
- label: "Save",
1393
- className: "btn-primary",
1394
- callback: function() {
1395
  var $wrapper = self.activeWrapperForModal;
1396
 
1397
  // Select the current wrapper as a base for the new element
@@ -1402,31 +1398,31 @@
1402
  $wrapper.remove();
1403
 
1404
  if (response.canBeResponsive) {
1405
- if ($('#form-'+ wrapperUid +' input[name="input-responsive-'+ wrapperUid +'"]:checked').val().isFalse()) {
1406
- var embedCustomWidth = $('#input-width-'+ wrapperUid).val();
1407
  if (parseInt(embedCustomWidth) > 0) {
1408
  customAttributes['width'] = embedCustomWidth;
1409
  }
1410
 
1411
- var embedCustomHeight = $('#input-height-'+ wrapperUid).val();
1412
  if (parseInt(embedCustomHeight) > 0) {
1413
  customAttributes['height'] = embedCustomHeight;
1414
  }
1415
 
1416
- customAttributes['responsive'] = "false";
1417
  } else {
1418
  delete customAttributes['width'];
1419
  delete customAttributes['height'];
1420
 
1421
- customAttributes['responsive'] = "true";
1422
  }
1423
  } else {
1424
- var embedCustomWidth = $('#input-width-'+ wrapperUid).val();
1425
  if (parseInt(embedCustomWidth) > 0) {
1426
  customAttributes['width'] = embedCustomWidth;
1427
  }
1428
 
1429
- var embedCustomHeight = $('#input-height-'+ wrapperUid).val();
1430
  if (parseInt(embedCustomHeight) > 0) {
1431
  customAttributes['height'] = embedCustomHeight;
1432
  }
@@ -1439,7 +1435,7 @@
1439
  }
1440
  }
1441
 
1442
- var shortcode = '['+ $data.EMBEDPRESS_SHORTCODE + (customAttributesList.length > 0 ? " "+ customAttributesList.join(" ") : "") +']'+ $('#input-url-'+ wrapperUid).val() +'[/'+ $data.EMBEDPRESS_SHORTCODE +']';
1443
  // We do not directly replace the node because it was causing a bug on a second edit attempt
1444
  editorInstance.execCommand('mceInsertContent', false, shortcode);
1445
 
@@ -1449,21 +1445,21 @@
1449
  }
1450
  });
1451
 
1452
- $('form[embedpress]').on('change', 'input[type="radio"]', function(e) {
1453
  var self = $(this);
1454
  var form = self.parents('form[embedpress]');
1455
 
1456
  $('input[type="integer"]', form).prop('disabled', self.val().isTrue());
1457
  });
1458
  },
1459
- complete: function(request, textStatus) {
1460
  $('.loader-indicator', $wrapper).removeClass('is-loading');
1461
 
1462
- setTimeout(function() {
1463
  $('.loader-indicator', $wrapper).remove();
1464
  }, 350);
1465
  },
1466
- dataType: "json",
1467
  async: true
1468
  });
1469
  }, 200);
@@ -1478,7 +1474,7 @@
1478
  * @param Object e The event
1479
  * @return void
1480
  */
1481
- self.onClickRemoveButton = function(e, editorInstance) {
1482
  // Prevent edition of the panel
1483
  self.cancelEvent(e, editorInstance);
1484
 
@@ -1490,22 +1486,22 @@
1490
  return false;
1491
  };
1492
 
1493
- self.recursivelyAddClass = function(element, className) {
1494
- $(element).children().each(function(index, child) {
1495
  $(child).addClass(className);
1496
 
1497
  var grandChild = $(child).children();
1498
  if (grandChild.length > 0) {
1499
- self.recursivelyAddClass(child, className)
1500
  }
1501
  });
1502
  };
1503
 
1504
- self.setInterval = function(callback, time, timeout) {
1505
- var elapsed = 0;
1506
  var iteraction = 0;
1507
 
1508
- var interval = window.setInterval(function() {
1509
  elapsed += time;
1510
  iteraction++;
1511
 
@@ -1519,7 +1515,7 @@
1519
  return interval;
1520
  };
1521
 
1522
- self.stopInterval = function(interval) {
1523
  window.clearInterval(interval);
1524
  interval = null;
1525
  };
@@ -1528,9 +1524,9 @@
1528
  * Configure unconfigured embed wrappers, adding events and css
1529
  * @return void
1530
  */
1531
- self.configureWrappers = function(editorInstance) {
1532
  window.setTimeout(
1533
- function configureWrappersTimeOut() {
1534
  var doc = editorInstance.getDoc(),
1535
  $wrapper = null;
1536
 
@@ -1543,17 +1539,17 @@
1543
  // Check if the wrapper wasn't already configured
1544
  if ($wrapper.data('configured') != true) {
1545
  // A timeout was set to avoid block the content loading
1546
- window.setTimeout(function() {
1547
  // @todo: Check if we need a limit of levels to avoid use too much resources
1548
  self.recursivelyAddClass($wrapper, 'embedpress_ignore_mouseout');
1549
  }, 500);
1550
 
1551
  // Fix the wrapper size. Wait until find the child iframe. L
1552
- var interval = self.setInterval(function(iteraction) {
1553
  var $childIframes = $wrapper.find('iframe');
1554
 
1555
  if ($childIframes.length > 0) {
1556
- $.each($childIframes, function(index, iframe) {
1557
  // Facebook has more than one iframe, we need to ignore the Cross Domain Iframes
1558
  if ($(iframe).attr('id') !== 'fb_xdm_frame_https'
1559
  && $(iframe).attr('id') !== 'fb_xdm_frame_http'
@@ -1579,7 +1575,7 @@
1579
  *
1580
  * @return void
1581
  */
1582
- self.hidePreviewControllerPanel = function() {
1583
  if (self.controllerPanelIsActive()) {
1584
  $(self.activeControllerPanel).addClass('hidden');
1585
  self.activeControllerPanel = null;
@@ -1593,7 +1589,7 @@
1593
  * @param String id The element id
1594
  * @return Element The found element or null, wrapped by jQuery
1595
  */
1596
- self.getElementInContentById = function(id, editorInstance) {
1597
  var doc = editorInstance.getDoc();
1598
 
1599
  if (doc === null) {
@@ -1609,7 +1605,7 @@
1609
  * @param element $wrapper The wrapper which will be activate
1610
  * @return void
1611
  */
1612
- self.displayPreviewControllerPanel = function($wrapper, editorInstance) {
1613
  if (self.controllerPanelIsActive() && $wrapper !== self.activeWrapper) {
1614
  self.hidePreviewControllerPanel();
1615
  }
@@ -1622,11 +1618,11 @@
1622
  var $editButton = self.getElementInContentById('embedpress_button_edit_' + uid, editorInstance);
1623
  var $removeButton = self.getElementInContentById('embedpress_button_remove_' + uid, editorInstance);
1624
 
1625
- self.addEvent('mousedown', $editButton, function(e) {
1626
  self.onClickEditButton(e, editorInstance);
1627
  });
1628
 
1629
- self.addEvent('mousedown', $removeButton, function(e) {
1630
  self.onClickRemoveButton(e, editorInstance);
1631
  });
1632
 
5
  * @license GPLv2 or later
6
  * @since 1.0
7
  */
8
+ (function ($, String, $data, undefined) {
9
+ 'use strict';
10
 
11
+ $(window.document).ready(function () {
12
+ String.prototype.capitalizeFirstLetter = function () {
13
  return this.charAt(0).toUpperCase() + this.slice(1);
14
+ };
15
 
16
+ String.prototype.isValidUrl = function () {
17
  var rule = /^(https?|embedpresss?):\/\//i;
18
 
19
  return rule.test(this.toString());
20
+ };
21
 
22
+ String.prototype.hasShortcode = function (shortcode) {
23
+ var shortcodeRule = new RegExp('\\[' + shortcode + '(?:\\]|.+?\\])', 'ig');
24
  return !!this.toString().match(shortcodeRule);
25
+ };
26
 
27
+ String.prototype.stripShortcode = function (shortcode) {
28
+ var stripRule = new RegExp('(\\[' + shortcode + '(?:\\]|.+?\\])|\\[\\/' + shortcode + '\\])', 'ig');
29
+ return this.toString().replace(stripRule, '');
30
+ };
31
 
32
+ String.prototype.setShortcodeAttribute = function (attr, value, shortcode, replaceInsteadOfMerge) {
33
+ replaceInsteadOfMerge = typeof replaceInsteadOfMerge === 'undefined' ? false : replaceInsteadOfMerge;
34
  var subject = this.toString();
35
 
36
  if (subject.hasShortcode(shortcode)) {
40
  if (replaceInsteadOfMerge) {
41
  attributes[attr] = value;
42
  } else {
43
+ attributes[attr] += ' ' + value;
44
  }
45
  } else {
46
  attributes[attr] = value;
52
  parsedAttributes.push(attr + '="' + attributes[attr] + '"');
53
  }
54
 
55
+ subject = '[' + shortcode + ' ' + parsedAttributes.join(' ') + ']' + subject.stripShortcode(shortcode) + '[/' + shortcode + ']';
56
  } else {
57
  subject = '[' + shortcode + ']' + subject.stripShortcode(shortcode) + '[/' + shortcode + ']';
58
  }
61
  } else {
62
  return subject;
63
  }
64
+ };
65
 
66
+ String.prototype.getShortcodeAttributes = function (shortcode) {
67
  var subject = this.toString();
68
  if (subject.hasShortcode(shortcode)) {
69
  var attributes = {};
76
  var attrValue;
77
  if (match[2] === undefined) {
78
  // Prevent `class` property being empty an treated as a boolean param
79
+ if (attrName.toLowerCase() !== 'class') {
80
  if (attrName.indexOf('!') === 0) {
81
+ attrName = attrName.replace('!', '');
82
+ attrValue = 'false';
83
  } else {
84
+ attrValue = 'true';
85
  }
86
 
87
  attributes[attrName] = attrValue;
89
  } else {
90
  attrValue = match[2];
91
  if (attrValue.isBoolean()) {
92
+ attrValue = attrValue.isFalse() ? 'false' : 'true';
93
  }
94
 
95
  attributes[attrName] = attrValue;
103
  } else {
104
  return {};
105
  }
106
+ };
107
 
108
+ String.prototype.isBoolean = function () {
109
  var subject = this.toString().trim().toLowerCase();
110
 
111
  return subject.isTrue(false) || subject.isFalse();
112
  };
113
 
114
+ String.prototype.isTrue = function (defaultValue) {
115
  var subject = this.toString().trim().toLowerCase();
116
  defaultValue = typeof defaultValue === undefined ? true : defaultValue;
117
 
118
  switch (subject) {
119
+ case '':
120
+ defaultValue += '';
121
  return !defaultValue.isFalse();
122
+ case '1':
123
+ case 'true':
124
+ case 'on':
125
+ case 'yes':
126
+ case 'y':
127
  return true;
128
  default:
129
  return false;
130
  }
131
  };
132
 
133
+ String.prototype.isFalse = function () {
134
  var subject = this.toString().trim().toLowerCase();
135
 
136
  switch (subject) {
137
+ case '0':
138
+ case 'false':
139
+ case 'off':
140
+ case 'no':
141
+ case 'n':
142
+ case 'nil':
143
+ case 'null':
144
  return true;
145
  default:
146
  return false;
147
  }
148
  };
149
 
150
+ var SHORTCODE_REGEXP = new RegExp('\\[\/?' + $data.EMBEDPRESS_SHORTCODE + '\\]', 'gi');
151
 
152
+ var EmbedPress = function () {
153
  var self = this;
154
 
155
+ var PLG_SYSTEM_ASSETS_CSS_PATH = $data.EMBEDPRESS_URL_ASSETS + 'css';
156
  var PLG_CONTENT_ASSETS_CSS_PATH = PLG_SYSTEM_ASSETS_CSS_PATH;
157
 
158
  /**
161
  * @type Object
162
  */
163
  self.params = {
164
+ baseUrl: '',
165
  versionUID: '0'
166
  };
167
 
208
  $(self.onReady);
209
  };
210
 
211
+ self.addEvent = function (event, element, callback) {
212
  if (typeof element.on !== 'undefined') {
213
  element.on(event, callback);
214
  } else {
218
  }
219
  };
220
 
221
+ self.isEmpty = function (list) {
222
  return list.length === 0;
223
  };
224
 
225
+ self.isDefined = function (attribute) {
226
  return (typeof attribute !== 'undefined') && (attribute !== null);
227
+ };
228
 
229
+ self.makeId = function () {
230
+ var text = '';
231
+ var possible = 'abcdefghijklmnopqrstuvwxyz0123456789';
232
 
233
+ for (var i = 0; i < 5; i++)
234
  text += possible.charAt(Math.floor(Math.random() * possible.length));
235
 
236
  return text;
237
  };
238
 
239
+ self.loadAsyncDynamicJsCodeFromElement = function (subject, wrapper, editorInstance) {
 
240
  subject = $(subject);
241
+ if (subject.prop('tagName').toLowerCase() === 'script') {
242
  var scriptSrc = subject.attr('src') || null;
243
  if (!scriptSrc) {
244
  self.addScriptDeclaration(wrapper, subject.html(), editorInstance);
248
  } else {
249
  var innerScriptsList = $('script', subject);
250
  if (innerScriptsList.length > 0) {
251
+ $.each(innerScriptsList, function (innerScriptIndex, innerScript) {
252
  self.loadAsyncDynamicJsCodeFromElement(innerScript, wrapper, editorInstance);
253
  });
254
  }
255
  }
256
+ };
257
 
258
  /**
259
  * Method executed on the document ready event
260
  *
261
  * @return void
262
  */
263
+ self.onReady = function () {
264
+ var findEditors = function () {
265
  // Wait until the editor is available
266
  var interval = window.setInterval(
267
+ function () {
268
  var editorsFound = self.getEditors();
269
  if (editorsFound.length) {
270
  self.loadedEditors = editorsFound;
288
 
289
  // Add support for the Beaver Builder.
290
  if (typeof FLLightbox !== 'undefined') {
291
+ $.each(FLLightbox._instances, function (index) {
292
+ FLLightbox._instances[index].on('open', function () {
293
+ setTimeout(function () {
294
  findEditors();
295
  }, 500);
296
  });
297
 
298
+ FLLightbox._instances[index].on('didHideLightbox', function () {
299
+ setTimeout(function () {
300
  findEditors();
301
  }, 500);
302
  });
308
  * Detects if tinymce object is available
309
  * @return Boolean True, if available
310
  */
311
+ self.tinymceIsAvailable = function () {
312
+ return typeof window.tinymce === 'object' || typeof window.tinyMCE === 'object';
313
+ };
314
 
315
  /**
316
  * Returns true if the controller panel is active
317
  * @return Boolean True, if the controller panel is active
318
  */
319
+ self.controllerPanelIsActive = function () {
320
  return typeof self.activeControllerPanel !== 'undefined' && self.activeControllerPanel !== null;
321
  };
322
 
324
  * Returns the editor
325
  * @return Object The editor
326
  */
327
+ self.getEditors = function () {
328
  if (!window.tinymce || !window.tinymce.editors || window.tinymce.editors.length === 0) {
329
  return [];
330
  }
340
  * @param function onsuccess The callback called on success
341
  * @return void
342
  */
343
+ self.getParsedContent = function (content, onsuccess) {
344
  // Get the parsed content
345
  $.ajax({
346
  type: 'POST',
347
+ url: self.params.baseUrl + 'wp-admin/admin-ajax.php',
348
  data: {
349
+ action: 'embedpress_do_ajax_request',
350
  subject: content
351
  },
352
  success: onsuccess,
355
  });
356
  };
357
 
358
+ self.addStylesheet = function (url, editorInstance) {
359
  var head = editorInstance.getDoc().getElementsByTagName('head')[0];
360
 
361
  var $style = $('<link rel="stylesheet" type="text/css" href="' + url + '">');
362
  $style.appendTo(head);
363
+ };
364
 
365
+ self.convertURLSchemeToPattern = function (scheme) {
366
  var prefix = '(.*)((?:http|embedpress)s?:\\/\\/(?:www\\.)?',
367
  suffix = '[\\/]?)(.*)',
368
  pattern;
374
  return prefix + scheme + suffix;
375
  };
376
 
377
+ self.getProvidersURLPatterns = function () {
378
  // @todo: Add option to disable/enable the providers
379
  var patterns = [];
380
 
381
+ self.each($data.urlSchemes, function convertEachURLSchemesToPattern (scheme) {
382
  patterns.push(self.convertURLSchemeToPattern(scheme));
383
  });
384
 
385
  return patterns;
386
  };
387
 
388
+ self.addScript = function (source, callback, wrapper, editorInstance) {
389
  var doc = editorInstance.getDoc();
390
 
391
  if (typeof wrapper === 'undefined' || !wrapper) {
404
  wrapper.append($script);
405
  };
406
 
407
+ self.addScriptDeclaration = function (wrapper, declaration, editorInstance) {
408
  var doc = editorInstance.getDoc(),
409
  $script = $(doc.createElement('script'));
410
 
413
  $script.text(declaration);
414
  };
415
 
416
+ self.addURLsPlaceholder = function (node, url, editorInstance) {
417
  var uid = self.makeId();
418
 
419
+ var wrapperClasses = ['embedpress_wrapper', 'embedpress_placeholder', 'wpview', 'wpview-wrap'];
420
 
421
  var shortcodeAttributes = node.value.getShortcodeAttributes($data.EMBEDPRESS_SHORTCODE);
422
  var customAttributes = shortcodeAttributes;
423
 
424
+ var customClasses = '';
425
  if (!!Object.keys(shortcodeAttributes).length) {
426
+ var specialAttributes = ['class', 'href', 'data-href'];
427
  // Iterates over each attribute of shortcodeAttributes to add the prefix "data-" if missing
428
+ var dataPrefix = 'data-';
429
  var prefixedShortcodeAttributes = [];
430
  for (var attr in shortcodeAttributes) {
431
  if (specialAttributes.indexOf(attr) === -1) {
435
  prefixedShortcodeAttributes[attr] = shortcodeAttributes[attr];
436
  }
437
  } else {
438
+ attr = attr.replace(dataPrefix, '');
439
+ if (attr === 'class') {
440
  wrapperClasses.push(shortcodeAttributes[attr]);
441
  }
442
  }
446
  prefixedShortcodeAttributes = dataPrefix = null;
447
  }
448
 
449
+ if (('data-width' in shortcodeAttributes || 'data-height' in shortcodeAttributes) && 'data-responsive' in shortcodeAttributes) {
450
+ shortcodeAttributes['data-responsive'] = 'false';
451
  }
452
 
453
  var wrapper = new self.Node('div', 1);
454
  var wrapperSettings = {
455
+ 'class': Array.from(new Set(wrapperClasses)).join(' '),
456
+ 'data-url': url,
457
+ 'data-uid': uid,
458
+ 'id': 'embedpress_wrapper_' + uid,
459
  'data-loading-text': 'Loading your embed...'
460
  };
461
 
462
  wrapperSettings = $.extend({}, wrapperSettings, shortcodeAttributes);
463
 
464
  if (wrapperSettings.class.indexOf('is-loading') === -1) {
465
+ wrapperSettings.class += ' is-loading';
466
  }
467
 
468
  wrapper.attr(wrapperSettings);
469
 
470
  var panel = new self.Node('div', 1);
471
  panel.attr({
472
+ 'id': 'embedpress_controller_panel_' + uid,
473
  'class': 'embedpress_controller_panel embedpress_ignore_mouseout hidden'
474
  });
475
  wrapper.append(panel);
476
 
477
+ function createGhostNode (htmlTag, content) {
478
+ htmlTag = htmlTag || 'span';
479
+ content = content || '&nbsp;';
480
 
481
  var ghostNode = new self.Node(htmlTag, 1);
482
  ghostNode.attr({
483
+ 'class': 'hidden'
484
  });
485
 
486
  var ghostText = new self.Node('#text', 3);
492
 
493
  var editButton = new self.Node('div', 1);
494
  editButton.attr({
495
+ 'id': 'embedpress_button_edit_' + uid,
496
  'class': 'embedpress_ignore_mouseout embedpress_controller_button'
497
  });
498
  var editButtonIcon = new self.Node('div', 1);
505
 
506
  var removeButton = new self.Node('div', 1);
507
  removeButton.attr({
508
+ 'id': 'embedpress_button_remove_' + uid,
509
  'class': 'embedpress_ignore_mouseout embedpress_controller_button'
510
  });
511
  var removeButtonIcon = new self.Node('div', 1);
521
  node.replace(wrapper);
522
 
523
  // Trigger the timeout which will load the content
524
+ window.setTimeout(function () {
525
  self.parseContentAsync(uid, url, customAttributes, editorInstance);
526
  }, 200);
527
 
528
  return wrapper;
529
  };
530
 
531
+ self.parseContentAsync = function (uid, url, customAttributes, editorInstance) {
532
+ customAttributes = typeof customAttributes === 'undefined' ? {} : customAttributes;
533
 
534
  url = self.decodeEmbedURLSpecialChars(url, true, customAttributes);
535
  var rawUrl = url.stripShortcode($data.EMBEDPRESS_SHORTCODE);
536
 
537
  $(self).triggerHandler('EmbedPress.beforeEmbed', {
538
+ 'url': rawUrl,
539
  'meta': {
540
  'attributes': customAttributes || {}
541
  }
542
  });
543
 
544
  // Get the parsed embed code from the EmbedPress plugin
545
+ self.getParsedContent(url, function getParsedContentCallback (result) {
546
+ var embeddedContent = (typeof result.data === 'object' ? result.data.embed : result.data).stripShortcode($data.EMBEDPRESS_SHORTCODE);
547
 
548
  var $wrapper = $(self.getElementInContentById('embedpress_wrapper_' + uid, editorInstance));
549
  var wrapperParent = $($wrapper.parent());
550
 
551
  // Check if $wrapper was rendered inside a <p> element.
552
+ if (wrapperParent.prop('tagName') && wrapperParent.prop('tagName').toUpperCase() === 'P') {
553
  wrapperParent.replaceWith($wrapper);
554
  // Check if there's at least one "space" after $wrapper.
555
  var nextSibling = $($wrapper).next();
556
+ if (!nextSibling.length || nextSibling.prop('tagName').toUpperCase() !== 'P') {
557
  //$('<p>&nbsp;</p>').insertAfter($wrapper);
558
  }
559
  nextSibling = null;
563
  // Check if the url could not be embedded for some reason.
564
  if (rawUrl === embeddedContent) {
565
  // Echoes the raw url
566
+ $wrapper.replaceWith($('<p>' + rawUrl + '</p>'));
567
  return;
568
  }
569
 
573
  var $content;
574
  try {
575
  $content = $(embeddedContent);
576
+ } catch (err) {
577
  // Fallback to a div, if the result is not a html markup, e.g. a url
578
  $content = $('<div>');
579
  $content.html(embeddedContent);
587
 
588
  $wrapper.append(contentWrapper);
589
 
590
+ setTimeout(function () {
591
+ editorInstance.undoManager.transact(function () {
592
  var iframe = editorInstance.getDoc().createElement('iframe');
593
  iframe.src = tinymce.Env.ie ? 'javascript:""' : '';
594
  iframe.frameBorder = '0';
595
  iframe.allowTransparency = 'true';
596
  iframe.scrolling = 'no';
597
+ iframe.class = 'wpview-sandbox';
598
  iframe.style.width = '100%';
599
 
600
  contentWrapper.append(iframe);
607
 
608
  var iframeDoc = iframeWindow.document;
609
 
610
+ $(iframe).load(function () {
611
  var maximumChecksAllowed = 8;
612
  var checkIndex = 0;
613
 
614
+ var checkerInterval = setInterval(function () {
615
  if (checkIndex === maximumChecksAllowed) {
616
  clearInterval(checkerInterval);
617
 
618
+ setTimeout(function () {
619
  $wrapper.css('width', iframe.width);
620
  $wrapper.css('height', iframe.height);
621
  }, 100);
622
  } else {
623
  if (customAttributes.height) {
624
  iframe.height = customAttributes.height;
625
+ iframe.style.height = customAttributes.height + 'px';
626
  } else {
627
  iframe.height = $('body', iframeDoc).height();
628
  }
629
 
630
  if (customAttributes.width) {
631
  iframe.width = customAttributes.width;
632
+ iframe.style.width = customAttributes.width + 'px';
633
  } else {
634
  iframe.width = $('body', iframeDoc).width();
635
  }
641
 
642
  iframeDoc.open();
643
  iframeDoc.write(
644
+ '<!DOCTYPE html>' +
645
+ '<html>' +
646
+ '<head>' +
647
+ '<meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />' +
648
+ '<style>' +
649
+ 'html {' +
650
+ 'background: transparent;' +
651
+ 'padding: 0;' +
652
+ 'margin: 0;' +
653
+ '}' +
654
+ 'body#wpview-iframe-sandbox {' +
655
+ 'background: transparent;' +
656
+ 'padding: 1px 0 !important;' +
657
+ 'margin: -1px 0 0 !important;' +
658
+ '}' +
659
+ 'body#wpview-iframe-sandbox:before,' +
660
+ 'body#wpview-iframe-sandbox:after {' +
661
+ 'display: none;' +
662
+ 'content: "";' +
663
+ '}' +
664
+ '</style>' +
665
+ '</head>' +
666
+ '<body id="wpview-iframe-sandbox" class="' + editorInstance.getBody().className + '" style="display: inline-block;">' +
667
+ $content.html() +
668
+ '</body>' +
669
  '</html>'
670
  );
671
  iframeDoc.close();
679
 
680
  $wrapper.append($('<span class="wpview-end"></span>'));
681
 
682
+ if (result && result.data && typeof result.data === 'object') {
683
  result.data.width = $($wrapper).width();
684
  result.data.height = $($wrapper).height();
685
  }
686
 
687
  $(self).triggerHandler('EmbedPress.afterEmbed', {
688
+ 'meta': result.data,
689
+ 'url': rawUrl,
690
  'wrapper': $wrapper
691
  });
692
  });
693
  };
694
 
695
+ self.appendElementsIntoWrapper = function (elementsList, wrapper, editorInstance) {
696
  if (elementsList.length > 0) {
697
+ $.each(elementsList, function appendElementIntoWrapper (elementIndex, element) {
698
  // Check if the element is a script and do not add it now (if added here it wouldn't be executed)
699
  if (element.tagName.toLowerCase() !== 'script') {
700
  wrapper.append($(element));
701
 
702
  if (element.tagName.toLowerCase() === 'iframe') {
703
+ $(element).ready(function () {
704
+ window.setTimeout(function () {
705
+ $.each(editorInstance.dom.select('div.embedpress_wrapper iframe'), function (elementIndex, iframe) {
706
  self.fixIframeSize(iframe);
707
  });
708
  }, 300);
709
  });
710
+ } else if (element.tagName.toLowerCase() === 'div') {
711
  if ($('img', $(element)).length || $('blockquote', wrapper).length) {
712
  // This ensures that the embed wrapper have the same width as its content
713
  $($(element).parents('.embedpress_wrapper').get(0)).addClass('dynamic-width');
724
  return wrapper;
725
  };
726
 
727
+ self.encodeEmbedURLSpecialChars = function (content) {
728
  if (content.match(SHORTCODE_REGEXP)) {
729
  var subject = content.replace(SHORTCODE_REGEXP, '');
730
 
745
  return content;
746
  };
747
 
748
+ self.decodeEmbedURLSpecialChars = function (content, applyShortcode, attributes) {
749
  var encodingRegexpRule = /embedpress(s?):\/\//;
750
+ applyShortcode = (typeof applyShortcode === 'undefined') ? true : applyShortcode;
751
+ attributes = (typeof attributes === 'undefined') ? {} : attributes;
752
 
753
  var isEncoded = content.match(encodingRegexpRule);
754
 
756
  content = content.replace(/embedpress(s?):\/\//, 'http$1://');
757
  content = content.replace('::__at__::', '@').trim();
758
 
759
+ if ('class' in attributes) {
760
  var classesList = attributes.class.split(/\s/g);
761
  var shouldRemoveDynamicWidthClass = false;
762
  for (var classIndex = 0; classIndex < classesList.length; classIndex++) {
763
+ if (classesList[classIndex] === 'dynamic-width') {
764
  shouldRemoveDynamicWidthClass = classIndex;
765
  break;
766
  }
773
  delete attributes.class;
774
  }
775
 
776
+ attributes.class = classesList.join(' ');
777
  }
778
 
779
  shouldRemoveDynamicWidthClass = classesList = classIndex = null;
788
  attrValue = attributes[attrName];
789
 
790
  // Prevent `class` property being empty an treated as a boolean param
791
+ if (attrName.toLowerCase() === 'class' && !attrValue.length) {
792
+
793
+ } else {
 
794
  if (attrValue.isBoolean()) {
795
+ shortcode += ' ';
796
  if (attrValue.isFalse()) {
797
+ shortcode += '!';
798
  }
799
 
800
+ shortcode += attrName;
801
  } else {
802
+ shortcode += ' ' + attrName + '="' + attrValue + '"';
803
  }
804
  }
805
  }
818
  *
819
  * @return void
820
  */
821
+ self.onFindEditor = function (editorInstance) {
822
+ self.each = tinymce.each;
823
  self.extend = tinymce.extend;
824
+ self.JSON = tinymce.util.JSON;
825
+ self.Node = tinymce.html.Node;
826
 
827
+ function onFindEditorCallback () {
828
  $(window.document.getElementsByTagName('head')[0]).append($('<link rel="stylesheet" type="text/css" href="' + (PLG_SYSTEM_ASSETS_CSS_PATH + '/vendor/bootstrap/bootstrap.min.css?v=' + self.params.versionUID) + '">'));
829
 
830
  self.addStylesheet(PLG_SYSTEM_ASSETS_CSS_PATH + '/font.css?v=' + self.params.versionUID, editorInstance, editorInstance);
831
  self.addStylesheet(PLG_SYSTEM_ASSETS_CSS_PATH + '/preview.css?v=' + self.params.versionUID, editorInstance, editorInstance);
832
  self.addStylesheet(PLG_CONTENT_ASSETS_CSS_PATH + '/embedpress.css?v=' + self.params.versionUID, editorInstance, editorInstance);
833
  self.addEvent('nodechange', editorInstance, self.onNodeChange);
834
+ self.addEvent('keydown', editorInstance, function (e) {
835
  self.onKeyDown(e, editorInstance);
836
  });
837
 
838
+ var onUndoCallback = function (e) {
839
  self.onUndo(e, editorInstance);
840
  };
841
 
843
  self.addEvent('undo', editorInstance.undoManager, onUndoCallback); // JCE
844
 
845
  var doc = editorInstance.getDoc();
846
+ $(doc).on('mouseenter', '.embedpress_wrapper', function (e) {
847
  self.onMouseEnter(e, editorInstance);
848
  });
849
  $(doc).on('mouseout', '.embedpress_wrapper', self.onMouseOut);
850
+ $(doc).on('mousedown', '.embedpress_wrapper > .embedpress_controller_panel', function (e) {
851
+ self.cancelEvent(e, editorInstance);
852
  });
853
  doc = null;
854
 
855
  // Add the node filter that will convert the url into the preview box for the embed code
856
+ editorInstance.parser.addNodeFilter('#text', function addNodeFilterIntoParser (nodes, arg) {
857
+ self.each(nodes, function eachNodeInParser (node) {
858
  // Stop if the node is "isolated". It would generate an error in the browser console and break.
859
  if (node.parent === null && node.prev === null) {
860
  return;
862
 
863
  var subject = node.value.trim();
864
 
 
865
  if (!subject.isValidUrl()) {
866
  if (!subject.match(SHORTCODE_REGEXP)) {
867
  return;
874
  }
875
  }
876
 
 
877
  subject = node.value.stripShortcode($data.EMBEDPRESS_SHORTCODE).trim();
878
 
879
  // These patterns need to have groups for the pre and post texts
880
  // @TODO: maybe remove this list of URLs? Let the server side code decide what URL should be parsed
881
  var patterns = self.getProvidersURLPatterns();
882
 
883
+ (function tryToMatchContentAgainstUrlPatternWithIndex (urlPatternIndex) {
884
  if (urlPatternIndex < patterns.length) {
885
  var urlPattern = patterns[urlPatternIndex];
886
  var urlPatternRegex = new RegExp(urlPattern);
894
 
895
  var wrapper = self.addURLsPlaceholder(node, url, editorInstance);
896
 
897
+ setTimeout(function () {
898
  var doc = editorInstance.getDoc();
899
 
900
  if (doc === null) {
901
  return;
902
  }
903
 
904
+ var previewWrapper = $(doc.querySelector('#' + wrapper.attributes.map['id']));
905
  var previewWrapperParent = $(previewWrapper.parent());
906
 
907
+ if (previewWrapperParent && previewWrapperParent.prop('tagName') && previewWrapperParent.prop('tagName').toUpperCase() === 'P') {
908
  previewWrapperParent.replaceWith(previewWrapper);
909
  }
910
 
911
  var previewWrapperOlderSibling = previewWrapper.prev();
912
+ if (previewWrapperOlderSibling && previewWrapperOlderSibling.prop('tagName') && previewWrapperOlderSibling.prop('tagName').toUpperCase() === 'P' && !previewWrapperOlderSibling.html().replace(/\&nbsp\;/i, '').length) {
913
  previewWrapperOlderSibling.remove();
914
  } else {
915
  if (typeof previewWrapperOlderSibling.html() !== 'undefined') {
922
  }
923
 
924
  var previewWrapperYoungerSibling = previewWrapper.next();
925
+ if (previewWrapperYoungerSibling && previewWrapperYoungerSibling.length && previewWrapperYoungerSibling.prop('tagName').toUpperCase() === 'P') {
926
  if (!previewWrapperYoungerSibling.next().length && !previewWrapperYoungerSibling.html().replace(/\&nbsp\;/i, '').length) {
927
  previewWrapperYoungerSibling.remove();
928
  $('<p>&nbsp;</p>').insertAfter(previewWrapper);
931
  $('<p>&nbsp;</p>').insertAfter(previewWrapper);
932
  }
933
 
934
+ setTimeout(function () {
935
  editorInstance.selection.select(editorInstance.getBody(), true);
936
  editorInstance.selection.collapse(false);
937
  }, 50);
946
  });
947
 
948
  // Add the filter that will convert the preview box/embed code back to the raw url
949
+ editorInstance.serializer.addNodeFilter('div', function addNodeFilterIntoSerializer (nodes, arg) {
950
+ self.each(nodes, function eachNodeInSerializer (node) {
951
  // Stop if the node is "isolated". It would generate an error in the browser console and break.
952
  if (node.parent === null && node.prev === null) {
953
  return;
954
  }
955
 
956
+ var nodeClasses = (node.attributes.map.class || '').split(' ');
957
+ var wrapperFactoryClasses = ['embedpress_wrapper', 'embedpress_placeholder', 'wpview', 'wpview-wrap'];
958
 
959
+ var isWrapped = nodeClasses.filter(function (n) {
960
  return wrapperFactoryClasses.indexOf(n) != -1;
961
  }).length > 0;
962
 
963
  if (isWrapped) {
964
+ var factoryAttributes = ['id', 'style', 'data-loading-text', 'data-uid', 'data-url'];
965
  var customAttributes = {};
966
+ var dataPrefix = 'data-';
967
  for (var attr in node.attributes.map) {
968
+ if (attr.toLowerCase() !== 'class') {
969
  if (factoryAttributes.indexOf(attr) < 0) {
970
  // Remove the "data-" prefix for more readability
971
+ customAttributes[attr.replace(dataPrefix, '')] = node.attributes.map[attr];
972
  }
973
  } else {
974
  var customClasses = [];
980
  }
981
 
982
  if (!!customClasses.length) {
983
+ customAttributes.class = customClasses.join(' ');
984
  }
985
  }
986
  }
998
  });
999
  });
1000
 
1001
+ editorInstance.serializer.addNodeFilter('p', function addNodeFilterIntoSerializer (nodes, arg) {
1002
+ self.each(nodes, function eachNodeInSerializer (node) {
1003
  if (node.firstChild == node.lastChild) {
1004
+ if (node.firstChild && 'value' in node.firstChild && (node.firstChild.value === '&nbsp;' || !node.firstChild.value.trim().length)) {
1005
  node.remove();
1006
  }
1007
  }
1010
 
1011
  //@todo:isthiseachreallynecessary?
1012
  // Add event to reconfigure wrappers every time the content is loaded
1013
+ tinymce.each(tinymce.editors, function onEachEditor (editor) {
1014
+ self.addEvent('loadContent', editor, function onInitEditor (ed) {
1015
  self.configureWrappers(editor);
1016
  });
1017
  });
1020
 
1021
  // @todo: This is needed only for JCE, to fix the img placeholder. Try to find out a better approach to avoid the placeholder blink
1022
  window.setTimeout(
1023
+ function afterTimeoutOnFindEditor () {
1024
  /*
1025
  * This is required because after load/refresh the page, the
1026
  * onLoadContent is not being triggered automatically, so
1036
  // Let's make sure the inner doc has been fully loaded first.
1037
  var checkTimesLimit = 100;
1038
  var checkIndex = 0;
1039
+ var statusCheckerInterval = setInterval(function () {
1040
  if (checkIndex === checkTimesLimit) {
1041
  clearInterval(statusCheckerInterval);
1042
  alert('For some reason TinyMCE was not fully loaded yet. Please, refresh the page and try again.');
1052
  }, 250);
1053
  };
1054
 
1055
+ self.fixIframeSize = function (iframe) {
1056
  var maxWidth = 480;
1057
  if ($(iframe).width() > maxWidth && !$(iframe).data('size-fixed')) {
1058
  var ratio = $(iframe).height() / $(iframe).width();
1063
 
1064
  $(iframe).data('size-fixed', true);
1065
  }
1066
+ };
1067
 
1068
  /**
1069
  * Function triggered on mouse enter the wrapper
1071
  * @param object e The event
1072
  * @return void
1073
  */
1074
+ self.onMouseEnter = function (e, editorInstance) {
1075
  self.displayPreviewControllerPanel($(e.currentTarget), editorInstance);
1076
  };
1077
 
1081
  * @param object e The event
1082
  * @return void
1083
  */
1084
+ self.onMouseOut = function (e) {
1085
  // Check if the destiny is not a child element
1086
  // Chrome
1087
  if (self.isDefined(e.toElement)) {
1113
  * @return void
1114
  */
1115
 
1116
+ self.onPaste = function (plugin, args) {
1117
  var urlPatternRegex = new RegExp(/(https?):\/\/([w]{3}\.)?.+?(?:\s|$)/i);
1118
  var urlPatternsList = self.getProvidersURLPatterns();
1119
 
1120
  // Split the pasted content into separated lines.
1121
  var contentLines = args.content.split(/\n/g) || [];
1122
+ contentLines = contentLines.map(function (line, itemIndex) {
1123
  // Check if there's a url into `line`.
1124
  if (line.match(urlPatternRegex)) {
1125
  // Split the current line across its space-characters to isolate the url.
1126
  let termsList = line.trim().split(/\s+/);
1127
+ termsList = termsList.map(function (term, termIndex) {
1128
  // Check if the term into the current line is a url.
1129
  var match = term.match(urlPatternRegex);
1130
  if (match) {
1132
  // Isolates that url from the rest of the content if the service is supported.
1133
  var urlPattern = new RegExp(urlPatternsList[urlPatternIndex]);
1134
  if (urlPattern.test(term)) {
1135
+ return '</p><p>' + match[0] + '</p><p>';
1136
  }
1137
  }
1138
  }
1152
  var content = contentLines.join('');
1153
 
1154
  if (content.replace(/<br>$/, '') !== args.content) {
1155
+ args.content = '<p>' + args.content + '</p>';
1156
  }
1157
  };
1158
 
1165
  * @param object e The event
1166
  * @return void
1167
  */
1168
+ self.onNodeChange = function (e) {
1169
  // Fix the clone parent on break lines issue
1170
  // Check if a line break was added
1171
  if (e.element.tagName === 'BR') {
1172
  // Check one of the parent elements is a clonned embed wrapper
1173
  if (e.parents.length > 0) {
1174
+ $.each(e.parents, function (index, parent) {
1175
  if ($(parent).hasClass('embedpress_wrapper')) {
1176
  // Remove the cloned wrapper and replace with a 'br' tag
1177
  $(parent).replaceWith($('<br>'));
1178
  }
1179
  });
1180
  }
1181
+ } else if (e.element.tagName === 'IFRAME') {
1182
  if (e.parents.length > 0) {
1183
+ $.each(e.parents, function (index, parent) {
1184
  parent = $(parent);
1185
  if (parent.hasClass('embedpress_wrapper')) {
1186
  var wrapper = $('.embedpress-wrapper', parent);
1193
  }
1194
  };
1195
 
1196
+ self.onKeyDown = function (e, editorInstance) {
1197
  var node = editorInstance.selection.getNode();
1198
 
1199
  if (e.keyCode == 8 || e.keyCode == 46) {
1200
  if (node.nodeName.toLowerCase() === 'p') {
1201
  var children = $(node).children();
1202
  if (children.length > 0) {
1203
+ $.each(children, function () {
1204
  // On delete, make sure to remove the wrapper and children, not only the wrapper
1205
  if ($(this).hasClass('embedpress_wrapper') || $(this).hasClass('embedpress_ignore_mouseout')) {
1206
  $(this).remove();
1241
  }
1242
 
1243
  return true;
1244
+ };
1245
 
1246
+ self.getWrapperFromChild = function (element) {
1247
  // Is the wrapper
1248
  if ($(element).hasClass('embedpress_wrapper')) {
1249
  return element;
1258
  return false;
1259
  };
1260
 
1261
+ self.onUndo = function (e, editorInstance) {
1262
  // Force re-render everything
1263
  editorInstance.load();
1264
  };
1265
 
1266
+ self.cancelEvent = function (e, editorInstance) {
1267
  e.preventDefault();
1268
  e.stopPropagation();
1269
  editorInstance.dom.events.cancel();
1279
  * @param Object e The event
1280
  * @return void
1281
  */
1282
+ self.onClickEditButton = function (e, editorInstance) {
1283
  // Prevent edition of the panel
1284
  self.cancelEvent(e, editorInstance);
1285
 
1286
  self.activeWrapperForModal = self.activeWrapper;
1287
 
1288
  var $wrapper = self.activeWrapperForModal;
1289
+ var wrapperUid = $wrapper.prop('id').replace('embedpress_wrapper_', '');
1290
 
1291
  var customAttributes = {};
1292
 
1296
  embedItem = null;
1297
  }
1298
 
1299
+ $.each($embedInnerWrapper[0].attributes, function () {
1300
  if (this.specified) {
1301
+ if (this.name !== 'class') {
1302
+ customAttributes[this.name.replace('data-', '').toLowerCase()] = this.value;
1303
  }
1304
  }
1305
  });
1306
 
1307
+ var embedWidth = (((embedItem && embedItem.width()) || $embedInnerWrapper.data('width')) || $embedInnerWrapper.width()) || '';
1308
+ var embedHeight = (((embedItem && embedItem.height()) || $embedInnerWrapper.data('height')) || $embedInnerWrapper.height()) || '';
1309
 
1310
  embedItem = $embedInnerWrapper = null;
1311
 
1312
  $('<div class="loader-indicator"><i class="embedpress-icon-reload"></i></div>').appendTo($wrapper);
1313
 
1314
+ setTimeout(function () {
1315
  $.ajax({
1316
+ type: 'GET',
1317
+ url: self.params.baseUrl + 'wp-admin/admin-ajax.php',
1318
  data: {
1319
+ action: 'embedpress_get_embed_url_info',
1320
  url: self.decodeEmbedURLSpecialChars($wrapper.data('url'), false)
1321
  },
1322
+ beforeSend: function (request, requestSettings) {
1323
  $('.loader-indicator', $wrapper).addClass('is-loading');
1324
  },
1325
+ success: function (response) {
1326
  if (!response) {
1327
  bootbox.alert('Unable to get a valid response from the server.');
1328
  return;
1329
  }
1330
  if (response.canBeResponsive) {
1331
  var embedShouldBeResponsive = true;
1332
+ if ('width' in customAttributes || 'height' in customAttributes) {
1333
  embedShouldBeResponsive = false;
1334
+ } else if ('responsive' in customAttributes && customAttributes['responsive'].isFalse()) {
1335
  embedShouldBeResponsive = false;
1336
  }
1337
  }
1338
 
1339
  bootbox.dialog({
1340
+ className: 'embedpress-modal',
1341
+ title: 'Editing Embed properties',
1342
+ message: '<form id="form-' + wrapperUid + '" embedpress>' +
1343
+ '<div class="row">' +
1344
+ '<div class="col-md-12">' +
1345
+ '<div class="form-group">' +
1346
+ '<label for="input-url-' + wrapperUid + '">Url</label>' +
1347
+ '<input class="form-control" type="url" id="input-url-' + wrapperUid + '" value="' + self.decodeEmbedURLSpecialChars($wrapper.data('url'), false) + '">' +
1348
+ '</div>' +
1349
+ '</div>' +
1350
+ '</div>' +
1351
+ '<div class="row">' +
1352
+ (response.canBeResponsive ?
1353
+ '<div class="col-md-12">' +
1354
+ '<label>Responsive</label>' +
1355
+ '<div class="form-group">' +
1356
+ '<label class="radio-inline">' +
1357
+ '<input type="radio" name="input-responsive-' + wrapperUid + '" id="input-responsive-1-' + wrapperUid + '" value="1"' + (embedShouldBeResponsive ? ' checked="checked"' : '') + '> Yes' +
1358
+ '</label>' +
1359
+ '<label class="radio-inline">' +
1360
+ '<input type="radio" name="input-responsive-' + wrapperUid + '" id="input-responsive-0-' + wrapperUid + '" value="0"' + (!embedShouldBeResponsive ? ' checked="checked"' : '') + '> No' +
1361
+ '</label>' +
1362
+ '</div>' +
1363
+ '</div>' : '') +
1364
+ '<div class="col-md-6">' +
1365
+ '<div class="form-group">' +
1366
+ '<label for="input-width-' + wrapperUid + '">Width</label>' +
1367
+ '<input class="form-control" type="integer" id="input-width-' + wrapperUid + '" value="' + embedWidth + '"' + (embedShouldBeResponsive ? ' disabled' : '') + '>' +
1368
+ '</div>' +
1369
+ '</div>' +
1370
+ '<div class="col-md-6">' +
1371
+ '<div class="form-group">' +
1372
+ '<label for="input-height-' + wrapperUid + '">Height</label>' +
1373
+ '<input class="form-control" type="integer" id="input-height-' + wrapperUid + '" value="' + embedHeight + '"' + (embedShouldBeResponsive ? ' disabled' : '') + '>' +
1374
+ '</div>' +
1375
+ '</div>' +
1376
+ '</div>' +
1377
+ '</form>',
1378
  buttons: {
1379
  danger: {
1380
+ label: 'Cancel',
1381
+ className: 'btn-default',
1382
+ callback: function () {
1383
  // do nothing
1384
  self.activeWrapperForModal = null;
1385
  }
1386
  },
1387
  success: {
1388
+ label: 'Save',
1389
+ className: 'btn-primary',
1390
+ callback: function () {
1391
  var $wrapper = self.activeWrapperForModal;
1392
 
1393
  // Select the current wrapper as a base for the new element
1398
  $wrapper.remove();
1399
 
1400
  if (response.canBeResponsive) {
1401
+ if ($('#form-' + wrapperUid + ' input[name="input-responsive-' + wrapperUid + '"]:checked').val().isFalse()) {
1402
+ var embedCustomWidth = $('#input-width-' + wrapperUid).val();
1403
  if (parseInt(embedCustomWidth) > 0) {
1404
  customAttributes['width'] = embedCustomWidth;
1405
  }
1406
 
1407
+ var embedCustomHeight = $('#input-height-' + wrapperUid).val();
1408
  if (parseInt(embedCustomHeight) > 0) {
1409
  customAttributes['height'] = embedCustomHeight;
1410
  }
1411
 
1412
+ customAttributes['responsive'] = 'false';
1413
  } else {
1414
  delete customAttributes['width'];
1415
  delete customAttributes['height'];
1416
 
1417
+ customAttributes['responsive'] = 'true';
1418
  }
1419
  } else {
1420
+ var embedCustomWidth = $('#input-width-' + wrapperUid).val();
1421
  if (parseInt(embedCustomWidth) > 0) {
1422
  customAttributes['width'] = embedCustomWidth;
1423
  }
1424
 
1425
+ var embedCustomHeight = $('#input-height-' + wrapperUid).val();
1426
  if (parseInt(embedCustomHeight) > 0) {
1427
  customAttributes['height'] = embedCustomHeight;
1428
  }
1435
  }
1436
  }
1437
 
1438
+ var shortcode = '[' + $data.EMBEDPRESS_SHORTCODE + (customAttributesList.length > 0 ? ' ' + customAttributesList.join(' ') : '') + ']' + $('#input-url-' + wrapperUid).val() + '[/' + $data.EMBEDPRESS_SHORTCODE + ']';
1439
  // We do not directly replace the node because it was causing a bug on a second edit attempt
1440
  editorInstance.execCommand('mceInsertContent', false, shortcode);
1441
 
1445
  }
1446
  });
1447
 
1448
+ $('form[embedpress]').on('change', 'input[type="radio"]', function (e) {
1449
  var self = $(this);
1450
  var form = self.parents('form[embedpress]');
1451
 
1452
  $('input[type="integer"]', form).prop('disabled', self.val().isTrue());
1453
  });
1454
  },
1455
+ complete: function (request, textStatus) {
1456
  $('.loader-indicator', $wrapper).removeClass('is-loading');
1457
 
1458
+ setTimeout(function () {
1459
  $('.loader-indicator', $wrapper).remove();
1460
  }, 350);
1461
  },
1462
+ dataType: 'json',
1463
  async: true
1464
  });
1465
  }, 200);
1474
  * @param Object e The event
1475
  * @return void
1476
  */
1477
+ self.onClickRemoveButton = function (e, editorInstance) {
1478
  // Prevent edition of the panel
1479
  self.cancelEvent(e, editorInstance);
1480
 
1486
  return false;
1487
  };
1488
 
1489
+ self.recursivelyAddClass = function (element, className) {
1490
+ $(element).children().each(function (index, child) {
1491
  $(child).addClass(className);
1492
 
1493
  var grandChild = $(child).children();
1494
  if (grandChild.length > 0) {
1495
+ self.recursivelyAddClass(child, className);
1496
  }
1497
  });
1498
  };
1499
 
1500
+ self.setInterval = function (callback, time, timeout) {
1501
+ var elapsed = 0;
1502
  var iteraction = 0;
1503
 
1504
+ var interval = window.setInterval(function () {
1505
  elapsed += time;
1506
  iteraction++;
1507
 
1515
  return interval;
1516
  };
1517
 
1518
+ self.stopInterval = function (interval) {
1519
  window.clearInterval(interval);
1520
  interval = null;
1521
  };
1524
  * Configure unconfigured embed wrappers, adding events and css
1525
  * @return void
1526
  */
1527
+ self.configureWrappers = function (editorInstance) {
1528
  window.setTimeout(
1529
+ function configureWrappersTimeOut () {
1530
  var doc = editorInstance.getDoc(),
1531
  $wrapper = null;
1532
 
1539
  // Check if the wrapper wasn't already configured
1540
  if ($wrapper.data('configured') != true) {
1541
  // A timeout was set to avoid block the content loading
1542
+ window.setTimeout(function () {
1543
  // @todo: Check if we need a limit of levels to avoid use too much resources
1544
  self.recursivelyAddClass($wrapper, 'embedpress_ignore_mouseout');
1545
  }, 500);
1546
 
1547
  // Fix the wrapper size. Wait until find the child iframe. L
1548
+ var interval = self.setInterval(function (iteraction) {
1549
  var $childIframes = $wrapper.find('iframe');
1550
 
1551
  if ($childIframes.length > 0) {
1552
+ $.each($childIframes, function (index, iframe) {
1553
  // Facebook has more than one iframe, we need to ignore the Cross Domain Iframes
1554
  if ($(iframe).attr('id') !== 'fb_xdm_frame_https'
1555
  && $(iframe).attr('id') !== 'fb_xdm_frame_http'
1575
  *
1576
  * @return void
1577
  */
1578
+ self.hidePreviewControllerPanel = function () {
1579
  if (self.controllerPanelIsActive()) {
1580
  $(self.activeControllerPanel).addClass('hidden');
1581
  self.activeControllerPanel = null;
1589
  * @param String id The element id
1590
  * @return Element The found element or null, wrapped by jQuery
1591
  */
1592
+ self.getElementInContentById = function (id, editorInstance) {
1593
  var doc = editorInstance.getDoc();
1594
 
1595
  if (doc === null) {
1605
  * @param element $wrapper The wrapper which will be activate
1606
  * @return void
1607
  */
1608
+ self.displayPreviewControllerPanel = function ($wrapper, editorInstance) {
1609
  if (self.controllerPanelIsActive() && $wrapper !== self.activeWrapper) {
1610
  self.hidePreviewControllerPanel();
1611
  }
1618
  var $editButton = self.getElementInContentById('embedpress_button_edit_' + uid, editorInstance);
1619
  var $removeButton = self.getElementInContentById('embedpress_button_remove_' + uid, editorInstance);
1620
 
1621
+ self.addEvent('mousedown', $editButton, function (e) {
1622
  self.onClickEditButton(e, editorInstance);
1623
  });
1624
 
1625
+ self.addEvent('mousedown', $removeButton, function (e) {
1626
  self.onClickRemoveButton(e, editorInstance);
1627
  });
1628
 
assets/js/settings.js CHANGED
@@ -5,10 +5,10 @@
5
  * @license GPLv2 or later
6
  * @since 1.7.0
7
  */
8
- (function($) {
9
- "use strict";
10
 
11
- $(function() {
12
  $('.color-field').wpColorPicker();
13
  });
14
  })(jQuery);
5
  * @license GPLv2 or later
6
  * @since 1.7.0
7
  */
8
+ (function ($) {
9
+ 'use strict';
10
 
11
+ $(function () {
12
  $('.color-field').wpColorPicker();
13
  });
14
  })(jQuery);
assets/js/vendor/bootstrap/bootstrap.js CHANGED
@@ -9,14 +9,14 @@
9
  * Config saved to config.json and https://gist.github.com/3388789be7b7c807ff47acdc21b4ef8f
10
  */
11
  if (typeof jQuery === 'undefined') {
12
- throw new Error('Bootstrap\'s JavaScript requires jQuery')
13
  }
14
  +function ($) {
15
- 'use strict';
16
- var version = $.fn.jquery.split(' ')[0].split('.')
17
- if ((version[0] < 2 && version[1] < 9) || (version[0] == 1 && version[1] == 9 && version[2] < 1) || (version[0] > 3)) {
18
- throw new Error('Bootstrap\'s JavaScript requires jQuery version 1.9.1 or higher, but lower than version 4')
19
- }
20
  }(jQuery);
21
 
22
  /* ========================================================================
@@ -27,335 +27,331 @@ if (typeof jQuery === 'undefined') {
27
  * Licensed under MIT (https://github.com/twbs/bootstrap/blob/master/LICENSE)
28
  * ======================================================================== */
29
 
30
-
31
  +function ($) {
32
- 'use strict';
33
-
34
- // MODAL CLASS DEFINITION
35
- // ======================
36
-
37
- var Modal = function (element, options) {
38
- this.options = options
39
- this.$body = $(document.body)
40
- this.$element = $(element)
41
- this.$dialog = this.$element.find('.modal-dialog')
42
- this.$backdrop = null
43
- this.isShown = null
44
- this.originalBodyPad = null
45
- this.scrollbarWidth = 0
46
- this.ignoreBackdropClick = false
47
-
48
- if (this.options.remote) {
49
- this.$element
50
- .find('.modal-content')
51
- .load(this.options.remote, $.proxy(function () {
52
- this.$element.trigger('loaded.bs.modal')
53
- }, this))
54
- }
55
- }
 
 
56
 
57
- Modal.VERSION = '3.3.7'
 
58
 
59
- Modal.TRANSITION_DURATION = 300
60
- Modal.BACKDROP_TRANSITION_DURATION = 150
 
 
 
61
 
62
- Modal.DEFAULTS = {
63
- backdrop: true,
64
- keyboard: true,
65
- show: true
66
- }
67
 
68
- Modal.prototype.toggle = function (_relatedTarget) {
69
- return this.isShown ? this.hide() : this.show(_relatedTarget)
70
- }
71
 
72
- Modal.prototype.show = function (_relatedTarget) {
73
- var that = this
74
- var e = $.Event('show.bs.modal', { relatedTarget: _relatedTarget })
75
 
76
- this.$element.trigger(e)
77
 
78
- if (this.isShown || e.isDefaultPrevented()) return
79
 
80
- this.isShown = true
 
 
81
 
82
- this.checkScrollbar()
83
- this.setScrollbar()
84
- this.$body.addClass('modal-open')
85
 
86
- this.escape()
87
- this.resize()
88
 
89
- this.$element.on('click.dismiss.bs.modal', '[data-dismiss="modal"]', $.proxy(this.hide, this))
 
 
 
 
90
 
91
- this.$dialog.on('mousedown.dismiss.bs.modal', function () {
92
- that.$element.one('mouseup.dismiss.bs.modal', function (e) {
93
- if ($(e.target).is(that.$element)) that.ignoreBackdropClick = true
94
- })
95
- })
96
 
97
- this.backdrop(function () {
98
- var transition = $.support.transition && that.$element.hasClass('fade')
 
99
 
100
- if (!that.$element.parent().length) {
101
- that.$element.appendTo(that.$body) // don't move modals dom position
102
- }
103
 
104
- that.$element
105
- .show()
106
- .scrollTop(0)
107
 
108
- that.adjustDialog()
 
 
109
 
110
- if (transition) {
111
- that.$element[0].offsetWidth // force reflow
112
- }
113
 
114
- that.$element.addClass('in')
115
 
116
- that.enforceFocus()
117
 
118
- var e = $.Event('shown.bs.modal', { relatedTarget: _relatedTarget })
 
 
 
 
 
 
 
 
119
 
120
- transition ?
121
- that.$dialog // wait for modal to slide in
122
- .one('bsTransitionEnd', function () {
123
- that.$element.trigger('focus').trigger(e)
124
- })
125
- .emulateTransitionEnd(Modal.TRANSITION_DURATION) :
126
- that.$element.trigger('focus').trigger(e)
127
- })
128
- }
129
 
130
- Modal.prototype.hide = function (e) {
131
- if (e) e.preventDefault()
132
 
133
- e = $.Event('hide.bs.modal')
134
 
135
- this.$element.trigger(e)
136
 
137
- if (!this.isShown || e.isDefaultPrevented()) return
138
 
139
- this.isShown = false
 
140
 
141
- this.escape()
142
- this.resize()
143
 
144
- $(document).off('focusin.bs.modal')
 
 
 
145
 
146
- this.$element
147
- .removeClass('in')
148
- .off('click.dismiss.bs.modal')
149
- .off('mouseup.dismiss.bs.modal')
150
 
151
- this.$dialog.off('mousedown.dismiss.bs.modal')
 
 
 
 
 
152
 
153
- $.support.transition && this.$element.hasClass('fade') ?
154
- this.$element
155
- .one('bsTransitionEnd', $.proxy(this.hideModal, this))
156
- .emulateTransitionEnd(Modal.TRANSITION_DURATION) :
157
- this.hideModal()
158
- }
 
 
 
 
 
159
 
160
- Modal.prototype.enforceFocus = function () {
161
- $(document)
162
- .off('focusin.bs.modal') // guard against infinite focus loop
163
- .on('focusin.bs.modal', $.proxy(function (e) {
164
- if (document !== e.target &&
165
- this.$element[0] !== e.target &&
166
- !this.$element.has(e.target).length) {
167
- this.$element.trigger('focus')
168
  }
169
- }, this))
170
- }
171
-
172
- Modal.prototype.escape = function () {
173
- if (this.isShown && this.options.keyboard) {
174
- this.$element.on('keydown.dismiss.bs.modal', $.proxy(function (e) {
175
- e.which == 27 && this.hide()
176
- }, this))
177
- } else if (!this.isShown) {
178
- this.$element.off('keydown.dismiss.bs.modal')
179
- }
180
- }
181
 
182
- Modal.prototype.resize = function () {
183
- if (this.isShown) {
184
- $(window).on('resize.bs.modal', $.proxy(this.handleUpdate, this))
185
- } else {
186
- $(window).off('resize.bs.modal')
187
- }
188
- }
189
-
190
- Modal.prototype.hideModal = function () {
191
- var that = this
192
- this.$element.hide()
193
- this.backdrop(function () {
194
- that.$body.removeClass('modal-open')
195
- that.resetAdjustments()
196
- that.resetScrollbar()
197
- that.$element.trigger('hidden.bs.modal')
198
- })
199
- }
200
-
201
- Modal.prototype.removeBackdrop = function () {
202
- this.$backdrop && this.$backdrop.remove()
203
- this.$backdrop = null
204
- }
205
-
206
- Modal.prototype.backdrop = function (callback) {
207
- var that = this
208
- var animate = this.$element.hasClass('fade') ? 'fade' : ''
209
-
210
- if (this.isShown && this.options.backdrop) {
211
- var doAnimate = $.support.transition && animate
212
-
213
- this.$backdrop = $(document.createElement('div'))
214
- .addClass('modal-backdrop ' + animate)
215
- .appendTo(this.$body)
216
-
217
- this.$element.on('click.dismiss.bs.modal', $.proxy(function (e) {
218
- if (this.ignoreBackdropClick) {
219
- this.ignoreBackdropClick = false
220
- return
221
  }
222
- if (e.target !== e.currentTarget) return
223
- this.options.backdrop == 'static'
224
- ? this.$element[0].focus()
225
- : this.hide()
226
- }, this))
227
-
228
- if (doAnimate) this.$backdrop[0].offsetWidth // force reflow
229
-
230
- this.$backdrop.addClass('in')
231
-
232
- if (!callback) return
233
-
234
- doAnimate ?
235
- this.$backdrop
236
- .one('bsTransitionEnd', callback)
237
- .emulateTransitionEnd(Modal.BACKDROP_TRANSITION_DURATION) :
238
- callback()
239
-
240
- } else if (!this.isShown && this.$backdrop) {
241
- this.$backdrop.removeClass('in')
242
-
243
- var callbackRemove = function () {
244
- that.removeBackdrop()
245
- callback && callback()
246
- }
247
- $.support.transition && this.$element.hasClass('fade') ?
248
- this.$backdrop
249
- .one('bsTransitionEnd', callbackRemove)
250
- .emulateTransitionEnd(Modal.BACKDROP_TRANSITION_DURATION) :
251
- callbackRemove()
252
-
253
- } else if (callback) {
254
- callback()
255
- }
256
- }
257
-
258
- // these following methods are used to handle overflowing modals
259
-
260
- Modal.prototype.handleUpdate = function () {
261
- this.adjustDialog()
262
- }
263
-
264
- Modal.prototype.adjustDialog = function () {
265
- var modalIsOverflowing = this.$element[0].scrollHeight > document.documentElement.clientHeight
266
-
267
- this.$element.css({
268
- paddingLeft: !this.bodyIsOverflowing && modalIsOverflowing ? this.scrollbarWidth : '',
269
- paddingRight: this.bodyIsOverflowing && !modalIsOverflowing ? this.scrollbarWidth : ''
270
- })
271
- }
272
-
273
- Modal.prototype.resetAdjustments = function () {
274
- this.$element.css({
275
- paddingLeft: '',
276
- paddingRight: ''
277
- })
278
- }
279
-
280
- Modal.prototype.checkScrollbar = function () {
281
- var fullWindowWidth = window.innerWidth
282
- if (!fullWindowWidth) { // workaround for missing window.innerWidth in IE8
283
- var documentElementRect = document.documentElement.getBoundingClientRect()
284
- fullWindowWidth = documentElementRect.right - Math.abs(documentElementRect.left)
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
285
  }
286
- this.bodyIsOverflowing = document.body.clientWidth < fullWindowWidth
287
- this.scrollbarWidth = this.measureScrollbar()
288
- }
289
-
290
- Modal.prototype.setScrollbar = function () {
291
- var bodyPad = parseInt((this.$body.css('padding-right') || 0), 10)
292
- this.originalBodyPad = document.body.style.paddingRight || ''
293
- if (this.bodyIsOverflowing) this.$body.css('padding-right', bodyPad + this.scrollbarWidth)
294
- }
295
-
296
- Modal.prototype.resetScrollbar = function () {
297
- this.$body.css('padding-right', this.originalBodyPad)
298
- }
299
 
300
- Modal.prototype.measureScrollbar = function () { // thx walsh
301
- var scrollDiv = document.createElement('div')
302
- scrollDiv.className = 'modal-scrollbar-measure'
303
- this.$body.append(scrollDiv)
304
- var scrollbarWidth = scrollDiv.offsetWidth - scrollDiv.clientWidth
305
- this.$body[0].removeChild(scrollDiv)
306
- return scrollbarWidth
307
- }
308
 
 
 
309
 
310
- // MODAL PLUGIN DEFINITION
311
- // =======================
312
 
313
- function Plugin(option, _relatedTarget) {
314
- return this.each(function () {
315
- var $this = $(this)
316
- var data = $this.data('bs.modal')
317
- var options = $.extend({}, Modal.DEFAULTS, $this.data(), typeof option == 'object' && option)
318
 
319
- if (!data) $this.data('bs.modal', (data = new Modal(this, options)))
320
- if (typeof option == 'string') data[option](_relatedTarget)
321
- else if (options.show) data.show(_relatedTarget)
322
- })
323
- }
324
 
325
- var old = $.fn.modal
 
 
 
 
326
 
327
- $.fn.modal = Plugin
328
- $.fn.modal.Constructor = Modal
329
 
330
-
331
- // MODAL NO CONFLICT
332
- // =================
333
-
334
- $.fn.modal.noConflict = function () {
335
- $.fn.modal = old
336
- return this
337
- }
338
-
339
-
340
- // MODAL DATA-API
341
- // ==============
342
-
343
- $(document).on('click.bs.modal.data-api', '[data-toggle="modal"]', function (e) {
344
- var $this = $(this)
345
- var href = $this.attr('href')
346
- var $target = $($this.attr('data-target') || (href && href.replace(/.*(?=#[^\s]+$)/, ''))) // strip for ie7
347
- var option = $target.data('bs.modal') ? 'toggle' : $.extend({ remote: !/#/.test(href) && href }, $target.data(), $this.data())
348
-
349
- if ($this.is('a')) e.preventDefault()
350
-
351
- $target.one('show.bs.modal', function (showEvent) {
352
- if (showEvent.isDefaultPrevented()) return // only register focus restorer if modal will actually get shown
353
- $target.one('hidden.bs.modal', function () {
354
- $this.is(':visible') && $this.trigger('focus')
355
- })
356
- })
357
- Plugin.call($target, option, this)
358
- })
359
 
360
  }(jQuery);
361
 
@@ -367,54 +363,53 @@ if (typeof jQuery === 'undefined') {
367
  * Licensed under MIT (https://github.com/twbs/bootstrap/blob/master/LICENSE)
368
  * ======================================================================== */
369
 
370
-
371
  +function ($) {
372
- 'use strict';
373
 
374
- // CSS TRANSITION SUPPORT (Shoutout: http://www.modernizr.com/)
375
- // ============================================================
376
 
377
- function transitionEnd() {
378
- var el = document.createElement('bootstrap')
379
 
380
- var transEndEventNames = {
381
- WebkitTransition : 'webkitTransitionEnd',
382
- MozTransition : 'transitionend',
383
- OTransition : 'oTransitionEnd otransitionend',
384
- transition : 'transitionend'
385
- }
386
 
387
- for (var name in transEndEventNames) {
388
- if (el.style[name] !== undefined) {
389
- return { end: transEndEventNames[name] }
390
- }
391
- }
392
 
393
- return false // explicit for ie8 ( ._.)
394
- }
395
-
396
- // http://blog.alexmaccaw.com/css-transitions
397
- $.fn.emulateTransitionEnd = function (duration) {
398
- var called = false
399
- var $el = this
400
- $(this).one('bsTransitionEnd', function () { called = true })
401
- var callback = function () { if (!called) $($el).trigger($.support.transition.end) }
402
- setTimeout(callback, duration)
403
- return this
404
- }
405
-
406
- $(function () {
407
- $.support.transition = transitionEnd()
408
-
409
- if (!$.support.transition) return
410
-
411
- $.event.special.bsTransitionEnd = {
412
- bindType: $.support.transition.end,
413
- delegateType: $.support.transition.end,
414
- handle: function (e) {
415
- if ($(e.target).is(this)) return e.handleObj.handler.apply(this, arguments)
416
- }
417
  }
418
- })
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
419
 
420
  }(jQuery);
9
  * Config saved to config.json and https://gist.github.com/3388789be7b7c807ff47acdc21b4ef8f
10
  */
11
  if (typeof jQuery === 'undefined') {
12
+ throw new Error('Bootstrap\'s JavaScript requires jQuery');
13
  }
14
  +function ($) {
15
+ 'use strict';
16
+ var version = $.fn.jquery.split(' ')[0].split('.');
17
+ if ((version[0] < 2 && version[1] < 9) || (version[0] == 1 && version[1] == 9 && version[2] < 1) || (version[0] > 3)) {
18
+ throw new Error('Bootstrap\'s JavaScript requires jQuery version 1.9.1 or higher, but lower than version 4');
19
+ }
20
  }(jQuery);
21
 
22
  /* ========================================================================
27
  * Licensed under MIT (https://github.com/twbs/bootstrap/blob/master/LICENSE)
28
  * ======================================================================== */
29
 
 
30
  +function ($) {
31
+ 'use strict';
32
+
33
+ // MODAL CLASS DEFINITION
34
+ // ======================
35
+
36
+ var Modal = function (element, options) {
37
+ this.options = options;
38
+ this.$body = $(document.body);
39
+ this.$element = $(element);
40
+ this.$dialog = this.$element.find('.modal-dialog');
41
+ this.$backdrop = null;
42
+ this.isShown = null;
43
+ this.originalBodyPad = null;
44
+ this.scrollbarWidth = 0;
45
+ this.ignoreBackdropClick = false;
46
+
47
+ if (this.options.remote) {
48
+ this.$element
49
+ .find('.modal-content')
50
+ .load(this.options.remote, $.proxy(function () {
51
+ this.$element.trigger('loaded.bs.modal');
52
+ }, this));
53
+ }
54
+ };
55
+
56
+ Modal.VERSION = '3.3.7';
57
 
58
+ Modal.TRANSITION_DURATION = 300;
59
+ Modal.BACKDROP_TRANSITION_DURATION = 150;
60
 
61
+ Modal.DEFAULTS = {
62
+ backdrop: true,
63
+ keyboard: true,
64
+ show: true
65
+ };
66
 
67
+ Modal.prototype.toggle = function (_relatedTarget) {
68
+ return this.isShown ? this.hide() : this.show(_relatedTarget);
69
+ };
 
 
70
 
71
+ Modal.prototype.show = function (_relatedTarget) {
72
+ var that = this;
73
+ var e = $.Event('show.bs.modal', {relatedTarget: _relatedTarget});
74
 
75
+ this.$element.trigger(e);
 
 
76
 
77
+ if (this.isShown || e.isDefaultPrevented()) return;
78
 
79
+ this.isShown = true;
80
 
81
+ this.checkScrollbar();
82
+ this.setScrollbar();
83
+ this.$body.addClass('modal-open');
84
 
85
+ this.escape();
86
+ this.resize();
 
87
 
88
+ this.$element.on('click.dismiss.bs.modal', '[data-dismiss="modal"]', $.proxy(this.hide, this));
 
89
 
90
+ this.$dialog.on('mousedown.dismiss.bs.modal', function () {
91
+ that.$element.one('mouseup.dismiss.bs.modal', function (e) {
92
+ if ($(e.target).is(that.$element)) that.ignoreBackdropClick = true;
93
+ });
94
+ });
95
 
96
+ this.backdrop(function () {
97
+ var transition = $.support.transition && that.$element.hasClass('fade');
 
 
 
98
 
99
+ if (!that.$element.parent().length) {
100
+ that.$element.appendTo(that.$body); // don't move modals dom position
101
+ }
102
 
103
+ that.$element
104
+ .show()
105
+ .scrollTop(0);
106
 
107
+ that.adjustDialog();
 
 
108
 
109
+ if (transition) {
110
+ that.$element[0].offsetWidth; // force reflow
111
+ }
112
 
113
+ that.$element.addClass('in');
 
 
114
 
115
+ that.enforceFocus();
116
 
117
+ var e = $.Event('shown.bs.modal', {relatedTarget: _relatedTarget});
118
 
119
+ transition ?
120
+ that.$dialog // wait for modal to slide in
121
+ .one('bsTransitionEnd', function () {
122
+ that.$element.trigger('focus').trigger(e);
123
+ })
124
+ .emulateTransitionEnd(Modal.TRANSITION_DURATION) :
125
+ that.$element.trigger('focus').trigger(e);
126
+ });
127
+ };
128
 
129
+ Modal.prototype.hide = function (e) {
130
+ if (e) e.preventDefault();
 
 
 
 
 
 
 
131
 
132
+ e = $.Event('hide.bs.modal');
 
133
 
134
+ this.$element.trigger(e);
135
 
136
+ if (!this.isShown || e.isDefaultPrevented()) return;
137
 
138
+ this.isShown = false;
139
 
140
+ this.escape();
141
+ this.resize();
142
 
143
+ $(document).off('focusin.bs.modal');
 
144
 
145
+ this.$element
146
+ .removeClass('in')
147
+ .off('click.dismiss.bs.modal')
148
+ .off('mouseup.dismiss.bs.modal');
149
 
150
+ this.$dialog.off('mousedown.dismiss.bs.modal');
 
 
 
151
 
152
+ $.support.transition && this.$element.hasClass('fade') ?
153
+ this.$element
154
+ .one('bsTransitionEnd', $.proxy(this.hideModal, this))
155
+ .emulateTransitionEnd(Modal.TRANSITION_DURATION) :
156
+ this.hideModal();
157
+ };
158
 
159
+ Modal.prototype.enforceFocus = function () {
160
+ $(document)
161
+ .off('focusin.bs.modal') // guard against infinite focus loop
162
+ .on('focusin.bs.modal', $.proxy(function (e) {
163
+ if (document !== e.target &&
164
+ this.$element[0] !== e.target &&
165
+ !this.$element.has(e.target).length) {
166
+ this.$element.trigger('focus');
167
+ }
168
+ }, this));
169
+ };
170
 
171
+ Modal.prototype.escape = function () {
172
+ if (this.isShown && this.options.keyboard) {
173
+ this.$element.on('keydown.dismiss.bs.modal', $.proxy(function (e) {
174
+ e.which == 27 && this.hide();
175
+ }, this));
176
+ } else if (!this.isShown) {
177
+ this.$element.off('keydown.dismiss.bs.modal');
 
178
  }
179
+ };
 
 
 
 
 
 
 
 
 
 
 
180
 
181
+ Modal.prototype.resize = function () {
182
+ if (this.isShown) {
183
+ $(window).on('resize.bs.modal', $.proxy(this.handleUpdate, this));
184
+ } else {
185
+ $(window).off('resize.bs.modal');
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
186
  }
187
+ };
188
+
189
+ Modal.prototype.hideModal = function () {
190
+ var that = this;
191
+ this.$element.hide();
192
+ this.backdrop(function () {
193
+ that.$body.removeClass('modal-open');
194
+ that.resetAdjustments();
195
+ that.resetScrollbar();
196
+ that.$element.trigger('hidden.bs.modal');
197
+ });
198
+ };
199
+
200
+ Modal.prototype.removeBackdrop = function () {
201
+ this.$backdrop && this.$backdrop.remove();
202
+ this.$backdrop = null;
203
+ };
204
+
205
+ Modal.prototype.backdrop = function (callback) {
206
+ var that = this;
207
+ var animate = this.$element.hasClass('fade') ? 'fade' : '';
208
+
209
+ if (this.isShown && this.options.backdrop) {
210
+ var doAnimate = $.support.transition && animate;
211
+
212
+ this.$backdrop = $(document.createElement('div'))
213
+ .addClass('modal-backdrop ' + animate)
214
+ .appendTo(this.$body);
215
+
216
+ this.$element.on('click.dismiss.bs.modal', $.proxy(function (e) {
217
+ if (this.ignoreBackdropClick) {
218
+ this.ignoreBackdropClick = false;
219
+ return;
220
+ }
221
+ if (e.target !== e.currentTarget) return;
222
+ this.options.backdrop == 'static'
223
+ ? this.$element[0].focus()
224
+ : this.hide();
225
+ }, this));
226
+
227
+ if (doAnimate) this.$backdrop[0].offsetWidth; // force reflow
228
+
229
+ this.$backdrop.addClass('in');
230
+
231
+ if (!callback) return;
232
+
233
+ doAnimate ?
234
+ this.$backdrop
235
+ .one('bsTransitionEnd', callback)
236
+ .emulateTransitionEnd(Modal.BACKDROP_TRANSITION_DURATION) :
237
+ callback();
238
+
239
+ } else if (!this.isShown && this.$backdrop) {
240
+ this.$backdrop.removeClass('in');
241
+
242
+ var callbackRemove = function () {
243
+ that.removeBackdrop();
244
+ callback && callback();
245
+ };
246
+ $.support.transition && this.$element.hasClass('fade') ?
247
+ this.$backdrop
248
+ .one('bsTransitionEnd', callbackRemove)
249
+ .emulateTransitionEnd(Modal.BACKDROP_TRANSITION_DURATION) :
250
+ callbackRemove();
251
+
252
+ } else if (callback) {
253
+ callback();
254
+ }
255
+ };
256
+
257
+ // these following methods are used to handle overflowing modals
258
+
259
+ Modal.prototype.handleUpdate = function () {
260
+ this.adjustDialog();
261
+ };
262
+
263
+ Modal.prototype.adjustDialog = function () {
264
+ var modalIsOverflowing = this.$element[0].scrollHeight > document.documentElement.clientHeight;
265
+
266
+ this.$element.css({
267
+ paddingLeft: !this.bodyIsOverflowing && modalIsOverflowing ? this.scrollbarWidth : '',
268
+ paddingRight: this.bodyIsOverflowing && !modalIsOverflowing ? this.scrollbarWidth : ''
269
+ });
270
+ };
271
+
272
+ Modal.prototype.resetAdjustments = function () {
273
+ this.$element.css({
274
+ paddingLeft: '',
275
+ paddingRight: ''
276
+ });
277
+ };
278
+
279
+ Modal.prototype.checkScrollbar = function () {
280
+ var fullWindowWidth = window.innerWidth;
281
+ if (!fullWindowWidth) { // workaround for missing window.innerWidth in IE8
282
+ var documentElementRect = document.documentElement.getBoundingClientRect();
283
+ fullWindowWidth = documentElementRect.right - Math.abs(documentElementRect.left);
284
+ }
285
+ this.bodyIsOverflowing = document.body.clientWidth < fullWindowWidth;
286
+ this.scrollbarWidth = this.measureScrollbar();
287
+ };
288
+
289
+ Modal.prototype.setScrollbar = function () {
290
+ var bodyPad = parseInt((this.$body.css('padding-right') || 0), 10);
291
+ this.originalBodyPad = document.body.style.paddingRight || '';
292
+ if (this.bodyIsOverflowing) this.$body.css('padding-right', bodyPad + this.scrollbarWidth);
293
+ };
294
+
295
+ Modal.prototype.resetScrollbar = function () {
296
+ this.$body.css('padding-right', this.originalBodyPad);
297
+ };
298
+
299
+ Modal.prototype.measureScrollbar = function () { // thx walsh
300
+ var scrollDiv = document.createElement('div');
301
+ scrollDiv.className = 'modal-scrollbar-measure';
302
+ this.$body.append(scrollDiv);
303
+ var scrollbarWidth = scrollDiv.offsetWidth - scrollDiv.clientWidth;
304
+ this.$body[0].removeChild(scrollDiv);
305
+ return scrollbarWidth;
306
+ };
307
+
308
+ // MODAL PLUGIN DEFINITION
309
+ // =======================
310
+
311
+ function Plugin (option, _relatedTarget) {
312
+ return this.each(function () {
313
+ var $this = $(this);
314
+ var data = $this.data('bs.modal');
315
+ var options = $.extend({}, Modal.DEFAULTS, $this.data(), typeof option == 'object' && option);
316
+
317
+ if (!data) $this.data('bs.modal', (data = new Modal(this, options)));
318
+ if (typeof option == 'string') data[option](_relatedTarget);
319
+ else if (options.show) data.show(_relatedTarget);
320
+ });
321
  }
 
 
 
 
 
 
 
 
 
 
 
 
 
322
 
323
+ var old = $.fn.modal;
 
 
 
 
 
 
 
324
 
325
+ $.fn.modal = Plugin;
326
+ $.fn.modal.Constructor = Modal;
327
 
328
+ // MODAL NO CONFLICT
329
+ // =================
330
 
331
+ $.fn.modal.noConflict = function () {
332
+ $.fn.modal = old;
333
+ return this;
334
+ };
 
335
 
336
+ // MODAL DATA-API
337
+ // ==============
 
 
 
338
 
339
+ $(document).on('click.bs.modal.data-api', '[data-toggle="modal"]', function (e) {
340
+ var $this = $(this);
341
+ var href = $this.attr('href');
342
+ var $target = $($this.attr('data-target') || (href && href.replace(/.*(?=#[^\s]+$)/, ''))); // strip for ie7
343
+ var option = $target.data('bs.modal') ? 'toggle' : $.extend({remote: !/#/.test(href) && href}, $target.data(), $this.data());
344
 
345
+ if ($this.is('a')) e.preventDefault();
 
346
 
347
+ $target.one('show.bs.modal', function (showEvent) {
348
+ if (showEvent.isDefaultPrevented()) return; // only register focus restorer if modal will actually get shown
349
+ $target.one('hidden.bs.modal', function () {
350
+ $this.is(':visible') && $this.trigger('focus');
351
+ });
352
+ });
353
+ Plugin.call($target, option, this);
354
+ });
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
355
 
356
  }(jQuery);
357
 
363
  * Licensed under MIT (https://github.com/twbs/bootstrap/blob/master/LICENSE)
364
  * ======================================================================== */
365
 
 
366
  +function ($) {
367
+ 'use strict';
368
 
369
+ // CSS TRANSITION SUPPORT (Shoutout: http://www.modernizr.com/)
370
+ // ============================================================
371
 
372
+ function transitionEnd () {
373
+ var el = document.createElement('bootstrap');
374
 
375
+ var transEndEventNames = {
376
+ WebkitTransition: 'webkitTransitionEnd',
377
+ MozTransition: 'transitionend',
378
+ OTransition: 'oTransitionEnd otransitionend',
379
+ transition: 'transitionend'
380
+ };
381
 
382
+ for (var name in transEndEventNames) {
383
+ if (el.style[name] !== undefined) {
384
+ return {end: transEndEventNames[name]};
385
+ }
386
+ }
387
 
388
+ return false; // explicit for ie8 ( ._.)
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
389
  }
390
+
391
+ // http://blog.alexmaccaw.com/css-transitions
392
+ $.fn.emulateTransitionEnd = function (duration) {
393
+ var called = false;
394
+ var $el = this;
395
+ $(this).one('bsTransitionEnd', function () { called = true; });
396
+ var callback = function () { if (!called) $($el).trigger($.support.transition.end); };
397
+ setTimeout(callback, duration);
398
+ return this;
399
+ };
400
+
401
+ $(function () {
402
+ $.support.transition = transitionEnd();
403
+
404
+ if (!$.support.transition) return;
405
+
406
+ $.event.special.bsTransitionEnd = {
407
+ bindType: $.support.transition.end,
408
+ delegateType: $.support.transition.end,
409
+ handle: function (e) {
410
+ if ($(e.target).is(this)) return e.handleObj.handler.apply(this, arguments);
411
+ }
412
+ };
413
+ });
414
 
415
  }(jQuery);
assets/js/vendor/bootstrap/index.html CHANGED
@@ -1,9 +1,9 @@
1
  <!DOCTYPE html>
2
  <html>
3
- <head>
4
- <title>403 Forbidden</title>
5
- </head>
6
- <body>
7
- <p>Directory access is forbidden.</p>
8
- </body>
9
  </html>
1
  <!DOCTYPE html>
2
  <html>
3
+ <head>
4
+ <title>403 Forbidden</title>
5
+ </head>
6
+ <body>
7
+ <p>Directory access is forbidden.</p>
8
+ </body>
9
  </html>
assets/js/vendor/index.html CHANGED
@@ -1,9 +1,9 @@
1
  <!DOCTYPE html>
2
  <html>
3
- <head>
4
- <title>403 Forbidden</title>
5
- </head>
6
- <body>
7
- <p>Directory access is forbidden.</p>
8
- </body>
9
  </html>
1
  <!DOCTYPE html>
2
  <html>
3
+ <head>
4
+ <title>403 Forbidden</title>
5
+ </head>
6
+ <body>
7
+ <p>Directory access is forbidden.</p>
8
+ </body>
9
  </html>
autoloader.php CHANGED
@@ -7,16 +7,16 @@
7
  * @since 1.0.0
8
  */
9
 
10
- use \EmbedPress\AutoLoader;
11
 
12
  defined('ABSPATH') or die("No direct script access allowed.");
13
 
14
- $autoLoaderFullClassName = EMBEDPRESS_NAMESPACE .'\\'. EMBEDPRESS_AUTOLOADER_NAME;
15
- if (!defined('EMBEDPRESS_IS_LOADED') || !class_exists($autoLoaderFullClassName)) {
16
  define('EMBEDPRESS_IS_LOADED', true);
17
 
18
- if (!class_exists($autoLoaderFullClassName)) {
19
- require_once EMBEDPRESS_PATH_CORE . EMBEDPRESS_AUTOLOADER_NAME .'.php';
20
  }
21
 
22
  AutoLoader::register(str_replace('\\', "", EMBEDPRESS_NAMESPACE), EMBEDPRESS_PATH_CORE);
7
  * @since 1.0.0
8
  */
9
 
10
+ use EmbedPress\AutoLoader;
11
 
12
  defined('ABSPATH') or die("No direct script access allowed.");
13
 
14
+ $autoLoaderFullClassName = EMBEDPRESS_NAMESPACE . '\\' . EMBEDPRESS_AUTOLOADER_NAME;
15
+ if ( ! defined('EMBEDPRESS_IS_LOADED') || ! class_exists($autoLoaderFullClassName)) {
16
  define('EMBEDPRESS_IS_LOADED', true);
17
 
18
+ if ( ! class_exists($autoLoaderFullClassName)) {
19
+ require_once EMBEDPRESS_PATH_CORE . EMBEDPRESS_AUTOLOADER_NAME . '.php';
20
  }
21
 
22
  AutoLoader::register(str_replace('\\', "", EMBEDPRESS_NAMESPACE), EMBEDPRESS_PATH_CORE);
embedpress.php CHANGED
@@ -2,10 +2,11 @@
2
  /**
3
  * Plugin Name: EmbedPress
4
  * Plugin URI: https://embedpress.com/
5
- * Description: WordPress supports around 35 embed sources, but PublishPress Embeds adds over 40 more, including Facebook, Google Maps, Google Docs, UStream! Just use the URL!
6
- * Author: EmbedPress
7
- * Author URI: http://embedpress.com
8
- * Version: 2.1.6
 
9
  * Text Domain: embedpress
10
  * Domain Path: /languages
11
  *
@@ -20,28 +21,37 @@
20
  * @since 1.0.0
21
  */
22
 
23
- use \EmbedPress\Core;
24
 
25
- require_once plugin_dir_path(__FILE__) .'includes.php';
26
 
27
- include_once ABSPATH.'wp-admin/includes/plugin.php';
28
 
29
- (defined('ABSPATH') && defined('EMBEDPRESS_IS_LOADED')) or die("No direct script access allowed.");
 
 
 
 
30
 
31
  function onPluginActivationCallback()
32
  {
33
- Core::onPluginActivationCallback();
34
  }
35
 
36
  function onPluginDeactivationCallback()
37
  {
38
- Core::onPluginDeactivationCallback();
39
  }
40
 
41
  register_activation_hook(__FILE__, 'onPluginActivationCallback');
42
  register_deactivation_hook(__FILE__, 'onPluginDeactivationCallback');
43
 
44
- if (!is_plugin_active('gutenberg/gutenberg.php')) {
45
- $embedPressPlugin = new Core();
46
- $embedPressPlugin->initialize();
 
 
 
 
 
47
  }
2
  /**
3
  * Plugin Name: EmbedPress
4
  * Plugin URI: https://embedpress.com/
5
+ * Description: WordPress supports around 35 embed sources, but PublishPress Embeds adds over 40 more, including
6
+ * Facebook, Google Maps, Google Docs, UStream! Just use the URL!
7
+ * Author:EmbedPress
8
+ * Author URI:http://embedpress.com
9
+ * Version: 2.2.0
10
  * Text Domain: embedpress
11
  * Domain Path: /languages
12
  *
21
  * @since 1.0.0
22
  */
23
 
24
+ use EmbedPress\Compatibility;
25
 
26
+ defined('ABSPATH') or die("No direct script access allowed.");
27
 
28
+ require_once plugin_dir_path(__FILE__) . 'includes.php';
29
 
30
+ include_once ABSPATH . 'wp-admin/includes/plugin.php';
31
+
32
+ if ( ! defined('EMBEDPRESS_IS_LOADED')) {
33
+ return;
34
+ }
35
 
36
  function onPluginActivationCallback()
37
  {
38
+ \EmbedPress\Core::onPluginActivationCallback();
39
  }
40
 
41
  function onPluginDeactivationCallback()
42
  {
43
+ \EmbedPress\Core::onPluginDeactivationCallback();
44
  }
45
 
46
  register_activation_hook(__FILE__, 'onPluginActivationCallback');
47
  register_deactivation_hook(__FILE__, 'onPluginDeactivationCallback');
48
 
49
+ if ( ! is_plugin_active('gutenberg/gutenberg.php')) {
50
+ if (Compatibility::isWordPress5() && ! Compatibility::isClassicalEditorActive()) {
51
+ $embedPressPlugin = new \EmbedPress\Core();
52
+ } else {
53
+ $embedPressPlugin = new \EmbedPress\CoreLegacy();
54
+ }
55
+
56
+ $embedPressPlugin->initialize();
57
  }
includes.php CHANGED
@@ -12,55 +12,55 @@ defined('ABSPATH') or die("No direct script access allowed.");
12
  */
13
 
14
 
15
- if (!defined('EMBEDPRESS')) {
16
  define('EMBEDPRESS', "EmbedPress");
17
  }
18
 
19
- if (!defined('EMBEDPRESS_PLG_NAME')) {
20
  define('EMBEDPRESS_PLG_NAME', 'embedpress');
21
  }
22
 
23
- if (!defined('EMBEDPRESS_PLG_VERSION')) {
24
- define('EMBEDPRESS_PLG_VERSION', "2.1.6");
25
  }
26
 
27
- if (!defined('EMBEDPRESS_ROOT')) {
28
  define('EMBEDPRESS_ROOT', dirname(__FILE__));
29
  }
30
 
31
- if (!defined('EMBEDPRESS_PATH_BASE')) {
32
  define('EMBEDPRESS_PATH_BASE', plugin_dir_path(__FILE__));
33
  }
34
 
35
- if (!defined('EMBEDPRESS_PATH_CORE')) {
36
- define('EMBEDPRESS_PATH_CORE', EMBEDPRESS_PATH_BASE ."EmbedPress/");
37
  }
38
 
39
- if (!defined('EMBEDPRESS_URL_ASSETS')) {
40
- define('EMBEDPRESS_URL_ASSETS', plugins_url(EMBEDPRESS_PLG_NAME) ."/assets/");
41
  }
42
 
43
- if (!defined('EMBEDPRESS_NAMESPACE')) {
44
  define('EMBEDPRESS_NAMESPACE', "\\EmbedPress");
45
  }
46
 
47
- if (!defined('EMBEDPRESS_AUTOLOADER_NAME')) {
48
  define('EMBEDPRESS_AUTOLOADER_NAME', "AutoLoader");
49
  }
50
 
51
- if (!defined('EMBEDPRESS_SHORTCODE')) {
52
  define('EMBEDPRESS_SHORTCODE', "embed");
53
  }
54
 
55
- if (!defined('EMBEDPRESS_LICENSES_API_HOST')) {
56
  define('EMBEDPRESS_LICENSES_API_HOST', "embedpress.com");
57
  }
58
 
59
- if (!defined('EMBEDPRESS_LICENSES_API_URL')) {
60
  define('EMBEDPRESS_LICENSES_API_URL', "https://embedpress.com");
61
  }
62
 
63
- if (!defined('EMBEDPRESS_LICENSES_MORE_INFO_URL')) {
64
  define('EMBEDPRESS_LICENSES_MORE_INFO_URL', "https://embedpress.com/docs/activate-license");
65
  }
66
 
@@ -72,6 +72,6 @@ if (file_exists(__DIR__ . '/vendor/autoload.php')) {
72
  require_once __DIR__ . '/vendor/publishpress/wordpress-edd-license-integration/src/includes.php';
73
 
74
  // Run the plugin autoload script
75
- if (!defined('EMBEDPRESS_IS_LOADED')) {
76
- require_once EMBEDPRESS_PATH_BASE ."autoloader.php";
77
  }
12
  */
13
 
14
 
15
+ if ( ! defined('EMBEDPRESS')) {
16
  define('EMBEDPRESS', "EmbedPress");
17
  }
18
 
19
+ if ( ! defined('EMBEDPRESS_PLG_NAME')) {
20
  define('EMBEDPRESS_PLG_NAME', 'embedpress');
21
  }
22
 
23
+ if ( ! defined('EMBEDPRESS_VERSION')) {
24
+ define('EMBEDPRESS_VERSION', "2.2.0");
25
  }
26
 
27
+ if ( ! defined('EMBEDPRESS_ROOT')) {
28
  define('EMBEDPRESS_ROOT', dirname(__FILE__));
29
  }
30
 
31
+ if ( ! defined('EMBEDPRESS_PATH_BASE')) {
32
  define('EMBEDPRESS_PATH_BASE', plugin_dir_path(__FILE__));
33
  }
34
 
35
+ if ( ! defined('EMBEDPRESS_PATH_CORE')) {
36
+ define('EMBEDPRESS_PATH_CORE', EMBEDPRESS_PATH_BASE . "EmbedPress/");
37
  }
38
 
39
+ if ( ! defined('EMBEDPRESS_URL_ASSETS')) {
40
+ define('EMBEDPRESS_URL_ASSETS', plugins_url(EMBEDPRESS_PLG_NAME) . "/assets/");
41
  }
42
 
43
+ if ( ! defined('EMBEDPRESS_NAMESPACE')) {
44
  define('EMBEDPRESS_NAMESPACE', "\\EmbedPress");
45
  }
46
 
47
+ if ( ! defined('EMBEDPRESS_AUTOLOADER_NAME')) {
48
  define('EMBEDPRESS_AUTOLOADER_NAME', "AutoLoader");
49
  }
50
 
51
+ if ( ! defined('EMBEDPRESS_SHORTCODE')) {
52
  define('EMBEDPRESS_SHORTCODE', "embed");
53
  }
54
 
55
+ if ( ! defined('EMBEDPRESS_LICENSES_API_HOST')) {
56
  define('EMBEDPRESS_LICENSES_API_HOST', "embedpress.com");
57
  }
58
 
59
+ if ( ! defined('EMBEDPRESS_LICENSES_API_URL')) {
60
  define('EMBEDPRESS_LICENSES_API_URL', "https://embedpress.com");
61
  }
62
 
63
+ if ( ! defined('EMBEDPRESS_LICENSES_MORE_INFO_URL')) {
64
  define('EMBEDPRESS_LICENSES_MORE_INFO_URL', "https://embedpress.com/docs/activate-license");
65
  }
66
 
72
  require_once __DIR__ . '/vendor/publishpress/wordpress-edd-license-integration/src/includes.php';
73
 
74
  // Run the plugin autoload script
75
+ if ( ! defined('EMBEDPRESS_IS_LOADED')) {
76
+ require_once EMBEDPRESS_PATH_BASE . "autoloader.php";
77
  }
providers.php CHANGED
@@ -14,9 +14,9 @@
14
  * @since 1.0.0
15
  */
16
 
17
- $additionalServiceProviders = array(
18
- 'GoogleMaps' => array("google.com", "google.com.*", "maps.google.com", "goo.gl", "google.co.*"),
19
- 'GoogleDocs' => array("docs.google.com"),
20
- 'Twitch' => array("twitch.tv", "clips.twitch.tv"),
21
- 'Giphy' => array("giphy.com", "i.giphy.com")
22
- );
14
  * @since 1.0.0
15
  */
16
 
17
+ $additionalServiceProviders = [
18
+ 'GoogleMaps' => ["google.com", "google.com.*", "maps.google.com", "goo.gl", "google.co.*"],
19
+ 'GoogleDocs' => ["docs.google.com"],
20
+ 'Twitch' => ["twitch.tv", "clips.twitch.tv"],
21
+ 'Giphy' => ["giphy.com", "i.giphy.com"],
22
+ ];
readme.txt CHANGED
@@ -5,7 +5,7 @@ Author URI: https://embedpress.com
5
  Tags: YouTube, Google, Facebook, Wistia, Vimeo
6
  Requires at least: 4.6
7
  Tested up to: 4.9.4
8
- Stable tag: 2.1.6
9
  License: GPLv2 or later
10
  License URI: http://www.gnu.org/licenses/gpl-2.0.html
11
 
@@ -184,6 +184,21 @@ Not at all. You can set up everything your team needs without any coding knowled
184
  The format is based on [Keep a Changelog](http://keepachangelog.com/)
185
  and this project adheres to [Semantic Versioning](http://semver.org/).
186
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
187
  = [2.1.5] - 2018-08-03 =
188
 
189
  *Fixed:*
5
  Tags: YouTube, Google, Facebook, Wistia, Vimeo
6
  Requires at least: 4.6
7
  Tested up to: 4.9.4
8
+ Stable tag: 2.2.0
9
  License: GPLv2 or later
10
  License URI: http://www.gnu.org/licenses/gpl-2.0.html
11
 
184
  The format is based on [Keep a Changelog](http://keepachangelog.com/)
185
  and this project adheres to [Semantic Versioning](http://semver.org/).
186
 
187
+ = [2.2.0] - 2018-12-10 =
188
+
189
+ * Fixed compatibility with WordPress 5, Gutenberg, and WordPress 5 with Classic Editor;
190
+ * Removed useless settings for showing or hidding the preview panel when Gutenberg is used;
191
+ * Fixed Devianart embeds;
192
+ * Fixed Google Docs embeds;
193
+ * Fixed Google Maps embeds for urls from places;
194
+ * Changed the constant for plugin version from EMBEDPRESS_PLG_VERSION to EMBEDPRESS_VERSION;
195
+
196
+ = [2.1.6] - 2018-08-03 =
197
+
198
+ *Fixed:*
199
+
200
+ * Fixed a blank screen when Gutenberg is enabled - for now it disables if Gutenberg is enabled;
201
+
202
  = [2.1.5] - 2018-08-03 =
203
 
204
  *Fixed:*