Smart Floating / Sticky Buttons – Call, Sharing, Chat Widgets & More – Buttonizer - Version 1.0.6

Version Description

Added new feature: Change the color of each button From now on you can change the color of each floating action button you make. If you want to create a Floating Menu with different button colors, it is now possible!

Added new feature: New animation floating menu We now have a new animation to open the floating menu (multiple floating action). Instead of showing the buttons on the top of each other you can the floating buttons make a 45 degrees circle.

Download this release

Release Info

Developer buttonizer
Plugin Icon wp plugin Smart Floating / Sticky Buttons – Call, Sharing, Chat Widgets & More – Buttonizer
Version 1.0.6
Comparing to
See all releases

Code changes from version 1.0.5 to 1.0.6

buttonizer.php CHANGED
@@ -3,7 +3,7 @@
3
  Plugin Name: Buttonizer - Smart Floating Action Button
4
  Plugin URI: https://buttonizer.pro
5
  Description: The Buttonizer is a new way to give a boost to your number of interactions, actions and conversions from your website visitor by adding one or multiple Customizable Smart Floating Button in the corner of your website.
6
- Version: 1.0.5
7
  Author: Buttonizer
8
  Author URI: https://buttonizer.pro
9
  License: GPL2
@@ -31,7 +31,7 @@ Copyright 2017 Buttonizer
31
  define('BUTTONIZER_NAME', 'buttonizer');
32
  define('BUTTONIZER_DIR', dirname(__FILE__));
33
  define('BUTTONIZER_PLUGIN_DIR', __FILE__ );
34
- define('BUTTONIZER_VERSION','1.0.5');
35
 
36
  # No script kiddies
37
  defined( 'ABSPATH' ) or die('No script kiddies please!');
3
  Plugin Name: Buttonizer - Smart Floating Action Button
4
  Plugin URI: https://buttonizer.pro
5
  Description: The Buttonizer is a new way to give a boost to your number of interactions, actions and conversions from your website visitor by adding one or multiple Customizable Smart Floating Button in the corner of your website.
6
+ Version: 1.0.6
7
  Author: Buttonizer
8
  Author URI: https://buttonizer.pro
9
  License: GPL2
31
  define('BUTTONIZER_NAME', 'buttonizer');
32
  define('BUTTONIZER_DIR', dirname(__FILE__));
33
  define('BUTTONIZER_PLUGIN_DIR', __FILE__ );
34
+ define('BUTTONIZER_VERSION','1.0.6');
35
 
36
  # No script kiddies
37
  defined( 'ABSPATH' ) or die('No script kiddies please!');
classes/admin/Buttons.php CHANGED
@@ -26,9 +26,12 @@ class Buttons
26
  private $aSavedData = array() ;
27
  private $aPageCategories = array() ;
28
  private $aFontAwesome = array() ;
29
- public function __construct( $aFontAwesome )
 
 
30
  {
31
  $this->aFontAwesome = $aFontAwesome;
 
32
  $this->loadData();
33
  $this->loadButtons();
34
  }
@@ -37,6 +40,7 @@ class Buttons
37
  {
38
  $this->aSavedData = (array) get_option( 'buttonizer_buttons' );
39
  $this->aPageCategories = (array) get_option( 'buttonizer_page_categories' );
 
40
  }
41
 
42
  private function loadButtons()
@@ -123,12 +127,11 @@ class Buttons
123
  <div class="button-data">
124
  <table>
125
  <tr style="display: none;">
126
- <td width="20%"></td>
127
- <td width="20%"></td>
128
  <td></td>
129
  </tr>
130
  <tr>
131
- <td>
132
  <label for="button_text" class="label-top">
133
  <span class="info-class"><i class="fa fa-info-circle"></i> <span>This is for internal use only.<br /><br />When using Google Analytics, this will be the title of the event when clicking this button.</span></span>
134
  Button name:
@@ -141,10 +144,10 @@ _title]" value="<?php
141
  ?>
142
  " class="button_title" />
143
  </td>
144
- <td class="button-pdr" colspan="2">
145
  <label for="button_icon" class="label-top">
146
  <span class="info-class"><i class="fa fa-info-circle"></i> <span>This will be the icon of the button. You can choose from the build-in Font Awesome icons.<br /><br />When you want to use your own icon or image, you can click the 'or upload an image' link to use your own icon.</span></span>
147
- Button icon:
148
  </label>
149
  <?php
150
  echo $this->buttonGetIcon( $iButtonId ) ;
@@ -155,7 +158,6 @@ _title]" value="<?php
155
  <tr>
156
  <td>&nbsp;</td>
157
  <td></td>
158
- <td></td>
159
  </tr>
160
 
161
  <tr>
@@ -168,7 +170,7 @@ _title]" value="<?php
168
  echo $this->buttonGetText( $iButtonId ) ;
169
  ?>
170
  </td>
171
- <td colspan="2">
172
  <label for="button_category" class="label-top">
173
  <span class="info-class"><i class="fa fa-info-circle"></i> <span>Select a page category. You can add more page rules at the 'Page categories' tab.</span></span>
174
  Button page category:
@@ -182,7 +184,6 @@ _title]" value="<?php
182
  <tr>
183
  <td>&nbsp;</td>
184
  <td></td>
185
- <td></td>
186
  </tr>
187
 
188
  <tr class="settings-row">
@@ -190,7 +191,7 @@ _title]" value="<?php
190
  <i class="fa fa-globe setting-icon"></i> URL or phone-number
191
  <span class="info-class"><i class="fa fa-info-circle"></i> <span>This is the click-action of your button. You can input a full url (http://myawesomewebsite.com), a URI (/contact), an anchor-link (#anchor) or a phone number. Note that if you input a phone number that you select the option ‘Is phone number’. This will be a direct click-to-call action. Please don’t add a full url without the http:// (like: www.myawesomewebsite.com). </span></span>
192
  </td>
193
- <td colspan="2"><?php
194
  echo $this->buttonGetUrl( $iButtonId ) ;
195
  ?>
196
  </td>
@@ -207,7 +208,6 @@ _title]" value="<?php
207
  echo $iButtonId ;
208
  ?>
209
  _is_phonenumber"> Yes</label></td>
210
- <td></td>
211
  </tr>
212
 
213
  <tr class="settings-row setting-new-tab">
@@ -221,13 +221,22 @@ _is_phonenumber"> Yes</label></td>
221
  echo $iButtonId ;
222
  ?>
223
  _url_newtab"> Yes</label></td>
224
- <td></td>
 
 
 
 
 
 
 
 
 
 
225
  </tr>
226
 
227
  <tr>
228
  <td>&nbsp;</td>
229
  <td></td>
230
- <td></td>
231
  </tr>
232
 
233
  <tr class="settings-row">
@@ -241,7 +250,6 @@ _url_newtab"> Yes</label></td>
241
  echo $iButtonId ;
242
  ?>
243
  _show_on_phone"> Yes</label></td>
244
- <td></td>
245
  </tr>
246
 
247
  <tr class="settings-row">
@@ -255,7 +263,6 @@ _show_on_phone"> Yes</label></td>
255
  echo $iButtonId ;
256
  ?>
257
  _show_on_desktop"> Yes</label></td>
258
- <td></td>
259
  </tr>
260
 
261
  <tr class="settings-row">
@@ -276,13 +283,11 @@ _show_on_desktop"> Yes</label></td>
276
  echo $iButtonId ;
277
  ?>
278
  _hide_label"> Yes</label></td>
279
- <td></td>
280
  </tr>
281
 
282
  <tr>
283
  <td>&nbsp;</td>
284
  <td></td>
285
- <td></td>
286
  </tr>
287
 
288
  <?php
@@ -299,7 +304,6 @@ _hide_label"> Yes</label></td>
299
  <i class="fa fa-times-circle-o setting-icon"></i> Show <b>only outside</b> opening hours
300
  </td>
301
  <td><input type="checkbox" class="buttonizer-click-to-pro" readonly=""> <label> Yes</label> <span class="buttonizer-pro-feature">PRO</span></td>
302
- <td></td>
303
  </tr>
304
  <?php
305
  ?>
@@ -324,13 +328,13 @@ _hide_label"> Yes</label></td>
324
  // Get button icon
325
  public function buttonGetIcon( $iButtonId = 0 )
326
  {
327
- $fieldName = 'button_' . $iButtonId . '_icon';
328
- $fab_icon_image = ( isset( $this->aSavedData[$fieldName] ) ? $this->aSavedData[$fieldName] : '' );
329
- $p = '<select name="buttonizer_buttons[' . $fieldName . ']" id="' . $fieldName . '" style="font-family: \'FontAwesome\', \'Helvetica\';" class="button_iconfield fa-chooser">';
330
- foreach ( $this->aFontAwesome as $key => $row ) {
331
- $p .= '<option value="' . $key . '" ' . (( $fab_icon_image == $key ? 'selected="selected"' : '' )) . '>' . $row . ' ' . $key . '</option>';
332
- }
333
- return $p;
334
  }
335
 
336
  // Get button icon
@@ -420,5 +424,31 @@ _hide_label"> Yes</label></td>
420
  $is_selected = ( isset( $this->aSavedData[$fieldName] ) ? $this->aSavedData[$fieldName] : '' );
421
  return '<input type="checkbox" name="buttonizer_buttons[' . $fieldName . ']" id="' . $fieldName . '" value="1" class="button_isnewtab" ' . (( $is_selected == '1' ? 'checked="checked"' : '' )) . ' />';
422
  }
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
423
 
424
  }
26
  private $aSavedData = array() ;
27
  private $aPageCategories = array() ;
28
  private $aFontAwesome = array() ;
29
+ private $oIconManager = array() ;
30
+ private $aSystemSettings = array() ;
31
+ public function __construct( $aFontAwesome, $oIconManager )
32
  {
33
  $this->aFontAwesome = $aFontAwesome;
34
+ $this->oIconManager = $oIconManager;
35
  $this->loadData();
36
  $this->loadButtons();
37
  }
40
  {
41
  $this->aSavedData = (array) get_option( 'buttonizer_buttons' );
42
  $this->aPageCategories = (array) get_option( 'buttonizer_page_categories' );
43
+ $this->aSystemSettings = (array) get_option( 'buttonizer_general_settings' );
44
  }
45
 
46
  private function loadButtons()
127
  <div class="button-data">
128
  <table>
129
  <tr style="display: none;">
130
+ <td></td>
 
131
  <td></td>
132
  </tr>
133
  <tr>
134
+ <td width="50%">
135
  <label for="button_text" class="label-top">
136
  <span class="info-class"><i class="fa fa-info-circle"></i> <span>This is for internal use only.<br /><br />When using Google Analytics, this will be the title of the event when clicking this button.</span></span>
137
  Button name:
