Timeline Express - Version 1.1.5.7

Version Description

  • February 5th, 2015 =
  • Enhancement: Added a dropdown to select the font awesome icon
  • Enhancement: Fadded in the timeline after everything has initialized, to prevent seeing a messed up Timeline layout
Download this release

Release Info

Developer eherman24
Plugin Icon 128x128 Timeline Express
Version 1.1.5.7
Comparing to
See all releases

Code changes from version 1.1.5.6 to 1.1.5.7

classes/class.timeline-express.php CHANGED
@@ -152,6 +152,10 @@ if(!class_exists("timelineExpressBase"))
152
  // custom vlaidation for our new custom field
153
  //Validate new metabox type
154
  add_filter( 'cmb_validate_te_date_time_stamp_custom', array( $this, 'cmb_validate_te_date_time_stamp_custom' ) , 10, 2 );
 
 
 
 
155
  }
156
 
157
  /*
@@ -160,21 +164,21 @@ if(!class_exists("timelineExpressBase"))
160
  * since @v1.1.5
161
  */
162
  function cmb_render_te_date_time_stamp_custom( $field, $meta ) {
163
- ?>
164
- <style>
165
- #ui-datepicker-div { z-index: 99999 !important; }
166
- #wpbody-content { overflow: hidden !important; }
167
- .cmb_id_announcement_image td .cmb_upload_button { height: 32px !important; }
168
- </style>
169
- <?php
170
- if( $meta && isset( $meta ) ){
171
- echo '<input class="cmb_text_small cmb_datepicker" type="text" name="', $field['id'], '" id="', $field['id'], '" value="', '' !== $meta ? date( 'm/d/Y' , $meta ) : $field['default'], '" />';
172
- echo '<p class="cmb_metabox_description">'.$field['desc'].'</p>';
173
- } else{
174
- echo '<input class="cmb_text_small cmb_datepicker" type="text" name="', $field['id'], '" id="', $field['id'], '" value="' . date('m/d/Y' ) .'" />';
175
- echo '<p class="cmb_metabox_description">'.$field['desc'].'</p>';
176
- }
177
- }
178
 
179
  /*
180
  * cmb_validate_te_date_time_stamp_custom()
@@ -182,11 +186,11 @@ if(!class_exists("timelineExpressBase"))
182
  * since @v1.1.5
183
  */
184
  function cmb_validate_te_date_time_stamp_custom( $value, $new ) {
185
- if( isset( $new ) && $new != '' ){
186
- return strtotime( $new );
 
 
187
  }
188
- return '-1';
189
- }
190
 
191
 
192
  /*
@@ -195,10 +199,31 @@ if(!class_exists("timelineExpressBase"))
195
  * since @v1.1.5
196
  */
197
  function cmb_render_te_about_metabox( $field, $meta ) {
198
- require_once TIMELINE_EXPRESS_PATH . 'lib/about-metabox-template.php';
199
- }
200
 
 
 
 
 
 
 
 
 
 
201
 
 
 
 
 
 
 
 
 
 
 
 
 
202
  /*
203
  * schedule_timeline_express_support_cron()
204
  * Setup our twice daily transient, to cross check the API key ( if set )
@@ -218,10 +243,10 @@ if(!class_exists("timelineExpressBase"))
218
  if ( get_option( 'timeline_express_license_status' ) !== false && get_option( 'timeline_express_license_status' ) == 'valid' ) {
219
  // api parameters, cross checking the license
220
  $api_params = array(
221
- 'edd_action'=> 'check_license',
222
- 'license' => trim( get_option( 'timeline_express_license_key' ) ),
223
  'item_name' => urlencode( EH_DEV_SHOP_SUPPORT_PRODUCT_NAME ), // the name of our product
224
- 'url' => home_url()
225
  );
226
  // Call the custom API.
227
  $response = wp_remote_get( add_query_arg( $api_params, EH_DEV_SHOP_URL ), array( 'timeout' => 15, 'sslverify' => false ) );
@@ -463,7 +488,7 @@ if(!class_exists("timelineExpressBase"))
463
  'name' => __( 'Font Awesome Class', 'timeline-express' ),
464
  'desc' => __( 'enter the font-awesome class name in the box above. This is used for the icon associated with the announcement. <a href="http://fortawesome.github.io/Font-Awesome/cheatsheet/" target="_blank">cheat sheet</a> Example : "fa-times-circle" ', 'timeline-express' ),
465
  'id' => $prefix . 'icon',
466
- 'type' => 'text_medium',
467
  'default' => trim( $this->timeline_express_optionVal['default-announcement-icon'] ),
468
  // 'repeatable' => true,
469
  // 'on_front' => false, // Optionally designate a field to wp-admin only
@@ -827,7 +852,7 @@ if(!class_exists("timelineExpressBase"))
827
  $screen = get_current_screen();
828
  $print_styles_on_screen_array = array( 'te_announcements_page_timeline-express-settings' , 'admin_page_timeline-express-welcome' , 'te_announcements_page_timeline-express-support' );
829
 
830
- if ( in_array( $screen->base , $print_styles_on_screen_array ) || in_array( $screen->id, array( 'edit-te_announcements' ) ) ) {
831
  // Register Styles
832
  wp_enqueue_style( 'timeline-express-css-base', TIMELINE_EXPRESS_URL . 'css/timeline-express-settings.min.css' , array(), '1.0.0', 'all');
833
  // enqueue font awesome for use in column display
@@ -1206,6 +1231,79 @@ if(!class_exists("timelineExpressBase"))
1206
  return $attachment[0];
1207
  }
1208
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1209
  /***** ADMINISTRATION MENUS
1210
  ****************************************************************************************************/
1211
  public function addAdministrationMenu() {
152
  // custom vlaidation for our new custom field
153
  //Validate new metabox type
154
  add_filter( 'cmb_validate_te_date_time_stamp_custom', array( $this, 'cmb_validate_te_date_time_stamp_custom' ) , 10, 2 );
155
+ // render new custom timeline express about metabox
156
+ add_action( 'cmb_render_te_bootstrap_dropdown', array( $this, 'cmb_render_te_bootstrap_dropdown' ), 10, 2 );
157
+ // validate the new custom timeline express about metabox
158
+ add_filter( 'cmb_validate_te_bootstrap_dropdown', array( $this, 'cmb_validate_te_bootstrap_dropdown' ) , 10, 2);
159
  }
160
 
161
  /*
164
  * since @v1.1.5
165
  */
166
  function cmb_render_te_date_time_stamp_custom( $field, $meta ) {
167
+ ?>
168
+ <style>
169
+ #ui-datepicker-div { z-index: 99999 !important; }
170
+ #wpbody-content { overflow: hidden !important; }
171
+ .cmb_id_announcement_image td .cmb_upload_button { height: 32px !important; }
172
+ </style>
173
+ <?php
174
+ if( $meta && isset( $meta ) ){
175
+ echo '<input class="cmb_text_small cmb_datepicker" type="text" name="', $field['id'], '" id="', $field['id'], '" value="', '' !== $meta ? date( 'm/d/Y' , $meta ) : $field['default'], '" />';
176
+ echo '<p class="cmb_metabox_description">'.$field['desc'].'</p>';
177
+ } else{
178
+ echo '<input class="cmb_text_small cmb_datepicker" type="text" name="', $field['id'], '" id="', $field['id'], '" value="' . date('m/d/Y' ) .'" />';
179
+ echo '<p class="cmb_metabox_description">'.$field['desc'].'</p>';
180
+ }
181
+ }
182
 
183
  /*
184
  * cmb_validate_te_date_time_stamp_custom()
186
  * since @v1.1.5
187
  */
188
  function cmb_validate_te_date_time_stamp_custom( $value, $new ) {
189
+ if( isset( $new ) && $new != '' ){
190
+ return strtotime( $new );
191
+ }
192
+ return '-1';
193
  }
 
 
194
 
195
 
196
  /*
199
  * since @v1.1.5
200
  */
201
  function cmb_render_te_about_metabox( $field, $meta ) {
202
+ require_once TIMELINE_EXPRESS_PATH . 'lib/about-metabox-template.php';
203
+ }
204
 
205
+ /*
206
+ * cmb_render_te_bootstrap_dropdown()
207
+ * render the custom bootstrap dropdown
208
+ * since @v1.1.5.7
209
+ */
210
+ function cmb_render_te_bootstrap_dropdown( $field, $meta ) {
211
+ // pass in the field object and meta data
212
+ $this->timeline_express_build_bootstrap_dropdown( $field, $meta );
213
+ }
214
 
215
+ /*
216
+ * cmb_validate_te_date_time_stamp_custom()
217
+ * save our custom date time stamp
218
+ * since @v1.1.5
219
+ */
220
+ function cmb_validate_te_bootstrap_dropdown( $value, $new ) {
221
+ if( isset( $new ) && $new != '' ){
222
+ return 'fa-'.trim($new);
223
+ }
224
+ return '-1';
225
+ }
226
+
227
  /*
228
  * schedule_timeline_express_support_cron()
229
  * Setup our twice daily transient, to cross check the API key ( if set )
243
  if ( get_option( 'timeline_express_license_status' ) !== false && get_option( 'timeline_express_license_status' ) == 'valid' ) {
244
  // api parameters, cross checking the license
245
  $api_params = array(
246
+ 'edd_action' => 'check_license',
247
+ 'license' => trim( get_option( 'timeline_express_license_key' ) ),
248
  'item_name' => urlencode( EH_DEV_SHOP_SUPPORT_PRODUCT_NAME ), // the name of our product
249
+ 'url' => home_url()
250
  );
251
  // Call the custom API.
252
  $response = wp_remote_get( add_query_arg( $api_params, EH_DEV_SHOP_URL ), array( 'timeout' => 15, 'sslverify' => false ) );
488
  'name' => __( 'Font Awesome Class', 'timeline-express' ),
489
  'desc' => __( 'enter the font-awesome class name in the box above. This is used for the icon associated with the announcement. <a href="http://fortawesome.github.io/Font-Awesome/cheatsheet/" target="_blank">cheat sheet</a> Example : "fa-times-circle" ', 'timeline-express' ),
490
  'id' => $prefix . 'icon',
491
+ 'type' => 'te_bootstrap_dropdown',
492
  'default' => trim( $this->timeline_express_optionVal['default-announcement-icon'] ),
493
  // 'repeatable' => true,
494
  // 'on_front' => false, // Optionally designate a field to wp-admin only
852
  $screen = get_current_screen();
853
  $print_styles_on_screen_array = array( 'te_announcements_page_timeline-express-settings' , 'admin_page_timeline-express-welcome' , 'te_announcements_page_timeline-express-support' );
854
 
855
+ if ( in_array( $screen->base , $print_styles_on_screen_array ) || $screen->post_type == 'te_announcements' ) {
856
  // Register Styles
857
  wp_enqueue_style( 'timeline-express-css-base', TIMELINE_EXPRESS_URL . 'css/timeline-express-settings.min.css' , array(), '1.0.0', 'all');
858
  // enqueue font awesome for use in column display
1231
  return $attachment[0];
1232
  }
1233
 
1234
+
1235
+ // Build a dropdown for our bootstrap icons
1236
+ // @since v1.1.5.7
1237
+ public function timeline_express_build_bootstrap_dropdown( $field, $meta ) {
1238
+
1239
+ // get the icons out of the css file
1240
+ $response = wp_remote_get( 'http://netdna.bootstrapcdn.com/font-awesome/4.2.0/css/font-awesome.css' );
1241
+
1242
+ // splot the response body, and store the icon classes in a variable
1243
+ $split_dat_response = explode( 'icons */' , $response['body'] );
1244
+
1245
+ // empty array for icon array
1246
+ $bootstrap_icon_array = array();
1247
+
1248
+ // replace the unecessary stuff
1249
+ $data = str_replace( ';' , '' , str_replace( ':before' , '' , str_replace( '}' , '' , str_replace( 'content' , '' , str_replace( '{' , '' , $split_dat_response[1] ) ) ) ) );
1250
+ $icon_data = explode( '.fa-' , $data );
1251
+ $i = 1;
1252
+
1253
+ foreach( array_slice($icon_data,1) as $key => $value) {
1254
+ $split_icon = explode( ':' , $value );
1255
+ if( isset( $split_icon[1] ) ) {
1256
+ $bootstrap_icon_array[] = array( trim( 'fa-' . $split_icon[0] ) => trim( $split_icon[0] ) );
1257
+ }
1258
+ $i++;
1259
+ }
1260
+
1261
+ $flat_bootstrap_icon_array = array();
1262
+ foreach($bootstrap_icon_array as $array) {
1263
+ foreach($array as $k=>$v) {
1264
+ $flat_bootstrap_icon_array[$k] = $v;
1265
+ }
1266
+ }
1267
+
1268
+ wp_enqueue_script( 'bootstrap-select' , TIMELINE_EXPRESS_URL . 'js/bootstrap-select.js' , array( 'jquery' ) , 'all' );
1269
+ wp_enqueue_script( 'bootstrap-min' , 'http://netdna.bootstrapcdn.com/bootstrap/3.2.0/js/bootstrap.min.js' );
1270
+ wp_enqueue_style('bootstrap-select-style' , TIMELINE_EXPRESS_URL . 'css/bootstrap-select.min.css' );
1271
+ ?>
1272
+ <script>
1273
+ jQuery( document ).ready( function() {
1274
+ jQuery('.selectpicker').selectpicker({
1275
+ style: 'btn-info',
1276
+ size: 6
1277
+ });
1278
+ });
1279
+ </script>
1280
+ <style>
1281
+ .dropdown-toggle { background: transparent !important; border: 1px solid rgb(201, 201, 201) !important; }
1282
+ .dropdown-toggle .caret { border-top-color: #333 !important; }
1283
+ .ui-datepicker-prev:hover, .ui-datepicker-next:hover { cursor: pointer; }
1284
+ </style>
1285
+ <!-- start the font awesome icon select -->
1286
+ <select class="selectpicker" name="<?php echo $field['id']; ?>" id="<?php echo $field['id']; ?>">
1287
+
1288
+ <?php
1289
+ /* sort the bootstrap icons alphabetically */
1290
+ sort( $flat_bootstrap_icon_array );
1291
+ foreach( $flat_bootstrap_icon_array as $icon ) {
1292
+ ?>
1293
+
1294
+ <option class="fa" data-icon="fa-<?php echo $icon; ?>" <?php selected( 'fa-'.$icon , $meta ); ?>><?php echo $icon; ?></option>
1295
+
1296
+ <?php
1297
+ }
1298
+ ?>
1299
+
1300
+ </select>
1301
+ <!-- end select -->
1302
+
1303
+ <?php
1304
+ echo '<p class="cmb_metabox_description">'.$field['desc'].'</p>';
1305
+ }
1306
+
1307
  /***** ADMINISTRATION MENUS
1308
  ****************************************************************************************************/
