├── includes ├── assets │ ├── page-by-page │ │ ├── style.css │ │ ├── control.js │ │ └── page-by-page.php │ ├── tinymce_editor_style_helper.css │ ├── widget-icon.png │ ├── multi-color-picker │ │ ├── transparency-grid.png │ │ ├── multi-color-picker.css │ │ ├── readme.md │ │ ├── multi-color-picker.php │ │ └── multi-color-picker.js │ ├── tinymce.js │ └── card_helper.js ├── shortcode-contact-block.php ├── shortcode-cards.php ├── widget-shortcode.php └── theme-customizer.php ├── parts ├── before-main.php ├── after-main.php ├── archive-layout.php └── single-layout.php ├── css └── scss │ ├── vars │ └── roots.scss │ ├── parts │ ├── form.scss │ ├── contact_cards.scss │ ├── wp-admin-shims.scss │ ├── form_slideout.scss │ ├── custom_ui.scss │ ├── lists.scss │ ├── auto_styled.scss │ └── content.scss │ └── style.scss ├── images ├── F-n-A-logo-dark.png ├── F-n-A-logo-white.png ├── F-n-A-logo-dark-29w.png ├── F-n-A-logo-white-29w.png └── grade.svg ├── inc └── builder-custom │ ├── images │ ├── h1.png │ ├── halves.png │ ├── thirds.png │ ├── quarters.png │ ├── side-left.png │ └── side-right.png │ └── js │ ├── jquery.tagit.css │ ├── tagit.ui-zendesk.css │ ├── edit-page.js │ └── tag-it.min.js ├── .editorconfig ├── tribe-events ├── default-template.php └── widgets │ └── list-widget.php ├── .gitattributes ├── composer.json ├── spine ├── fais_global-navigation.php └── body.php ├── templates ├── single.php ├── side-left.php └── side-right.php ├── package.json ├── page.php ├── phpcs.ruleset.xml ├── .gitignore ├── comments.php ├── header.php ├── composer.lock ├── articles └── post.php ├── Gruntfile.js ├── style.css.map └── functions.php /includes/assets/page-by-page/style.css: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /parts/before-main.php: -------------------------------------------------------------------------------- 1 |
2 | 2 | 2 | 3 |
4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 |
12 | 13 |
14 | 15 | 16 | 17 |
18 | 19 | 20 | 21 | -------------------------------------------------------------------------------- /parts/single-layout.php: -------------------------------------------------------------------------------- 1 |
2 | 3 |
4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 |
12 | 13 |
14 | 15 | 16 | 17 |
18 | 19 |
20 | 21 | -------------------------------------------------------------------------------- /tribe-events/default-template.php: -------------------------------------------------------------------------------- 1 | 5 |
6 | 7 | 8 | 9 |
10 |
11 | 12 | 13 | 14 |
15 |
16 | 17 | 18 | 19 |
20 | 2 | 'fais_global', 5 | 'menu' => 'fais_global', 6 | 'container' => false, 7 | 'container_class' => false, 8 | 'container_id' => false, 9 | 'menu_class' => null, 10 | 'menu_id' => null, 11 | 'fallback_cb' => false, 12 | 'items_wrap' => '', 13 | 'depth' => 3, 14 | ); 15 | wp_nav_menu( $spine_offsite_args ); 16 | ?> 17 | 18 | -------------------------------------------------------------------------------- /templates/single.php: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 |
6 | 7 | 8 | 9 | 10 | 11 | 12 |
13 | 14 |
15 | 16 | 17 | 18 |
19 | 20 |
21 | 28 |
29 | 2 | 3 |
4 | 5 | 6 | 7 | 8 |
9 |
10 |
11 | 12 | 13 | 14 |
15 |
16 | 17 |
18 |
19 |
20 | 21 | 22 | 23 |
24 | 25 | 2 | 3 | 4 | 5 |
6 | 7 | 8 | 9 | 10 | 11 | 12 |
13 | 14 |
15 | 16 | 22 | 23 |
24 | 25 |
26 | 27 | 28 | 29 |
30 | 31 |
32 | 37 |
38 | 2 | 3 | 4 | 5 |
6 | 7 | 8 | 9 | 10 | 11 | 12 |
13 | 14 |
15 | 16 | 17 | 18 |
19 | 20 |
21 | 22 | 28 | 29 |
30 | 31 |
32 | 39 |
40 | 2 | 3 | 5 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | -------------------------------------------------------------------------------- /phpcs.ruleset.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | Sniffs for the coding standards of the WSUWP Spine Child Theme Skeleton 4 | */vendor/* 5 | */inc/builder/* 6 | */node_modules/* 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | 17 | 18 | 19 | 20 | 21 | 22 | -------------------------------------------------------------------------------- /spine/body.php: -------------------------------------------------------------------------------- 1 | 14 | 15 |
16 |
17 | 18 | 19 | 20 | 29 | 30 | 31 | 32 |
33 |
34 | -------------------------------------------------------------------------------- /includes/assets/tinymce.js: -------------------------------------------------------------------------------- 1 | (function($) { 2 | 3 | 'use strict'; 4 | 5 | // only do this if TinyMCE is available 6 | if ( 'undefined' === typeof( tinymce ) ) { 7 | return; 8 | } 9 | // only do this if TinyMCE is available 10 | if ( 'undefined' === typeof( widgetShortcode ) ) { 11 | return; 12 | } 13 | 14 | tinymce.create( 'tinymce.plugins.widgetShortcode', { 15 | init: function( editor, url ) { 16 | var items = []; 17 | $.each( widgetShortcode.widgets, function( i, v ){ 18 | var item = { 19 | 'text' : v.title, 20 | 'body': { 21 | 'type': v.title 22 | }, 23 | 'onclick' : function(){ 24 | editor.insertContent( '[widget id="' + v.id + '"]' ); 25 | } 26 | }; 27 | items.push( item ); 28 | } ); 29 | 30 | editor.addButton( 'widgetShortcode', { 31 | title: widgetShortcode.title, 32 | type : 'menubutton', 33 | //cmd: 'widgetShortcode_insert', 34 | image: widgetShortcode.image, 35 | menu : items 36 | } ); 37 | } 38 | }); 39 | tinymce.PluginManager.add( 'widgetShortcode', tinymce.plugins.widgetShortcode ); 40 | })(jQuery); 41 | -------------------------------------------------------------------------------- /.gitignore: -------------------------------------------------------------------------------- 1 | *.log 2 | wp-config.php 3 | wp-content/advanced-cache.php 4 | wp-content/backup-db/ 5 | wp-content/backups/ 6 | wp-content/blogs.dir/ 7 | wp-content/cache/ 8 | wp-content/upgrade/ 9 | wp-content/uploads/ 10 | wp-content/wp-cache-config.php 11 | wp-content/plugins/hello.php 12 | 13 | /.htaccess 14 | /license.txt 15 | /readme.html 16 | /sitemap.xml 17 | /sitemap.xml.gz 18 | 19 | /node_modules 20 | /vendor 21 | /build 22 | 23 | 24 | 25 | 26 | # ========================= 27 | # Operating System Files 28 | # ========================= 29 | 30 | # OSX 31 | # ========================= 32 | 33 | .DS_Store 34 | .AppleDouble 35 | .LSOverride 36 | 37 | # Thumbnails 38 | ._* 39 | 40 | # Files that might appear in the root of a volume 41 | .DocumentRevisions-V100 42 | .fseventsd 43 | .Spotlight-V100 44 | .TemporaryItems 45 | .Trashes 46 | .VolumeIcon.icns 47 | 48 | # Directories potentially created on remote AFP share 49 | .AppleDB 50 | .AppleDesktop 51 | Network Trash Folder 52 | Temporary Items 53 | .apdisk 54 | 55 | # Windows 56 | # ========================= 57 | 58 | # Windows image file caches 59 | Thumbs.db 60 | ehthumbs.db 61 | 62 | # Folder config file 63 | Desktop.ini 64 | 65 | # Recycle Bin used on file shares 66 | $RECYCLE.BIN/ 67 | 68 | # Windows Installer files 69 | *.cab 70 | *.msi 71 | *.msm 72 | *.msp 73 | 74 | # Windows shortcuts 75 | *.lnk 76 | -------------------------------------------------------------------------------- /inc/builder-custom/js/jquery.tagit.css: -------------------------------------------------------------------------------- 1 | ul.tagit { 2 | padding: 1px 5px; 3 | overflow: auto; 4 | margin-left: inherit; /* usually we don't want the regular ul margins. */ 5 | margin-right: inherit; 6 | } 7 | ul.tagit li { 8 | display: block; 9 | float: left; 10 | margin: 2px 5px 2px 0; 11 | } 12 | ul.tagit li.tagit-choice { 13 | position: relative; 14 | line-height: inherit; 15 | } 16 | input.tagit-hidden-field { 17 | display: none; 18 | } 19 | ul.tagit li.tagit-choice-read-only { 20 | padding: .2em .5em .2em .5em; 21 | } 22 | 23 | ul.tagit li.tagit-choice-editable { 24 | padding: .2em 18px .2em .5em; 25 | } 26 | 27 | ul.tagit li.tagit-new { 28 | padding: .25em 4px .25em 0; 29 | } 30 | 31 | ul.tagit li.tagit-choice a.tagit-label { 32 | cursor: pointer; 33 | text-decoration: none; 34 | } 35 | ul.tagit li.tagit-choice .tagit-close { 36 | cursor: pointer; 37 | position: absolute; 38 | right: .1em; 39 | top: 50%; 40 | margin-top: -8px; 41 | line-height: 17px; 42 | } 43 | 44 | /* used for some custom themes that don't need image icons */ 45 | ul.tagit li.tagit-choice .tagit-close .text-icon { 46 | display: none; 47 | } 48 | 49 | ul.tagit li.tagit-choice input { 50 | display: block; 51 | float: left; 52 | margin: 2px 5px 2px 0; 53 | } 54 | ul.tagit input[type="text"] { 55 | -moz-box-sizing: border-box; 56 | -webkit-box-sizing: border-box; 57 | box-sizing: border-box; 58 | 59 | -moz-box-shadow: none; 60 | -webkit-box-shadow: none; 61 | box-shadow: none; 62 | 63 | border: none; 64 | margin: 0; 65 | padding: 0; 66 | width: inherit; 67 | background-color: inherit; 68 | outline: none; 69 | } 70 | -------------------------------------------------------------------------------- /css/scss/parts/wp-admin-shims.scss: -------------------------------------------------------------------------------- 1 | body.admin-bar #binder header.main-header { 2 | top: 26px; 3 | } 4 | /* Admin Bar */ 5 | @media (min-width: 990px) { 6 | .admin-bar #spine #glue { 7 | margin-top: 0; 8 | } 9 | body.admin-bar { 10 | margin-bottom: -32px !important; 11 | /*padding-top: 32px !important;*/ 12 | } 13 | } 14 | @media (max-width: 810px){ 15 | body.admin-bar #binder header.main-header { 16 | top: -20px; 17 | } 18 | body.admin-bar .type-page>section.banner-section { 19 | margin-top: 109px; 20 | } 21 | } 22 | @media (max-width: 989px) and (min-width: 811px){ 23 | body.admin-bar #binder header.main-header { 24 | top: -20px; 25 | } 26 | body.admin-bar .type-page>section.banner-section { 27 | margin-top: 60px; 28 | } 29 | } 30 | @media (max-width: 989px) { 31 | body.admin-bar { 32 | margin-top: 18px !important; 33 | padding-bottom: 0 !important; 34 | } 35 | body.admin-bar #binder main { 36 | margin-left: 0; 37 | margin-top: 0px; 38 | } 39 | #wpadminbar { 40 | top: auto !important; 41 | bottom: 0 !important; 42 | position: fixed !important; 43 | } 44 | 45 | #wpadminbar .quicklinks>ul>li { 46 | position: relative; 47 | } 48 | 49 | #wpadminbar .ab-top-menu>.menupop>.ab-sub-wrapper { 50 | bottom: 32px; 51 | box-shadow: none; 52 | } 53 | } 54 | 55 | @media (max-width: 780px) { 56 | 57 | body.admin-bar { 58 | margin-top: -46px !important; 59 | padding-bottom: 46px !important; 60 | } 61 | 62 | #wpadminbar .ab-top-menu>.menupop>.ab-sub-wrapper { 63 | bottom: 46px; 64 | } 65 | 66 | } 67 | 68 | 69 | @media (max-width: 667px){ 70 | body.admin-bar #binder header.main-header { 71 | top:30px; 72 | } 73 | body.admin-bar .type-page>section.banner-section { 74 | margin-top: 30px; 75 | } 76 | } 77 | -------------------------------------------------------------------------------- /css/scss/parts/form_slideout.scss: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | #contact-form.tether-element { display:block } 5 | #contact-form { 6 | z-index: 999999; 7 | background: #FFF; 8 | margin-left: 177px; 9 | border-top: 1px solid #494949; 10 | border-right: 1px solid #494949; 11 | border-bottom: 1px solid #494949; 12 | position: relative; 13 | } 14 | 15 | #contact-form h2{padding-top: 10px;} 16 | 17 | #close_form{ 18 | display: block; 19 | cursor: pointer; 20 | border-radius: 5px; 21 | border: 2px solid #6d6d6d; 22 | padding: 2px 0; 23 | outline: 0; 24 | color: #777; 25 | margin: 0; 26 | background: #fff; 27 | position: absolute; 28 | right: -1px; 29 | top: -1px; 30 | padding-left: 5px; 31 | border-top-right-radius: 0; 32 | } 33 | .dark .gform_title,.darker .gform_title,.dark #contact-form label,.darker #contact-form label { 34 | color:#fff; 35 | } 36 | 37 | .dark select.gfield_select,.darker select.gfield_select { 38 | color: black; 39 | } 40 | 41 | .dark #contact-form,.dark #close_form { 42 | background: #3b4042; 43 | color:#fff; 44 | } 45 | .darker #contact-form,.darker #close_form { 46 | background: #23282b; 47 | color:#fff; 48 | } 49 | .crimson #contact-form,.crimson #close_form { 50 | background: #981e32; 51 | color:#fff; 52 | } 53 | .crimson #contact-form button,.darker #contact-form button,.dark #contact-form button { 54 | color:#3b4042; 55 | } 56 | 57 | #close_form:before { 58 | display: inline-block; 59 | font: normal normal normal 14px/1 FontAwesome; 60 | text-rendering: auto; 61 | -webkit-font-smoothing: antialiased; 62 | -moz-osx-font-smoothing: grayscale; 63 | transform: translate(0, 0); 64 | margin-right:5px; 65 | font-size: 26px; 66 | line-height: 23px; 67 | color:#000; 68 | content:"\f00d"; 69 | } 70 | -------------------------------------------------------------------------------- /comments.php: -------------------------------------------------------------------------------- 1 | 15 | 16 |
17 | 18 | 19 |