144
  ?>
145
  " class="button_title" />
146
  </td>
147
+ <td class="button-pdr">
148
  <label for="button_icon" class="label-top">
149
  <span class="info-class"><i class="fa fa-info-circle"></i> <span>This will be the icon of the button. You can choose from the build-in Font Awesome icons.<br /><br />When you want to use your own icon or image, you can click the 'or upload an image' link to use your own icon.</span></span>
150
+ Button icon/image:
151
  </label>
152
  <?php
153
  echo $this->buttonGetIcon( $iButtonId ) ;
158
  <tr>
159
  <td>&nbsp;</td>
160
  <td></td>
 
161
  </tr>
162
 
163
  <tr>
170
  echo $this->buttonGetText( $iButtonId ) ;
171
  ?>
172
  </td>
173
+ <td>
174
  <label for="button_category" class="label-top">
175
  <span class="info-class"><i class="fa fa-info-circle"></i> <span>Select a page category. You can add more page rules at the 'Page categories' tab.</span></span>
176
  Button page category:
184
  <tr>
185
  <td>&nbsp;</td>
186
  <td></td>
 
187
  </tr>
188
 
189
  <tr class="settings-row">
191
  <i class="fa fa-globe setting-icon"></i> URL or phone-number
192
  <span class="info-class"><i class="fa fa-info-circle"></i> <span>This is the click-action of your button. You can input a full url (http://myawesomewebsite.com), a URI (/contact), an anchor-link (#anchor) or a phone number. Note that if you input a phone number that you select the option ‘Is phone number’. This will be a direct click-to-call action. Please don’t add a full url without the http:// (like: www.myawesomewebsite.com). </span></span>
193
  </td>
194
+ <td><?php
195
  echo $this->buttonGetUrl( $iButtonId ) ;
196
  ?>
197
  </td>
208
  echo $iButtonId ;
209
  ?>
210
  _is_phonenumber"> Yes</label></td>
 
211
  </tr>
212
 
213
  <tr class="settings-row setting-new-tab">
221
  echo $iButtonId ;
222
  ?>
223
  _url_newtab"> Yes</label></td>
224
+ </tr>
225
+
226
+ <tr class="settings-row">
227
+ <td>
228
+ <i class="fa fa-paint-brush setting-icon"></i> Button colors
229
+ <span class="info-class"><i class="fa fa-info-circle"></i> <span>... </span></span>
230
+ </td>
231
+ <td><?php
232
+ echo $this->buttonColors( $iButtonId ) ;
233
+ ?>
234
+ </td>
235
  </tr>
236
 
237
  <tr>
238
  <td>&nbsp;</td>
239
  <td></td>
 
240
  </tr>
241
 
242
  <tr class="settings-row">
250
  echo $iButtonId ;
251
  ?>
252
  _show_on_phone"> Yes</label></td>
 
253
  </tr>
254
 
255
  <tr class="settings-row">
263
  echo $iButtonId ;
264
  ?>
265
  _show_on_desktop"> Yes</label></td>
 
266
  </tr>
267
 
268
  <tr class="settings-row">
283
  echo $iButtonId ;
284
  ?>
285
  _hide_label"> Yes</label></td>
 
286
  </tr>
287
 
288
  <tr>
289
  <td>&nbsp;</td>
290
  <td></td>
 
291
  </tr>
292
 
293
  <?php
304
  <i class="fa fa-times-circle-o setting-icon"></i> Show <b>only outside</b> opening hours
305
  </td>
306
  <td><input type="checkbox" class="buttonizer-click-to-pro" readonly=""> <label> Yes</label> <span class="buttonizer-pro-feature">PRO</span></td>
 
307
  </tr>
308
  <?php
309
  ?>
328
  // Get button icon
329
  public function buttonGetIcon( $iButtonId = 0 )
330
  {
331
+ return $this->oIconManager->generator( array(
332
+ 'icon' => ( isset( $this->aSavedData['button_' . $iButtonId . '_icon'] ) ? $this->aSavedData['button_' . $iButtonId . '_icon'] : '' ),
333
+ 'icon_fieldname' => 'buttonizer_buttons[button_' . $iButtonId . '_icon]',
334
+ 'image' => ( isset( $this->aSavedData['button_' . $iButtonId . '_image'] ) ? $this->aSavedData['button_' . $iButtonId . '_image'] : '' ),
335
+ 'image_fieldname' => 'buttonizer_buttons[button_' . $iButtonId . '_image]',
336
+ 'choose_type' => true,
337
+ ) );
338
  }
339
 
340
  // Get button icon
424
  $is_selected = ( isset( $this->aSavedData[$fieldName] ) ? $this->aSavedData[$fieldName] : '' );
425
  return '<input type="checkbox" name="buttonizer_buttons[' . $fieldName . ']" id="' . $fieldName . '" value="1" class="button_isnewtab" ' . (( $is_selected == '1' ? 'checked="checked"' : '' )) . ' />';
426
  }
427
+
428
+ public function buttonColors( $iButtonId = 0 )
429
+ {
430
+ // Default button colors
431
+ $sDefaultColor1 = $this->aSystemSettings['button_unpushed'];
432
+ $sDefaultColor2 = $this->aSystemSettings['button_pushed'];
433
+ $sDefaultColor3 = $this->aSystemSettings['icon_color'];
434
+ // Using custom colors?
435
+ $bCustomColors = ( isset( $this->aSavedData['button_' . $iButtonId . '_using_custom_colors'] ) && $this->aSavedData['button_' . $iButtonId . '_using_custom_colors'] == '1' ? true : false );
436
+ // Get button colors
437
+ $sColor1 = ( $bCustomColors && isset( $this->aSavedData['button_' . $iButtonId . '_colors_button'] ) && !empty($this->aSavedData['button_' . $iButtonId . '_colors_button']) ? $this->aSavedData['button_' . $iButtonId . '_colors_button'] : $sDefaultColor1 );
438
+ $sColor2 = ( $bCustomColors && isset( $this->aSavedData['button_' . $iButtonId . '_colors_pushed'] ) && !empty($this->aSavedData['button_' . $iButtonId . '_colors_pushed']) ? $this->aSavedData['button_' . $iButtonId . '_colors_pushed'] : $sDefaultColor2 );
439
+ $sColor3 = ( $bCustomColors && isset( $this->aSavedData['button_' . $iButtonId . '_colors_icon'] ) && !empty($this->aSavedData['button_' . $iButtonId . '_colors_icon']) ? $this->aSavedData['button_' . $iButtonId . '_colors_icon'] : $sDefaultColor3 );
440
+ $sColorPalet = '<div class="button-color-palet" data-btnid="' . $iButtonId . '">';
441
+ $sColorPalet .= '<div class="color default" style="background-color: ' . $sColor1 . ';" data-default="' . $sDefaultColor1 . '"></div>';
442
+ $sColorPalet .= '<div class="color pushed" style="background-color: ' . $sColor2 . ';" data-default="' . $sDefaultColor2 . '"></div>';
443
+ $sColorPalet .= '<div class="color icon" style="background-color: ' . $sColor3 . ';" data-default="' . $sDefaultColor3 . '"></div>';
444
+ $sColorPalet .= '<div class="text">' . (( $sColor1 != $sDefaultColor1 || $sColor2 != $sDefaultColor2 || $sColor3 != $sDefaultColor3 ? 'Custom colors' : 'Default colors' )) . '</div>';
445
+ $sColorPalet .= '<input type="hidden" name="buttonizer_buttons[button_' . $iButtonId . '_using_custom_colors]" class="custom" value="' . (( $bCustomColors ? '1' : '0' )) . '" />';
446
+ $sColorPalet .= '<input type="hidden" name="buttonizer_buttons[button_' . $iButtonId . '_colors_button]" class="default" value="' . $sColor1 . '" />';
447
+ $sColorPalet .= '<input type="hidden" name="buttonizer_buttons[button_' . $iButtonId . '_colors_pushed]" class="pushed" value="' . $sColor2 . '" />';
448
+ $sColorPalet .= '<input type="hidden" name="buttonizer_buttons[button_' . $iButtonId . '_colors_icon]" class="icon" value="' . $sColor3 . '" />';
449
+ $sColorPalet .= '</div>';
450
+ $sColorPalet .= '<a href="javascript:void(0)" id="reset_colors_' . $iButtonId . '" style="' . (( !$bCustomColors ? 'display: none' : '' )) . '" class="button color_default_btn">Back to default</a>';
451
+ return $sColorPalet;
452
+ }
453
 
454
  }
classes/admin/General.php CHANGED
@@ -74,6 +74,7 @@ class General
74
  $this->aSubPages['styling'] = '<table class="form-table"><tbody>';
75
  $this->aSubPages['styling'] .= $this->createFormField( 'Right', array( &$this, 'field_position_right' ) );
76
  $this->aSubPages['styling'] .= $this->createFormField( 'Bottom', array( &$this, 'field_position_bottom' ) );
 
77
  $this->aSubPages['styling'] .= $this->createFormField( 'Color button unpushed', array( &$this, 'field_button_unpushed' ) );
78
  $this->aSubPages['styling'] .= $this->createFormField( 'Color button pushed', array( &$this, 'field_button_pushed' ) );
79
  $this->aSubPages['styling'] .= $this->createFormField( 'Icon color', array( &$this, 'field_icon_color' ) );
@@ -225,6 +226,17 @@ class General
225
  return '<input type="text" name="buttonizer_general_settings[position_bottom]" value="' . $position_bottom . '"/><small><i>%</i><br>Recommended 5% then it will position itself on the bottom corner</small>';
226
  }
227
 
 
 
 
 
 
 
 
 
 
 
 
228
  /*
229
  * Advanced
230
  */
74
  $this->aSubPages['styling'] = '<table class="form-table"><tbody>';
75
  $this->aSubPages['styling'] .= $this->createFormField( 'Right', array( &$this, 'field_position_right' ) );
76
  $this->aSubPages['styling'] .= $this->createFormField( 'Bottom', array( &$this, 'field_position_bottom' ) );
77
+ $this->aSubPages['styling'] .= $this->createFormField( 'Button animation', array( &$this, 'field_button_animation' ) );
78
  $this->aSubPages['styling'] .= $this->createFormField( 'Color button unpushed', array( &$this, 'field_button_unpushed' ) );
79
  $this->aSubPages['styling'] .= $this->createFormField( 'Color button pushed', array( &$this, 'field_button_pushed' ) );
80
  $this->aSubPages['styling'] .= $this->createFormField( 'Icon color', array( &$this, 'field_icon_color' ) );
226
  return '<input type="text" name="buttonizer_general_settings[position_bottom]" value="' . $position_bottom . '"/><small><i>%</i><br>Recommended 5% then it will position itself on the bottom corner</small>';