1309
  public function addAdministrationMenu() {
css/bootstrap-select.min.css ADDED
@@ -0,0 +1,6 @@
 
 
 
 
 
 
1
+ /*!
2
+ * Bootstrap-select v1.6.3 (http://silviomoreto.github.io/bootstrap-select/)
3
+ *
4
+ * Copyright 2013-2014 bootstrap-select
5
+ * Licensed under MIT (https://github.com/silviomoreto/bootstrap-select/blob/master/LICENSE)
6
+ */select{margin:0;text-transform:none;font-family:inherit;font-size:inherit;line-height:inherit}select[multiple]{background-image:none}select[multiple],select[size]{height:auto}select optgroup{font-family:inherit;font-size:inherit;font-style:inherit}select.input-sm{height:30px;line-height:30px}select.input-lg{height:45px;line-height:45px}textarea.input-lg{height:auto}.btn{display:inline-block;padding:6px 12px;margin-bottom:0;font-size:14px;font-weight:400;line-height:1.428571429;text-align:center;white-space:nowrap;vertical-align:middle;cursor:pointer;border:1px solid transparent;border-radius:4px;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;-o-user-select:none;user-select:none}.btn:focus{outline:#333 dotted thin;outline:-webkit-focus-ring-color auto 5px;outline-offset:-2px}.btn:focus,.btn:hover{color:#333;text-decoration:none}.btn.active,.btn:active{background-image:none;outline:0;-webkit-box-shadow:inset 0 3px 5px rgba(0,0,0,.125);box-shadow:inset 0 3px 5px rgba(0,0,0,.125)}.btn-default{color:#333;background-color:#fff;border-color:#ccc}.caret{display:inline-block;width:0;height:0;margin-left:2px;vertical-align:middle;border-top:4px solid #000;border-right:4px solid transparent;border-bottom:0 dotted;border-left:4px solid transparent;content:""}.dropdown{position:relative}.dropdown-toggle:focus{outline:0}.dropdown-menu{position:absolute;top:100%;left:0;z-index:1000;display:none;float:left;min-width:160px;padding:5px 0;margin:2px 0 0;font-size:14px;list-style:none;background-color:#fff;border:1px solid #ccc;border:1px solid rgba(0,0,0,.15);border-radius:4px;-webkit-box-shadow:0 6px 12px rgba(0,0,0,.175);box-shadow:0 6px 12px rgba(0,0,0,.175);background-clip:padding-box}.dropdown-menu.pull-right{right:0;left:auto}.dropdown-menu .divider{height:1px;margin:9px 0;overflow:hidden;background-color:#e5e5e5}.dropdown-menu>li>a{display:block;padding:3px 20px;clear:both;font-weight:400;line-height:1.428571429;color:#333;white-space:nowrap}.dropdown-menu>li>a:focus,.dropdown-menu>li>a:hover{color:#fff;text-decoration:none;background-color:#428bca}.dropdown-menu>.active>a,.dropdown-menu>.active>a:focus,.dropdown-menu>.active>a:hover{color:#fff;text-decoration:none;background-color:#428bca;outline:0}.dropdown-menu>.disabled>a,.dropdown-menu>.disabled>a:focus,.dropdown-menu>.disabled>a:hover{color:#999}.dropdown-menu>.disabled>a:focus,.dropdown-menu>.disabled>a:hover{text-decoration:none;cursor:not-allowed;background-color:transparent;background-image:none;filter:progid:DXImageTransform.Microsoft.gradient(enabled=false)}.open>.dropdown-menu{display:block}.open>a{outline:0}.dropdown-header{display:block;padding:3px 20px;font-size:12px;line-height:1.428571429;color:#999}.dropdown-backdrop{position:fixed;top:0;right:0;bottom:0;left:0;z-index:990}.pull-right>.dropdown-menu{right:0;left:auto}.dropup .caret,.navbar-fixed-bottom .dropdown .caret{border-top:0 dotted;border-bottom:4px solid #000;content:""}.dropup .dropdown-menu,.navbar-fixed-bottom .dropdown .dropdown-menu{top:auto;bottom:100%;margin-bottom:1px}@media (min-width:768px){.navbar-right .dropdown-menu{right:0;left:auto}}.btn-default .caret{border-top-color:#333}.btn-danger .caret,.btn-info .caret,.btn-primary .caret,.btn-success .caret,.btn-warning .caret{border-top-color:#fff}.dropup .btn-default .caret{border-bottom-color:#333}.dropup .btn-danger .caret,.dropup .btn-info .caret,.dropup .btn-primary .caret,.dropup .btn-success .caret,.dropup .btn-warning .caret{border-bottom-color:#fff}.btn-group,.btn-group-vertical{position:relative;display:inline-block;vertical-align:middle}.dropdown-menu open{z-index:99999}.btn-group-vertical>.btn,.btn-group>.btn{position:relative;float:left}.btn-group-vertical>.btn.active,.btn-group-vertical>.btn:active,.btn-group-vertical>.btn:focus,.btn-group-vertical>.btn:hover,.btn-group>.btn.active,.btn-group>.btn:active,.btn-group>.btn:focus,.btn-group>.btn:hover{z-index:2}.btn-group-vertical>.btn:focus,.btn-group>.btn:focus{outline:0}.btn-group .btn+.btn,.btn-group .btn+.btn-group,.btn-group .btn-group+.btn,.btn-group .btn-group+.btn-group{margin-left:-1px}.btn-toolbar:after,.btn-toolbar:before{display:table;content:" "}.btn-toolbar:after{clear:both}.btn-toolbar .btn-group{float:left}.btn-toolbar>.btn+.btn,.btn-toolbar>.btn+.btn-group,.btn-toolbar>.btn-group+.btn,.btn-toolbar>.btn-group+.btn-group{margin-left:5px}.btn-group>.btn:not(:first-child):not(:last-child):not(.dropdown-toggle){border-radius:0}.btn-group>.btn:first-child{margin-left:0}.btn-group>.btn:first-child:not(:last-child):not(.dropdown-toggle){border-top-right-radius:0;border-bottom-right-radius:0}.btn-group>.btn:last-child:not(:first-child),.btn-group>.dropdown-toggle:not(:first-child){border-bottom-left-radius:0;border-top-left-radius:0}.btn-group>.btn-group{float:left}.btn-group>.btn-group:not(:first-child):not(:last-child)>.btn{border-radius:0}.btn-group>.btn-group:first-child>.btn:last-child,.btn-group>.btn-group:first-child>.dropdown-toggle{border-top-right-radius:0;border-bottom-right-radius:0}.btn-group>.btn-group:last-child>.btn:first-child{border-bottom-left-radius:0;border-top-left-radius:0}.btn-group .dropdown-toggle:active,.btn-group.open .dropdown-toggle{outline:0}.btn-group-xs>.btn{padding:1px 5px;font-size:12px;line-height:1.5;border-radius:3px}.btn-group-sm>.btn{padding:5px 10px;font-size:12px;line-height:1.5;border-radius:3px}.btn-group-lg>.btn{padding:10px 16px;font-size:18px;line-height:1.33;border-radius:6px}.btn-group>.btn+.dropdown-toggle{padding-right:8px;padding-left:8px}.btn-group>.btn-lg+.dropdown-toggle{padding-right:12px;padding-left:12px}.btn-group.open .dropdown-toggle{-webkit-box-shadow:inset 0 3px 5px rgba(0,0,0,.125);box-shadow:inset 0 3px 5px rgba(0,0,0,.125)}.btn .caret{margin-left:0}.btn-lg .caret{border-width:5px 5px 0}.dropup .btn-lg .caret{border-width:0 5px 5px}.btn-group-vertical>.btn,.btn-group-vertical>.btn-group{display:block;float:none;width:100%;max-width:100%}.btn-group-vertical>.btn-group:after,.btn-group-vertical>.btn-group:before{display:table;content:" "}.btn-group-vertical>.btn-group:after{clear:both}.btn-group-vertical>.btn-group>.btn{float:none}.btn-group-vertical>.btn+.btn,.btn-group-vertical>.btn+.btn-group,.btn-group-vertical>.btn-group+.btn,.btn-group-vertical>.btn-group+.btn-group{margin-top:-1px;margin-left:0}.btn-group-vertical>.btn:not(:first-child):not(:last-child){border-radius:0}.btn-group-vertical>.btn:first-child:not(:last-child){border-top-right-radius:4px;border-bottom-right-radius:0;border-bottom-left-radius:0}.btn-group-vertical>.btn:last-child:not(:first-child){border-top-right-radius:0;border-bottom-left-radius:4px;border-top-left-radius:0}.btn-group-vertical>.btn-group:not(:first-child):not(:last-child)>.btn{border-radius:0}.btn-group-vertical>.btn-group:first-child>.btn:last-child,.btn-group-vertical>.btn-group:first-child>.dropdown-toggle{border-bottom-right-radius:0;border-bottom-left-radius:0}.btn-group-vertical>.btn-group:last-child>.btn:first-child{border-top-right-radius:0;border-top-left-radius:0}.btn-group-justified{display:table;width:100%;border-collapse:separate;table-layout:fixed}.btn-group-justified .btn{display:table-cell;float:none;width:1%}[data-toggle=buttons]>.btn>input[type=checkbox],[data-toggle=buttons]>.btn>input[type=radio]{display:none}.dropdown-menu.inner li a{padding-left:10px}.dropdown-menu.inner li a span.glyphicon{padding-right:5px}.bootstrap-select{width:220px \0}.bootstrap-select>.btn{width:100%;padding-right:25px}.error .bootstrap-select .btn{border:1px solid #b94a48}.control-group.error .bootstrap-select .dropdown-toggle{border-color:#b94a48}.bootstrap-select.fit-width{width:auto!important}.bootstrap-select:not([class*=col-]):not([class*=form-control]):not(.input-group-btn){width:220px}.bootstrap-select .btn:focus{outline:thin dotted #333!important;outline:5px auto -webkit-focus-ring-color!important;outline-offset:-2px}.bootstrap-select.form-control{margin-bottom:0;padding:0;border:none}.bootstrap-select.form-control:not([class*=col-]){width:100%}.bootstrap-select.btn-group:not(.input-group-btn),.bootstrap-select.btn-group[class*=col-]{float:none;display:inline-block;margin-left:0}.bootstrap-select.btn-group.dropdown-menu-right,.bootstrap-select.btn-group[class*=col-].dropdown-menu-right,.row-fluid .bootstrap-select.btn-group[class*=col-].dropdown-menu-right{float:right}.form-search .bootstrap-select.btn-group,.form-inline .bootstrap-select.btn-group,.form-horizontal .bootstrap-select.btn-group,.form-group .bootstrap-select.btn-group{margin-bottom:0}.form-group-lg .bootstrap-select.btn-group.form-control,.form-group-sm .bootstrap-select.btn-group.form-control{padding:0}.form-inline .bootstrap-select.btn-group .form-control{width:100%}.input-append .bootstrap-select.btn-group{margin-left:-1px}.input-prepend .bootstrap-select.btn-group{margin-right:-1px}.bootstrap-select.btn-group>.disabled{cursor:not-allowed}.bootstrap-select.btn-group>.disabled:focus{outline:0!important}.bootstrap-select.btn-group .btn .filter-option{display:inline-block;overflow:hidden;width:100%;text-align:left}.bootstrap-select.btn-group .btn .caret{position:absolute;top:50%;right:12px;margin-top:-2px;vertical-align:middle}.bootstrap-select.btn-group[class*=col-] .btn{width:100%}.bootstrap-select.btn-group .dropdown-menu{min-width:100%;z-index:1035;-webkit-box-sizing:border-box;-moz-box-sizing:border-box;box-sizing:border-box}.bootstrap-select.btn-group .dropdown-menu.inner{position:static;border:0;padding:0;margin:0;border-radius:0;-webkit-box-shadow:none;box-shadow:none}.bootstrap-select.btn-group .dropdown-menu li{position:relative}.bootstrap-select.btn-group .dropdown-menu li:not(.disabled) a:hover small,.bootstrap-select.btn-group .dropdown-menu li:not(.disabled) a:focus small,.bootstrap-select.btn-group .dropdown-menu li.active:not(.disabled) a small{color:#64b1d8;color:rgba(100,177,216,.4)}.bootstrap-select.btn-group .dropdown-menu li.disabled a{cursor:not-allowed}.bootstrap-select.btn-group .dropdown-menu li a{cursor:pointer}.bootstrap-select.btn-group .dropdown-menu li a.opt{position:relative;padding-left:2.25em}.bootstrap-select.btn-group .dropdown-menu li a span.check-mark{display:none}.bootstrap-select.btn-group .dropdown-menu li a span.text{display:inline-block}.bootstrap-select.btn-group .dropdown-menu li small{padding-left:.5em}.bootstrap-select.btn-group .dropdown-menu .notify{position:absolute;bottom:5px;width:96%;margin:0 2%;min-height:26px;padding:3px 5px;background:#f5f5f5;border:1px solid #e3e3e3;-webkit-box-shadow:inset 0 1px 1px rgba(0,0,0,.05);box-shadow:inset 0 1px 1px rgba(0,0,0,.05);pointer-events:none;opacity:.9;-webkit-box-sizing:border-box;-moz-box-sizing:border-box;box-sizing:border-box}.bootstrap-select.btn-group .no-results{padding:3px;background:#f5f5f5;margin:0 5px}.bootstrap-select.btn-group.fit-width .btn .filter-option{position:static}.bootstrap-select.btn-group.fit-width .btn .caret{position:static;top:auto;margin-top:-1px}.bootstrap-select.btn-group.show-tick .dropdown-menu li.selected a span.check-mark{position:absolute;display:inline-block;right:15px;margin-top:5px}.bootstrap-select.btn-group.show-tick .dropdown-menu li a span.text{margin-right:34px}.bootstrap-select.show-menu-arrow.open>.btn{z-index:1035+1}.bootstrap-select.show-menu-arrow .dropdown-toggle:before{content:'';border-left:7px solid transparent;border-right:7px solid transparent;border-bottom-width:7px;border-bottom-style:solid;border-bottom-color:#ccc;border-bottom-color:rgba(204,204,204,.2);position:absolute;bottom:-4px;left:9px;display:none}.bootstrap-select.show-menu-arrow .dropdown-toggle:after{content:'';border-left:6px solid transparent;border-right:6px solid transparent;border-bottom:6px solid #fff;position:absolute;bottom:-4px;left:10px;display:none}.bootstrap-select.show-menu-arrow.dropup .dropdown-toggle:before{bottom:auto;top:-3px;border-bottom:0;border-top-width:7px;border-top-style:solid;border-top-color:#ccc;border-top-color:rgba(204,204,204,.2)}.bootstrap-select.show-menu-arrow.dropup .dropdown-toggle:after{bottom:auto;top:-3px;border-top:6px solid #fff;border-bottom:0}.bootstrap-select.show-menu-arrow.pull-right .dropdown-toggle:before{right:12px;left:auto}.bootstrap-select.show-menu-arrow.pull-right .dropdown-toggle:after{right:13px;left:auto}.bootstrap-select.show-menu-arrow.open>.dropdown-toggle:before,.bootstrap-select.show-menu-arrow.open>.dropdown-toggle:after{display:block}.bs-searchbox,.bs-actionsbox{padding:4px 8px}.bs-actionsbox{float:left;width:100%;-webkit-box-sizing:border-box;-moz-box-sizing:border-box;box-sizing:border-box}.bs-actionsbox .btn-group button{width:50%}.bs-searchbox+.bs-actionsbox{padding:0 8px 4px}.bs-searchbox input.form-control{margin-bottom:0;width:100%}.mobile-device{position:absolute;top:0;left:0;display:block!important;width:100%;height:100%!important;opacity:0}
css/timeline-express.css CHANGED
@@ -1,4 +1,4 @@
1
- /* Timeline Express Minified Styles 1.1.4 */
2
  /* By Evan Herman (http://www.evan-herman.com */
3
  /* -------------------------------------------------- */
4
  .cd-container {
@@ -22,6 +22,17 @@
22
  padding: 2em 0;
23
  margin-top: 2em;
24
  margin-bottom: 3em;
 
 
 
 
 
 
 
 
 
 
 
25
  }
26
  #cd-timeline::before {
27
  content: '';
1
+ /* Timeline Express Minified Styles 1.1.5.7 */
2
  /* By Evan Herman (http://www.evan-herman.com */
3
  /* -------------------------------------------------- */
4
  .cd-container {
22
  padding: 2em 0;
23
  margin-top: 2em;
24
  margin-bottom: 3em;
25
+ /* @since v1.1.5.7 */
26
+ /* IE 8 */
27
+ -ms-filter: "progid:DXImageTransform.Microsoft.Alpha(Opacity=0)";
28
+ /* IE 5-7 */
29
+ filter: alpha(opacity=0);
30
+ /* Netscape */
31
+ -moz-opacity: 0;
32
+ /* Safari 1.x */
33
+ -khtml-opacity: 0;
34
+ /* Good browsers */
35
+ opacity: 0;
36
  }
37
  #cd-timeline::before {
38
  content: '';
css/timeline-express.min.css CHANGED
@@ -1,4 +1,4 @@
1
- /* Timeline Express Minified Styles 1.1.4 */
2
  /* By Evan Herman (http://www.evan-herman.com */
3
  /* -------------------------------------------------- */
4
- .cd-container{width:100%;max-width:822px;margin:0 auto}.cd-container::after{content:'';display:table;clear:both}.cd-timeline-announcement-image{box-shadow:none!important;max-width:100%;display:block;margin:1em auto}#cd-timeline{position:relative;padding:2em 0;margin-top:2em;margin-bottom:3em}#cd-timeline::before{content:'';position:absolute;top:0;left:18px;height:100%;width:4px;background:#d7e4ed}.announcement-banner-image{max-width:100%}.timeline-express-single-page-announcement-date{display:block;margin-bottom:1em}@media only screen and (min-width:822px){#cd-timeline{margin-top:3em;margin-bottom:5.5em}#cd-timeline::before{left:50%;margin-left:-2px}}.cd-timeline-block{margin:25px 0}.cd-timeline-block:after{content:"";display:table;clear:both}.cd-timeline-block:first-child{margin-top:0}.cd-timeline-block:last-child{margin-bottom:0}@media only screen and (min-width:822px){.cd-timeline-block{width:100%;margin:-3.5em 0}.cd-timeline-block:first-child{margin-top:0}.cd-timeline-block:last-child{margin-bottom:0}}.cd-timeline-img{position:absolute;top:0;left:0;width:40px;height:40px;border-radius:50%;box-shadow:0 0 0 4px white,inset 0 2px 0 rgba(0,0,0,.08),0 3px 0 4px rgba(0,0,0,.05)}.cd-timeline-img img{display:block;width:24px;height:24px;position:relative;left:50%;top:50%;margin-left:-12px;margin-top:-12px}.cd-timeline-img.cd-picture{background:#75ce66}.cd-timeline-img.cd-movie{background:#c03b44}.cd-timeline-img.cd-location{background:#f0ca45}@media only screen and (min-width:822px){.cd-timeline-img{width:60px;height:60px;left:50%;margin-left:-30px;-webkit-transform:translateZ(0);-webkit-backface-visibility:hidden}.cssanimations .cd-timeline-img.is-hidden{visibility:hidden}.cssanimations .cd-timeline-img.bounce-in{visibility:visible;-webkit-animation:cd-bounce-1 .6s;-moz-animation:cd-bounce-1 .6s;animation:cd-bounce-1 .6s}}@-webkit-keyframes cd-bounce-1{0%{opacity:0;-webkit-transform:scale(0.5)}60%{opacity:1;-webkit-transform:scale(1.2)}100%{-webkit-transform:scale(1)}}@-moz-keyframes cd-bounce-1{0%{opacity:0;-moz-transform:scale(0.5)}60%{opacity:1;-moz-transform:scale(1.2)}100%{-moz-transform:scale(1)}}@keyframes cd-bounce-1{0%{opacity:0;-webkit-transform:scale(0.5);-moz-transform:scale(0.5);-ms-transform:scale(0.5);-o-transform:scale(0.5);transform:scale(0.5)}60%{opacity:1;-webkit-transform:scale(1.2);-moz-transform:scale(1.2);-ms-transform:scale(1.2);-o-transform:scale(1.2);transform:scale(1.2)}100%{-webkit-transform:scale(1);-moz-transform:scale(1);-ms-transform:scale(1);-o-transform:scale(1);transform:scale(1)}}.cd-timeline-content{position:relative;margin-left:60px;background:#fff;border-radius:.25em;padding:1em;box-shadow:0 3px 0 #B9C5CD}.cd-timeline-content:after{content:"";display:table;clear:both}.cd-timeline-content .cd-date,.cd-timeline-content .cd-read-more{display:inline-block}.cd-timeline-content .cd-read-more{padding:.8em 1em;position:relative;z-index:9999}.cd-timeline-content .cd-date{float:left;padding:.8em 0;opacity:.7;font-size:12px}.cd-timeline-title-container{display:inline-block;width:100%;float:left;margin:.55em 0}.cd-timeline-title-container h2{float:left}.cd-timeline-content .timeline-date{opacity:.7;font-size:.857143rem;float:right;margin-top:.5em}.cd-timeline-content::before{content:'';position:absolute;top:16px;right:100%;height:0;width:0;border:7px solid transparent;border-right:7px solid #fff}@media only screen and (min-width:768px){.cd-timeline-content h2{margin-top:0;margin-bottom:0}.cd-timeline-content .the-excerpt{display:block;float:left;width:100%;margin:1em 0;position:relative;z-index:999}.cd-timeline-content .cd-date,.cd-timeline-content .cd-read-more{font-size:14px;font-size:.875rem;position:relative;z-index:999}}@media only screen and (min-width:822px){.cd-timeline-content{margin-left:0;padding:1.6em;width:39%;background:#EFEFEF}.cd-timeline-content::before{top:24px;left:100%;border-color:transparent transparent transparent #EFEFEF}.cd-timeline-content .cd-read-more{float:left;color:#333}.cd-timeline-content .cd-date{position:absolute;width:100%;left:125%;top:15px}.cd-timeline-block:nth-child(even) .cd-timeline-content{float:right}.cd-timeline-block:nth-child(even) .cd-timeline-content::before{top:24px;left:auto;right:100%;border-color:transparent #EFEFEF transparent transparent}.cd-timeline-block:nth-child(even) .cd-timeline-content .cd-read-more{float:right;color:#333;padding-right:0}.cd-timeline-block:nth-child(odd) .cd-timeline-content .cd-read-more{position:relative;z-index:99999;padding-left:0}.cd-timeline-block:nth-child(even) .cd-timeline-content .cd-date{left:auto;right:125%;text-align:right}.cssanimations .cd-timeline-content.is-hidden{visibility:hidden}.cssanimations .cd-timeline-content.bounce-in{visibility:visible;-webkit-animation:cd-bounce-2 .6s;-moz-animation:cd-bounce-2 .6s;animation:cd-bounce-2 .6s}}@media only screen and (min-width:822px){.cssanimations .cd-timeline-block:nth-child(even) .cd-timeline-content.bounce-in{-webkit-animation:cd-bounce-2-inverse .6s;-moz-animation:cd-bounce-2-inverse .6s;animation:cd-bounce-2-inverse .6s}}@-webkit-keyframes cd-bounce-2{0%{opacity:0;-webkit-transform:translateX(-100px)}60%{opacity:1;-webkit-transform:translateX(20px)}100%{-webkit-transform:translateX(0)}}@-moz-keyframes cd-bounce-2{0%{opacity:0;-moz-transform:translateX(-100px)}60%{opacity:1;-moz-transform:translateX(20px)}100%{-moz-transform:translateX(0)}}@keyframes cd-bounce-2{0%{opacity:0;-webkit-transform:translateX(-100px);-moz-transform:translateX(-100px);-ms-transform:translateX(-100px);-o-transform:translateX(-100px);transform:translateX(-100px)}60%{opacity:1;-webkit-transform:translateX(20px);-moz-transform:translateX(20px);-ms-transform:translateX(20px);-o-transform:translateX(20px);transform:translateX(20px)}100%{-webkit-transform:translateX(0);-moz-transform:translateX(0);-ms-transform:translateX(0);-o-transform:translateX(0);transform:translateX(0)}}@-webkit-keyframes cd-bounce-2-inverse{0%{opacity:0;-webkit-transform:translateX(100px)}60%{opacity:1;-webkit-transform:translateX(-20px)}100%{-webkit-transform:translateX(0)}}@-moz-keyframes cd-bounce-2-inverse{0%{opacity:0;-moz-transform:translateX(100px)}60%{opacity:1;-moz-transform:translateX(-20px)}100%{-moz-transform:translateX(0)}}@keyframes cd-bounce-2-inverse{0%{opacity:0;-webkit-transform:translateX(100px);-moz-transform:translateX(100px);-ms-transform:translateX(100px);-o-transform:translateX(100px);transform:translateX(100px)}60%{opacity:1;-webkit-transform:translateX(-20px);-moz-transform:translateX(-20px);-ms-transform:translateX(-20px);-o-transform:translateX(-20px);transform:translateX(-20px)}100%{-webkit-transform:translateX(0);-moz-transform:translateX(0);-ms-transform:translateX(0);-o-transform:translateX(0);transform:translateX(0)}}.more-to-come-container{position:relative;background:#EFEFEF;display:block;width:100%;text-align:center}.more-to-come{margin:10em 0 0;padding:1em 0;font-weight:200;color:rgba(100,100,100,.46)}.page article.page{background:0 0!important;box-shadow:none;border:none;-webkit-box-shadow:none}#cd-timeline span.fa{color:#fff;font-size:28px;display:block;text-align:center;margin-top:17px}.cd-timeline-icon-link{color:#fff!important}@media only screen and (max-width:821px){#cd-timeline span.fa{color:#fff;font-size:18px;display:block;text-align:center;margin-top:12px}.cd-timeline-block:nth-child(even) .cd-timeline-content .cd-read-more,.cd-timeline-block:nth-child(odd) .cd-timeline-content .cd-read-more{padding-left:0!important;position:relative;z-index:99999}}.timeline-width100{width:100%}.timeline-width34{width:34%}.timeline-width30{width:30%}.timeline-date-left{width:100%;float:left!important}.single-post .announcement-banner-image,.single-post .return-to-timeline,.single-post .timeline-express-single-page-announcement-date{display:none}
1
+ /* Timeline Express Minified Styles 1.1.5.7 */
2
  /* By Evan Herman (http://www.evan-herman.com */
3
  /* -------------------------------------------------- */
4
+ .cd-container{width:100%;max-width:822px;margin:0 auto}.cd-container::after{content:'';display:table;clear:both}.cd-timeline-announcement-image{box-shadow:none!important;max-width:100%;display:block;margin:1em auto}#cd-timeline{position:relative;padding:2em 0;margin-top:2em;margin-bottom:3em;-ms-filter:"alpha(Opacity=0)";filter:alpha(opacity=0);-moz-opacity:0;-khtml-opacity:0;opacity:0}#cd-timeline::before{content:'';position:absolute;top:0;left:18px;height:100%;width:4px;background:#d7e4ed}.announcement-banner-image{max-width:100%}.timeline-express-single-page-announcement-date{display:block;margin-bottom:1em}@media only screen and (min-width:822px){#cd-timeline{margin-top:3em;margin-bottom:5.5em}#cd-timeline::before{left:50%;margin-left:-2px}}.cd-timeline-block{margin:25px 0}.cd-timeline-block:after{content:"";display:table;clear:both}.cd-timeline-block:first-child{margin-top:0}.cd-timeline-block:last-child{margin-bottom:0}@media only screen and (min-width:822px){.cd-timeline-block{width:100%;margin:-3.5em 0}.cd-timeline-block:first-child{margin-top:0}.cd-timeline-block:last-child{margin-bottom:0}}.cd-timeline-img{position:absolute;top:0;left:0;width:40px;height:40px;border-radius:50%;box-shadow:0 0 0 4px white,inset 0 2px 0 rgba(0,0,0,.08),0 3px 0 4px rgba(0,0,0,.05)}.cd-timeline-img img{display:block;width:24px;height:24px;position:relative;left:50%;top:50%;margin-left:-12px;margin-top:-12px}.cd-timeline-img.cd-picture{background:#75ce66}.cd-timeline-img.cd-movie{background:#c03b44}.cd-timeline-img.cd-location{background:#f0ca45}@media only screen and (min-width:822px){.cd-timeline-img{width:60px;height:60px;left:50%;margin-left:-30px;-webkit-transform:translateZ(0);-webkit-backface-visibility:hidden}.cssanimations .cd-timeline-img.is-hidden{visibility:hidden}.cssanimations .cd-timeline-img.bounce-in{visibility:visible;-webkit-animation:cd-bounce-1 .6s;-moz-animation:cd-bounce-1 .6s;animation:cd-bounce-1 .6s}}@-webkit-keyframes cd-bounce-1{0%{opacity:0;-webkit-transform:scale(0.5)}60%{opacity:1;-webkit-transform:scale(1.2)}100%{-webkit-transform:scale(1)}}@-moz-keyframes cd-bounce-1{0%{opacity:0;-moz-transform:scale(0.5)}60%{opacity:1;-moz-transform:scale(1.2)}100%{-moz-transform:scale(1)}}@keyframes cd-bounce-1{0%{opacity:0;-webkit-transform:scale(0.5);-moz-transform:scale(0.5);-ms-transform:scale(0.5);-o-transform:scale(0.5);transform:scale(0.5)}60%{opacity:1;-webkit-transform:scale(1.2);-moz-transform:scale(1.2);-ms-transform:scale(1.2);-o-transform:scale(1.2);transform:scale(1.2)}100%{-webkit-transform:scale(1);-moz-transform:scale(1);-ms-transform:scale(1);-o-transform:scale(1);transform:scale(1)}}.cd-timeline-content{position:relative;margin-left:60px;background:#fff;border-radius:.25em;padding:1em;box-shadow:0 3px 0 #B9C5CD}.cd-timeline-content:after{content:"";display:table;clear:both}.cd-timeline-content .cd-date,.cd-timeline-content .cd-read-more{display:inline-block}.cd-timeline-content .cd-read-more{padding:.8em 1em;position:relative;z-index:9999}.cd-timeline-content .cd-date{float:left;padding:.8em 0;opacity:.7;font-size:12px}.cd-timeline-title-container{display:inline-block;width:100%;float:left;margin:.55em 0}.cd-timeline-title-container h2{float:left}.cd-timeline-content .timeline-date{opacity:.7;font-size:.857143rem;float:right;margin-top:.5em}.cd-timeline-content::before{content:'';position:absolute;top:16px;right:100%;height:0;width:0;border:7px solid transparent;border-right:7px solid #fff}@media only screen and (min-width:768px){.cd-timeline-content h2{margin-top:0;margin-bottom:0}.cd-timeline-content .the-excerpt{display:block;float:left;width:100%;margin:1em 0;position:relative;z-index:999}.cd-timeline-content .cd-date,.cd-timeline-content .cd-read-more{font-size:14px;font-size:.875rem;position:relative;z-index:999}}@media only screen and (min-width:822px){.cd-timeline-content{margin-left:0;padding:1.6em;width:39%;background:#EFEFEF}.cd-timeline-content::before{top:24px;left:100%;border-color:transparent transparent transparent #EFEFEF}.cd-timeline-content .cd-read-more{float:left;color:#333}.cd-timeline-content .cd-date{position:absolute;width:100%;left:125%;top:15px}.cd-timeline-block:nth-child(even) .cd-timeline-content{float:right}.cd-timeline-block:nth-child(even) .cd-timeline-content::before{top:24px;left:auto;right:100%;border-color:transparent #EFEFEF transparent transparent}.cd-timeline-block:nth-child(even) .cd-timeline-content .cd-read-more{float:right;color:#333;padding-right:0}.cd-timeline-block:nth-child(odd) .cd-timeline-content .cd-read-more{position:relative;z-index:99999;padding-left:0}.cd-timeline-block:nth-child(even) .cd-timeline-content .cd-date{left:auto;right:125%;text-align:right}.cssanimations .cd-timeline-content.is-hidden{visibility:hidden}.cssanimations .cd-timeline-content.bounce-in{visibility:visible;-webkit-animation:cd-bounce-2 .6s;-moz-animation:cd-bounce-2 .6s;animation:cd-bounce-2 .6s}}@media only screen and (min-width:822px){.cssanimations .cd-timeline-block:nth-child(even) .cd-timeline-content.bounce-in{-webkit-animation:cd-bounce-2-inverse .6s;-moz-animation:cd-bounce-2-inverse .6s;animation:cd-bounce-2-inverse .6s}}@-webkit-keyframes cd-bounce-2{0%{opacity:0;-webkit-transform:translateX(-100px)}60%{opacity:1;-webkit-transform:translateX(20px)}100%{-webkit-transform:translateX(0)}}@-moz-keyframes cd-bounce-2{0%{opacity:0;-moz-transform:translateX(-100px)}60%{opacity:1;-moz-transform:translateX(20px)}100%{-moz-transform:translateX(0)}}@keyframes cd-bounce-2{0%{opacity:0;-webkit-transform:translateX(-100px);-moz-transform:translateX(-100px);-ms-transform:translateX(-100px);-o-transform:translateX(-100px);transform:translateX(-100px)}60%{opacity:1;-webkit-transform:translateX(20px);-moz-transform:translateX(20px);-ms-transform:translateX(20px);-o-transform:translateX(20px);transform:translateX(20px)}100%{-webkit-transform:translateX(0);-moz-transform:translateX(0);-ms-transform:translateX(0);-o-transform:translateX(0);transform:translateX(0)}}@-webkit-keyframes cd-bounce-2-inverse{0%{opacity:0;-webkit-transform:translateX(100px)}60%{opacity:1;-webkit-transform:translateX(-20px)}100%{-webkit-transform:translateX(0)}}@-moz-keyframes cd-bounce-2-inverse{0%{opacity:0;-moz-transform:translateX(100px)}60%{opacity:1;-moz-transform:translateX(-20px)}100%{-moz-transform:translateX(0)}}@keyframes cd-bounce-2-inverse{0%{opacity:0;-webkit-transform:translateX(100px);-moz-transform:translateX(100px);-ms-transform:translateX(100px);-o-transform:translateX(100px);transform:translateX(100px)}60%{opacity:1;-webkit-transform:translateX(-20px);-moz-transform:translateX(-20px);-ms-transform:translateX(-20px);-o-transform:translateX(-20px);transform:translateX(-20px)}100%{-webkit-transform:translateX(0);-moz-transform:translateX(0);-ms-transform:translateX(0);-o-transform:translateX(0);transform:translateX(0)}}.more-to-come-container{position:relative;background:#EFEFEF;display:block;width:100%;text-align:center}.more-to-come{margin:10em 0 0;padding:1em 0;font-weight:200;color:rgba(100,100,100,.46)}.page article.page{background:0 0!important;box-shadow:none;border:none;-webkit-box-shadow:none}#cd-timeline span.fa{color:#fff;font-size:28px;display:block;text-align:center;margin-top:17px}.cd-timeline-icon-link{color:#fff!important}@media only screen and (max-width:821px){#cd-timeline span.fa{color:#fff;font-size:18px;display:block;text-align:center;margin-top:12px}.cd-timeline-block:nth-child(even) .cd-timeline-content .cd-read-more,.cd-timeline-block:nth-child(odd) .cd-timeline-content .cd-read-more{padding-left:0!important;position:relative;z-index:99999}}.timeline-width100{width:100%}.timeline-width34{width:34%}.timeline-width30{width:30%}.timeline-date-left{width:100%;float:left!important}.single-post .announcement-banner-image,.single-post .return-to-timeline,.single-post .timeline-express-single-page-announcement-date{display:none}
js/bootstrap-select.js ADDED
@@ -0,0 +1,1209 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ (function ($) {
2
+ 'use strict';
3
+
4
+ // Case insensitive search
5
+ $.expr[':'].icontains = function (obj, index, meta) {
6
+ return icontains($(obj).text(), meta[3]);
7
+ };
8
+
9
+ // Case and accent insensitive search
10
+ $.expr[':'].aicontains = function (obj, index, meta) {
11
+ return icontains($(obj).data('normalizedText') || $(obj).text(), meta[3]);
12
+ };
13
+
14
+ /**
15
+ * Actual implementation of the case insensitive search.
16
+ * @access private
17
+ * @param {String} haystack
18
+ * @param {String} needle
19
+ * @returns {boolean}
20
+ */
21
+ function icontains(haystack, needle) {
22
+ return haystack.toUpperCase().indexOf(needle.toUpperCase()) > -1;
23
+ }
24
+
25
+ /**
26
+ * Remove all diatrics from the given text.
27
+ * @access private
28
+ * @param {String} text
29
+ * @returns {String}
30
+ */
31
+ function normalizeToBase(text) {
32
+ var rExps = [
33
+ {re: /[\xC0-\xC6]/g, ch: "A"},
34
+ {re: /[\xE0-\xE6]/g, ch: "a"},
35
+ {re: /[\xC8-\xCB]/g, ch: "E"},
36
+ {re: /[\xE8-\xEB]/g, ch: "e"},
37
+ {re: /[\xCC-\xCF]/g, ch: "I"},
38
+ {re: /[\xEC-\xEF]/g, ch: "i"},
39
+ {re: /[\xD2-\xD6]/g, ch: "O"},
40
+ {re: /[\xF2-\xF6]/g, ch: "o"},
41
+ {re: /[\xD9-\xDC]/g, ch: "U"},
42
+ {re: /[\xF9-\xFC]/g, ch: "u"},
43
+ {re: /[\xC7-\xE7]/g, ch: "c"},
44
+ {re: /[\xD1]/g, ch: "N"},
45
+ {re: /[\xF1]/g, ch: "n"}
46
+ ];
47
+ $.each(rExps, function () {
48
+ text = text.replace(this.re, this.ch);
49
+ });
50
+ return text;
51
+ }
52
+
53
+
54
+ function htmlEscape(html) {
55
+ var escapeMap = {
56
+ '&': '&amp;',
57
+ '<': '&lt;',
58
+ '>': '&gt;',
59
+ '"': '&quot;',
60
+ "'": '&#x27;',
61
+ '`': '&#x60;'
62
+ };
63
+ var source = '(?:' + Object.keys(escapeMap).join('|') + ')',
64
+ testRegexp = new RegExp(source),
65
+ replaceRegexp = new RegExp(source, 'g'),
66
+ string = html == null ? '' : '' + html;
67
+ return testRegexp.test(string) ? string.replace(replaceRegexp, function (match) {
68
+ return escapeMap[match];
69
+ }) : string;
70
+ }
71
+
72
+ var Selectpicker = function (element, options, e) {
73
+ if (e) {
74
+ e.stopPropagation();
75
+ e.preventDefault();
76
+ }
77
+
78
+ this.$element = $(element);
79
+ this.$newElement = null;
80
+ this.$button = null;
81
+ this.$menu = null;
82
+ this.$lis = null;
83
+ this.options = options;
84
+
85
+ // If we have no title yet, try to pull it from the html title attribute (jQuery doesnt' pick it up as it's not a
86
+ // data-attribute)
87
+ if (this.options.title === null) {
88
+ this.options.title = this.$element.attr('title');
89
+ }
90
+
91
+ //Expose public methods
92
+ this.val = Selectpicker.prototype.val;
93
+ this.render = Selectpicker.prototype.render;
94
+ this.refresh = Selectpicker.prototype.refresh;
95
+ this.setStyle = Selectpicker.prototype.setStyle;
96
+ this.selectAll = Selectpicker.prototype.selectAll;
97
+ this.deselectAll = Selectpicker.prototype.deselectAll;
98
+ this.destroy = Selectpicker.prototype.remove;
99
+ this.remove = Selectpicker.prototype.remove;
100
+ this.show = Selectpicker.prototype.show;
101
+ this.hide = Selectpicker.prototype.hide;
102
+
103
+ this.init();
104
+ };
105
+
106
+ Selectpicker.VERSION = '1.6.3';
107
+
108
+ // part of this is duplicated in i18n/defaults-en_US.js. Make sure to update both.
109
+ Selectpicker.DEFAULTS = {
110
+ noneSelectedText: 'Nothing selected',
111
+ noneResultsText: 'No results match',
112
+ countSelectedText: function (numSelected, numTotal) {
113
+ return (numSelected == 1) ? "{0} item selected" : "{0} items selected";
114
+ },
115
+ maxOptionsText: function (numAll, numGroup) {
116
+ var arr = [];
117
+
118
+ arr[0] = (numAll == 1) ? 'Limit reached ({n} item max)' : 'Limit reached ({n} items max)';
119
+ arr[1] = (numGroup == 1) ? 'Group limit reached ({n} item max)' : 'Group limit reached ({n} items max)';
120
+
121
+ return arr;
122
+ },
123
+ selectAllText: 'Select All',
124
+ deselectAllText: 'Deselect All',
125
+ multipleSeparator: ', ',
126
+ style: 'btn-default',
127
+ size: 'auto',
128
+ title: null,
129
+ selectedTextFormat: 'values',
130
+ width: false,
131
+ container: false,
132
+ hideDisabled: false,
133
+ showSubtext: false,
134
+ showIcon: true,
135
+ showContent: true,
136
+ dropupAuto: true,
137
+ header: false,
138
+ liveSearch: false,
139
+ actionsBox: false,
140
+ iconBase: 'fa',
141
+ tickIcon: 'fa-ok',
142
+ maxOptions: false,
143
+ mobile: false,
144
+ selectOnTab: false,
145
+ dropdownAlignRight: false,
146
+ searchAccentInsensitive: false
147
+ };
148
+
149
+ Selectpicker.prototype = {
150
+
151
+ constructor: Selectpicker,
152
+
153
+ init: function () {
154
+ var that = this,
155
+ id = this.$element.attr('id');
156
+
157
+ this.$element.hide();
158
+ this.multiple = this.$element.prop('multiple');
159
+ this.autofocus = this.$element.prop('autofocus');
160
+ this.$newElement = this.createView();
161
+ this.$element.after(this.$newElement);
162
+ this.$menu = this.$newElement.find('> .dropdown-menu');
163
+ this.$button = this.$newElement.find('> button');
164
+ this.$searchbox = this.$newElement.find('input');
165
+
166
+ if (this.options.dropdownAlignRight)
167
+ this.$menu.addClass('dropdown-menu-right');
168
+
169
+ if (typeof id !== 'undefined') {
170
+ this.$button.attr('data-id', id);
171
+ $('label[for="' + id + '"]').click(function (e) {
172
+ e.preventDefault();
173
+ that.$button.focus();
174
+ });
175
+ }
176
+
177
+ this.checkDisabled();
178
+ this.clickListener();
179
+ if (this.options.liveSearch) this.liveSearchListener();
180
+ this.render();
181
+ this.liHeight();
182
+ this.setStyle();
183
+ this.setWidth();
184
+ if (this.options.container) this.selectPosition();
185
+ this.$menu.data('this', this);
186
+ this.$newElement.data('this', this);
187
+ if (this.options.mobile) this.mobile();
188
+ },
189
+
190
+ createDropdown: function () {
191
+ // Options
192
+ // If we are multiple, then add the show-tick class by default
193
+ var multiple = this.multiple ? ' show-tick' : '',
194
+ inputGroup = this.$element.parent().hasClass('input-group') ? ' input-group-btn' : '',
195
+ autofocus = this.autofocus ? ' autofocus' : '',
196
+ btnSize = this.$element.parents().hasClass('form-group-lg') ? ' btn-lg' : (this.$element.parents().hasClass('form-group-sm') ? ' btn-sm' : '');
197
+ // Elements
198
+ var header = this.options.header ? '<div class="popover-title"><button type="button" class="close" aria-hidden="true">&times;</button>' + this.options.header + '</div>' : '';
199
+ var searchbox = this.options.liveSearch ? '<div class="bs-searchbox"><input type="text" class="input-block-level form-control" autocomplete="off" /></div>' : '';
200
+ var actionsbox = this.options.actionsBox ? '<div class="bs-actionsbox">' +
201
+ '<div class="btn-group btn-block">' +
202
+ '<button class="actions-btn bs-select-all btn btn-sm btn-default">' +
203
+ this.options.selectAllText +
204
+ '</button>' +
205
+ '<button class="actions-btn bs-deselect-all btn btn-sm btn-default">' +
206
+ this.options.deselectAllText +
207
+ '</button>' +
208
+ '</div>' +
209
+ '</div>' : '';
210
+ var drop =
211
+ '<div class="btn-group bootstrap-select' + multiple + inputGroup + '">' +
212
+ '<button type="button" class="btn dropdown-toggle selectpicker' + btnSize + '" data-toggle="dropdown"' + autofocus + '>' +
213
+ '<span class="filter-option pull-left"></span>&nbsp;' +
214
+ '<span class="caret"></span>' +
215
+ '</button>' +
216
+ '<div class="dropdown-menu open">' +
217
+ header +
218
+ searchbox +
219
+ actionsbox +
220
+ '<ul class="dropdown-menu inner selectpicker" role="menu">' +
221
+ '</ul>' +
222
+ '</div>' +
223
+ '</div>';
224
+
225
+ return $(drop);
226
+ },
227
+
228
+ createView: function () {
229
+ var $drop = this.createDropdown();
230
+ var $li = this.createLi();
231
+ $drop.find('ul').append($li);
232
+ return $drop;
233
+ },
234
+
235
+ reloadLi: function () {
236
+ //Remove all children.
237
+ this.destroyLi();
238
+ //Re build
239
+ var $li = this.createLi();
240
+ this.$menu.find('ul').append($li);
241
+ },
242
+
243
+ destroyLi: function () {
244
+ this.$menu.find('li').remove();
245
+ },
246
+
247
+ createLi: function () {
248
+ var that = this,
249
+ _li = [],
250
+ optID = 0;
251
+
252
+ // Helper functions
253
+ /**
254
+ * @param content
255
+ * @param [index]
256
+ * @param [classes]
257
+ * @returns {string}
258
+ */
259
+ var generateLI = function (content, index, classes) {
260
+ return '<li' +
261
+ (typeof classes !== 'undefined' ? ' class="' + classes + '"' : '') +
262
+ (typeof index !== 'undefined' | null === index ? ' data-original-index="' + index + '"' : '') +
263
+ '>' + content + '</li>';
264
+ };
265
+
266
+ /**
267
+ * @param text
268
+ * @param [classes]
269
+ * @param [inline]
270
+ * @param [optgroup]
271
+ * @returns {string}
272
+ */
273
+ var generateA = function (text, classes, inline, optgroup) {
274
+ var normText = normalizeToBase(htmlEscape(text));
275
+ return '<a tabindex="0"' +
276
+ (typeof classes !== 'undefined' ? ' class="' + classes + '"' : '') +
277
+ (typeof inline !== 'undefined' ? ' style="' + inline + '"' : '') +
278
+ (typeof optgroup !== 'undefined' ? 'data-optgroup="' + optgroup + '"' : '') +
279
+ ' data-normalized-text="' + normText + '"' +
280
+ '>' + text +
281
+ '<span class="' + that.options.iconBase + ' ' + that.options.tickIcon + ' check-mark"></span>' +
282
+ '</a>';
283
+ };
284
+
285
+ this.$element.find('option').each(function () {
286
+ var $this = $(this);
287
+
288
+ // Get the class and text for the option
289
+ var optionClass = $this.attr('class') || '',
290
+ inline = $this.attr('style'),
291
+ text = $this.data('content') ? $this.data('content') : $this.html(),
292
+ subtext = typeof $this.data('subtext') !== 'undefined' ? '<small class="muted text-muted">' + $this.data('subtext') + '</small>' : '',
293
+ icon = typeof $this.data('icon') !== 'undefined' ? '<span class="' + that.options.iconBase + ' ' + $this.data('icon') + '"></span> ' : '',
294
+ isDisabled = $this.is(':disabled') || $this.parent().is(':disabled'),
295
+ index = $this[0].index;
296
+ if (icon !== '' && isDisabled) {
297
+ icon = '<span>' + icon + '</span>';
298
+ }
299
+
300
+ if (!$this.data('content')) {
301
+ // Prepend any icon and append any subtext to the main text.
302
+ text = icon + '<span class="text">' + text + subtext + '</span>';
303
+ }
304
+
305
+ if (that.options.hideDisabled && isDisabled) {
306
+ return;
307
+ }
308
+
309
+ if ($this.parent().is('optgroup') && $this.data('divider') !== true) {
310
+ if ($this.index() === 0) { // Is it the first option of the optgroup?
311
+ optID += 1;
312
+
313
+ // Get the opt group label
314
+ var label = $this.parent().attr('label');
315
+ var labelSubtext = typeof $this.parent().data('subtext') !== 'undefined' ? '<small class="muted text-muted">' + $this.parent().data('subtext') + '</small>' : '';
316
+ var labelIcon = $this.parent().data('icon') ? '<span class="' + that.options.iconBase + ' ' + $this.parent().data('icon') + '"></span> ' : '';
317
+ label = labelIcon + '<span class="text">' + label + labelSubtext + '</span>';
318
+
319
+ if (index !== 0 && _li.length > 0) { // Is it NOT the first option of the select && are there elements in the dropdown?
320
+ _li.push(generateLI('', null, 'divider'));
321
+ }
322
+
323
+ _li.push(generateLI(label, null, 'dropdown-header'));
324
+ }
325
+
326
+ _li.push(generateLI(generateA(text, 'opt ' + optionClass, inline, optID), index));
327
+ } else if ($this.data('divider') === true) {
328
+ _li.push(generateLI('', index, 'divider'));
329
+ } else if ($this.data('hidden') === true) {
330
+ _li.push(generateLI(generateA(text, optionClass, inline), index, 'hide is-hidden'));
331
+ } else {
332
+ _li.push(generateLI(generateA(text, optionClass, inline), index));
333
+ }
334
+ });
335
+
336
+ //If we are not multiple, we don't have a selected item, and we don't have a title, select the first element so something is set in the button
337
+ if (!this.multiple && this.$element.find('option:selected').length === 0 && !this.options.title) {
338
+ this.$element.find('option').eq(0).prop('selected', true).attr('selected', 'selected');
339
+ }
340
+
341
+ return $(_li.join(''));
342
+ },
343
+
344
+ findLis: function () {
345
+ if (this.$lis == null) this.$lis = this.$menu.find('li');
346
+ return this.$lis;
347
+ },
348
+
349
+ /**
350
+ * @param [updateLi] defaults to true
351
+ */
352
+ render: function (updateLi) {
353
+ var that = this;
354
+
355
+ //Update the LI to match the SELECT
356
+ if (updateLi !== false) {
357
+ this.$element.find('option').each(function (index) {
358
+ that.setDisabled(index, $(this).is(':disabled') || $(this).parent().is(':disabled'));
359
+ that.setSelected(index, $(this).is(':selected'));
360
+ });
361
+ }
362
+
363
+ this.tabIndex();
364
+ var notDisabled = this.options.hideDisabled ? ':not([disabled])' : '';
365
+ var selectedItems = this.$element.find('option:selected' + notDisabled).map(function () {
366
+ var $this = $(this);
367
+ var icon = $this.data('icon') && that.options.showIcon ? '<i class="' + that.options.iconBase + ' ' + $this.data('icon') + '"></i> ' : '';
368
+ var subtext;
369
+ if (that.options.showSubtext && $this.attr('data-subtext') && !that.multiple) {
370
+ subtext = ' <small class="muted text-muted">' + $this.data('subtext') + '</small>';
371
+ } else {
372
+ subtext = '';
373
+ }
374
+ if ($this.data('content') && that.options.showContent) {
375
+ return $this.data('content');
376
+ } else if (typeof $this.attr('title') !== 'undefined') {
377
+ return $this.attr('title');
378
+ } else {
379
+ return icon + $this.html() + subtext;
380
+ }
381
+ }).toArray();
382
+
383
+ //Fixes issue in IE10 occurring when no default option is selected and at least one option is disabled
384
+ //Convert all the values into a comma delimited string
385
+ var title = !this.multiple ? selectedItems[0] : selectedItems.join(this.options.multipleSeparator);
386
+
387
+ //If this is multi select, and the selectText type is count, the show 1 of 2 selected etc..
388
+ if (this.multiple && this.options.selectedTextFormat.indexOf('count') > -1) {
389
+ var max = this.options.selectedTextFormat.split('>');
390
+ if ((max.length > 1 && selectedItems.length > max[1]) || (max.length == 1 && selectedItems.length >= 2)) {
391
+ notDisabled = this.options.hideDisabled ? ', [disabled]' : '';
392
+ var totalCount = this.$element.find('option').not('[data-divider="true"], [data-hidden="true"]' + notDisabled).length,
393
+ tr8nText = (typeof this.options.countSelectedText === 'function') ? this.options.countSelectedText(selectedItems.length, totalCount) : this.options.countSelectedText;
394
+ title = tr8nText.replace('{0}', selectedItems.length.toString()).replace('{1}', totalCount.toString());
395
+ }
396
+ }
397
+
398
+ this.options.title = this.$element.attr('title');
399
+
400
+ if (this.options.selectedTextFormat == 'static') {
401
+ title = this.options.title;
402
+ }
403
+
404
+ //If we dont have a title, then use the default, or if nothing is set at all, use the not selected text
405
+ if (!title) {
406
+ title = typeof this.options.title !== 'undefined' ? this.options.title : this.options.noneSelectedText;
407
+ }
408
+
409
+ this.$button.attr('title', htmlEscape(title));
410
+ this.$newElement.find('.filter-option').html(title);
411
+ },
412
+
413
+ /**
414
+ * @param [style]
415
+ * @param [status]
416
+ */
417
+ setStyle: function (style, status) {
418
+ if (this.$element.attr('class')) {
419
+ this.$newElement.addClass(this.$element.attr('class').replace(/selectpicker|mobile-device|validate\[.*\]/gi, ''));
420
+ }
421
+
422
+ var buttonClass = style ? style : this.options.style;
423
+
424
+ if (status == 'add') {
425
+ this.$button.addClass(buttonClass);
426
+ } else if (status == 'remove') {
427
+ this.$button.removeClass(buttonClass);
428
+ } else {
429
+ this.$button.removeClass(this.options.style);
430
+ this.$button.addClass(buttonClass);
431
+ }
432
+ },
433
+
434
+ liHeight: function () {
435
+ if (this.options.size === false) return;
436
+
437
+ var $selectClone = this.$menu.parent().clone().find('> .dropdown-toggle').prop('autofocus', false).end().appendTo('body'),
438
+ $menuClone = $selectClone.addClass('open').find('> .dropdown-menu'),
439
+ liHeight = $menuClone.find('li').not('.divider').not('.dropdown-header').filter(':visible').children('a').outerHeight(),
440
+ headerHeight = this.options.header ? $menuClone.find('.popover-title').outerHeight() : 0,
441
+ searchHeight = this.options.liveSearch ? $menuClone.find('.bs-searchbox').outerHeight() : 0,
442
+ actionsHeight = this.options.actionsBox ? $menuClone.find('.bs-actionsbox').outerHeight() : 0;
443
+
444
+ $selectClone.remove();
445
+
446
+ this.$newElement
447
+ .data('liHeight', liHeight)
448
+ .data('headerHeight', headerHeight)
449
+ .data('searchHeight', searchHeight)
450
+ .data('actionsHeight', actionsHeight);
451
+ },
452
+
453
+ setSize: function () {
454
+ this.findLis();
455
+ var that = this,
456
+ menu = this.$menu,
457
+ menuInner = menu.find('.inner'),
458
+ selectHeight = this.$newElement.outerHeight(),
459
+ liHeight = this.$newElement.data('liHeight'),
460
+ headerHeight = this.$newElement.data('headerHeight'),
461
+ searchHeight = this.$newElement.data('searchHeight'),
462
+ actionsHeight = this.$newElement.data('actionsHeight'),
463
+ divHeight = this.$lis.filter('.divider').outerHeight(true),
464
+ menuPadding = parseInt(menu.css('padding-top')) +
465
+ parseInt(menu.css('padding-bottom')) +
466
+ parseInt(menu.css('border-top-width')) +
467
+ parseInt(menu.css('border-bottom-width')),
468
+ notDisabled = this.options.hideDisabled ? ', .disabled' : '',
469
+ $window = $(window),
470
+ menuExtras = menuPadding + parseInt(menu.css('margin-top')) + parseInt(menu.css('margin-bottom')) + 2,
471
+ menuHeight,
472
+ selectOffsetTop,
473
+ selectOffsetBot,
474
+ posVert = function () {
475
+ // JQuery defines a scrollTop function, but in pure JS it's a property
476
+ //noinspection JSValidateTypes
477
+ selectOffsetTop = that.$newElement.offset().top - $window.scrollTop();
478
+ selectOffsetBot = $window.height() - selectOffsetTop - selectHeight;
479
+ };
480
+ posVert();
481
+ if (this.options.header) menu.css('padding-top', 0);
482
+
483
+ if (this.options.size == 'auto') {
484
+ var getSize = function () {
485
+ var minHeight,
486
+ lisVis = that.$lis.not('.hide');
487
+
488
+ posVert();
489
+ menuHeight = selectOffsetBot - menuExtras;
490
+
491
+ if (that.options.dropupAuto) {
492
+ that.$newElement.toggleClass('dropup', (selectOffsetTop > selectOffsetBot) && ((menuHeight - menuExtras) < menu.height()));
493
+ }
494
+ if (that.$newElement.hasClass('dropup')) {
495
+ menuHeight = selectOffsetTop - menuExtras;
496
+ }
497
+
498
+ if ((lisVis.length + lisVis.filter('.dropdown-header').length) > 3) {
499
+ minHeight = liHeight * 3 + menuExtras - 2;
500
+ } else {
501
+ minHeight = 0;
502
+ }
503
+
504
+ menu.css({
505
+ 'max-height': menuHeight + 'px',
506
+ 'overflow': 'hidden',
507
+ 'min-height': minHeight + headerHeight + searchHeight + actionsHeight + 'px'
508
+ });
509
+ menuInner.css({
510
+ 'max-height': menuHeight - headerHeight - searchHeight - actionsHeight - menuPadding + 'px',
511
+ 'overflow-y': 'auto',
512
+ 'min-height': Math.max(minHeight - menuPadding, 0) + 'px'
513
+ });
514
+ };
515
+ getSize();
516
+ this.$searchbox.off('input.getSize propertychange.getSize').on('input.getSize propertychange.getSize', getSize);
517
+ $(window).off('resize.getSize').on('resize.getSize', getSize);
518
+ $(window).off('scroll.getSize').on('scroll.getSize', getSize);
519
+ } else if (this.options.size && this.options.size != 'auto' && menu.find('li' + notDisabled).length > this.options.size) {
520
+ var optIndex = this.$lis.not('.divider' + notDisabled).find(' > *').slice(0, this.options.size).last().parent().index();
521
+ var divLength = this.$lis.slice(0, optIndex + 1).filter('.divider').length;
522
+ menuHeight = liHeight * this.options.size + divLength * divHeight + menuPadding;
523
+ if (that.options.dropupAuto) {
524
+ //noinspection JSUnusedAssignment
525
+ this.$newElement.toggleClass('dropup', (selectOffsetTop > selectOffsetBot) && (menuHeight < menu.height()));
526
+ }
527
+ menu.css({'max-height': menuHeight + headerHeight + searchHeight + actionsHeight + 'px', 'overflow': 'hidden'});
528
+ menuInner.css({'max-height': menuHeight - menuPadding + 'px', 'overflow-y': 'auto'});
529
+ }
530
+ },
531
+
532
+ setWidth: function () {
533
+ if (this.options.width == 'auto') {
534
+ this.$menu.css('min-width', '0');
535
+
536
+ // Get correct width if element hidden
537
+ var selectClone = this.$newElement.clone().appendTo('body');
538
+ var ulWidth = selectClone.find('> .dropdown-menu').css('width');
539
+ var btnWidth = selectClone.css('width', 'auto').find('> button').css('width');
540
+ selectClone.remove();
541
+
542
+ // Set width to whatever's larger, button title or longest option
543
+ this.$newElement.css('width', Math.max(parseInt(ulWidth), parseInt(btnWidth)) + 'px');
544
+ } else if (this.options.width == 'fit') {
545
+ // Remove inline min-width so width can be changed from 'auto'
546
+ this.$menu.css('min-width', '');
547
+ this.$newElement.css('width', '').addClass('fit-width');
548
+ } else if (this.options.width) {
549
+ // Remove inline min-width so width can be changed from 'auto'
550
+ this.$menu.css('min-width', '');
551
+ this.$newElement.css('width', this.options.width);
552
+ } else {
553
+ // Remove inline min-width/width so width can be changed
554
+ this.$menu.css('min-width', '');
555
+ this.$newElement.css('width', '');
556
+ }
557
+ // Remove fit-width class if width is changed programmatically
558
+ if (this.$newElement.hasClass('fit-width') && this.options.width !== 'fit') {
559
+ this.$newElement.removeClass('fit-width');
560
+ }
561
+ },
562
+
563
+ selectPosition: function () {
564
+ var that = this,
565
+ drop = '<div />',
566
+ $drop = $(drop),
567
+ pos,
568
+ actualHeight,
569
+ getPlacement = function ($element) {
570
+ $drop.addClass($element.attr('class').replace(/form-control/gi, '')).toggleClass('dropup', $element.hasClass('dropup'));
571
+ pos = $element.offset();
572
+ actualHeight = $element.hasClass('dropup') ? 0 : $element[0].offsetHeight;
573
+ $drop.css({
574
+ 'top': pos.top + actualHeight,
575
+ 'left': pos.left,
576
+ 'width': $element[0].offsetWidth,
577
+ 'position': 'absolute'
578
+ });
579
+ };
580
+ this.$newElement.on('click', function () {
581
+ if (that.isDisabled()) {
582
+ return;
583
+ }
584
+ getPlacement($(this));
585
+ $drop.appendTo(that.options.container);
586
+ $drop.toggleClass('open', !$(this).hasClass('open'));
587
+ $drop.append(that.$menu);
588
+ });
589
+ $(window).resize(function () {
590
+ getPlacement(that.$newElement);
591
+ });
592
+ $(window).on('scroll', function () {
593
+ getPlacement(that.$newElement);
594
+ });
595
+ $('html').on('click', function (e) {
596
+ if ($(e.target).closest(that.$newElement).length < 1) {
597
+ $drop.removeClass('open');
598
+ }
599
+ });
600
+ },
601
+
602
+ setSelected: function (index, selected) {
603
+ this.findLis();
604
+ this.$lis.filter('[data-original-index="' + index + '"]').toggleClass('selected', selected);
605
+ },
606
+
607
+ setDisabled: function (index, disabled) {
608
+ this.findLis();
609
+ if (disabled) {
610
+ this.$lis.filter('[data-original-index="' + index + '"]').addClass('disabled').find('a').attr('href', '#').attr('tabindex', -1);
611
+ } else {
612
+ this.$lis.filter('[data-original-index="' + index + '"]').removeClass('disabled').find('a').removeAttr('href').attr('tabindex', 0);
613
+ }
614
+ },
615
+
616
+ isDisabled: function () {
617
+ return this.$element.is(':disabled');
618
+ },
619
+
620
+ checkDisabled: function () {
621
+ var that = this;
622
+
623
+ if (this.isDisabled()) {
624
+ this.$button.addClass('disabled').attr('tabindex', -1);
625
+ } else {
626
+ if (this.$button.hasClass('disabled')) {
627
+ this.$button.removeClass('disabled');
628
+ }
629
+
630
+ if (this.$button.attr('tabindex') == -1) {
631
+ if (!this.$element.data('tabindex')) this.$button.removeAttr('tabindex');
632
+ }
633
+ }
634
+
635
+ this.$button.click(function () {
636
+ return !that.isDisabled();
637
+ });
638
+ },
639
+
640
+ tabIndex: function () {
641
+ if (this.$element.is('[tabindex]')) {
642
+ this.$element.data('tabindex', this.$element.attr('tabindex'));
643
+ this.$button.attr('tabindex', this.$element.data('tabindex'));
644
+ }
645
+ },
646
+
647
+ clickListener: function () {
648
+ var that = this;
649
+
650
+ this.$newElement.on('touchstart.dropdown', '.dropdown-menu', function (e) {
651
+ e.stopPropagation();
652
+ });
653
+
654
+ this.$newElement.on('click', function () {
655
+ that.setSize();
656
+ if (!that.options.liveSearch && !that.multiple) {
657
+ setTimeout(function () {
658
+ that.$menu.find('.selected a').focus();
659
+ }, 10);
660
+ }
661
+ });
662
+
663
+ this.$menu.on('click', 'li a', function (e) {
664
+ var $this = $(this),
665
+ clickedIndex = $this.parent().data('originalIndex'),
666
+ prevValue = that.$element.val(),
667
+ prevIndex = that.$element.prop('selectedIndex');
668
+
669
+ // Don't close on multi choice menu
670
+ if (that.multiple) {
671
+ e.stopPropagation();
672
+ }
673
+
674
+ e.preventDefault();
675
+
676
+ //Don't run if we have been disabled
677
+ if (!that.isDisabled() && !$this.parent().hasClass('disabled')) {
678
+ var $options = that.$element.find('option'),
679
+ $option = $options.eq(clickedIndex),
680
+ state = $option.prop('selected'),
681
+ $optgroup = $option.parent('optgroup'),
682
+ maxOptions = that.options.maxOptions,
683
+ maxOptionsGrp = $optgroup.data('maxOptions') || false;
684
+
685
+ if (!that.multiple) { // Deselect all others if not multi select box
686
+ $options.prop('selected', false);
687
+ $option.prop('selected', true);
688
+ that.$menu.find('.selected').removeClass('selected');
689
+ that.setSelected(clickedIndex, true);
690
+ } else { // Toggle the one we have chosen if we are multi select.
691
+ $option.prop('selected', !state);
692
+ that.setSelected(clickedIndex, !state);
693
+ $this.blur();
694
+
695
+ if ((maxOptions !== false) || (maxOptionsGrp !== false)) {
696
+ var maxReached = maxOptions < $options.filter(':selected').length,
697
+ maxReachedGrp = maxOptionsGrp < $optgroup.find('option:selected').length;
698
+
699
+ if ((maxOptions && maxReached) || (maxOptionsGrp && maxReachedGrp)) {
700
+ if (maxOptions && maxOptions == 1) {
701
+ $options.prop('selected', false);
702
+ $option.prop('selected', true);
703
+ that.$menu.find('.selected').removeClass('selected');
704
+ that.setSelected(clickedIndex, true);
705
+ } else if (maxOptionsGrp && maxOptionsGrp == 1) {
706
+ $optgroup.find('option:selected').prop('selected', false);
707
+ $option.prop('selected', true);
708
+ var optgroupID = $this.data('optgroup');
709
+
710
+ that.$menu.find('.selected').has('a[data-optgroup="' + optgroupID + '"]').removeClass('selected');
711
+
712
+ that.setSelected(clickedIndex, true);
713
+ } else {
714
+ var maxOptionsArr = (typeof that.options.maxOptionsText === 'function') ?
715
+ that.options.maxOptionsText(maxOptions, maxOptionsGrp) : that.options.maxOptionsText,
716
+ maxTxt = maxOptionsArr[0].replace('{n}', maxOptions),
717
+ maxTxtGrp = maxOptionsArr[1].replace('{n}', maxOptionsGrp),
718
+ $notify = $('<div class="notify"></div>');
719
+ // If {var} is set in array, replace it
720
+ /** @deprecated */
721
+ if (maxOptionsArr[2]) {
722
+ maxTxt = maxTxt.replace('{var}', maxOptionsArr[2][maxOptions > 1 ? 0 : 1]);
723
+ maxTxtGrp = maxTxtGrp.replace('{var}', maxOptionsArr[2][maxOptionsGrp > 1 ? 0 : 1]);
724
+ }
725
+
726
+ $option.prop('selected', false);
727
+
728
+ that.$menu.append($notify);
729
+
730
+ if (maxOptions && maxReached) {
731
+ $notify.append($('<div>' + maxTxt + '</div>'));
732
+ that.$element.trigger('maxReached.bs.select');
733
+ }
734
+
735
+ if (maxOptionsGrp && maxReachedGrp) {
736
+ $notify.append($('<div>' + maxTxtGrp + '</div>'));
737
+ that.$element.trigger('maxReachedGrp.bs.select');
738
+ }
739
+
740
+ setTimeout(function () {
741
+ that.setSelected(clickedIndex, false);
742
+ }, 10);
743
+
744
+ $notify.delay(750).fadeOut(300, function () {
745
+ $(this).remove();
746
+ });
747
+ }
748
+ }
749
+ }
750
+ }
751
+
752
+ if (!that.multiple) {
753
+ that.$button.focus();
754
+ } else if (that.options.liveSearch) {
755
+ that.$searchbox.focus();
756
+ }
757
+
758
+ // Trigger select 'change'
759
+ if ((prevValue != that.$element.val() && that.multiple) || (prevIndex != that.$element.prop('selectedIndex') && !that.multiple)) {
760
+ that.$element.change();
761
+ }
762
+ }
763
+ });
764
+
765
+ this.$menu.on('click', 'li.disabled a, .popover-title, .popover-title :not(.close)', function (e) {
766
+ if (e.target == this) {
767
+ e.preventDefault();
768
+ e.stopPropagation();
769
+ if (!that.options.liveSearch) {
770
+ that.$button.focus();
771
+ } else {
772
+ that.$searchbox.focus();
773
+ }
774
+ }
775
+ });
776
+
777
+ this.$menu.on('click', 'li.divider, li.dropdown-header', function (e) {
778
+ e.preventDefault();
779
+ e.stopPropagation();
780
+ if (!that.options.liveSearch) {
781
+ that.$button.focus();
782
+ } else {
783
+ that.$searchbox.focus();
784
+ }
785
+ });
786
+
787
+ this.$menu.on('click', '.popover-title .close', function () {
788
+ that.$button.focus();
789
+ });
790
+
791
+ this.$searchbox.on('click', function (e) {
792
+ e.stopPropagation();
793
+ });
794
+
795
+
796
+ this.$menu.on('click', '.actions-btn', function (e) {
797
+ if (that.options.liveSearch) {
798
+ that.$searchbox.focus();
799
+ } else {
800
+ that.$button.focus();
801
+ }
802
+
803
+ e.preventDefault();
804
+ e.stopPropagation();
805
+
806
+ if ($(this).is('.bs-select-all')) {
807
+ that.selectAll();
808
+ } else {
809
+ that.deselectAll();
810
+ }
811
+ that.$element.change();
812
+ });
813
+
814
+ this.$element.change(function () {
815
+ that.render(false);
816
+ });
817
+ },
818
+
819
+ liveSearchListener: function () {
820
+ var that = this,
821
+ no_results = $('<li class="no-results"></li>');
822
+
823
+ this.$newElement.on('click.dropdown.data-api touchstart.dropdown.data-api', function () {
824
+ that.$menu.find('.active').removeClass('active');
825
+ if (!!that.$searchbox.val()) {
826
+ that.$searchbox.val('');
827
+ that.$lis.not('.is-hidden').removeClass('hide');
828
+ if (!!no_results.parent().length) no_results.remove();
829
+ }
830
+ if (!that.multiple) that.$menu.find('.selected').addClass('active');
831
+ setTimeout(function () {
832
+ that.$searchbox.focus();
833
+ }, 10);
834
+ });
835
+
836
+ this.$searchbox.on('click.dropdown.data-api focus.dropdown.data-api touchend.dropdown.data-api', function (e) {
837
+ e.stopPropagation();
838
+ });
839
+
840
+ this.$searchbox.on('input propertychange', function () {
841
+ if (that.$searchbox.val()) {
842
+
843
+ if (that.options.searchAccentInsensitive) {
844
+ that.$lis.not('.is-hidden').removeClass('hide').find('a').not(':aicontains(' + normalizeToBase(that.$searchbox.val()) + ')').parent().addClass('hide');
845
+ } else {
846
+ that.$lis.not('.is-hidden').removeClass('hide').find('a').not(':icontains(' + that.$searchbox.val() + ')').parent().addClass('hide');
847
+ }
848
+
849
+ if (!that.$menu.find('li').filter(':visible:not(.no-results)').length) {
850
+ if (!!no_results.parent().length) no_results.remove();
851
+ no_results.html(that.options.noneResultsText + ' "' + htmlEscape(that.$searchbox.val()) + '"').show();
852
+ that.$menu.find('li').last().after(no_results);
853
+ } else if (!!no_results.parent().length) {
854
+ no_results.remove();
855
+ }
856
+
857
+ } else {
858
+ that.$lis.not('.is-hidden').removeClass('hide');
859
+ if (!!no_results.parent().length) no_results.remove();
860
+ }
861
+
862
+ that.$menu.find('li.active').removeClass('active');
863
+ that.$menu.find('li').filter(':visible:not(.divider)').eq(0).addClass('active').find('a').focus();
864
+ $(this).focus();
865
+ });
866
+ },
867
+
868
+ val: function (value) {
869
+ if (typeof value !== 'undefined') {
870
+ this.$element.val(value);
871
+ this.render();
872
+
873
+ return this.$element;
874
+ } else {
875
+ return this.$element.val();
876
+ }
877
+ },
878
+
879
+ selectAll: function () {
880
+ this.findLis();
881
+ this.$lis.not('.divider').not('.disabled').not('.selected').filter(':visible').find('a').click();
882
+ },
883
+
884
+ deselectAll: function () {
885
+ this.findLis();
886
+ this.$lis.not('.divider').not('.disabled').filter('.selected').filter(':visible').find('a').click();
887
+ },
888
+
889
+ keydown: function (e) {
890
+ var $this = $(this),
891
+ $parent = ($this.is('input')) ? $this.parent().parent() : $this.parent(),
892
+ $items,
893
+ that = $parent.data('this'),
894
+ index,
895
+ next,
896
+ first,
897
+ last,
898
+ prev,
899
+ nextPrev,
900
+ prevIndex,
901
+ isActive,
902
+ keyCodeMap = {
903
+ 32: ' ',
904
+ 48: '0',
905
+ 49: '1',
906
+ 50: '2',
907
+ 51: '3',
908
+ 52: '4',
909
+ 53: '5',
910
+ 54: '6',
911
+ 55: '7',
912
+ 56: '8',
913
+ 57: '9',
914
+ 59: ';',
915
+ 65: 'a',
916
+ 66: 'b',
917
+ 67: 'c',
918
+ 68: 'd',
919
+ 69: 'e',
920
+ 70: 'f',
921
+ 71: 'g',
922
+ 72: 'h',
923
+ 73: 'i',
924
+ 74: 'j',
925
+ 75: 'k',
926
+ 76: 'l',
927
+ 77: 'm',
928
+ 78: 'n',
929
+ 79: 'o',
930
+ 80: 'p',
931
+ 81: 'q',
932
+ 82: 'r',
933
+ 83: 's',
934
+ 84: 't',
935
+ 85: 'u',
936
+ 86: 'v',
937
+ 87: 'w',
938
+ 88: 'x',
939
+ 89: 'y',
940
+ 90: 'z',
941
+ 96: '0',
942
+ 97: '1',
943
+ 98: '2',
944
+ 99: '3',
945
+ 100: '4',
946
+ 101: '5',
947
+ 102: '6',
948
+ 103: '7',
949
+ 104: '8',
950
+ 105: '9'
951
+ };
952
+
953
+ if (that.options.liveSearch) $parent = $this.parent().parent();
954
+
955
+ if (that.options.container) $parent = that.$menu;
956
+
957
+ $items = $('[role=menu] li a', $parent);
958
+
959
+ isActive = that.$menu.parent().hasClass('open');
960
+
961
+ if (!isActive && /([0-9]|[A-z])/.test(String.fromCharCode(e.keyCode))) {
962
+ if (!that.options.container) {
963
+ that.setSize();
964
+ that.$menu.parent().addClass('open');
965
+ isActive = true;
966
+ } else {
967
+ that.$newElement.trigger('click');
968
+ }
969
+ that.$searchbox.focus();
970
+ }
971
+
972
+ if (that.options.liveSearch) {
973
+ if (/(^9$|27)/.test(e.keyCode.toString(10)) && isActive && that.$menu.find('.active').length === 0) {
974
+ e.preventDefault();
975
+ that.$menu.parent().removeClass('open');
976
+ that.$button.focus();
977
+ }
978
+ $items = $('[role=menu] li:not(.divider):not(.dropdown-header):visible', $parent);
979
+ if (!$this.val() && !/(38|40)/.test(e.keyCode.toString(10))) {
980
+ if ($items.filter('.active').length === 0) {
981
+ if (that.options.searchAccentInsensitive) {
982
+ $items = that.$newElement.find('li').filter(':aicontains(' + normalizeToBase(keyCodeMap[e.keyCode]) + ')');
983
+ } else {
984
+ $items = that.$newElement.find('li').filter(':icontains(' + keyCodeMap[e.keyCode] + ')');
985
+ }
986
+ }
987
+ }
988
+ }
989
+
990
+ if (!$items.length) return;
991
+
992
+ if (/(38|40)/.test(e.keyCode.toString(10))) {
993
+ index = $items.index($items.filter(':focus'));
994
+ first = $items.parent(':not(.disabled):visible').first().index();
995
+ last = $items.parent(':not(.disabled):visible').last().index();
996
+ next = $items.eq(index).parent().nextAll(':not(.disabled):visible').eq(0).index();
997
+ prev = $items.eq(index).parent().prevAll(':not(.disabled):visible').eq(0).index();
998
+ nextPrev = $items.eq(next).parent().prevAll(':not(.disabled):visible').eq(0).index();
999
+
1000
+ if (that.options.liveSearch) {
1001
+ $items.each(function (i) {
1002
+ if ($(this).is(':not(.disabled)')) {
1003
+ $(this).data('index', i);
1004
+ }
1005
+ });
1006
+ index = $items.index($items.filter('.active'));
1007
+ first = $items.filter(':not(.disabled):visible').first().data('index');
1008
+ last = $items.filter(':not(.disabled):visible').last().data('index');
1009
+ next = $items.eq(index).nextAll(':not(.disabled):visible').eq(0).data('index');
1010
+ prev = $items.eq(index).prevAll(':not(.disabled):visible').eq(0).data('index');
1011
+ nextPrev = $items.eq(next).prevAll(':not(.disabled):visible').eq(0).data('index');
1012
+ }
1013
+
1014
+ prevIndex = $this.data('prevIndex');
1015
+
1016
+ if (e.keyCode == 38) {
1017
+ if (that.options.liveSearch) index -= 1;
1018
+ if (index != nextPrev && index > prev) index = prev;
1019
+ if (index < first) index = first;
1020
+ if (index == prevIndex) index = last;
1021
+ }
1022
+
1023
+ if (e.keyCode == 40) {
1024
+ if (that.options.liveSearch) index += 1;
1025
+ if (index == -1) index = 0;
1026
+ if (index != nextPrev && index < next) index = next;
1027
+ if (index > last) index = last;
1028
+ if (index == prevIndex) index = first;
1029
+ }
1030
+
1031
+ $this.data('prevIndex', index);
1032
+
1033
+ if (!that.options.liveSearch) {
1034
+ $items.eq(index).focus();
1035
+ } else {
1036
+ e.preventDefault();
1037
+ if (!$this.is('.dropdown-toggle')) {
1038
+ $items.removeClass('active');
1039
+ $items.eq(index).addClass('active').find('a').focus();
1040
+ $this.focus();
1041
+ }
1042
+ }
1043
+
1044
+ } else if (!$this.is('input')) {
1045
+ var keyIndex = [],
1046
+ count,
1047
+ prevKey;
1048
+
1049
+ $items.each(function () {
1050
+ if ($(this).parent().is(':not(.disabled)')) {
1051
+ if ($.trim($(this).text().toLowerCase()).substring(0, 1) == keyCodeMap[e.keyCode]) {
1052
+ keyIndex.push($(this).parent().index());
1053
+ }
1054
+ }
1055
+ });
1056
+
1057
+ count = $(document).data('keycount');
1058
+ count++;
1059
+ $(document).data('keycount', count);
1060
+
1061
+ prevKey = $.trim($(':focus').text().toLowerCase()).substring(0, 1);
1062
+
1063
+ if (prevKey != keyCodeMap[e.keyCode]) {
1064
+ count = 1;
1065
+ $(document).data('keycount', count);
1066
+ } else if (count >= keyIndex.length) {
1067
+ $(document).data('keycount', 0);
1068
+ if (count > keyIndex.length) count = 1;
1069
+ }
1070
+
1071
+ $items.eq(keyIndex[count - 1]).focus();
1072
+ }
1073
+
1074
+ // Select focused option if "Enter", "Spacebar" or "Tab" (when selectOnTab is true) are pressed inside the menu.
1075
+ if ((/(13|32)/.test(e.keyCode.toString(10)) || (/(^9$)/.test(e.keyCode.toString(10)) && that.options.selectOnTab)) && isActive) {
1076
+ if (!/(32)/.test(e.keyCode.toString(10))) e.preventDefault();
1077
+ if (!that.options.liveSearch) {
1078
+ $(':focus').click();
1079
+ } else if (!/(32)/.test(e.keyCode.toString(10))) {
1080
+ that.$menu.find('.active a').click();
1081
+ $this.focus();
1082
+ }
1083
+ $(document).data('keycount', 0);
1084
+ }
1085
+
1086
+ if ((/(^9$|27)/.test(e.keyCode.toString(10)) && isActive && (that.multiple || that.options.liveSearch)) || (/(27)/.test(e.keyCode.toString(10)) && !isActive)) {
1087
+ that.$menu.parent().removeClass('open');
1088
+ that.$button.focus();
1089
+ }
1090
+ },
1091
+
1092
+ mobile: function () {
1093
+ this.$element.addClass('mobile-device').appendTo(this.$newElement);
1094
+ if (this.options.container) this.$menu.hide();
1095
+ },
1096
+
1097
+ refresh: function () {
1098
+ this.$lis = null;
1099
+ this.reloadLi();
1100
+ this.render();
1101
+ this.setWidth();
1102
+ this.setStyle();
1103
+ this.checkDisabled();
1104
+ this.liHeight();
1105
+ },
1106
+
1107
+ update: function () {
1108
+ this.reloadLi();
1109
+ this.setWidth();
1110
+ this.setStyle();
1111
+ this.checkDisabled();
1112
+ this.liHeight();
1113
+ },
1114
+
1115
+ hide: function () {
1116
+ this.$newElement.hide();
1117
+ },
1118
+
1119
+ show: function () {
1120
+ this.$newElement.show();
1121
+ },
1122
+
1123
+ remove: function () {
1124
+ this.$newElement.remove();
1125
+ this.$element.remove();
1126
+ }
1127
+ };
1128
+
1129
+ // SELECTPICKER PLUGIN DEFINITION
1130
+ // ==============================
1131
+ function Plugin(option, event) {
1132
+ // get the args of the outer function..
1133
+ var args = arguments;
1134
+ // The arguments of the function are explicitly re-defined from the argument list, because the shift causes them
1135
+ // to get lost
1136
+ //noinspection JSDuplicatedDeclaration
1137
+ var _option = option,
1138
+ option = args[0],
1139
+ event = args[1];
1140
+ [].shift.apply(args);
1141
+
1142
+ // This fixes a bug in the js implementation on android 2.3 #715
1143
+ if (typeof option == 'undefined') {
1144
+ option = _option;
1145
+ }
1146
+
1147
+ var value;
1148
+ var chain = this.each(function () {
1149
+ var $this = $(this);
1150
+ if ($this.is('select')) {
1151
+ var data = $this.data('selectpicker'),
1152
+ options = typeof option == 'object' && option;
1153
+
1154
+ if (!data) {
1155
+ var config = $.extend({}, Selectpicker.DEFAULTS, $.fn.selectpicker.defaults || {}, $this.data(), options);
1156
+ $this.data('selectpicker', (data = new Selectpicker(this, config, event)));
1157
+ } else if (options) {
1158
+ for (var i in options) {
1159
+ if (options.hasOwnProperty(i)) {
1160
+ data.options[i] = options[i];
1161
+ }
1162
+ }
1163
+ }
1164
+
1165
+ if (typeof option == 'string') {
1166
+ if (data[option] instanceof Function) {
1167
+ value = data[option].apply(data, args);
1168
+ } else {
1169
+ value = data.options[option];
1170
+ }
1171
+ }
1172
+ }
1173
+ });
1174
+
1175
+ if (typeof value !== 'undefined') {
1176
+ //noinspection JSUnusedAssignment
1177
+ return value;
1178
+ } else {
1179
+ return chain;
1180
+ }
1181
+ }
1182
+
1183
+ var old = $.fn.selectpicker;
1184
+ $.fn.selectpicker = Plugin;
1185
+ $.fn.selectpicker.Constructor = Selectpicker;
1186
+
1187
+ // SELECTPICKER NO CONFLICT
1188
+ // ========================
1189
+ $.fn.selectpicker.noConflict = function () {
1190
+ $.fn.selectpicker = old;
1191
+ return this;
1192
+ };
1193
+
1194
+ $(document)
1195
+ .data('keycount', 0)
1196
+ .on('keydown', '.bootstrap-select [data-toggle=dropdown], .bootstrap-select [role=menu], .bs-searchbox input', Selectpicker.prototype.keydown)
1197
+ .on('focusin.modal', '.bootstrap-select [data-toggle=dropdown], .bootstrap-select [role=menu], .bs-searchbox input', function (e) {
1198
+ e.stopPropagation();
1199
+ });
1200
+
1201
+ // SELECTPICKER DATA-API
1202
+ // =====================
1203
+ $(window).on('load.bs.select.data-api', function () {
1204
+ $('.selectpicker').each(function () {
1205
+ var $selectpicker = $(this);
1206
+ Plugin.call($selectpicker, $selectpicker.data());
1207
+ })
1208
+ });
1209
+ })(jQuery);
js/script.timeline-express.js CHANGED
@@ -30,6 +30,7 @@ jQuery(document).ready(function(){
30
  var $masonryContainer = jQuery( '#cd-timeline' );
31
  $masonryContainer.imagesLoaded( function() {
32
  $masonryContainer.masonry({itemSelector : '.cd-timeline-block',});
 
33
  });
34
 
35
  var entry_content_width = jQuery( '#cd-timeline' ).parents('div').css('width');
30
  var $masonryContainer = jQuery( '#cd-timeline' );
31
  $masonryContainer.imagesLoaded( function() {
32
  $masonryContainer.masonry({itemSelector : '.cd-timeline-block',});
33
+ jQuery( '#cd-timeline' ).fadeTo( 600 , 1 );
34
  });
35
 
36
  var entry_content_width = jQuery( '#cd-timeline' ).parents('div').css('width');
js/script.timeline-express.min.js CHANGED
@@ -1,2 +1,2 @@
1
  /* Timeline Express by Evan Herman - http://www.Evan-Herman.com */
2
- jQuery(document).ready(function(){jQuery("html").addClass("cssanimations csscolumns cssgradients cssreflections csstransforms csstransforms3d csstransitions");var e=jQuery(".cd-timeline-block");e.each(function(){if(jQuery(this).offset().top>jQuery(window).scrollTop()+jQuery(window).height()*.75){jQuery(this).find(".cd-timeline-img, .cd-timeline-content").addClass("is-hidden")}});jQuery(window).on("scroll",function(){e.each(function(){if(jQuery(this).offset().top<=jQuery(window).scrollTop()+jQuery(window).height()*.75&&jQuery(this).find(".cd-timeline-img").hasClass("is-hidden")){jQuery(this).find(".cd-timeline-img, .cd-timeline-content").removeClass("is-hidden").addClass("bounce-in")}})});var t=jQuery("#cd-timeline");t.imagesLoaded(function(){t.masonry({itemSelector:".cd-timeline-block"})});var n=jQuery("#cd-timeline").parents("div").css("width");var r=jQuery(window).width()+parseInt(17);var i=jQuery(".cd-timeline-content").css("width");if(r<=822&&n.replace("px","")<="475"&&n.replace("px","")<="800"){jQuery(".cd-timeline-content").removeClass("timeline-width34")}else if(r>=822&&n.replace("px","")>="475"&&n.replace("px","")<="800"){jQuery(".cd-timeline-content").addClass("timeline-width34")}if(r<=822&&n.replace("px","")<="475"){jQuery(".cd-timeline-content").removeClass("timeline-width30")}else if(r>=822&&n.replace("px","")<="475"){jQuery(".cd-timeline-content").addClass("timeline-width30")}if(i.replace("px","")<262){jQuery(".cd-timeline-content").find(".timeline-date").addClass("timeline-date-left")}jQuery(window).resize(function(){var e=jQuery(window).width()+parseInt(17);var t=jQuery("#cd-timeline").parents("div").css("width");var n=jQuery(".cd-timeline-content").css("width");if(e>="822"&&t.replace("px","")<="475"){jQuery(".cd-timeline-content").addClass("timeline-width30")}if(e>="822"&&n.replace("px","")<262){jQuery(".cd-timeline-content").find(".timeline-date").addClass("timeline-date-left")}else{jQuery(".cd-timeline-content").find(".timeline-date").removeClass("timeline-date-left")}if(e<"822"){jQuery("#cd-timeline").masonry("reload");jQuery(".cd-timeline-content").removeClass("timeline-width30").removeClass("timeline-width34")}})})
1
  /* Timeline Express by Evan Herman - http://www.Evan-Herman.com */
2
+ jQuery(document).ready(function(){jQuery("html").addClass("cssanimations csscolumns cssgradients cssreflections csstransforms csstransforms3d csstransitions");var e=jQuery(".cd-timeline-block");e.each(function(){if(jQuery(this).offset().top>jQuery(window).scrollTop()+jQuery(window).height()*.75){jQuery(this).find(".cd-timeline-img, .cd-timeline-content").addClass("is-hidden")}});jQuery(window).on("scroll",function(){e.each(function(){if(jQuery(this).offset().top<=jQuery(window).scrollTop()+jQuery(window).height()*.75&&jQuery(this).find(".cd-timeline-img").hasClass("is-hidden")){jQuery(this).find(".cd-timeline-img, .cd-timeline-content").removeClass("is-hidden").addClass("bounce-in")}})});var t=jQuery("#cd-timeline");t.imagesLoaded(function(){t.masonry({itemSelector:".cd-timeline-block"});jQuery("#cd-timeline").fadeTo(600,1)});var n=jQuery("#cd-timeline").parents("div").css("width");var r=jQuery(window).width()+parseInt(17);var i=jQuery(".cd-timeline-content").css("width");if(r<=822&&n.replace("px","")<="475"&&n.replace("px","")<="800"){jQuery(".cd-timeline-content").removeClass("timeline-width34")}else if(r>=822&&n.replace("px","")>="475"&&n.replace("px","")<="800"){jQuery(".cd-timeline-content").addClass("timeline-width34")}if(r<=822&&n.replace("px","")<="475"){jQuery(".cd-timeline-content").removeClass("timeline-width30")}else if(r>=822&&n.replace("px","")<="475"){jQuery(".cd-timeline-content").addClass("timeline-width30")}if(i.replace("px","")<262){jQuery(".cd-timeline-content").find(".timeline-date").addClass("timeline-date-left")}jQuery(window).resize(function(){var e=jQuery(window).width()+parseInt(17);var t=jQuery("#cd-timeline").parents("div").css("width");var n=jQuery(".cd-timeline-content").css("width");if(e>="822"&&t.replace("px","")<="475"){jQuery(".cd-timeline-content").addClass("timeline-width30")}if(e>="822"&&n.replace("px","")<262){jQuery(".cd-timeline-content").find(".timeline-date").addClass("timeline-date-left")}else{jQuery(".cd-timeline-content").find(".timeline-date").removeClass("timeline-date-left")}if(e<"822"){jQuery("#cd-timeline").masonry("reload");jQuery(".cd-timeline-content").removeClass("timeline-width30").removeClass("timeline-width34")}})})
readme.txt CHANGED
@@ -4,7 +4,7 @@ Donate link: http://www.evan-herman.com/contact/?contact-reason=I%20want%20to%20
4
  Tags: vertical, timeline, animated, css3, animations, evan, herman, evan herman, easy, time, line, font awesome, font, awesome, announcements, notifications, simple, events, calendar, scroll, triggered, scrolling, animated, fade, in, fade in
5
  Requires at least: 3.9
6
  Tested up to: 4.1
7
- Stable tag: 1.1.5.6
8
  License: GPLv2 or later
9
 
10
  Timeline express allows you to create a beautiful vertical animated and responsive timeline of posts , without writing a single line of code. Sweet!
@@ -301,6 +301,10 @@ add_filter( 'timeline_express_custom_template' , 'custom_timeline_express_templa
301
 
302
  == Changelog ==
303
 
 
 
 
 
304
  = 1.1.5.6 - February 5th, 2015 =
305
  * Fixed: Issue with the excerpt being truncated and throwing off entire timeline layout (issue occured when truncate happened mid html tag , which left a tag open)
306
  * Fixed: Wrapped missing text in text domain
@@ -410,6 +414,11 @@ add_filter( 'timeline_express_custom_template' , 'custom_timeline_express_templa
410
 
411
  == Upgrade Notice ==
412
 
 
 
 
 
 
413
  = 1.1.5.6 - February 5th, 2015 =
414
  * Fixed: Issue with the excerpt being truncated and throwing off entire timeline layout (issue occured when truncate happened mid html tag , which left a tag open)
415
  * Fixed: Wrapped missing text in text domain
4
  Tags: vertical, timeline, animated, css3, animations, evan, herman, evan herman, easy, time, line, font awesome, font, awesome, announcements, notifications, simple, events, calendar, scroll, triggered, scrolling, animated, fade, in, fade in
5
  Requires at least: 3.9
6
  Tested up to: 4.1
7
+ Stable tag: 1.1.5.7
8
  License: GPLv2 or later
9
 
10
  Timeline express allows you to create a beautiful vertical animated and responsive timeline of posts , without writing a single line of code. Sweet!
301
 
302
  == Changelog ==
303
 
304
+ = 1.1.5.7 - February 5th, 2015 =
305
+ * Enhancement: Added a dropdown to select the font awesome icon
306
+ * Enhancement: Fadded in the timeline after everything has initialized, to prevent seeing a messed up Timeline layout
307
+
308
  = 1.1.5.6 - February 5th, 2015 =
309
  * Fixed: Issue with the excerpt being truncated and throwing off entire timeline layout (issue occured when truncate happened mid html tag , which left a tag open)
310
  * Fixed: Wrapped missing text in text domain
414
 
415
  == Upgrade Notice ==
416
 
417
+ = 1.1.5.7 - February 5th, 2015 =
418
+ * Message From The Author: Sorry for multiple updates on the same day. I was feeling ambitious and rolled out one patch to fix an issue and another with some new features. Enjoy :)
419
+ * Enhancement: Added a dropdown to select the font awesome icon
420
+ * Enhancement: Fadded in the timeline after everything has initialized, to prevent seeing a messed up Timeline layout
421
+
422
  = 1.1.5.6 - February 5th, 2015 =
423
  * Fixed: Issue with the excerpt being truncated and throwing off entire timeline layout (issue occured when truncate happened mid html tag , which left a tag open)
424
  * Fixed: Wrapped missing text in text domain
timeline-express.php CHANGED
@@ -4,7 +4,7 @@
4
  Plugin Name: Timeline Express
5
  Plugin URI: http://www.evan-herman.com
6
  Description: Create a beautiful vertical, CSS3 animated and responsive timeline in minutes flat without writing code.
7
- Version: 1.1.5.6
8
  Author: Evan Herman
9
  Author URI: http://www.evan-herman.com
10
  License: GPL2
@@ -28,7 +28,7 @@ Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA
28
  #_________________________________________________ CONSTANTS
29
 
30
  /** Configuration **/
31
- if(!defined('TIMELINE_EXPRESS_VERSION_CURRENT')) define('TIMELINE_EXPRESS_VERSION_CURRENT', '1.1.5.6');
32
  if(!defined('TIMELINE_EXPRESS_PATH')) define('TIMELINE_EXPRESS_PATH', plugin_dir_path( __FILE__ ));
33
  if(!defined('TIMELINE_EXPRESS_URL')) define('TIMELINE_EXPRESS_URL', plugins_url('timeline-express/'));
34
  if(!defined('TIMELINE_EXPRESS_URL_WP')) define('TIMELINE_EXPRESS_URL_WP', get_bloginfo('url'));
4
  Plugin Name: Timeline Express
5
  Plugin URI: http://www.evan-herman.com
6
  Description: Create a beautiful vertical, CSS3 animated and responsive timeline in minutes flat without writing code.
7
+ Version: 1.1.5.7
8
  Author: Evan Herman
9
  Author URI: http://www.evan-herman.com
10
  License: GPL2
28
  #_________________________________________________ CONSTANTS
29
 
30
  /** Configuration **/
31
+ if(!defined('TIMELINE_EXPRESS_VERSION_CURRENT')) define('TIMELINE_EXPRESS_VERSION_CURRENT', '1.1.5.7');
32
  if(!defined('TIMELINE_EXPRESS_PATH')) define('TIMELINE_EXPRESS_PATH', plugin_dir_path( __FILE__ ));
33
  if(!defined('TIMELINE_EXPRESS_URL')) define('TIMELINE_EXPRESS_URL', plugins_url('timeline-express/'));
34
  if(!defined('TIMELINE_EXPRESS_URL_WP')) define('TIMELINE_EXPRESS_URL_WP', get_bloginfo('url'));