20 | ' . get_the_title() . '' ); 23 | ?> 24 |

25 | 26 |
    27 | 'ol', 30 | 'short_ping' => true, 31 | 'avatar_size' => 0, 32 | ) ); 33 | ?> 34 |
35 | 36 | 1 && get_option( 'page_comments' ) ) : 39 | ?> 40 | 45 | 46 | 47 | 48 |

49 | 50 | 51 | 52 | 53 | 54 | 55 |
-------------------------------------------------------------------------------- /tribe-events/widgets/list-widget.php: -------------------------------------------------------------------------------- 1 | 33 | 34 | 35 | 38 | 39 |
    40 | 45 |
  1. 46 | 47 | 48 | 49 |

    50 | 51 |

    52 | 53 | 54 | 55 | 56 | 57 | 58 |
    59 | 60 |
    61 | 62 | 63 |
  2. 64 | 67 |
68 | 69 | 72 | 73 | 76 |

77 | * { 3 | &:nth-child(odd) + * { 4 | height: 0; 5 | overflow: hidden; 6 | padding: 0; 7 | margin: 0; 8 | } 9 | &:nth-child(odd){ 10 | cursor:pointer; 11 | margin: 0; 12 | &:hover{ 13 | opacity: .85; 14 | } 15 | } 16 | } 17 | body:not(#tinymce) .folding .unfolded + * { 18 | height: 100%; 19 | overflow: visible; 20 | transition: height 1s ease-in-out; 21 | } 22 | 23 | body:not(#tinymce) .folding.as-more > * { 24 | &:nth-child(odd){ 25 | &:hover{ 26 | } 27 | &:after{ 28 | content: "More... "; 29 | padding-left: .5rem; 30 | font-size: 50%; 31 | float:right; 32 | } 33 | &:before{ 34 | //content:"\f101"; 35 | 36 | display: inline-block; 37 | font: normal normal normal 14px/1 FontAwesome; 38 | text-rendering: auto; 39 | -webkit-font-smoothing: antialiased; 40 | -moz-osx-font-smoothing: grayscale; 41 | padding-left:.5rem; 42 | font-size: 50%; 43 | }&:before{ 44 | //float:right; 45 | } 46 | } 47 | } 48 | .accordion .ui-accordion-header .ui-icon{ 49 | display:none; 50 | } 51 | .accordion .ui-accordion-header:before { 52 | content:"\f196"; 53 | display: inline-block; 54 | font: normal normal normal 14px/1 FontAwesome; 55 | font-size: inherit; 56 | text-rendering: auto; 57 | -webkit-font-smoothing: antialiased; 58 | -moz-osx-font-smoothing: grayscale; 59 | padding-right:.5rem; 60 | } 61 | .ui-state-active, .ui-widget-content .ui-state-active, .ui-widget-header .ui-state-active, a.ui-button:active, .ui-button:active, .ui-button.ui-state-active:hover { 62 | border: 1px solid #630c1c; 63 | background: #9b1e34; 64 | font-weight: normal; 65 | color: #ffffff; 66 | } 67 | .accordion .ui-accordion-header:hover { 68 | cursor:pointer; 69 | color: #9d060b; 70 | } 71 | .accordion .ui-accordion-header:hover:before { 72 | color: #9d060b; 73 | content:"\f0fe"; 74 | padding-right:.35rem; 75 | } 76 | 77 | .accordion .ui-accordion-header.ui-state-active:hover { 78 | color: #c7c7c7; 79 | } 80 | .accordion .ui-accordion-header.ui-state-active:hover:before { 81 | color: #c7c7c7; 82 | } 83 | .accordion .ui-accordion-header.ui-accordion-header-active:before{ 84 | content:"\f147"; 85 | } 86 | .accordion .ui-accordion-header.ui-accordion-header-active:hover:before{ 87 | content:"\f146"; 88 | } 89 | 90 | 91 | 92 | #wsuwp-main .ui-widget-content a{ 93 | color: #9d060b !important; 94 | } 95 | #wsuwp-main .ui-widget-content a:hover { 96 | color: #c60c30 !important; 97 | } 98 | /*body:not(#tinymce) .folding > *:nth-child(1) + * { 99 | height: 0; 100 | overflow: hidden; 101 | padding: 0; 102 | margin: 0; 103 | } 104 | body:not(#tinymce) .folding > *:nth-child(1){ 105 | cursor:pointer; 106 | margin: 0; 107 | } 108 | body:not(#tinymce) .folding > *:nth-child(1):hover{ 109 | opacity: .85; 110 | } 111 | 112 | body:not(#tinymce) .folding > .unfolded + * { 113 | height: 100%; 114 | overflow: visible; 115 | transition: height 1s ease-in-out; 116 | }*/ 117 | -------------------------------------------------------------------------------- /inc/builder-custom/js/tagit.ui-zendesk.css: -------------------------------------------------------------------------------- 1 | 2 | /* Optional scoped theme for tag-it which mimics the zendesk widget. */ 3 | 4 | 5 | ul.tagit { 6 | border-style: solid; 7 | border-width: 1px; 8 | border-color: #C6C6C6; 9 | background: inherit; 10 | } 11 | ul.tagit li.tagit-choice { 12 | -moz-border-radius: 6px; 13 | border-radius: 6px; 14 | -webkit-border-radius: 6px; 15 | border: 1px solid #CAD8F3; 16 | 17 | background: none; 18 | background-color: #DEE7F8; 19 | 20 | font-weight: normal; 21 | } 22 | ul.tagit li.tagit-choice .tagit-label:not(a) { 23 | color: #555; 24 | } 25 | ul.tagit li.tagit-choice a.tagit-close { 26 | text-decoration: none; 27 | } 28 | ul.tagit li.tagit-choice .tagit-close { 29 | right: .4em; 30 | } 31 | ul.tagit li.tagit-choice .ui-icon { 32 | display: none; 33 | } 34 | ul.tagit li.tagit-choice .tagit-close .text-icon { 35 | display: inline; 36 | font-family: arial, sans-serif; 37 | font-size: 16px; 38 | line-height: 16px; 39 | color: #777; 40 | } 41 | ul.tagit li.tagit-choice:hover, ul.tagit li.tagit-choice.remove { 42 | background-color: #bbcef1; 43 | border-color: #6d95e0; 44 | } 45 | ul.tagit li.tagit-choice a.tagLabel:hover, 46 | ul.tagit li.tagit-choice a.tagit-close .text-icon:hover { 47 | color: #222; 48 | } 49 | ul.tagit input[type="text"] { 50 | color: #333333; 51 | background: none; 52 | } 53 | .ui-widget { 54 | font-size: 1.1em; 55 | } 56 | 57 | /* Forked from a jQuery UI theme, so that we don't require the jQuery UI CSS as a dependency. */ 58 | .tagit-autocomplete.ui-autocomplete { position: absolute; cursor: default; } 59 | * html .tagit-autocomplete.ui-autocomplete { width:1px; } /* without this, the menu expands to 100% in IE6 */ 60 | .tagit-autocomplete.ui-menu { 61 | list-style:none; 62 | padding: 2px; 63 | margin: 0; 64 | display:block; 65 | float: left; 66 | } 67 | .tagit-autocomplete.ui-menu .ui-menu { 68 | margin-top: -3px; 69 | } 70 | .tagit-autocomplete.ui-menu .ui-menu-item { 71 | margin:0; 72 | padding: 0; 73 | zoom: 1; 74 | float: left; 75 | clear: left; 76 | width: 100%; 77 | } 78 | .tagit-autocomplete.ui-menu .ui-menu-item a { 79 | text-decoration:none; 80 | display:block; 81 | padding:.2em .4em; 82 | line-height:1.5; 83 | zoom:1; 84 | } 85 | .tagit-autocomplete .ui-menu .ui-menu-item a.ui-state-hover, 86 | .tagit-autocomplete .ui-menu .ui-menu-item a.ui-state-active { 87 | font-weight: normal; 88 | margin: -1px; 89 | } 90 | .tagit-autocomplete.ui-widget-content { border: 1px solid #aaaaaa; background: #ffffff 50% 50% repeat-x; color: #222222; } 91 | .tagit-autocomplete.ui-corner-all, .tagit-autocomplete .ui-corner-all { -moz-border-radius: 4px; -webkit-border-radius: 4px; -khtml-border-radius: 4px; border-radius: 4px; } 92 | .tagit-autocomplete .ui-state-hover, .tagit-autocomplete .ui-state-focus { border: 1px solid #999999; background: #dadada; font-weight: normal; color: #212121; } 93 | .tagit-autocomplete .ui-state-active { border: 1px solid #aaaaaa; } 94 | 95 | .tagit-autocomplete .ui-widget-content { border: 1px solid #aaaaaa; } 96 | .tagit .ui-helper-hidden-accessible { position: absolute !important; clip: rect(1px,1px,1px,1px); } 97 | 98 | 99 | -------------------------------------------------------------------------------- /css/scss/parts/lists.scss: -------------------------------------------------------------------------------- 1 | ol:not(.lists), ul:not(.lists) { 2 | list-style-type: none; 3 | margin-left: 1.7rem; 4 | //font-size:#{$root-font-list}; 5 | padding: 0 2rem 1rem 1rem; 6 | } 7 | 8 | ul.lists{ 9 | padding:0; 10 | margin:0; 11 | } 12 | ul.lists:not([class='pad-'])>li:not([class='pad-']) { 13 | padding:0; 14 | margin:0; 15 | overflow: hidden; 16 | } 17 | ul.lists>li>a[href]:not(.not-autostyle):before { 18 | width: 100%; 19 | height: 100%; 20 | font-size:1.7rem; 21 | padding-top:.45rem; 22 | } 23 | ul.lists>li>a[href]:not(.not-autostyle) { 24 | width: 100%; 25 | height: 100%; 26 | padding: .85rem 1rem .85rem 2.2rem; 27 | display: block; 28 | } 29 | ul.lists>li:hover,ul.lists>li:hover>a{ 30 | background:rgba(206, 206, 206, 0.88); 31 | } 32 | 33 | 34 | ul.list-index { 35 | /*position: absolute; 36 | right: 1.3rem; 37 | top: 4.8rem;*/ 38 | float:right; 39 | width: 25rem; 40 | background: #a7a7a7; 41 | padding: .7rem 0; 42 | border-radius: 1.5rem 0 0 1.5rem; 43 | } 44 | ul.list-index li:before { 45 | content:""; /*reset the default style*/ 46 | } 47 | .list-index li h5 { 48 | padding-left: 1.7rem; 49 | font-weight: 600; 50 | border-bottom: 1px solid #7b7b7b; 51 | } 52 | ul.list-index li a[href]{ 53 | color:#E9E9E9; 54 | font-weight:700; 55 | font-size:1.3rem; 56 | border-bottom: 1px solid #7b7b7b; 57 | width:100%; 58 | display:block; 59 | padding:.3rem 1.5rem; 60 | } 61 | ul.list-index li a[href]:hover{ 62 | color:#353535; 63 | background: #d8d8d8; 64 | } 65 | 66 | 67 | 68 | ol > li:before,ul > li:before { 69 | content: "-"; 70 | position: relative; 71 | left: -5px; 72 | } 73 | 74 | #spine ul > li:before, 75 | .spine-navigation ul > li:before, 76 | ul.list-blank > li:before, 77 | ol.list-blank > li:before, 78 | ul.blank > li:before, 79 | ol.blank > li:before, 80 | ul.ui-tabs-nav>li:before, //account for jQuery UI 81 | ol[style*="list-style-type"] > li:before, //accounting for WP tinyMCE 82 | ul[style*="list-style-type"] > li:before { 83 | content:none; 84 | } 85 | 86 | ol[style*="list-style-type"], ul[style*="list-style-type"] { 87 | list-style-type: none; 88 | margin-left: 1.7rem; 89 | //font-size:#{$root-font-list}; 90 | padding: 0 2rem 1rem 1rem; 91 | } 92 | 93 | ol.strong > li, 94 | ul.strong > li, 95 | ol.list-throwback > li, 96 | ul.list-throwback > li, 97 | ol.weak > li, 98 | ul.weak > li{ 99 | position: relative; 100 | } 101 | 102 | form ol, form ul{ 103 | padding:0; 104 | } 105 | 106 | address ul { 107 | padding: 0; 108 | margin: 0; 109 | margin-left: 1rem; 110 | } 111 | 112 | address ul li { 113 | padding: 0; 114 | margin: 0; 115 | } 116 | 117 | ol.weak > li:before,ul.weak > li:before{ 118 | content: '\00ba'; 119 | position: absolute; 120 | left: -1rem; 121 | font-size: 1.8rem; 122 | top: 0; 123 | 124 | } 125 | 126 | 127 | ol.strong > li:before,ul.strong > li:before, 128 | ol.list-throwback > li:before,ul.list-throwback > li:before { 129 | content: '\2022'; 130 | position: absolute; 131 | left: -1rem; 132 | font-size: 1.8rem; 133 | top: 0; 134 | 135 | } 136 | 137 | 138 | -------------------------------------------------------------------------------- /includes/shortcode-contact-block.php: -------------------------------------------------------------------------------- 1 | 'true', 9 | 'show_phone' => 'true', 10 | ), 11 | $atts 12 | ); 13 | ob_start(); ?> 14 | 15 | 16 |
17 |
18 |

:

19 |
20 |
21 |
22 | 26 |
27 | 30 |
31 |
32 |
33 |
34 | 35 |
39 |

:

40 |
41 | 42 | 45 |
46 |
47 | 48 |

:

49 | 53 |
54 |

:

55 |
56 |
57 | 60 | 61 | 65 |
66 |

:

67 |
68 |
69 | 72 | 73 | 77 |
78 |

:

79 |
80 |
81 | 84 | 85 |
86 | 87 |
88 | 89 | false, 14 | 'name' => false, 15 | 'tel' => false, 16 | 'email' => false, 17 | 'profile_url' => false, 18 | ), 19 | $atts 20 | ); 21 | ob_start(); ?> 22 | 23 | 24 |
25 |
26 | 27 | <?php if ( false !== $att['name'] && '' !== $att['name'] ) :  ?><?php esc_attr_e( $att['name'] ); ?><?php endif; ?> 28 | 29 | 30 | 31 | 32 | 33 | 34 | 35 |
36 |
37 | 38 |