227
  }
228
 
229
+ public function field_button_animation()
230
+ {
231
+ $button_animation = ( isset( $this->aSavedData['buttons_animation'] ) ? $this->aSavedData['buttons_animation'] : 'default' );
232
+ return '
233
+ <select name="buttonizer_general_settings[buttons_animation]" style="width: 100%; padding: 0 10px; height: 40px;">
234
+ <option value="default" ' . (( $button_animation == 'default' ? 'selected' : '' )) . '>Default button animation (fade up)</option>
235
+ <option value="circle" ' . (( $button_animation == 'circle' ? 'selected' : '' )) . '>Circle animation (arround button, right bottom corner)</option>
236
+ <option value="fade-left-to-right" ' . (( $button_animation == 'fade-left-to-right' ? 'selected' : '' )) . '>Fade animation left to right</option>
237
+ </select>';
238
+ }
239
+
240
  /*
241
  * Advanced
242
  */
classes/admin/InitializeAdmin.php CHANGED
@@ -212,7 +212,7 @@ class InitializeAdmin {
212
  public function getPageButtons() {
213
  require BUTTONIZER_DIR . '/classes/admin/Buttons.php';
214
 
215
- new Buttons($this->aFontAwesome);
216
  }
217
 
218
  /* Add general settings */
212
  public function getPageButtons() {
213
  require BUTTONIZER_DIR . '/classes/admin/Buttons.php';
214
 
215
+ new Buttons($this->aFontAwesome, $this->oIconManager);
216
  }
217
 
218
  /* Add general settings */
classes/admin/PageCategories.php CHANGED
@@ -49,7 +49,7 @@ class PageCategories
49
  }
50
  echo '<div id="page-categories">' ;
51
  // Not removable button row
52
- echo '<div class="button-row">
53
  <div class="row-info">
54
  <span><i class="fa fa-file-text-o"></i> All pages</span>
55
  <a href="javascript:void(0)" class="delete-button" style="opacity: 0.5">Delete <i class="fa fa-trash-o"></i></a>
49
  }
50
  echo '<div id="page-categories">' ;
51
  // Not removable button row
52
+ echo '<div class="button-row is_category">
53
  <div class="row-info">
54
  <span><i class="fa fa-file-text-o"></i> All pages</span>
55
  <a href="javascript:void(0)" class="delete-button" style="opacity: 0.5">Delete <i class="fa fa-trash-o"></i></a>
classes/default/main.php CHANGED
@@ -36,10 +36,13 @@ class Button
36
  private $sCurrentPageUrl = '' ;
37
  private $sCurrentPageTitle = '' ;
38
  private $sCurrentPageDescription = '' ;
 
39
  // Output string
40
  private $iAmountOfButtons = 0 ;
41
  private $iAmountOfShareButtons = 0 ;
42
  private $sOutput = '' ;
 
 
43
  public function __construct( $bIsMobile )
44
  {
45
  // Set some data
@@ -150,7 +153,6 @@ class Button
150
  */
151
  $buttonText = ( isset( $this->aButtons['button_' . $bNmbr . '_text'] ) ? $this->aButtons['button_' . $bNmbr . '_text'] : 'Button ' . $bNmbr );
152
  $buttonTitle = ( isset( $this->aButtons['button_' . $bNmbr . '_title'] ) ? $this->aButtons['button_' . $bNmbr . '_title'] : 'Button ' . $bNmbr );
153
- $buttonIcon = ( isset( $this->aButtons['button_' . $bNmbr . '_icon'] ) ? $this->aButtons['button_' . $bNmbr . '_icon'] : 'plus' );
154
  $buttonIsPhone = ( isset( $this->aButtons['button_' . $bNmbr . '_is_phonenumber'] ) ? $this->aButtons['button_' . $bNmbr . '_is_phonenumber'] : '' );
155
  $link = ( isset( $this->aButtons['button_' . $bNmbr . '_url'] ) ? $this->aButtons['button_' . $bNmbr . '_url'] : '' );
156
  $linkNewTab = ( isset( $this->aButtons['button_' . $bNmbr . '_url_newtab'] ) ? 'target="_blank"' : '' );
@@ -163,8 +165,31 @@ class Button
163
  }
164
  }
165
 
 
 
 
 
 
 
 
 
166
  $sButtonClasses = 'is_extra bt_' . $this->iAmountOfButtons;
167
- return '<a href="' . (( $buttonIsPhone ? 'tel:' . $link : $link )) . '" class="' . $sButtonClasses . '" ' . $linkNewTab . ' onclick="onButtonizerClickEvent(\'' . $buttonText . '\')">' . (( $buttonText != '' ? '<div class="text"' . (( $hideLabel == '1' ? 'style="display: none;"' : '' )) . '><div>' . $buttonText . '</div></div>' : '' )) . '<i class="fa ' . $buttonIcon . '"></i></a>';
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
168
  }
169
 
170
  // Show on timeout
@@ -313,9 +338,16 @@ class Button
313
  if ( isset( $this->aSettings['google_analytics'] ) && $this->aSettings['google_analytics'] != '' ) {
314
  $output .= '<script>(function(i,s,o,g,r,a,m){i[\'GoogleAnalyticsObject\']=r;i[r]=i[r]||function(){ (i[r].q=i[r].q||[]).push(arguments)},i[r].l=1*new Date();a=s.createElement(o), m=s.getElementsByTagName(o)[0];a.async=1;a.src=g;m.parentNode.insertBefore(a,m) })(window,document,\'script\',\'https://www.google-analytics.com/analytics.js\',\'ga\');ga(\'create\', \'' . $this->aSettings['google_analytics'] . '\', \'auto\');</script>';
315
  }
 
 
 
 
 
 
 
316
  list($sShadowColorRed, $sShadowColorGreen, $sShadowColorBlue) = sscanf( $this->aSettings['button_unpushed'], '#%02x%02x%02x' );
317
- echo '<style>.buttonizer-button a:hover, .buttonizer-button a:focus{ background:' . $this->aSettings['button_pushed'] . '; } .buttonizer-button a { background:' . $this->aSettings['button_unpushed'] . '; } .buttonizer-button a i { color: ' . $this->aSettings['icon_color'] . '; }</style>
318
- <div class="buttonizer-button ' . (( $showOnScroll > 0 || $showAfterTimeout > 0 ? 'hide' : '' )) . '" style=" right: ' . $this->aSettings['position_right'] . '%; bottom: ' . $this->aSettings['position_bottom'] . '%;" id="buttonizer-button"><div class="buttonizer_inner" id="buttonizer-sys">' . $output . '</div></div>
319
  <script type="text/javascript">
320
  buttonizer.init({
321
  scrollBarTop: ' . $showOnScroll . ',
36
  private $sCurrentPageUrl = '' ;
37
  private $sCurrentPageTitle = '' ;
38
  private $sCurrentPageDescription = '' ;
39
+ private $aAnimationSettings = array( 'default', 'circle', 'fade-left-to-right' ) ;
40
  // Output string
41
  private $iAmountOfButtons = 0 ;
42
  private $iAmountOfShareButtons = 0 ;
43
  private $sOutput = '' ;
44
+ // Custom button color
45
+ private $sButtonCss = '' ;
46
  public function __construct( $bIsMobile )
47
  {
48
  // Set some data
153
  */
154
  $buttonText = ( isset( $this->aButtons['button_' . $bNmbr . '_text'] ) ? $this->aButtons['button_' . $bNmbr . '_text'] : 'Button ' . $bNmbr );
155
  $buttonTitle = ( isset( $this->aButtons['button_' . $bNmbr . '_title'] ) ? $this->aButtons['button_' . $bNmbr . '_title'] : 'Button ' . $bNmbr );
 
156
  $buttonIsPhone = ( isset( $this->aButtons['button_' . $bNmbr . '_is_phonenumber'] ) ? $this->aButtons['button_' . $bNmbr . '_is_phonenumber'] : '' );
157
  $link = ( isset( $this->aButtons['button_' . $bNmbr . '_url'] ) ? $this->aButtons['button_' . $bNmbr . '_url'] : '' );
158
  $linkNewTab = ( isset( $this->aButtons['button_' . $bNmbr . '_url_newtab'] ) ? 'target="_blank"' : '' );
165
  }
166
  }
167
 
168
+ // Has image
169
+
170
+ if ( !isset( $this->aButtons['button_' . $bNmbr . '_image'] ) || empty($this->aButtons['button_' . $bNmbr . '_image']) ) {
171
+ $sButtonIcon = '<i class="fa ' . (( isset( $this->aButtons['button_' . $bNmbr . '_icon'] ) ? $this->aButtons['button_' . $bNmbr . '_icon'] : 'plus' )) . '"></i>';
172
+ } else {
173
+ $sButtonIcon = '<img src="' . $this->aButtons['button_' . $bNmbr . '_image'] . '" style="width: ' . (( count( $this->aButtons ) > 1 ? '25px' : '32px' )) . '; vertical-align: middle;" />';
174
+ }
175
+
176
  $sButtonClasses = 'is_extra bt_' . $this->iAmountOfButtons;
177
+ // Custom colors?
178
+ if ( isset( $this->aButtons['button_' . $bNmbr . '_using_custom_colors'] ) && $this->aButtons['button_' . $bNmbr . '_using_custom_colors'] == '1' ) {
179
+ $this->sButtonCss .= '
180
+ .buttonizer-button .buttonizer_' . $bNmbr . ' {
181
+ background-color: ' . $this->aButtons['button_' . $bNmbr . '_colors_button'] . ';
182
+ }
183
+
184
+ .buttonizer-button .buttonizer_' . $bNmbr . ':hover,.buttonizer_' . $bNmbr . ':active {
185
+ background-color: ' . $this->aButtons['button_' . $bNmbr . '_colors_pushed'] . ';
186
+ }
187
+
188
+ .buttonizer-button .buttonizer_' . $bNmbr . ' i {
189
+ color: ' . $this->aButtons['button_' . $bNmbr . '_colors_icon'] . ';
190
+ } ';
191
+ }
192
+ return '<a href="' . (( $buttonIsPhone ? 'tel:' . $link : $link )) . '" class="' . $sButtonClasses . ' buttonizer_' . $bNmbr . ' ' . $linkNewTab . ' onclick="onButtonizerClickEvent(\'' . $buttonText . '\')">' . (( $buttonText != '' ? '<div class="text"' . (( $hideLabel == '1' ? 'style="display: none;"' : '' )) . '><div>' . $buttonText . '</div></div>' : '' )) . $sButtonIcon . '</a>';
193
  }
194
 
195
  // Show on timeout
