60 |
61 |
65 |
66 |
67 |
68 |
69 |
70 |
71 |
72 |
73 |
74 |
75 |
76 |
77 |
81 |
82 |
83 |
212 |
213 |
--------------------------------------------------------------------------------
/edit.js:
--------------------------------------------------------------------------------
1 | (function( $ ) {
2 |
3 | function optimizelyEditPage() {
4 | // Initialize data from the input fields
5 | var projectId = $( '#optimizely_project_id' ).val();
6 | var optly = new OptimizelyAPI( $( '#optimizely_token' ).val() );
7 |
8 | if ( !! $( '#optimizely_experiment_id' ).val() ) {
9 | optly.get( 'experiments/' + $( '#optimizely_experiment_id' ).val(), function( response ) {
10 | optly.experiment = response;
11 | showExperiment( optly.experiment );
12 | });
13 | } else {
14 | optly.experiment = {
15 | id: $( '#optimizely_experiment_id' ).val(),
16 | status: $( '#optimizely_experiment_status' ).val()
17 | }
18 | $( '#optimizely_not_created' ).show();
19 | $( '#optimizely_created' ).hide();
20 | }
21 |
22 | // On click, run the createExperiment function
23 | $( '#optimizely_create' ).click(function() {
24 | createExperiment();
25 | });
26 |
27 | // Then, handle starts and pauses on the experiment
28 | $( '#optimizely_toggle_running' ).click(function() {
29 | if ( optly.experiment.status == 'Running' ) {
30 | pauseExperiment( optly.experiment );
31 | } else {
32 | startExperiment( optly.experiment );
33 | }
34 | });
35 |
36 | // Render the experiment's state on the page
37 | function showExperiment( experiment ) {
38 | // ID and links
39 | $( '#optimizely_experiment_id' ).val( experiment.id );
40 | $( '#optimizely_view' ).attr( 'href', 'https://app.optimizely.com/edit?experiment_id=' + experiment.id );
41 |
42 | // Status and buttons
43 | $( '#optimizely_experiment_status' ).val( experiment.status );
44 | $( '#optimizely_experiment_status_text' ).text( experiment.status );
45 | if ( experiment.status == 'Running' ) {
46 | $( '#optimizely_toggle_running' ).text( 'Pause Experiment' );
47 | } else {
48 | $( '#optimizely_toggle_running' ).text( 'Start Experiment' );
49 | }
50 |
51 | // Hide create button, show status
52 | $( '#optimizely_not_created' ).hide();
53 | $( '#optimizely_created' ).show();
54 |
55 | // Update Wordpress backend w/ experiment data
56 | var data = {
57 | action: 'update_experiment_meta',
58 | post_id: $( '#post_ID' ).val(),
59 | optimizely_experiment_id: experiment.id,
60 | optimizely_experiment_status: experiment.status
61 | };
62 |
63 | $( '.optimizely_variation' ).each(function( index, input ) {
64 | data[ $( input ).attr( 'name' ) ] = $( input ).val();
65 | });
66 | $.post( wpAjaxUrl, data );
67 | }
68 |
69 | /*
70 | Replace all dynamic place holders with the values of the post and variation
71 | */
72 |
73 | function replacePlaceholderVariables (template, newTitle){
74 | var postId = $( '#post_ID' ).val();
75 | var originalTitle = $( '#title' ).val();
76 | var code = template
77 | .replace( /\$OLD_TITLE/g, originalTitle )
78 | .replace( /\$NEW_TITLE/g, newTitle )
79 | .replace( /\$POST_ID/g, postId );
80 |
81 | return code;
82 | }
83 |
84 | // This function creates an experiment by providing a description based on the post's title and an edit_url based on the permalink of the Wordpress post. We send these as a POST request and register a callback to run the onExperimentCreated function when it completes.
85 | function createExperiment() {
86 | $( '#optimizely_create' ).text( 'Creating...' );
87 | experiment = {};
88 | post_id = $( '#post_ID' ).val();
89 | experiment.description = 'Wordpress [' + post_id + ']: ' + $( '#title' ).val();
90 |
91 | // Activation Mode
92 | experiment.activation_mode = $( '#optimizely_activation_mode' ).val();
93 | if('conditional' === experiment.activation_mode ){
94 | experiment.conditional_code = replacePlaceholderVariables( $( '#optimizely_conditional_activation_code' ).val() , "" );
95 | }
96 | experiment.edit_url = $( '#optimizely_experiment_url' ).val();
97 |
98 | // Setup url targeting
99 | var loc = document.createElement( 'a' );
100 | loc.href = experiment.edit_url;
101 | var urlTargetdomain = loc.hostname;
102 | var urlTargetType = 'substring';
103 | if ( "" != $( '#optimizely_url_targeting' ).val() && "" != $( '#optimizely_url_targeting_type' ).val() ){
104 | urlTargetdomain = $( '#optimizely_url_targeting' ).val();
105 | urlTargetType = $( '#optimizely_url_targeting_type' ).val();
106 | }
107 | experiment.url_conditions = [
108 | {
109 | 'match_type': urlTargetType,
110 | 'value': urlTargetdomain
111 | }
112 | ];
113 |
114 | optly.post( 'projects/' + projectId + '/experiments', experiment, onExperimentCreated );
115 | }
116 |
117 | /*
118 | The experiment we created has two built-in variations, but now we need to add a third and update the content.
119 | Since we're adding a variation, we also need to calculate the traffic weight to use for each one.
120 | Once we've done this, we'll call the createVariation function explained below.
121 | Our experiment comes with an Engagement goal, but we'll also add one to measure views to the post.
122 | */
123 | function onExperimentCreated( experiment ) {
124 | // Pause for 200ms so that the experiment is guarenteed to be created before editing and adding variations
125 | setTimeout(function() {
126 | optly.experiment = experiment;
127 | var variations = $( '.optimizely_variation' ).filter(function() {
128 | return $( this ).val().length > 0
129 | });
130 |
131 | // Set variation weights
132 | var numVariations = variations.length + 1;
133 | var variationWeight = Math.floor( 10000 / numVariations );
134 | var leftoverWeight = 10000 - ( variationWeight * numVariations );
135 |
136 | // Create variations
137 | variations.each(function( index, input ) {
138 | var weight = variationWeight;
139 | setTimeout(function() {
140 | createVariation( experiment, index + 1, $( input ).val(), weight );
141 | }, 200 );
142 | });
143 |
144 | // Update original with correct traffic allocation
145 | var origVariationWeight = { 'weight': variationWeight + ( leftoverWeight > 0 ? leftoverWeight : 0 ) };
146 | optly.patch( 'variations/' + experiment.variation_ids[0], origVariationWeight, checkExperimentReady );
147 |
148 | // Create goal
149 | createGoal( experiment );
150 | }, 1000 );
151 | }
152 |
153 | /*
154 | We create a pageview goal that measures how many times the post is viewed.
155 | We add one url, the permalink, and use the substring match type.
156 | We also set 'addable' to false so that the goal won't clog up the list of goals for other experiments.
157 | Finally, we associate the goal with the experiment we just created by adding the experiment's id to experiment_ids.
158 | We POST the goal to the projects/{id}/goals endpoint to create it.
159 | */
160 | function createGoal( experiment ) {
161 | var goal = {
162 | goal_type: 3, // pageview goal
163 | title: 'Views to page',
164 | urls: [ $( '#optimizely_experiment_url' ).val() ],
165 | url_match_types: [4], // substring
166 | addable: false, // don't clog up the goal list
167 | experiment_ids: [ experiment.id ]
168 | }
169 |
170 | optly.post( 'projects/' + experiment.project_id + '/goals/', goal, checkExperimentReady );
171 | }
172 |
173 |
174 | /*
175 | To create a variation, we first generate the variation code.
176 | We use a template based on the Wordpress theme, and then we drop in the values for our variation. The result would be:
177 | $( '.post-27 .entry-title a' ).text( 'Alternate Title #1' );
178 | Once we've generated this variation code, we include it in the js_component parameter of our API request.
179 | We also add a variation title and weight.
180 | In this example, we have two alternate headlines plus an original.
181 | When we created the experiment, it also came with two variations that were created automatically.
182 | We'll leave variation 0 alone as the original, update variation 1 to use the first alternate headline, and create a new variation 2 with the second alternate headline.
183 | */
184 | function createVariation( experiment, index, newTitle, weight ) {
185 | // Generate variation code
186 | var variationTemplate = $( '#optimizely_variation_template' ).val();
187 | var postId = $( '#post_ID' ).val();
188 | var originalTitle = $( '#title' ).val();
189 | var code = replacePlaceholderVariables( variationTemplate , newTitle );
190 |
191 | // Request data
192 | var variation = {
193 | 'description': newTitle,
194 | 'js_component': code,
195 | 'weight': weight,
196 | }
197 |
198 | // Update variation #1, create the others
199 | if ( index == 1 ) {
200 | optly.patch( 'variations/' + experiment.variation_ids[1], variation, checkExperimentReady );
201 | } else {
202 | optly.post( 'experiments/' + experiment.id + '/variations', variation, checkExperimentReady );
203 | }
204 | }
205 |
206 | /*
207 | Once all the PUT and POST requests have returned, we're done!
208 | At this point, we can let the user know that the experiment is created and ready.
209 | */
210 | function checkExperimentReady( response ) {
211 | if ( 0 == optly.outstandingRequests ) {
212 | showExperiment( optly.experiment );
213 | }
214 | }
215 |
216 | /*
217 | To start a pause an experiment, we just need to change it's status to running.
218 | The patch method GETs the experiment metadata, changes the specified fields, and PUTs the object back to Optimizely.
219 | */
220 | function startExperiment( experiment ) {
221 | $( '#optimizely_toggle_running' ).text( 'Starting...' );
222 | optly.patch( 'experiments/' + experiment.id, { 'status': 'Running' }, function( response ) {
223 | optly.experiment = response;
224 | showExperiment( optly.experiment );
225 | });
226 | }
227 |
228 | function pauseExperiment( experiment ) {
229 | $( '#optimizely_toggle_running' ).text( 'Pausing...' );
230 | optly.patch( 'experiments/' + experiment.id, { 'status': 'Paused' }, function( response ) {
231 | optly.experiment = response;
232 | showExperiment( optly.experiment );
233 | });
234 | }
235 |
236 | }
237 |
238 | $( document ).ready(function() {
239 | optimizelyEditPage();
240 | });
241 |
242 | })( jQuery );
243 |
--------------------------------------------------------------------------------
/edit.php:
--------------------------------------------------------------------------------
1 |
27 |
%s',
29 | esc_html__( 'Please configure your API credentials in the', 'optimizely' ),
30 | esc_url( menu_page_url( 'optimizely-config', false ) ),
31 | esc_html__( 'Optimizely settings page', 'optimizely' )
32 | ); ?>.
33 | ID, $meta_key, true );
42 | echo '
';
43 | echo sprintf(
44 | '%s #%u ',
45 | esc_attr( $meta_key ),
46 | esc_html__( 'Variation', 'optimizely' ),
47 | absint( $i )
48 | );
49 | echo sprintf(
50 | ' ',
51 | esc_attr( $meta_key ),
52 | esc_attr( $meta_key ),
53 | esc_html__( 'Title', 'optimizely' ),
54 | absint( $i ),
55 | esc_attr( $titles[ $i ] )
56 | );
57 | echo '
';
58 | }
59 | ?>
60 |
61 |
62 |
63 |
64 |
65 |
66 |
67 |
68 |
69 |
70 |
71 |
72 | ID) == 'publish'): ?>
73 |
76 |
77 |
78 |
79 |
80 |
: ID, 'optimizely_experiment_status', true ) ) ?>
81 |
82 | :
83 |
84 |
85 |
86 |
87 |
88 | $post_id,
137 | 'post_title' => $winning_var_title
138 | ) );
139 | }
140 |
141 | exit;
142 | }
143 | add_action( 'wp_ajax_update_post_title', 'optimizely_update_post_title' );
144 | /**
145 | * Check if this is a post type that uses Optimizely.
146 | * @param string $post_type
147 | * @return boolean
148 | */
149 | function optimizely_is_post_type_enabled( $post_type ) {
150 | $selected_post_types = explode( ',', get_option( 'optimizely_post_types' ) );
151 | if ( ! empty( $selected_post_types ) && in_array( $post_type, $selected_post_types ) ) {
152 | return true;
153 | } else {
154 | return false;
155 | }
156 | }
157 | /**
158 | * Return the meta key format used for all post title variations.
159 | * @param int $i
160 | * @return string
161 | */
162 | function optimizely_meta_key( $i ) {
163 | return 'post_title' . absint( $i );
164 | }
165 | ?>
--------------------------------------------------------------------------------
/font-awesome.min.css:
--------------------------------------------------------------------------------
1 | /*!
2 | * Font Awesome 4.2.0 by @davegandy - http://fontawesome.io - @fontawesome
3 | * License - http://fontawesome.io/license (Font: SIL OFL 1.1, CSS: MIT License)
4 | */@font-face{font-family:'FontAwesome';src:url('fonts/fontawesome-webfont.eot?v=4.2.0');src:url('fonts/fontawesome-webfont.eot?#iefix&v=4.2.0') format('embedded-opentype'),url('fonts/fontawesome-webfont.woff?v=4.2.0') format('woff'),url('fonts/fontawesome-webfont.ttf?v=4.2.0') format('truetype'),url('fonts/fontawesome-webfont.svg?v=4.2.0#fontawesomeregular') format('svg');font-weight:normal;font-style:normal}.fa{display:inline-block;font:normal normal normal 14px/1 FontAwesome;font-size:inherit;text-rendering:auto;-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale}.fa-lg{font-size:1.33333333em;line-height:.75em;vertical-align:-15%}.fa-2x{font-size:2em}.fa-3x{font-size:3em}.fa-4x{font-size:4em}.fa-5x{font-size:5em}.fa-fw{width:1.28571429em;text-align:center}.fa-ul{padding-left:0;margin-left:2.14285714em;list-style-type:none}.fa-ul>li{position:relative}.fa-li{position:absolute;left:-2.14285714em;width:2.14285714em;top:.14285714em;text-align:center}.fa-li.fa-lg{left:-1.85714286em}.fa-border{padding:.2em .25em .15em;border:solid .08em #eee;border-radius:.1em}.pull-right{float:right}.pull-left{float:left}.fa.pull-left{margin-right:.3em}.fa.pull-right{margin-left:.3em}.fa-spin{-webkit-animation:fa-spin 2s infinite linear;animation:fa-spin 2s infinite linear}@-webkit-keyframes fa-spin{0%{-webkit-transform:rotate(0deg);transform:rotate(0deg)}100%{-webkit-transform:rotate(359deg);transform:rotate(359deg)}}@keyframes fa-spin{0%{-webkit-transform:rotate(0deg);transform:rotate(0deg)}100%{-webkit-transform:rotate(359deg);transform:rotate(359deg)}}.fa-rotate-90{filter:progid:DXImageTransform.Microsoft.BasicImage(rotation=1);-webkit-transform:rotate(90deg);-ms-transform:rotate(90deg);transform:rotate(90deg)}.fa-rotate-180{filter:progid:DXImageTransform.Microsoft.BasicImage(rotation=2);-webkit-transform:rotate(180deg);-ms-transform:rotate(180deg);transform:rotate(180deg)}.fa-rotate-270{filter:progid:DXImageTransform.Microsoft.BasicImage(rotation=3);-webkit-transform:rotate(270deg);-ms-transform:rotate(270deg);transform:rotate(270deg)}.fa-flip-horizontal{filter:progid:DXImageTransform.Microsoft.BasicImage(rotation=0, mirror=1);-webkit-transform:scale(-1, 1);-ms-transform:scale(-1, 1);transform:scale(-1, 1)}.fa-flip-vertical{filter:progid:DXImageTransform.Microsoft.BasicImage(rotation=2, mirror=1);-webkit-transform:scale(1, -1);-ms-transform:scale(1, -1);transform:scale(1, -1)}:root .fa-rotate-90,:root .fa-rotate-180,:root .fa-rotate-270,:root .fa-flip-horizontal,:root .fa-flip-vertical{filter:none}.fa-stack{position:relative;display:inline-block;width:2em;height:2em;line-height:2em;vertical-align:middle}.fa-stack-1x,.fa-stack-2x{position:absolute;left:0;width:100%;text-align:center}.fa-stack-1x{line-height:inherit}.fa-stack-2x{font-size:2em}.fa-inverse{color:#fff}.fa-glass:before{content:"\f000"}.fa-music:before{content:"\f001"}.fa-search:before{content:"\f002"}.fa-envelope-o:before{content:"\f003"}.fa-heart:before{content:"\f004"}.fa-star:before{content:"\f005"}.fa-star-o:before{content:"\f006"}.fa-user:before{content:"\f007"}.fa-film:before{content:"\f008"}.fa-th-large:before{content:"\f009"}.fa-th:before{content:"\f00a"}.fa-th-list:before{content:"\f00b"}.fa-check:before{content:"\f00c"}.fa-remove:before,.fa-close:before,.fa-times:before{content:"\f00d"}.fa-search-plus:before{content:"\f00e"}.fa-search-minus:before{content:"\f010"}.fa-power-off:before{content:"\f011"}.fa-signal:before{content:"\f012"}.fa-gear:before,.fa-cog:before{content:"\f013"}.fa-trash-o:before{content:"\f014"}.fa-home:before{content:"\f015"}.fa-file-o:before{content:"\f016"}.fa-clock-o:before{content:"\f017"}.fa-road:before{content:"\f018"}.fa-download:before{content:"\f019"}.fa-arrow-circle-o-down:before{content:"\f01a"}.fa-arrow-circle-o-up:before{content:"\f01b"}.fa-inbox:before{content:"\f01c"}.fa-play-circle-o:before{content:"\f01d"}.fa-rotate-right:before,.fa-repeat:before{content:"\f01e"}.fa-refresh:before{content:"\f021"}.fa-list-alt:before{content:"\f022"}.fa-lock:before{content:"\f023"}.fa-flag:before{content:"\f024"}.fa-headphones:before{content:"\f025"}.fa-volume-off:before{content:"\f026"}.fa-volume-down:before{content:"\f027"}.fa-volume-up:before{content:"\f028"}.fa-qrcode:before{content:"\f029"}.fa-barcode:before{content:"\f02a"}.fa-tag:before{content:"\f02b"}.fa-tags:before{content:"\f02c"}.fa-book:before{content:"\f02d"}.fa-bookmark:before{content:"\f02e"}.fa-print:before{content:"\f02f"}.fa-camera:before{content:"\f030"}.fa-font:before{content:"\f031"}.fa-bold:before{content:"\f032"}.fa-italic:before{content:"\f033"}.fa-text-height:before{content:"\f034"}.fa-text-width:before{content:"\f035"}.fa-align-left:before{content:"\f036"}.fa-align-center:before{content:"\f037"}.fa-align-right:before{content:"\f038"}.fa-align-justify:before{content:"\f039"}.fa-list:before{content:"\f03a"}.fa-dedent:before,.fa-outdent:before{content:"\f03b"}.fa-indent:before{content:"\f03c"}.fa-video-camera:before{content:"\f03d"}.fa-photo:before,.fa-image:before,.fa-picture-o:before{content:"\f03e"}.fa-pencil:before{content:"\f040"}.fa-map-marker:before{content:"\f041"}.fa-adjust:before{content:"\f042"}.fa-tint:before{content:"\f043"}.fa-edit:before,.fa-pencil-square-o:before{content:"\f044"}.fa-share-square-o:before{content:"\f045"}.fa-check-square-o:before{content:"\f046"}.fa-arrows:before{content:"\f047"}.fa-step-backward:before{content:"\f048"}.fa-fast-backward:before{content:"\f049"}.fa-backward:before{content:"\f04a"}.fa-play:before{content:"\f04b"}.fa-pause:before{content:"\f04c"}.fa-stop:before{content:"\f04d"}.fa-forward:before{content:"\f04e"}.fa-fast-forward:before{content:"\f050"}.fa-step-forward:before{content:"\f051"}.fa-eject:before{content:"\f052"}.fa-chevron-left:before{content:"\f053"}.fa-chevron-right:before{content:"\f054"}.fa-plus-circle:before{content:"\f055"}.fa-minus-circle:before{content:"\f056"}.fa-times-circle:before{content:"\f057"}.fa-check-circle:before{content:"\f058"}.fa-question-circle:before{content:"\f059"}.fa-info-circle:before{content:"\f05a"}.fa-crosshairs:before{content:"\f05b"}.fa-times-circle-o:before{content:"\f05c"}.fa-check-circle-o:before{content:"\f05d"}.fa-ban:before{content:"\f05e"}.fa-arrow-left:before{content:"\f060"}.fa-arrow-right:before{content:"\f061"}.fa-arrow-up:before{content:"\f062"}.fa-arrow-down:before{content:"\f063"}.fa-mail-forward:before,.fa-share:before{content:"\f064"}.fa-expand:before{content:"\f065"}.fa-compress:before{content:"\f066"}.fa-plus:before{content:"\f067"}.fa-minus:before{content:"\f068"}.fa-asterisk:before{content:"\f069"}.fa-exclamation-circle:before{content:"\f06a"}.fa-gift:before{content:"\f06b"}.fa-leaf:before{content:"\f06c"}.fa-fire:before{content:"\f06d"}.fa-eye:before{content:"\f06e"}.fa-eye-slash:before{content:"\f070"}.fa-warning:before,.fa-exclamation-triangle:before{content:"\f071"}.fa-plane:before{content:"\f072"}.fa-calendar:before{content:"\f073"}.fa-random:before{content:"\f074"}.fa-comment:before{content:"\f075"}.fa-magnet:before{content:"\f076"}.fa-chevron-up:before{content:"\f077"}.fa-chevron-down:before{content:"\f078"}.fa-retweet:before{content:"\f079"}.fa-shopping-cart:before{content:"\f07a"}.fa-folder:before{content:"\f07b"}.fa-folder-open:before{content:"\f07c"}.fa-arrows-v:before{content:"\f07d"}.fa-arrows-h:before{content:"\f07e"}.fa-bar-chart-o:before,.fa-bar-chart:before{content:"\f080"}.fa-twitter-square:before{content:"\f081"}.fa-facebook-square:before{content:"\f082"}.fa-camera-retro:before{content:"\f083"}.fa-key:before{content:"\f084"}.fa-gears:before,.fa-cogs:before{content:"\f085"}.fa-comments:before{content:"\f086"}.fa-thumbs-o-up:before{content:"\f087"}.fa-thumbs-o-down:before{content:"\f088"}.fa-star-half:before{content:"\f089"}.fa-heart-o:before{content:"\f08a"}.fa-sign-out:before{content:"\f08b"}.fa-linkedin-square:before{content:"\f08c"}.fa-thumb-tack:before{content:"\f08d"}.fa-external-link:before{content:"\f08e"}.fa-sign-in:before{content:"\f090"}.fa-trophy:before{content:"\f091"}.fa-github-square:before{content:"\f092"}.fa-upload:before{content:"\f093"}.fa-lemon-o:before{content:"\f094"}.fa-phone:before{content:"\f095"}.fa-square-o:before{content:"\f096"}.fa-bookmark-o:before{content:"\f097"}.fa-phone-square:before{content:"\f098"}.fa-twitter:before{content:"\f099"}.fa-facebook:before{content:"\f09a"}.fa-github:before{content:"\f09b"}.fa-unlock:before{content:"\f09c"}.fa-credit-card:before{content:"\f09d"}.fa-rss:before{content:"\f09e"}.fa-hdd-o:before{content:"\f0a0"}.fa-bullhorn:before{content:"\f0a1"}.fa-bell:before{content:"\f0f3"}.fa-certificate:before{content:"\f0a3"}.fa-hand-o-right:before{content:"\f0a4"}.fa-hand-o-left:before{content:"\f0a5"}.fa-hand-o-up:before{content:"\f0a6"}.fa-hand-o-down:before{content:"\f0a7"}.fa-arrow-circle-left:before{content:"\f0a8"}.fa-arrow-circle-right:before{content:"\f0a9"}.fa-arrow-circle-up:before{content:"\f0aa"}.fa-arrow-circle-down:before{content:"\f0ab"}.fa-globe:before{content:"\f0ac"}.fa-wrench:before{content:"\f0ad"}.fa-tasks:before{content:"\f0ae"}.fa-filter:before{content:"\f0b0"}.fa-briefcase:before{content:"\f0b1"}.fa-arrows-alt:before{content:"\f0b2"}.fa-group:before,.fa-users:before{content:"\f0c0"}.fa-chain:before,.fa-link:before{content:"\f0c1"}.fa-cloud:before{content:"\f0c2"}.fa-flask:before{content:"\f0c3"}.fa-cut:before,.fa-scissors:before{content:"\f0c4"}.fa-copy:before,.fa-files-o:before{content:"\f0c5"}.fa-paperclip:before{content:"\f0c6"}.fa-save:before,.fa-floppy-o:before{content:"\f0c7"}.fa-square:before{content:"\f0c8"}.fa-navicon:before,.fa-reorder:before,.fa-bars:before{content:"\f0c9"}.fa-list-ul:before{content:"\f0ca"}.fa-list-ol:before{content:"\f0cb"}.fa-strikethrough:before{content:"\f0cc"}.fa-underline:before{content:"\f0cd"}.fa-table:before{content:"\f0ce"}.fa-magic:before{content:"\f0d0"}.fa-truck:before{content:"\f0d1"}.fa-pinterest:before{content:"\f0d2"}.fa-pinterest-square:before{content:"\f0d3"}.fa-google-plus-square:before{content:"\f0d4"}.fa-google-plus:before{content:"\f0d5"}.fa-money:before{content:"\f0d6"}.fa-caret-down:before{content:"\f0d7"}.fa-caret-up:before{content:"\f0d8"}.fa-caret-left:before{content:"\f0d9"}.fa-caret-right:before{content:"\f0da"}.fa-columns:before{content:"\f0db"}.fa-unsorted:before,.fa-sort:before{content:"\f0dc"}.fa-sort-down:before,.fa-sort-desc:before{content:"\f0dd"}.fa-sort-up:before,.fa-sort-asc:before{content:"\f0de"}.fa-envelope:before{content:"\f0e0"}.fa-linkedin:before{content:"\f0e1"}.fa-rotate-left:before,.fa-undo:before{content:"\f0e2"}.fa-legal:before,.fa-gavel:before{content:"\f0e3"}.fa-dashboard:before,.fa-tachometer:before{content:"\f0e4"}.fa-comment-o:before{content:"\f0e5"}.fa-comments-o:before{content:"\f0e6"}.fa-flash:before,.fa-bolt:before{content:"\f0e7"}.fa-sitemap:before{content:"\f0e8"}.fa-umbrella:before{content:"\f0e9"}.fa-paste:before,.fa-clipboard:before{content:"\f0ea"}.fa-lightbulb-o:before{content:"\f0eb"}.fa-exchange:before{content:"\f0ec"}.fa-cloud-download:before{content:"\f0ed"}.fa-cloud-upload:before{content:"\f0ee"}.fa-user-md:before{content:"\f0f0"}.fa-stethoscope:before{content:"\f0f1"}.fa-suitcase:before{content:"\f0f2"}.fa-bell-o:before{content:"\f0a2"}.fa-coffee:before{content:"\f0f4"}.fa-cutlery:before{content:"\f0f5"}.fa-file-text-o:before{content:"\f0f6"}.fa-building-o:before{content:"\f0f7"}.fa-hospital-o:before{content:"\f0f8"}.fa-ambulance:before{content:"\f0f9"}.fa-medkit:before{content:"\f0fa"}.fa-fighter-jet:before{content:"\f0fb"}.fa-beer:before{content:"\f0fc"}.fa-h-square:before{content:"\f0fd"}.fa-plus-square:before{content:"\f0fe"}.fa-angle-double-left:before{content:"\f100"}.fa-angle-double-right:before{content:"\f101"}.fa-angle-double-up:before{content:"\f102"}.fa-angle-double-down:before{content:"\f103"}.fa-angle-left:before{content:"\f104"}.fa-angle-right:before{content:"\f105"}.fa-angle-up:before{content:"\f106"}.fa-angle-down:before{content:"\f107"}.fa-desktop:before{content:"\f108"}.fa-laptop:before{content:"\f109"}.fa-tablet:before{content:"\f10a"}.fa-mobile-phone:before,.fa-mobile:before{content:"\f10b"}.fa-circle-o:before{content:"\f10c"}.fa-quote-left:before{content:"\f10d"}.fa-quote-right:before{content:"\f10e"}.fa-spinner:before{content:"\f110"}.fa-circle:before{content:"\f111"}.fa-mail-reply:before,.fa-reply:before{content:"\f112"}.fa-github-alt:before{content:"\f113"}.fa-folder-o:before{content:"\f114"}.fa-folder-open-o:before{content:"\f115"}.fa-smile-o:before{content:"\f118"}.fa-frown-o:before{content:"\f119"}.fa-meh-o:before{content:"\f11a"}.fa-gamepad:before{content:"\f11b"}.fa-keyboard-o:before{content:"\f11c"}.fa-flag-o:before{content:"\f11d"}.fa-flag-checkered:before{content:"\f11e"}.fa-terminal:before{content:"\f120"}.fa-code:before{content:"\f121"}.fa-mail-reply-all:before,.fa-reply-all:before{content:"\f122"}.fa-star-half-empty:before,.fa-star-half-full:before,.fa-star-half-o:before{content:"\f123"}.fa-location-arrow:before{content:"\f124"}.fa-crop:before{content:"\f125"}.fa-code-fork:before{content:"\f126"}.fa-unlink:before,.fa-chain-broken:before{content:"\f127"}.fa-question:before{content:"\f128"}.fa-info:before{content:"\f129"}.fa-exclamation:before{content:"\f12a"}.fa-superscript:before{content:"\f12b"}.fa-subscript:before{content:"\f12c"}.fa-eraser:before{content:"\f12d"}.fa-puzzle-piece:before{content:"\f12e"}.fa-microphone:before{content:"\f130"}.fa-microphone-slash:before{content:"\f131"}.fa-shield:before{content:"\f132"}.fa-calendar-o:before{content:"\f133"}.fa-fire-extinguisher:before{content:"\f134"}.fa-rocket:before{content:"\f135"}.fa-maxcdn:before{content:"\f136"}.fa-chevron-circle-left:before{content:"\f137"}.fa-chevron-circle-right:before{content:"\f138"}.fa-chevron-circle-up:before{content:"\f139"}.fa-chevron-circle-down:before{content:"\f13a"}.fa-html5:before{content:"\f13b"}.fa-css3:before{content:"\f13c"}.fa-anchor:before{content:"\f13d"}.fa-unlock-alt:before{content:"\f13e"}.fa-bullseye:before{content:"\f140"}.fa-ellipsis-h:before{content:"\f141"}.fa-ellipsis-v:before{content:"\f142"}.fa-rss-square:before{content:"\f143"}.fa-play-circle:before{content:"\f144"}.fa-ticket:before{content:"\f145"}.fa-minus-square:before{content:"\f146"}.fa-minus-square-o:before{content:"\f147"}.fa-level-up:before{content:"\f148"}.fa-level-down:before{content:"\f149"}.fa-check-square:before{content:"\f14a"}.fa-pencil-square:before{content:"\f14b"}.fa-external-link-square:before{content:"\f14c"}.fa-share-square:before{content:"\f14d"}.fa-compass:before{content:"\f14e"}.fa-toggle-down:before,.fa-caret-square-o-down:before{content:"\f150"}.fa-toggle-up:before,.fa-caret-square-o-up:before{content:"\f151"}.fa-toggle-right:before,.fa-caret-square-o-right:before{content:"\f152"}.fa-euro:before,.fa-eur:before{content:"\f153"}.fa-gbp:before{content:"\f154"}.fa-dollar:before,.fa-usd:before{content:"\f155"}.fa-rupee:before,.fa-inr:before{content:"\f156"}.fa-cny:before,.fa-rmb:before,.fa-yen:before,.fa-jpy:before{content:"\f157"}.fa-ruble:before,.fa-rouble:before,.fa-rub:before{content:"\f158"}.fa-won:before,.fa-krw:before{content:"\f159"}.fa-bitcoin:before,.fa-btc:before{content:"\f15a"}.fa-file:before{content:"\f15b"}.fa-file-text:before{content:"\f15c"}.fa-sort-alpha-asc:before{content:"\f15d"}.fa-sort-alpha-desc:before{content:"\f15e"}.fa-sort-amount-asc:before{content:"\f160"}.fa-sort-amount-desc:before{content:"\f161"}.fa-sort-numeric-asc:before{content:"\f162"}.fa-sort-numeric-desc:before{content:"\f163"}.fa-thumbs-up:before{content:"\f164"}.fa-thumbs-down:before{content:"\f165"}.fa-youtube-square:before{content:"\f166"}.fa-youtube:before{content:"\f167"}.fa-xing:before{content:"\f168"}.fa-xing-square:before{content:"\f169"}.fa-youtube-play:before{content:"\f16a"}.fa-dropbox:before{content:"\f16b"}.fa-stack-overflow:before{content:"\f16c"}.fa-instagram:before{content:"\f16d"}.fa-flickr:before{content:"\f16e"}.fa-adn:before{content:"\f170"}.fa-bitbucket:before{content:"\f171"}.fa-bitbucket-square:before{content:"\f172"}.fa-tumblr:before{content:"\f173"}.fa-tumblr-square:before{content:"\f174"}.fa-long-arrow-down:before{content:"\f175"}.fa-long-arrow-up:before{content:"\f176"}.fa-long-arrow-left:before{content:"\f177"}.fa-long-arrow-right:before{content:"\f178"}.fa-apple:before{content:"\f179"}.fa-windows:before{content:"\f17a"}.fa-android:before{content:"\f17b"}.fa-linux:before{content:"\f17c"}.fa-dribbble:before{content:"\f17d"}.fa-skype:before{content:"\f17e"}.fa-foursquare:before{content:"\f180"}.fa-trello:before{content:"\f181"}.fa-female:before{content:"\f182"}.fa-male:before{content:"\f183"}.fa-gittip:before{content:"\f184"}.fa-sun-o:before{content:"\f185"}.fa-moon-o:before{content:"\f186"}.fa-archive:before{content:"\f187"}.fa-bug:before{content:"\f188"}.fa-vk:before{content:"\f189"}.fa-weibo:before{content:"\f18a"}.fa-renren:before{content:"\f18b"}.fa-pagelines:before{content:"\f18c"}.fa-stack-exchange:before{content:"\f18d"}.fa-arrow-circle-o-right:before{content:"\f18e"}.fa-arrow-circle-o-left:before{content:"\f190"}.fa-toggle-left:before,.fa-caret-square-o-left:before{content:"\f191"}.fa-dot-circle-o:before{content:"\f192"}.fa-wheelchair:before{content:"\f193"}.fa-vimeo-square:before{content:"\f194"}.fa-turkish-lira:before,.fa-try:before{content:"\f195"}.fa-plus-square-o:before{content:"\f196"}.fa-space-shuttle:before{content:"\f197"}.fa-slack:before{content:"\f198"}.fa-envelope-square:before{content:"\f199"}.fa-wordpress:before{content:"\f19a"}.fa-openid:before{content:"\f19b"}.fa-institution:before,.fa-bank:before,.fa-university:before{content:"\f19c"}.fa-mortar-board:before,.fa-graduation-cap:before{content:"\f19d"}.fa-yahoo:before{content:"\f19e"}.fa-google:before{content:"\f1a0"}.fa-reddit:before{content:"\f1a1"}.fa-reddit-square:before{content:"\f1a2"}.fa-stumbleupon-circle:before{content:"\f1a3"}.fa-stumbleupon:before{content:"\f1a4"}.fa-delicious:before{content:"\f1a5"}.fa-digg:before{content:"\f1a6"}.fa-pied-piper:before{content:"\f1a7"}.fa-pied-piper-alt:before{content:"\f1a8"}.fa-drupal:before{content:"\f1a9"}.fa-joomla:before{content:"\f1aa"}.fa-language:before{content:"\f1ab"}.fa-fax:before{content:"\f1ac"}.fa-building:before{content:"\f1ad"}.fa-child:before{content:"\f1ae"}.fa-paw:before{content:"\f1b0"}.fa-spoon:before{content:"\f1b1"}.fa-cube:before{content:"\f1b2"}.fa-cubes:before{content:"\f1b3"}.fa-behance:before{content:"\f1b4"}.fa-behance-square:before{content:"\f1b5"}.fa-steam:before{content:"\f1b6"}.fa-steam-square:before{content:"\f1b7"}.fa-recycle:before{content:"\f1b8"}.fa-automobile:before,.fa-car:before{content:"\f1b9"}.fa-cab:before,.fa-taxi:before{content:"\f1ba"}.fa-tree:before{content:"\f1bb"}.fa-spotify:before{content:"\f1bc"}.fa-deviantart:before{content:"\f1bd"}.fa-soundcloud:before{content:"\f1be"}.fa-database:before{content:"\f1c0"}.fa-file-pdf-o:before{content:"\f1c1"}.fa-file-word-o:before{content:"\f1c2"}.fa-file-excel-o:before{content:"\f1c3"}.fa-file-powerpoint-o:before{content:"\f1c4"}.fa-file-photo-o:before,.fa-file-picture-o:before,.fa-file-image-o:before{content:"\f1c5"}.fa-file-zip-o:before,.fa-file-archive-o:before{content:"\f1c6"}.fa-file-sound-o:before,.fa-file-audio-o:before{content:"\f1c7"}.fa-file-movie-o:before,.fa-file-video-o:before{content:"\f1c8"}.fa-file-code-o:before{content:"\f1c9"}.fa-vine:before{content:"\f1ca"}.fa-codepen:before{content:"\f1cb"}.fa-jsfiddle:before{content:"\f1cc"}.fa-life-bouy:before,.fa-life-buoy:before,.fa-life-saver:before,.fa-support:before,.fa-life-ring:before{content:"\f1cd"}.fa-circle-o-notch:before{content:"\f1ce"}.fa-ra:before,.fa-rebel:before{content:"\f1d0"}.fa-ge:before,.fa-empire:before{content:"\f1d1"}.fa-git-square:before{content:"\f1d2"}.fa-git:before{content:"\f1d3"}.fa-hacker-news:before{content:"\f1d4"}.fa-tencent-weibo:before{content:"\f1d5"}.fa-qq:before{content:"\f1d6"}.fa-wechat:before,.fa-weixin:before{content:"\f1d7"}.fa-send:before,.fa-paper-plane:before{content:"\f1d8"}.fa-send-o:before,.fa-paper-plane-o:before{content:"\f1d9"}.fa-history:before{content:"\f1da"}.fa-circle-thin:before{content:"\f1db"}.fa-header:before{content:"\f1dc"}.fa-paragraph:before{content:"\f1dd"}.fa-sliders:before{content:"\f1de"}.fa-share-alt:before{content:"\f1e0"}.fa-share-alt-square:before{content:"\f1e1"}.fa-bomb:before{content:"\f1e2"}.fa-soccer-ball-o:before,.fa-futbol-o:before{content:"\f1e3"}.fa-tty:before{content:"\f1e4"}.fa-binoculars:before{content:"\f1e5"}.fa-plug:before{content:"\f1e6"}.fa-slideshare:before{content:"\f1e7"}.fa-twitch:before{content:"\f1e8"}.fa-yelp:before{content:"\f1e9"}.fa-newspaper-o:before{content:"\f1ea"}.fa-wifi:before{content:"\f1eb"}.fa-calculator:before{content:"\f1ec"}.fa-paypal:before{content:"\f1ed"}.fa-google-wallet:before{content:"\f1ee"}.fa-cc-visa:before{content:"\f1f0"}.fa-cc-mastercard:before{content:"\f1f1"}.fa-cc-discover:before{content:"\f1f2"}.fa-cc-amex:before{content:"\f1f3"}.fa-cc-paypal:before{content:"\f1f4"}.fa-cc-stripe:before{content:"\f1f5"}.fa-bell-slash:before{content:"\f1f6"}.fa-bell-slash-o:before{content:"\f1f7"}.fa-trash:before{content:"\f1f8"}.fa-copyright:before{content:"\f1f9"}.fa-at:before{content:"\f1fa"}.fa-eyedropper:before{content:"\f1fb"}.fa-paint-brush:before{content:"\f1fc"}.fa-birthday-cake:before{content:"\f1fd"}.fa-area-chart:before{content:"\f1fe"}.fa-pie-chart:before{content:"\f200"}.fa-line-chart:before{content:"\f201"}.fa-lastfm:before{content:"\f202"}.fa-lastfm-square:before{content:"\f203"}.fa-toggle-off:before{content:"\f204"}.fa-toggle-on:before{content:"\f205"}.fa-bicycle:before{content:"\f206"}.fa-bus:before{content:"\f207"}.fa-ioxhost:before{content:"\f208"}.fa-angellist:before{content:"\f209"}.fa-cc:before{content:"\f20a"}.fa-shekel:before,.fa-sheqel:before,.fa-ils:before{content:"\f20b"}.fa-meanpath:before{content:"\f20c"}
--------------------------------------------------------------------------------
/fonts/FontAwesome.otf:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/optimizely/wordpress-plugin/aec610588f63eedda900983e6b851e054578bc48/fonts/FontAwesome.otf
--------------------------------------------------------------------------------
/fonts/fontawesome-webfont.eot:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/optimizely/wordpress-plugin/aec610588f63eedda900983e6b851e054578bc48/fonts/fontawesome-webfont.eot
--------------------------------------------------------------------------------
/fonts/fontawesome-webfont.ttf:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/optimizely/wordpress-plugin/aec610588f63eedda900983e6b851e054578bc48/fonts/fontawesome-webfont.ttf
--------------------------------------------------------------------------------
/fonts/fontawesome-webfont.woff:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/optimizely/wordpress-plugin/aec610588f63eedda900983e6b851e054578bc48/fonts/fontawesome-webfont.woff
--------------------------------------------------------------------------------
/images/ajax-loader.gif:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/optimizely/wordpress-plugin/aec610588f63eedda900983e6b851e054578bc48/images/ajax-loader.gif
--------------------------------------------------------------------------------
/images/optimizely-icon.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/optimizely/wordpress-plugin/aec610588f63eedda900983e6b851e054578bc48/images/optimizely-icon.png
--------------------------------------------------------------------------------
/images/ui-bg_diagonals-thick_18_b81900_40x40.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/optimizely/wordpress-plugin/aec610588f63eedda900983e6b851e054578bc48/images/ui-bg_diagonals-thick_18_b81900_40x40.png
--------------------------------------------------------------------------------
/images/ui-bg_diagonals-thick_20_666666_40x40.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/optimizely/wordpress-plugin/aec610588f63eedda900983e6b851e054578bc48/images/ui-bg_diagonals-thick_20_666666_40x40.png
--------------------------------------------------------------------------------
/images/ui-bg_flat_10_000000_40x100.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/optimizely/wordpress-plugin/aec610588f63eedda900983e6b851e054578bc48/images/ui-bg_flat_10_000000_40x100.png
--------------------------------------------------------------------------------
/images/ui-bg_glass_100_f6f6f6_1x400.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/optimizely/wordpress-plugin/aec610588f63eedda900983e6b851e054578bc48/images/ui-bg_glass_100_f6f6f6_1x400.png
--------------------------------------------------------------------------------
/images/ui-bg_glass_100_fdf5ce_1x400.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/optimizely/wordpress-plugin/aec610588f63eedda900983e6b851e054578bc48/images/ui-bg_glass_100_fdf5ce_1x400.png
--------------------------------------------------------------------------------
/images/ui-bg_glass_65_ffffff_1x400.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/optimizely/wordpress-plugin/aec610588f63eedda900983e6b851e054578bc48/images/ui-bg_glass_65_ffffff_1x400.png
--------------------------------------------------------------------------------
/images/ui-bg_gloss-wave_35_f6a828_500x100.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/optimizely/wordpress-plugin/aec610588f63eedda900983e6b851e054578bc48/images/ui-bg_gloss-wave_35_f6a828_500x100.png
--------------------------------------------------------------------------------
/images/ui-bg_highlight-soft_100_eeeeee_1x100.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/optimizely/wordpress-plugin/aec610588f63eedda900983e6b851e054578bc48/images/ui-bg_highlight-soft_100_eeeeee_1x100.png
--------------------------------------------------------------------------------
/images/ui-bg_highlight-soft_75_ffe45c_1x100.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/optimizely/wordpress-plugin/aec610588f63eedda900983e6b851e054578bc48/images/ui-bg_highlight-soft_75_ffe45c_1x100.png
--------------------------------------------------------------------------------
/images/ui-icons_222222_256x240.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/optimizely/wordpress-plugin/aec610588f63eedda900983e6b851e054578bc48/images/ui-icons_222222_256x240.png
--------------------------------------------------------------------------------
/images/ui-icons_228ef1_256x240.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/optimizely/wordpress-plugin/aec610588f63eedda900983e6b851e054578bc48/images/ui-icons_228ef1_256x240.png
--------------------------------------------------------------------------------
/images/ui-icons_ef8c08_256x240.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/optimizely/wordpress-plugin/aec610588f63eedda900983e6b851e054578bc48/images/ui-icons_ef8c08_256x240.png
--------------------------------------------------------------------------------
/images/ui-icons_ffd27a_256x240.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/optimizely/wordpress-plugin/aec610588f63eedda900983e6b851e054578bc48/images/ui-icons_ffd27a_256x240.png
--------------------------------------------------------------------------------
/images/ui-icons_ffffff_256x240.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/optimizely/wordpress-plugin/aec610588f63eedda900983e6b851e054578bc48/images/ui-icons_ffffff_256x240.png
--------------------------------------------------------------------------------
/jquery-ui.css:
--------------------------------------------------------------------------------
1 | /*! jQuery UI - v1.11.1 - 2014-08-13
2 | * http://jqueryui.com
3 | * Includes: core.css, accordion.css, autocomplete.css, button.css, datepicker.css, dialog.css, draggable.css, menu.css, progressbar.css, resizable.css, selectable.css, selectmenu.css, slider.css, sortable.css, spinner.css, tabs.css, tooltip.css, theme.css
4 | * To view and modify this theme, visit http://jqueryui.com/themeroller/?ffDefault=Trebuchet%20MS%2CTahoma%2CVerdana%2CArial%2Csans-serif&fwDefault=bold&fsDefault=1.1em&cornerRadius=4px&bgColorHeader=f6a828&bgTextureHeader=gloss_wave&bgImgOpacityHeader=35&borderColorHeader=e78f08&fcHeader=ffffff&iconColorHeader=ffffff&bgColorContent=eeeeee&bgTextureContent=highlight_soft&bgImgOpacityContent=100&borderColorContent=dddddd&fcContent=333333&iconColorContent=222222&bgColorDefault=f6f6f6&bgTextureDefault=glass&bgImgOpacityDefault=100&borderColorDefault=cccccc&fcDefault=1c94c4&iconColorDefault=ef8c08&bgColorHover=fdf5ce&bgTextureHover=glass&bgImgOpacityHover=100&borderColorHover=fbcb09&fcHover=c77405&iconColorHover=ef8c08&bgColorActive=ffffff&bgTextureActive=glass&bgImgOpacityActive=65&borderColorActive=fbd850&fcActive=eb8f00&iconColorActive=ef8c08&bgColorHighlight=ffe45c&bgTextureHighlight=highlight_soft&bgImgOpacityHighlight=75&borderColorHighlight=fed22f&fcHighlight=363636&iconColorHighlight=228ef1&bgColorError=b81900&bgTextureError=diagonals_thick&bgImgOpacityError=18&borderColorError=cd0a0a&fcError=ffffff&iconColorError=ffd27a&bgColorOverlay=666666&bgTextureOverlay=diagonals_thick&bgImgOpacityOverlay=20&opacityOverlay=50&bgColorShadow=000000&bgTextureShadow=flat&bgImgOpacityShadow=10&opacityShadow=20&thicknessShadow=5px&offsetTopShadow=-5px&offsetLeftShadow=-5px&cornerRadiusShadow=5px
5 | * Copyright 2014 jQuery Foundation and other contributors; Licensed MIT */
6 |
7 | .ui-helper-hidden{display:none}.ui-helper-hidden-accessible{border:0;clip:rect(0 0 0 0);height:1px;margin:-1px;overflow:hidden;padding:0;position:absolute;width:1px}.ui-helper-reset{margin:0;padding:0;border:0;outline:0;line-height:1.3;text-decoration:none;font-size:100%;list-style:none}.ui-helper-clearfix:before,.ui-helper-clearfix:after{content:"";display:table;border-collapse:collapse}.ui-helper-clearfix:after{clear:both}.ui-helper-clearfix{min-height:0}.ui-helper-zfix{width:100%;height:100%;top:0;left:0;position:absolute;opacity:0;filter:Alpha(Opacity=0)}.ui-front{z-index:100}.ui-state-disabled{cursor:default!important}.ui-icon{display:block;text-indent:-99999px;overflow:hidden;background-repeat:no-repeat}.ui-widget-overlay{position:fixed;top:0;left:0;width:100%;height:100%}.ui-accordion .ui-accordion-header{display:block;cursor:pointer;position:relative;margin:2px 0 0 0;padding:.5em .5em .5em .7em;min-height:0;font-size:100%}.ui-accordion .ui-accordion-icons{padding-left:2.2em}.ui-accordion .ui-accordion-icons .ui-accordion-icons{padding-left:2.2em}.ui-accordion .ui-accordion-header .ui-accordion-header-icon{position:absolute;left:.5em;top:50%;margin-top:-8px}.ui-accordion .ui-accordion-content{padding:1em 2.2em;border-top:0;overflow:auto}.ui-autocomplete{position:absolute;top:0;left:0;cursor:default}.ui-button{display:inline-block;position:relative;padding:0;line-height:normal;margin-right:.1em;cursor:pointer;vertical-align:middle;text-align:center;overflow:visible}.ui-button,.ui-button:link,.ui-button:visited,.ui-button:hover,.ui-button:active{text-decoration:none}.ui-button-icon-only{width:2.2em}button.ui-button-icon-only{width:2.4em}.ui-button-icons-only{width:3.4em}button.ui-button-icons-only{width:3.7em}.ui-button .ui-button-text{display:block;line-height:normal}.ui-button-text-only .ui-button-text{padding:.4em 1em}.ui-button-icon-only .ui-button-text,.ui-button-icons-only .ui-button-text{padding:.4em;text-indent:-9999999px}.ui-button-text-icon-primary .ui-button-text,.ui-button-text-icons .ui-button-text{padding:.4em 1em .4em 2.1em}.ui-button-text-icon-secondary .ui-button-text,.ui-button-text-icons .ui-button-text{padding:.4em 2.1em .4em 1em}.ui-button-text-icons .ui-button-text{padding-left:2.1em;padding-right:2.1em}input.ui-button{padding:.4em 1em}.ui-button-icon-only .ui-icon,.ui-button-text-icon-primary .ui-icon,.ui-button-text-icon-secondary .ui-icon,.ui-button-text-icons .ui-icon,.ui-button-icons-only .ui-icon{position:absolute;top:50%;margin-top:-8px}.ui-button-icon-only .ui-icon{left:50%;margin-left:-8px}.ui-button-text-icon-primary .ui-button-icon-primary,.ui-button-text-icons .ui-button-icon-primary,.ui-button-icons-only .ui-button-icon-primary{left:.5em}.ui-button-text-icon-secondary .ui-button-icon-secondary,.ui-button-text-icons .ui-button-icon-secondary,.ui-button-icons-only .ui-button-icon-secondary{right:.5em}.ui-buttonset{margin-right:7px}.ui-buttonset .ui-button{margin-left:0;margin-right:-.3em}input.ui-button::-moz-focus-inner,button.ui-button::-moz-focus-inner{border:0;padding:0}.ui-datepicker{width:17em;padding:.2em .2em 0;display:none}.ui-datepicker .ui-datepicker-header{position:relative;padding:.2em 0}.ui-datepicker .ui-datepicker-prev,.ui-datepicker .ui-datepicker-next{position:absolute;top:2px;width:1.8em;height:1.8em}.ui-datepicker .ui-datepicker-prev-hover,.ui-datepicker .ui-datepicker-next-hover{top:1px}.ui-datepicker .ui-datepicker-prev{left:2px}.ui-datepicker .ui-datepicker-next{right:2px}.ui-datepicker .ui-datepicker-prev-hover{left:1px}.ui-datepicker .ui-datepicker-next-hover{right:1px}.ui-datepicker .ui-datepicker-prev span,.ui-datepicker .ui-datepicker-next span{display:block;position:absolute;left:50%;margin-left:-8px;top:50%;margin-top:-8px}.ui-datepicker .ui-datepicker-title{margin:0 2.3em;line-height:1.8em;text-align:center}.ui-datepicker .ui-datepicker-title select{font-size:1em;margin:1px 0}.ui-datepicker select.ui-datepicker-month,.ui-datepicker select.ui-datepicker-year{width:45%}.ui-datepicker table{width:100%;font-size:.9em;border-collapse:collapse;margin:0 0 .4em}.ui-datepicker th{padding:.7em .3em;text-align:center;font-weight:bold;border:0}.ui-datepicker td{border:0;padding:1px}.ui-datepicker td span,.ui-datepicker td a{display:block;padding:.2em;text-align:right;text-decoration:none}.ui-datepicker .ui-datepicker-buttonpane{background-image:none;margin:.7em 0 0 0;padding:0 .2em;border-left:0;border-right:0;border-bottom:0}.ui-datepicker .ui-datepicker-buttonpane button{float:right;margin:.5em .2em .4em;cursor:pointer;padding:.2em .6em .3em .6em;width:auto;overflow:visible}.ui-datepicker .ui-datepicker-buttonpane button.ui-datepicker-current{float:left}.ui-datepicker.ui-datepicker-multi{width:auto}.ui-datepicker-multi .ui-datepicker-group{float:left}.ui-datepicker-multi .ui-datepicker-group table{width:95%;margin:0 auto .4em}.ui-datepicker-multi-2 .ui-datepicker-group{width:50%}.ui-datepicker-multi-3 .ui-datepicker-group{width:33.3%}.ui-datepicker-multi-4 .ui-datepicker-group{width:25%}.ui-datepicker-multi .ui-datepicker-group-last .ui-datepicker-header,.ui-datepicker-multi .ui-datepicker-group-middle .ui-datepicker-header{border-left-width:0}.ui-datepicker-multi .ui-datepicker-buttonpane{clear:left}.ui-datepicker-row-break{clear:both;width:100%;font-size:0}.ui-datepicker-rtl{direction:rtl}.ui-datepicker-rtl .ui-datepicker-prev{right:2px;left:auto}.ui-datepicker-rtl .ui-datepicker-next{left:2px;right:auto}.ui-datepicker-rtl .ui-datepicker-prev:hover{right:1px;left:auto}.ui-datepicker-rtl .ui-datepicker-next:hover{left:1px;right:auto}.ui-datepicker-rtl .ui-datepicker-buttonpane{clear:right}.ui-datepicker-rtl .ui-datepicker-buttonpane button{float:left}.ui-datepicker-rtl .ui-datepicker-buttonpane button.ui-datepicker-current,.ui-datepicker-rtl .ui-datepicker-group{float:right}.ui-datepicker-rtl .ui-datepicker-group-last .ui-datepicker-header,.ui-datepicker-rtl .ui-datepicker-group-middle .ui-datepicker-header{border-right-width:0;border-left-width:1px}.ui-dialog{overflow:hidden;position:absolute;top:0;left:0;padding:.2em;outline:0}.ui-dialog .ui-dialog-titlebar{padding:.4em 1em;position:relative}.ui-dialog .ui-dialog-title{float:left;margin:.1em 0;white-space:nowrap;width:90%;overflow:hidden;text-overflow:ellipsis}.ui-dialog .ui-dialog-titlebar-close{position:absolute;right:.3em;top:50%;width:20px;margin:-10px 0 0 0;padding:1px;height:20px}.ui-dialog .ui-dialog-content{position:relative;border:0;padding:.5em 1em;background:none;overflow:auto}.ui-dialog .ui-dialog-buttonpane{text-align:left;border-width:1px 0 0 0;background-image:none;margin-top:.5em;padding:.3em 1em .5em .4em}.ui-dialog .ui-dialog-buttonpane .ui-dialog-buttonset{float:right}.ui-dialog .ui-dialog-buttonpane button{margin:.5em .4em .5em 0;cursor:pointer}.ui-dialog .ui-resizable-se{width:12px;height:12px;right:-5px;bottom:-5px;background-position:16px 16px}.ui-draggable .ui-dialog-titlebar{cursor:move}.ui-draggable-handle{-ms-touch-action:none;touch-action:none}.ui-menu{list-style:none;padding:0;margin:0;display:block;outline:none}.ui-menu .ui-menu{position:absolute}.ui-menu .ui-menu-item{position:relative;margin:0;padding:3px 1em 3px .4em;cursor:pointer;min-height:0;list-style-image:url("data:image/gif;base64,R0lGODlhAQABAIAAAAAAAP///yH5BAEAAAAALAAAAAABAAEAAAIBRAA7")}.ui-menu .ui-menu-divider{margin:5px 0;height:0;font-size:0;line-height:0;border-width:1px 0 0 0}.ui-menu .ui-state-focus,.ui-menu .ui-state-active{margin:-1px}.ui-menu-icons{position:relative}.ui-menu-icons .ui-menu-item{padding-left:2em}.ui-menu .ui-icon{position:absolute;top:0;bottom:0;left:.2em;margin:auto 0}.ui-menu .ui-menu-icon{left:auto;right:0}.ui-progressbar{height:2em;text-align:left;overflow:hidden}.ui-progressbar .ui-progressbar-value{margin:-1px;height:100%}.ui-progressbar .ui-progressbar-overlay{background:url("data:image/gif;base64,R0lGODlhKAAoAIABAAAAAP///yH/C05FVFNDQVBFMi4wAwEAAAAh+QQJAQABACwAAAAAKAAoAAACkYwNqXrdC52DS06a7MFZI+4FHBCKoDeWKXqymPqGqxvJrXZbMx7Ttc+w9XgU2FB3lOyQRWET2IFGiU9m1frDVpxZZc6bfHwv4c1YXP6k1Vdy292Fb6UkuvFtXpvWSzA+HycXJHUXiGYIiMg2R6W459gnWGfHNdjIqDWVqemH2ekpObkpOlppWUqZiqr6edqqWQAAIfkECQEAAQAsAAAAACgAKAAAApSMgZnGfaqcg1E2uuzDmmHUBR8Qil95hiPKqWn3aqtLsS18y7G1SzNeowWBENtQd+T1JktP05nzPTdJZlR6vUxNWWjV+vUWhWNkWFwxl9VpZRedYcflIOLafaa28XdsH/ynlcc1uPVDZxQIR0K25+cICCmoqCe5mGhZOfeYSUh5yJcJyrkZWWpaR8doJ2o4NYq62lAAACH5BAkBAAEALAAAAAAoACgAAAKVDI4Yy22ZnINRNqosw0Bv7i1gyHUkFj7oSaWlu3ovC8GxNso5fluz3qLVhBVeT/Lz7ZTHyxL5dDalQWPVOsQWtRnuwXaFTj9jVVh8pma9JjZ4zYSj5ZOyma7uuolffh+IR5aW97cHuBUXKGKXlKjn+DiHWMcYJah4N0lYCMlJOXipGRr5qdgoSTrqWSq6WFl2ypoaUAAAIfkECQEAAQAsAAAAACgAKAAAApaEb6HLgd/iO7FNWtcFWe+ufODGjRfoiJ2akShbueb0wtI50zm02pbvwfWEMWBQ1zKGlLIhskiEPm9R6vRXxV4ZzWT2yHOGpWMyorblKlNp8HmHEb/lCXjcW7bmtXP8Xt229OVWR1fod2eWqNfHuMjXCPkIGNileOiImVmCOEmoSfn3yXlJWmoHGhqp6ilYuWYpmTqKUgAAIfkECQEAAQAsAAAAACgAKAAAApiEH6kb58biQ3FNWtMFWW3eNVcojuFGfqnZqSebuS06w5V80/X02pKe8zFwP6EFWOT1lDFk8rGERh1TTNOocQ61Hm4Xm2VexUHpzjymViHrFbiELsefVrn6XKfnt2Q9G/+Xdie499XHd2g4h7ioOGhXGJboGAnXSBnoBwKYyfioubZJ2Hn0RuRZaflZOil56Zp6iioKSXpUAAAh+QQJAQABACwAAAAAKAAoAAACkoQRqRvnxuI7kU1a1UU5bd5tnSeOZXhmn5lWK3qNTWvRdQxP8qvaC+/yaYQzXO7BMvaUEmJRd3TsiMAgswmNYrSgZdYrTX6tSHGZO73ezuAw2uxuQ+BbeZfMxsexY35+/Qe4J1inV0g4x3WHuMhIl2jXOKT2Q+VU5fgoSUI52VfZyfkJGkha6jmY+aaYdirq+lQAACH5BAkBAAEALAAAAAAoACgAAAKWBIKpYe0L3YNKToqswUlvznigd4wiR4KhZrKt9Upqip61i9E3vMvxRdHlbEFiEXfk9YARYxOZZD6VQ2pUunBmtRXo1Lf8hMVVcNl8JafV38aM2/Fu5V16Bn63r6xt97j09+MXSFi4BniGFae3hzbH9+hYBzkpuUh5aZmHuanZOZgIuvbGiNeomCnaxxap2upaCZsq+1kAACH5BAkBAAEALAAAAAAoACgAAAKXjI8By5zf4kOxTVrXNVlv1X0d8IGZGKLnNpYtm8Lr9cqVeuOSvfOW79D9aDHizNhDJidFZhNydEahOaDH6nomtJjp1tutKoNWkvA6JqfRVLHU/QUfau9l2x7G54d1fl995xcIGAdXqMfBNadoYrhH+Mg2KBlpVpbluCiXmMnZ2Sh4GBqJ+ckIOqqJ6LmKSllZmsoq6wpQAAAh+QQJAQABACwAAAAAKAAoAAAClYx/oLvoxuJDkU1a1YUZbJ59nSd2ZXhWqbRa2/gF8Gu2DY3iqs7yrq+xBYEkYvFSM8aSSObE+ZgRl1BHFZNr7pRCavZ5BW2142hY3AN/zWtsmf12p9XxxFl2lpLn1rseztfXZjdIWIf2s5dItwjYKBgo9yg5pHgzJXTEeGlZuenpyPmpGQoKOWkYmSpaSnqKileI2FAAACH5BAkBAAEALAAAAAAoACgAAAKVjB+gu+jG4kORTVrVhRlsnn2dJ3ZleFaptFrb+CXmO9OozeL5VfP99HvAWhpiUdcwkpBH3825AwYdU8xTqlLGhtCosArKMpvfa1mMRae9VvWZfeB2XfPkeLmm18lUcBj+p5dnN8jXZ3YIGEhYuOUn45aoCDkp16hl5IjYJvjWKcnoGQpqyPlpOhr3aElaqrq56Bq7VAAAOw==");height:100%;filter:alpha(opacity=25);opacity:0.25}.ui-progressbar-indeterminate .ui-progressbar-value{background-image:none}.ui-resizable{position:relative}.ui-resizable-handle{position:absolute;font-size:0.1px;display:block;-ms-touch-action:none;touch-action:none}.ui-resizable-disabled .ui-resizable-handle,.ui-resizable-autohide .ui-resizable-handle{display:none}.ui-resizable-n{cursor:n-resize;height:7px;width:100%;top:-5px;left:0}.ui-resizable-s{cursor:s-resize;height:7px;width:100%;bottom:-5px;left:0}.ui-resizable-e{cursor:e-resize;width:7px;right:-5px;top:0;height:100%}.ui-resizable-w{cursor:w-resize;width:7px;left:-5px;top:0;height:100%}.ui-resizable-se{cursor:se-resize;width:12px;height:12px;right:1px;bottom:1px}.ui-resizable-sw{cursor:sw-resize;width:9px;height:9px;left:-5px;bottom:-5px}.ui-resizable-nw{cursor:nw-resize;width:9px;height:9px;left:-5px;top:-5px}.ui-resizable-ne{cursor:ne-resize;width:9px;height:9px;right:-5px;top:-5px}.ui-selectable{-ms-touch-action:none;touch-action:none}.ui-selectable-helper{position:absolute;z-index:100;border:1px dotted black}.ui-selectmenu-menu{padding:0;margin:0;position:absolute;top:0;left:0;display:none}.ui-selectmenu-menu .ui-menu{overflow:auto;overflow-x:hidden;padding-bottom:1px}.ui-selectmenu-menu .ui-menu .ui-selectmenu-optgroup{font-size:1em;font-weight:bold;line-height:1.5;padding:2px 0.4em;margin:0.5em 0 0 0;height:auto;border:0}.ui-selectmenu-open{display:block}.ui-selectmenu-button{display:inline-block;overflow:hidden;position:relative;text-decoration:none;cursor:pointer}.ui-selectmenu-button span.ui-icon{right:0.5em;left:auto;margin-top:-8px;position:absolute;top:50%}.ui-selectmenu-button span.ui-selectmenu-text{text-align:left;padding:0.4em 2.1em 0.4em 1em;display:block;line-height:1.4;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.ui-slider{position:relative;text-align:left}.ui-slider .ui-slider-handle{position:absolute;z-index:2;width:1.2em;height:1.2em;cursor:default;-ms-touch-action:none;touch-action:none}.ui-slider .ui-slider-range{position:absolute;z-index:1;font-size:.7em;display:block;border:0;background-position:0 0}.ui-slider.ui-state-disabled .ui-slider-handle,.ui-slider.ui-state-disabled .ui-slider-range{filter:inherit}.ui-slider-horizontal{height:.8em}.ui-slider-horizontal .ui-slider-handle{top:-.3em;margin-left:-.6em}.ui-slider-horizontal .ui-slider-range{top:0;height:100%}.ui-slider-horizontal .ui-slider-range-min{left:0}.ui-slider-horizontal .ui-slider-range-max{right:0}.ui-slider-vertical{width:.8em;height:100px}.ui-slider-vertical .ui-slider-handle{left:-.3em;margin-left:0;margin-bottom:-.6em}.ui-slider-vertical .ui-slider-range{left:0;width:100%}.ui-slider-vertical .ui-slider-range-min{bottom:0}.ui-slider-vertical .ui-slider-range-max{top:0}.ui-sortable-handle{-ms-touch-action:none;touch-action:none}.ui-spinner{position:relative;display:inline-block;overflow:hidden;padding:0;vertical-align:middle}.ui-spinner-input{border:none;background:none;color:inherit;padding:0;margin:.2em 0;vertical-align:middle;margin-left:.4em;margin-right:22px}.ui-spinner-button{width:16px;height:50%;font-size:.5em;padding:0;margin:0;text-align:center;position:absolute;cursor:default;display:block;overflow:hidden;right:0}.ui-spinner a.ui-spinner-button{border-top:none;border-bottom:none;border-right:none}.ui-spinner .ui-icon{position:absolute;margin-top:-8px;top:50%;left:0}.ui-spinner-up{top:0}.ui-spinner-down{bottom:0}.ui-spinner .ui-icon-triangle-1-s{background-position:-65px -16px}.ui-tabs{position:relative;padding:.2em}.ui-tabs .ui-tabs-nav{margin:0;padding:.2em .2em 0}.ui-tabs .ui-tabs-nav li{list-style:none;float:left;position:relative;top:0;margin:1px .2em 0 0;border-bottom-width:0;padding:0;white-space:nowrap}.ui-tabs .ui-tabs-nav .ui-tabs-anchor{float:left;padding:.5em 1em;text-decoration:none}.ui-tabs .ui-tabs-nav li.ui-tabs-active{margin-bottom:-1px;padding-bottom:1px}.ui-tabs .ui-tabs-nav li.ui-tabs-active .ui-tabs-anchor,.ui-tabs .ui-tabs-nav li.ui-state-disabled .ui-tabs-anchor,.ui-tabs .ui-tabs-nav li.ui-tabs-loading .ui-tabs-anchor{cursor:text}.ui-tabs-collapsible .ui-tabs-nav li.ui-tabs-active .ui-tabs-anchor{cursor:pointer}.ui-tabs .ui-tabs-panel{display:block;border-width:0;padding:1em 1.4em;background:none}.ui-tooltip{padding:8px;position:absolute;z-index:9999;max-width:300px;-webkit-box-shadow:0 0 5px #aaa;box-shadow:0 0 5px #aaa}body .ui-tooltip{border-width:2px}.ui-widget{font-family:Trebuchet MS,Tahoma,Verdana,Arial,sans-serif;font-size:1.1em}.ui-widget .ui-widget{font-size:1em}.ui-widget input,.ui-widget select,.ui-widget textarea,.ui-widget button{font-family:Trebuchet MS,Tahoma,Verdana,Arial,sans-serif;font-size:1em}.ui-widget-content{border:1px solid #ddd;background:#eee url("images/ui-bg_highlight-soft_100_eeeeee_1x100.png") 50% top repeat-x;color:#333}.ui-widget-content a{color:#333}.ui-widget-header{border:1px solid #e78f08;background:#f6a828 url("images/ui-bg_gloss-wave_35_f6a828_500x100.png") 50% 50% repeat-x;color:#fff;font-weight:bold}.ui-widget-header a{color:#fff}.ui-state-default,.ui-widget-content .ui-state-default,.ui-widget-header .ui-state-default{border:1px solid #ccc;background:#f6f6f6 url("images/ui-bg_glass_100_f6f6f6_1x400.png") 50% 50% repeat-x;font-weight:bold;color:#1c94c4}.ui-state-default a,.ui-state-default a:link,.ui-state-default a:visited{color:#1c94c4;text-decoration:none}.ui-state-hover,.ui-widget-content .ui-state-hover,.ui-widget-header .ui-state-hover,.ui-state-focus,.ui-widget-content .ui-state-focus,.ui-widget-header .ui-state-focus{border:1px solid #fbcb09;background:#fdf5ce url("images/ui-bg_glass_100_fdf5ce_1x400.png") 50% 50% repeat-x;font-weight:bold;color:#c77405}.ui-state-hover a,.ui-state-hover a:hover,.ui-state-hover a:link,.ui-state-hover a:visited,.ui-state-focus a,.ui-state-focus a:hover,.ui-state-focus a:link,.ui-state-focus a:visited{color:#c77405;text-decoration:none}.ui-state-active,.ui-widget-content .ui-state-active,.ui-widget-header .ui-state-active{border:1px solid #fbd850;background:#fff url("images/ui-bg_glass_65_ffffff_1x400.png") 50% 50% repeat-x;font-weight:bold;color:#eb8f00}.ui-state-active a,.ui-state-active a:link,.ui-state-active a:visited{color:#eb8f00;text-decoration:none}.ui-state-highlight,.ui-widget-content .ui-state-highlight,.ui-widget-header .ui-state-highlight{border:1px solid #fed22f;background:#ffe45c url("images/ui-bg_highlight-soft_75_ffe45c_1x100.png") 50% top repeat-x;color:#363636}.ui-state-highlight a,.ui-widget-content .ui-state-highlight a,.ui-widget-header .ui-state-highlight a{color:#363636}.ui-state-error,.ui-widget-content .ui-state-error,.ui-widget-header .ui-state-error{border:1px solid #cd0a0a;background:#b81900 url("images/ui-bg_diagonals-thick_18_b81900_40x40.png") 50% 50% repeat;color:#fff}.ui-state-error a,.ui-widget-content .ui-state-error a,.ui-widget-header .ui-state-error a{color:#fff}.ui-state-error-text,.ui-widget-content .ui-state-error-text,.ui-widget-header .ui-state-error-text{color:#fff}.ui-priority-primary,.ui-widget-content .ui-priority-primary,.ui-widget-header .ui-priority-primary{font-weight:bold}.ui-priority-secondary,.ui-widget-content .ui-priority-secondary,.ui-widget-header .ui-priority-secondary{opacity:.7;filter:Alpha(Opacity=70);font-weight:normal}.ui-state-disabled,.ui-widget-content .ui-state-disabled,.ui-widget-header .ui-state-disabled{opacity:.35;filter:Alpha(Opacity=35);background-image:none}.ui-state-disabled .ui-icon{filter:Alpha(Opacity=35)}.ui-icon{width:16px;height:16px}.ui-icon,.ui-widget-content .ui-icon{background-image:url("images/ui-icons_222222_256x240.png")}.ui-widget-header .ui-icon{background-image:url("images/ui-icons_ffffff_256x240.png")}.ui-state-default .ui-icon{background-image:url("images/ui-icons_ef8c08_256x240.png")}.ui-state-hover .ui-icon,.ui-state-focus .ui-icon{background-image:url("images/ui-icons_ef8c08_256x240.png")}.ui-state-active .ui-icon{background-image:url("images/ui-icons_ef8c08_256x240.png")}.ui-state-highlight .ui-icon{background-image:url("images/ui-icons_228ef1_256x240.png")}.ui-state-error .ui-icon,.ui-state-error-text .ui-icon{background-image:url("images/ui-icons_ffd27a_256x240.png")}.ui-icon-blank{background-position:16px 16px}.ui-icon-carat-1-n{background-position:0 0}.ui-icon-carat-1-ne{background-position:-16px 0}.ui-icon-carat-1-e{background-position:-32px 0}.ui-icon-carat-1-se{background-position:-48px 0}.ui-icon-carat-1-s{background-position:-64px 0}.ui-icon-carat-1-sw{background-position:-80px 0}.ui-icon-carat-1-w{background-position:-96px 0}.ui-icon-carat-1-nw{background-position:-112px 0}.ui-icon-carat-2-n-s{background-position:-128px 0}.ui-icon-carat-2-e-w{background-position:-144px 0}.ui-icon-triangle-1-n{background-position:0 -16px}.ui-icon-triangle-1-ne{background-position:-16px -16px}.ui-icon-triangle-1-e{background-position:-32px -16px}.ui-icon-triangle-1-se{background-position:-48px -16px}.ui-icon-triangle-1-s{background-position:-64px -16px}.ui-icon-triangle-1-sw{background-position:-80px -16px}.ui-icon-triangle-1-w{background-position:-96px -16px}.ui-icon-triangle-1-nw{background-position:-112px -16px}.ui-icon-triangle-2-n-s{background-position:-128px -16px}.ui-icon-triangle-2-e-w{background-position:-144px -16px}.ui-icon-arrow-1-n{background-position:0 -32px}.ui-icon-arrow-1-ne{background-position:-16px -32px}.ui-icon-arrow-1-e{background-position:-32px -32px}.ui-icon-arrow-1-se{background-position:-48px -32px}.ui-icon-arrow-1-s{background-position:-64px -32px}.ui-icon-arrow-1-sw{background-position:-80px -32px}.ui-icon-arrow-1-w{background-position:-96px -32px}.ui-icon-arrow-1-nw{background-position:-112px -32px}.ui-icon-arrow-2-n-s{background-position:-128px -32px}.ui-icon-arrow-2-ne-sw{background-position:-144px -32px}.ui-icon-arrow-2-e-w{background-position:-160px -32px}.ui-icon-arrow-2-se-nw{background-position:-176px -32px}.ui-icon-arrowstop-1-n{background-position:-192px -32px}.ui-icon-arrowstop-1-e{background-position:-208px -32px}.ui-icon-arrowstop-1-s{background-position:-224px -32px}.ui-icon-arrowstop-1-w{background-position:-240px -32px}.ui-icon-arrowthick-1-n{background-position:0 -48px}.ui-icon-arrowthick-1-ne{background-position:-16px -48px}.ui-icon-arrowthick-1-e{background-position:-32px -48px}.ui-icon-arrowthick-1-se{background-position:-48px -48px}.ui-icon-arrowthick-1-s{background-position:-64px -48px}.ui-icon-arrowthick-1-sw{background-position:-80px -48px}.ui-icon-arrowthick-1-w{background-position:-96px -48px}.ui-icon-arrowthick-1-nw{background-position:-112px -48px}.ui-icon-arrowthick-2-n-s{background-position:-128px -48px}.ui-icon-arrowthick-2-ne-sw{background-position:-144px -48px}.ui-icon-arrowthick-2-e-w{background-position:-160px -48px}.ui-icon-arrowthick-2-se-nw{background-position:-176px -48px}.ui-icon-arrowthickstop-1-n{background-position:-192px -48px}.ui-icon-arrowthickstop-1-e{background-position:-208px -48px}.ui-icon-arrowthickstop-1-s{background-position:-224px -48px}.ui-icon-arrowthickstop-1-w{background-position:-240px -48px}.ui-icon-arrowreturnthick-1-w{background-position:0 -64px}.ui-icon-arrowreturnthick-1-n{background-position:-16px -64px}.ui-icon-arrowreturnthick-1-e{background-position:-32px -64px}.ui-icon-arrowreturnthick-1-s{background-position:-48px -64px}.ui-icon-arrowreturn-1-w{background-position:-64px -64px}.ui-icon-arrowreturn-1-n{background-position:-80px -64px}.ui-icon-arrowreturn-1-e{background-position:-96px -64px}.ui-icon-arrowreturn-1-s{background-position:-112px -64px}.ui-icon-arrowrefresh-1-w{background-position:-128px -64px}.ui-icon-arrowrefresh-1-n{background-position:-144px -64px}.ui-icon-arrowrefresh-1-e{background-position:-160px -64px}.ui-icon-arrowrefresh-1-s{background-position:-176px -64px}.ui-icon-arrow-4{background-position:0 -80px}.ui-icon-arrow-4-diag{background-position:-16px -80px}.ui-icon-extlink{background-position:-32px -80px}.ui-icon-newwin{background-position:-48px -80px}.ui-icon-refresh{background-position:-64px -80px}.ui-icon-shuffle{background-position:-80px -80px}.ui-icon-transfer-e-w{background-position:-96px -80px}.ui-icon-transferthick-e-w{background-position:-112px -80px}.ui-icon-folder-collapsed{background-position:0 -96px}.ui-icon-folder-open{background-position:-16px -96px}.ui-icon-document{background-position:-32px -96px}.ui-icon-document-b{background-position:-48px -96px}.ui-icon-note{background-position:-64px -96px}.ui-icon-mail-closed{background-position:-80px -96px}.ui-icon-mail-open{background-position:-96px -96px}.ui-icon-suitcase{background-position:-112px -96px}.ui-icon-comment{background-position:-128px -96px}.ui-icon-person{background-position:-144px -96px}.ui-icon-print{background-position:-160px -96px}.ui-icon-trash{background-position:-176px -96px}.ui-icon-locked{background-position:-192px -96px}.ui-icon-unlocked{background-position:-208px -96px}.ui-icon-bookmark{background-position:-224px -96px}.ui-icon-tag{background-position:-240px -96px}.ui-icon-home{background-position:0 -112px}.ui-icon-flag{background-position:-16px -112px}.ui-icon-calendar{background-position:-32px -112px}.ui-icon-cart{background-position:-48px -112px}.ui-icon-pencil{background-position:-64px -112px}.ui-icon-clock{background-position:-80px -112px}.ui-icon-disk{background-position:-96px -112px}.ui-icon-calculator{background-position:-112px -112px}.ui-icon-zoomin{background-position:-128px -112px}.ui-icon-zoomout{background-position:-144px -112px}.ui-icon-search{background-position:-160px -112px}.ui-icon-wrench{background-position:-176px -112px}.ui-icon-gear{background-position:-192px -112px}.ui-icon-heart{background-position:-208px -112px}.ui-icon-star{background-position:-224px -112px}.ui-icon-link{background-position:-240px -112px}.ui-icon-cancel{background-position:0 -128px}.ui-icon-plus{background-position:-16px -128px}.ui-icon-plusthick{background-position:-32px -128px}.ui-icon-minus{background-position:-48px -128px}.ui-icon-minusthick{background-position:-64px -128px}.ui-icon-close{background-position:-80px -128px}.ui-icon-closethick{background-position:-96px -128px}.ui-icon-key{background-position:-112px -128px}.ui-icon-lightbulb{background-position:-128px -128px}.ui-icon-scissors{background-position:-144px -128px}.ui-icon-clipboard{background-position:-160px -128px}.ui-icon-copy{background-position:-176px -128px}.ui-icon-contact{background-position:-192px -128px}.ui-icon-image{background-position:-208px -128px}.ui-icon-video{background-position:-224px -128px}.ui-icon-script{background-position:-240px -128px}.ui-icon-alert{background-position:0 -144px}.ui-icon-info{background-position:-16px -144px}.ui-icon-notice{background-position:-32px -144px}.ui-icon-help{background-position:-48px -144px}.ui-icon-check{background-position:-64px -144px}.ui-icon-bullet{background-position:-80px -144px}.ui-icon-radio-on{background-position:-96px -144px}.ui-icon-radio-off{background-position:-112px -144px}.ui-icon-pin-w{background-position:-128px -144px}.ui-icon-pin-s{background-position:-144px -144px}.ui-icon-play{background-position:0 -160px}.ui-icon-pause{background-position:-16px -160px}.ui-icon-seek-next{background-position:-32px -160px}.ui-icon-seek-prev{background-position:-48px -160px}.ui-icon-seek-end{background-position:-64px -160px}.ui-icon-seek-start{background-position:-80px -160px}.ui-icon-seek-first{background-position:-80px -160px}.ui-icon-stop{background-position:-96px -160px}.ui-icon-eject{background-position:-112px -160px}.ui-icon-volume-off{background-position:-128px -160px}.ui-icon-volume-on{background-position:-144px -160px}.ui-icon-power{background-position:0 -176px}.ui-icon-signal-diag{background-position:-16px -176px}.ui-icon-signal{background-position:-32px -176px}.ui-icon-battery-0{background-position:-48px -176px}.ui-icon-battery-1{background-position:-64px -176px}.ui-icon-battery-2{background-position:-80px -176px}.ui-icon-battery-3{background-position:-96px -176px}.ui-icon-circle-plus{background-position:0 -192px}.ui-icon-circle-minus{background-position:-16px -192px}.ui-icon-circle-close{background-position:-32px -192px}.ui-icon-circle-triangle-e{background-position:-48px -192px}.ui-icon-circle-triangle-s{background-position:-64px -192px}.ui-icon-circle-triangle-w{background-position:-80px -192px}.ui-icon-circle-triangle-n{background-position:-96px -192px}.ui-icon-circle-arrow-e{background-position:-112px -192px}.ui-icon-circle-arrow-s{background-position:-128px -192px}.ui-icon-circle-arrow-w{background-position:-144px -192px}.ui-icon-circle-arrow-n{background-position:-160px -192px}.ui-icon-circle-zoomin{background-position:-176px -192px}.ui-icon-circle-zoomout{background-position:-192px -192px}.ui-icon-circle-check{background-position:-208px -192px}.ui-icon-circlesmall-plus{background-position:0 -208px}.ui-icon-circlesmall-minus{background-position:-16px -208px}.ui-icon-circlesmall-close{background-position:-32px -208px}.ui-icon-squaresmall-plus{background-position:-48px -208px}.ui-icon-squaresmall-minus{background-position:-64px -208px}.ui-icon-squaresmall-close{background-position:-80px -208px}.ui-icon-grip-dotted-vertical{background-position:0 -224px}.ui-icon-grip-dotted-horizontal{background-position:-16px -224px}.ui-icon-grip-solid-vertical{background-position:-32px -224px}.ui-icon-grip-solid-horizontal{background-position:-48px -224px}.ui-icon-gripsmall-diagonal-se{background-position:-64px -224px}.ui-icon-grip-diagonal-se{background-position:-80px -224px}.ui-corner-all,.ui-corner-top,.ui-corner-left,.ui-corner-tl{border-top-left-radius:4px}.ui-corner-all,.ui-corner-top,.ui-corner-right,.ui-corner-tr{border-top-right-radius:4px}.ui-corner-all,.ui-corner-bottom,.ui-corner-left,.ui-corner-bl{border-bottom-left-radius:4px}.ui-corner-all,.ui-corner-bottom,.ui-corner-right,.ui-corner-br{border-bottom-right-radius:4px}.ui-widget-overlay{background:#666 url("images/ui-bg_diagonals-thick_20_666666_40x40.png") 50% 50% repeat;opacity:.5;filter:Alpha(Opacity=50)}.ui-widget-shadow{margin:-5px 0 0 -5px;padding:5px;background:#000 url("images/ui-bg_flat_10_000000_40x100.png") 50% 50% repeat-x;opacity:.2;filter:Alpha(Opacity=20);border-radius:5px}
--------------------------------------------------------------------------------
/optimizely.js:
--------------------------------------------------------------------------------
1 | (function( $ ) {
2 |
3 | /*
4 | The OptimizelyAPI class provides a connection to the API via Javascript
5 | and lets you make authenticated calls without repeating yourself.
6 | We store the API token in each instance of the object,
7 | and we can connect to multiple different accounts by creating new instances of the OptimizelyAPI class.
8 | Finally, we keep track of how many requests are outstanding so we can tell when all the calls are complete.
9 | */
10 | OptimizelyAPI = function(token) {
11 | this.outstandingRequests = 0;
12 | this.token = token;
13 | }
14 |
15 | /*
16 | To call the API, we use jQuery's `$.ajax` function, which sends an asynchronous request based on a set of `options`.
17 |
18 | Our function takes four arguments:
19 |
20 | * The request `type`, like GET or POST
21 | * The `endpoint` to hit, like `projects/27`
22 | * The `data` to send along with a POST or PUT request
23 | * A `callback` function to run when the operation is done. The callback should take one argument, the `response`.
24 |
25 | We construct the URL by appending the endpoint to the base API link, and we authenticate by adding the token in the headers section.
26 | To send data, we set content type to JSON and encode the array as a JSON string to send over the wire.
27 | */
28 | OptimizelyAPI.prototype.call = function( type, endpoint, data, callback ) {
29 | var self = this;
30 |
31 | var options = {
32 | url: 'https://www.optimizelyapis.com/experiment/v1/' + endpoint,
33 | type: type,
34 | headers: { 'Token': this.token },
35 | contentType: 'application/json',
36 | success: function( response ) {
37 | self.outstandingRequests -= 1;
38 | callback( response );
39 | }
40 | };
41 |
42 | if ( data ) {
43 | options.data = JSON.stringify( data );
44 | options.dataType = 'json';
45 | }
46 |
47 | this.outstandingRequests += 1;
48 | $.ajax( options );
49 | }
50 |
51 | // Using our `call` function, we can define convenience functions for GETs, POSTs, PUTs.
52 | OptimizelyAPI.prototype.get = function( endpoint, callback ) {
53 | this.call( 'GET', endpoint, '', callback );
54 | }
55 |
56 | OptimizelyAPI.prototype.post = function( endpoint, data, callback ) {
57 | this.call( 'POST', endpoint, data, callback );
58 | }
59 |
60 | OptimizelyAPI.prototype.put = function( endpoint, data, callback ) {
61 | this.call( 'PUT', endpoint, data, callback );
62 | }
63 |
64 | /*
65 | We've also added an extra convenience function, `patch`, that updates a model by changing only the specified fields.
66 | The function works by reading in an entity, changing a few keys, and then sending it back to Optimizely.
67 | */
68 | OptimizelyAPI.prototype.patch = function( endpoint, data, callback ) {
69 | var self = this;
70 |
71 | self.get( endpoint, function( base ) {
72 | for ( var key in data ) {
73 | base[ key ] = data[ key ];
74 | }
75 |
76 | self.put( endpoint, base, callback );
77 | });
78 | }
79 | })( jQuery );
80 |
--------------------------------------------------------------------------------
/optimizely.php:
--------------------------------------------------------------------------------
1 | Optimizely is a dramatically easier way for you to improve your website through A/B testing. Create an experiment in minutes with our easy-to-use visual interface with absolutely no coding or engineering required. Convert your website visitors into customers and earn more revenue today! To get started: 1) Click the "Activate" link to the left of this description, 2) Sign up for an
Optimizely account , and 3) Create an API Token here:
API Tokens , and enter your API token in the Configuration Tab of the Plugin, then select a project to start testing!
10 | Author: Optimizely Inc.
11 | Version: 3.7.8
12 | Author URI: http://www.optimizely.com/
13 | License: GPL2
14 | */
15 |
16 | /* Copyright 2015 Optimizely Inc (email: support@optimizely.com)
17 |
18 | This program is free software; you can redistribute it and/or modify
19 | it under the terms of the GNU General Public License, version 2, as
20 | published by the Free Software Foundation.
21 |
22 | This program is distributed in the hope that it will be useful,
23 | but WITHOUT ANY WARRANTY; without even the implied warranty of
24 | MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
25 | GNU General Public License for more details.
26 |
27 | You should have received a copy of the GNU General Public License
28 | along with this program; if not, write to the Free Software
29 | Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA
30 | */
31 |
32 | // Constants for default settings
33 | define( 'OPTIMIZELY_DEFAULT_VARIATION_TEMPLATE', '$( ".optimizely-$POST_ID" ).text( "$NEW_TITLE" );' );
34 | define( 'OPTIMIZELY_DEFAULT_CONDITIONAL_TEMPLATE', '$( ".optimizely-$POST_ID" ).length > 0 && window.document.referrer.indexOf(window.document.domain) > -1' );
35 | define( 'OPTIMIZELY_NUM_VARIATIONS', 2 );
36 | define( 'OPTIMIZELY_NONCE', 'optimizely-update-code' );
37 |
38 | // Include files are only required on the admin dashboard
39 | if ( is_admin() ) {
40 | require_once( dirname( __FILE__ ) . '/admin.php' );
41 | require_once( dirname( __FILE__ ) . '/edit.php' );
42 | }
43 |
44 | /**
45 | * Enqueues Optimizely scripts required by the admin dashboard.
46 | */
47 | function optimizely_enqueue_scripts() {
48 | // Core scripts
49 | wp_enqueue_script( 'jquery' );
50 | wp_enqueue_script( 'underscore' );
51 | wp_enqueue_script( 'jquery-ui-core' );
52 | wp_enqueue_script( 'jquery-ui-tabs' );
53 | wp_enqueue_script( 'jquery-ui-progressbar' );
54 | wp_enqueue_script( 'jquery-ui-tooltip' );
55 |
56 | wp_enqueue_script( 'optimizely_api', plugins_url( 'optimizely.js', __FILE__ ), array( 'jquery' ) );
57 | wp_enqueue_script( 'optimizely_editor', plugins_url( 'edit.js', __FILE__ ), array( 'jquery' ) );
58 | wp_localize_script( 'optimizely_editor', 'wpAjaxUrl', admin_url( 'admin-ajax.php' ) );
59 | wp_enqueue_script( 'optimizely_config', plugins_url( 'config.js', __FILE__ ), array( 'jquery' ) );
60 | wp_enqueue_script( 'optimizely_results', plugins_url( 'results.js', __FILE__ ), array( 'jquery', 'jquery-ui-core', 'jquery-ui-tabs','jquery-ui-progressbar','jquery-ui-tooltip', 'underscore' ) );
61 | wp_localize_script( 'optimizely_editor', 'optimizelySettings', array(
62 | 'token' => get_option( 'optimizely_token' ),
63 | 'projectId' => get_option( 'optimizely_project_id' )
64 | ) );
65 |
66 | wp_enqueue_style( 'jquery_ui_styles', plugins_url( 'jquery-ui.css', __FILE__ ) );
67 | wp_enqueue_style( 'font_awesome_styles', plugins_url( 'font-awesome.min.css', __FILE__ ) );
68 | wp_enqueue_style( 'optimizely_styles', plugins_url( 'style.css', __FILE__ ) );
69 | }
70 | add_action( 'admin_enqueue_scripts', 'optimizely_enqueue_scripts' );
71 |
72 | /**
73 | * Force Optimizely to load first in the head tag.
74 | */
75 | function optimizely_add_script() {
76 | $project_code = get_option( 'optimizely_project_code' );
77 | $project_id = get_option( 'optimizely_project_id' );
78 | if ( ! empty( $project_id ) ) {
79 | // This cannot be escaped since optimizely_generate_script returns a script tag.
80 | // The output of this script is fully escaped within the function below
81 | echo optimizely_generate_script( $project_id );
82 | } else if ( ! empty( $project_code ) && false !== strpos( $project_code, 'js' ) && true !== WPCOM_IS_VIP_ENV ) {
83 | // Older non-VIP sites used an old filled project_code.
84 | // If this field is filled out we will strip the ID out of the field and use that id.
85 | // This will execute ONLY on non-VIP sites and is necessary for backwards compatibility.
86 | $project_id = substr( $project_code, strpos( $project_code,'js' ) + 3 );
87 | $project_id = substr( $project_id, 0, strpos( $project_id, 'js' ) -1 );
88 | update_option( 'optimizely_project_id', absint( $project_id ) );
89 | delete_option( 'optimizely_project_code' );
90 | echo optimizely_generate_script( $project_id );
91 | }
92 | }
93 | add_action( 'wp_head', 'optimizely_add_script', -1000 );
94 |
95 | /**
96 | * Generates the Optimizely script tag.
97 | * @param int $project_code
98 | * @return string
99 | */
100 | function optimizely_generate_script( $project_id ) {
101 | return '';
102 | }
103 |
104 | /**
105 | * Check capabilites for creating experiments.
106 | */
107 | function optimizely_can_create_experiments() {
108 | return get_option( 'optimizely_token', false );
109 | }
110 |
111 | ?>
112 |
--------------------------------------------------------------------------------
/results.js:
--------------------------------------------------------------------------------
1 | ( function( $ ) {
2 |
3 | function optimizelyResultsPage( apiToken, projectId ) {
4 | var optly = new OptimizelyAPI( apiToken );
5 |
6 | // Fetch only Wordpress experiments from project
7 | optly.get( 'projects/' + projectId + '/experiments/', function( response ) {
8 | optly.wordpressExps = [];
9 | var resultsArray = [];
10 |
11 | for ( i = 0; i < response.length; i++ ) {
12 | if ( response[ i ].description.indexOf( 'Wordpress' ) > -1
13 | && 'Archived' != response[ i ].status
14 | && 'Not started' != response[ i ].status
15 | && 'Draft' != response[ i ].status ) {
16 | resultsArray.push( response[ i ] );
17 | }
18 | }
19 |
20 | if ( resultsArray.length > 0 ) {
21 | for ( i = 0; i < resultsArray.length; i++ ) {
22 | getWPExpResults( resultsArray[ i ],function( exp ) {
23 | displayResultsList( exp,i,function() {
24 | showGoalSelected( exp.id );
25 | addSelectChange( exp.id );
26 | });
27 | });
28 | }
29 | } else {
30 | $( '#noresults' ).show();
31 | $( '#loading' ).hide();
32 | $( '#ready' ).hide();
33 | }
34 | });
35 |
36 |
37 | // Pause experiment when pause button is pressed
38 | $( 'html' ).delegate( '.pause', 'click', function() {
39 | var expID = $( this ).parents( '.opt_results' ).attr( 'data-exp-id' );
40 | pauseExperiment( expID );
41 | });
42 |
43 | // Start experiment when play button is pressed
44 | $( 'html' ).delegate( '.play', 'click', function() {
45 | var expID = $( this ).parents( '.opt_results' ).attr( 'data-exp-id' );
46 | startExperiment( expID );
47 | });
48 |
49 | // Archive experiment when archive button is pressed
50 | $( 'html' ).delegate( '.archive', 'click', function() {
51 | var expID = $( this ).parents( '.opt_results' ).attr( 'data-exp-id' );
52 | archiveExperiment( expID );
53 | });
54 |
55 | $( 'html' ).delegate( '.edit', 'click', function() {
56 | var expID = $( this ).parents( '.opt_results' ).attr( 'data-exp-id' );
57 | window.open( 'https://app.optimizely.com/edit?experiment_id=' + parseInt( expID ) );
58 | });
59 |
60 | $( 'html' ).delegate( '.fullresults', 'click', function() {
61 | var expID = $( this ).parents( '.opt_results' ).attr( 'data-exp-id' );
62 | window.open( 'https://app.optimizely.com/results2?experiment_id=' + parseInt( expID ) );
63 | });
64 |
65 | // Launch winning variation when Launch button is clicked
66 | $( 'html' ).delegate( '.launch', 'click', function() {
67 | var winningVarName = $( this ).parents( 'td' ).siblings( '.first' ).children( 'a' ).text();
68 | var expID = $( this ).parents( '.opt_results' ).attr( 'data-exp-id' );
69 | var expTitle = $( this ).parents( '.opt_results' ).attr( 'data-exp-title' );
70 | launchWinner( expID, expTitle, winningVarName );
71 | });
72 |
73 | // Changes the results for the goal selected
74 | function addSelectChange( expId ) {
75 | $( '#goal_' + expId ).bind( 'change', function() {
76 | showGoalSelected( expId );
77 | });
78 | }
79 |
80 | // Simple compare function to sort goals by name
81 | function compare( a,b ) {
82 | if ( a.goal_name < b.goal_name ) {
83 | return -1;
84 | }
85 |
86 | if ( a.goal_name > b.goal_name ) {
87 | return 1;
88 | }
89 |
90 | return 0;
91 | }
92 |
93 | // Gets the results for the experiment
94 | function getWPExpResults( expObj,cb ) {
95 | expObj.results = [];
96 | optly.get( 'experiments/' + expObj.id + '/stats', function( response ) {
97 | var goalNameArray = [];
98 | response.sort( compare );
99 | expObj.results = response;
100 | expObj.avgVisitorCount = getAverageVisitor( expObj.results );
101 | cb( expObj );
102 | });
103 | }
104 |
105 | // AJAX function that updates the title in Wordpress
106 | function launchWinner( expID, expTitle, winningVarName ) {
107 | // Get the ID of the Wordpress post
108 | var wpPostID = expTitle.substring( 11, expTitle.indexOf( ']' ) );
109 | var data = {
110 | action: 'update_post_title',
111 | post_id: wpPostID,
112 | title: winningVarName
113 | };
114 |
115 | $.post( wpAjaxUrl, data, function() {
116 | $( '#exp_' + expID ).fadeOut( 1000, function() {
117 | $message = $( '
' ).text( 'You have succesfully launched the new headline' );
118 | $old = $( ' ' ).text( 'Old Headline: ' + expTitle );
119 | $new = $( '
' ).text( 'New Headline: ' + winningVarName );
120 |
121 | $( '#successMessage' )
122 | .html( '' )
123 | .append( $message )
124 | .append( $old )
125 | .append( $new )
126 | .show();
127 |
128 | // Archive the Experiement
129 | archiveExperiment( expID );
130 | });
131 | });
132 | }
133 |
134 | // Pause Experiment
135 | function pauseExperiment( experimentID ) {
136 | optly.patch( 'experiments/' + experimentID, { 'status': 'Paused' }, function( response ) {
137 | $( '.opt_results[data-exp-id=' + experimentID + ']' )
138 | .find( '.pause' )
139 | .removeClass( 'pause' )
140 | .addClass( 'play' );
141 |
142 | $( '.opt_results[data-exp-id=' + experimentID + ']' )
143 | .find( '.fa-pause' )
144 | .removeClass( 'fa-pause' )
145 | .addClass( 'fa-play' );
146 | });
147 | }
148 |
149 | // Start Experiment
150 | function startExperiment( experimentID ) {
151 | optly.patch( 'experiments/' + experimentID, { 'status': 'Running' }, function( response ) {
152 | $( '.opt_results[data-exp-id=' + experimentID + ']' )
153 | .find( '.play' )
154 | .removeClass( 'play' )
155 | .addClass( 'pause' );
156 |
157 | $( '.opt_results[data-exp-id=' + experimentID + ']' )
158 | .find( '.fa-play' )
159 | .removeClass( 'fa-play' )
160 | .addClass( 'fa-pause' );
161 | });
162 | }
163 |
164 | // Archive Experiment
165 | function archiveExperiment( experimentID ) {
166 | optly.patch( 'experiments/'+ experimentID, { 'status': 'Archived' }, function( response ) {
167 | $( '.opt_results[data-exp-id=' + experimentID + ']' ).hide();
168 | });
169 | }
170 |
171 | // Will display the resutls and build the HTML
172 | function displayResultsList( exp, i, cb ) {
173 | $( '.loading' ).hide();
174 | var data = buildResultsModuleData( exp );
175 | var tpl = _.template( $( '#optimizely_results' ).html() );
176 | if ( data.isSignificant ) {
177 | $( '#ready' ).append( tpl( data ) );
178 | $( '#ready' ).show();
179 | } else {
180 | $( '#stillwaiting' ).append( tpl( data ) );
181 | $( '#stillwaiting' ).show();
182 | }
183 | cb();
184 | }
185 |
186 | // Loops through the variations and gets an average of the visitor count for powered testing
187 | function getAverageVisitor( results ) {
188 | var totalVisitors = 0;
189 | for ( var i=0; i < results.length; i++ ) {
190 | totalVisitors += results[ i ].visitors;
191 | }
192 |
193 | return totalVisitors/results.length;
194 | }
195 |
196 | // Used to convert the value returned by the results API to a rounded percentage
197 | function getRoundedPercentage( num ) {
198 | return ( num*100 ).toFixed( 2 ) + '%';
199 | }
200 |
201 | // Changes the goal results based on what is selcted
202 | function showGoalSelected( expID ) {
203 | $( '#exp_' + expID ).find( '.variationrow' ).hide();
204 | var goalClass = $( '#goal_' + expID ).val();
205 | $( '#exp_' + expID ).find( '.'+goalClass ).show();
206 |
207 | }
208 |
209 | // Main function that builds the HTML for each results block
210 | function buildResultsModuleData( exp ) {
211 | // Set the checkbox html
212 | var statusClass = 'play';
213 |
214 | if ( 'Running' == exp.status ) {
215 | statusClass = 'pause';
216 | }
217 |
218 | var expTitle = exp.description;
219 | expTitle = expTitle.substring( expTitle.indexOf( ']:' ) + 3 );
220 | if ( expTitle.length > 73 ) {
221 | expTitle = expTitle.substring( 0, 72 ) + '...';
222 | }
223 |
224 | var goalIdArray = [];
225 | var goalOptions = [];
226 | for ( var i = 0; i < exp.results.length; i++ ) {
227 | var result = exp.results[ i ];
228 | var selected = '';
229 | if ( goalIdArray.indexOf( result.goal_id ) == -1 ) {
230 | if ( result.goal_name == 'Views to page' ) {
231 | selected = 'selected';
232 | } else {
233 | selected = '';
234 | }
235 |
236 | goalOptions.push({
237 | id: result.goal_id,
238 | selected: selected,
239 | name: result.goal_name
240 | });
241 |
242 | goalIdArray.push( result.goal_id );
243 | }
244 | }
245 |
246 | var variations = [];
247 | var isSignificant = false;
248 | for ( i = exp.results.length -1; i >= 0; i-- ) {
249 | var result = exp.results[ i ],
250 | improvement,
251 | conversion_rate,
252 | avgVisitors = getAverageVisitor( exp.results ),
253 | confidence,
254 | vistitorsRemaining,
255 | status,
256 | rowColor;
257 |
258 | if ( 'baseline' == result.status ) {
259 | improvement = 'baseline';
260 | confidence = '-';
261 | vistitorsRemaining = '-';
262 | status = 'baseline';
263 | } else {
264 | confidence = getRoundedPercentage( result.statistical_significance );
265 | improvement = getRoundedPercentage( result.improvement );
266 | vistitorsRemaining = result.visitors_until_statistically_significant;
267 | if(result.status == 'inconclusive') {
268 | // results are inconclusive determine if the variation is winning or loosing
269 | if(result.improvement > 0) {
270 | status = 'winning';
271 | } else {
272 | status = 'losing';
273 | }
274 | } else {
275 | isSignificant = true;
276 | status = result.status;
277 | }
278 | }
279 |
280 | var conversionRate = getRoundedPercentage( result.conversion_rate );
281 |
282 | variations.push({
283 | expID: exp.id,
284 | status: status,
285 | goalId: result.goal_id,
286 | variationId: result.variation_id,
287 | variationName: result.variation_name,
288 | editUrl: exp.edit_url,
289 | visitors: result.visitors,
290 | conversions: result.conversions,
291 | conversionRate: conversionRate,
292 | improvement: improvement,
293 | confidence: confidence,
294 | vistitorsRemaining: vistitorsRemaining
295 | });
296 | }
297 |
298 | data = {
299 | id: exp.id,
300 | isSignificant: isSignificant,
301 | description: exp.description,
302 | title: expTitle,
303 | goalOptions: goalOptions,
304 | statusClass: statusClass,
305 | variations: variations
306 | };
307 |
308 | return data;
309 | }
310 | }
311 |
312 | $( document ).ready(function() {
313 | if (typeof pagenow != 'undefined' && 'toplevel_page_optimizely-config' == pagenow && '' != optimizelySettings.token && '' != optimizelySettings.projectId ) {
314 | optimizelyResultsPage( optimizelySettings.token, optimizelySettings.projectId );
315 | } else {
316 | $( '#loading' ).hide();
317 | }
318 | });
319 | })( jQuery );
320 |
--------------------------------------------------------------------------------
/screenshot-1.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/optimizely/wordpress-plugin/aec610588f63eedda900983e6b851e054578bc48/screenshot-1.png
--------------------------------------------------------------------------------
/screenshot-2.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/optimizely/wordpress-plugin/aec610588f63eedda900983e6b851e054578bc48/screenshot-2.png
--------------------------------------------------------------------------------
/style.css:
--------------------------------------------------------------------------------
1 | #optimizely-tabs .code {
2 | width: 100%;
3 | font-family: Consolas, Monaco, "Courier New", Courier, monospace;
4 | font-size: 1.5em;
5 | }
6 |
7 | #optimizely-tabs textarea {
8 | width: 100%;
9 | }
10 |
11 | #optimizely_created, #optimizely_not_created {
12 | display: none;
13 | }
14 |
15 | #optimizely-tabs .opt_results {
16 | border: solid 1px #d5d5d5;
17 | margin-bottom: 30px;
18 | box-shadow: 4px 4px 5px 2px rgba(36,36,0,0.1);
19 | }
20 |
21 | #optimizely-tabs .header .title {
22 | display: inline-block;
23 | width: 60%;
24 | }
25 |
26 | #optimizely-tabs .header .title i {
27 | color: green;
28 | font-size: 20px
29 | }
30 |
31 | #optimizely-tabs .winner {
32 | background-color: #D9FBD6;
33 | }
34 |
35 |
36 | #optimizely-tabs .winning {
37 | color: #8FB900;
38 | }
39 |
40 | #optimizely-tabs .losing, #optimizely-tabs .loser {
41 | color: #e75611;
42 | }
43 |
44 | #optimizely-tabs #winners, #optimizely-tabs #stillwaiting, #optimizely-tabs #ready {
45 | display: none;
46 | }
47 |
48 | #optimizely-tabs .header .results_toolbar {
49 | display: inline-block;
50 | width: 40%;
51 | float: right;
52 | text-align: right;
53 | }
54 |
55 | #optimizely-tabs .variationrow {
56 | display: none;
57 | border-bottom: 1px solid #000;
58 | }
59 |
60 | #optimizely-tabs #launchWinners {
61 | margin-bottom: 15px;
62 | }
63 |
64 | #optimizely-tabs .header, #optimizely-tabs .footer {
65 | height: 20px;
66 | background: #EAEFF1;
67 | padding: 5px 15px 5px 10px;
68 | min-height: 30px;
69 | position: relative;
70 | overflow: visible;
71 | font-family: "Gotham A","Gotham B",Helvetica,Arial,sans-serif;
72 | font-size: 1.15em;
73 | font-weight: 300;
74 | line-height: 1.2;
75 |
76 | }
77 |
78 | #optimizely-tabs .header .title {
79 | margin-top: 5px;
80 | }
81 |
82 | #optimizely-tabs .header {
83 | border-bottom: solid 2px #999;
84 | }
85 |
86 | #optimizely-tabs .results_toolbar .button {
87 | margin-left: 5px;
88 | }
89 |
90 | #optimizely-tabs td,#optimizely-tabs th {
91 | padding: 10px 30px 10px 10px;
92 |
93 | }
94 |
95 | #optimizely-tabs .variations {
96 | background-color: gray;
97 | }
98 |
99 | #optimizely-tabs tr {
100 | background-color: #FFFFFF;
101 |
102 | }
103 |
104 | #optimizely-tabs table {
105 | width: 100%;
106 | text-align: right;
107 | border-spacing: 0pt;
108 | }
109 |
110 | #optimizely-tabs td.first {
111 | width: 20%
112 | }
113 |
114 | #optimizely-tabs td.last {
115 | border-right: none;
116 | text-align: center;
117 | }
118 |
119 | #optimizely-tabs {
120 | background-color: white;
121 | z-index: 1;
122 | }
123 |
124 | #optimizely-tabs .tabs-header {
125 | background-color: white;
126 | border: none;
127 | background: #f7f7f7;
128 | }
129 |
130 | #optimizely-tabs th {
131 | background-color: #F8F8F8
132 | }
133 |
134 | #optimizely-tabs td.last i {
135 | color: green;
136 | font-size: 25px;
137 |
138 | }
139 | #optimizely-tabs td.last {
140 | padding: 0px;
141 | }
142 |
143 | #optimizely-tabs .loading {
144 | width: 100%;
145 | padding: 20px;
146 | text-align: center;
147 | }
148 |
149 | #optimizely-tabs .ready, #optimizely-tabs .not-ready {
150 | display: inline-block;
151 | height: 20px;
152 | width: 140px;
153 | text-align: center;
154 | }
155 |
156 | #optimizely-tabs .ready i {
157 | color: #1964AF;
158 | }
159 |
160 | #optimizely-tabs .button.winner {
161 | background: #1964AF;
162 | color: #ffffff;
163 | }
164 |
165 | #optimizely-tabs .ready.launch {
166 | background-color: #1964AF;
167 | color: #ffffff;
168 | }
169 |
170 | #optimizely-tabs #successMessage {
171 | display: none;
172 | width: 100%;
173 | padding: 10px;
174 | background-color: #D9FBD6;
175 |
176 | }
177 |
178 | #optimizely-tabs #stillwaiting > h2 {
179 | padding: 0px 0px 10px 10px;
180 | border-left: solid 1px #1964AF;
181 | border-bottom: solid 1px #1964AF;
182 | margin-bottom: 10px;
183 |
184 | }
185 |
186 | #optimizely-tabs #stillwaiting > h2 > span, #optimizely-tabs #ready > h2 > span {
187 | font-size: 13px;
188 | float: right;
189 | }
190 |
191 | #noresults {
192 | display: none;
193 | }
194 |
195 | #optimizely-tabs #stillwaiting, #optimizely-tabs #ready {
196 | margin-top: 30px;
197 | }
198 |
199 | input.optimizely_variation {
200 | width: 100%;
201 | }
202 |
203 | #optimizely-tabs th > div > i.fa.fa-question-circle.fa-fw {
204 | display: inline;
205 | padding-left: 3px;
206 | }
207 |
208 | #optimizely_url_targeting {
209 | width:500px;
210 | }
211 |
212 | [role='tooltip'] {
213 | display:none !important;
214 | }
215 |
216 |
217 |
218 |
--------------------------------------------------------------------------------