39 | 40 | 41 |

42 | 43 | 44 | 45 |
46 | 47 | 48 | Email 49 | 50 |
51 | 52 | 53 | array( 58 | 'href' => array(), 59 | 'title' => array(), 60 | ), 61 | 'br' => array(), 62 | 'b' => array(), 63 | 'u' => array(), 64 | 'i' => array(), 65 | 'em' => array(), 66 | 'strong' => array(), 67 | 'ul' => array( 68 | 'class' => array(), 69 | ),'li' => array( 70 | 'class' => array(), 71 | ), 72 | ) ) .'
'; 73 | 74 | } 75 | add_shortcode( 'contact_cards', 'cards_shortcode' ); 76 | 77 | add_filter( 'mce_external_plugins', 'contactCard_mce_external_plugins' ); 78 | add_filter( 'mce_buttons', 'contactCard_mce_buttons', 15 ); 79 | 80 | function contactCard_mce_external_plugins( $plugins ) { 81 | $plugins['contactCard'] = get_stylesheet_directory_uri() . '/includes/assets/card_helper.js'; 82 | $plugins['iconPicker'] = get_stylesheet_directory_uri() . '/includes/assets/icon_picker.js'; 83 | return $plugins; 84 | } 85 | 86 | function contactCard_mce_buttons( $mce_buttons ) { 87 | array_push( $mce_buttons, 'separator', 'contactCard' ); 88 | array_push( $mce_buttons, 'separator', 'iconPicker' ); 89 | return $mce_buttons; 90 | } 91 | 92 | -------------------------------------------------------------------------------- /includes/assets/page-by-page/page-by-page.php: -------------------------------------------------------------------------------- 1 | . 14 | */ 15 | class Customize_Page_by_Page_Control extends WP_Customize_Control { 16 | 17 | /** 18 | * Official control name. 19 | */ 20 | public $type = 'page-by-page'; 21 | 22 | /** 23 | * The array of color data. 24 | */ 25 | public $pages_data; 26 | 27 | /** 28 | * The label for this control group. 29 | */ 30 | public $label; 31 | 32 | /** 33 | * Enqueue scripts and styles. 34 | * 35 | * Ideally these would get registered and given proper paths before this control object 36 | * gets initialized, then we could simply enqueue them here, but for completeness as a 37 | * stand alone class we'll register and enqueue them here. 38 | */ 39 | public function enqueue() { 40 | wp_enqueue_script( 'page-by-page', get_stylesheet_directory_uri() . '/includes/assets/page-by-page/control.js', array( 'jquery', 'wp-color-picker' ), '1.0.0', true ); 41 | wp_enqueue_style( 'page-by-page', get_stylesheet_directory_uri() . '/includes/assets/page-by-page/style.css', array( 'wp-color-picker' ), '1.0.0' ); 42 | } 43 | 44 | /** 45 | * Render the control. 46 | */ 47 | public function render_content() { 48 | 49 | if ( isset( $this->label ) && '' !== $this->label ) { 50 | echo '' . sanitize_text_field( $this->label ) . ''; 51 | } 52 | 53 | if ( isset( $this->description ) && '' !== $this->description ) { 54 | echo '' . sanitize_text_field( $this->description ) . ''; 55 | } 56 | 57 | // Output the div that will wrap our picker triggers. 58 | echo '
'; 59 | 60 | // Loop over settings to output the actual inputs. 61 | foreach ( $this->settings as $key => $setting ) { 62 | 63 | // Store color data associated with the current setting. 64 | $page_data = $this->page_data[ $setting->id ]; 65 | 66 | // Process the palette. Default to 'true' if no palette was passed in. 67 | $palette = ( isset( $page_data['palette'] ) ) ? $page_data['palette'] : true; 68 | if ( is_array( $palette ) ) { 69 | $palette = implode( '|', $palette ); 70 | } elseif ( true === $palette || 'true' === $palette ) { 71 | $palette = 'true'; 72 | } else { 73 | $palette = 'false'; 74 | } 75 | 76 | // Grab the rest of the setting data. Define defaults to make everything except 'label' optional. 77 | $label = $page_data['label']; 78 | $default = ( isset( $page_data['default'] ) ) ? $page_data['default'] : '#000000'; 79 | $show_opacity = ( isset( $page_data['show_opacity'] ) ) ? $page_data['show_opacity'] : 'true'; 80 | 81 | ?> 82 | get_link( $key ); ?> /> 83 | 2 | 3 | 4 | 5 | > 6 | 7 | 8 | 9 | <?php echo esc_html( spine_get_title() ); ?> 10 | 11 | 12 | 13 | 14 | 15 | 16 | 17 | 18 | 19 | 20 | 21 | 22 | 23 | 24 | 25 | 26 | 27 | 28 | 29 | 30 | 31 | 32 | 39 | 40 | 43 | 44 | 45 | 46 | 47 | 48 | 49 | 50 | 51 | 52 | 53 | 54 | 55 | 56 | 57 | 58 | 59 | 60 | 61 | 62 | 63 | 64 | 65 | 66 | 67 | 68 | > 69 | 70 | 77 | 78 | 79 |
80 | 81 |
82 | 83 | $.trim(json.url.length)) { 106 | return; 107 | } 108 | 109 | $('[placeholder="url to image"]').val(json.url); 110 | }); 111 | 112 | window.mb.frame.open(); 113 | } 114 | } 115 | 116 | /*{ 117 | type: 'textbox', 118 | name: 'multilineName', 119 | label: 'Multiline Text Box', 120 | value: 'You can say a lot of stuff in here', 121 | multiline: true, 122 | minWidth: 300, 123 | minHeight: 100 124 | }, 125 | { 126 | type: 'listbox', 127 | name: 'listboxName', 128 | label: 'List Box', 129 | 'values': [ 130 | {text: 'Option 1', value: '1'}, 131 | {text: 'Option 2', value: '2'}, 132 | {text: 'Option 3', value: '3'} 133 | ] 134 | }*/ 135 | ], 136 | 137 | 138 | 139 | 140 | 141 | 142 | onsubmit: function( e ) { 143 | var card_data = ' [contact_cards '; 144 | card_data += ' name="' + e.data.name + '" '; 145 | 146 | if( "" !== e.data.position ){ 147 | card_data += ' position="' + e.data.position + '" '; 148 | } 149 | 150 | if( "" !== e.data.email ){ 151 | card_data += ' email="' + e.data.email + '" '; 152 | } 153 | 154 | 155 | 156 | if( "" !== e.data.profile_url ){ 157 | card_data += ' profile_url="' + e.data.profile_url + '" '; 158 | } 159 | card_data += ' ]'; 160 | 161 | card_data += ' ' + e.data.descrip + '[/contact_cards]'; 162 | 163 | editor.insertContent( card_data ); 164 | } 165 | }); 166 | } 167 | }); 168 | 169 | 170 | 171 | } 172 | }); 173 | tinymce.PluginManager.add( 'contactCard', tinymce.plugins.contactCard ); 174 | })(jQuery); 175 | -------------------------------------------------------------------------------- /includes/assets/multi-color-picker/multi-color-picker.css: -------------------------------------------------------------------------------- 1 | /** 2 | * Multi Color Picker CSS 3 | */ 4 | 5 | .customize-control-multi-color .wp-picker-open ~ .wp-picker-holder .alpha-slider-container { 6 | display: block; 7 | } 8 | 9 | .customize-control-multi-color .wp-picker-open ~ .wp-picker-input-wrap .wp-picker-default { 10 | display: inline-block !important; 11 | } 12 | 13 | .customize-control-multi-color .multi-color-picker-triggers { 14 | margin-bottom: 2px; 15 | } 16 | 17 | .customize-control-multi-color .multi-color-picker-trigger { 18 | background-image: url(transparency-grid.png); 19 | box-shadow: 0 0 5px rgba(0,0,0,0.4) inset; 20 | height: 24px; 21 | width: 24px; 22 | display: inline-block; 23 | margin-right: 10px; 24 | margin-bottom: 10px; 25 | border-radius: 3px; 26 | } 27 | 28 | .customize-control-multi-color .multi-color-picker-trigger .wp-color-result { 29 | margin: 0; 30 | height: 24px; 31 | padding-left: 24px; 32 | border: 0; 33 | } 34 | 35 | .customize-control-multi-color .wp-picker-container { 36 | float: left; 37 | height: 0; 38 | } 39 | 40 | .customize-control-multi-color .wp-picker-container.open { 41 | height: auto; 42 | margin-bottom: 10px; 43 | } 44 | 45 | .customize-control-multi-color .wp-picker-container .multi-color-control-color-title { 46 | margin-bottom: 6px; 47 | color: #333; 48 | } 49 | 50 | .customize-control-multi-color .wp-picker-input-wrap { 51 | overflow: hidden; 52 | width: 100%; 53 | } 54 | 55 | .customize-control-multi-color .wp-picker-container input[type=text].wp-color-picker { 56 | width: 66.5%; 57 | width: calc( 100% - 85px ); 58 | padding: 8px 10px 7px; 59 | float: left; 60 | } 61 | 62 | .customize-control-multi-color .wp-picker-default { 63 | float: right; 64 | height: 0; 65 | } 66 | 67 | .customize-control-multi-color .iris-picker { 68 | border-bottom: none; 69 | } 70 | 71 | .customize-control-multi-color .iris-square:hover, 72 | .customize-control-multi-color .iris-slider:hover { 73 | cursor: pointer; 74 | } 75 | 76 | .customize-control-multi-color .wp-picker-container .wp-color-result { 77 | height: 0; 78 | width: 0; 79 | margin: 0; 80 | padding: 0; 81 | border: 0; 82 | } 83 | 84 | .customize-control-multi-color .alpha-slider-container { 85 | border: 1px solid #dfdfdf; 86 | border-top: none; 87 | display: none; 88 | background: #FFF; 89 | padding: 0 11px 10px; 90 | position: relative; 91 | } 92 | 93 | .customize-control-multi-color .alpha-slider-container .click-zone:hover, 94 | .customize-control-multi-color .alpha-slider-container .alpha-slider:hover { 95 | cursor: pointer; 96 | } 97 | 98 | .customize-control-multi-color .alpha-slider-container .ui-slider { 99 | position: relative; 100 | z-index: 1; 101 | height: 24px; 102 | text-align: center; 103 | margin: 0 auto; 104 | width: 88%; 105 | width: calc( 100% - 28px ); 106 | } 107 | 108 | .customize-control-multi-color .alpha-slider-container .ui-slider-handle { 109 | color: #777; 110 | background-color: #FFF; 111 | text-shadow: 0 1px 0 #FFF; 112 | text-decoration: none; 113 | position: absolute; 114 | z-index: 2; 115 | box-shadow: 0 1px 2px rgba(0,0,0,0.2); 116 | border: 1px solid #aaa; 117 | -webkit-border-radius: 4px; 118 | -moz-border-radius: 4px; 119 | border-radius: 4px; 120 | margin-top: -2px; 121 | height: 20px; 122 | width: 20px; 123 | cursor: ew-resize; 124 | font-size: 0; 125 | padding: 3px; 126 | line-height: 22px; 127 | margin-left: -14px; 128 | } 129 | 130 | .customize-control-multi-color .alpha-slider-container .ui-slider-handle.show-opacity { 131 | font-size: 12px; 132 | } 133 | 134 | .customize-control-multi-color .alpha-slider-container .click-zone { 135 | width: 14px; 136 | height: 24px; 137 | display: block; 138 | position: absolute; 139 | left: 10px; 140 | } 141 | 142 | .customize-control-multi-color .alpha-slider-container .max-click-zone { 143 | right: 10px; 144 | left: auto; 145 | } 146 | 147 | .customize-control-multi-color .alpha-slider-container .transparency { 148 | height: 24px; 149 | width: 100%; 150 | background-color: #FFF; 151 | background-image: url(transparency-grid.png); 152 | box-shadow: 0 0 5px rgba(0,0,0,0.4) inset; 153 | -webkit-border-radius: 3px; 154 | -moz-border-radius: 3px; 155 | border-radius: 3px; 156 | padding: 0; 157 | margin-top: -24px; 158 | } 159 | 160 | .customize-control-multi-color .wp-color-result::after { 161 | display: none; 162 | } 163 | 164 | @media (min-width: 641px) { 165 | 166 | .customize-control-multi-color .wp-picker-container input[type=text].wp-color-picker { 167 | width: 71.5%; 168 | width: calc( 100% - 75px ); 169 | padding: 5px 10px; 170 | } 171 | 172 | .customize-control-multi-color .wp-picker-input-wrap { 173 | padding-bottom: 3px; 174 | } 175 | 176 | } 177 | 178 | @media (min-width: 783px) { 179 | 180 | .customize-control-multi-color .wp-picker-container input[type=text].wp-color-picker { 181 | width: 75%; 182 | width: calc( 100% - 64px ); 183 | padding: 3px 10px; 184 | } 185 | 186 | } 187 | 188 | @media (min-width: 981px) { 189 | 190 | .customize-control-multi-color { 191 | padding-bottom: 10px; 192 | } 193 | 194 | .customize-control-multi-color:last-child { 195 | padding-bottom: 0; 196 | } 197 | 198 | } -------------------------------------------------------------------------------- /includes/assets/multi-color-picker/readme.md: -------------------------------------------------------------------------------- 1 | # Multi Color Picker Customizer Control # 2 | 3 | Ever wanted to pick multiple colors from a single color control in the Customizer? Now you can with this multi color picker control. It uses a custom version of the stock WP color picker that supports RGBa color values and includes an opacity slider. 4 | 5 | Here's what it looks like: 6 | 7 | ![WordPress Multi Color Picker](https://github.com/BraadMartin/components/blob/master/demos/multi-color-picker.gif) 8 | 9 | ![Wordpress Multi Color Picker Color Grid](https://github.com/BraadMartin/components/blob/master/demos/multi-color-picker-grid.png) 10 | 11 | ## How It Works ## 12 | 13 | Each color is registered to its own setting and can be used exactly as if the color was picked with the standard Customize_Color_Control. Live-previewing in JS using transport: postMessage works great, as does transport: refresh. This control takes advantage of the support in the Customizer API for hooking a single control up to multiple settings. Multiple "groups" of colors (multiple instances of the Customize_Multi_Color_Control class) can be used together without limitations. 14 | 15 | One key difference between this control and my [Alpha Color Picker Control](https://github.com/BraadMartin/components/tree/master/customizer/alpha-color-picker) is that the palette, default color, and show_opacity options are no longer explicity tied to the control. I wanted to allow these to be set individually for each color, so the control requires a single additional color_data array with all the extra data about each color setting. 16 | 17 | You could write out the color_data array and register the settings and control yourself, but I've also included a helper function that I recommend using that takes care of everything. Since the helper function is not part of the control itself it lives in the customizer.php file in the customizer folder of this repo. The helper function is components_register_color_group, but "components" is just my prefix for this repo and should be changed to the prefix for your project. 18 | 19 | Feedback and pull requests are encouraged! 20 | 21 | ## Usage ## 22 | 23 | ```php 24 | add_action( 'customize_register', 'yourprefix_customize_register' ); 25 | function yourprefix_customize_register( $wp_customize ) { 26 | 27 | /** 28 | * Inlcude the Multi Color Picker control file. 29 | */ 30 | require_once( dirname( __FILE__ ) . '/multi-color-picker/multi-color-picker.php' ); 31 | 32 | /** 33 | * Define a default palette that we'll use for some of the colors. 34 | * 35 | * We could certainly define a separate palette for each color also. 36 | */ 37 | $palette = array( 38 | 'rgba(255, 0, 0, 0.7)', 39 | 'rgba(54, 0, 170, 0.8)', 40 | '#FFCC00', 41 | 'rgba( 20, 20, 20, 0.8 )', 42 | '#00CC77', 43 | ); 44 | 45 | /** 46 | * Define the color settings array that we'll pass to our helper function to 47 | * register each setting and group them under a single control. 48 | * 49 | * For this example we'll register a group of background colors. 50 | */ 51 | $bg_colors = array( 52 | 'body_bg' => array( 53 | 'label' => __( 'Body Background', 'yourprefix' ), 54 | 'default' => 'rgba(255, 0, 0, 0.7)', // Hex, RGB, or RGBa works here 55 | 'palette' => $palette, // This could also be true or false 56 | ), 57 | 'header_bg' => array( 58 | 'label' => __( 'Header Background', 'yourprefix' ), 59 | 'default' => 'rgba(54, 0, 170, 0.8)', 60 | 'palette' => $palette, 61 | ), 62 | 'sidebar_bg' => array( 63 | 'label' => __( 'Sidebar Background', 'yourprefix' ), 64 | 'default' => '#FFCC00', 65 | 'palette' => $palette, 66 | ), 67 | 'article_bg' => array( 68 | 'label' => __( 'Article Background', 'yourprefix' ), 69 | 'default' => 'rgba( 20, 20, 20, 0.8 )', 70 | 'palette' => $palette, 71 | ), 72 | 'footer_bg' => array( 73 | 'label' => __( 'Footer Background', 'yourprefix' ), 74 | 'default' => '#00CC77', 75 | 'palette' => $palette, 76 | ), 77 | ); 78 | 79 | /** 80 | * Set up the array of standard control data. 81 | * 82 | * This could also have an active_callback, a sanitize_callback, etc. 83 | */ 84 | $bg_colors_control_data = array( 85 | 'label' => __( 'Background Colors', 'yourprefix' ), 86 | 'description' => __( 'This is the optional control description.', 'yourprefix' ), 87 | 'section' => 'colors' 88 | ); 89 | 90 | /** 91 | * Use the helper function to register the group of settings and associate them with 92 | * a single Multi Color Picker control. 93 | */ 94 | components_register_color_group( 95 | $wp_customize, // The main customizer object. 96 | $bg_colors, // The array of color setting data for this group. 97 | 'yourprefix_background_colors', // The string name for the option to use. 98 | $bg_colors_control_data, // The array of standard control data. 99 | $palette, // A fallback palette to use if none is specified in the color setting data. 100 | $transport // The transport method to use for the setting group. 101 | ); 102 | 103 | } 104 | ``` 105 | 106 | A big thanks to David Gwyer for providing the original inspiration for this control. 107 | 108 | ## License ## 109 | 110 | This control is licensed under the GPL. Please do anything you want with it. :) 111 | -------------------------------------------------------------------------------- /composer.lock: -------------------------------------------------------------------------------- 1 | { 2 | "_readme": [ 3 | "This file locks the dependencies of your project to a known state", 4 | "Read more about it at https://getcomposer.org/doc/01-basic-usage.md#composer-lock-the-lock-file", 5 | "This file is @generated automatically" 6 | ], 7 | "hash": "7d6e394f587f87d3e91a25bc2fb344be", 8 | "content-hash": "300e7d04b06ccb0253ff595615851dd3", 9 | "packages": [], 10 | "packages-dev": [ 11 | { 12 | "name": "squizlabs/php_codesniffer", 13 | "version": "2.3.4", 14 | "source": { 15 | "type": "git", 16 | "url": "https://github.com/squizlabs/PHP_CodeSniffer.git", 17 | "reference": "11a2545c44a5915f883e2e5ec12e14ed345e3ab2" 18 | }, 19 | "dist": { 20 | "type": "zip", 21 | "url": "https://api.github.com/repos/squizlabs/PHP_CodeSniffer/zipball/11a2545c44a5915f883e2e5ec12e14ed345e3ab2", 22 | "reference": "11a2545c44a5915f883e2e5ec12e14ed345e3ab2", 23 | "shasum": "" 24 | }, 25 | "require": { 26 | "ext-tokenizer": "*", 27 | "ext-xmlwriter": "*", 28 | "php": ">=5.1.2" 29 | }, 30 | "bin": [ 31 | "scripts/phpcs", 32 | "scripts/phpcbf" 33 | ], 34 | "type": "library", 35 | "extra": { 36 | "branch-alias": { 37 | "dev-master": "2.0.x-dev" 38 | } 39 | }, 40 | "autoload": { 41 | "classmap": [ 42 | "CodeSniffer.php", 43 | "CodeSniffer/CLI.php", 44 | "CodeSniffer/Exception.php", 45 | "CodeSniffer/File.php", 46 | "CodeSniffer/Fixer.php", 47 | "CodeSniffer/Report.php", 48 | "CodeSniffer/Reporting.php", 49 | "CodeSniffer/Sniff.php", 50 | "CodeSniffer/Tokens.php", 51 | "CodeSniffer/Reports/", 52 | "CodeSniffer/Tokenizers/", 53 | "CodeSniffer/DocGenerators/", 54 | "CodeSniffer/Standards/AbstractPatternSniff.php", 55 | "CodeSniffer/Standards/AbstractScopeSniff.php", 56 | "CodeSniffer/Standards/AbstractVariableSniff.php", 57 | "CodeSniffer/Standards/IncorrectPatternException.php", 58 | "CodeSniffer/Standards/Generic/Sniffs/", 59 | "CodeSniffer/Standards/MySource/Sniffs/", 60 | "CodeSniffer/Standards/PEAR/Sniffs/", 61 | "CodeSniffer/Standards/PSR1/Sniffs/", 62 | "CodeSniffer/Standards/PSR2/Sniffs/", 63 | "CodeSniffer/Standards/Squiz/Sniffs/", 64 | "CodeSniffer/Standards/Zend/Sniffs/" 65 | ] 66 | }, 67 | "notification-url": "https://packagist.org/downloads/", 68 | "license": [ 69 | "BSD-3-Clause" 70 | ], 71 | "authors": [ 72 | { 73 | "name": "Greg Sherwood", 74 | "role": "lead" 75 | } 76 | ], 77 | "description": "PHP_CodeSniffer tokenizes PHP, JavaScript and CSS files and detects violations of a defined set of coding standards.", 78 | "homepage": "http://www.squizlabs.com/php-codesniffer", 79 | "keywords": [ 80 | "phpcs", 81 | "standards" 82 | ], 83 | "time": "2015-09-09 00:18:50" 84 | }, 85 | { 86 | "name": "wp-coding-standards/wpcs", 87 | "version": "0.9.0", 88 | "source": { 89 | "type": "git", 90 | "url": "https://github.com/WordPress-Coding-Standards/WordPress-Coding-Standards.git", 91 | "reference": "b415094aa5fd24da6eba2295323bcff840902dd3" 92 | }, 93 | "dist": { 94 | "type": "zip", 95 | "url": "https://api.github.com/repos/WordPress-Coding-Standards/WordPress-Coding-Standards/zipball/b415094aa5fd24da6eba2295323bcff840902dd3", 96 | "reference": "b415094aa5fd24da6eba2295323bcff840902dd3", 97 | "shasum": "" 98 | }, 99 | "require": { 100 | "squizlabs/php_codesniffer": "~2.2" 101 | }, 102 | "type": "library", 103 | "notification-url": "https://packagist.org/downloads/", 104 | "license": [ 105 | "MIT" 106 | ], 107 | "authors": [ 108 | { 109 | "name": "Contributors", 110 | "homepage": "https://github.com/WordPress-Coding-Standards/WordPress-Coding-Standards/graphs/contributors" 111 | } 112 | ], 113 | "description": "PHP_CodeSniffer rules (sniffs) to enforce WordPress coding conventions", 114 | "keywords": [ 115 | "phpcs", 116 | "standards", 117 | "wordpress" 118 | ], 119 | "time": "2016-02-01 16:14:59" 120 | } 121 | ], 122 | "aliases": [], 123 | "minimum-stability": "stable", 124 | "stability-flags": [], 125 | "prefer-stable": false, 126 | "prefer-lowest": false, 127 | "platform": [], 128 | "platform-dev": [] 129 | } 130 | -------------------------------------------------------------------------------- /includes/assets/multi-color-picker/multi-color-picker.php: -------------------------------------------------------------------------------- 1 | . 21 | */ 22 | class Customize_Multi_Color_Control extends WP_Customize_Control { 23 | 24 | /** 25 | * Official control name. 26 | */ 27 | public $type = 'multi-color'; 28 | 29 | /** 30 | * The array of color data. 31 | */ 32 | public $color_data; 33 | 34 | /** 35 | * The label for this control group. 36 | */ 37 | public $label; 38 | 39 | /** 40 | * Enqueue scripts and styles. 41 | * 42 | * Ideally these would get registered and given proper paths before this control object 43 | * gets initialized, then we could simply enqueue them here, but for completeness as a 44 | * stand alone class we'll register and enqueue them here. 45 | */ 46 | public function enqueue() { 47 | wp_enqueue_script( 'multi-color-picker', get_stylesheet_directory_uri() . '/includes/assets/multi-color-picker/multi-color-picker.js', array( 'jquery', 'wp-color-picker' ), '1.0.0', true ); 48 | wp_enqueue_style( 'multi-color-picker', get_stylesheet_directory_uri() . '/includes/assets/multi-color-picker/multi-color-picker.css', array( 'wp-color-picker' ), '1.0.0' ); 49 | } 50 | 51 | /** 52 | * Render the control. 53 | */ 54 | public function render_content() { 55 | 56 | if ( isset( $this->label ) && '' !== $this->label ) { 57 | echo '' . sanitize_text_field( $this->label ) . ''; 58 | } 59 | 60 | if ( isset( $this->description ) && '' !== $this->description ) { 61 | echo '' . sanitize_text_field( $this->description ) . ''; 62 | } 63 | 64 | // Output the div that will wrap our picker triggers. 65 | echo '
'; 139 | 140 | // Output the div that will wrap our picker triggers. 141 | //echo '