338
  if ( isset( $this->aSettings['google_analytics'] ) && $this->aSettings['google_analytics'] != '' ) {
339
  $output .= '<script>(function(i,s,o,g,r,a,m){i[\'GoogleAnalyticsObject\']=r;i[r]=i[r]||function(){ (i[r].q=i[r].q||[]).push(arguments)},i[r].l=1*new Date();a=s.createElement(o), m=s.getElementsByTagName(o)[0];a.async=1;a.src=g;m.parentNode.insertBefore(a,m) })(window,document,\'script\',\'https://www.google-analytics.com/analytics.js\',\'ga\');ga(\'create\', \'' . $this->aSettings['google_analytics'] . '\', \'auto\');</script>';
340
  }
341
+
342
+ if ( isset( $this->aSettings['buttons_animation'] ) && in_array( $this->aSettings['buttons_animation'], $this->aAnimationSettings ) ) {
343
+ $sButtonAnimation = $this->aSettings['buttons_animation'];
344
+ } else {
345
+ $sButtonAnimation = 'default';
346
+ }
347
+
348
  list($sShadowColorRed, $sShadowColorGreen, $sShadowColorBlue) = sscanf( $this->aSettings['button_unpushed'], '#%02x%02x%02x' );
349
+ echo '<style>.buttonizer-button a:hover, .buttonizer-button a:focus{ background:' . $this->aSettings['button_pushed'] . '; } .buttonizer-button a { background:' . $this->aSettings['button_unpushed'] . '; } .buttonizer-button a i { color: ' . $this->aSettings['icon_color'] . '; } ' . $this->sButtonCss . '</style>
350
+ <div class="buttonizer-button ' . (( $showOnScroll > 0 || $showAfterTimeout > 0 ? 'hide' : '' )) . '" button-animation="' . $sButtonAnimation . '" style=" right: ' . $this->aSettings['position_right'] . '%; bottom: ' . $this->aSettings['position_bottom'] . '%;" id="buttonizer-button"><div class="buttonizer_inner" id="buttonizer-sys">' . $output . '</div></div>
351
  <script type="text/javascript">
352
  buttonizer.init({
353
  scrollBarTop: ' . $showOnScroll . ',
css/buttonizer.css CHANGED
@@ -154,90 +154,216 @@
154
  opacity: 0;
155
  }
156
 
157
- .buttonizer-button .buttonizer_inner.opened .bt_0 {
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
158
  opacity: 1;
159
  top: -110px;
160
  }
161
 
162
- .buttonizer-button .buttonizer_inner.opened .bt_1 {
163
  opacity: 1;
164
  top: -160px;
165
  }
166
 
167
- .buttonizer-button .buttonizer_inner.opened .bt_2 {
168
  opacity: 1;
169
  top: -210px;
170
  }
171
 
172
- .buttonizer-button .buttonizer_inner.opened .bt_3 {
173
  opacity: 1;
174
  top: -260px;
175
  }
176
 
177
- .buttonizer-button .buttonizer_inner.opened .bt_4 {
178
  opacity: 1;
179
  top: -310px;
180
  }
181
 
182
- .buttonizer-button .buttonizer_inner.opened .share_1 {
183
  opacity: 1;
184
  left: -105px;
185
  top: -53px;
186
  }
187
 
188
- .buttonizer-button .buttonizer_inner.opened .share_2 {
189
  opacity: 1;
190
  left: -154px;
191
  top: -53px;
192
  }
193
 
194
- .buttonizer-button .buttonizer_inner.opened .share_3 {
195
  opacity: 1;
196
  left: -202px;
197
  top: -53px;
198
  }
199
 
200
- .buttonizer-button .buttonizer_inner.opened .share_1 .text,
201
- .buttonizer-button .buttonizer_inner.opened .share_2 .text,
202
- .buttonizer-button .buttonizer_inner.opened .share_3 .text {
203
- top: -35px;
204
- right: -53px;
205
  }
206
 
207
- .buttonizer-button a .text {
208
- position: absolute;
209
- top: 7px;
210
- right: 55px;
211
- text-align: right;
212
- color: #ffffff;
213
- height: 26px;
214
- line-height: 26px;
215
- font-size: 12px;
216
- padding: 0 10px;
217
- transition: all 0.1s ease-out;
218
- -moz-transition: all 0.1s ease-out;
219
- -webkit-transition: all 0.1s ease-out;
220
- -o-transition: all 0.1s ease-out;
221
- display: block;
222
- white-space: nowrap;
223
- background: #4e4c4c;
224
- border-radius: 3px;
225
- -moz-border-radius: 3px;
226
- -webkit-border-radius: 3px;
227
  }
228
 
229
- .buttonizer-button .share .text {
230
- opacity: 0;
231
- visibility: hidden;
232
  }
233
 
234
- .buttonizer-button a.share:hover .text {
235
- visibility: visible;
236
  opacity: 1;
 
 
237
  }
238
 
239
- .buttonizer-button a i {
240
- font-size:24px;
241
- width:24px;
242
- height:24px;
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
243
  }
154
  opacity: 0;
155
  }
156
 
157
+ .buttonizer-button .buttonizer_inner.opened .share_1 .text,
158
+ .buttonizer-button .buttonizer_inner.opened .share_2 .text,
159
+ .buttonizer-button .buttonizer_inner.opened .share_3 .text {
160
+ top: -35px;
161
+ right: -53px;
162
+ }
163
+
164
+ .buttonizer-button a .text {
165
+ position: absolute;
166
+ top: 7px;
167
+ right: 55px;
168
+ text-align: right;
169
+ color: #ffffff;
170
+ height: 26px;
171
+ line-height: 26px;
172
+ font-size: 12px;
173
+ padding: 0 10px;
174
+ transition: all 0.1s ease-out;
175
+ -moz-transition: all 0.1s ease-out;
176
+ -webkit-transition: all 0.1s ease-out;
177
+ -o-transition: all 0.1s ease-out;
178
+ display: block;
179
+ white-space: nowrap;
180
+ background: #4e4c4c;
181
+ border-radius: 3px;
182
+ -moz-border-radius: 3px;
183
+ -webkit-border-radius: 3px;
184
+ }
185
+
186
+ .buttonizer-button .share .text {
187
+ opacity: 0;
188
+ visibility: hidden;
189
+ }
190
+
191
+ .buttonizer-button a.share:hover .text {
192
+ visibility: visible;
193
+ opacity: 1;
194
+ }
195
+
196
+ .buttonizer-button a i {
197
+ font-size:24px;
198
+ width:24px;
199
+ height:24px;
200
+ }
201
+
202
+ /* Default animation */
203
+ .buttonizer-button[button-animation="default"] .buttonizer_inner.opened .bt_0 {
204
  opacity: 1;
205
  top: -110px;
206
  }
207
 
208
+ .buttonizer-button[button-animation="default"] .buttonizer_inner.opened .bt_1 {
209
  opacity: 1;
210
  top: -160px;
211
  }
212
 
213
+ .buttonizer-button[button-animation="default"] .buttonizer_inner.opened .bt_2 {
214
  opacity: 1;
215
  top: -210px;
216
  }
217
 
218
+ .buttonizer-button[button-animation="default"] .buttonizer_inner.opened .bt_3 {
219
  opacity: 1;
220
  top: -260px;
221
  }
222
 
223
+ .buttonizer-button[button-animation="default"] .buttonizer_inner.opened .bt_4 {
224
  opacity: 1;
225
  top: -310px;
226
  }
227
 
228
+ .buttonizer-button[button-animation="default"] .buttonizer_inner.opened .share_1 {
229
  opacity: 1;
230
  left: -105px;
231
  top: -53px;
232
  }
233
 
234
+ .buttonizer-button[button-animation="default"] .buttonizer_inner.opened .share_2 {
235
  opacity: 1;
236
  left: -154px;
237
  top: -53px;
238
  }
239
 
240
+ .buttonizer-button[button-animation="default"] .buttonizer_inner.opened .share_3 {
241
  opacity: 1;
242
  left: -202px;
243
  top: -53px;
244
  }
245
 
246
+ /* Circle animation */
247
+ .buttonizer-button[button-animation="circle"] a.is_extra {
248
+ top: -50px;
249
+ right: 0px;
 
250
  }
251
 
252
+ .buttonizer-button[button-animation="circle"] .buttonizer_inner a.is_extra .text {
253
+ opacity: 0;
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
254
  }
255
 
256
+ .buttonizer-button[button-animation="circle"] .buttonizer_inner a.is_extra:hover .text {
257
+ opacity: 1;
 
258
  }
259
 
260
+ .buttonizer-button[button-animation="circle"] .buttonizer_inner.opened .bt_0 {
 
261
  opacity: 1;
262
+ top: -49px;
263
+ right: 150px;
264
  }
265
 
