Version Description
Download this release
Release Info
| Developer | jonathanbardo |
| Plugin | |
| Version | 1.3.4 |
| Comparing to | |
| See all releases | |
Code changes from version 1.3.3 to 1.3.4
- contact-widgets.php +1 -1
- readme.txt +2 -2
- trunk/assets/css/admin-ie.css +0 -24
- trunk/assets/css/admin-ie.min.css +0 -1
- trunk/assets/css/admin.css +0 -95
- trunk/assets/css/admin.min.css +0 -1
- trunk/assets/css/style.css +0 -30
- trunk/assets/css/style.min.css +0 -1
- trunk/assets/js/admin.js +0 -176
- trunk/assets/js/admin.min.js +0 -1
- trunk/assets/js/customize-preview-helper.js +0 -9
- trunk/assets/js/customize-preview-helper.min.js +0 -1
- trunk/contact-widgets.php +0 -104
- trunk/includes/autoload.php +0 -39
- trunk/includes/class-base-widget.php +0 -569
- trunk/includes/class-contact.php +0 -252
- trunk/includes/class-plugin.php +0 -39
- trunk/includes/class-social.php +0 -275
- trunk/includes/social-networks.php +0 -168
- trunk/languages/contact-widgets-da_DK.mo +0 -0
- trunk/languages/contact-widgets-de_DE.mo +0 -0
- trunk/languages/contact-widgets-el.mo +0 -0
- trunk/languages/contact-widgets-es_ES.mo +0 -0
- trunk/languages/contact-widgets-es_MX.mo +0 -0
- trunk/languages/contact-widgets-fi.mo +0 -0
- trunk/languages/contact-widgets-fr_FR.mo +0 -0
- trunk/languages/contact-widgets-hi_IN.mo +0 -0
- trunk/languages/contact-widgets-id_ID.mo +0 -0
- trunk/languages/contact-widgets-it_IT.mo +0 -0
- trunk/languages/contact-widgets-ja.mo +0 -0
- trunk/languages/contact-widgets-ko_KR.mo +0 -0
- trunk/languages/contact-widgets-mr.mo +0 -0
- trunk/languages/contact-widgets-ms_MY.mo +0 -0
- trunk/languages/contact-widgets-nb_NO.mo +0 -0
- trunk/languages/contact-widgets-nl_NL.mo +0 -0
- trunk/languages/contact-widgets-pl_PL.mo +0 -0
- trunk/languages/contact-widgets-pt_BR.mo +0 -0
- trunk/languages/contact-widgets-pt_PT.mo +0 -0
- trunk/languages/contact-widgets-ru_RU.mo +0 -0
- trunk/languages/contact-widgets-sv_SE.mo +0 -0
- trunk/languages/contact-widgets-th.mo +0 -0
- trunk/languages/contact-widgets-tl.mo +0 -0
- trunk/languages/contact-widgets-tr_TR.mo +0 -0
- trunk/languages/contact-widgets-uk.mo +0 -0
- trunk/languages/contact-widgets-vi.mo +0 -0
- trunk/languages/contact-widgets-zh_CN.mo +0 -0
- trunk/languages/contact-widgets-zh_HK.mo +0 -0
- trunk/languages/contact-widgets-zh_TW.mo +0 -0
- trunk/readme.txt +0 -178
contact-widgets.php
CHANGED
|
@@ -2,7 +2,7 @@
|
|
| 2 |
/**
|
| 3 |
* Plugin Name: Contact Widgets
|
| 4 |
* Description: Beautifully display social media and contact information on your website with these simple widgets.
|
| 5 |
-
* Version: 1.3.
|
| 6 |
* Author: GoDaddy
|
| 7 |
* Author URI: https://godaddy.com
|
| 8 |
* Text Domain: contact-widgets
|
| 2 |
/**
|
| 3 |
* Plugin Name: Contact Widgets
|
| 4 |
* Description: Beautifully display social media and contact information on your website with these simple widgets.
|
| 5 |
+
* Version: 1.3.4
|
| 6 |
* Author: GoDaddy
|
| 7 |
* Author URI: https://godaddy.com
|
| 8 |
* Text Domain: contact-widgets
|
readme.txt
CHANGED
|
@@ -2,8 +2,8 @@
|
|
| 2 |
Contributors: godaddy, jonathanbardo, fjarrett
|
| 3 |
Tags: widget, contact, social, sharing, share button, share buttons, share links, social icons, social media, facebook, twitter, google plus, instagram
|
| 4 |
Requires at least: 4.4.2
|
| 5 |
-
Tested up to: 4.
|
| 6 |
-
Stable tag: 1.3.
|
| 7 |
License: GPL-2.0
|
| 8 |
License URI: https://www.gnu.org/licenses/gpl-2.0.html
|
| 9 |
|
| 2 |
Contributors: godaddy, jonathanbardo, fjarrett
|
| 3 |
Tags: widget, contact, social, sharing, share button, share buttons, share links, social icons, social media, facebook, twitter, google plus, instagram
|
| 4 |
Requires at least: 4.4.2
|
| 5 |
+
Tested up to: 4.7
|
| 6 |
+
Stable tag: 1.3.4
|
| 7 |
License: GPL-2.0
|
| 8 |
License URI: https://www.gnu.org/licenses/gpl-2.0.html
|
| 9 |
|
trunk/assets/css/admin-ie.css
DELETED
|
@@ -1,24 +0,0 @@
|
|
| 1 |
-
.wpcw-widget .form p {
|
| 2 |
-
margin: 0 0 10px 1px;
|
| 3 |
-
}
|
| 4 |
-
.wpcw-widget .form p.sortable-placeholder {
|
| 5 |
-
margin: 0 0 8px 1px;
|
| 6 |
-
}
|
| 7 |
-
.wpcw-widget .form.ui-sortable p span.dashicons {
|
| 8 |
-
top: 25px;
|
| 9 |
-
}
|
| 10 |
-
.wpcw-widget .form.ui-sortable p.textarea span.dashicons {
|
| 11 |
-
top: 80px;
|
| 12 |
-
}
|
| 13 |
-
.wpcw-widget .ui-sortable.form > p .widefat {
|
| 14 |
-
display: inline;
|
| 15 |
-
}
|
| 16 |
-
/**
|
| 17 |
-
* IE8 fix and woraround
|
| 18 |
-
*/
|
| 19 |
-
.ie8 .wpcw-widget .form.ui-sortable p span.dashicons {
|
| 20 |
-
top: 0;
|
| 21 |
-
}
|
| 22 |
-
.ie8 .wpcw-widget-social .icons a.inactive {
|
| 23 |
-
color: #ccc;
|
| 24 |
-
}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
trunk/assets/css/admin-ie.min.css
DELETED
|
@@ -1 +0,0 @@
|
|
| 1 |
-
.wpcw-widget .form p{margin:0 0 10px 1px}.wpcw-widget .form p.sortable-placeholder{margin:0 0 8px 1px}.wpcw-widget .form.ui-sortable p span.dashicons{top:25px}.wpcw-widget .form.ui-sortable p.textarea span.dashicons{top:80px}.wpcw-widget .ui-sortable.form>p .widefat{display:inline}.ie8 .wpcw-widget .form.ui-sortable p span.dashicons{top:0}.ie8 .wpcw-widget-social .icons a.inactive{color:#ccc}
|
|
|
trunk/assets/css/admin.css
DELETED
|
@@ -1,95 +0,0 @@
|
|
| 1 |
-
/**
|
| 2 |
-
* Form fields
|
| 3 |
-
*/
|
| 4 |
-
.wpcw-widget .form {
|
| 5 |
-
overflow: auto;
|
| 6 |
-
margin-bottom: 1em;
|
| 7 |
-
}
|
| 8 |
-
.wpcw-widget .title {
|
| 9 |
-
margin-top: 1em;
|
| 10 |
-
}
|
| 11 |
-
.wpcw-widget .form p {
|
| 12 |
-
margin: 0 0 10px 0;
|
| 13 |
-
}
|
| 14 |
-
.wpcw-widget .form p.sortable-placeholder {
|
| 15 |
-
margin: 0 0 8px 0;
|
| 16 |
-
}
|
| 17 |
-
.wpcw-widget .form label i {
|
| 18 |
-
margin: 0 7px 0 3px;
|
| 19 |
-
}
|
| 20 |
-
.wpcw-widget .form > p > span {
|
| 21 |
-
display: table;
|
| 22 |
-
width: 100%;
|
| 23 |
-
}
|
| 24 |
-
.wpcw-widget .form > p textarea {
|
| 25 |
-
min-height: 80px;
|
| 26 |
-
resize: none;
|
| 27 |
-
vertical-align: top; /* Bottom margin fix for webkit */
|
| 28 |
-
}
|
| 29 |
-
.wpcw-widget .form.ui-sortable > p .widefat {
|
| 30 |
-
display: table-cell;
|
| 31 |
-
width: 100%; /* Customizer compat */
|
| 32 |
-
}
|
| 33 |
-
.wpcw-widget .form.ui-sortable .wpcw-widget-sortable-handle {
|
| 34 |
-
display: table-cell;
|
| 35 |
-
position: relative;
|
| 36 |
-
width: 25px;
|
| 37 |
-
background-color: #f7f7f7;
|
| 38 |
-
border: 1px solid #ddd;
|
| 39 |
-
border-left: none;
|
| 40 |
-
cursor: row-resize;
|
| 41 |
-
cursor: grab;
|
| 42 |
-
cursor: -moz-grab;
|
| 43 |
-
cursor: -webkit-grab;
|
| 44 |
-
|
| 45 |
-
-webkit-box-shadow: 0 1px 1px rgba(0,0,0,0.04);
|
| 46 |
-
-moz-box-shadow: 0 1px 1px rgba(0,0,0,0.04);
|
| 47 |
-
box-shadow: 0 1px 1px rgba(0,0,0,0.04);
|
| 48 |
-
}
|
| 49 |
-
.wpcw-widget .form.ui-sortable .wpcw-widget-sortable-handle:active,
|
| 50 |
-
.wpcw-widget .form.ui-sortable .ui-sortable-helper * {
|
| 51 |
-
cursor: row-resize;
|
| 52 |
-
cursor: grabbing;
|
| 53 |
-
cursor: -moz-grabbing;
|
| 54 |
-
cursor: -webkit-grabbing;
|
| 55 |
-
}
|
| 56 |
-
.wpcw-widget .form.ui-sortable span.dashicons {
|
| 57 |
-
position: absolute;
|
| 58 |
-
margin: auto;
|
| 59 |
-
top: 0;
|
| 60 |
-
right: 0;
|
| 61 |
-
bottom: 0;
|
| 62 |
-
left: 0;
|
| 63 |
-
overflow: auto;
|
| 64 |
-
font-size: 18px;
|
| 65 |
-
color: #a0a5aa;
|
| 66 |
-
}
|
| 67 |
-
.wpcw-widget .form.ui-sortable span.dashicons:before {
|
| 68 |
-
position: relative;
|
| 69 |
-
top: 1px;
|
| 70 |
-
}
|
| 71 |
-
|
| 72 |
-
/**
|
| 73 |
-
* Default fields
|
| 74 |
-
*/
|
| 75 |
-
.wpcw-widget .default-fields {
|
| 76 |
-
display: none;
|
| 77 |
-
}
|
| 78 |
-
|
| 79 |
-
/**
|
| 80 |
-
* Icons
|
| 81 |
-
*/
|
| 82 |
-
.wpcw-widget-social .icons {
|
| 83 |
-
margin: 10px 0;
|
| 84 |
-
}
|
| 85 |
-
.wpcw-widget-social .icons a {
|
| 86 |
-
margin: 5px;
|
| 87 |
-
font-size: 20px;
|
| 88 |
-
display: inline-block;
|
| 89 |
-
}
|
| 90 |
-
.wpcw-widget-social .icons a:focus {
|
| 91 |
-
box-shadow: none;
|
| 92 |
-
}
|
| 93 |
-
.wpcw-widget-social .icons a.inactive:not(:hover) {
|
| 94 |
-
color: #ccc;
|
| 95 |
-
}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
trunk/assets/css/admin.min.css
DELETED
|
@@ -1 +0,0 @@
|
|
| 1 |
-
.wpcw-widget .form{overflow:auto;margin-bottom:1em}.wpcw-widget .title{margin-top:1em}.wpcw-widget .form p{margin:0 0 10px}.wpcw-widget .form p.sortable-placeholder{margin:0 0 8px}.wpcw-widget .form label i{margin:0 7px 0 3px}.wpcw-widget .form>p>span{display:table;width:100%}.wpcw-widget .form>p textarea{min-height:80px;resize:none;vertical-align:top}.wpcw-widget .form.ui-sortable>p .widefat{display:table-cell;width:100%}.wpcw-widget .form.ui-sortable .wpcw-widget-sortable-handle{display:table-cell;position:relative;width:25px;background-color:#f7f7f7;border:1px solid #ddd;border-left:none;cursor:row-resize;cursor:grab;cursor:-moz-grab;cursor:-webkit-grab;-webkit-box-shadow:0 1px 1px rgba(0,0,0,.04);-moz-box-shadow:0 1px 1px rgba(0,0,0,.04);box-shadow:0 1px 1px rgba(0,0,0,.04)}.wpcw-widget .form.ui-sortable .ui-sortable-helper *,.wpcw-widget .form.ui-sortable .wpcw-widget-sortable-handle:active{cursor:row-resize;cursor:grabbing;cursor:-moz-grabbing;cursor:-webkit-grabbing}.wpcw-widget .form.ui-sortable span.dashicons{position:absolute;margin:auto;top:0;right:0;bottom:0;left:0;overflow:auto;font-size:18px;color:#a0a5aa}.wpcw-widget .form.ui-sortable span.dashicons:before{position:relative;top:1px}.wpcw-widget .default-fields{display:none}.wpcw-widget-social .icons{margin:10px 0}.wpcw-widget-social .icons a{margin:5px;font-size:20px;display:inline-block}.wpcw-widget-social .icons a:focus{box-shadow:none}.wpcw-widget-social .icons a.inactive:not(:hover){color:#ccc}
|
|
|
trunk/assets/css/style.css
DELETED
|
@@ -1,30 +0,0 @@
|
|
| 1 |
-
.wpcw-widget-contact ul,
|
| 2 |
-
.wpcw-widget-social ul {
|
| 3 |
-
margin: 0;
|
| 4 |
-
padding: 0;
|
| 5 |
-
list-style: none;
|
| 6 |
-
}
|
| 7 |
-
.wpcw-widget-contact ul li,
|
| 8 |
-
.wpcw-widget-social ul li.has-label {
|
| 9 |
-
padding: 10px 0;
|
| 10 |
-
}
|
| 11 |
-
.wpcw-widget-contact ul li:before,
|
| 12 |
-
.wpcw-widget-contact ul li:after,
|
| 13 |
-
.wpcw-widget-social ul li:before,
|
| 14 |
-
.wpcw-widget-social ul li:after {
|
| 15 |
-
display: none;
|
| 16 |
-
}
|
| 17 |
-
.wpcw-widget-contact ul li div {
|
| 18 |
-
display: inline;
|
| 19 |
-
}
|
| 20 |
-
.wpcw-widget-social ul li:not(.has-label) {
|
| 21 |
-
display: inline-block;
|
| 22 |
-
margin: 0 0.75em 0.75em 0;
|
| 23 |
-
border: none;
|
| 24 |
-
}
|
| 25 |
-
.wpcw-widget-social ul li.has-label a {
|
| 26 |
-
display: block;
|
| 27 |
-
}
|
| 28 |
-
.wpcw-widget-social ul li.has-label span {
|
| 29 |
-
margin-right: 0.25em;
|
| 30 |
-
}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
trunk/assets/css/style.min.css
DELETED
|
@@ -1 +0,0 @@
|
|
| 1 |
-
.wpcw-widget-contact ul,.wpcw-widget-social ul{margin:0;padding:0;list-style:none}.wpcw-widget-contact ul li,.wpcw-widget-social ul li.has-label{padding:10px 0}.wpcw-widget-contact ul li:after,.wpcw-widget-contact ul li:before,.wpcw-widget-social ul li:after,.wpcw-widget-social ul li:before{display:none}.wpcw-widget-contact ul li div{display:inline}.wpcw-widget-social ul li:not(.has-label){display:inline-block;margin:0 .75em .75em 0;border:none}.wpcw-widget-social ul li.has-label a{display:block}.wpcw-widget-social ul li.has-label span{margin-right:.25em}
|
|
|
trunk/assets/js/admin.js
DELETED
|
@@ -1,176 +0,0 @@
|
|
| 1 |
-
( function ( $ ) {
|
| 2 |
-
|
| 3 |
-
$.fn.selectString = function ( string ) {
|
| 4 |
-
|
| 5 |
-
var el = $( this )[ 0 ],
|
| 6 |
-
start = el.value.indexOf( string ),
|
| 7 |
-
end = start + string.length;
|
| 8 |
-
|
| 9 |
-
if ( ! el || start < 0 ) {
|
| 10 |
-
|
| 11 |
-
return;
|
| 12 |
-
|
| 13 |
-
} else if ( el.setSelectionRange ) {
|
| 14 |
-
|
| 15 |
-
// Webkit
|
| 16 |
-
el.focus();
|
| 17 |
-
el.setSelectionRange( start, end );
|
| 18 |
-
|
| 19 |
-
} else if ( el.createTextRange ) {
|
| 20 |
-
|
| 21 |
-
var range = el.createTextRange();
|
| 22 |
-
|
| 23 |
-
// IE
|
| 24 |
-
range.collapse( true );
|
| 25 |
-
range.moveEnd( 'character', end );
|
| 26 |
-
range.moveStart( 'character', start );
|
| 27 |
-
range.select();
|
| 28 |
-
|
| 29 |
-
} else if ( el.selectionStart ) {
|
| 30 |
-
|
| 31 |
-
el.selectionStart = start;
|
| 32 |
-
el.selectionEnd = end;
|
| 33 |
-
|
| 34 |
-
}
|
| 35 |
-
|
| 36 |
-
};
|
| 37 |
-
|
| 38 |
-
function start_sortable() {
|
| 39 |
-
|
| 40 |
-
var $contact_form = $( '.wpcw-widget .form' );
|
| 41 |
-
|
| 42 |
-
$contact_form.sortable( {
|
| 43 |
-
items : '> *:not(.not-sortable)',
|
| 44 |
-
handle: '.wpcw-widget-sortable-handle',
|
| 45 |
-
containment: 'parent',
|
| 46 |
-
placeholder: 'sortable-placeholder',
|
| 47 |
-
axis: 'y',
|
| 48 |
-
tolerance: 'pointer',
|
| 49 |
-
forcePlaceholderSize: true,
|
| 50 |
-
cursorAt: { top: 40 },
|
| 51 |
-
stop: function ( e, ui ) {
|
| 52 |
-
// Trigger change for customizer
|
| 53 |
-
$contact_form.find( '.customizer_update' ).val( ui.item.index() ).trigger( 'change' );
|
| 54 |
-
}
|
| 55 |
-
} );
|
| 56 |
-
|
| 57 |
-
}
|
| 58 |
-
|
| 59 |
-
var socialField = {
|
| 60 |
-
|
| 61 |
-
$btn: null,
|
| 62 |
-
$widget: null,
|
| 63 |
-
$template: null,
|
| 64 |
-
|
| 65 |
-
init: function ( e ) {
|
| 66 |
-
|
| 67 |
-
e.preventDefault();
|
| 68 |
-
|
| 69 |
-
var self = socialField;
|
| 70 |
-
|
| 71 |
-
self.$btn = $( this );
|
| 72 |
-
self.$widget = self.$btn.parents( '.wpcw-widget' );
|
| 73 |
-
|
| 74 |
-
// Make sure we don't trigger the animation again on double-click
|
| 75 |
-
if ( self.$widget.find( '.' + self.$btn.data('key') ).is( ':animated' ) ) {
|
| 76 |
-
|
| 77 |
-
return false;
|
| 78 |
-
|
| 79 |
-
}
|
| 80 |
-
|
| 81 |
-
if ( self.$btn.hasClass( 'inactive' ) ) {
|
| 82 |
-
|
| 83 |
-
self.$template = self.$widget.find( '.default-fields' );
|
| 84 |
-
self.$template = $( $.trim( self.$template.clone().html() ) );
|
| 85 |
-
|
| 86 |
-
self.add();
|
| 87 |
-
|
| 88 |
-
return;
|
| 89 |
-
|
| 90 |
-
}
|
| 91 |
-
|
| 92 |
-
self.remove();
|
| 93 |
-
|
| 94 |
-
},
|
| 95 |
-
|
| 96 |
-
add: function () {
|
| 97 |
-
|
| 98 |
-
this.$btn.removeClass( 'inactive' );
|
| 99 |
-
|
| 100 |
-
var data = this.$btn.data();
|
| 101 |
-
|
| 102 |
-
this.$template
|
| 103 |
-
.addClass( data.key )
|
| 104 |
-
.find( 'label' )
|
| 105 |
-
.prop( 'for', data.id );
|
| 106 |
-
|
| 107 |
-
this.$template
|
| 108 |
-
.find( 'input' )
|
| 109 |
-
.prop( 'id', data.id )
|
| 110 |
-
.prop( 'name', data.name )
|
| 111 |
-
.prop( 'value', data.value );
|
| 112 |
-
|
| 113 |
-
this.$template
|
| 114 |
-
.find( 'label span.fa' )
|
| 115 |
-
.prop( 'class', this.$btn.find( 'i' ).attr( 'class' ) );
|
| 116 |
-
|
| 117 |
-
this.$template
|
| 118 |
-
.find( 'label span.text' )
|
| 119 |
-
.text( data.label );
|
| 120 |
-
|
| 121 |
-
this.$template
|
| 122 |
-
.hide()
|
| 123 |
-
.prependTo( this.$widget.find( '.form' ) )
|
| 124 |
-
.stop( true, true )
|
| 125 |
-
.animate( {
|
| 126 |
-
height: 'toggle',
|
| 127 |
-
opacity: 'toggle'
|
| 128 |
-
}, 250 );
|
| 129 |
-
|
| 130 |
-
this.$template.find( 'input' ).selectString( data.select );
|
| 131 |
-
|
| 132 |
-
this.update_customizer();
|
| 133 |
-
|
| 134 |
-
},
|
| 135 |
-
|
| 136 |
-
remove: function () {
|
| 137 |
-
|
| 138 |
-
this.$btn.addClass( 'inactive' );
|
| 139 |
-
|
| 140 |
-
this.$widget
|
| 141 |
-
.find( '.form .' + this.$btn.data( 'key' ) )
|
| 142 |
-
.stop( true, true )
|
| 143 |
-
.animate( {
|
| 144 |
-
height: 'toggle',
|
| 145 |
-
opacity: 'toggle'
|
| 146 |
-
}, 250, function () {
|
| 147 |
-
$( this ).remove();
|
| 148 |
-
} );
|
| 149 |
-
|
| 150 |
-
this.update_customizer();
|
| 151 |
-
|
| 152 |
-
},
|
| 153 |
-
|
| 154 |
-
update_customizer: function () {
|
| 155 |
-
|
| 156 |
-
var count = this.$widget.find( 'div > div' ).length;
|
| 157 |
-
|
| 158 |
-
this.$widget.find( '.customizer_update' ).val( count ).trigger( 'change' );
|
| 159 |
-
|
| 160 |
-
}
|
| 161 |
-
|
| 162 |
-
};
|
| 163 |
-
|
| 164 |
-
$( document ).ready( function ( $ ) {
|
| 165 |
-
|
| 166 |
-
// Social
|
| 167 |
-
$( document ).on( 'click', '.wpcw-widget-social .icons a', socialField.init );
|
| 168 |
-
|
| 169 |
-
// Sortable
|
| 170 |
-
$( document ).on( 'wpcw.change', start_sortable );
|
| 171 |
-
$( document ).on( 'click.widgets-toggle', start_sortable );
|
| 172 |
-
$( document ).on( 'widget-updated', start_sortable );
|
| 173 |
-
|
| 174 |
-
} );
|
| 175 |
-
|
| 176 |
-
} )( jQuery );
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
trunk/assets/js/admin.min.js
DELETED
|
@@ -1 +0,0 @@
|
|
| 1 |
-
!function(a){function b(){var b=a(".wpcw-widget .form");b.sortable({items:"> *:not(.not-sortable)",handle:".wpcw-widget-sortable-handle",containment:"parent",placeholder:"sortable-placeholder",axis:"y",tolerance:"pointer",forcePlaceholderSize:!0,cursorAt:{top:40},stop:function(a,c){b.find(".customizer_update").val(c.item.index()).trigger("change")}})}a.fn.selectString=function(b){var c=a(this)[0],d=c.value.indexOf(b),e=d+b.length;if(c&&!(0>d))if(c.setSelectionRange)c.focus(),c.setSelectionRange(d,e);else if(c.createTextRange){var f=c.createTextRange();f.collapse(!0),f.moveEnd("character",e),f.moveStart("character",d),f.select()}else c.selectionStart&&(c.selectionStart=d,c.selectionEnd=e)};var c={$btn:null,$widget:null,$template:null,init:function(b){b.preventDefault();var d=c;return d.$btn=a(this),d.$widget=d.$btn.parents(".wpcw-widget"),d.$widget.find("."+d.$btn.data("key")).is(":animated")?!1:d.$btn.hasClass("inactive")?(d.$template=d.$widget.find(".default-fields"),d.$template=a(a.trim(d.$template.clone().html())),void d.add()):void d.remove()},add:function(){this.$btn.removeClass("inactive");var a=this.$btn.data();this.$template.addClass(a.key).find("label").prop("for",a.id),this.$template.find("input").prop("id",a.id).prop("name",a.name).prop("value",a.value),this.$template.find("label span.fa").prop("class",this.$btn.find("i").attr("class")),this.$template.find("label span.text").text(a.label),this.$template.hide().prependTo(this.$widget.find(".form")).stop(!0,!0).animate({height:"toggle",opacity:"toggle"},250),this.$template.find("input").selectString(a.select),this.update_customizer()},remove:function(){this.$btn.addClass("inactive"),this.$widget.find(".form ."+this.$btn.data("key")).stop(!0,!0).animate({height:"toggle",opacity:"toggle"},250,function(){a(this).remove()}),this.update_customizer()},update_customizer:function(){var a=this.$widget.find("div > div").length;this.$widget.find(".customizer_update").val(a).trigger("change")}};a(document).ready(function(a){a(document).on("click",".wpcw-widget-social .icons a",c.init),a(document).on("wpcw.change",b),a(document).on("click.widgets-toggle",b),a(document).on("widget-updated",b)})}(jQuery);
|
|
|
trunk/assets/js/customize-preview-helper.js
DELETED
|
@@ -1,9 +0,0 @@
|
|
| 1 |
-
( function ( $, api ) {
|
| 2 |
-
|
| 3 |
-
$( document ).on( 'click', '.wpcw-widgets a.post-edit-link', function() {
|
| 4 |
-
|
| 5 |
-
api.WidgetCustomizerPreview.preview.send( 'focus-widget-control', $( this ).data( 'widget-id' ) );
|
| 6 |
-
|
| 7 |
-
});
|
| 8 |
-
|
| 9 |
-
} )( jQuery, wp.customize );
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
trunk/assets/js/customize-preview-helper.min.js
DELETED
|
@@ -1 +0,0 @@
|
|
| 1 |
-
!function(a,b){a(document).on("click",".wpcw-widgets a.post-edit-link",function(){b.WidgetCustomizerPreview.preview.send("focus-widget-control",a(this).data("widget-id"))})}(jQuery,wp.customize);
|
|
|
trunk/contact-widgets.php
DELETED
|
@@ -1,104 +0,0 @@
|
|
| 1 |
-
<?php
|
| 2 |
-
/**
|
| 3 |
-
* Plugin Name: Contact Widgets
|
| 4 |
-
* Description: Beautifully display social media and contact information on your website with these simple widgets.
|
| 5 |
-
* Version: 1.3.3
|
| 6 |
-
* Author: GoDaddy
|
| 7 |
-
* Author URI: https://godaddy.com
|
| 8 |
-
* Text Domain: contact-widgets
|
| 9 |
-
* Domain Path: /languages
|
| 10 |
-
* License: GPL-2.0
|
| 11 |
-
* License URI: https://www.gnu.org/licenses/gpl-2.0.html
|
| 12 |
-
*
|
| 13 |
-
* Copyright © 2016 GoDaddy Operating Company, LLC. All Rights Reserved.
|
| 14 |
-
*/
|
| 15 |
-
|
| 16 |
-
if ( ! defined( 'ABSPATH' ) ) {
|
| 17 |
-
|
| 18 |
-
exit;
|
| 19 |
-
|
| 20 |
-
}
|
| 21 |
-
|
| 22 |
-
if ( ! class_exists( 'Contact_Widgets' ) ) {
|
| 23 |
-
|
| 24 |
-
final class Contact_Widgets {
|
| 25 |
-
|
| 26 |
-
/**
|
| 27 |
-
* Minimum PHP version
|
| 28 |
-
*
|
| 29 |
-
* @var string
|
| 30 |
-
*/
|
| 31 |
-
private $php_min_version = '5.4';
|
| 32 |
-
|
| 33 |
-
/**
|
| 34 |
-
* Plugin assets URL
|
| 35 |
-
*
|
| 36 |
-
* @var string
|
| 37 |
-
*/
|
| 38 |
-
public static $assets_url;
|
| 39 |
-
|
| 40 |
-
/**
|
| 41 |
-
* Class constructor
|
| 42 |
-
*
|
| 43 |
-
* @param string $cur_php_version
|
| 44 |
-
*/
|
| 45 |
-
public function __construct( $cur_php_version = PHP_VERSION ) {
|
| 46 |
-
|
| 47 |
-
static::$assets_url = plugin_dir_url( __FILE__ ) . 'assets/';
|
| 48 |
-
|
| 49 |
-
$composer_autoloader = __DIR__ . '/vendor/autoload.php';
|
| 50 |
-
|
| 51 |
-
if ( defined( 'WP_CLI' ) && WP_CLI && file_exists( $composer_autoloader ) ) {
|
| 52 |
-
|
| 53 |
-
// This is for enabling codeception
|
| 54 |
-
require_once $composer_autoloader;
|
| 55 |
-
|
| 56 |
-
}
|
| 57 |
-
|
| 58 |
-
add_action( 'plugins_loaded', array( $this, 'i18n' ) );
|
| 59 |
-
|
| 60 |
-
if ( version_compare( $cur_php_version, $this->php_min_version, '<' ) ) {
|
| 61 |
-
|
| 62 |
-
add_action( 'shutdown', array( $this, 'notice' ) );
|
| 63 |
-
|
| 64 |
-
return;
|
| 65 |
-
|
| 66 |
-
}
|
| 67 |
-
|
| 68 |
-
require_once __DIR__ . '/includes/autoload.php';
|
| 69 |
-
|
| 70 |
-
}
|
| 71 |
-
|
| 72 |
-
/**
|
| 73 |
-
* Load languages
|
| 74 |
-
*
|
| 75 |
-
* @action plugins_loaded
|
| 76 |
-
*/
|
| 77 |
-
public function i18n() {
|
| 78 |
-
|
| 79 |
-
load_plugin_textdomain( 'contact-widgets', false, dirname( plugin_basename( __FILE__ ) ) . '/languages' );
|
| 80 |
-
|
| 81 |
-
}
|
| 82 |
-
|
| 83 |
-
/**
|
| 84 |
-
* Display min PHP version notice
|
| 85 |
-
*
|
| 86 |
-
* @action shutdown
|
| 87 |
-
*/
|
| 88 |
-
public function notice() {
|
| 89 |
-
|
| 90 |
-
printf(
|
| 91 |
-
'<div class="error"><p>%s</p></div>',
|
| 92 |
-
sprintf(
|
| 93 |
-
__( 'Contact widgets requires PHP version %s or higher. Please deactivate the plugin and contact your system administrator.', 'contact-widgets' ),
|
| 94 |
-
esc_html( $this->php_min_version )
|
| 95 |
-
)
|
| 96 |
-
);
|
| 97 |
-
|
| 98 |
-
}
|
| 99 |
-
|
| 100 |
-
}
|
| 101 |
-
|
| 102 |
-
new Contact_Widgets;
|
| 103 |
-
|
| 104 |
-
}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
trunk/includes/autoload.php
DELETED
|
@@ -1,39 +0,0 @@
|
|
| 1 |
-
<?php
|
| 2 |
-
|
| 3 |
-
namespace WPCW;
|
| 4 |
-
|
| 5 |
-
if ( ! defined( 'ABSPATH' ) ) {
|
| 6 |
-
|
| 7 |
-
exit;
|
| 8 |
-
|
| 9 |
-
}
|
| 10 |
-
|
| 11 |
-
spl_autoload_register( function( $resource ) {
|
| 12 |
-
|
| 13 |
-
if ( 0 !== strpos( $resource, __NAMESPACE__ ) ) {
|
| 14 |
-
|
| 15 |
-
return;
|
| 16 |
-
|
| 17 |
-
}
|
| 18 |
-
|
| 19 |
-
$resource = strtolower(
|
| 20 |
-
str_replace(
|
| 21 |
-
[ __NAMESPACE__ . '\\', '_' ],
|
| 22 |
-
[ '', '-' ],
|
| 23 |
-
$resource
|
| 24 |
-
)
|
| 25 |
-
);
|
| 26 |
-
|
| 27 |
-
$parts = explode( '\\', $resource );
|
| 28 |
-
$name = array_pop( $parts );
|
| 29 |
-
$files = str_replace( '//', '/', glob( sprintf( '%s/%s/*-%s.php', __DIR__, implode( '/', $parts ), $name ) ) );
|
| 30 |
-
|
| 31 |
-
if ( isset( $files[0] ) && is_readable( $files[0] ) ) {
|
| 32 |
-
|
| 33 |
-
require_once $files[0];
|
| 34 |
-
|
| 35 |
-
}
|
| 36 |
-
|
| 37 |
-
} );
|
| 38 |
-
|
| 39 |
-
add_action( 'plugins_loaded', [ __NAMESPACE__ . '\Plugin', 'init' ] );
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
trunk/includes/class-base-widget.php
DELETED
|
@@ -1,569 +0,0 @@
|
|
| 1 |
-
<?php
|
| 2 |
-
|
| 3 |
-
namespace WPCW;
|
| 4 |
-
|
| 5 |
-
if ( ! defined( 'ABSPATH' ) ) {
|
| 6 |
-
|
| 7 |
-
exit;
|
| 8 |
-
|
| 9 |
-
}
|
| 10 |
-
|
| 11 |
-
abstract class Base_Widget extends \WP_Widget {
|
| 12 |
-
|
| 13 |
-
/**
|
| 14 |
-
* Default properties for fields
|
| 15 |
-
*
|
| 16 |
-
* @var array
|
| 17 |
-
*/
|
| 18 |
-
protected $field_defaults = [
|
| 19 |
-
'key' => '',
|
| 20 |
-
'icon' => '',
|
| 21 |
-
'class' => 'widefat',
|
| 22 |
-
'id' => '',
|
| 23 |
-
'name' => '',
|
| 24 |
-
'label' => '',
|
| 25 |
-
'label_after' => false,
|
| 26 |
-
'description' => '',
|
| 27 |
-
'type' => 'text',
|
| 28 |
-
'sanitizer' => 'sanitize_text_field',
|
| 29 |
-
'escaper' => 'esc_html',
|
| 30 |
-
'form_callback' => 'render_form_input',
|
| 31 |
-
'default' => '', // Used mainly for social fields to add default value
|
| 32 |
-
'value' => '',
|
| 33 |
-
'placeholder' => '',
|
| 34 |
-
'sortable' => true,
|
| 35 |
-
'atts' => '', // Input attributes
|
| 36 |
-
'show_front_end' => true, // Are we showing this field on the front end?
|
| 37 |
-
'show_empty' => false, // Show the field even if value is empty
|
| 38 |
-
'select_options' => [], // Only used if type=select & form_callback=render_form_select
|
| 39 |
-
];
|
| 40 |
-
|
| 41 |
-
/**
|
| 42 |
-
* Widget base constructor
|
| 43 |
-
*
|
| 44 |
-
* @param string $id_base
|
| 45 |
-
* @param string $name
|
| 46 |
-
* @param array $widget_options
|
| 47 |
-
*/
|
| 48 |
-
public function __construct( $id_base, $name, array $widget_options ) {
|
| 49 |
-
|
| 50 |
-
parent::__construct( $id_base, $name, $widget_options );
|
| 51 |
-
|
| 52 |
-
if ( has_action( 'wp_enqueue_scripts', [ $this, 'front_end_enqueue_scripts' ] ) ) {
|
| 53 |
-
|
| 54 |
-
return;
|
| 55 |
-
|
| 56 |
-
}
|
| 57 |
-
|
| 58 |
-
// Enqueue style if widget is active (appears in a sidebar) or if in Customizer preview.
|
| 59 |
-
if ( is_active_widget( false, false, $this->id_base ) || is_customize_preview() ) {
|
| 60 |
-
|
| 61 |
-
add_action( 'wp_enqueue_scripts', [ $this, 'front_end_enqueue_scripts' ] );
|
| 62 |
-
|
| 63 |
-
}
|
| 64 |
-
|
| 65 |
-
}
|
| 66 |
-
|
| 67 |
-
/**
|
| 68 |
-
* Add common ressources needed for the form
|
| 69 |
-
*
|
| 70 |
-
* @param array $instance
|
| 71 |
-
*
|
| 72 |
-
* @return string|void
|
| 73 |
-
*/
|
| 74 |
-
public function form( $instance ) {
|
| 75 |
-
|
| 76 |
-
add_action( 'admin_footer', [ $this, 'enqueue_scripts' ] );
|
| 77 |
-
add_action( 'customize_controls_print_footer_scripts', [ $this, 'print_customizer_scripts' ] );
|
| 78 |
-
|
| 79 |
-
?>
|
| 80 |
-
<script>
|
| 81 |
-
( function ( $ ) {
|
| 82 |
-
|
| 83 |
-
// This let us know that we appended a new widget to reset sortables
|
| 84 |
-
$( document ).trigger( 'wpcw.change' );
|
| 85 |
-
|
| 86 |
-
} )( jQuery );
|
| 87 |
-
</script>
|
| 88 |
-
<?php
|
| 89 |
-
|
| 90 |
-
}
|
| 91 |
-
|
| 92 |
-
/**
|
| 93 |
-
* Sanitize widget form values as they are saved
|
| 94 |
-
*
|
| 95 |
-
* @param array $new_instance Values just sent to be saved.
|
| 96 |
-
* @param array $old_instance Previously saved values from database.
|
| 97 |
-
*
|
| 98 |
-
* @return array Updated safe values to be saved.
|
| 99 |
-
*/
|
| 100 |
-
public function update( $new_instance, $old_instance ) {
|
| 101 |
-
|
| 102 |
-
$fields = $this->get_fields( $old_instance );
|
| 103 |
-
|
| 104 |
-
// Force value for checkbox since they are not posted
|
| 105 |
-
foreach ( $fields as $key => $field ) {
|
| 106 |
-
|
| 107 |
-
if ( 'checkbox' === $field['type'] && ! isset( $new_instance[ $key ]['value'] ) ) {
|
| 108 |
-
|
| 109 |
-
$new_instance[ $key ] = [ 'value' => 'no' ];
|
| 110 |
-
|
| 111 |
-
}
|
| 112 |
-
|
| 113 |
-
}
|
| 114 |
-
|
| 115 |
-
// Starting at 1 since title order is 0
|
| 116 |
-
$order = 1;
|
| 117 |
-
|
| 118 |
-
foreach ( $new_instance as $key => &$instance ) {
|
| 119 |
-
|
| 120 |
-
$sanitizer_callback = $fields[ $key ]['sanitizer'];
|
| 121 |
-
|
| 122 |
-
// Title can't be an array
|
| 123 |
-
if ( 'title' === $key ) {
|
| 124 |
-
|
| 125 |
-
$instance = $sanitizer_callback( $instance['value'] );
|
| 126 |
-
|
| 127 |
-
continue;
|
| 128 |
-
|
| 129 |
-
}
|
| 130 |
-
|
| 131 |
-
$instance['value'] = $sanitizer_callback( $instance['value'] );
|
| 132 |
-
$instance['order'] = $order++;
|
| 133 |
-
|
| 134 |
-
}
|
| 135 |
-
|
| 136 |
-
return $new_instance;
|
| 137 |
-
|
| 138 |
-
}
|
| 139 |
-
|
| 140 |
-
/**
|
| 141 |
-
* Initialize fields for use on front-end of forms
|
| 142 |
-
*
|
| 143 |
-
* @param array $instance
|
| 144 |
-
* @param array $fields (optional)
|
| 145 |
-
* @param bool $ordered (optional)
|
| 146 |
-
*
|
| 147 |
-
* @return array
|
| 148 |
-
*/
|
| 149 |
-
protected function get_fields( array $instance, array $fields = [], $ordered = true ) {
|
| 150 |
-
|
| 151 |
-
$order = 0;
|
| 152 |
-
|
| 153 |
-
foreach ( $fields as $key => &$field ) {
|
| 154 |
-
|
| 155 |
-
$common_properties = [
|
| 156 |
-
'key' => $key,
|
| 157 |
-
'icon' => $key,
|
| 158 |
-
'order' => ! empty( $instance[ $key ]['order'] ) ? absint( $instance[ $key ]['order'] ) : $order,
|
| 159 |
-
'id' => $this->get_field_id( $key ),
|
| 160 |
-
'name' => $this->get_field_name( $key ) . '[value]',
|
| 161 |
-
'value' => ! empty( $instance[ $key ]['value'] ) ? $instance[ $key ]['value'] : '',
|
| 162 |
-
];
|
| 163 |
-
|
| 164 |
-
$common_properties = wp_parse_args( $common_properties, $this->field_defaults );
|
| 165 |
-
$field = wp_parse_args( $field, $common_properties );
|
| 166 |
-
|
| 167 |
-
$default_closure = function( $value ) { return $value; };
|
| 168 |
-
|
| 169 |
-
foreach ( [ 'escaper', 'sanitizer' ] as $key ) {
|
| 170 |
-
|
| 171 |
-
$field[ $key ] = ! is_callable( $field[ $key ] ) ? $default_closure : $field[ $key ];
|
| 172 |
-
|
| 173 |
-
}
|
| 174 |
-
|
| 175 |
-
$order++;
|
| 176 |
-
|
| 177 |
-
}
|
| 178 |
-
|
| 179 |
-
if ( $ordered ) {
|
| 180 |
-
|
| 181 |
-
$fields = $this->order_field( $fields );
|
| 182 |
-
|
| 183 |
-
}
|
| 184 |
-
|
| 185 |
-
return $fields;
|
| 186 |
-
|
| 187 |
-
}
|
| 188 |
-
|
| 189 |
-
/**
|
| 190 |
-
* Order array by field order
|
| 191 |
-
*
|
| 192 |
-
* @param array $fields
|
| 193 |
-
*
|
| 194 |
-
* @return array
|
| 195 |
-
*/
|
| 196 |
-
protected function order_field( array $fields ) {
|
| 197 |
-
|
| 198 |
-
uksort( $fields, function( $a, $b ) use ( $fields ) {
|
| 199 |
-
|
| 200 |
-
// We want title first and order of non sortable fields doesn't matter
|
| 201 |
-
if ( ! $fields[ $a ]['sortable'] && 'title' !== $a ) {
|
| 202 |
-
|
| 203 |
-
return 1;
|
| 204 |
-
|
| 205 |
-
}
|
| 206 |
-
|
| 207 |
-
return ( $fields[ $a ]['order'] < $fields[ $b ]['order'] ) ? -1 : 1;
|
| 208 |
-
|
| 209 |
-
} );
|
| 210 |
-
|
| 211 |
-
return $fields;
|
| 212 |
-
|
| 213 |
-
}
|
| 214 |
-
|
| 215 |
-
/**
|
| 216 |
-
* Check if all the fields we show on the front-end are empty
|
| 217 |
-
*
|
| 218 |
-
* @param array $fields
|
| 219 |
-
*
|
| 220 |
-
* @return bool
|
| 221 |
-
*/
|
| 222 |
-
protected function is_widget_empty( array $fields ) {
|
| 223 |
-
|
| 224 |
-
foreach ( $fields as $key => $field ) {
|
| 225 |
-
|
| 226 |
-
/**
|
| 227 |
-
* Filter to ignore the title when checking if a widget is empty
|
| 228 |
-
*
|
| 229 |
-
* @since 1.0.0
|
| 230 |
-
*
|
| 231 |
-
* @var bool
|
| 232 |
-
*/
|
| 233 |
-
$ignore_title = (bool) apply_filters( 'wpcw_is_widget_empty_ignore_title', false );
|
| 234 |
-
|
| 235 |
-
if ( 'title' === $key && $ignore_title ) {
|
| 236 |
-
|
| 237 |
-
continue;
|
| 238 |
-
|
| 239 |
-
}
|
| 240 |
-
|
| 241 |
-
if ( ! empty( $field['value'] ) && $field['show_front_end'] ) {
|
| 242 |
-
|
| 243 |
-
return false;
|
| 244 |
-
|
| 245 |
-
}
|
| 246 |
-
|
| 247 |
-
}
|
| 248 |
-
|
| 249 |
-
return true;
|
| 250 |
-
|
| 251 |
-
}
|
| 252 |
-
|
| 253 |
-
/**
|
| 254 |
-
* Print current label
|
| 255 |
-
*
|
| 256 |
-
* @param array $field
|
| 257 |
-
*/
|
| 258 |
-
protected function print_label( array $field ) {
|
| 259 |
-
|
| 260 |
-
printf(
|
| 261 |
-
' <label for="%s" title="%s">%s</label>',
|
| 262 |
-
esc_attr( $field['id'] ),
|
| 263 |
-
esc_attr( $field['description'] ),
|
| 264 |
-
esc_html( $field['label'] )
|
| 265 |
-
);
|
| 266 |
-
|
| 267 |
-
}
|
| 268 |
-
|
| 269 |
-
/**
|
| 270 |
-
* Print label and wrapper
|
| 271 |
-
* @param array $field
|
| 272 |
-
*/
|
| 273 |
-
protected function before_form_field( array $field ) {
|
| 274 |
-
|
| 275 |
-
$classes = [ $field['type'], $field['key'] ];
|
| 276 |
-
|
| 277 |
-
if ( ! $field['sortable'] ) {
|
| 278 |
-
|
| 279 |
-
$classes[] = 'not-sortable';
|
| 280 |
-
|
| 281 |
-
}
|
| 282 |
-
|
| 283 |
-
if ( $field['label_after'] ) {
|
| 284 |
-
|
| 285 |
-
$classes[] = 'label-after';
|
| 286 |
-
|
| 287 |
-
}
|
| 288 |
-
|
| 289 |
-
printf(
|
| 290 |
-
'<p class="%s">',
|
| 291 |
-
implode( ' ', $classes )
|
| 292 |
-
);
|
| 293 |
-
|
| 294 |
-
if ( ! $field['label_after'] ) {
|
| 295 |
-
|
| 296 |
-
$this->print_label( $field );
|
| 297 |
-
|
| 298 |
-
}
|
| 299 |
-
|
| 300 |
-
if ( $field['sortable'] ) {
|
| 301 |
-
|
| 302 |
-
echo '<span>';
|
| 303 |
-
|
| 304 |
-
}
|
| 305 |
-
|
| 306 |
-
}
|
| 307 |
-
|
| 308 |
-
/**
|
| 309 |
-
* Render input field for admin form
|
| 310 |
-
*
|
| 311 |
-
* @param array $field
|
| 312 |
-
*/
|
| 313 |
-
protected function render_form_input( array $field ) {
|
| 314 |
-
|
| 315 |
-
$this->before_form_field( $field );
|
| 316 |
-
|
| 317 |
-
printf(
|
| 318 |
-
'<input class="%s" id="%s" name="%s" type="%s" value="%s" placeholder="%s" autocomplete="off" %s>',
|
| 319 |
-
esc_attr( $field['class'] ),
|
| 320 |
-
esc_attr( $field['id'] ),
|
| 321 |
-
esc_attr( $field['name'] ),
|
| 322 |
-
esc_attr( $field['type'] ),
|
| 323 |
-
esc_attr( $field['value'] ),
|
| 324 |
-
esc_attr( $field['placeholder'] ),
|
| 325 |
-
esc_attr( $field['atts'] )
|
| 326 |
-
);
|
| 327 |
-
|
| 328 |
-
if ( $field['label_after'] ) {
|
| 329 |
-
|
| 330 |
-
$this->print_label( $field );
|
| 331 |
-
|
| 332 |
-
}
|
| 333 |
-
|
| 334 |
-
$this->after_form_field( $field );
|
| 335 |
-
|
| 336 |
-
}
|
| 337 |
-
|
| 338 |
-
/**
|
| 339 |
-
* Render select field
|
| 340 |
-
*
|
| 341 |
-
* @param array $field
|
| 342 |
-
*/
|
| 343 |
-
protected function render_form_select( array $field ) {
|
| 344 |
-
|
| 345 |
-
$this->before_form_field( $field );
|
| 346 |
-
|
| 347 |
-
printf(
|
| 348 |
-
'<select class="%s" id="%s" name="%s" autocomplete="off">',
|
| 349 |
-
esc_attr( $field['class'] ),
|
| 350 |
-
esc_attr( $field['id'] ),
|
| 351 |
-
esc_attr( $field['name'] )
|
| 352 |
-
);
|
| 353 |
-
|
| 354 |
-
foreach ( $field['select_options'] as $value => $name ) {
|
| 355 |
-
|
| 356 |
-
printf(
|
| 357 |
-
'<option value="%s" %s>%s</option>',
|
| 358 |
-
$value,
|
| 359 |
-
$field['value'] === $value ? 'selected' : '',
|
| 360 |
-
$name
|
| 361 |
-
);
|
| 362 |
-
|
| 363 |
-
}
|
| 364 |
-
|
| 365 |
-
echo '</select>';
|
| 366 |
-
|
| 367 |
-
if ( $field['label_after'] ) {
|
| 368 |
-
|
| 369 |
-
$this->print_label( $field );
|
| 370 |
-
|
| 371 |
-
}
|
| 372 |
-
|
| 373 |
-
$this->after_form_field( $field );
|
| 374 |
-
|
| 375 |
-
}
|
| 376 |
-
|
| 377 |
-
/**
|
| 378 |
-
* Render textarea field for admin widget form
|
| 379 |
-
*
|
| 380 |
-
* @param array $field
|
| 381 |
-
*/
|
| 382 |
-
protected function render_form_textarea( array $field ) {
|
| 383 |
-
|
| 384 |
-
$this->before_form_field( $field );
|
| 385 |
-
|
| 386 |
-
printf(
|
| 387 |
-
'<textarea class="%s" id="%s" name="%s" placeholder="%s">%s</textarea>',
|
| 388 |
-
esc_attr( $field['class'] ),
|
| 389 |
-
esc_attr( $field['id'] ),
|
| 390 |
-
esc_attr( $field['name'] ),
|
| 391 |
-
esc_attr( $field['placeholder'] ),
|
| 392 |
-
esc_textarea( $field['value'] )
|
| 393 |
-
);
|
| 394 |
-
|
| 395 |
-
$this->after_form_field( $field );
|
| 396 |
-
|
| 397 |
-
}
|
| 398 |
-
|
| 399 |
-
/**
|
| 400 |
-
* Close wrapper of form field
|
| 401 |
-
*
|
| 402 |
-
* @param array $field
|
| 403 |
-
*/
|
| 404 |
-
protected function after_form_field( array $field ) {
|
| 405 |
-
|
| 406 |
-
if ( $field['sortable'] ) {
|
| 407 |
-
|
| 408 |
-
echo '<span class="wpcw-widget-sortable-handle"><span class="dashicons dashicons-menu"></span></span></span>';
|
| 409 |
-
|
| 410 |
-
}
|
| 411 |
-
|
| 412 |
-
echo '</p>';
|
| 413 |
-
|
| 414 |
-
}
|
| 415 |
-
|
| 416 |
-
/**
|
| 417 |
-
* Print beginning of front-end display
|
| 418 |
-
*
|
| 419 |
-
* @param array $args
|
| 420 |
-
* @param array $fields
|
| 421 |
-
*/
|
| 422 |
-
protected function before_widget( array $args, array &$fields ) {
|
| 423 |
-
|
| 424 |
-
$title = array_shift( $fields );
|
| 425 |
-
echo $args['before_widget'];
|
| 426 |
-
|
| 427 |
-
if ( ! empty( $title['value'] ) ) {
|
| 428 |
-
|
| 429 |
-
/**
|
| 430 |
-
* Filter the widget title
|
| 431 |
-
*
|
| 432 |
-
* @since 1.0.0
|
| 433 |
-
*
|
| 434 |
-
* @var string
|
| 435 |
-
*/
|
| 436 |
-
$title = (string) apply_filters( 'widget_title', $title['value'] );
|
| 437 |
-
|
| 438 |
-
echo $args['before_title'] . $title . $args['after_title'];
|
| 439 |
-
|
| 440 |
-
}
|
| 441 |
-
|
| 442 |
-
echo '<ul>';
|
| 443 |
-
|
| 444 |
-
}
|
| 445 |
-
|
| 446 |
-
/**
|
| 447 |
-
* Print end of front-end display
|
| 448 |
-
*
|
| 449 |
-
* @param array $args
|
| 450 |
-
* @param array $fields
|
| 451 |
-
*/
|
| 452 |
-
protected function after_widget( array $args, array &$fields ) {
|
| 453 |
-
|
| 454 |
-
echo '</ul>';
|
| 455 |
-
|
| 456 |
-
if (
|
| 457 |
-
! is_customize_preview()
|
| 458 |
-
&& current_user_can( 'edit_theme_options' )
|
| 459 |
-
&& current_user_can( 'customize' )
|
| 460 |
-
&& isset( $args['id'] )
|
| 461 |
-
) {
|
| 462 |
-
|
| 463 |
-
// admin-bar.php -> wp_admin_bar_customize_menu()
|
| 464 |
-
$current_url = ( is_ssl() ? 'https://' : 'http://' ) . $_SERVER['HTTP_HOST'] . $_SERVER['REQUEST_URI'];
|
| 465 |
-
|
| 466 |
-
$edit_url = add_query_arg(
|
| 467 |
-
[
|
| 468 |
-
'autofocus' => [
|
| 469 |
-
'section' => 'sidebar-widgets-' . $args['id'],
|
| 470 |
-
'control' => 'widget_' . preg_replace( '/-(\d)/', '[$1]', $args['widget_id'] ),
|
| 471 |
-
],
|
| 472 |
-
'url' => urlencode( $current_url ),
|
| 473 |
-
],
|
| 474 |
-
wp_customize_url()
|
| 475 |
-
);
|
| 476 |
-
|
| 477 |
-
printf(
|
| 478 |
-
'<a class="post-edit-link" data-widget-id="%s" href="%s">%s</a>',
|
| 479 |
-
esc_attr( $args['widget_id'] ),
|
| 480 |
-
esc_url( $edit_url ),
|
| 481 |
-
__( 'Edit' )
|
| 482 |
-
);
|
| 483 |
-
|
| 484 |
-
}
|
| 485 |
-
|
| 486 |
-
echo $args['after_widget'];
|
| 487 |
-
|
| 488 |
-
}
|
| 489 |
-
|
| 490 |
-
/**
|
| 491 |
-
* Helper to output only 'checked' and not checked='checked'
|
| 492 |
-
* IE 9 & 10 don't support the latter
|
| 493 |
-
*
|
| 494 |
-
* @param mixed $helper One of the values to compare
|
| 495 |
-
* @param mixed $current (true) The other value to compare if not just true
|
| 496 |
-
* @param bool $echo Whether to echo or just return the string
|
| 497 |
-
* @return string html attribute or empty string
|
| 498 |
-
*/
|
| 499 |
-
public function checked( $helper, $current, $echo = false ) {
|
| 500 |
-
|
| 501 |
-
$result = (string) $helper === (string) $current ? 'checked' : '';
|
| 502 |
-
|
| 503 |
-
if ( $echo ) {
|
| 504 |
-
|
| 505 |
-
echo $result;
|
| 506 |
-
|
| 507 |
-
}
|
| 508 |
-
|
| 509 |
-
return $result;
|
| 510 |
-
|
| 511 |
-
}
|
| 512 |
-
|
| 513 |
-
/**
|
| 514 |
-
* Print footer script and styles
|
| 515 |
-
*/
|
| 516 |
-
public function enqueue_scripts() {
|
| 517 |
-
|
| 518 |
-
$suffix = SCRIPT_DEBUG ? '' : '.min';
|
| 519 |
-
|
| 520 |
-
wp_enqueue_style( 'font-awesome', '//maxcdn.bootstrapcdn.com/font-awesome/4.5.0/css/font-awesome.min.css', [], '4.5.0' );
|
| 521 |
-
wp_enqueue_style( 'wpcw-admin', \Contact_Widgets::$assets_url . "css/admin{$suffix}.css", [ 'font-awesome' ], Plugin::$version );
|
| 522 |
-
wp_enqueue_script( 'wpcw-admin', \Contact_Widgets::$assets_url . "js/admin{$suffix}.js", [ 'jquery' ], Plugin::$version, true );
|
| 523 |
-
|
| 524 |
-
if ( $GLOBALS['is_IE'] ) {
|
| 525 |
-
|
| 526 |
-
wp_enqueue_style( 'wpcw-admin-ie', \Contact_Widgets::$assets_url . "css/admin-ie{$suffix}.css", [ 'wpcw-admin' ], Plugin::$version );
|
| 527 |
-
|
| 528 |
-
}
|
| 529 |
-
|
| 530 |
-
}
|
| 531 |
-
|
| 532 |
-
/**
|
| 533 |
-
* Print customizer script
|
| 534 |
-
*/
|
| 535 |
-
public function print_customizer_scripts() {
|
| 536 |
-
|
| 537 |
-
$this->enqueue_scripts();
|
| 538 |
-
|
| 539 |
-
wp_print_styles( [ 'font-awesome', 'wpcw-admin', 'wpcw-admin-ie' ] );
|
| 540 |
-
wp_print_scripts( 'wpcw-admin' );
|
| 541 |
-
|
| 542 |
-
}
|
| 543 |
-
|
| 544 |
-
/**
|
| 545 |
-
* Enqueue scripts and styles for front-end use
|
| 546 |
-
*
|
| 547 |
-
* @action wp_enqueue_scripts
|
| 548 |
-
*/
|
| 549 |
-
public function front_end_enqueue_scripts() {
|
| 550 |
-
|
| 551 |
-
$suffix = SCRIPT_DEBUG ? '' : '.min';
|
| 552 |
-
|
| 553 |
-
wp_enqueue_style( 'wpcw', \Contact_Widgets::$assets_url . "css/style{$suffix}.css", [], Plugin::$version );
|
| 554 |
-
|
| 555 |
-
if ( is_customize_preview() ) {
|
| 556 |
-
|
| 557 |
-
if ( ! wp_script_is( 'jquery', 'enqueued' ) ) {
|
| 558 |
-
|
| 559 |
-
wp_enqueue_script( 'jquery' );
|
| 560 |
-
|
| 561 |
-
}
|
| 562 |
-
|
| 563 |
-
wp_enqueue_script( 'wpcw-helper', \Contact_Widgets::$assets_url . "js/customize-preview-helper{$suffix}.js", [ 'jquery' ], Plugin::$version, true );
|
| 564 |
-
|
| 565 |
-
}
|
| 566 |
-
|
| 567 |
-
}
|
| 568 |
-
|
| 569 |
-
}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
trunk/includes/class-contact.php
DELETED
|
@@ -1,252 +0,0 @@
|
|
| 1 |
-
<?php
|
| 2 |
-
|
| 3 |
-
namespace WPCW;
|
| 4 |
-
|
| 5 |
-
if ( ! defined( 'ABSPATH' ) ) {
|
| 6 |
-
|
| 7 |
-
exit;
|
| 8 |
-
|
| 9 |
-
}
|
| 10 |
-
|
| 11 |
-
final class Contact extends Base_Widget {
|
| 12 |
-
|
| 13 |
-
/**
|
| 14 |
-
* Widget constructor
|
| 15 |
-
*/
|
| 16 |
-
public function __construct() {
|
| 17 |
-
|
| 18 |
-
$widget_options = [
|
| 19 |
-
'classname' => 'wpcw-widgets wpcw-widget-contact',
|
| 20 |
-
'description' => __( 'Display your contact information.', 'contact-widgets' ),
|
| 21 |
-
'customize_selective_refresh' => true,
|
| 22 |
-
];
|
| 23 |
-
|
| 24 |
-
parent::__construct(
|
| 25 |
-
'wpcw_contact',
|
| 26 |
-
__( 'Contact Details', 'contact-widgets' ),
|
| 27 |
-
$widget_options
|
| 28 |
-
);
|
| 29 |
-
|
| 30 |
-
}
|
| 31 |
-
|
| 32 |
-
/**
|
| 33 |
-
* Widget form fields
|
| 34 |
-
*
|
| 35 |
-
* @param array $instance The widget options
|
| 36 |
-
*
|
| 37 |
-
* @return string|void
|
| 38 |
-
*/
|
| 39 |
-
public function form( $instance ) {
|
| 40 |
-
|
| 41 |
-
parent::form( $instance );
|
| 42 |
-
|
| 43 |
-
$fields = $this->get_fields( $instance );
|
| 44 |
-
|
| 45 |
-
echo '<div class="wpcw-widget wpcw-widget-contact">';
|
| 46 |
-
|
| 47 |
-
echo '<div class="title">';
|
| 48 |
-
|
| 49 |
-
// Title field
|
| 50 |
-
$this->render_form_input( array_shift( $fields ) );
|
| 51 |
-
|
| 52 |
-
echo '</div>';
|
| 53 |
-
|
| 54 |
-
echo '<div class="form">';
|
| 55 |
-
|
| 56 |
-
foreach ( $fields as $key => $field ) {
|
| 57 |
-
|
| 58 |
-
$method = $field['form_callback'];
|
| 59 |
-
|
| 60 |
-
if ( is_callable( [ $this, $method ] ) ) {
|
| 61 |
-
|
| 62 |
-
$this->$method( $field );
|
| 63 |
-
|
| 64 |
-
}
|
| 65 |
-
|
| 66 |
-
}
|
| 67 |
-
|
| 68 |
-
// Workaround customizer refresh @props @westonruter
|
| 69 |
-
echo '<input class="customizer_update" type="hidden" value="">';
|
| 70 |
-
|
| 71 |
-
echo '</div>'; // End form
|
| 72 |
-
|
| 73 |
-
echo '</div>'; // End wpcw-widget-contact
|
| 74 |
-
|
| 75 |
-
}
|
| 76 |
-
|
| 77 |
-
/**
|
| 78 |
-
* Front-end display
|
| 79 |
-
*
|
| 80 |
-
* @param array $args
|
| 81 |
-
* @param array $instance
|
| 82 |
-
*/
|
| 83 |
-
public function widget( $args, $instance ) {
|
| 84 |
-
|
| 85 |
-
$fields = $this->get_fields( $instance );
|
| 86 |
-
|
| 87 |
-
if ( $this->is_widget_empty( $fields ) ) {
|
| 88 |
-
|
| 89 |
-
return;
|
| 90 |
-
|
| 91 |
-
}
|
| 92 |
-
|
| 93 |
-
$this->before_widget( $args, $fields );
|
| 94 |
-
|
| 95 |
-
$display_labels = ( 'yes' === $instance['labels']['value'] );
|
| 96 |
-
|
| 97 |
-
foreach ( $fields as $field ) {
|
| 98 |
-
|
| 99 |
-
if ( empty( $field['value'] ) || ! $field['show_front_end'] ) {
|
| 100 |
-
|
| 101 |
-
continue;
|
| 102 |
-
|
| 103 |
-
}
|
| 104 |
-
|
| 105 |
-
$escape_callback = $field['escaper'];
|
| 106 |
-
$label = str_replace( ':', '', $field['label'] );
|
| 107 |
-
|
| 108 |
-
printf(
|
| 109 |
-
'<li class="%s">%s<div>%s</div></li>',
|
| 110 |
-
$display_labels ? 'has-label' : 'no-label',
|
| 111 |
-
$display_labels ? sprintf( '<strong>%s</strong><br>', esc_html( $label ) ) : '',
|
| 112 |
-
$escape_callback( $field['value'] )
|
| 113 |
-
);
|
| 114 |
-
|
| 115 |
-
}
|
| 116 |
-
|
| 117 |
-
if ( 'yes' === $instance['map']['value'] && ! empty( $fields['address']['value'] ) ) {
|
| 118 |
-
|
| 119 |
-
printf(
|
| 120 |
-
'<li class="has-map"><iframe src="//www.google.com/maps?q=%s&output=embed&hl=%s"></iframe></li>',
|
| 121 |
-
urlencode( trim( strip_tags( $fields['address']['value'] ) ) ),
|
| 122 |
-
urlencode( $this->get_google_maps_locale() )
|
| 123 |
-
);
|
| 124 |
-
|
| 125 |
-
}
|
| 126 |
-
|
| 127 |
-
$this->after_widget( $args, $fields );
|
| 128 |
-
|
| 129 |
-
}
|
| 130 |
-
|
| 131 |
-
/**
|
| 132 |
-
* Initialize fields for use on front-end of forms
|
| 133 |
-
*
|
| 134 |
-
* @param array $instance
|
| 135 |
-
* @param array $fields
|
| 136 |
-
* @param bool $ordered
|
| 137 |
-
*
|
| 138 |
-
* @return array
|
| 139 |
-
*/
|
| 140 |
-
protected function get_fields( array $instance, array $fields = [], $ordered = true ) {
|
| 141 |
-
|
| 142 |
-
$fields = [
|
| 143 |
-
'title' => [
|
| 144 |
-
'label' => __( 'Title:', 'contact-widgets' ),
|
| 145 |
-
'description' => __( 'The title of widget. Leave empty for no title.', 'contact-widgets' ),
|
| 146 |
-
'value' => ! empty( $instance['title'] ) ? $instance['title'] : '',
|
| 147 |
-
'sortable' => false,
|
| 148 |
-
],
|
| 149 |
-
'email' => [
|
| 150 |
-
'label' => __( 'Email:', 'contact-widgets' ),
|
| 151 |
-
'type' => 'email',
|
| 152 |
-
'sanitizer' => 'sanitize_email',
|
| 153 |
-
'escaper' => function( $value ) {
|
| 154 |
-
// Work around until https://core.trac.wordpress.org/ticket/32787
|
| 155 |
-
return sprintf( '<a href="mailto:%1$s">%1$s</a>', antispambot( $value ) );
|
| 156 |
-
},
|
| 157 |
-
'description' => __( 'An email address where website vistors can contact you.', 'contact-widgets' ),
|
| 158 |
-
],
|
| 159 |
-
'phone' => [
|
| 160 |
-
'label' => __( 'Phone:', 'contact-widgets' ),
|
| 161 |
-
'type' => 'text',
|
| 162 |
-
'description' => __( 'A phone number that website vistors can call if they have questions.', 'contact-widgets' ),
|
| 163 |
-
],
|
| 164 |
-
'fax' => [
|
| 165 |
-
'label' => __( 'Fax:', 'contact-widgets' ),
|
| 166 |
-
'type' => 'text',
|
| 167 |
-
'description' => __( 'A fax number that website vistors can use to send important documents.', 'contact-widgets' ),
|
| 168 |
-
],
|
| 169 |
-
'address' => [
|
| 170 |
-
'label' => __( 'Address:', 'contact-widgets' ),
|
| 171 |
-
'type' => 'textarea',
|
| 172 |
-
'sanitizer' => function( $value ) { return current_user_can( 'unfiltered_html' ) ? $value : wp_kses_post( stripslashes( $value ) ); },
|
| 173 |
-
'escaper' => function( $value ) { return nl2br( apply_filters( 'widget_text', $value ) ); },
|
| 174 |
-
'form_callback' => 'render_form_textarea',
|
| 175 |
-
'description' => __( 'A physical address where website vistors can go to visit you in person.', 'contact-widgets' ),
|
| 176 |
-
],
|
| 177 |
-
'labels' => [
|
| 178 |
-
'label' => __( 'Display labels?', 'contact-widgets' ),
|
| 179 |
-
'class' => '',
|
| 180 |
-
'label_after' => true,
|
| 181 |
-
'type' => 'checkbox',
|
| 182 |
-
'sortable' => false,
|
| 183 |
-
'value' => 'yes',
|
| 184 |
-
'atts' => $this->checked( 'yes', isset( $instance['labels']['value'] ) ? $instance['labels']['value'] : 'yes' ),
|
| 185 |
-
'show_front_end' => false,
|
| 186 |
-
],
|
| 187 |
-
'map' => [
|
| 188 |
-
'label' => __( 'Display map of address?', 'contact-widgets' ),
|
| 189 |
-
'class' => '',
|
| 190 |
-
'label_after' => true,
|
| 191 |
-
'type' => 'checkbox',
|
| 192 |
-
'sortable' => false,
|
| 193 |
-
'value' => 'yes',
|
| 194 |
-
'atts' => $this->checked( 'yes', isset( $instance['map']['value'] ) ? $instance['map']['value'] : 'yes' ),
|
| 195 |
-
'show_front_end' => false,
|
| 196 |
-
],
|
| 197 |
-
];
|
| 198 |
-
|
| 199 |
-
$fields = apply_filters( 'wpcw_widget_contact_custom_fields', $fields, $instance );
|
| 200 |
-
$fields = parent::get_fields( $instance, $fields );
|
| 201 |
-
|
| 202 |
-
/**
|
| 203 |
-
* Filter the contact fields
|
| 204 |
-
*
|
| 205 |
-
* @since 1.0.0
|
| 206 |
-
*
|
| 207 |
-
* @var array
|
| 208 |
-
*/
|
| 209 |
-
return (array) apply_filters( 'wpcw_widget_contact_fields', $fields, $instance );
|
| 210 |
-
|
| 211 |
-
}
|
| 212 |
-
|
| 213 |
-
/**
|
| 214 |
-
* Get the current locale in Google Maps API format
|
| 215 |
-
*
|
| 216 |
-
* @link https://developers.google.com/maps/faq#languagesupport
|
| 217 |
-
*
|
| 218 |
-
* @return string
|
| 219 |
-
*/
|
| 220 |
-
protected function get_google_maps_locale() {
|
| 221 |
-
|
| 222 |
-
$locale = get_locale();
|
| 223 |
-
|
| 224 |
-
switch ( $locale ) {
|
| 225 |
-
|
| 226 |
-
case 'en_AU' :
|
| 227 |
-
case 'en_GB' :
|
| 228 |
-
case 'pt_BR' :
|
| 229 |
-
case 'pt_PT' :
|
| 230 |
-
case 'zh_TW' :
|
| 231 |
-
|
| 232 |
-
$locale = str_replace( '_', '-', $locale );
|
| 233 |
-
|
| 234 |
-
break;
|
| 235 |
-
|
| 236 |
-
case 'zh_CH' :
|
| 237 |
-
|
| 238 |
-
$locale = 'zh-CN';
|
| 239 |
-
|
| 240 |
-
break;
|
| 241 |
-
|
| 242 |
-
default :
|
| 243 |
-
|
| 244 |
-
$locale = substr( $locale, 0, 2 );
|
| 245 |
-
|
| 246 |
-
}
|
| 247 |
-
|
| 248 |
-
return $locale;
|
| 249 |
-
|
| 250 |
-
}
|
| 251 |
-
|
| 252 |
-
}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
trunk/includes/class-plugin.php
DELETED
|
@@ -1,39 +0,0 @@
|
|
| 1 |
-
<?php
|
| 2 |
-
|
| 3 |
-
namespace WPCW;
|
| 4 |
-
|
| 5 |
-
if ( ! defined( 'ABSPATH' ) ) {
|
| 6 |
-
|
| 7 |
-
exit;
|
| 8 |
-
|
| 9 |
-
}
|
| 10 |
-
|
| 11 |
-
class Plugin {
|
| 12 |
-
|
| 13 |
-
/**
|
| 14 |
-
* Plugin version
|
| 15 |
-
*
|
| 16 |
-
* @var string
|
| 17 |
-
*/
|
| 18 |
-
public static $version = '1.0.1';
|
| 19 |
-
|
| 20 |
-
/**
|
| 21 |
-
* Class constructor
|
| 22 |
-
*/
|
| 23 |
-
public static function init() {
|
| 24 |
-
|
| 25 |
-
add_action( 'widgets_init', [ get_called_class(), 'register_widgets' ] );
|
| 26 |
-
|
| 27 |
-
}
|
| 28 |
-
|
| 29 |
-
/**
|
| 30 |
-
* Register our custom widget using the api
|
| 31 |
-
*/
|
| 32 |
-
public static function register_widgets() {
|
| 33 |
-
|
| 34 |
-
register_widget( __NAMESPACE__ . '\Contact' );
|
| 35 |
-
register_widget( __NAMESPACE__ . '\Social' );
|
| 36 |
-
|
| 37 |
-
}
|
| 38 |
-
|
| 39 |
-
}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
trunk/includes/class-social.php
DELETED
|
@@ -1,275 +0,0 @@
|
|
| 1 |
-
<?php
|
| 2 |
-
|
| 3 |
-
namespace WPCW;
|
| 4 |
-
|
| 5 |
-
if ( ! defined( 'ABSPATH' ) ) {
|
| 6 |
-
|
| 7 |
-
exit;
|
| 8 |
-
|
| 9 |
-
}
|
| 10 |
-
|
| 11 |
-
final class Social extends Base_Widget {
|
| 12 |
-
|
| 13 |
-
/**
|
| 14 |
-
* Widget constructor
|
| 15 |
-
*/
|
| 16 |
-
public function __construct() {
|
| 17 |
-
|
| 18 |
-
$widget_options = [
|
| 19 |
-
'classname' => 'wpcw-widgets wpcw-widget-social',
|
| 20 |
-
'description' => __( 'Display links to your social media profiles.', 'contact-widgets' ),
|
| 21 |
-
'customize_selective_refresh' => true,
|
| 22 |
-
];
|
| 23 |
-
|
| 24 |
-
parent::__construct(
|
| 25 |
-
'wpcw_social',
|
| 26 |
-
__( 'Social Profiles', 'contact-widgets' ),
|
| 27 |
-
$widget_options
|
| 28 |
-
);
|
| 29 |
-
|
| 30 |
-
}
|
| 31 |
-
|
| 32 |
-
/**
|
| 33 |
-
* Widget form fields
|
| 34 |
-
*
|
| 35 |
-
* @param array $instance
|
| 36 |
-
*
|
| 37 |
-
* @return string|void
|
| 38 |
-
*/
|
| 39 |
-
public function form( $instance ) {
|
| 40 |
-
|
| 41 |
-
parent::form( $instance );
|
| 42 |
-
|
| 43 |
-
$fields = $this->get_fields( $instance );
|
| 44 |
-
$title_field = array_shift( $fields );
|
| 45 |
-
|
| 46 |
-
echo '<div class="wpcw-widget wpcw-widget-social">';
|
| 47 |
-
|
| 48 |
-
echo '<div class="title">';
|
| 49 |
-
|
| 50 |
-
// Title field
|
| 51 |
-
$this->render_form_input( $title_field );
|
| 52 |
-
|
| 53 |
-
echo '</div>';
|
| 54 |
-
|
| 55 |
-
echo '<div class="icons">';
|
| 56 |
-
|
| 57 |
-
foreach ( $fields as $key => $field ) {
|
| 58 |
-
|
| 59 |
-
if ( ! isset( $field['social'] ) ) {
|
| 60 |
-
|
| 61 |
-
continue;
|
| 62 |
-
|
| 63 |
-
}
|
| 64 |
-
|
| 65 |
-
printf(
|
| 66 |
-
'<a href="#"
|
| 67 |
-
class="%s"
|
| 68 |
-
title="%s"
|
| 69 |
-
data-key="%s"
|
| 70 |
-
data-value="%s"
|
| 71 |
-
data-select="%s"
|
| 72 |
-
data-name="%s"
|
| 73 |
-
data-id="%s"
|
| 74 |
-
data-label="%s">
|
| 75 |
-
<i class="fa fa-%s"></i>
|
| 76 |
-
</a>',
|
| 77 |
-
empty( $field['value'] ) ? 'inactive' : '',
|
| 78 |
-
esc_attr( $field['label'] ),
|
| 79 |
-
esc_attr( $key ),
|
| 80 |
-
esc_attr( $field['default'] ),
|
| 81 |
-
esc_attr( $field['select'] ),
|
| 82 |
-
esc_attr( $field['name'] ),
|
| 83 |
-
esc_attr( $field['id'] ),
|
| 84 |
-
esc_attr( $field['label'] ),
|
| 85 |
-
esc_attr( $field['icon'] )
|
| 86 |
-
);
|
| 87 |
-
|
| 88 |
-
}
|
| 89 |
-
|
| 90 |
-
echo '</div>';
|
| 91 |
-
|
| 92 |
-
echo '<div class="form">';
|
| 93 |
-
|
| 94 |
-
$fields = $this->order_field( $fields );
|
| 95 |
-
|
| 96 |
-
foreach ( $fields as $key => $field ) {
|
| 97 |
-
|
| 98 |
-
$method = $field['form_callback'];
|
| 99 |
-
|
| 100 |
-
if (
|
| 101 |
-
is_callable( [ $this, $method ] )
|
| 102 |
-
&&
|
| 103 |
-
( ! empty( $field['value'] ) || $field['show_empty'] )
|
| 104 |
-
) {
|
| 105 |
-
|
| 106 |
-
$this->$method( $field );
|
| 107 |
-
|
| 108 |
-
}
|
| 109 |
-
|
| 110 |
-
}
|
| 111 |
-
|
| 112 |
-
// Workaround customizer refresh @props @westonruter
|
| 113 |
-
echo '<input class="customizer_update" type="hidden" value="">';
|
| 114 |
-
|
| 115 |
-
echo '</div>'; // End form
|
| 116 |
-
|
| 117 |
-
echo '<div class="default-fields">';
|
| 118 |
-
|
| 119 |
-
// Template form for JS use
|
| 120 |
-
$this->render_form_input( $this->field_defaults + [ 'social' => true ] );
|
| 121 |
-
|
| 122 |
-
echo '</div>'; // End default-fields
|
| 123 |
-
|
| 124 |
-
echo '</div>'; // End wpcw-widget-social
|
| 125 |
-
|
| 126 |
-
}
|
| 127 |
-
|
| 128 |
-
/**
|
| 129 |
-
* Front-end display
|
| 130 |
-
*
|
| 131 |
-
* @param array $args
|
| 132 |
-
* @param array $instance
|
| 133 |
-
*/
|
| 134 |
-
public function widget( $args, $instance ) {
|
| 135 |
-
|
| 136 |
-
$fields = $this->get_fields( $instance, [], true );
|
| 137 |
-
|
| 138 |
-
if ( $this->is_widget_empty( $fields ) ) {
|
| 139 |
-
|
| 140 |
-
return;
|
| 141 |
-
|
| 142 |
-
}
|
| 143 |
-
|
| 144 |
-
$this->before_widget( $args, $fields );
|
| 145 |
-
|
| 146 |
-
$display_labels = ( 'yes' === $instance['labels']['value'] );
|
| 147 |
-
|
| 148 |
-
foreach ( $fields as $field ) {
|
| 149 |
-
|
| 150 |
-
if ( empty( $field['value'] ) || ! $field['show_front_end'] ) {
|
| 151 |
-
|
| 152 |
-
continue;
|
| 153 |
-
|
| 154 |
-
}
|
| 155 |
-
|
| 156 |
-
$escape_callback = $field['escaper'];
|
| 157 |
-
|
| 158 |
-
printf(
|
| 159 |
-
'<li class="%s"><a href="%s" target="%s" title="%s"><span class="fa fa-%s fa-%s"></span>%s</a></li>',
|
| 160 |
-
$display_labels ? 'has-label' : 'no-label',
|
| 161 |
-
$escape_callback( $field['value'] ),
|
| 162 |
-
esc_attr( $field['target'] ),
|
| 163 |
-
sprintf( esc_attr_x( 'Visit %1$s on %2$s', '1. Title of website (e.g. My Cat Blog), 2. Name of social network (e.g. Facebook)', 'contact-widgets' ), get_bloginfo( 'name' ), $field['label'] ),
|
| 164 |
-
isset( $fields['icon_size']['value'] ) ? esc_attr( $fields['icon_size']['value'] ) : '2x',
|
| 165 |
-
esc_attr( $field['icon'] ),
|
| 166 |
-
$display_labels ? esc_html( $field['label'] ) : ''
|
| 167 |
-
);
|
| 168 |
-
|
| 169 |
-
}
|
| 170 |
-
|
| 171 |
-
$this->after_widget( $args, $fields );
|
| 172 |
-
|
| 173 |
-
}
|
| 174 |
-
|
| 175 |
-
/**
|
| 176 |
-
* Enqueue scripts and styles for front-end use
|
| 177 |
-
*
|
| 178 |
-
* @action wp_enqueue_scripts
|
| 179 |
-
*/
|
| 180 |
-
public function front_end_enqueue_scripts() {
|
| 181 |
-
|
| 182 |
-
wp_enqueue_style( 'font-awesome', '//maxcdn.bootstrapcdn.com/font-awesome/4.5.0/css/font-awesome.min.css', [], '4.5.0' );
|
| 183 |
-
|
| 184 |
-
parent::front_end_enqueue_scripts();
|
| 185 |
-
|
| 186 |
-
}
|
| 187 |
-
|
| 188 |
-
/**
|
| 189 |
-
* Initialize fields for use on front-end of forms
|
| 190 |
-
*
|
| 191 |
-
* @param array $instance
|
| 192 |
-
* @param array $fields (optional)
|
| 193 |
-
* @param bool $ordered (optional)
|
| 194 |
-
*
|
| 195 |
-
* @return array
|
| 196 |
-
*/
|
| 197 |
-
protected function get_fields( array $instance, array $fields = [], $ordered = false ) {
|
| 198 |
-
|
| 199 |
-
include 'social-networks.php';
|
| 200 |
-
|
| 201 |
-
foreach ( $fields as $key => &$field ) {
|
| 202 |
-
|
| 203 |
-
$default = [
|
| 204 |
-
'sanitizer' => 'esc_url_raw',
|
| 205 |
-
'escaper' => 'esc_url',
|
| 206 |
-
'select' => '',
|
| 207 |
-
'social' => true,
|
| 208 |
-
'target' => '_blank',
|
| 209 |
-
];
|
| 210 |
-
|
| 211 |
-
$field = wp_parse_args( $field, $default );
|
| 212 |
-
|
| 213 |
-
}
|
| 214 |
-
|
| 215 |
-
$title = [
|
| 216 |
-
'title' => [
|
| 217 |
-
'label' => __( 'Title:', 'contact-widgets' ),
|
| 218 |
-
'description' => __( 'The title of widget. Leave empty for no title.', 'contact-widgets' ),
|
| 219 |
-
'value' => ! empty( $instance['title'] ) ? $instance['title'] : '',
|
| 220 |
-
'sortable' => false,
|
| 221 |
-
],
|
| 222 |
-
];
|
| 223 |
-
|
| 224 |
-
// Prepend title field to the array
|
| 225 |
-
$fields = $title + $fields;
|
| 226 |
-
|
| 227 |
-
$fields['labels'] = [
|
| 228 |
-
'label' => __( 'Display labels?', 'contact-widgets' ),
|
| 229 |
-
'class' => '',
|
| 230 |
-
'label_after' => true,
|
| 231 |
-
'type' => 'checkbox',
|
| 232 |
-
'sortable' => false,
|
| 233 |
-
'value' => 'yes',
|
| 234 |
-
'atts' => $this->checked( 'yes', isset( $instance['labels']['value'] ) ? $instance['labels']['value'] : 'no' ),
|
| 235 |
-
'show_front_end' => false,
|
| 236 |
-
];
|
| 237 |
-
|
| 238 |
-
$fields = apply_filters( 'wpcw_widget_social_custom_fields', $fields, $instance );
|
| 239 |
-
$fields = parent::get_fields( $instance, $fields, $ordered );
|
| 240 |
-
|
| 241 |
-
/**
|
| 242 |
-
* Filter the social fields
|
| 243 |
-
*
|
| 244 |
-
* @since 1.0.0
|
| 245 |
-
*
|
| 246 |
-
* @var array
|
| 247 |
-
*/
|
| 248 |
-
return (array) apply_filters( 'wpcw_widget_social_fields', $fields, $instance );
|
| 249 |
-
|
| 250 |
-
}
|
| 251 |
-
|
| 252 |
-
/**
|
| 253 |
-
* Print label and wrapper
|
| 254 |
-
*
|
| 255 |
-
* @param array $field
|
| 256 |
-
*/
|
| 257 |
-
protected function print_label( array $field ) {
|
| 258 |
-
|
| 259 |
-
if ( ! isset( $field['social'] ) ) {
|
| 260 |
-
|
| 261 |
-
parent::print_label( $field );
|
| 262 |
-
return;
|
| 263 |
-
|
| 264 |
-
}
|
| 265 |
-
|
| 266 |
-
printf(
|
| 267 |
-
'<label for="%s"><span class="fa fa-%s"></span> <span class="text">%s</span></label>',
|
| 268 |
-
esc_attr( $field['id'] ),
|
| 269 |
-
esc_attr( $field['icon'] ),
|
| 270 |
-
esc_html( $field['label'] )
|
| 271 |
-
);
|
| 272 |
-
|
| 273 |
-
}
|
| 274 |
-
|
| 275 |
-
}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
trunk/includes/social-networks.php
DELETED
|
@@ -1,168 +0,0 @@
|
|
| 1 |
-
<?php
|
| 2 |
-
|
| 3 |
-
if ( ! defined( 'ABSPATH' ) ) {
|
| 4 |
-
|
| 5 |
-
exit;
|
| 6 |
-
|
| 7 |
-
}
|
| 8 |
-
|
| 9 |
-
$username = esc_attr_x( 'username', 'Must be lowercase and use url-safe characters', 'contact-widgets' );
|
| 10 |
-
$channel = esc_attr_x( 'channel', 'Must be lowercase and use url-safe characters', 'contact-widgets' );
|
| 11 |
-
$company = esc_attr_x( 'company', 'Must be lowercase and use url-safe characters', 'contact-widgets' );
|
| 12 |
-
$board = esc_attr_x( 'board', 'Must be lowercase and use url-safe characters', 'contact-widgets' );
|
| 13 |
-
|
| 14 |
-
$fields = [
|
| 15 |
-
'facebook' => [
|
| 16 |
-
'icon' => 'facebook-official',
|
| 17 |
-
'label' => __( 'Facebook', 'contact-widgets' ),
|
| 18 |
-
'default' => "https://www.facebook.com/{$username}",
|
| 19 |
-
'select' => $username,
|
| 20 |
-
],
|
| 21 |
-
'twitter' => [
|
| 22 |
-
'label' => __( 'Twitter', 'contact-widgets' ),
|
| 23 |
-
'default' => "https://twitter.com/{$username}",
|
| 24 |
-
'select' => $username,
|
| 25 |
-
],
|
| 26 |
-
'googleplus' => [
|
| 27 |
-
'icon' => 'google-plus',
|
| 28 |
-
'label' => __( 'Google+', 'contact-widgets' ),
|
| 29 |
-
'default' => "https://google.com/+{$username}",
|
| 30 |
-
'select' => $username,
|
| 31 |
-
],
|
| 32 |
-
'linkedin' => [
|
| 33 |
-
'icon' => 'linkedin-square',
|
| 34 |
-
'label' => __( 'LinkedIn', 'contact-widgets' ),
|
| 35 |
-
'default' => "https://www.linkedin.com/in/{$username}",
|
| 36 |
-
'select' => $username,
|
| 37 |
-
],
|
| 38 |
-
'rss' => [
|
| 39 |
-
'label' => __( 'RSS feed', 'contact-widgets' ),
|
| 40 |
-
'default' => get_feed_link(),
|
| 41 |
-
],
|
| 42 |
-
'pinterest' => [
|
| 43 |
-
'label' => __( 'Pinterest', 'contact-widgets' ),
|
| 44 |
-
'default' => "https://www.pinterest.com/{$username}",
|
| 45 |
-
'select' => $username,
|
| 46 |
-
],
|
| 47 |
-
'youtube' => [
|
| 48 |
-
'label' => __( 'YouTube', 'contact-widgets' ),
|
| 49 |
-
'default' => "https://www.youtube.com/user/{$username}",
|
| 50 |
-
'select' => $username,
|
| 51 |
-
],
|
| 52 |
-
'vimeo' => [
|
| 53 |
-
'label' => __( 'Vimeo', 'contact-widgets' ),
|
| 54 |
-
'default' => "https://vimeo.com/{$username}",
|
| 55 |
-
'select' => $username,
|
| 56 |
-
],
|
| 57 |
-
'flickr' => [
|
| 58 |
-
'label' => __( 'Flickr', 'contact-widgets' ),
|
| 59 |
-
'default' => "https://www.flickr.com/photos/{$username}",
|
| 60 |
-
'select' => $username,
|
| 61 |
-
],
|
| 62 |
-
'500px' => [
|
| 63 |
-
'label' => __( '500px', 'contact-widgets' ),
|
| 64 |
-
'default' => "https://www.500px.com/{$username}",
|
| 65 |
-
'select' => $username,
|
| 66 |
-
],
|
| 67 |
-
'foursquare' => [
|
| 68 |
-
'label' => __( 'Foursquare', 'contact-widgets' ),
|
| 69 |
-
'default' => "https://foursquare.com/{$username}",
|
| 70 |
-
'select' => $username,
|
| 71 |
-
],
|
| 72 |
-
'github' => [
|
| 73 |
-
'label' => __( 'GitHub', 'contact-widgets' ),
|
| 74 |
-
'default' => "https://github.com/{$username}",
|
| 75 |
-
'select' => $username,
|
| 76 |
-
],
|
| 77 |
-
'slack' => [
|
| 78 |
-
'label' => __( 'Slack', 'contact-widgets' ),
|
| 79 |
-
'default' => "https://{$channel}.slack.com/",
|
| 80 |
-
'select' => $channel,
|
| 81 |
-
],
|
| 82 |
-
'skype' => [
|
| 83 |
-
'label' => __( 'Skype', 'contact-widgets' ),
|
| 84 |
-
'default' => "skype:{$username}?chat",
|
| 85 |
-
'sanitizer' => 'esc_attr',
|
| 86 |
-
'escaper' => 'esc_attr',
|
| 87 |
-
'select' => $username,
|
| 88 |
-
],
|
| 89 |
-
'soundcloud' => [
|
| 90 |
-
'label' => __( 'SoundCloud', 'contact-widgets' ),
|
| 91 |
-
'default' => "https://soundcloud.com/{$username}",
|
| 92 |
-
'select' => $username,
|
| 93 |
-
],
|
| 94 |
-
'tripadvisor' => [
|
| 95 |
-
'label' => __( 'TripAdvisor', 'contact-widgets' ),
|
| 96 |
-
'default' => 'https://www.tripadvisor.com/',
|
| 97 |
-
],
|
| 98 |
-
'wordpress' => [
|
| 99 |
-
'label' => __( 'WordPress', 'contact-widgets' ),
|
| 100 |
-
'default' => "https://profiles.wordpress.org/{$username}",
|
| 101 |
-
'select' => $username,
|
| 102 |
-
],
|
| 103 |
-
'yelp' => [
|
| 104 |
-
'label' => __( 'Yelp', 'contact-widgets' ),
|
| 105 |
-
'default' => "http://www.yelp.com/biz/{$company}",
|
| 106 |
-
'select' => $company,
|
| 107 |
-
],
|
| 108 |
-
'amazon' => [
|
| 109 |
-
'label' => __( 'Amazon', 'contact-widgets' ),
|
| 110 |
-
'default' => 'https://www.amazon.com/',
|
| 111 |
-
],
|
| 112 |
-
'instagram' => [
|
| 113 |
-
'label' => __( 'Instagram', 'contact-widgets' ),
|
| 114 |
-
'default' => "https://www.instagram.com/{$username}",
|
| 115 |
-
'select' => $username,
|
| 116 |
-
],
|
| 117 |
-
'vine' => [
|
| 118 |
-
'label' => __( 'Vine', 'contact-widgets' ),
|
| 119 |
-
'default' => "https://vine.co/{$username}",
|
| 120 |
-
'select' => $username,
|
| 121 |
-
],
|
| 122 |
-
'reddit' => [
|
| 123 |
-
'label' => __( 'reddit', 'contact-widgets' ),
|
| 124 |
-
'default' => "https://www.reddit.com/user/{$username}",
|
| 125 |
-
'select' => $username,
|
| 126 |
-
],
|
| 127 |
-
'xing' => [
|
| 128 |
-
'label' => __( 'XING', 'contact-widgets' ),
|
| 129 |
-
'default' => 'https://www.xing.com/',
|
| 130 |
-
],
|
| 131 |
-
'tumblr' => [
|
| 132 |
-
'label' => __( 'Tumblr', 'contact-widgets' ),
|
| 133 |
-
'default' => "https://{$username}.tumblr.com/",
|
| 134 |
-
'select' => $username,
|
| 135 |
-
],
|
| 136 |
-
'whatsapp' => [
|
| 137 |
-
'label' => __( 'WhatsApp', 'contact-widgets' ),
|
| 138 |
-
'default' => 'https://www.whatsapp.com/',
|
| 139 |
-
],
|
| 140 |
-
'wechat' => [
|
| 141 |
-
'label' => __( 'WeChat', 'contact-widgets' ),
|
| 142 |
-
'default' => 'http://www.wechat.com/',
|
| 143 |
-
],
|
| 144 |
-
'medium' => [
|
| 145 |
-
'label' => __( 'Medium', 'contact-widgets' ),
|
| 146 |
-
'default' => "https://medium.com/@{$username}",
|
| 147 |
-
'select' => $username,
|
| 148 |
-
],
|
| 149 |
-
'dribbble' => [
|
| 150 |
-
'label' => __( 'Dribbble', 'contact-widgets' ),
|
| 151 |
-
'default' => "https://dribbble.com/{$username}",
|
| 152 |
-
'select' => $username,
|
| 153 |
-
],
|
| 154 |
-
'twitch' => [
|
| 155 |
-
'label' => __( 'Twitch', 'contact-widgets' ),
|
| 156 |
-
'default' => "https://www.twitch.tv/{$username}",
|
| 157 |
-
'select' => $username,
|
| 158 |
-
],
|
| 159 |
-
'vk' => [
|
| 160 |
-
'label' => __( 'VK', 'contact-widgets' ),
|
| 161 |
-
'default' => 'https://vk.com/',
|
| 162 |
-
],
|
| 163 |
-
'trello' => [
|
| 164 |
-
'label' => __( 'Trello', 'contact-widgets' ),
|
| 165 |
-
'default' => "https://trello.com/b/{$board}",
|
| 166 |
-
'select' => $board,
|
| 167 |
-
],
|
| 168 |
-
];
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
trunk/languages/contact-widgets-da_DK.mo
DELETED
|
Binary file
|
trunk/languages/contact-widgets-de_DE.mo
DELETED
|
Binary file
|
trunk/languages/contact-widgets-el.mo
DELETED
|
Binary file
|
trunk/languages/contact-widgets-es_ES.mo
DELETED
|
Binary file
|
trunk/languages/contact-widgets-es_MX.mo
DELETED
|
Binary file
|
trunk/languages/contact-widgets-fi.mo
DELETED
|
Binary file
|
trunk/languages/contact-widgets-fr_FR.mo
DELETED
|
Binary file
|
trunk/languages/contact-widgets-hi_IN.mo
DELETED
|
Binary file
|
trunk/languages/contact-widgets-id_ID.mo
DELETED
|
Binary file
|
trunk/languages/contact-widgets-it_IT.mo
DELETED
|
Binary file
|
trunk/languages/contact-widgets-ja.mo
DELETED
|
Binary file
|
trunk/languages/contact-widgets-ko_KR.mo
DELETED
|
Binary file
|
trunk/languages/contact-widgets-mr.mo
DELETED
|
Binary file
|
trunk/languages/contact-widgets-ms_MY.mo
DELETED
|
Binary file
|
trunk/languages/contact-widgets-nb_NO.mo
DELETED
|
Binary file
|
trunk/languages/contact-widgets-nl_NL.mo
DELETED
|
Binary file
|
trunk/languages/contact-widgets-pl_PL.mo
DELETED
|
Binary file
|
trunk/languages/contact-widgets-pt_BR.mo
DELETED
|
Binary file
|
trunk/languages/contact-widgets-pt_PT.mo
DELETED
|
Binary file
|
trunk/languages/contact-widgets-ru_RU.mo
DELETED
|
Binary file
|
trunk/languages/contact-widgets-sv_SE.mo
DELETED
|
Binary file
|
trunk/languages/contact-widgets-th.mo
DELETED
|
Binary file
|
trunk/languages/contact-widgets-tl.mo
DELETED
|
Binary file
|
trunk/languages/contact-widgets-tr_TR.mo
DELETED
|
Binary file
|
trunk/languages/contact-widgets-uk.mo
DELETED
|
Binary file
|
trunk/languages/contact-widgets-vi.mo
DELETED
|
Binary file
|
trunk/languages/contact-widgets-zh_CN.mo
DELETED
|
Binary file
|
trunk/languages/contact-widgets-zh_HK.mo
DELETED
|
Binary file
|
trunk/languages/contact-widgets-zh_TW.mo
DELETED
|
Binary file
|
trunk/readme.txt
DELETED
|
@@ -1,178 +0,0 @@
|
|
| 1 |
-
=== Contact Widgets ===
|
| 2 |
-
Contributors: godaddy, jonathanbardo, fjarrett
|
| 3 |
-
Tags: widget, contact, social, sharing, share button, share buttons, share links, social icons, social media, facebook, twitter, google plus, instagram
|
| 4 |
-
Requires at least: 4.4.2
|
| 5 |
-
Tested up to: 4.7
|
| 6 |
-
Stable tag: 1.3.3
|
| 7 |
-
License: GPL-2.0
|
| 8 |
-
License URI: https://www.gnu.org/licenses/gpl-2.0.html
|
| 9 |
-
|
| 10 |
-
Beautifully display social media and contact information on your website with these simple widgets.
|
| 11 |
-
|
| 12 |
-
== Description ==
|
| 13 |
-
|
| 14 |
-
**Note: This plugin requires PHP 5.4 or higher to be activated.**
|
| 15 |
-
|
| 16 |
-
This plugin adds two new widgets to your WordPress website:
|
| 17 |
-
|
| 18 |
-
* Contact Information: Displays your contact information including email address, phone number, fax and physical address (including a map).
|
| 19 |
-
* Social Media Profiles: Displays your social media profiles in an attractive, intuitive way.
|
| 20 |
-
|
| 21 |
-
Both widgets are compatible with the WordPress Customizer and will automatically refresh when changes are made.
|
| 22 |
-
|
| 23 |
-
**Languages Supported:**
|
| 24 |
-
|
| 25 |
-
* English
|
| 26 |
-
* Dansk
|
| 27 |
-
* Deutsch
|
| 28 |
-
* Ελληνικά
|
| 29 |
-
* Español
|
| 30 |
-
* Español de México
|
| 31 |
-
* Suomi
|
| 32 |
-
* Français
|
| 33 |
-
* हिन्दी
|
| 34 |
-
* Bahasa Indonesia
|
| 35 |
-
* Italiano
|
| 36 |
-
* 日本語
|
| 37 |
-
* 한국어
|
| 38 |
-
* मराठी
|
| 39 |
-
* Bahasa Melayu
|
| 40 |
-
* Norsk bokmål
|
| 41 |
-
* Nederlands
|
| 42 |
-
* Polski
|
| 43 |
-
* Português do Brasil
|
| 44 |
-
* Português
|
| 45 |
-
* Русский
|
| 46 |
-
* Svenska
|
| 47 |
-
* ไทย
|
| 48 |
-
* Tagalog
|
| 49 |
-
* Türkçe
|
| 50 |
-
* Українська
|
| 51 |
-
* Tiếng Việt
|
| 52 |
-
* 简体中文
|
| 53 |
-
* 香港中文版
|
| 54 |
-
* 繁體中文
|
| 55 |
-
|
| 56 |
-
**Improvement? Bugs?**
|
| 57 |
-
|
| 58 |
-
Please fill out an issue [here](https://github.com/godaddy/wp-contact-widgets/issues).
|
| 59 |
-
|
| 60 |
-
== Screenshots ==
|
| 61 |
-
|
| 62 |
-
1. Contact widget
|
| 63 |
-
2. Social widget
|
| 64 |
-
3. Twenty Sixteen theme showing both widgets
|
| 65 |
-
|
| 66 |
-
== Frequently Asked Questions ==
|
| 67 |
-
|
| 68 |
-
### How do I add additional fields to the contact widget?
|
| 69 |
-
|
| 70 |
-
Adding additional fields to the contact widget is as simple as adding a WordPress filter.
|
| 71 |
-
|
| 72 |
-
Here is an example:
|
| 73 |
-
<pre lang="php">
|
| 74 |
-
add_filter( 'wpcw_widget_contact_custom_fields', function( $fields, $instance ) {
|
| 75 |
-
|
| 76 |
-
$fields['cellphone'] = [
|
| 77 |
-
'order' => 2,
|
| 78 |
-
'label' => __( 'Cellphone:', 'YOURTEXTDOMAIN' ),
|
| 79 |
-
'type' => 'text',
|
| 80 |
-
'description' => __( 'A cellphone number that website vistors can call if they have questions.', 'YOURTEXTDOMAIN' ),
|
| 81 |
-
];
|
| 82 |
-
|
| 83 |
-
return $fields;
|
| 84 |
-
|
| 85 |
-
}, 10, 2 );
|
| 86 |
-
</pre>
|
| 87 |
-
|
| 88 |
-
### How do I add additional fields to the social widget?
|
| 89 |
-
|
| 90 |
-
The social widget requires a different set of options but follows the same principle as above.
|
| 91 |
-
|
| 92 |
-
Here is an example:
|
| 93 |
-
<pre lang="php">
|
| 94 |
-
add_filter( 'wpcw_widget_social_custom_fields', function( $fields, $instance ) {
|
| 95 |
-
|
| 96 |
-
$fields['scribd'] = [
|
| 97 |
-
'icon' => 'scribd', //See font-awesome icon slug
|
| 98 |
-
'label' => __( 'Scribd', 'YOURTEXTDOMAIN' ),
|
| 99 |
-
'default' => 'https://www.scribd.com/username',
|
| 100 |
-
'select' => 'username',
|
| 101 |
-
'sanitizer' => 'esc_url_raw',
|
| 102 |
-
'escaper' => 'esc_url',
|
| 103 |
-
'social' => true,
|
| 104 |
-
'target' => '_blank',
|
| 105 |
-
];
|
| 106 |
-
|
| 107 |
-
return $fields;
|
| 108 |
-
|
| 109 |
-
}, 10, 2 );
|
| 110 |
-
</pre>
|
| 111 |
-
|
| 112 |
-
== Changelog ==
|
| 113 |
-
|
| 114 |
-
= 1.3.3 - October 14, 2016 =
|
| 115 |
-
|
| 116 |
-
* Minor bug fixes
|
| 117 |
-
* Remove edit button when previewing in the customizer
|
| 118 |
-
|
| 119 |
-
= 1.3.2 - August 16, 2016 =
|
| 120 |
-
|
| 121 |
-
* WordPress 4.6 compatibility
|
| 122 |
-
* Fix bug with edit button not working
|
| 123 |
-
* Plugin icon update
|
| 124 |
-
* Update translation
|
| 125 |
-
* New: Add RSS to social networks.
|
| 126 |
-
|
| 127 |
-
Props [@jonathanbardo](https://github.com/jonathanbardo), [@fjarrett](https://github.com/fjarrett)
|
| 128 |
-
|
| 129 |
-
= 1.3.1 - June 3, 2016 =
|
| 130 |
-
|
| 131 |
-
* New: Language support for `mr`.
|
| 132 |
-
* New: Add 500px to social networks.
|
| 133 |
-
|
| 134 |
-
Props [@jonathanbardo](https://github.com/jonathanbardo), [@fjarrett](https://github.com/fjarrett), [@salvoventura](https://github.com/salvoventura)
|
| 135 |
-
|
| 136 |
-
= 1.3.0 - May 19, 2016 =
|
| 137 |
-
|
| 138 |
-
* New: Add front-end "Edit" link to quickly edit widgets in the Customizer.
|
| 139 |
-
* Fix: Use WP-CLI nightlies in tests.
|
| 140 |
-
|
| 141 |
-
Props [@jonathanbardo](https://github.com/jonathanbardo), [@fjarrett](https://github.com/fjarrett)
|
| 142 |
-
|
| 143 |
-
= 1.2.0 - April 12, 2016 =
|
| 144 |
-
|
| 145 |
-
* New: WordPress 4.5 compatibility.
|
| 146 |
-
* Tweak: Improve widget names.
|
| 147 |
-
|
| 148 |
-
Props [@jonathanbardo](https://github.com/jonathanbardo), [@fjarrett](https://github.com/fjarrett)
|
| 149 |
-
|
| 150 |
-
= 1.1.0 - March 15, 2016 =
|
| 151 |
-
|
| 152 |
-
* New: Support localization on Google Maps.
|
| 153 |
-
|
| 154 |
-
Props [@jonathanbardo](https://github.com/jonathanbardo), [@fjarrett](https://github.com/fjarrett)
|
| 155 |
-
|
| 156 |
-
= 1.0.4 - March 9, 2016 =
|
| 157 |
-
|
| 158 |
-
* Tweak: Language updates.
|
| 159 |
-
|
| 160 |
-
Props [@jonathanbardo](https://github.com/jonathanbardo)
|
| 161 |
-
|
| 162 |
-
= 1.0.2 - February 24, 2016 =
|
| 163 |
-
|
| 164 |
-
* New: Language support for 27 locales.
|
| 165 |
-
|
| 166 |
-
Props [@jonathanbardo](https://github.com/jonathanbardo)
|
| 167 |
-
|
| 168 |
-
= 1.0.1 - February 24, 2016 =
|
| 169 |
-
|
| 170 |
-
* New: Added possibility to add custom fields to contact and social widget.
|
| 171 |
-
|
| 172 |
-
Props [@jonathanbardo](https://github.com/jonathanbardo)
|
| 173 |
-
|
| 174 |
-
= 1.0.0 - February 23, 2016 =
|
| 175 |
-
|
| 176 |
-
* Initial release.
|
| 177 |
-
|
| 178 |
-
Props [@jonathanbardo](https://github.com/jonathanbardo), [@fjarrett](https://github.com/fjarrett)
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
