Social Media Share Buttons & Social Sharing Icons - Version 2.3.8

Version Description

  • Update: Fixed text in theme banner.
  • Update: Fixed follow icon and subscription box when Curl is disabled.
  • Update: Fixed cURL errors.
Download this release

Release Info

Developer socialdude
Plugin Icon 128x128 Social Media Share Buttons & Social Sharing Icons
Version 2.3.8
Comparing to
See all releases

Code changes from version 2.3.7 to 2.3.8

analyst/sdk_resolver.php CHANGED
@@ -1,79 +1,79 @@
1
- <?php
2
-
3
- if (!function_exists('analyst_resolve_sdk')) {
4
-
5
- /**
6
- * Resolve supported sdk versions and load latest supported one
7
- * also bootstrap sdk with autoloader
8
- *
9
- * @since 1.1.3
10
- *
11
- * @param null $thisPluginPath
12
- * @return void
13
- * @throws Exception
14
- */
15
- function analyst_resolve_sdk($thisPluginPath = null) {
16
- static $loaded = false;
17
-
18
- // Exit if we already resolved SDK
19
- if ($loaded) return;
20
-
21
- $plugins = get_option('active_plugins');
22
-
23
- if ($thisPluginPath) {
24
- array_push($plugins, plugin_basename($thisPluginPath));
25
- }
26
-
27
- $pluginsFolder = WP_PLUGIN_DIR;
28
-
29
- $possibleSDKs = array_map(function ($path) use ($pluginsFolder) {
30
- $sdkFolder = sprintf('%s/%s/analyst/', $pluginsFolder, dirname($path));
31
-
32
- $sdkFolder = str_replace('\\', '/', $sdkFolder);
33
-
34
- $versionPath = $sdkFolder . 'version.php';
35
-
36
- if (file_exists($versionPath)) {
37
- return require $versionPath;
38
- }
39
-
40
- return false;
41
- }, $plugins);
42
-
43
- global $wp_version;
44
-
45
- // Filter out plugins which has no SDK
46
- $SDKs = array_filter($possibleSDKs, function ($s) {return is_array($s);});
47
-
48
- // Filter SDKs which is supported by PHP and WP
49
- $supported = array_values(array_filter($SDKs, function ($sdk) use($wp_version) {
50
- $phpSupported = version_compare(PHP_VERSION, $sdk['php']) >= 0;
51
- $wpSupported = version_compare($wp_version, $sdk['wp']) >= 0;
52
-
53
- return $phpSupported && $wpSupported;
54
- }));
55
-
56
- // Sort SDK by version in descending order
57
- uasort($supported, function ($x, $y) {
58
- return version_compare($y['sdk'], $x['sdk']);
59
- });
60
-
61
- // Reset sorted values keys
62
- $supported = array_values($supported);
63
-
64
- if (!isset($supported[0])) {
65
- throw new Exception('There is no SDK which is support current PHP version and WP version');
66
- }
67
-
68
- // Autoload files for supported SDK
69
- $autoloaderPath = str_replace(
70
- '\\',
71
- '/',
72
- sprintf('%s/autoload.php', $supported[0]['path'])
73
- );
74
-
75
- require_once $autoloaderPath;
76
-
77
- $loaded = true;
78
- }
79
- }
1
+ <?php
2
+
3
+ if (!function_exists('analyst_resolve_sdk')) {
4
+
5
+ /**
6
+ * Resolve supported sdk versions and load latest supported one
7
+ * also bootstrap sdk with autoloader
8
+ *
9
+ * @since 1.1.3
10
+ *
11
+ * @param null $thisPluginPath
12
+ * @return void
13
+ * @throws Exception
14
+ */
15
+ function analyst_resolve_sdk($thisPluginPath = null) {
16
+ static $loaded = false;
17
+
18
+ // Exit if we already resolved SDK
19
+ if ($loaded) return;
20
+
21
+ $plugins = get_option('active_plugins');
22
+
23
+ if ($thisPluginPath) {
24
+ array_push($plugins, plugin_basename($thisPluginPath));
25
+ }
26
+
27
+ $pluginsFolder = WP_PLUGIN_DIR;
28
+
29
+ $possibleSDKs = array_map(function ($path) use ($pluginsFolder) {
30
+ $sdkFolder = sprintf('%s/%s/analyst/', $pluginsFolder, dirname($path));
31
+
32
+ $sdkFolder = str_replace('\\', '/', $sdkFolder);
33
+
34
+ $versionPath = $sdkFolder . 'version.php';
35
+
36
+ if (file_exists($versionPath)) {
37
+ return require $versionPath;
38
+ }
39
+
40
+ return false;
41
+ }, $plugins);
42
+
43
+ global $wp_version;
44
+
45
+ // Filter out plugins which has no SDK
46
+ $SDKs = array_filter($possibleSDKs, function ($s) {return is_array($s);});
47
+
48
+ // Filter SDKs which is supported by PHP and WP
49
+ $supported = array_values(array_filter($SDKs, function ($sdk) use($wp_version) {
50
+ $phpSupported = version_compare(PHP_VERSION, $sdk['php']) >= 0;
51
+ $wpSupported = version_compare($wp_version, $sdk['wp']) >= 0;
52
+
53
+ return $phpSupported && $wpSupported;
54
+ }));
55
+
56
+ // Sort SDK by version in descending order
57
+ uasort($supported, function ($x, $y) {
58
+ return version_compare($y['sdk'], $x['sdk']);
59
+ });
60
+
61
+ // Reset sorted values keys
62
+ $supported = array_values($supported);
63
+
64
+ if (!isset($supported[0])) {
65
+ throw new Exception('There is no SDK which is support current PHP version and WP version');
66
+ }
67
+
68
+ // Autoload files for supported SDK
69
+ $autoloaderPath = str_replace(
70
+ '\\',
71
+ '/',
72
+ sprintf('%s/autoload.php', $supported[0]['path'])
73
+ );
74
+
75
+ require_once $autoloaderPath;
76
+
77
+ $loaded = true;
78
+ }
79
+ }
analyst/src/Account/Account.php CHANGED
@@ -1,604 +1,604 @@
1
- <?php
2
-
3
- namespace Account;
4
-
5
- use Analyst\Analyst;
6
- use Analyst\ApiRequestor;
7
- use Analyst\Cache\DatabaseCache;
8
- use Analyst\Collector;
9
- use Analyst\Http\Requests\ActivateRequest;
10
- use Analyst\Http\Requests\DeactivateRequest;
11
- use Analyst\Http\Requests\InstallRequest;
12
- use Analyst\Http\Requests\OptInRequest;
13
- use Analyst\Http\Requests\OptOutRequest;
14
- use Analyst\Http\Requests\UninstallRequest;
15
- use Analyst\Notices\Notice;
16
- use Analyst\Notices\NoticeFactory;
17
- use Analyst\Contracts\TrackerContract;
18
- use Analyst\Contracts\RequestorContract;
19
-
20
- /**
21
- * Class Account
22
- *
23
- * This is plugin's account object
24
- */
25
- class Account implements TrackerContract
26
- {
27
- /**
28
- * Account id
29
- *
30
- * @var string
31
- */
32
- protected $id;
33
-
34
- /**
35
- * Basename of plugin
36
- *
37
- * @var string
38
- */
39
- protected $path;
40
-
41
- /**
42
- * Whether plugin is active or not
43
- *
44
- * @var bool
45
- */
46
- protected $isInstalled = false;
47
-
48
- /**
49
- * Is user sign in for data tracking
50
- *
51
- * @var bool
52
- */
53
- protected $isOptedIn = false;
54
-
55
- /**
56
- * Is user accepted permissions grant
57
- * for collection site data
58
- *
59
- * @var bool
60
- */
61
- protected $isSigned = false;
62
-
63
- /**
64
- * Is user ever resolved install modal window?
65
- *
66
- * @var bool
67
- */
68
- protected $isInstallResolved = false;
69
-
70
- /**
71
- * Public secret code
72
- *
73
- * @var string
74
- */
75
- protected $clientSecret;
76
-
77
- /**
78
- * @var AccountData
79
- */
80
- protected $data;
81
-
82
- /**
83
- * Base plugin path
84
- *
85
- * @var string
86
- */
87
- protected $basePluginPath;
88
-
89
- /**
90
- * @var RequestorContract
91
- */
92
- protected $requestor;
93
-
94
- /**
95
- * @var Collector
96
- */
97
- protected $collector;
98
-
99
- /**
100
- * Account constructor.
101
- * @param $id
102
- * @param $secret
103
- * @param $baseDir
104
- */
105
- public function __construct($id, $secret, $baseDir)
106
- {
107
- $this->id = $id;
108
- $this->clientSecret = $secret;
109
-
110
- $this->path = $baseDir;
111
-
112
- $this->basePluginPath = plugin_basename($baseDir);
113
- }
114
-
115
- /**
116
- * @return string
117
- */
118
- public function getPath()
119
- {
120
- return $this->path;
121
- }
122
-
123
- /**
124
- * @param string $path
125
- */
126
- public function setPath($path)
127
- {
128
- $this->data->setPath($path);
129
-
130
- $this->path = $path;
131
- }
132
-
133
- /**
134
- * @return bool
135
- */
136
- public function isOptedIn()
137
- {
138
- return $this->isOptedIn;
139
- }
140
-
141
- /**
142
- * @param bool $isOptedIn
143
- */
144
- public function setIsOptedIn($isOptedIn)
145
- {
146
- $this->data->setIsOptedIn($isOptedIn);
147
-
148
- $this->isOptedIn = $isOptedIn;
149
- }
150
-
151
- /**
152
- * Whether plugin is active
153
- *
154
- * @return bool
155
- */
156
- public function isActive()
157
- {
158
- return is_plugin_active($this->path);
159
- }
160
-
161
- /**
162
- * @param string $id
163
- */
164
- public function setId($id)
165
- {
166
- $this->id = $id;
167
- }
168
-
169
- /**
170
- * @return string
171
- */
172
- public function getId()
173
- {
174
- return $this->id;
175
- }
176
-
177
- /**
178
- * @return bool
179
- */
180
- public function isInstalled()
181
- {
182
- return $this->isInstalled;
183
- }
184
-
185
- /**
186
- * @param bool $isInstalled
187
- */
188
- public function setIsInstalled($isInstalled)
189
- {
190
- $this->data->setIsInstalled($isInstalled);
191
-
192
- $this->isInstalled = $isInstalled;
193
- }
194
-
195
- /**
196
- * Should register activation and deactivation
197
- * event hooks
198
- *
199
- * @return void
200
- */
201
- public function registerHooks()
202
- {
203
- register_activation_hook($this->basePluginPath, [&$this, 'onActivePluginListener']);
204
- register_uninstall_hook($this->basePluginPath, ['Account\Account', 'onUninstallPluginListener']);
205
-
206
- $this->addFilter('plugin_action_links', [&$this, 'onRenderActionLinksHook']);
207
-
208
- $this->addAjax('analyst_opt_in', [&$this, 'onOptInListener']);
209
- $this->addAjax('analyst_opt_out', [&$this, 'onOptOutListener']);
210
- $this->addAjax('analyst_plugin_deactivate', [&$this, 'onDeactivatePluginListener']);
211
- $this->addAjax('analyst_install', [&$this, 'onInstallListener']);
212
- $this->addAjax('analyst_skip_install', [&$this, 'onSkipInstallListener']);
213
- $this->addAjax('analyst_install_verified', [&$this, 'onInstallVerifiedListener']);
214
- }
215
-
216
- /**
217
- * Will fire when admin activates plugin
218
- *
219
- * @return void
220
- */
221
- public function onActivePluginListener()
222
- {
223
- if (!$this->isInstallResolved()) {
224
- DatabaseCache::getInstance()->put('plugin_to_install', $this->id);
225
- }
226
-
227
- if (!$this->isAllowingLogging()) return;
228
-
229
- ActivateRequest::make($this->collector, $this->id, $this->path)
230
- ->execute($this->requestor);
231
-
232
- $this->setIsInstalled(true);
233
-
234
- AccountDataFactory::syncData();
235
- }
236
-
237
- /**
238
- * Will fire when admin deactivates plugin
239
- *
240
- * @return void
241
- */
242
- public function onDeactivatePluginListener()
243
- {
244
- if (!$this->isAllowingLogging()) return;
245
-
246
- $question = isset($_POST['question']) ? stripslashes($_POST['question']) : null;
247
- $reason = isset($_POST['reason']) ? stripslashes($_POST['reason']) : null;
248
-
249
- $response = DeactivateRequest::make($this->collector, $this->id, $this->path, $question, $reason)
250
- ->execute($this->requestor);
251
-
252
- // Exit if request failed
253
- if (!$response->isSuccess()) {
254
- wp_send_json_error($response->body);
255
- }
256
-
257
- $this->setIsInstalled(false);
258
-
259
- AccountDataFactory::syncData();
260
-
261
- wp_send_json_success();
262
- }
263
-
264
- /**
265
- * Will fire when user opted in
266
- *
267
- * @return void
268
- */
269
- public function onOptInListener()
270
- {
271
- $response = OptInRequest::make($this->collector, $this->id, $this->path)->execute($this->requestor);
272
-
273
- // Exit if request failed
274
- if (!$response->isSuccess()) {
275
- wp_send_json_error($response->body);
276
- }
277
-
278
- $this->setIsOptedIn(true);
279
-
280
- AccountDataFactory::syncData();
281
-
282
- wp_die();
283
- }
284
-
285
- /**
286
- * Will fire when user opted out
287
- *
288
- * @return void
289
- */
290
- public function onOptOutListener()
291
- {
292
- $response = OptOutRequest::make($this->collector, $this->id, $this->path)->execute($this->requestor);
293
-
294
- // Exit if request failed
295
- if (!$response->isSuccess()) {
296
- wp_send_json_error($response->body);
297
- }
298
-
299
- $this->setIsOptedIn(false);
300
-
301
- AccountDataFactory::syncData();
302
-
303
- wp_send_json_success();
304
- }
305
-
306
- /**
307
- * Will fire when user accept opt-in
308
- * at first time
309
- *
310
- * @return void
311
- */
312
- public function onInstallListener()
313
- {
314
- $cache = DatabaseCache::getInstance();
315
-
316
- // Set flag to true which indicates that install is resolved
317
- // also remove install plugin id from cache
318
- $this->setIsInstallResolved(true);
319
- $cache->delete('plugin_to_install');
320
-
321
- $response = InstallRequest::make($this->collector, $this->id, $this->path)->execute($this->requestor);
322
-
323
- // Exit if request failed
324
- if (!$response->isSuccess()) {
325
- wp_send_json_error($response->body);
326
- }
327
-
328
- $this->setIsSigned(true);
329
-
330
- $this->setIsOptedIn(true);
331
-
332
- $factory = NoticeFactory::instance();
333
-
334
- $message = sprintf('Please confirm your email by clicking on the link we sent to %s. This makes sure you’re not a bot.', $this->collector->getGeneralEmailAddress());
335
-
336
- $notificationId = uniqid();
337
-
338
- $notice = Notice::make(
339
- $notificationId,
340
- $this->getId(),
341
- $message,
342
- $this->collector->getPluginName($this->path)
343
- );
344
-
345
- $factory->addNotice($notice);
346
-
347
- AccountDataFactory::syncData();
348
-
349
- // Set email confirmation notification id to cache
350
- // se we can extract and remove it when user confirmed email
351
- $cache->put(
352
- sprintf('account_email_confirmation_%s', $this->getId()),
353
- $notificationId
354
- );
355
-
356
- wp_send_json_success();
357
- }
358
-
359
- /**
360
- * Will fire when user skipped installation
361
- *
362
- * @return void
363
- */
364
- public function onSkipInstallListener()
365
- {
366
- // Set flag to true which indicates that install is resolved
367
- // also remove install plugin id from cache
368
- $this->setIsInstallResolved(true);
369
- DatabaseCache::getInstance()->delete('plugin_to_install');
370
- }
371
-
372
- /**
373
- * Will fire when user delete plugin through admin panel.
374
- * This action will happen if admin at least once
375
- * activated the plugin.
376
- *
377
- * @return void
378
- * @throws \Exception
379
- */
380
- public static function onUninstallPluginListener()
381
- {
382
- $factory = AccountDataFactory::instance();
383
-
384
- $pluginFile = substr(current_filter(), strlen( 'uninstall_' ));
385
-
386
- $account = $factory->getAccountDataByBasePath($pluginFile);
387
-
388
- // If account somehow is not found, exit the execution
389
- if (!$account) return;
390
-
391
- $analyst = Analyst::getInstance();
392
-
393
- $collector = new Collector($analyst);
394
-
395
- $requestor = new ApiRequestor($account->getId(), $account->getSecret(), $analyst->getApiBase());
396
-
397
- // Just send request to log uninstall event not caring about response
398
- UninstallRequest::make($collector, $account->getId(), $account->getPath())->execute($requestor);
399
-
400
- $factory->sync();
401
- }
402
-
403
- /**
404
- * Fires when used verified his account
405
- */
406
- public function onInstallVerifiedListener()
407
- {
408
- $factory = NoticeFactory::instance();
409
-
410
- $notice = Notice::make(
411
- uniqid(),
412
- $this->getId(),
413
- 'Thank you for confirming your email.',
414
- $this->collector->getPluginName($this->path)
415
- );
416
-
417
- $factory->addNotice($notice);
418
-
419
- // Remove confirmation notification
420
- $confirmationNotificationId = DatabaseCache::getInstance()->pop(sprintf('account_email_confirmation_%s', $this->getId()));
421
- $factory->remove($confirmationNotificationId);
422
-
423
- AccountDataFactory::syncData();
424
-
425
- wp_send_json_success();
426
- }
427
-
428
- /**
429
- * Will fire when wp renders plugin
430
- * action buttons
431
- *
432
- * @param $defaultLinks
433
- * @return array
434
- */
435
- public function onRenderActionLinksHook($defaultLinks)
436
- {
437
- $customLinks = [];
438
-
439
- $customLinks[] = $this->isOptedIn()
440
- ? '<a class="analyst-action-opt analyst-opt-out" analyst-plugin-id="' . $this->getId() . '" analyst-plugin-signed="' . (int) $this->isSigned() . '">Opt Out</a>'
441
- : '<a class="analyst-action-opt analyst-opt-in" analyst-plugin-id="' . $this->getId() . '" analyst-plugin-signed="' . (int) $this->isSigned() . '">Opt In</a>';
442
-
443
- // Append anchor to find specific deactivation link
444
- if (isset($defaultLinks['deactivate'])) {
445
- $defaultLinks['deactivate'] .= '<span analyst-plugin-id="' . $this->getId() . '" analyst-plugin-opted-in="' . (int) $this->isOptedIn() . '"></span>';
446
- }
447
-
448
- return array_merge($customLinks, $defaultLinks);
449
- }
450
-
451
- /**
452
- * @return AccountData
453
- */
454
- public function getData()
455
- {
456
- return $this->data;
457
- }
458
-
459
- /**
460
- * @param AccountData $data
461
- */
462
- public function setData(AccountData $data)
463
- {
464
- $this->data = $data;
465
-
466
- $this->setIsOptedIn($data->isOptedIn());
467
- $this->setIsInstalled($data->isInstalled());
468
- $this->setIsSigned($data->isSigned());
469
- $this->setIsInstallResolved($data->isInstallResolved());
470
- }
471
-
472
- /**
473
- * Resolves valid action name
474
- * based on client id
475
- *
476
- * @param $action
477
- * @return string
478
- */
479
- private function resolveActionName($action)
480
- {
481
- return sprintf('%s_%s', $action, $this->id);
482
- }
483
-
484
- /**
485
- * Register action for current plugin
486
- *
487
- * @param $action
488
- * @param $callback
489
- */
490
- private function addFilter($action, $callback)
491
- {
492
- $validAction = sprintf('%s_%s', $action, $this->basePluginPath);
493
-
494
- add_filter($validAction, $callback, 10);
495
- }
496
-
497
- /**
498
- * Add ajax action for current plugin
499
- *
500
- * @param $action
501
- * @param $callback
502
- * @param bool $raw Format action ??
503
- */
504
- private function addAjax($action, $callback, $raw = false)
505
- {
506
- $validAction = $raw ? $action : sprintf('%s%s', 'wp_ajax_', $this->resolveActionName($action));
507
-
508
- add_action($validAction, $callback);
509
- }
510
-
511
- /**
512
- * @return bool
513
- */
514
- public function isSigned()
515
- {
516
- return $this->isSigned;
517
- }
518
-
519
- /**
520
- * @param bool $isSigned
521
- */
522
- public function setIsSigned($isSigned)
523
- {
524
- $this->data->setIsSigned($isSigned);
525
-
526
- $this->isSigned = $isSigned;
527
- }
528
-
529
- /**
530
- * @return RequestorContract
531
- */
532
- public function getRequestor()
533
- {
534
- return $this->requestor;
535
- }
536
-
537
- /**
538
- * @param RequestorContract $requestor
539
- */
540
- public function setRequestor(RequestorContract $requestor)
541
- {
542
- $this->requestor = $requestor;
543
- }
544
-
545
- /**
546
- * @return string
547
- */
548
- public function getClientSecret()
549
- {
550
- return $this->clientSecret;
551
- }
552
-
553
- /**
554
- * @return Collector
555
- */
556
- public function getCollector()
557
- {
558
- return $this->collector;
559
- }
560
-
561
- /**
562
- * @param Collector $collector
563
- */
564
- public function setCollector(Collector $collector)
565
- {
566
- $this->collector = $collector;
567
- }
568
-
569
- /**
570
- * Do we allowing logging
571
- *
572
- * @return bool
573
- */
574
- public function isAllowingLogging()
575
- {
576
- return $this->isOptedIn;
577
- }
578
-
579
- /**
580
- * @return string
581
- */
582
- public function getBasePluginPath()
583
- {
584
- return $this->basePluginPath;
585
- }
586
-
587
- /**
588
- * @return bool
589
- */
590
- public function isInstallResolved()
591
- {
592
- return $this->isInstallResolved;
593
- }
594
-
595
- /**
596
- * @param bool $isInstallResolved
597
- */
598
- public function setIsInstallResolved($isInstallResolved)
599
- {
600
- $this->data->setIsInstallResolved($isInstallResolved);
601
-
602
- $this->isInstallResolved = $isInstallResolved;
603
- }
604
- }
1
+ <?php
2
+
3
+ namespace Account;
4
+
5
+ use Analyst\Analyst;
6
+ use Analyst\ApiRequestor;
7
+ use Analyst\Cache\DatabaseCache;
8
+ use Analyst\Collector;
9
+ use Analyst\Http\Requests\ActivateRequest;
10
+ use Analyst\Http\Requests\DeactivateRequest;
11
+ use Analyst\Http\Requests\InstallRequest;
12
+ use Analyst\Http\Requests\OptInRequest;
13
+ use Analyst\Http\Requests\OptOutRequest;
14
+ use Analyst\Http\Requests\UninstallRequest;
15
+ use Analyst\Notices\Notice;
16
+ use Analyst\Notices\NoticeFactory;
17
+ use Analyst\Contracts\TrackerContract;
18
+ use Analyst\Contracts\RequestorContract;
19
+
20
+ /**
21
+ * Class Account
22
+ *
23
+ * This is plugin's account object
24
+ */
25
+ class Account implements TrackerContract
26
+ {
27
+ /**
28
+ * Account id
29
+ *
30
+ * @var string
31
+ */
32
+ protected $id;
33
+
34
+ /**
35
+ * Basename of plugin
36
+ *
37
+ * @var string
38
+ */
39
+ protected $path;
40
+
41
+ /**
42
+ * Whether plugin is active or not
43
+ *
44
+ * @var bool
45
+ */
46
+ protected $isInstalled = false;
47
+
48
+ /**
49
+ * Is user sign in for data tracking
50
+ *
51
+ * @var bool
52
+ */
53
+ protected $isOptedIn = false;
54
+
55
+ /**
56
+ * Is user accepted permissions grant
57
+ * for collection site data
58
+ *
59
+ * @var bool
60
+ */
61
+ protected $isSigned = false;
62
+
63
+ /**
64
+ * Is user ever resolved install modal window?
65
+ *
66
+ * @var bool
67
+ */
68
+ protected $isInstallResolved = false;
69
+
70
+ /**
71
+ * Public secret code
72
+ *
73
+ * @var string
74
+ */
75
+ protected $clientSecret;
76
+
77
+ /**
78
+ * @var AccountData
79
+ */
80
+ protected $data;
81
+
82
+ /**
83
+ * Base plugin path
84
+ *
85
+ * @var string
86
+ */
87
+ protected $basePluginPath;
88
+
89
+ /**
90
+ * @var RequestorContract
91
+ */
92
+ protected $requestor;
93
+
94
+ /**
95
+ * @var Collector
96
+ */
97
+ protected $collector;
98
+
99
+ /**
100
+ * Account constructor.
101
+ * @param $id
102
+ * @param $secret
103
+ * @param $baseDir
104
+ */
105
+ public function __construct($id, $secret, $baseDir)
106
+ {
107
+ $this->id = $id;
108
+ $this->clientSecret = $secret;
109
+
110
+ $this->path = $baseDir;
111
+
112
+ $this->basePluginPath = plugin_basename($baseDir);
113
+ }
114
+
115
+ /**
116
+ * @return string
117
+ */
118
+ public function getPath()
119
+ {
120
+ return $this->path;
121
+ }
122
+
123
+ /**
124
+ * @param string $path
125
+ */
126
+ public function setPath($path)
127
+ {
128
+ $this->data->setPath($path);
129
+
130
+ $this->path = $path;
131
+ }
132
+
133
+ /**
134
+ * @return bool
135
+ */
136
+ public function isOptedIn()
137
+ {
138
+ return $this->isOptedIn;
139
+ }
140
+
141
+ /**
142
+ * @param bool $isOptedIn
143
+ */
144
+ public function setIsOptedIn($isOptedIn)
145
+ {
146
+ $this->data->setIsOptedIn($isOptedIn);
147
+
148
+ $this->isOptedIn = $isOptedIn;
149
+ }
150
+
151
+ /**
152
+ * Whether plugin is active
153
+ *
154
+ * @return bool
155
+ */
156
+ public function isActive()
157
+ {
158
+ return is_plugin_active($this->path);
159
+ }
160
+
161
+ /**
162
+ * @param string $id
163
+ */
164
+ public function setId($id)
165
+ {
166
+ $this->id = $id;
167
+ }
168
+
169
+ /**
170
+ * @return string
171
+ */
172
+ public function getId()
173
+ {
174
+ return $this->id;
175
+ }
176
+
177
+ /**
178
+ * @return bool
179
+ */
180
+ public function isInstalled()
181
+ {
182
+ return $this->isInstalled;
183
+ }
184
+
185
+ /**
186
+ * @param bool $isInstalled
187
+ */
188
+ public function setIsInstalled($isInstalled)
189
+ {
190
+ $this->data->setIsInstalled($isInstalled);
191
+
192
+ $this->isInstalled = $isInstalled;
193
+ }
194
+
195
+ /**
196
+ * Should register activation and deactivation
197
+ * event hooks
198
+ *
199
+ * @return void
200
+ */
201
+ public function registerHooks()
202
+ {
203
+ register_activation_hook($this->basePluginPath, [&$this, 'onActivePluginListener']);
204
+ register_uninstall_hook($this->basePluginPath, ['Account\Account', 'onUninstallPluginListener']);
205
+
206
+ $this->addFilter('plugin_action_links', [&$this, 'onRenderActionLinksHook']);
207
+
208
+ $this->addAjax('analyst_opt_in', [&$this, 'onOptInListener']);
209
+ $this->addAjax('analyst_opt_out', [&$this, 'onOptOutListener']);
210
+ $this->addAjax('analyst_plugin_deactivate', [&$this, 'onDeactivatePluginListener']);
211
+ $this->addAjax('analyst_install', [&$this, 'onInstallListener']);
212
+ $this->addAjax('analyst_skip_install', [&$this, 'onSkipInstallListener']);
213
+ $this->addAjax('analyst_install_verified', [&$this, 'onInstallVerifiedListener']);
214
+ }
215
+
216
+ /**
217
+ * Will fire when admin activates plugin
218
+ *
219
+ * @return void
220
+ */
221
+ public function onActivePluginListener()
222
+ {
223
+ if (!$this->isInstallResolved()) {
224
+ DatabaseCache::getInstance()->put('plugin_to_install', $this->id);
225
+ }
226
+
227
+ if (!$this->isAllowingLogging()) return;
228
+
229
+ ActivateRequest::make($this->collector, $this->id, $this->path)
230
+ ->execute($this->requestor);
231
+
232
+ $this->setIsInstalled(true);
233
+
234
+ AccountDataFactory::syncData();
235
+ }
236
+
237
+ /**
238
+ * Will fire when admin deactivates plugin
239
+ *
240
+ * @return void
241
+ */
242
+ public function onDeactivatePluginListener()
243
+ {
244
+ if (!$this->isAllowingLogging()) return;
245
+
246
+ $question = isset($_POST['question']) ? stripslashes($_POST['question']) : null;
247
+ $reason = isset($_POST['reason']) ? stripslashes($_POST['reason']) : null;
248
+
249
+ $response = DeactivateRequest::make($this->collector, $this->id, $this->path, $question, $reason)
250
+ ->execute($this->requestor);
251
+
252
+ // Exit if request failed
253
+ if (!$response->isSuccess()) {
254
+ wp_send_json_error($response->body);
255
+ }
256
+
257
+ $this->setIsInstalled(false);
258
+
259
+ AccountDataFactory::syncData();
260
+
261
+ wp_send_json_success();
262
+ }
263
+
264
+ /**
265
+ * Will fire when user opted in
266
+ *
267
+ * @return void
268
+ */
269
+ public function onOptInListener()
270
+ {
271
+ $response = OptInRequest::make($this->collector, $this->id, $this->path)->execute($this->requestor);
272
+
273
+ // Exit if request failed
274
+ if (!$response->isSuccess()) {
275
+ wp_send_json_error($response->body);
276
+ }
277
+
278
+ $this->setIsOptedIn(true);
279
+
280
+ AccountDataFactory::syncData();
281
+
282
+ wp_die();
283
+ }
284
+
285
+ /**
286
+ * Will fire when user opted out
287
+ *
288
+ * @return void
289
+ */
290
+ public function onOptOutListener()
291
+ {
292
+ $response = OptOutRequest::make($this->collector, $this->id, $this->path)->execute($this->requestor);
293
+
294
+ // Exit if request failed
295
+ if (!$response->isSuccess()) {
296
+ wp_send_json_error($response->body);
297
+ }
298
+
299
+ $this->setIsOptedIn(false);
300
+
301
+ AccountDataFactory::syncData();
302
+
303
+ wp_send_json_success();
304
+ }
305
+
306
+ /**
307
+ * Will fire when user accept opt-in
308
+ * at first time
309
+ *
310
+ * @return void
311
+ */
312
+ public function onInstallListener()
313
+ {
314
+ $cache = DatabaseCache::getInstance();
315
+
316
+ // Set flag to true which indicates that install is resolved
317
+ // also remove install plugin id from cache
318
+ $this->setIsInstallResolved(true);
319
+ $cache->delete('plugin_to_install');
320
+
321
+ $response = InstallRequest::make($this->collector, $this->id, $this->path)->execute($this->requestor);
322
+
323
+ // Exit if request failed
324
+ if (!$response->isSuccess()) {
325
+ wp_send_json_error($response->body);
326
+ }
327
+
328
+ $this->setIsSigned(true);
329
+
330
+ $this->setIsOptedIn(true);
331
+
332
+ $factory = NoticeFactory::instance();
333
+
334
+ $message = sprintf('Please confirm your email by clicking on the link we sent to %s. This makes sure you’re not a bot.', $this->collector->getGeneralEmailAddress());
335
+
336
+ $notificationId = uniqid();
337
+
338
+ $notice = Notice::make(
339
+ $notificationId,
340
+ $this->getId(),
341
+ $message,
342
+ $this->collector->getPluginName($this->path)
343
+ );
344
+
345
+ $factory->addNotice($notice);
346
+
347
+ AccountDataFactory::syncData();
348
+
349
+ // Set email confirmation notification id to cache
350
+ // se we can extract and remove it when user confirmed email
351
+ $cache->put(
352
+ sprintf('account_email_confirmation_%s', $this->getId()),
353
+ $notificationId
354
+ );
355
+
356
+ wp_send_json_success();
357
+ }
358
+
359
+ /**
360
+ * Will fire when user skipped installation
361
+ *
362
+ * @return void
363
+ */
364
+ public function onSkipInstallListener()
365
+ {
366
+ // Set flag to true which indicates that install is resolved
367
+ // also remove install plugin id from cache
368
+ $this->setIsInstallResolved(true);
369
+ DatabaseCache::getInstance()->delete('plugin_to_install');
370
+ }
371
+
372
+ /**
373
+ * Will fire when user delete plugin through admin panel.
374
+ * This action will happen if admin at least once
375
+ * activated the plugin.
376
+ *
377
+ * @return void
378
+ * @throws \Exception
379
+ */
380
+ public static function onUninstallPluginListener()
381
+ {
382
+ $factory = AccountDataFactory::instance();
383
+
384
+ $pluginFile = substr(current_filter(), strlen( 'uninstall_' ));
385
+
386
+ $account = $factory->getAccountDataByBasePath($pluginFile);
387
+
388
+ // If account somehow is not found, exit the execution
389
+ if (!$account) return;
390
+
391
+ $analyst = Analyst::getInstance();
392
+
393
+ $collector = new Collector($analyst);
394
+
395
+ $requestor = new ApiRequestor($account->getId(), $account->getSecret(), $analyst->getApiBase());
396
+
397
+ // Just send request to log uninstall event not caring about response
398
+ UninstallRequest::make($collector, $account->getId(), $account->getPath())->execute($requestor);
399
+
400
+ $factory->sync();
401
+ }
402
+
403
+ /**
404
+ * Fires when used verified his account
405
+ */
406
+ public function onInstallVerifiedListener()
407
+ {
408
+ $factory = NoticeFactory::instance();
409
+
410
+ $notice = Notice::make(
411
+ uniqid(),
412
+ $this->getId(),
413
+ 'Thank you for confirming your email.',
414
+ $this->collector->getPluginName($this->path)
415
+ );
416
+
417
+ $factory->addNotice($notice);
418
+
419
+ // Remove confirmation notification
420
+ $confirmationNotificationId = DatabaseCache::getInstance()->pop(sprintf('account_email_confirmation_%s', $this->getId()));
421
+ $factory->remove($confirmationNotificationId);
422
+
423
+ AccountDataFactory::syncData();
424
+
425
+ wp_send_json_success();
426
+ }
427
+
428
+ /**
429
+ * Will fire when wp renders plugin
430
+ * action buttons
431
+ *
432
+ * @param $defaultLinks
433
+ * @return array
434
+ */
435
+ public function onRenderActionLinksHook($defaultLinks)
436
+ {
437
+ $customLinks = [];
438
+
439
+ $customLinks[] = $this->isOptedIn()
440
+ ? '<a class="analyst-action-opt analyst-opt-out" analyst-plugin-id="' . $this->getId() . '" analyst-plugin-signed="' . (int) $this->isSigned() . '">Opt Out</a>'
441
+ : '<a class="analyst-action-opt analyst-opt-in" analyst-plugin-id="' . $this->getId() . '" analyst-plugin-signed="' . (int) $this->isSigned() . '">Opt In</a>';
442
+
443
+ // Append anchor to find specific deactivation link
444
+ if (isset($defaultLinks['deactivate'])) {
445
+ $defaultLinks['deactivate'] .= '<span analyst-plugin-id="' . $this->getId() . '" analyst-plugin-opted-in="' . (int) $this->isOptedIn() . '"></span>';
446
+ }
447
+
448
+ return array_merge($customLinks, $defaultLinks);
449
+ }
450
+
451
+ /**
452
+ * @return AccountData
453
+ */
454
+ public function getData()
455
+ {
456
+ return $this->data;
457
+ }
458
+
459
+ /**
460
+ * @param AccountData $data
461
+ */
462
+ public function setData(AccountData $data)
463
+ {
464
+ $this->data = $data;
465
+
466
+ $this->setIsOptedIn($data->isOptedIn());
467
+ $this->setIsInstalled($data->isInstalled());
468
+ $this->setIsSigned($data->isSigned());
469
+ $this->setIsInstallResolved($data->isInstallResolved());
470
+ }
471
+
472
+ /**
473
+ * Resolves valid action name
474
+ * based on client id
475
+ *
476
+ * @param $action
477
+ * @return string
478
+ */
479
+ private function resolveActionName($action)
480
+ {
481
+ return sprintf('%s_%s', $action, $this->id);
482
+ }
483
+
484
+ /**
485
+ * Register action for current plugin
486
+ *
487
+ * @param $action
488
+ * @param $callback
489
+ */
490
+ private function addFilter($action, $callback)
491
+ {
492
+ $validAction = sprintf('%s_%s', $action, $this->basePluginPath);
493
+
494
+ add_filter($validAction, $callback, 10);
495
+ }
496
+
497
+ /**
498
+ * Add ajax action for current plugin
499
+ *
500
+ * @param $action
501
+ * @param $callback
502
+ * @param bool $raw Format action ??
503
+ */
504
+ private function addAjax($action, $callback, $raw = false)
505
+ {
506
+ $validAction = $raw ? $action : sprintf('%s%s', 'wp_ajax_', $this->resolveActionName($action));
507
+
508
+ add_action($validAction, $callback);
509
+ }
510
+
511
+ /**
512
+ * @return bool
513
+ */
514
+ public function isSigned()
515
+ {
516
+ return $this->isSigned;
517
+ }
518
+
519
+ /**
520
+ * @param bool $isSigned
521
+ */
522
+ public function setIsSigned($isSigned)
523
+ {
524
+ $this->data->setIsSigned($isSigned);
525
+
526
+ $this->isSigned = $isSigned;
527
+ }
528
+
529
+ /**
530
+ * @return RequestorContract
531
+ */
532
+ public function getRequestor()
533
+ {
534
+ return $this->requestor;
535
+ }
536
+
537
+ /**
538
+ * @param RequestorContract $requestor
539
+ */
540
+ public function setRequestor(RequestorContract $requestor)
541
+ {
542
+ $this->requestor = $requestor;
543
+ }
544
+
545
+ /**
546
+ * @return string
547
+ */
548
+ public function getClientSecret()
549
+ {
550
+ return $this->clientSecret;
551
+ }
552
+
553
+ /**
554
+ * @return Collector
555
+ */
556
+ public function getCollector()
557
+ {
558
+ return $this->collector;
559
+ }
560
+
561
+ /**
562
+ * @param Collector $collector
563
+ */
564
+ public function setCollector(Collector $collector)
565
+ {
566
+ $this->collector = $collector;
567
+ }
568
+
569
+ /**
570
+ * Do we allowing logging
571
+ *
572
+ * @return bool
573
+ */
574
+ public function isAllowingLogging()
575
+ {
576
+ return $this->isOptedIn;
577
+ }
578
+
579
+ /**
580
+ * @return string
581
+ */
582
+ public function getBasePluginPath()
583
+ {
584
+ return $this->basePluginPath;
585
+ }
586
+
587
+ /**
588
+ * @return bool
589
+ */
590
+ public function isInstallResolved()
591
+ {
592
+ return $this->isInstallResolved;
593
+ }
594
+
595
+ /**
596
+ * @param bool $isInstallResolved
597
+ */
598
+ public function setIsInstallResolved($isInstallResolved)
599
+ {
600
+ $this->data->setIsInstallResolved($isInstallResolved);
601
+
602
+ $this->isInstallResolved = $isInstallResolved;
603
+ }
604
+ }
analyst/src/Mutator.php CHANGED
@@ -1,103 +1,103 @@
1
- <?php
2
-
3
- namespace Analyst;
4
-
5
- use Analyst\Cache\DatabaseCache;
6
- use Analyst\Contracts\CacheContract;
7
- use Analyst\Notices\NoticeFactory;
8
-
9
- /**
10
- * Class Mutator mutates (modifies) UX with additional
11
- * functional
12
- */
13
- class Mutator
14
- {
15
- protected $notices = [];
16
-
17
- /**
18
- * @var NoticeFactory
19
- */
20
- protected $factory;
21
-
22
- /**
23
- * @var CacheContract
24
- */
25
- protected $cache;
26
-
27
- public function __construct()
28
- {
29
- $this->factory = NoticeFactory::instance();
30
-
31
- $this->notices = $this->factory->getNotices();
32
-
33
- $this->cache = DatabaseCache::getInstance();
34
- }
35
-
36
- /**
37
- * Register filters all necessary stuff.
38
- * Can be invoked only once.
39
- *
40
- * @return void
41
- */
42
- public function initialize()
43
- {
44
- $this->registerLinks();
45
- $this->registerAssets();
46
- $this->registerHooks();
47
- }
48
-
49
- /**
50
- * Register all necessary filters and templates
51
- *
52
- * @return void
53
- */
54
- protected function registerLinks()
55
- {
56
- add_action('admin_footer', function () {
57
- analyst_require_template('optout.php', [
58
- 'shieldImage' => analyst_assets_url('img/shield_question.png')
59
- ]);
60
-
61
- analyst_require_template('optin.php');
62
-
63
- analyst_require_template('forms/deactivate.php', [
64
- 'pencilImage' => analyst_assets_url('img/pencil.png'),
65
- 'smileImage' => analyst_assets_url('img/smile.png'),
66
- ]);
67
-
68
- analyst_require_template('forms/install.php', [
69
- 'pluginToInstall' => $this->cache->get('plugin_to_install'),
70
- 'shieldImage' => analyst_assets_url('img/shield_success.png'),
71
- ]);
72
- });
73
-
74
- add_action('admin_notices',function () {
75
- foreach ($this->notices as $notice) {
76
- analyst_require_template('notice.php', ['notice' => $notice]);
77
- }
78
- });
79
- }
80
-
81
- /**
82
- * Register all assets
83
- */
84
- public function registerAssets()
85
- {
86
- add_action('admin_enqueue_scripts', function () {
87
- wp_enqueue_style('analyst_custom', analyst_assets_url('/css/customize.css'));
88
- wp_enqueue_script('analyst_custom', analyst_assets_url('/js/customize.js'));
89
- });
90
- }
91
-
92
- /**
93
- * Register action hooks
94
- */
95
- public function registerHooks()
96
- {
97
- add_action('wp_ajax_analyst_notification_dismiss', function () {
98
- $this->factory->remove($_POST['id']);
99
-
100
- $this->factory->sync();
101
- });
102
- }
103
- }
1
+ <?php
2
+
3
+ namespace Analyst;
4
+
5
+ use Analyst\Cache\DatabaseCache;
6
+ use Analyst\Contracts\CacheContract;
7
+ use Analyst\Notices\NoticeFactory;
8
+
9
+ /**
10
+ * Class Mutator mutates (modifies) UX with additional
11
+ * functional
12
+ */
13
+ class Mutator
14
+ {
15
+ protected $notices = [];
16
+
17
+ /**
18
+ * @var NoticeFactory
19
+ */
20
+ protected $factory;
21
+
22
+ /**
23
+ * @var CacheContract
24
+ */
25
+ protected $cache;
26
+
27
+ public function __construct()
28
+ {
29
+ $this->factory = NoticeFactory::instance();
30
+
31
+ $this->notices = $this->factory->getNotices();
32
+
33
+ $this->cache = DatabaseCache::getInstance();
34
+ }
35
+
36
+ /**
37
+ * Register filters all necessary stuff.
38
+ * Can be invoked only once.
39
+ *
40
+ * @return void
41
+ */
42
+ public function initialize()
43
+ {
44
+ $this->registerLinks();
45
+ $this->registerAssets();
46
+ $this->registerHooks();
47
+ }
48
+
49
+ /**
50
+ * Register all necessary filters and templates
51
+ *
52
+ * @return void
53
+ */
54
+ protected function registerLinks()
55
+ {
56
+ add_action('admin_footer', function () {
57
+ analyst_require_template('optout.php', [
58
+ 'shieldImage' => analyst_assets_url('img/shield_question.png')
59
+ ]);
60
+
61
+ analyst_require_template('optin.php');
62
+
63
+ analyst_require_template('forms/deactivate.php', [
64
+ 'pencilImage' => analyst_assets_url('img/pencil.png'),
65
+ 'smileImage' => analyst_assets_url('img/smile.png'),
66
+ ]);
67
+
68
+ analyst_require_template('forms/install.php', [
69
+ 'pluginToInstall' => $this->cache->get('plugin_to_install'),
70
+ 'shieldImage' => analyst_assets_url('img/shield_success.png'),
71
+ ]);
72
+ });
73
+
74
+ add_action('admin_notices',function () {
75
+ foreach ($this->notices as $notice) {
76
+ analyst_require_template('notice.php', ['notice' => $notice]);
77
+ }
78
+ });
79
+ }
80
+
81
+ /**
82
+ * Register all assets
83
+ */
84
+ public function registerAssets()
85
+ {
86
+ add_action('admin_enqueue_scripts', function () {
87
+ wp_enqueue_style('analyst_custom', analyst_assets_url('/css/customize.css'));
88
+ wp_enqueue_script('analyst_custom', analyst_assets_url('/js/customize.js'));
89
+ });
90
+ }
91
+
92
+ /**
93
+ * Register action hooks
94
+ */
95
+ public function registerHooks()
96
+ {
97
+ add_action('wp_ajax_analyst_notification_dismiss', function () {
98
+ $this->factory->remove($_POST['id']);
99
+
100
+ $this->factory->sync();
101
+ });
102
+ }
103
+ }
analyst/version.php CHANGED
@@ -1,15 +1,15 @@
1
- <?php
2
-
3
- return array(
4
- // The sdk version
5
- 'sdk' => '1.3.26',
6
-
7
- // Minimum supported WordPress version
8
- 'wp' => '4.7',
9
-
10
- // Supported PHP version
11
- 'php' => '5.4',
12
-
13
- // Path to current SDK$
14
- 'path' => __DIR__,
15
- );
1
+ <?php
2
+
3
+ return array(
4
+ // The sdk version
5
+ 'sdk' => '1.3.26',
6
+
7
+ // Minimum supported WordPress version
8
+ 'wp' => '4.7',
9
+
10
+ // Supported PHP version
11
+ 'php' => '5.4',
12
+
13
+ // Path to current SDK$
14
+ 'path' => __DIR__,
15
+ );
css/sfsi-style.css CHANGED
@@ -1,3473 +1,3473 @@
1
- @charset "utf-8";
2
-
3
- @font-face {
4
- font-family: helveticabold;
5
- src: url(fonts/helvetica_bold_0-webfont.eot);
6
- src: url(fonts/helvetica_bold_0-webfont.eot?#iefix) format('embedded-opentype'), url(fonts/helvetica_bold_0-webfont.woff) format('woff'), url(fonts/helvetica_bold_0-webfont.ttf) format('truetype'), url(fonts/helvetica_bold_0-webfont.svg#helveticabold) format('svg');
7
- font-weight: 400;
8
- font-style: normal;
9
- }
10
-
11
- @font-face {
12
- font-family: helveticaregular;
13
- src: url(fonts/helvetica_0-webfont.eot);
14
- src: url(fonts/helvetica_0-webfont.eot?#iefix) format('embedded-opentype'), url(fonts/helvetica_0-webfont.woff) format('woff'), url(fonts/helvetica_0-webfont.ttf) format('truetype'), url(fonts/helvetica_0-webfont.svg#helveticaregular) format('svg');
15
- font-weight: 400;
16
- font-style: normal;
17
- }
18
-
19
- @font-face {
20
- font-family: helveticaneue-light;
21
- src: url(fonts/helveticaneue-light.eot);
22
- src: url(fonts/helveticaneue-light.eot?#iefix) format('embedded-opentype'), url(fonts/helveticaneue-light.woff) format('woff'), url(fonts/helveticaneue-light.ttf) format('truetype'), url(fonts/helveticaneue-light.svg#helveticaneue-light) format('svg');
23
- font-weight: 400;
24
- font-style: normal;
25
- }
26
-
27
- body {
28
- margin: 0;
29
- padding: 0;
30
- }
31
-
32
- .clear {
33
- clear: both;
34
- }
35
-
36
- .space {
37
- clear: both;
38
- padding: 30px 0 0;
39
- width: 100%;
40
- float: left;
41
- }
42
-
43
- .like_txt {
44
- margin: 30px 0 0;
45
- padding: 0;
46
- color: #12a252;
47
- font-family: helveticaregular;
48
- font-size: 20px;
49
- line-height: 20px;
50
- text-align: center;
51
- }
52
-
53
- .like_txt a {
54
- color: #12a252;
55
- }
56
-
57
- .sfsibeforpstwpr iframe,
58
- .sfsiaftrpstwpr iframe {
59
- max-width: none;
60
- }
61
-
62
- .sfwp_fivestar_ul li {
63
- display: block;
64
- padding-right: 20px;
65
- }
66
-
67
- .shwthmbfraftr {
68
- margin-top: 5px !important
69
- }
70
-
71
- label.toglpstpgsbttl {
72
- float: left;
73
- margin-top: 5px !important
74
- }
75
-
76
- .tab_3_icns.shwthmbfraftr .cstmdisplaysharingtxt {
77
- float: left;
78
- }
79
-
80
- .tab6 ul.enough_waffling.sfsi_dsplyatend {
81
- width: 24%;
82
- float: left;
83
- }
84
-
85
- .tab4 ul.like_icon {
86
- margin: 0;
87
- padding: 20px 0 0;
88
- list-style: none;
89
- text-align: center;
90
- }
91
-
92
- .tab4 ul.like_icon li {
93
- margin: 0;
94
- padding: 0;
95
- list-style: none;
96
- display: inline-block;
97
- }
98
-
99
- .tab4 ul.like_icon li span {
100
- margin: 0;
101
- width: 54px;
102
- display: block;
103
- background: url(../images/count_bg.png) no-repeat;
104
- height: 24px;
105
- overflow: hidden;
106
- padding: 10px 2px 2px;
107
- font-size: 17px;
108
- text-align: center;
109
- line-height: 24px;
110
- color: #5a6570;
111
- }
112
-
113
- .tab4 ul.like_icon li a {
114
- color: #5a6570;
115
- text-decoration: none;
116
- }
117
-
118
- .tab4 ul.enough_waffling {
119
- margin: 0;
120
- padding: 25px 0 27px;
121
- list-style: none;
122
- text-align: center;
123
- }
124
-
125
- .tab4 ul.enough_waffling li {
126
- margin: 0 22px;
127
- padding: 0;
128
- list-style: none;
129
- display: inline-block;
130
- }
131
-
132
- .tab4 ul.enough_waffling li span {
133
- float: left;
134
- }
135
-
136
- .tab4 ul.enough_waffling li label {
137
- margin: 0 0 0 20px;
138
- float: left;
139
- font-family: helveticaregular;
140
- font-size: 18px;
141
- font-weight: 400;
142
- text-align: center;
143
- line-height: 38px;
144
- color: #5a6570;
145
- }
146
-
147
- .sfsi_mainContainer .checkbox {
148
- width: 31px;
149
- height: 31px;
150
- background: url(../images/check_bg.jpg) no-repeat;
151
- display: inherit;
152
- }
153
-
154
- .sfsi_mainContainer .radio {
155
- width: 40px;
156
- height: 40px;
157
- background: url(../images/radio_bg.png) no-repeat;
158
- display: inherit;
159
- }
160
-
161
- .sfsi_mainContainer .select {
162
- width: 127px;
163
- height: 47px;
164
- font-size: 17px;
165
- background: url(../images/select_bg.jpg) no-repeat;
166
- display: block;
167
- padding-left: 16px;
168
- line-height: 49px;
169
- }
170
-
171
- .sfsi_mainContainer .line {
172
- background: #eaebee;
173
- height: 1px;
174
- font-size: 0;
175
- margin: 15px 0 0;
176
- clear: both;
177
- width: 100%;
178
- float: left;
179
- }
180
-
181
- .specify_counts {
182
- display: block;
183
- margin-top: 15px;
184
- padding-top: 15px;
185
- clear: both;
186
- width: 100%;
187
- float: left;
188
- border-top: 1px solid #eaebee;
189
- }
190
-
191
- .specify_counts .radio_section {
192
- width: 30px;
193
- float: left;
194
- margin: 12px 10px 0 0;
195
- }
196
-
197
- .specify_counts .social_icon_like {
198
- width: 54px;
199
- float: left;
200
- margin: 0 15px 0 0;
201
- }
202
-
203
- .specify_counts .social_icon_like ul {
204
- margin: 0;
205
- padding: 0;
206
- list-style: none;
207
- text-align: center;
208
- }
209
-
210
- .specify_counts .social_icon_like li {
211
- margin: 0;
212
- padding: 0;
213
- list-style: none;
214
- display: inline-block;
215
- }
216
-
217
- .specify_counts .social_icon_like li span {
218
- margin: 0;
219
- width: 54px;
220
- display: block;
221
- background: url(../images/count_bg.jpg) no-repeat;
222
- height: 24px;
223
- overflow: hidden;
224
- padding: 10px 2px 2px;
225
- font-family: helveticaregular;
226
- font-size: 16px;
227
- text-align: center;
228
- line-height: 24px;
229
- color: #5a6570;
230
- }
231
-
232
- .specify_counts .social_icon_like li a {
233
- color: #5a6570;
234
- text-decoration: none;
235
- }
236
-
237
- .specify_counts .listing {
238
- width: 88%;
239
- margin-top: -5px;
240
- display: inherit;
241
- float: left;
242
- }
243
-
244
- .specify_counts .listing ul {
245
- margin: 0;
246
- padding: 0;
247
- list-style: none;
248
- text-align: left;
249
- }
250
-
251
- .specify_counts .listing li {
252
- margin: 15px 0 0;
253
- padding: 0;
254
- list-style: none;
255
- clear: both;
256
- line-height: 39px;
257
- font-size: 17px;
258
- }
259
-
260
- .specify_counts .listing li span {
261
- float: left;
262
- margin-right: 20px;
263
- }
264
-
265
- .specify_counts .listing li .input {
266
- background: #e5e5e5;
267
- box-shadow: 2px 2px 3px #dcdcdc inset;
268
- border: 0;
269
- padding: 10px;
270
- margin-left: 25px;
271
- }
272
-
273
- .specify_counts .listing li .input_facebook {
274
- width: 288px;
275
- background: #e5e5e5;
276
- box-shadow: 2px 2px 3px #dcdcdc inset;
277
- border: 0;
278
- padding: 10px;
279
- margin-left: 16px;
280
- }
281
-
282
- .save_button {
283
- width: 450px;
284
- padding-top: 30px;
285
- clear: both;
286
- margin: auto;
287
- }
288
-
289
- .save_button a {
290
- background: #12a252;
291
- text-align: center;
292
- font-size: 23px;
293
- color: #FFF !important;
294
- display: block;
295
- padding: 11px 0;
296
- text-decoration: none;
297
- }
298
-
299
- .save_button a:hover {
300
- background: #079345
301
- }
302
-
303
- .tab5 ul.share_icon_order {
304
- margin: 0;
305
- padding: 0;
306
- list-style: none;
307
- text-align: left;
308
- }
309
-
310
- .tab5 ul.share_icon_order li {
311
- margin: 22px 6px 0 0;
312
- padding: 0;
313
- list-style: none;
314
- float: left;
315
- line-height: 37px;
316
- }
317
-
318
- .tab5 ul.share_icon_order li:last-child {
319
- margin: 22px 0 0 3px;
320
- }
321
-
322
- .tab5 .row {
323
- border-top: 1px solid #eaebee;
324
- margin-top: 25px;
325
- padding-top: 15px;
326
- clear: both;
327
- display: block;
328
- width: 100%;
329
- float: left;
330
- font-family: helveticaregular;
331
- line-height: 42px;
332
- }
333
-
334
- .tab5 .icons_size {
335
- position: relative;
336
- }
337
-
338
- .tab5 .icons_size span {
339
- margin-right: 18px;
340
- display: block;
341
- float: left;
342
- font-size: 18px;
343
- font-weight: 400;
344
- line-height: 46px;
345
- }
346
-
347
- .tab5 .icons_size span.last {
348
- margin-left: 55px;
349
- }
350
-
351
- .tab5 .icons_size input {
352
- width: 73px;
353
- background: #e5e5e5;
354
- box-shadow: 2px 2px 3px #dcdcdc inset;
355
- border: 0;
356
- padding: 13px 13px 12px;
357
- margin-right: 18px;
358
- float: left;
359
- display: block;
360
- }
361
-
362
- .tab5 .icons_size select.styled {
363
- position: absolute;
364
- left: 0;
365
- width: 135px;
366
- height: 46px;
367
- line-height: 46px;
368
- }
369
-
370
- .tab5 .icons_size .field {
371
- position: relative;
372
- float: left;
373
- display: block;
374
- margin-right: 20px;
375
- }
376
-
377
- .tab5 .icons_size ins {
378
- margin-right: 25px;
379
- float: left;
380
- font-size: 17px;
381
- font-weight: 400;
382
- text-decoration: none;
383
- }
384
-
385
- .tab5 .icons_size ins.leave_empty {
386
- line-height: 23px;
387
- }
388
-
389
- .tab5 .icons_size {
390
- padding-top: 15px;
391
- }
392
-
393
- .tab5 ul.enough_waffling {
394
- margin: -5px 0 0;
395
- padding: 0;
396
- list-style: none;
397
- text-align: center;
398
- }
399
-
400
- .tab5 .new_wind .row_onl ul.enough_waffling {
401
- /*margin: 14px 0 0 167px;*/
402
- margin: 20px 0 0 0;
403
- padding: 0;
404
- list-style: none;
405
- height: 38px;
406
- text-align: center;
407
- width: 61%;
408
- }
409
-
410
- .tab5 ul.enough_waffling li {
411
- margin: 0 22px;
412
- padding: 0;
413
- list-style: none;
414
- display: inline-block;
415
- float: left;
416
- }
417
-
418
- .tab5 ul.enough_waffling li span {
419
- float: left;
420
- }
421
-
422
- .tab5 ul.enough_waffling li label {
423
- margin: 0 0 0 20px;
424
- float: left;
425
- font-family: helveticaregular;
426
- font-size: 18px;
427
- font-weight: 400;
428
- text-align: center;
429
- line-height: 38px;
430
- color: #5a6570;
431
- }
432
-
433
- .sticking p {
434
- float: left;
435
- font-size: 18px !important;
436
- }
437
-
438
- .sticking p.list {
439
- width: 168px;
440
- }
441
-
442
- .sticking p.link {
443
- margin: 3px 0 0 12px;
444
- padding: 0 !important;
445
- float: left;
446
- }
447
-
448
- .sticking .float {
449
- margin-left: 188px;
450
- margin-top: 3px;
451
- float: left;
452
- font-size: 17px;
453
- }
454
-
455
- .sticking ul {
456
- margin: 0;
457
- padding: 30px 0 0;
458
- list-style: none;
459
- float: left;
460
- }
461
-
462
- .sticking a {
463
- color: #a4a9ad;
464
- }
465
-
466
- .sticking p {
467
- line-height: 19px !important;
468
- }
469
-
470
- .sticking .field {
471
- position: relative;
472
- float: left;
473
- display: block;
474
- margin-left: 20px;
475
- }
476
-
477
- .sticking .field .select {
478
- width: 206px;
479
- height: 47px;
480
- background: url(../images/select_bg1.jpg) no-repeat;
481
- display: block;
482
- padding-left: 10px;
483
- }
484
-
485
- .sticking .field select.styled {
486
- position: absolute;
487
- left: 0;
488
- top: 0;
489
- width: 211px;
490
- line-height: 46px;
491
- height: 46px;
492
- }
493
-
494
- .mouseover_field {
495
- width: 455px;
496
- float: left;
497
- font-size: 18px;
498
- margin-top: 10px;
499
- }
500
-
501
- .mouseover_field label {
502
- width: 125px;
503
- float: left;
504
- }
505
-
506
- .mouseover_field input {
507
- width: 256px;
508
- float: left;
509
- background: #e5e5e5;
510
- box-shadow: 2px 2px 3px #dcdcdc inset;
511
- border: 0;
512
- padding: 10px;
513
- }
514
-
515
- .pop_up_box {
516
- width: 474px;
517
- background: #FFF;
518
- box-shadow: 0 0 5px 3px #d8d8d8;
519
- margin: 200px auto;
520
- padding: 20px 25px 0px;
521
- font-family: helveticaregular;
522
- color: #5a6570;
523
- min-height: 250px;
524
- position: relative;
525
- }
526
-
527
- .pop_up_box h4,
528
- .pop_up_box_ex h4 {
529
- font-size: 20px;
530
- color: #5a6570;
531
- text-align: center;
532
- margin: 0;
533
- padding: 0;
534
- line-height: 22px;
535
- }
536
-
537
- .pop_up_box p,
538
- .pop_up_box_ex p {
539
- font-size: 17px;
540
- line-height: 28px;
541
- color: #5a6570;
542
- text-align: left;
543
- margin: 0;
544
- padding: 25px 0 0;
545
- font-family: helveticaregular;
546
- }
547
-
548
- .sfsi_popupcntnr {
549
- float: left;
550
- width: 100%
551
- }
552
-
553
- .sfsi_popupcntnr>h3 {
554
- color: #000;
555
- float: left;
556
- font-weight: 700;
557
- margin-bottom: 5px;
558
- width: 100%
559
- }
560
-
561
- ul.flwstep {
562
- float: left;
563
- width: 100%
564
- }
565
-
566
- ul.flwstep>li {
567
- color: #000;
568
- font-size: 16px;
569
- margin: 5px;
570
- }
571
-
572
- .upldbtn {
573
- float: left;
574
- text-align: center;
575
- width: 100%
576
- }
577
-
578
- .upload_butt {
579
- background-color: #12a252;
580
- border: none;
581
- color: #fff;
582
- font-weight: 700;
583
- margin-top: 10px;
584
- padding: 7px 22px;
585
- width: auto;
586
- cursor: pointer;
587
- font-size: 19px;
588
- }
589
-
590
- .pop_up_box .button {
591
- background: #12a252;
592
- font-size: 22px;
593
- line-height: 24px;
594
- color: #5a6570;
595
- text-align: center;
596
- min-height: 80px;
597
- margin-top: 32px;
598
- box-shadow: none;
599
- }
600
-
601
- .pop_up_box .button:hover {
602
- box-shadow: none !important;
603
- }
604
-
605
- .pop_up_box .button a.activate {
606
- padding: 0px 0;
607
- }
608
-
609
- .pop_up_box a,
610
- .pop_up_box_ex a {
611
- color: #a4a9ad;
612
- font-size: 20px;
613
- text-decoration: none;
614
- text-align: center;
615
- display: inline-block;
616
- margin-top: 18px;
617
- width: 100%;
618
- }
619
-
620
- .pop_up_box .upload {
621
- width: 100%;
622
- float: left;
623
- text-align: left;
624
- margin-top: 15px;
625
- height: 46px;
626
- }
627
-
628
- .pop_up_box .upload label {
629
- width: 135px;
630
- float: left;
631
- line-height: 45px;
632
- font-size: 18px;
633
- font-family: helveticaregular;
634
- text-align: left;
635
- }
636
-
637
- .pop_up_box .upload input[type=text] {
638
- width: 248px;
639
- float: left;
640
- background: #e5e5e5;
641
- box-shadow: 2px 2px 3px #dcdcdc inset;
642
- border: 0;
643
- padding: 0 10px;
644
- font-size: 16px;
645
- height: 44px;
646
- text-align: left;
647
- color: #5a6570;
648
- font-family: helveticaregular;
649
- }
650
-
651
- .pop_up_box .upload input.upload_butt {
652
- width: 100px;
653
- background: #12a252;
654
- box-shadow: 0 0 0;
655
- border: 0;
656
- text-align: center;
657
- font-size: 18px;
658
- color: #fff;
659
- font-family: helveticaregular;
660
- height: 45px;
661
- right: 32px;
662
- top: 71px;
663
- position: absolute;
664
- }
665
-
666
- .pop_up_box .upload a {
667
- color: #12a252;
668
- font-size: 18px;
669
- text-decoration: underline;
670
- font-family: helveticaregular;
671
- margin: 0 0 16px 140px;
672
- }
673
-
674
- .pop_up_box a:hover,
675
- .pop_up_box_ex a:hover {
676
- color: #a4a9ad;
677
- }
678
-
679
- .inr_cont .fb_url {
680
- clear: both;
681
- }
682
-
683
- .inr_cont .fb_url .checkbox,
684
- .inr_cont .fb_url input.add,
685
- .inr_cont .fb_url label,
686
- .inr_cont .fb_url lable {
687
- float: left;
688
- }
689
-
690
- .inr_cont .fb_url input.add {
691
- margin-left: 19px;
692
- }
693
-
694
- .inr_cont .fb_url .checkbox {
695
- margin: 6px 0 0;
696
- }
697
-
698
- .inr_cont .fb_url label {
699
- /*line-height: 41px; margin: 0 0 0 15px;*/
700
- line-height: 22px;
701
- margin: 10px 0 0 15px;
702
- font-size: 17px;
703
- }
704
-
705
- .inr_cont textarea.add_txt {
706
- resize: none;
707
- margin: 0 0 0 19px !important;
708
- height: 60px;
709
- }
710
-
711
- .tab2 .inr_cont textarea.add_txt {
712
- width: 382px !important;
713
- height: 90px;
714
- overflow: hidden;
715
- }
716
-
717
- .tab2 .inr_cont input.add {
718
- width: 417px;
719
- }
720
-
721
- .red_txt,
722
- .tab2 .red_txt {
723
- color: #ef4745 !important;
724
- text-align: center !important;
725
- padding-top: 5px !important;
726
- }
727
-
728
- .green_txt {
729
- color: #12A252 !important;
730
- text-align: center !important;
731
- padding-top: 5px !important;
732
- }
733
-
734
- .red_txt {
735
- color: #f80000 !important;
736
- text-align: center !important;
737
- padding-top: 5px !important;
738
- }
739
-
740
- .linked_tab_2 .fb_url label {
741
- /* width: 32%;*/
742
- /* width: 26.99%;*/
743
- width: 22%;
744
- }
745
-
746
- .twt_tab_2 label {
747
- width: 18%
748
- }
749
-
750
- .bdr_top {
751
- border-top: none !important;
752
- }
753
-
754
- .linked_tab_2 .fb_url input.link_dbl {
755
- margin-bottom: 6px;
756
- }
757
-
758
- .tab3 {
759
- overflow: hidden;
760
- }
761
-
762
- .tab3 .row {
763
- /*border-top: 1px solid #EAEBEE;*/
764
- padding: 25px 0;
765
- clear: both;
766
- overflow: hidden;
767
- }
768
-
769
- .tab3 ul.tab_3_list {
770
- overflow: hidden;
771
- margin: 4px 0 11px;
772
- }
773
-
774
- ul.tab_3_list li {
775
- background: url(../images/tab_3_list_bg.jpg) 13px 7px no-repeat;
776
- padding: 0 0 0 30px;
777
- color: #778088;
778
- font-family: helveticaregular;
779
- font-size: 17px;
780
- margin-bottom: 4px;
781
- }
782
-
783
- .tab5 ul.tab_3_list li {
784
- background: url(../images/tab_3_list_bg.jpg) 13px 18px no-repeat;
785
- }
786
-
787
- .tab3 .row h3 {
788
- /* margin: 0 0 20px;*/
789
- margin: 20px 0 0px;
790
- color: #414951;
791
- font-family: helveticabold;
792
- font-size: 20px;
793
- }
794
-
795
- ul.tab_3_icns {
796
- list-style: none;
797
- margin: 10px 0 0;
798
- overflow: hidden;
799
- }
800
-
801
- ul.tab_3_icns li {
802
- width: 100%;
803
- margin: 0 0 21px;
804
- float: left;
805
- }
806
-
807
- ul.tab_3_icns label {
808
- float: left;
809
- line-height: 42px;
810
- /*margin: 0 20px;*/
811
- color: #69737C;
812
- font-size: 18px;
813
- font-family: helveticaregular;
814
- min-width: 125px;
815
- }
816
-
817
- ul.tab_3_icns li .icns_tab_3,
818
- ul.tab_3_icns li .radio {
819
- float: left;
820
- }
821
-
822
- .tab3 .sub_row h4 {
823
- color: #a4a9ad !important;
824
- }
825
-
826
- .tab3 .sub_row p {
827
- padding-top: 18px !important;
828
- clear: both;
829
- overflow: hidden;
830
- }
831
-
832
- .sub_row .sub_sub_box p {
833
- padding-top: 18px !important;
834
- }
835
-
836
- .tab3 .sub_row .checkbox {
837
- float: left;
838
- margin-top: 4px;
839
- }
840
-
841
- .tab3 .sub_row .sub_sub_box {
842
- width: 80%;
843
- margin: 7px 0 15px 10%;
844
- float: left;
845
- }
846
-
847
- .tab3 .sub_row input.smal_inpt {
848
- width: 73px;
849
- background: #e5e5e5;
850
- box-shadow: 2px 2px 3px #dcdcdc inset;
851
- border: 0;
852
- padding: 10px;
853
- float: left;
854
- margin-left: 10px;
855
- }
856
-
857
- .tab3 .sub_row .drop_lst {
858
- border: 1px solid #d6d6d6;
859
- font-size: 16px;
860
- color: #5a6570;
861
- width: 120px;
862
- }
863
-
864
- .tab3 .first_row,
865
- .tab3 .first_row p,
866
- .tab3 .first_row p .radio,
867
- .tab3 .first_row p label {
868
- float: left;
869
- }
870
-
871
- .tab3 .first_row {
872
- width: 90%;
873
- float: left;
874
- }
875
-
876
- .tab3 .first_row p {
877
- padding: 0 !important;
878
- }
879
-
880
- .tab3 .first_row p label {
881
- line-height: 44px;
882
- margin: 0 10px;
883
- }
884
-
885
- .tab3 .first_row p:last-child {
886
- margin-left: 27%
887
- }
888
-
889
- .tab3 .tab_1_sav {
890
- padding-top: 20px !important;
891
- margin: 10px auto 20px;
892
- }
893
-
894
- .suc_msg {
895
- background: #12A252;
896
- color: #FFF;
897
- display: none;
898
- font-size: 23px;
899
- padding: 10px;
900
- text-align: left;
901
- text-decoration: none;
902
- }
903
-
904
- .error_msg {
905
- background: #D22B30;
906
- color: #FFF;
907
- display: none;
908
- font-size: 23px;
909
- padding: 10px;
910
- text-align: left;
911
- text-decoration: none;
912
- }
913
-
914
- .fileUPInput {
915
- cursor: pointer;
916
- position: relative;
917
- top: -43px;
918
- right: 0;
919
- z-index: 99;
920
- height: 42px;
921
- font-size: 5px;
922
- opacity: 0;
923
- -moz-opacity: 0;
924
- filter: alpha(opacity=0);
925
- width: 100%
926
- }
927
-
928
- .inputWrapper {
929
- height: 20px;
930
- width: 50px;
931
- overflow: hidden;
932
- position: relative;
933
- cursor: pointer;
934
- }
935
-
936
- .custom-txt {
937
- background: none !important;
938
- padding-left: 2px !important;
939
- }
940
-
941
- .custom-img {
942
- float: left;
943
- margin-left: 20px;
944
- }
945
-
946
- .loader-img {
947
- float: left;
948
- margin-left: -70px;
949
- display: none;
950
- }
951
-
952
- .pop-overlay {
953
- position: fixed;
954
- top: 0;
955
- left: 0;
956
- width: 100%;
957
- height: 100%;
958
- backgound-color: #d3d3d3;
959
- z-index: 10;
960
- padding: 20px;
961
- display: none;
962
- }
963
-
964
- .fb-overlay {
965
- position: fixed;
966
- top: 0;
967
- left: 0;
968
- width: 100%;
969
- height: 100%;
970
- backgound-color: #d3d3d3;
971
- z-index: -1000;
972
- padding: 20px;
973
- opacity: 0;
974
- display: block;
975
- }
976
-
977
- .inputError {
978
- border: 1px solid #f80000 !important;
979
- }
980
-
981
- .sfsicloseBtn {
982
- position: absolute;
983
- top: 0;
984
- right: 0;
985
- cursor: pointer;
986
- }
987
-
988
- .top_arow {
989
- background: url(../images/top_aro.png) no-repeat;
990
- position: absolute;
991
- top: -29px;
992
- left: 38%;
993
- width: 33px;
994
- height: 29px;
995
- backgoround-color: #fff;
996
- }
997
-
998
- .sfsi_tool_tip_2 .top_arow .sfsi_inside,
999
- .top_arow .sfsi_inside {
1000
- float: left;
1001
- }
1002
-
1003
- .sfsi_tool_tip_2 .tool_tip>img,
1004
- .tool_tip>img {
1005
- display: inline-block;
1006
- margin-right: 4px;
1007
- float: left;
1008
- }
1009
-
1010
- .norm_row {
1011
- float: left;
1012
- min-width: 25px;
1013
- }
1014
-
1015
- .norm_row a {
1016
- border: none;
1017
- display: inline-block;
1018
- position: relative;
1019
- float: left;
1020
- }
1021
-
1022
- .sfsi_tool_tip_2 a {
1023
- min-height: 0 !important;
1024
- }
1025
-
1026
- .sfsi_widget {
1027
- min-height: 55px;
1028
- }
1029
-
1030
- .sfsi_widget a img {
1031
- box-shadow: none !important;
1032
- outline: 0;
1033
- }
1034
-
1035
- .sfsi_wicons {
1036
- display: inline-block;
1037
- color: #000;
1038
- }
1039
-
1040
- .sel-active {
1041
- background-color: #f7941d;
1042
- }
1043
-
1044
- .sfsi_outr_div .close {
1045
- position: absolute;
1046
- right: 18px;
1047
- top: 18px;
1048
- }
1049
-
1050
- .sfsi_outr_div h2 {
1051
- color: #778088;
1052
- font-family: helveticaregular;
1053
- font-size: 26px;
1054
- margin: 0 0 9px;
1055
- padding: 0;
1056
- text-align: center;
1057
- font-weight: 400;
1058
- }
1059
-
1060
- .sfsi_outr_div ul li a {
1061
- color: #5A6570;
1062
- text-decoration: none;
1063
- }
1064
-
1065
- .sfsi_outr_div ul li {
1066
- display: inline-block;
1067
- list-style: none;
1068
- margin: 0;
1069
- padding: 0;
1070
- float: none;
1071
- }
1072
-
1073
- .expanded-area {
1074
- display: none;
1075
- }
1076
-
1077
- .sfsi_wicons a {
1078
- -webkit-transition: all .2s ease-in-out;
1079
- -moz-transition: all .2s ease-in-out;
1080
- -o-transition: all .2s ease-in-out;
1081
- -ms-transition: all .2s ease-in-out;
1082
- }
1083
-
1084
- .scale,
1085
- .scale-div {
1086
- -webkit-transform: scale(1.1);
1087
- -moz-transform: scale(1.1);
1088
- -o-transform: scale(1.1);
1089
- transform: scale(1.1);
1090
- }
1091
-
1092
- .sfsi_Sicons {
1093
- float: left;
1094
- }
1095
-
1096
- .sfsi_Sicons .sf_subscrbe {
1097
- margin: 2px 3px 3px 0;
1098
- line-height: 20px;
1099
- }
1100
-
1101
- .sfsi_Sicons .sf_fb {
1102
- margin: 0 4px 0 5px;
1103
- line-height: 20px;
1104
- }
1105
-
1106
- .sfsi_Sicons .sf_twiter {
1107
- margin: 2px 7px 0 4px;
1108
- line-height: 17px;
1109
- }
1110
-
1111
- .sfsi_Sicons.left .sf_subscrbe {
1112
- margin: 2px 8px 3px 0;
1113
- }
1114
-
1115
- .sfsi_Sicons.left .sf_fb {
1116
- margin: 0 8px 0 0;
1117
- }
1118
-
1119
- .sfsi_Sicons.left .sf_twiter {
1120
- margin: 2px 7px 0 0;
1121
- }
1122
-
1123
- .sfsi_Sicons.right .sf_subscrbe {
1124
- margin: 2px 0 3px;
1125
- }
1126
-
1127
- .sfsi_Sicons.right .sf_fb {
1128
- margin: 0 0 0 7px;
1129
- }
1130
-
1131
- .sfsi_Sicons.right .sf_twiter {
1132
- margin: 2px 0 0 8px;
1133
- }
1134
-
1135
- .sfsi_Sicons .sf_subscrbe,
1136
- .sfsi_Sicons .sf_twiter {
1137
- position: relative;
1138
- width: 75px;
1139
- }
1140
-
1141
- .sfsi_Sicons .sf_twiter iframe {
1142
- margin: 0px;
1143
- height: 20px !important;
1144
- overflow: visible !important;
1145
- }
1146
-
1147
- .sfsi_Sicons .sf_twiter iframe #widget {
1148
- overflow: visible !important;
1149
- }
1150
-
1151
- .sfsi_Sicons .sf_subscrbe a {
1152
- width: auto;
1153
- float: left;
1154
- border: medium none;
1155
- padding-top: 0px;
1156
- }
1157
-
1158
- .sfsi_Sicons .sf_subscrbe a:focus {
1159
- outline: medium none;
1160
- }
1161
-
1162
- .sfsi_Sicons .sf_subscrbe a img {
1163
- width: 65px;
1164
- float: left;
1165
- height: 20px !important;
1166
- }
1167
-
1168
- .sfsi_Sicons .sf_fb {
1169
- position: relative;
1170
- width: 75px;
1171
- }
1172
-
1173
- .sfsi_Sicons .fb_iframe_widget {
1174
- float: left;
1175
- /*min-width: 98px;*/
1176
- width: 73px;
1177
- margin: 2px 0 0;
1178
- }
1179
-
1180
- .sfsi_pop_up .button a:hover {
1181
- color: #fff;
1182
- }
1183
-
1184
- .sfsi_pop_up .button:hover {
1185
- background: #12a252;
1186
- color: #fff;
1187
- border: none;
1188
- }
1189
-
1190
- ul.icn_listing li .right_info a {
1191
- outline: 0;
1192
- font-family: helveticaregular;
1193
- }
1194
-
1195
- .upload_pop_up .upload_butt {
1196
- line-height: 27px;
1197
- margin-left: 6px;
1198
- }
1199
-
1200
- .drop_lsts {
1201
- left: 220px;
1202
- position: relative;
1203
- top: -40px;
1204
- }
1205
-
1206
- .drop_lsts .styled {
1207
- top: -42px;
1208
- width: 127px;
1209
- height: 33px;
1210
- }
1211
-
1212
- .drop_lsts span {
1213
- line-height: 50px;
1214
- }
1215
-
1216
- .drag_drp {
1217
- left: 11px;
1218
- position: relative;
1219
- top: 38px;
1220
- font-size: 17px;
1221
- }
1222
-
1223
- .listing ul li label {
1224
- width: 224px;
1225
- float: left;
1226
- }
1227
-
1228
- .row_onl {
1229
- width: 100%;
1230
- float: left;
1231
- }
1232
-
1233
- #sfsi_Show_popupOn_PageIDs option.sel-active {
1234
- background: #f7941d;
1235
- }
1236
-
1237
- .sfsi_inside div iframe {
1238
- float: left;
1239
- margin: 0;
1240
- }
1241
-
1242
- .sfsi_inside div #___plus_0,
1243
- .sfsi_inside div #___plusone_0 {
1244
- height: 27px;
1245
- }
1246
-
1247
- .sfsi_outr_div li {
1248
- float: left;
1249
- }
1250
-
1251
- .sfsi_tool_tip_2 .sfsi_inside div {
1252
- min-height: 0;
1253
- }
1254
-
1255
- #___plus_1>iframe {
1256
- height: 30px;
1257
- }
1258
-
1259
- .main_contant h1 {
1260
- margin: 0 0 19px;
1261
- }
1262
-
1263
- .main_contant p {
1264
- margin: 0 0 26px;
1265
- }
1266
-
1267
- .main_contant p>a {
1268
- color: #1a1d20;
1269
- text-decoration: underline;
1270
- }
1271
-
1272
- .tab1 .gary_bg {
1273
- background: #f1f1f1;
1274
- }
1275
-
1276
- #accordion {
1277
- margin-top: 25px;
1278
- }
1279
-
1280
- .main_contant p>a,
1281
- .tab1 p span {
1282
- font-family: helveticabold;
1283
- }
1284
-
1285
- .wapper .ui-accordion-header-active {
1286
- margin-top: 20px !important;
1287
- }
1288
-
1289
- .wapper .tab2 {
1290
- padding: 20px 33px 12px 34px !important;
1291
- }
1292
-
1293
- .wapper .tab2 p {
1294
- margin-bottom: 6px;
1295
- }
1296
-
1297
- .tab2 .twt_tab_2 label {
1298
- width: 175px;
1299
- }
1300
-
1301
- .tab2 .twt_fld {
1302
- margin: 16px 0 23px;
1303
- float: left;
1304
- }
1305
-
1306
- .tab2 .twt_fld_2 {
1307
- margin: 0 0 12px;
1308
- float: left;
1309
- }
1310
-
1311
- .tab2 .utube_inn {
1312
- padding-bottom: 2px;
1313
- float: left;
1314
- }
1315
-
1316
- .tab2 .utube_inn label {
1317
- max-width: 90%
1318
- }
1319
-
1320
- .tab2 .utube_inn label span {
1321
- font-family: helveticabold;
1322
- }
1323
-
1324
- .tab2 .inr_cont p>a {
1325
- font-family: helveticaneue-light;
1326
- color: #778088;
1327
- text-decoration: underline;
1328
- }
1329
-
1330
- .pinterest_section .inr_cont .pint_url {
1331
- float: left;
1332
- padding-top: 6px;
1333
- clear: both;
1334
- }
1335
-
1336
- .pinterest_section .inr_cont .add {
1337
- width: 417px !important;
1338
- }
1339
-
1340
- .linkedin_section .link_1,
1341
- .linkedin_section .link_2,
1342
- .linkedin_section .link_3,
1343
- .linkedin_section .link_4 {
1344
- float: left;
1345
- width: 100%