266
+ .buttonizer-button[button-animation="circle"] .buttonizer_inner.opened .bt_1 {
267
+ opacity: 1;
268
+ top: -100px;
269
+ right: 137px;
270
+ -moz-transition-delay: 150ms;
271
+ -webkit-transition-delay: 150ms;
272
+ transition-delay: 150ms;
273
+ }
274
+
275
+ .buttonizer-button[button-animation="circle"] .buttonizer_inner.opened .bt_2 {
276
+ opacity: 1;
277
+ top: -150px;
278
+ right: 108px;
279
+ -moz-transition-delay: 300ms;
280
+ -webkit-transition-delay: 300ms;
281
+ transition-delay: 300ms;
282
+ }
283
+
284
+ .buttonizer-button[button-animation="circle"] .buttonizer_inner.opened .bt_3 {
285
+ opacity: 1;
286
+ top: -186px;
287
+ right: 63px;
288
+ -moz-transition-delay: 450ms;
289
+ -webkit-transition-delay: 450ms;
290
+ transition-delay: 450ms;
291
+ }
292
+
293
+ .buttonizer-button[button-animation="circle"] .buttonizer_inner.opened .bt_4 {
294
+ opacity: 1;
295
+ top: -208px;
296
+ right: 10px;
297
+ -moz-transition-delay: 600ms;
298
+ -webkit-transition-delay: 600ms;
299
+ transition-delay: 600ms;
300
+ }
301
+
302
+
303
+ /* Fade right to left animation */
304
+ .buttonizer-button[button-animation="fade-left-to-right"] .buttonizer_inner:not(.opened) .is_extra {
305
+ margin-right: -40px;
306
+ }
307
+
308
+ .buttonizer-button[button-animation="fade-left-to-right"] .buttonizer_inner.opened .is_extra {
309
+ opacity: 1;
310
+ }
311
+
312
+ .buttonizer-button[button-animation="fade-left-to-right"] .buttonizer_inner .bt_0 {
313
+ top: -110px;
314
+ }
315
+
316
+ .buttonizer-button[button-animation="fade-left-to-right"] .buttonizer_inner .bt_1 {
317
+ top: -160px;
318
+ -moz-transition-delay: 150ms;
319
+ -webkit-transition-delay: 150ms;
320
+ transition-delay: 150ms;
321
+ }
322
+
323
+ .buttonizer-button[button-animation="fade-left-to-right"] .buttonizer_inner .bt_2 {
324
+ top: -210px;
325
+ -moz-transition-delay: 300ms;
326
+ -webkit-transition-delay: 300ms;
327
+ transition-delay: 300ms;
328
+ }
329
+
330
+ .buttonizer-button[button-animation="fade-left-to-right"] .buttonizer_inner .bt_3 {
331
+ top: -260px;
332
+ -moz-transition-delay: 450ms;
333
+ -webkit-transition-delay: 450ms;
334
+ transition-delay: 450ms;
335
+ }
336
+
337
+ .buttonizer-button[button-animation="fade-left-to-right"] .buttonizer_inner .bt_4 {
338
+ top: -310px;
339
+ -moz-transition-delay: 600ms;
340
+ -webkit-transition-delay: 600ms;
341
+ transition-delay: 600ms;
342
+ }
343
+
344
+ .buttonizer-button[button-animation="fade-left-to-right"] .buttonizer_inner:not(.opened) .share_1,
345
+ .buttonizer-button[button-animation="fade-left-to-right"] .buttonizer_inner:not(.opened) .share_2,
346
+ .buttonizer-button[button-animation="fade-left-to-right"] .buttonizer_inner:not(.opened) .share_3 {
347
+ margin-bottom: -40px;
348
+ }
349
+
350
+ .buttonizer-button[button-animation="fade-left-to-right"] .buttonizer_inner .share_1 {
351
+ left: -105px;
352
+ top: -53px;
353
+ }
354
+
355
+ .buttonizer-button[button-animation="fade-left-to-right"] .buttonizer_inner .share_2 {
356
+ left: -154px;
357
+ top: -53px;
358
+ -moz-transition-delay: 150ms;
359
+ -webkit-transition-delay: 150ms;
360
+ transition-delay: 150ms;
361
+ }
362
+
363
+ .buttonizer-button[button-animation="fade-left-to-right"] .buttonizer_inner .share_3 {
364
+ left: -202px;
365
+ top: -53px;
366
+ -moz-transition-delay: 300ms;
367
+ -webkit-transition-delay: 300ms;
368
+ transition-delay: 300ms;
369
  }
css/style.css CHANGED
@@ -289,6 +289,76 @@ h2 .button {
289
  margin-right: 4px;
290
  }
291
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
292
  .button-preview {
293
  border-radius: 50%;
294
  width: 56px;
@@ -608,6 +678,11 @@ h2 .button {
608
  max-width: 700px;
609
  }
610
 
 
 
 
 
 
611
  /* jQuery slider */
612
  .ui-slider {
613
  position: relative;
289
  margin-right: 4px;
290
  }
291
 
292
+ .button-row .icon-or-image {
293
+ position: relative;
294
+ }
295
+
296
+ .button-row .icon-or-image .placeholder-choose {
297
+ position: absolute;
298
+ top: -35px;
299
+ right: 10px;
300
+ z-index: 99;
301
+ }
302
+
303
+ .button-row .button-preview {
304
+ position: absolute;
305
+ right: 20px;
306
+ top: -15px;
307
+ background-color: blue;
308
+ }
309
+
310
+ .button-row .button-color-palet {
311
+ border: 1px solid #ccc;
312
+ -webkit-box-shadow: 0 1px 0 #ccc;
313
+ box-shadow: 0 1px 0 #ccc;
314
+ -webkit-border-radius: 3px;
315
+ border-radius: 3px;
316
+ cursor: pointer;
317
+ height: 22px;
318
+ margin: 0 6px 6px 0;
319
+ position: relative;
320
+ -webkit-user-select: none;
321
+ -moz-user-select: none;
322
+ -ms-user-select: none;
323
+ user-select: none;
324
+ vertical-align: bottom;
325
+ display: inline-block;
326
+ top: 0;
327
+ overflow: hidden;
328
+ }
329
+
330
+ .button-row .button-color-palet:hover {
331
+ border-color: #afafaf;
332
+ }
333
+
334
+ .button-row .button-color-palet .color {
335
+ height: 24px;
336
+ width: 30px;
337
+ display: inline-block;
338
+ }
339
+
340
+ .button-row .button-color-palet .text {
341
+ background: #f7f7f7;
342
+ -webkit-border-radius: 0 2px 2px 0;
343
+ border-radius: 0 2px 2px 0;
344
+ border-left: 1px solid #ccc;
345
+ color: #555;
346
+ content: attr(title);
347
+ display: block;
348
+ font-size: 11px;
349
+ line-height: 22px;
350
+ padding: 0 6px;
351
+ position: relative;
352
+ text-align: center;
353
+ float: right;
354
+ }
355
+
356
+ .button-row .color_default_btn {
357
+ font-size: 11px;
358
+ line-height: 22px;
359
+ height: 24px;
360
+ }
361
+
362
  .button-preview {
363
  border-radius: 50%;
364
  width: 56px;
678
  max-width: 700px;
679
  }
680
 
681
+ /**/
682
+ .color-chooser-table tr td {
683
+ vertical-align: top;
684
+ }
685
+
686
  /* jQuery slider */
687
  .ui-slider {
688
  position: relative;
js/buttonizer.js CHANGED
@@ -72,13 +72,13 @@ function onButtonizerClickEvent(text) {
72
  }
73
 
74
  function onButtonizerButtonFacebook() {
75
- window.open('http://www.facebook.com/sharer.php?u='+ buttonizer.settings.currentPageUrl +'&t='+ buttonizer.settings.currentPageTitle +'', 'popupFacebook', 'width=610, height=480, resizable=0, toolbar=0, menubar=0, status=0, location=0, scrollbars=0'); return false;
76
  }
77
 
78
  function onButtonizerButtonTwitter() {
79
- window.open('https://twitter.com/intent/tweet?text='+ buttonizer.settings.currentPageTitle +'&url='+ buttonizer.settings.currentPageUrl +'', 'popupTwitter', 'width=610, height=480, resizable=0, toolbar=0, menubar=0, status=0, location=0, scrollbars=0'); return false;
80
  }
81
 
82
  function onButtonizerButtonLinkedin() {
83
- window.open('http://www.linkedin.com/shareArticle?mini=true&url='+ buttonizer.settings.currentPageUrl +'&title='+ buttonizer.settings.currentPageTitle +'&summary='+ buttonizer.settings.currentPageTitle +'', 'popupLinkedIn', 'width=610, height=480, resizable=0, toolbar=0, menubar=0, status=0, location=0, scrollbars=0'); return false;
84
  }
72
  }
73
 
74
  function onButtonizerButtonFacebook() {
75
+ window.open('http://www.facebook.com/sharer.php?u='+ document.location.href +'&t='+ document.title +'', 'popupFacebook', 'width=610, height=480, resizable=0, toolbar=0, menubar=0, status=0, location=0, scrollbars=0'); return false;
76
  }
77
 
78
  function onButtonizerButtonTwitter() {
79
+ window.open('https://twitter.com/intent/tweet?text='+ document.title +'&url='+ document.location.href +'', 'popupTwitter', 'width=610, height=480, resizable=0, toolbar=0, menubar=0, status=0, location=0, scrollbars=0'); return false;
80
  }
81
 
82
  function onButtonizerButtonLinkedin() {
83
+ window.open('http://www.linkedin.com/shareArticle?mini=true&url='+ document.location.href +'&title='+ document.title +'&summary='+ document.title +'', 'popupLinkedIn', 'width=610, height=480, resizable=0, toolbar=0, menubar=0, status=0, location=0, scrollbars=0'); return false;
84
  }
js/dashboard.js CHANGED
@@ -35,20 +35,6 @@ var buttonizer = {
35
  buttonizer.settings.hasChanges = true;
36
  });
37
 
38
- var iconImage = jQuery.wpMediaUploader({
39
- target : '.smartcat-uploader', // The class wrapping the textbox
40
- uploaderTitle : 'Select or upload image', // The title of the media upload popup
41
- uploaderButton : 'Set image', // the text of the button in the media upload popup
42
- multiple : false, // Allow the user to select multiple images
43
- buttonText : '<i class="fa fa-image"></i> <span>Upload image</span>', // The text of the upload button
44
- buttonClass : '.smartcat-upload', // the class of the upload button
45
- previewSize : '32px', // The preview image size
46
- modal : false, // is the upload button within a bootstrap modal ?
47
- buttonStyle : { // style the button
48
-
49
- },
50
- });
51
-
52
  setTimeout(function() {
53
  // Init preview button
54
  jQuery('.button-preview').css({
@@ -66,6 +52,10 @@ var buttonizer = {
66
  });
67
  }, 500);
68
 
 
 
 
 
69
  // Remove the spam from other plugins
70
  setTimeout(function() {
71
  var foundOurContent = false;
@@ -82,27 +72,6 @@ var buttonizer = {
82
  }
83
  }, 1000);
84
 
85
- jQuery(".icon-or-image").each(function() {
86
- var type = jQuery(this).data("type");
87
- var currentContainer = jQuery(this);
88
-
89
- jQuery(this).find(".placeholder-choose a").click(function() {
90
- if(type == 'image') {
91
- type = 'icon';
92
-
93
- currentContainer.find(".image-placeholder").hide();
94
- currentContainer.find(".icon-placeholder").show();
95
-
96
- currentContainer.find("input").val("");
97
- }else {
98
- type = 'image';
99
-
100
- currentContainer.find(".image-placeholder").show();
101
- currentContainer.find(".icon-placeholder").hide();
102
- }
103
- });
104
- });
105
-
106
  // Hash
107
  if(document.location.hash != "") {
108
  var tabKey = document.location.hash;
@@ -117,7 +86,10 @@ var buttonizer = {
117
  });
118
 
119
  buttonizer.loadPageCategorie();
120
- buttonizer.addSortable();
 
 
 
121
  },
122
 
123
  proInfoWindow: function() {
@@ -134,8 +106,8 @@ var buttonizer = {
134
  '<div class="color-buttonizer-blue buttonizer-pro-checklist"><i class="fa fa-check"></i> Show on timeout</div>' +
135
  '<br />' +
136
  '<p class="color-buttonizer text-right"><b>Do you <span><i class="fa fa-heart"></i></span> these features?</b></p>',
137
- closeText: 'Upgrade',
138
- callback: function() {
139
  document.location.href = 'admin.php?page=Buttonizer-pricing';
140
  }
141
  });
@@ -171,6 +143,144 @@ var buttonizer = {
171
  // jQuery("type[name=_wp_http_referer]").val();
172
  },
173
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
174
  loadPageCategorie: function() {
175
  jQuery(".page-categorie-styling").each(function() {
176
  var maxLoaded = 10;
@@ -180,6 +290,7 @@ var buttonizer = {
180
 
181
  table.find("tr").each(function() {
182
  jQuery(this).click(function(e) {
 
183
  if(jQuery(e.target).attr("type") != "checkbox") {
184
  jQuery(this).find("input").click();
185
  }
@@ -190,7 +301,6 @@ var buttonizer = {
190
  maxLoaded += 10;
191
  isLoaded = 0;
192
 
193
-
194
  table.find("tr").each(function() {
195
  isLoaded++;
196
  if(isLoaded <= maxLoaded) {
@@ -243,8 +353,12 @@ var buttonizer = {
243
  });
244
 
245
  jQuery(".button-row").each(function() {
 
 
 
 
246
  var rowObj = jQuery(this);
247
- var rowId = jQuery(this).attr("button-id")
248
  var buttonTitle = rowObj.find(".row-info span .row-title");
249
  var buttonEdit = rowObj.find(".row-info .pencil-edit");
250
  var buttonTitleField = rowObj.find(".button_title");
@@ -260,7 +374,6 @@ var buttonizer = {
260
  buttonTitle.html(buttonTitleField.val());
261
 
262
  rowObj.find(".row-info").click(function(e) {
263
-
264
  if(
265
  jQuery(e.target).hasClass('fa-desktop') ||
266
  jQuery(e.target).hasClass('fa-mobile') ||
@@ -324,7 +437,6 @@ var buttonizer = {
324
  });
325
 
326
  jQuery("#button_"+ rowId +"_icon").change(function(e) {
327
- console.log("test");
328
  rowObj.find(".button-icon").attr('class', "fa "+ jQuery(this).val() +" button-icon");
329
  });
330
 
@@ -344,6 +456,10 @@ var buttonizer = {
344
  rowObj.find(".page-categorie-styling input[type=checkbox]").removeAttr("checked");
345
  }
346
  });
 
 
 
 
347
  }
348
  });
349
  },
@@ -439,6 +555,8 @@ var buttonizer = {
439
  if(jQuery("#new-button").hasClass('disabled')) {
440
  return;
441
  }
 
 
442
  jQuery(".buttonizer-no-buttons").hide();
443
 
444
  var isCategory = jQuery(".button-row[button-id=-1]").hasClass("is_category");
@@ -504,7 +622,10 @@ var buttonizer = {
504
  .attr("id", "button_"+ buttonId +"_text").val("");
505
 
506
  // Iconfield
507
- jQuery("#btn_row_"+ buttonId + " .button_iconfield").attr("name", buttonizer.settings.wpButtonSaveKey + "[button_"+ buttonId +"_icon]");
 
 
 
508
 
509
  // Button title
510
  jQuery("#btn_row_"+ buttonId + " .button_title").attr("name", buttonizer.settings.wpButtonSaveKey + "[button_"+ buttonId +"_title]");
@@ -512,6 +633,13 @@ var buttonizer = {
512
  // Button show on page category
513
  jQuery("#btn_row_"+ buttonId + " #button_category").attr("name", buttonizer.settings.wpButtonSaveKey + "[button_"+ buttonId +"_show_on_pages]");
514
 
 
 
 
 
 
 
 
515
  // Show on phone
516
  jQuery("#btn_row_"+ buttonId + " .button_showonphone")
517
  .attr("name", buttonizer.settings.wpButtonSaveKey + "[button_"+ buttonId +"_show_on_phone]")
@@ -587,12 +715,28 @@ var buttonizer = {
587
  data.text = '<p>This dialog has not text.</p><p>Weird, isn\'t it?</p>';
588
  }
589
 
590
- if(!data.closeText) {
591
- data.closeText = 'Close';
 
 
 
 
592
  }
593
 
594
- if(!data.callback) {
595
- data.callback = function() {};
 
 
 
 
 
 
 
 
 
 
 
 
596
  }
597
 
598
  var windowStyle = '<div class="fs-modal active" id="buttonizer-window-'+ currentWindow +'"><div class="fs-modal-dialog">';
@@ -603,19 +747,23 @@ var buttonizer = {
603
  windowStyle += data.text;
604
  windowStyle += '</div></div>';
605
 
606
- windowStyle += '<div class="fs-modal-footer"><button class="button button-primary" tabindex="3">'+ data.closeText +'</button></div>';
607
 
608
  windowStyle += '</div></div>';
609
 
610
  jQuery("body").append(windowStyle);
611
 
 
 
612
  jQuery("#buttonizer-window-"+ currentWindow + " .fs-close, #buttonizer-window-"+ currentWindow + " button").click(function(e) {
613
  e.preventDefault();
614
  jQuery("#buttonizer-window-"+ currentWindow).fadeOut();
615
 
616
- if(!jQuery(this).hasClass("fs-close")) {
617
- data.callback();
618
  }
 
 
619
  })
620
  },
621
 
35
  buttonizer.settings.hasChanges = true;
36
  });
37
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
38
  setTimeout(function() {
39
  // Init preview button
40
  jQuery('.button-preview').css({
52
  });
53
  }, 500);
54
 
55
+ jQuery(".vertical-tabs .icon-or-image").each(function() {
56
+ buttonizer.iconImageHandler(jQuery(this));
57
+ });
58
+
59
  // Remove the spam from other plugins
60
  setTimeout(function() {
61
  var foundOurContent = false;
72
  }
73
  }, 1000);
74
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
75
  // Hash
76
  if(document.location.hash != "") {
77
  var tabKey = document.location.hash;
86
  });
87
 
88
  buttonizer.loadPageCategorie();
89
+
90
+ if(!jQuery(".button-row").hasClass("is_category")) {
91
+ buttonizer.addSortable();
92
+ }
93
  },
94
 
95
  proInfoWindow: function() {
106
  '<div class="color-buttonizer-blue buttonizer-pro-checklist"><i class="fa fa-check"></i> Show on timeout</div>' +
107
  '<br />' +
108
  '<p class="color-buttonizer text-right"><b>Do you <span><i class="fa fa-heart"></i></span> these features?</b></p>',
109
+ confirmText: 'Upgrade',
110
+ onConfirm: function() {
111
  document.location.href = 'admin.php?page=Buttonizer-pricing';
112
  }
113
  });
143
  // jQuery("type[name=_wp_http_referer]").val();
144
  },
145
 
146
+ iconImageHandler: function(currentContainer) {
147
+ var type = currentContainer.data("type");
148
+
149
+ // Chooser
150
+ currentContainer.find(".placeholder-choose a").click(function() {
151
+ if(type == 'image') {
152
+ type = 'icon';
153
+
154
+ currentContainer.find(".image-placeholder").hide();
155
+ currentContainer.find(".icon-placeholder").show();
156
+
157
+ currentContainer.find("input").val("");
158
+ }else {
159
+ type = 'image';
160
+
161
+ currentContainer.find(".image-placeholder").show();
162
+ currentContainer.find(".icon-placeholder").hide();
163
+ }
164
+ });
165
+
166
+ // Insert image and icon type
167
+ currentContainer.find(".image-uploader-button").click(function(e) {
168
+ e.preventDefault();
169
+
170
+ var custom_uploader = wp.media({
171
+ title: 'Choose button icon',
172
+ multiple: false
173
+ })
174
+ .on('select', function() {
175
+ var attachment = custom_uploader.state().get('selection').first().toJSON();
176
+ currentContainer.find('.button-preview img').attr( 'src', attachment.url).show();
177
+ currentContainer.find(".button-preview").show();
178
+
179
+ currentContainer.find('input').val(attachment.url);
180
+ })
181
+ .open();
182
+ });
183
+ },
184
+
185
+ colorPaletHandler: function(colorPalet) {
186
+ var buttonId = colorPalet.attr("data-btnid");
187
+ var customColors = false;
188
+ var currentColors = {
189
+ default: buttonizer.rgb2hex(colorPalet.find(".color.default").css('background-color')),
190
+ pushed: buttonizer.rgb2hex(colorPalet.find(".color.pushed").css('background-color')),
191
+ icon: buttonizer.rgb2hex(colorPalet.find(".color.icon").css('background-color'))
192
+ };
193
+
194
+ jQuery("#btn_row_"+ buttonId +" .button-preview").css({ 'background-color': currentColors.default });
195
+
196
+ colorPalet.click(function() {
197
+ var randomText = (buttonizer.settings.windowNumber + 1);
198
+
199
+ buttonizer.createWindow({
200
+ title: 'Choose colors',
201
+ text:
202
+ '<p>Choose the colors here of your button. You can give every button different colors.</p>' +
203
+ '<table width="100%" class="color-chooser-table">' +
204
+ '<tr><td width="150">' +
205
+ '<b>Button color</b>' +
206
+ '</td><td>' +
207
+ '<input type="text" class="colorpalet-initializer" value="'+ currentColors.default +'" id="color_default_'+ randomText +'" />' +
208
+ '</td></tr>' +
209
+
210
+ '<tr><td>' +
211
+ '<b>Pushed/hover color</b>' +
212
+ '</td><td>' +
213
+ '<input type="text" class="colorpalet-initializer" value="'+ currentColors.pushed +'" id="color_pushed_'+ randomText +'" />' +
214
+ '</td></tr>' +
215
+
216
+ '<tr><td>' +
217
+ '<b>Icon color</b>' +
218
+ '</td><td>' +
219
+ '<input type="text" class="colorpalet-initializer" value="'+ currentColors.icon +'" id="color_icon_'+ randomText +'" />' +
220
+ '</td></tr>' +
221
+ '</table>',
222
+
223
+ confirmText: 'Choose',
224
+
225
+ afterInit: function() {
226
+ jQuery(".colorpalet-initializer").wpColorPicker();
227
+ },
228
+
229
+ onConfirm: function() {
230
+ currentColors.default = jQuery("#color_default_" + randomText).val();
231
+ currentColors.pushed = jQuery("#color_pushed_" + randomText).val();
232
+ currentColors.icon = jQuery("#color_icon_" + randomText).val();
233
+ jQuery("#btn_row_"+ buttonId +" .button-preview").css({ 'background-color': currentColors.default });
234
+ customColors = true;
235
+
236
+ jQuery("#reset_colors_" + buttonId).show();
237
+ updatePalet();
238
+ }
239
+ });
240
+ });
241
+
242
+ jQuery("#reset_colors_" + buttonId).click(function() {
243
+ buttonizer.createWindow({
244
+ title: 'Back to default colors',
245
+ text: '<p>The button colors will reset to the choosen default button colors (from the general settings).</p>' +
246
+ '<p>Are you sure you want to get the default colors for this button?</p>',
247
+
248
+ canCancel: true,
249
+ cancelText: 'Cancel',
250
+ confirmText: '<i class="fa fa-thumbs-o-up"></i>&nbsp; Yes, I am',
251
+
252
+ onConfirm: function() {
253
+ customColors = false;
254
+ currentColors.default = colorPalet.find(".color.default").attr("data-default");
255
+ currentColors.pushed = colorPalet.find(".color.pushed").attr("data-default");
256
+ currentColors.icon = colorPalet.find(".color.icon").attr("data-default");
257
+ updatePalet();
258
+ jQuery("#reset_colors_" + buttonId).hide();
259
+ jQuery("#btn_row_"+ buttonId +" .button-preview").css({ 'background-color': currentColors.default });
260
+ }
261
+ });
262
+ });
263
+
264
+ function updatePalet() {
265
+ colorPalet.find(".color.default").css({ 'background-color': currentColors.default});
266
+ colorPalet.find(".color.pushed").css({ 'background-color': currentColors.pushed});
267
+ colorPalet.find(".color.icon").css({ 'background-color': currentColors.icon});
268
+
269
+ colorPalet.find("input.custom").val(customColors ? '1' : '0').change();
270
+ colorPalet.find("input.default").val(currentColors.default);
271
+ colorPalet.find("input.pushed").val(currentColors.pushed);
272
+ colorPalet.find("input.icon").val(currentColors.icon);
273
+ }
274
+ },
275
+
276
+ rgb2hex: function(rgb) {
277
+ rgb = rgb.match(/^rgb\((\d+),\s*(\d+),\s*(\d+)\)$/);
278
+ function hex(x) {
279
+ return ("0" + parseInt(x).toString(16)).slice(-2);
280
+ }
281
+ return "#" + hex(rgb[1]) + hex(rgb[2]) + hex(rgb[3]);
282
+ },
283
+
284
  loadPageCategorie: function() {
285
  jQuery(".page-categorie-styling").each(function() {
286
  var maxLoaded = 10;
290
 
291
  table.find("tr").each(function() {
292
  jQuery(this).click(function(e) {
293
+ buttonizer.settings.hasChanges = true;
294
  if(jQuery(e.target).attr("type") != "checkbox") {
295
  jQuery(this).find("input").click();
296
  }
301
  maxLoaded += 10;
302
  isLoaded = 0;
303
 
 
304
  table.find("tr").each(function() {
305
  isLoaded++;
306
  if(isLoaded <= maxLoaded) {
353
  });
354
 
355
  jQuery(".button-row").each(function() {
356
+ if(jQuery(this).attr("button-id") == '-1') {
357
+ return;
358
+ }
359
+
360
  var rowObj = jQuery(this);
361
+ var rowId = jQuery(this).attr("button-id");
362
  var buttonTitle = rowObj.find(".row-info span .row-title");
363
  var buttonEdit = rowObj.find(".row-info .pencil-edit");
364
  var buttonTitleField = rowObj.find(".button_title");
374
  buttonTitle.html(buttonTitleField.val());
375
 
376
  rowObj.find(".row-info").click(function(e) {
 
377
  if(
378
  jQuery(e.target).hasClass('fa-desktop') ||
379
  jQuery(e.target).hasClass('fa-mobile') ||
437
  });
438
 
439
  jQuery("#button_"+ rowId +"_icon").change(function(e) {
 
440
  rowObj.find(".button-icon").attr('class', "fa "+ jQuery(this).val() +" button-icon");
441
  });
442
 
456
  rowObj.find(".page-categorie-styling input[type=checkbox]").removeAttr("checked");
457
  }
458
  });
459
+ }else{
460
+ // Image icon handler
461
+ buttonizer.iconImageHandler(rowObj.find(".icon-or-image"));
462
+ buttonizer.colorPaletHandler(rowObj.find(".button-color-palet"));
463
  }
464
  });
465
  },
555
  if(jQuery("#new-button").hasClass('disabled')) {
556
  return;
557
  }
558
+ buttonizer.settings.hasChanges = true;
559
+
560
  jQuery(".buttonizer-no-buttons").hide();
561
 
562
  var isCategory = jQuery(".button-row[button-id=-1]").hasClass("is_category");
622
  .attr("id", "button_"+ buttonId +"_text").val("");
623
 
624
  // Iconfield
625
+ jQuery("#btn_row_"+ buttonId + " .icon-placeholder select").attr("name", buttonizer.settings.wpButtonSaveKey + "[button_"+ buttonId +"_icon]");
626
+
627
+ // Iconfield
628
+ jQuery("#btn_row_"+ buttonId + " .image-placeholder input").attr("name", buttonizer.settings.wpButtonSaveKey + "[button_"+ buttonId +"_image]");
629
 
630
  // Button title
631
  jQuery("#btn_row_"+ buttonId + " .button_title").attr("name", buttonizer.settings.wpButtonSaveKey + "[button_"+ buttonId +"_title]");
633
  // Button show on page category
634
  jQuery("#btn_row_"+ buttonId + " #button_category").attr("name", buttonizer.settings.wpButtonSaveKey + "[button_"+ buttonId +"_show_on_pages]");
635
 
636
+ // Color palets
637
+ jQuery("#btn_row_"+ buttonId + " input.custom").attr("name", buttonizer.settings.wpButtonSaveKey + "[button_"+ buttonId +"_using_custom_colors]");
638
+
639
+ jQuery("#btn_row_"+ buttonId + " input.default").attr("name", buttonizer.settings.wpButtonSaveKey + "[button_"+ buttonId +"_colors_button]");
640
+ jQuery("#btn_row_"+ buttonId + " input.pushed").attr("name", buttonizer.settings.wpButtonSaveKey + "[button_"+ buttonId +"_colors_pushed]");
641
+ jQuery("#btn_row_"+ buttonId + " input.icon").attr("name", buttonizer.settings.wpButtonSaveKey + "[button_"+ buttonId +"_colors_icon]");
642
+
643
  // Show on phone
644
  jQuery("#btn_row_"+ buttonId + " .button_showonphone")
645
  .attr("name", buttonizer.settings.wpButtonSaveKey + "[button_"+ buttonId +"_show_on_phone]")
715
  data.text = '<p>This dialog has not text.</p><p>Weird, isn\'t it?</p>';
716
  }
717
 
718
+ if(!data.confirmText) {
719
+ data.confirmText = 'Close';
720
+ }
721
+
722
+ if(!data.canCancel) {
723
+ data.canCancel = false;
724
  }
725
 
726
+ if(!data.cancelText) {
727
+ data.cancelText = 'Cancel';
728
+ }
729
+
730
+ if(!data.onConfirm) {
731
+ data.onConfirm = function() {};
732
+ }
733
+
734
+ if(!data.onClose) {
735
+ data.onClose = function() {};
736
+ }
737
+
738
+ if(!data.afterInit) {
739
+ data.afterInit = function() {};
740
  }
741
 
742
  var windowStyle = '<div class="fs-modal active" id="buttonizer-window-'+ currentWindow +'"><div class="fs-modal-dialog">';
747
  windowStyle += data.text;
748
  windowStyle += '</div></div>';
749
 
750
+ windowStyle += '<div class="fs-modal-footer">' + (data.canCancel ? '<button class="button cancel" tabindex="3">'+ data.cancelText +'</button> ' : '') +' <button class="button button-primary confirm" tabindex="4">'+ data.confirmText +'</button></div>';
751
 
752
  windowStyle += '</div></div>';
753
 
754
  jQuery("body").append(windowStyle);
755
 
756
+ jQuery(document).ready(data.afterInit);
757
+
758
  jQuery("#buttonizer-window-"+ currentWindow + " .fs-close, #buttonizer-window-"+ currentWindow + " button").click(function(e) {
759
  e.preventDefault();
760
  jQuery("#buttonizer-window-"+ currentWindow).fadeOut();
761
 
762
+ if(jQuery(this).hasClass("confirm")) {
763
+ data.onConfirm();
764
  }
765
+
766
+ data.onClose();
767
  })
768
  },
769
 
js/wp_media_uploader.js CHANGED
@@ -26,7 +26,7 @@
26
 
27
  }, options );
28
 
29
- if(typeof $(settings.target).data("image") != 'undefined') {
30
  var img = $(settings.target).data("image");
31
  }else{
32
  var img = "";
26
 
27
  }, options );
28
 
29
+ if(typeof $(settings.target).attr("data-image") != 'undefined') {
30
  var img = $(settings.target).data("image");
31
  }else{
32
  var img = "";
readme.txt CHANGED
@@ -1,20 +1,20 @@
1
- === Wordpress Smart Floating Action and Conversion Button Plugin - Buttonizer ===
2
  Contributors: Buttonizer, freemius
3
  Buy plugin: https://buttonizer.pro
4
- Tags: conversion button, smart action button, call button, smart button, buttonizer, floating action button, google event tracking, material design, call to action, conversion, Social Sharing, button
5
  Requires at least: 4.2
6
  Tested up to: 4.8.1
7
- Stable tag: 1.0.5
8
  License: GPLv2 or later
9
  License URI: http://www.gnu.org/licenses/gpl-2.0.html
10
 
11
- Add & manage floating action buttons. From call buttons to social sharing buttons. Add page rules and decide to show your buttons on desktop, mobile or both.
12
 
13
  == Description ==
14
 
15
  The Buttonizer is a smart conversion-targeted button that will make your website more efficient. From making a simple call button, to a navigation button to open Facebook messenger. The Buttonizer is a new way to give a boost to your number of interactions, actions and conversions from your website visitor by adding one or multiple Customizable Smart Multifunctional Floating Button in the corner of your website.
16
 
17
- With the Buttonizer it's possible to add buttons to a select number of pages with "page rules", decide for each button if it shows on mobile and/or desktop, style your button with your own icons & colors, add social sharing buttons, Show the button on opening hours and make use of many more rules.
18
 
19
  And the beauty of all: All actions are hidden in one button. The moment a visitor clicks on your Floating Action Button it will *pop* all specific buttons you've set for that page. Track each single button in Google Analytics so you can see which actions your visitors prefer.
20
 
@@ -23,6 +23,7 @@ Download the Buttonizer for free and make your first Smart Conversion Button in
23
  = Major features in Buttonizer include: =
24
 
25
  * **Floating Action Buttons** - Make different action buttons, like a call button on your mobile website;
 
26
  * **No coding** - The plugin takes care of everything;
27
  * **Styling options** - Style your button by choosing your color with an easy color-picker;
28
  * **Positioning** - Easily choose the position of your button;
@@ -37,10 +38,14 @@ Download the Buttonizer for free and make your first Smart Conversion Button in
37
 
38
  Download the free version or go premium and get to add an infinite number of buttons and page rules.
39
 
40
- = MAKE A FLOATING CALL BUTTON ONLY FOR MOBILE WITH BUTTONIZER =
41
 
42
  Make it a lot more easier for your mobile website visitors to call you. With the Buttonizer you can easily make a floating call button for your mobile website. In just 2 minutes you can make your own click to call button.
43
 
 
 
 
 
44
  = STYLING OPTIONS & ICONS =
45
 
46
  Next to choosing the color of your button, the color when someone click / hover over your button and the color of your icon, there is more. With the Buttonizer you can easily choose between font awesome icons but you can also add you own image / logo or icon. You can even add a moving icon in your button.
@@ -53,13 +58,13 @@ Decide for each button if you want to show it on your desktop, mobile or both. S
53
 
54
  Of Course you can add a button for all your pages. But it is also possible to show a floating action button on specific pages. How? By easily adding a page category to the button. In a page category you can simply include or exclude the selected pages. This way you can add a specific floating call button selected pages and every page has its own conversion purpose.
55
 
56
- = OPENING HOURS =
57
 
58
- Show a floating action button only when your business is open. As an example: Add Facebook Messenger as a button and set it to show only on opening hours so your clients won't chat with your company outside opening hours.
59
 
60
  = AUTO EVENT TRACKING IN GOOGLE ANALYTICS =
61
 
62
- Each button gets tracked on your website as long as your Google Analytics code is installed on your website. When you dont have it installed, or you have Google Tag Manager installed instead but still want to track your clicks on your floating action buttons? Than you can add you Google Analytics code manually in the setting tab of Buttonizer.
63
 
64
  The best thing of all, the name you give to your button, is also seen in your Google analytics event page so you always know which buttons outperform the other.
65
 
@@ -71,6 +76,9 @@ If you have a blog, share news articles, or have lucrative products that people
71
 
72
  You can decide if you want your Buttonizer to show after a specific amount of time that your visitor is on your website or when after a percentage amount of scroll on a page. For example, the scroll depth option can come in handy when you have a blog and you want to display social sharing options after your visitor has red a good part of your article. This way you ask the attention of your readers at just the right time.
73
 
 
 
 
74
  == Installation ==
75
 
76
  = For automatic installation: =
@@ -83,7 +91,7 @@ You can decide if you want your Buttonizer to show after a specific amount of ti
83
  * Click the Activate Plugin link.
84
 
85
  = For manual installation: =
86
- * You should have access to the server where WordPress is installed. If you don't, see your system administrator.
87
  * Copy the plugin zip file up to your server and unzip it somewhere on the file system.
88
  * Copy the "Buttonizer" folder into the /wp-content/plugins directory of your WordPress installation.
89
  * Login to your website and go to the Plugins section of your admin panel.
@@ -101,19 +109,33 @@ The Buttonizer is a new way to give a boost to your number of interactions, acti
101
 
102
  = What's the difference between floating action buttons or other conversion buttons? =
103
 
104
- With Buttonizer you don't just add the same button to every page on your website. No, the key is that each action must be relevant. With the Buttonizer it's possible to add buttons to a select number of pages with "page rules", decide for each button if it shows on mobile and/or desktop, style your button with your own icons & colors, add social sharing buttons, Show the button on opening hours and make use of many more rules.
105
 
106
- And the beauty of all: All actions are hidden in one button. The moment a visitor clicks on your Floating Action Button it will *pop* all specific buttons youve set for that page. Track each single button in Google Analytics so you can see which actions your visitors prefer.
107
 
108
- In fact the Buttonizer is an addiction to use. Youre website visitors will interact as never before.
109
 
110
  == Changelog ==
111
 
112
- = 1.0.3 =
113
- Added new feature:
114
- - Exit intent: Buttons will expand
 
 
 
 
 
 
 
115
 
 
 
 
 
116
 
 
 
 
117
 
118
  = 1.0.2 =
119
  Launch of the Buttonizer Floating Action Button Plugin!
1
+ === Wordpress Smart Floating Action and Conversion Button Plugin - Buttonizer ===
2
  Contributors: Buttonizer, freemius
3
  Buy plugin: https://buttonizer.pro
4
+ Tags: floating menu, action button, call button, floating action button, Social Sharing button
5
  Requires at least: 4.2
6
  Tested up to: 4.8.1
7
+ Stable tag: 1.0.6
8
  License: GPLv2 or later
9
  License URI: http://www.gnu.org/licenses/gpl-2.0.html
10
 
11
+ Add & manage floating action buttons. From call buttons to social sharing buttons. Add page rules and decide to show your floating menu on desktop, mobile or both.
12
 
13
  == Description ==
14
 
15
  The Buttonizer is a smart conversion-targeted button that will make your website more efficient. From making a simple call button, to a navigation button to open Facebook messenger. The Buttonizer is a new way to give a boost to your number of interactions, actions and conversions from your website visitor by adding one or multiple Customizable Smart Multifunctional Floating Button in the corner of your website.
16
 
17
+ With the Buttonizer it&#39;s possible to add buttons to a select number of pages with "page rules", decide for each button if it shows on mobile and/or desktop, style your button with your own icons & colors, add social sharing buttons, Show the button on opening hours and make use of many more rules.
18
 
19
  And the beauty of all: All actions are hidden in one button. The moment a visitor clicks on your Floating Action Button it will *pop* all specific buttons you've set for that page. Track each single button in Google Analytics so you can see which actions your visitors prefer.
20
 
23
  = Major features in Buttonizer include: =
24
 
25
  * **Floating Action Buttons** - Make different action buttons, like a call button on your mobile website;
26
+ * **Floating Menu** - Create a dynamic Floating Menu, style each button and choose which items are shown on mobile, desktop or both;
27
  * **No coding** - The plugin takes care of everything;
28
  * **Styling options** - Style your button by choosing your color with an easy color-picker;
29
  * **Positioning** - Easily choose the position of your button;
38
 
39
  Download the free version or go premium and get to add an infinite number of buttons and page rules.
40
 
41
+ = CALL NOW: MAKE A FLOATING CALL BUTTON ONLY FOR MOBILE WITH BUTTONIZER =
42
 
43
  Make it a lot more easier for your mobile website visitors to call you. With the Buttonizer you can easily make a floating call button for your mobile website. In just 2 minutes you can make your own click to call button.
44
 
45
+ = FLOATING MENU =
46
+
47
+ Create Dynamic Floating Menus. Choose the positioning of your menu, style your buttons, choose which actions (menu items) are shown on a set of rules (pages, desktop/mobile, opening hours etc.)
48
+
49
  = STYLING OPTIONS & ICONS =
50
 
51
  Next to choosing the color of your button, the color when someone click / hover over your button and the color of your icon, there is more. With the Buttonizer you can easily choose between font awesome icons but you can also add you own image / logo or icon. You can even add a moving icon in your button.
58
 
59
  Of Course you can add a button for all your pages. But it is also possible to show a floating action button on specific pages. How? By easily adding a page category to the button. In a page category you can simply include or exclude the selected pages. This way you can add a specific floating call button selected pages and every page has its own conversion purpose.
60
 
61
+ = SHOW ON/AFTER OPENING HOURS =
62
 
63
+ Show a floating action button only when your business is open or closed. As an example: Add Facebook Messenger as a button and set it to show only on opening hours so your clients won't chat with your company outside opening hours. You can then add another button that is only shown after opening hours.
64
 
65
  = AUTO EVENT TRACKING IN GOOGLE ANALYTICS =
66
 
67
+ Each button gets tracked on your website as long as your Google Analytics code is installed on your website. When you don&#39;t have it installed, or you have Google Tag Manager installed instead but still want to track your clicks on your floating action buttons? Than you can add you Google Analytics code manually in the setting tab of Buttonizer.
68
 
69
  The best thing of all, the name you give to your button, is also seen in your Google analytics event page so you always know which buttons outperform the other.
70
 
76
 
77
  You can decide if you want your Buttonizer to show after a specific amount of time that your visitor is on your website or when after a percentage amount of scroll on a page. For example, the scroll depth option can come in handy when you have a blog and you want to display social sharing options after your visitor has red a good part of your article. This way you ask the attention of your readers at just the right time.
78
 
79
+ It is also possible to add Exit Intent. The floating action button will show itself when a visitors tries to leave the website.
80
+
81
+
82
  == Installation ==
83
 
84
  = For automatic installation: =
91
  * Click the Activate Plugin link.
92
 
93
  = For manual installation: =
94
+ * You should have access to the server where WordPress is installed. If you don&#39;t, see your system administrator.
95
  * Copy the plugin zip file up to your server and unzip it somewhere on the file system.
96
  * Copy the "Buttonizer" folder into the /wp-content/plugins directory of your WordPress installation.
97
  * Login to your website and go to the Plugins section of your admin panel.
109
 
110
  = What's the difference between floating action buttons or other conversion buttons? =
111
 
112
+ With Buttonizer you don't just add the same button to every page on your website. No, the key is that each action must be relevant. With the Buttonizer it&#39;s possible to add buttons to a select number of pages with "page rules", decide for each button if it shows on mobile and/or desktop, style your button with your own icons & colors, add social sharing buttons, Show the button on opening hours and make use of many more rules.
113
 
114
+ And the beauty of all: All actions are hidden in one button. The moment a visitor clicks on your Floating Action Button it will *pop* all specific buttons you&#39;ve set for that page. Track each single button in Google Analytics so you can see which actions your visitors prefer.
115
 
116
+ In fact the Buttonizer is an addiction to use. You&#39;re website visitors will interact as never before.
117
 
118
  == Changelog ==
119
 
120
+ = 1.0.6 =
121
+ Added new feature: Change the color of each button
122
+ From now on you can change the color of each floating action button you make. If you want to create a Floating Menu with different button colors, it is now possible!
123
+
124
+ Added new feature: New animation floating menu
125
+ We now have a new animation to open the floating menu (multiple floating action). Instead of showing the buttons on the top of each other you can the floating buttons make a 45 degrees circle.
126
+
127
+ = 1.0.5 =
128
+ Added new feature: Add own images and icons
129
+ You can now add your own images and icons for each button instead of only the main button :).
130
 
131
+ = 1.0.4 =
132
+ Added new feature: Drag & Drop for floating menu
133
+ - Drag & Drop. You can Drag & Drop your buttons so you can choose in which order you buttons get show when you want to show more then one button on one page. This is perfect when you want to add a Floating Menu. You can easily change the positions of your buttons.
134
+ - We did some bugfixing
135
 
136
+ = 1.0.3 =
137
+ Added new feature:
138
+ - Exit intent: Let you Floating Action Buttons with a clean ’pop’ when your visitor tries to leave your website. By adding exit intent you can increase the number of conversions and keep your leaving webvisitors
139
 
140
  = 1.0.2 =
141
  Launch of the Buttonizer Floating Action Button Plugin!