Gmedia Photo Gallery - Version 1.2.6

Version Description

  • Disable PHP error reporting on update.php file
Download this release

Release Info

Developer pasyuk
Plugin Icon 128x128 Gmedia Photo Gallery
Version 1.2.6
Comparing to
See all releases

Code changes from version 1.1.1 to 1.2.6

access.php CHANGED
@@ -1,8 +1,8 @@
1
  <?php
2
- ini_set( 'display_errors', '1' );
3
- ini_set( 'error_reporting', E_ALL );
4
 
5
- if ( ! defined( 'ABSPATH' ) ){
6
  die(0);
7
  //@require_once(dirname(__FILE__) . '/config.php');
8
  }
@@ -16,15 +16,28 @@ if(!$gmedia_app){
16
  global $gmCore;
17
  $out = array();
18
 
19
- if(isset($GLOBALS['HTTP_RAW_POST_DATA'])){
 
 
 
 
 
 
 
20
 
21
- $json = json_decode($GLOBALS['HTTP_RAW_POST_DATA']);
22
 
23
- require_once(dirname(__FILE__).'/inc/json.auth.php');
 
 
24
  global $gmAuth;
25
  $gmAuth = new Gmedia_JSON_API_Auth_Controller();
26
 
27
- if(isset($json->cookie)){
 
 
 
 
28
  $user_id = $gmAuth->validate_auth_cookie($json->cookie);
29
  if($user_id){
30
  $user = wp_set_current_user($user_id);
@@ -32,27 +45,55 @@ if(isset($GLOBALS['HTTP_RAW_POST_DATA'])){
32
  $out = gmedia_ios_app_processor('add_term', $json->add_term);
33
  } elseif(isset($json->delete_term)){
34
  $out = gmedia_ios_app_processor('delete_term', $json->delete_term);
35
- }
36
- elseif($json->library){
 
 
 
37
  $out = gmedia_ios_app_processor('library', $json->library);
38
  }
39
 
40
 
41
  } else{
42
- $out['error'] = array('code' => 'nocookie', 'message' => 'No cookie');
43
  }
44
  } elseif(isset($json->login)){
45
  $out = gmedia_ios_app_login($json);
46
  if(!isset($out['error'])){
47
  $user = wp_set_current_user($out['user']['id']);
48
- $data = gmedia_ios_app_library_data();
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
49
  $out = $out + $data;
50
  }
51
  } else{
52
- $out = gmedia_ios_app_library_data();
 
 
 
 
53
  }
54
 
55
- } elseif( 'lostpassword' == $gmCore->_get('action') ){
56
  if(function_exists('wp_lostpassword_url')){
57
  $url = wp_lostpassword_url();
58
  } else{
@@ -80,15 +121,15 @@ function gmedia_ios_app_login($json){
80
  $out['error'] = array('code' => 'nopassword', 'title' => 'No Password', 'message' => 'No Password');
81
  break;
82
  }
83
- if(! ($uid = username_exists($json->login)) ){
84
  $out['error'] = array('code' => 'nouser', 'title' => 'No User', 'message' => 'No User');
85
  break;
86
  }
87
 
88
  $args = array(
89
- 'username' => $json->login
90
- ,'password' => $json->password
91
- ,'nonce' => wp_create_nonce('auth_gmapp')
92
  );
93
  $out = $gmAuth->generate_auth_cookie($args);
94
 
@@ -102,26 +143,46 @@ function gmedia_ios_app_login($json){
102
  *
103
  * @return array
104
  */
105
- function gmedia_ios_app_library_data($data = array('site','filter','gmedia_category','gmedia_album','gmedia_tag')){
106
  global $user_ID, $gmCore, $gmDB, $gmGallery;
107
 
108
  $out = array();
109
 
110
- if ( get_option('permalink_structure') ) {
111
  $ep = $gmGallery->options['endpoint'];
112
- $share_link = home_url($ep.'/$2/$1');
113
  } else{
114
  $share_link = home_url('index.php?gmedia=$1&type=$2');
115
  }
116
 
117
  if(in_array('site', $data)){
118
  $out['site'] = array(
119
- 'title' => get_bloginfo('name')
120
- ,'description' => get_bloginfo('description')
121
  );
122
  }
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
123
  if(in_array('filter', $data)){
124
  $out['filter'] = $gmDB->count_gmedia();
 
125
  }
126
  if(in_array('gmedia_category', $data)){
127
  /*
@@ -132,7 +193,7 @@ function gmedia_ios_app_library_data($data = array('site','filter','gmedia_categ
132
  }
133
  */
134
  $gmediaTerms = $gmDB->get_terms('gmedia_category', array('fields' => 'name=>all'));
135
- $terms = $gmGallery->options['taxonomies']['gmedia_category'];
136
  $out['categories'] = array(
137
  'list' => $terms,
138
  'cap' => 0,
@@ -140,15 +201,12 @@ function gmedia_ios_app_library_data($data = array('site','filter','gmedia_categ
140
  );
141
  if(!empty($gmediaTerms)){
142
  foreach($gmediaTerms as $name => $term){
143
- unset(
144
- $gmediaTerms[$name]->description,
145
- $gmediaTerms[$name]->global,
146
- $gmediaTerms[$name]->status
147
- );
148
  $gmediaTerms[$name]->title = $terms[$name];
149
- $gmediaTerms[$name]->sharelink = str_replace(array('$1','$2'), array($term->term_id, 'category'), $share_link);
150
  $gmediaTerms[$name]->cap = 0;
151
  }
 
152
  $out['categories']['data'] = array_values($gmediaTerms);
153
  }
154
  }
@@ -160,9 +218,18 @@ function gmedia_ios_app_library_data($data = array('site','filter','gmedia_categ
160
  }
161
  $gmediaTerms = $gmDB->get_terms('gmedia_album');
162
  foreach($gmediaTerms as $i => $term){
163
- unset(
164
- $gmediaTerms[$i]->global
165
- );
 
 
 
 
 
 
 
 
 
166
  if($term->count){
167
  $args = array('no_found_rows' => true, 'per_page' => 1, 'album__in' => array($term->term_id));
168
  $termItems = $gmDB->get_gmedias($args);
@@ -170,9 +237,9 @@ function gmedia_ios_app_library_data($data = array('site','filter','gmedia_categ
170
  }
171
  $term_meta = $gmDB->get_metadata('gmedia_term', $term->term_id);
172
  $term_meta = array_map('reset', $term_meta);
173
- $term_meta = array_merge( array('orderby' => 'ID', 'order' => 'DESC'), $term_meta);
174
  $gmediaTerms[$i]->meta = $term_meta;
175
- $gmediaTerms[$i]->sharelink = str_replace(array('$1','$2'), array($term->term_id, 'album'), $share_link);
176
  $gmediaTerms[$i]->cap = (4 == $cap)? 4 : 0;
177
  }
178
  $out['albums'] = array(
@@ -188,12 +255,8 @@ function gmedia_ios_app_library_data($data = array('site','filter','gmedia_categ
188
  }
189
  $gmediaTerms = $gmDB->get_terms('gmedia_tag');
190
  foreach($gmediaTerms as $i => $term){
191
- unset(
192
- $gmediaTerms[$i]->description,
193
- $gmediaTerms[$i]->global,
194
- $gmediaTerms[$i]->status
195
- );
196
- $gmediaTerms[$i]->sharelink = str_replace(array('$1','$2'), array($term->term_id, 'tag'), $share_link);
197
  $gmediaTerms[$i]->cap = (4 == $cap)? 4 : 0;
198
  }
199
  $out['tags'] = array(
@@ -206,42 +269,303 @@ function gmedia_ios_app_library_data($data = array('site','filter','gmedia_categ
206
  }
207
 
208
  /**
209
- * @param $action
210
- * @param $data
 
 
211
  *
212
  * @return array
213
  */
214
- function gmedia_ios_app_processor($action, $data){
215
  global $gmCore, $gmDB, $gmGallery;
216
 
217
  $out = array();
218
- if ( !current_user_can('edit_posts') ){
219
- $out['error'] = array('code' => 'nocapability', 'title' => "You can't do this", 'message' => 'You have no permission to do this operation');
220
- return $out;
221
- }
222
 
223
  $error = array();
224
  $alert = array();
225
- $data = (array) $data;
226
  switch($action){
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
227
  case 'library':
228
- if ( get_option('permalink_structure') ) {
229
  $ep = $gmGallery->options['endpoint'];
230
- $share_link = home_url($ep.'/single/');
231
  } else{
232
  $share_link = home_url('index.php?type=single&gmedia=');
233
  }
 
 
 
 
234
  $gmedias = $gmDB->get_gmedias($data);
235
  foreach($gmedias as $i => $item){
 
 
 
 
 
 
 
 
236
  $meta = $gmDB->get_metadata('gmedia', $item->ID);
237
- $_metadata = unserialize($meta['_metadata'][0]);
238
  $type = explode('/', $item->mime_type);
239
  $item_url = $gmCore->upload['url'] . '/' . $gmGallery->options['folder'][$type[0]] . '/' . $item->gmuid;
240
  $gmedias[$i]->url = $item_url;
241
  $terms = $gmDB->get_the_gmedia_terms($item->ID, 'gmedia_tag');
242
  $tags = array();
243
  if($terms){
244
- $terms = array_values((array) $terms);
245
  foreach($terms as $term){
246
  $tags[] = array('term_id' => $term->term_id, 'name' => $term->name);
247
  }
@@ -251,7 +575,7 @@ function gmedia_ios_app_processor($action, $data){
251
  $terms = $gmDB->get_the_gmedia_terms($item->ID, 'gmedia_album');
252
  $albums = array();
253
  if($terms){
254
- $terms = array_values((array) $terms);
255
  foreach($terms as $term){
256
  $albums[] = array('term_id' => $term->term_id, 'name' => $term->name, 'status' => $term->status);
257
  }
@@ -262,7 +586,7 @@ function gmedia_ios_app_processor($action, $data){
262
  $terms = $gmDB->get_the_gmedia_terms($item->ID, 'gmedia_category');
263
  $categories = array();
264
  if($terms){
265
- $terms = array_values((array) $terms);
266
  foreach($terms as $term){
267
  $categories[] = array('term_id' => $term->term_id, 'name' => $term->name);
268
  }
@@ -270,13 +594,15 @@ function gmedia_ios_app_processor($action, $data){
270
  $gmedias[$i]->categories = $categories;
271
 
272
  $gmedias[$i]->meta = array(
273
- 'thumb' => $_metadata['thumb']
274
- ,'web' => $_metadata['web']
275
- ,'original' => $_metadata['original']
276
  );
277
  $gmedias[$i]->meta['thumb']['link'] = "{$gmCore->upload['url']}/{$gmGallery->options['folder']['image_thumb']}/{$item->gmuid}";
278
  $gmedias[$i]->meta['web']['link'] = "{$gmCore->upload['url']}/{$gmGallery->options['folder']['image']}/{$item->gmuid}";
279
  $gmedias[$i]->meta['original']['link'] = "{$gmCore->upload['url']}/{$gmGallery->options['folder']['image_original']}/{$item->gmuid}";
 
 
280
  if(isset($meta['views'][0])){
281
  $gmedias[$i]->meta['views'] = $meta['views'][0];
282
  }
@@ -289,35 +615,36 @@ function gmedia_ios_app_processor($action, $data){
289
  } else{
290
  $gmedias[$i]->meta = array(
291
  'thumb' => array(
292
- 'link' => $gmCore->gm_get_media_image($item, 'thumb')
293
- ,'width' => 300
294
- ,'height' => 300
295
  )
296
  );
297
- if(!empty($_metadata)){
298
- $gmedias[$i]->meta['data'] = $_metadata;
299
- }
300
  }
301
  if(isset($meta['rating'][0])){
302
- $gmedias[$i]->meta['rating'] = unserialize($meta['rating'][0]);
303
  }
 
304
  }
305
- $out = array(
306
  'properties' => array(
307
- 'share_link_base' => $share_link
308
- ,'total_pages' => $gmDB->pages
309
- ,'current_page' => $gmDB->openPage
310
- ,'items_count' => $gmDB->gmediaCount
311
- )
312
- ,'data' => $gmedias
313
- );
314
  break;
315
  case 'delete_term':
316
  $taxonomy = $data['taxonomy'];
317
  if(!empty($data['items'])){
318
  if(!current_user_can('delete_posts')){
319
- $out['error'] = __('You are not allowed to delete this post.');
320
- return $out;
321
  }
322
  $count = count($data['items']);
323
  foreach($data['items'] as $item){
@@ -331,11 +658,16 @@ function gmedia_ios_app_processor($action, $data){
331
  $alert[] = sprintf(__('%d items deleted successfuly', 'gmLang'), $count);
332
  }
333
  }
334
- $out = gmedia_ios_app_library_data(array('filter',$taxonomy));
335
  break;
336
  case 'add_term':
337
- $taxonomy = $data['taxonomy'];
338
- $edit_term = isset($data['term_id'])? (int) $data['term_id'] : 0;
 
 
 
 
 
339
  $term = $data;
340
  if('gmedia_album' == $taxonomy){
341
  do{
@@ -349,7 +681,7 @@ function gmedia_ios_app_processor($action, $data){
349
  break;
350
  }
351
  if($edit_term && !$gmDB->term_exists($edit_term, $taxonomy)){
352
- $alert[] = __('A term with the id provided do not exists', 'gmLang');
353
  $edit_term = false;
354
  }
355
  if(($term_id = $gmDB->term_exists($term['name'], $taxonomy))){
@@ -369,8 +701,8 @@ function gmedia_ios_app_processor($action, $data){
369
  }
370
 
371
  $term_meta = array(
372
- 'orderby' => $term['orderby']
373
- ,'order' => $term['order']
374
  );
375
  foreach($term_meta as $key => $value){
376
  if($edit_term){
@@ -383,31 +715,37 @@ function gmedia_ios_app_processor($action, $data){
383
  $alert[] = sprintf(__('Album `%s` successfuly saved', 'gmLang'), $term['name']);
384
 
385
  } while(0);
386
- $out = gmedia_ios_app_library_data(array('filter',$taxonomy));
387
- }
388
- elseif('gmedia_tag' == $taxonomy){
389
  if($edit_term){
390
  $term['name'] = trim($term['name']);
391
  $term['term_id'] = intval($term['term_id']);
392
- if( $term['name'] && !$gmCore->is_digit($term['name']) ){
393
- if ( ($term_id = $gmDB->term_exists( $term['term_id'], $taxonomy )) ) {
394
- $term_id = $gmDB->update_term( $term['term_id'], $taxonomy, $term );
395
- if ( is_wp_error( $term_id ) ) {
396
- $error[] = $term_id->get_error_message();
 
 
 
 
397
  } else{
398
- $alert[] = sprintf( __( "Tag %d successfuly updated", 'gmLang' ), $term_id );
399
  }
400
  } else{
401
- $error[] = __( "A term with the id provided do not exists.", 'gmLang' );
402
  }
403
  } else{
404
- $error[] = __( "Term name can't be only digits or empty", 'gmLang' );
405
  }
406
  } else{
407
  $terms = array_filter(array_map('trim', explode(',', $term['name'])));
408
- $terms_added = 0; $terms_qty = count($terms);
 
409
  foreach($terms as $term_name){
410
- if($gmCore->is_digit($term_name)){ continue; }
 
 
411
 
412
  if(!$gmDB->term_exists($term_name, $taxonomy)){
413
  $term_id = $gmDB->insert_term($term_name, $taxonomy);
@@ -421,7 +759,7 @@ function gmedia_ios_app_processor($action, $data){
421
  }
422
  }
423
  }
424
- $out = gmedia_ios_app_library_data(array('filter',$taxonomy));
425
  }
426
 
427
  break;
@@ -440,7 +778,45 @@ function gmedia_ios_app_processor($action, $data){
440
  }
441
 
442
 
443
- header( 'Content-Type: application/json; charset=' . get_option( 'blog_charset' ), true );
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
444
  echo json_encode($out);
445
 
446
  /*if(isset($_GET['test'])){
1
  <?php
2
+ //ini_set('display_errors', '1');
3
+ //ini_set('error_reporting', E_ALL);
4
 
5
+ if(!defined('ABSPATH')){
6
  die(0);
7
  //@require_once(dirname(__FILE__) . '/config.php');
8
  }
16
  global $gmCore;
17
  $out = array();
18
 
19
+ if(isset($_FILES['userfile']['name'])){
20
+ $globaldata = isset($_POST['account'])? $_POST['account'] : false;
21
+ if($globaldata){
22
+ $globaldata = stripslashes($globaldata);
23
+ }
24
+ } else{
25
+ $globaldata = isset($GLOBALS['HTTP_RAW_POST_DATA'])? $GLOBALS['HTTP_RAW_POST_DATA'] : false;
26
+ }
27
 
28
+ if($globaldata){
29
 
30
+ $json = json_decode($globaldata);
31
+
32
+ require_once(dirname(__FILE__) . '/inc/json.auth.php');
33
  global $gmAuth;
34
  $gmAuth = new Gmedia_JSON_API_Auth_Controller();
35
 
36
+ if(isset($json->counter)){
37
+ gmedia_ios_app_counters($json->counter);
38
+ }
39
+
40
+ if(isset($json->cookie) && !empty($json->cookie)){
41
  $user_id = $gmAuth->validate_auth_cookie($json->cookie);
42
  if($user_id){
43
  $user = wp_set_current_user($user_id);
45
  $out = gmedia_ios_app_processor('add_term', $json->add_term);
46
  } elseif(isset($json->delete_term)){
47
  $out = gmedia_ios_app_processor('delete_term', $json->delete_term);
48
+ } elseif(isset($json->doLibrary)){
49
+ $job = gmedia_ios_app_processor('do_library', $json->doLibrary);
50
+ $out = gmedia_ios_app_processor('library', $json->library, false);
51
+ $out = array_merge($out, $job);
52
+ } elseif(isset($json->library)){
53
  $out = gmedia_ios_app_processor('library', $json->library);
54
  }
55
 
56
 
57
  } else{
58
+ $out['error'] = array('code' => 'wrongcookie', 'message' => 'Not Valid User');
59
  }
60
  } elseif(isset($json->login)){
61
  $out = gmedia_ios_app_login($json);
62
  if(!isset($out['error'])){
63
  $user = wp_set_current_user($out['user']['id']);
64
+
65
+ $gmedia_capabilities_list = array(
66
+ 'gmedia_library'
67
+ , 'gmedia_show_others_media'
68
+ , 'gmedia_edit_media'
69
+ , 'gmedia_edit_others_media'
70
+ , 'gmedia_delete_media'
71
+ , 'gmedia_delete_others_media'
72
+ ,'gmedia_upload'
73
+ ,'gmedia_terms'
74
+ , 'gmedia_album_manage'
75
+ , 'gmedia_tag_manage'
76
+ , 'gmedia_terms_delete'
77
+ );
78
+ $gmedia_capabilities = array();
79
+ foreach($gmedia_capabilities_list as $cap){
80
+ $gmedia_capabilities[$cap] = current_user_can($cap);
81
+ }
82
+
83
+ $out['user']['gmedia_capabilities'] = $gmedia_capabilities;
84
+
85
+ $data = gmedia_ios_app_library_data();
86
  $out = $out + $data;
87
  }
88
  } else{
89
+ if(isset($json->library)){
90
+ $out = gmedia_ios_app_processor('library', $json->library);
91
+ } else{
92
+ $out = gmedia_ios_app_library_data();
93
+ }
94
  }
95
 
96
+ } elseif('lostpassword' == $gmCore->_get('action')){
97
  if(function_exists('wp_lostpassword_url')){
98
  $url = wp_lostpassword_url();
99
  } else{
121
  $out['error'] = array('code' => 'nopassword', 'title' => 'No Password', 'message' => 'No Password');
122
  break;
123
  }
124
+ if(!($uid = username_exists($json->login))){
125
  $out['error'] = array('code' => 'nouser', 'title' => 'No User', 'message' => 'No User');
126
  break;
127
  }
128
 
129
  $args = array(
130
+ 'username' => $json->login,
131
+ 'password' => $json->password,
132
+ 'nonce' => wp_create_nonce('auth_gmapp')
133
  );
134
  $out = $gmAuth->generate_auth_cookie($args);
135
 
143
  *
144
  * @return array
145
  */
146
+ function gmedia_ios_app_library_data($data = array('site', 'authors', 'filter', 'gmedia_category', 'gmedia_album', 'gmedia_tag')){
147
  global $user_ID, $gmCore, $gmDB, $gmGallery;
148
 
149
  $out = array();
150
 
151
+ if(get_option('permalink_structure')){
152
  $ep = $gmGallery->options['endpoint'];
153
+ $share_link = home_url($ep . '/$2/$1');
154
  } else{
155
  $share_link = home_url('index.php?gmedia=$1&type=$2');
156
  }
157
 
158
  if(in_array('site', $data)){
159
  $out['site'] = array(
160
+ 'title' => get_bloginfo('name'),
161
+ 'description' => get_bloginfo('description')
162
  );
163
  }
164
+ if(in_array('authors', $data)){
165
+ $out['authors'] = array(
166
+ 'data' => array()
167
+ );
168
+ //if(current_user_can('gmedia_show_others_media') || current_user_can('gmedia_edit_others_media')){
169
+ $authors = get_users(array('who' => 'authors', 'orderby' => 'display_name'));
170
+ if($authors){
171
+ foreach($authors as $author){
172
+ $out['authors']['data'][] = array('id' => $author->ID, 'displayname' => $author->display_name, 'firstname' => $author->first_name, 'lastname' => $author->last_name);
173
+ }
174
+ }
175
+ /*} else{
176
+ $authordata = get_userdata( $user_ID );
177
+ $display_name = $authordata->display_name;
178
+ $first_name = $authordata->first_name;
179
+ $last_name = $authordata->last_name;
180
+ $out['authors']['data'][] = array('id' => $user_ID, 'displayname' => $display_name, 'firstname' => $first_name, 'lastname' => $last_name);
181
+ }*/
182
+ }
183
  if(in_array('filter', $data)){
184
  $out['filter'] = $gmDB->count_gmedia();
185
+ $out['filter'] = array_map('intval', $out['filter']);
186
  }
187
  if(in_array('gmedia_category', $data)){
188
  /*
193
  }
194
  */
195
  $gmediaTerms = $gmDB->get_terms('gmedia_category', array('fields' => 'name=>all'));
196
+ $terms = array_merge(array('0' => __('Uncategorized', 'gmLang')), $gmGallery->options['taxonomies']['gmedia_category']);
197
  $out['categories'] = array(
198
  'list' => $terms,
199
  'cap' => 0,
201
  );
202
  if(!empty($gmediaTerms)){
203
  foreach($gmediaTerms as $name => $term){
204
+ unset($gmediaTerms[$name]->description, $gmediaTerms[$name]->global, $gmediaTerms[$name]->status);
 
 
 
 
205
  $gmediaTerms[$name]->title = $terms[$name];
206
+ $gmediaTerms[$name]->sharelink = str_replace(array('$1', '$2'), array($term->term_id, 'category'), $share_link);
207
  $gmediaTerms[$name]->cap = 0;
208
  }
209
+
210
  $out['categories']['data'] = array_values($gmediaTerms);
211
  }
212
  }
218
  }
219
  $gmediaTerms = $gmDB->get_terms('gmedia_album');
220
  foreach($gmediaTerms as $i => $term){
221
+ $author_id = $term->global;
222
+ if($author_id) {
223
+ $authordata = get_userdata( $author_id );
224
+ $display_name = $authordata->display_name;
225
+ $first_name = $authordata->first_name;
226
+ $last_name = $authordata->last_name;
227
+ } else{
228
+ $display_name = __('Shared', 'gmLang');
229
+ $first_name = $last_name = '';
230
+ }
231
+ $gmediaTerms[$i]->user = array('id' => $author_id, 'displayname' => $display_name, 'firstname' => $first_name, 'lastname' => $last_name);
232
+
233
  if($term->count){
234
  $args = array('no_found_rows' => true, 'per_page' => 1, 'album__in' => array($term->term_id));
235
  $termItems = $gmDB->get_gmedias($args);
237
  }
238
  $term_meta = $gmDB->get_metadata('gmedia_term', $term->term_id);
239
  $term_meta = array_map('reset', $term_meta);
240
+ $term_meta = array_merge(array('orderby' => 'ID', 'order' => 'DESC'), $term_meta);
241
  $gmediaTerms[$i]->meta = $term_meta;
242
+ $gmediaTerms[$i]->sharelink = str_replace(array('$1', '$2'), array($term->term_id, 'album'), $share_link);
243
  $gmediaTerms[$i]->cap = (4 == $cap)? 4 : 0;
244
  }
245
  $out['albums'] = array(
255
  }
256
  $gmediaTerms = $gmDB->get_terms('gmedia_tag');
257
  foreach($gmediaTerms as $i => $term){
258
+ unset($gmediaTerms[$i]->description, $gmediaTerms[$i]->global, $gmediaTerms[$i]->status);
259
+ $gmediaTerms[$i]->sharelink = str_replace(array('$1', '$2'), array($term->term_id, 'tag'), $share_link);
 
 
 
 
260
  $gmediaTerms[$i]->cap = (4 == $cap)? 4 : 0;
261
  }
262
  $out['tags'] = array(
269
  }
270
 
271
  /**
272
+ * @param $action
273
+ * @param $data
274
+ *
275
+ * @param bool $filter
276
  *
277
  * @return array
278
  */
279
+ function gmedia_ios_app_processor($action, $data, $filter = true){
280
  global $gmCore, $gmDB, $gmGallery;
281
 
282
  $out = array();
 
 
 
 
283
 
284
  $error = array();
285
  $alert = array();
286
+ $data = (array)$data;
287
  switch($action){
288
+ case 'do_library':
289
+
290
+ if(!current_user_can('edit_posts')){
291
+ $out['error'] = array('code' => 'nocapability', 'title' => "You can't do this", 'message' => 'You have no permission to do this operation');
292
+
293
+ return $out;
294
+ }
295
+
296
+ if(!isset($data['action'])){
297
+ return $out;
298
+ }
299
+ switch($data['action']){
300
+
301
+ case 'add_media':
302
+ usleep(10);
303
+
304
+ if(is_uploaded_file($_FILES['userfile']['tmp_name'])){
305
+ $file_name = $_FILES['userfile']['name'];
306
+ $file_tmp = $_FILES['userfile']['tmp_name'];
307
+ } else{
308
+ $error[] = __("Failed to move uploaded file.", 'gmLang');
309
+ break;
310
+ }
311
+
312
+ $fileinfo = $gmCore->fileinfo($file_name);
313
+
314
+ $gmedia = (array)$data['item'];
315
+ if(!current_user_can('gmedia_terms')){
316
+ unset($gmedia['categories'], $gmedia['albums'], $gmedia['tags']);
317
+ } else{
318
+ if(!empty($gmedia['categories'])){
319
+ $cat = $gmedia['categories'][0]->name;
320
+ $gmedia['terms']['gmedia_category'] = $cat;
321
+ }
322
+ if(empty($gmedia['albums'])){
323
+ $gmedia['terms']['gmedia_album'] = '';
324
+ } else{
325
+ $alb = isset($gmedia['albums'][0]->term_id)? $gmedia['albums'][0]->term_id : $gmedia['albums'][0]->name;
326
+ $gmedia['terms']['gmedia_album'] = $alb;
327
+ }
328
+ if(empty($gmedia['tags'])){
329
+ $gmedia['terms']['gmedia_tag'] = '';
330
+ } else{
331
+ $tags = array();
332
+ foreach($gmedia['tags'] as $tag){
333
+ $tags[] = isset($tag->term_id)? $tag->term_id : $tag->name;
334
+ }
335
+ $gmedia['terms']['gmedia_tag'] = implode(',', $tags);
336
+ }
337
+ unset($gmedia['categories'], $gmedia['albums'], $gmedia['tags']);
338
+ }
339
+ /*if(isset($gmedia['terms'])){
340
+ $post_data = array('terms' => $gmedia['terms']);
341
+ } else{
342
+ $post_data = array();
343
+ }*/
344
+
345
+ $return = $gmCore->gmedia_upload_handler($file_tmp, $fileinfo, 'multipart', $gmedia);
346
+ if(isset($return['error'])){
347
+ $error[] = $return['error']['message'];
348
+ } else{
349
+ $alert[] = $return['success']['message'];
350
+ }
351
+ break;
352
+
353
+ case 'update_media':
354
+ if(!current_user_can('gmedia_edit_media')){
355
+ $error[] = __('You are not allowed to edit media', 'gmLang');
356
+ break;
357
+ }
358
+ $gmedia = (array)$data['item'];
359
+ if(!empty($gmedia['ID'])){
360
+ $item = $gmDB->get_gmedia($gmedia['ID']);
361
+ if((int)$item->author != get_current_user_id()){
362
+ if(!current_user_can('gmedia_edit_others_media')){
363
+ $error[] = __('You are not allowed to edit others media', 'gmLang');
364
+ break;
365
+ }
366
+ }
367
+
368
+ $gmedia['modified'] = current_time('mysql');
369
+ $gmedia['mime_type'] = $item->mime_type;
370
+ $gmedia['gmuid'] = $item->gmuid;
371
+
372
+ if(!current_user_can('gmedia_terms')){
373
+ unset($gmedia['categories'], $gmedia['albums'], $gmedia['tags']);
374
+ } else{
375
+ if(!empty($gmedia['categories'])){
376
+ $cat = $gmedia['categories'][0]->name;
377
+ $gmedia['terms']['gmedia_category'] = $cat;
378
+ }
379
+ if(empty($gmedia['albums'])){
380
+ $gmedia['terms']['gmedia_album'] = '';
381
+ } else{
382
+ $alb = isset($gmedia['albums'][0]->term_id)? $gmedia['albums'][0]->term_id : $gmedia['albums'][0]->name;
383
+ $gmedia['terms']['gmedia_album'] = $alb;
384
+ }
385
+ if(empty($gmedia['tags'])){
386
+ $gmedia['terms']['gmedia_tag'] = '';
387
+ } else{
388
+ $tags = array();
389
+ foreach($gmedia['tags'] as $tag){
390
+ $tags[] = isset($tag->term_id)? $tag->term_id : $tag->name;
391
+ }
392
+ $gmedia['terms']['gmedia_tag'] = implode(',', $tags);
393
+ }
394
+ unset($gmedia['categories'], $gmedia['albums'], $gmedia['tags']);
395
+ }
396
+
397
+ $gmDB->insert_gmedia($gmedia);
398
+ }
399
+ break;
400
+
401
+ case 'assign_category':
402
+ if(!current_user_can('gmedia_terms')){
403
+ $error[] = __('You are not allowed to manage categories', 'gmLang');
404
+ break;
405
+ }
406
+ $term = $data['assign_category'][0];
407
+ if(false === $term){
408
+ break;
409
+ }
410
+ $count = count($data['selected']);
411
+ if('0' == $term){
412
+ foreach($data['selected'] as $item){
413
+ $gmDB->delete_gmedia_term_relationships($item, 'gmedia_category');
414
+ }
415
+ $alert[] = sprintf(__('%d items updated with "Uncategorized"', 'gmLang'), $count);
416
+ } else{
417
+ foreach($data['selected'] as $item){
418
+ $result = $gmDB->set_gmedia_terms($item, $term, 'gmedia_category', $append = 0);
419
+ if(is_wp_error($result)){
420
+ $error[] = $result;
421
+ $count--;
422
+ } elseif(!$result){
423
+ $count--;
424
+ }
425
+ }
426
+ if(isset($gmGallery->options['taxonomies']['gmedia_category'][$term])){
427
+ $cat_name = $gmGallery->options['taxonomies']['gmedia_category'][$term];
428
+ $alert[] = sprintf(__("Category `%s` assigned to %d images.", 'gmLang'), esc_html($cat_name), $count);
429
+ } else{
430
+ $error[] = sprintf(__("Category `%s` can't be assigned.", 'gmLang'), $term);
431
+ }
432
+ }
433
+ break;
434
+
435
+ case 'assign_album':
436
+ if(!current_user_can('gmedia_terms')){
437
+ $error[] = __('You are not allowed to manage albums', 'gmLang');
438
+ }
439
+ $term = $data['assign_album'][0];
440
+ $count = count($data['selected']);
441
+ if('0' == $term){
442
+ foreach($data['selected'] as $item){
443
+ $gmDB->delete_gmedia_term_relationships($item, 'gmedia_album');
444
+ }
445
+ $alert[] = sprintf(__('%d items updated with "No Album"', 'gmLang'), $count);
446
+ } else{
447
+ foreach($data['selected'] as $item){
448
+ $result = $gmDB->set_gmedia_terms($item, $term, 'gmedia_album', $append = 0);
449
+ if(is_wp_error($result)){
450
+ $error[] = $result;
451
+ $count--;
452
+ } elseif(!$result){
453
+ $count--;
454
+ }
455
+ }
456
+ if($gmCore->is_digit($term)){
457
+ $alb_name = $gmDB->get_alb_name($term);
458
+ } else{
459
+ $alb_name = $term;
460
+ }
461
+ $alert[] = sprintf(__('Album `%s` assigned to %d items', 'gmLang'), esc_html($alb_name), $count);
462
+ }
463
+ break;
464
+
465
+ case 'add_tags':
466
+ if(!current_user_can('gmedia_terms')){
467
+ $error[] = __('You are not allowed manage tags', 'gmLang');
468
+ break;
469
+ }
470
+ if(empty($data['add_tags'])){
471
+ $error[] = __('No tags provided', 'gmLang');
472
+ break;
473
+ }
474
+ $term = $data['add_tags'];
475
+ $count = count($data['selected']);
476
+ foreach($data['selected'] as $item){
477
+ $result = $gmDB->set_gmedia_terms($item, $term, 'gmedia_tag', $append = 1);
478
+ if(is_wp_error($result)){
479
+ $error[] = $result;
480
+ $count--;
481
+ } elseif(!$result){
482
+ $count--;
483
+ }
484
+ }
485
+ $alert[] = sprintf(__('%d tags added to %d items', 'gmLang'), count($term), $count);
486
+ break;
487
+
488
+ case 'delete_tags':
489
+ if(!current_user_can('gmedia_delete_others_media')){
490
+ $error[] = __('You are not allowed to delete others media', 'gmLang');
491
+ break;
492
+ }
493
+ if(empty($data['delete_tags'])){
494
+ $error[] = __('No tags provided', 'gmLang');
495
+ break;
496
+ }
497
+ $term = array_map('intval', $data['delete_tags']);
498
+ $count = count($data['selected']);
499
+ foreach($data['selected'] as $item){
500
+ $result = $gmDB->set_gmedia_terms($item, $term, 'gmedia_tag', $append = -1);
501
+ if(is_wp_error($result)){
502
+ $error[] = $result;
503
+ $count--;
504
+ } elseif(!$result){
505
+ $count--;
506
+ }
507
+ }
508
+ $alert[] = sprintf(__('%d tags deleted from %d items', 'gmLang'), count($term), $count);
509
+ break;
510
+
511
+ case 'delete':
512
+ global $user_ID;
513
+ if(!current_user_can('gmedia_delete_media')){
514
+ $error[] = __('You are not allowed to delete this post.');
515
+ break;
516
+ }
517
+ $count = count($data['selected']);
518
+ foreach($data['selected'] as $item){
519
+ $gm_item = $gmDB->get_gmedia($item);
520
+ if(((int)$gm_item->author != $user_ID) && !current_user_can('gmedia_delete_others_media')){
521
+ $error[] = "#{$item}: " . __('You are not allowed to delete media others media', 'gmLang');
522
+ continue;
523
+ }
524
+ if(!$gmDB->delete_gmedia((int)$item)){
525
+ $error[] = "#{$item}: " . __('Error in deleting...', 'gmLang');
526
+ $count--;
527
+ }
528
+ }
529
+ if($count){
530
+ $alert[] = sprintf(__('%d items deleted successfuly', 'gmLang'), $count);
531
+ }
532
+ break;
533
+ }
534
+
535
+ $filter = gmedia_ios_app_library_data(array('filter', 'gmedia_category', 'gmedia_album', 'gmedia_tag'));
536
+ $out = array_merge($out, $filter);
537
+ break;
538
+
539
  case 'library':
540
+ if(get_option('permalink_structure')){
541
  $ep = $gmGallery->options['endpoint'];
542
+ $share_link = home_url($ep . '/single/');
543
  } else{
544
  $share_link = home_url('index.php?type=single&gmedia=');
545
  }
546
+ $filter = $filter? gmedia_ios_app_library_data(array('filter')) : array();
547
+ if(!is_user_logged_in()){
548
+ $data['status'] = array('public');
549
+ }
550
  $gmedias = $gmDB->get_gmedias($data);
551
  foreach($gmedias as $i => $item){
552
+
553
+ $author_id = $item->author;
554
+ $authordata = get_userdata( $author_id );
555
+ $display_name = $authordata->display_name;
556
+ $first_name = $authordata->first_name;
557
+ $last_name = $authordata->last_name;
558
+ $gmedias[$i]->user = array('id' => $author_id, 'displayname' => $display_name, 'firstname' => $first_name, 'last_name' => $last_name);
559
+
560
  $meta = $gmDB->get_metadata('gmedia', $item->ID);
561
+ $_metadata = maybe_unserialize($meta['_metadata'][0]);
562
  $type = explode('/', $item->mime_type);
563
  $item_url = $gmCore->upload['url'] . '/' . $gmGallery->options['folder'][$type[0]] . '/' . $item->gmuid;
564
  $gmedias[$i]->url = $item_url;
565
  $terms = $gmDB->get_the_gmedia_terms($item->ID, 'gmedia_tag');
566
  $tags = array();
567
  if($terms){
568
+ $terms = array_values((array)$terms);
569
  foreach($terms as $term){
570
  $tags[] = array('term_id' => $term->term_id, 'name' => $term->name);
571
  }
575
  $terms = $gmDB->get_the_gmedia_terms($item->ID, 'gmedia_album');
576
  $albums = array();
577
  if($terms){
578
+ $terms = array_values((array)$terms);
579
  foreach($terms as $term){
580
  $albums[] = array('term_id' => $term->term_id, 'name' => $term->name, 'status' => $term->status);
581
  }
586
  $terms = $gmDB->get_the_gmedia_terms($item->ID, 'gmedia_category');
587
  $categories = array();
588
  if($terms){
589
+ $terms = array_values((array)$terms);
590
  foreach($terms as $term){
591
  $categories[] = array('term_id' => $term->term_id, 'name' => $term->name);
592
  }
594
  $gmedias[$i]->categories = $categories;
595
 
596
  $gmedias[$i]->meta = array(
597
+ 'thumb' => $_metadata['thumb'],
598
+ 'web' => $_metadata['web'],
599
+ 'original' => $_metadata['original']
600
  );
601
  $gmedias[$i]->meta['thumb']['link'] = "{$gmCore->upload['url']}/{$gmGallery->options['folder']['image_thumb']}/{$item->gmuid}";
602
  $gmedias[$i]->meta['web']['link'] = "{$gmCore->upload['url']}/{$gmGallery->options['folder']['image']}/{$item->gmuid}";
603
  $gmedias[$i]->meta['original']['link'] = "{$gmCore->upload['url']}/{$gmGallery->options['folder']['image_original']}/{$item->gmuid}";
604
+ $gmedias[$i]->meta['views'] = 0;
605
+ $gmedias[$i]->meta['likes'] = 0;
606
  if(isset($meta['views'][0])){
607
  $gmedias[$i]->meta['views'] = $meta['views'][0];
608
  }
615
  } else{
616
  $gmedias[$i]->meta = array(
617
  'thumb' => array(
618
+ 'link' => $gmCore->gm_get_media_image($item, 'thumb'),
619
+ 'width' => 300,
620
+ 'height' => 300
621
  )
622
  );
623
+ if(!empty($_metadata)){
624
+ $gmedias[$i]->meta['data'] = $_metadata;
625
+ }
626
  }
627
  if(isset($meta['rating'][0])){
628
+ $gmedias[$i]->meta['rating'] = maybe_unserialize($meta['rating'][0]);
629
  }
630
+ $gmedias[$i]->sharelink = $share_link . $item->ID;
631
  }
632
+ $out = array_merge($filter, array(
633
  'properties' => array(
634
+ 'request' => isset($data['request'])? $data['request'] : null,
635
+ 'total_pages' => $gmDB->pages,
636
+ 'current_page' => $gmDB->openPage,
637
+ 'items_count' => $gmDB->gmediaCount
638
+ ),
639
+ 'data' => $gmedias
640
+ ));
641
  break;
642
  case 'delete_term':
643
  $taxonomy = $data['taxonomy'];
644
  if(!empty($data['items'])){
645
  if(!current_user_can('delete_posts')){
646
+ $error[] = __('You are not allowed to delete this post.');
647
+ break;
648
  }
649
  $count = count($data['items']);
650
  foreach($data['items'] as $item){
658
  $alert[] = sprintf(__('%d items deleted successfuly', 'gmLang'), $count);
659
  }
660
  }
661
+ $out = gmedia_ios_app_library_data(array('filter', $taxonomy));
662
  break;
663
  case 'add_term':
664
+ if(!current_user_can('edit_posts')){
665
+ $out['error'] = array('code' => 'nocapability', 'title' => "You can't do this", 'message' => 'You have no permission to do this operation');
666
+
667
+ return $out;
668
+ }
669
+ $taxonomy = $data['taxonomy'];
670
+ $edit_term = isset($data['term_id'])? (int)$data['term_id'] : 0;
671
  $term = $data;
672
  if('gmedia_album' == $taxonomy){
673
  do{
681
  break;
682
  }
683
  if($edit_term && !$gmDB->term_exists($edit_term, $taxonomy)){
684
+ $error[] = __('A term with the id provided do not exists', 'gmLang');
685
  $edit_term = false;
686
  }
687
  if(($term_id = $gmDB->term_exists($term['name'], $taxonomy))){
701
  }
702
 
703
  $term_meta = array(
704
+ 'orderby' => $term['orderby'],
705
+ 'order' => $term['order']
706
  );
707
  foreach($term_meta as $key => $value){
708
  if($edit_term){
715
  $alert[] = sprintf(__('Album `%s` successfuly saved', 'gmLang'), $term['name']);
716
 
717
  } while(0);
718
+ $out = gmedia_ios_app_library_data(array('filter', $taxonomy));
719
+ } elseif('gmedia_tag' == $taxonomy){
 
720
  if($edit_term){
721
  $term['name'] = trim($term['name']);
722
  $term['term_id'] = intval($term['term_id']);
723
+ if($term['name'] && !$gmCore->is_digit($term['name'])){
724
+ if(($term_id = $gmDB->term_exists($term['term_id'], $taxonomy))){
725
+ if(!$gmDB->term_exists($term['name'], $taxonomy)){
726
+ $term_id = $gmDB->update_term($term['term_id'], $taxonomy, $term);
727
+ if(is_wp_error($term_id)){
728
+ $error[] = $term_id->get_error_message();
729
+ } else{
730
+ $alert[] = sprintf(__("Tag %d successfuly updated", 'gmLang'), $term_id);
731
+ }
732
  } else{
733
+ $error[] = __('A term with the name provided already exists', 'gmLang');
734
  }
735
  } else{
736
+ $error[] = __("A term with the id provided do not exists", 'gmLang');
737
  }
738
  } else{
739
+ $error[] = __("Term name can't be only digits or empty", 'gmLang');
740
  }
741
  } else{
742
  $terms = array_filter(array_map('trim', explode(',', $term['name'])));
743
+ $terms_added = 0;
744
+ $terms_qty = count($terms);
745
  foreach($terms as $term_name){
746
+ if($gmCore->is_digit($term_name)){
747
+ continue;
748
+ }
749
 
750
  if(!$gmDB->term_exists($term_name, $taxonomy)){
751
  $term_id = $gmDB->insert_term($term_name, $taxonomy);
759
  }
760
  }
761
  }
762
+ $out = gmedia_ios_app_library_data(array('filter', $taxonomy));
763
  }
764
 
765
  break;
778
  }
779
 
780
 
781
+ /**
782
+ * @param $data
783
+ */
784
+ function gmedia_ios_app_counters($data){
785
+ global $gmDB;
786
+
787
+ $data = (array)$data;
788
+ $items_counter = array();
789
+ if(!empty($data['views'])) {
790
+ foreach ($data['views'] as $gmID) {
791
+ $items_counter[$gmID]['views'] = 1;
792
+ }
793
+ if (!empty($data['likes'])) {
794
+ foreach ($data['likes'] as $gmID) {
795
+ $items_counter[$gmID]['likes'] = 1;
796
+ }
797
+ }
798
+ }
799
+
800
+ if(!empty($items_counter)) {
801
+ foreach($items_counter as $gmID => $counters){
802
+ if (null === $gmDB->get_gmedia($gmID)) {
803
+ continue;
804
+ }
805
+ $counters['views'] = $gmDB->get_metadata('gmedia', $gmID, 'views', true);
806
+ $counters['views'] +=1;
807
+ $gmDB->update_metadata('gmedia', $gmID, 'views', $counters['views']);
808
+ if(isset($counters['likes'])) {
809
+ $counters['likes'] = $gmDB->get_metadata('gmedia', $gmID, 'likes', true);
810
+ $counters['likes'] +=1;
811
+ $gmDB->update_metadata('gmedia', $gmID, 'likes', $counters['likes']);
812
+ }
813
+
814
+ }
815
+ }
816
+
817
+ }
818
+
819
+ header('Content-Type: application/json; charset=' . get_option('blog_charset'), true);
820
  echo json_encode($out);
821
 
822
  /*if(isset($_GET['test'])){
admin/addmedia.php CHANGED
@@ -19,7 +19,8 @@ function gmedia_AddMedia(){
19
  <div class="btn-toolbar pull-left">
20
  <div class="btn-group">
21
  <a class="btn btn<?php echo ($tab == 'upload')? '-primary active' : '-default'; ?>" href="<?php echo $gmCore->get_admin_url(array(), array('tab'));; ?>"><?php _e('Upload Files', 'gmLang'); ?></a>
22
- <a class="btn btn<?php echo ($tab == 'import')? '-primary active' : '-default'; ?>" href="<?php echo $gmCore->get_admin_url(array('tab' => 'import')); ?>"><?php _e('Import', 'gmLang'); ?></a>
 
23
  </div>
24
  </div>
25
  <?php } ?>
@@ -56,7 +57,13 @@ function gmedia_AddMedia(){
56
 
57
 
58
  function gmedia_upload_files(){
59
- global $gmCore, $gmDB, $gmProcessor, $gmGallery;
 
 
 
 
 
 
60
 
61
  $maxupsize = wp_max_upload_size();
62
  $maxupsize = floor($maxupsize * 0.99);
@@ -66,18 +73,38 @@ function gmedia_upload_files(){
66
 
67
  ?>
68
  <form class="row" id="gmUpload" name="upload_form" method="POST" accept-charset="utf-8" onsubmit="return false;">
69
- <div class="col-md-4" id="uploader_multipart_params">
70
- <br/>
 
 
 
 
 
 
 
 
71
 
72
- <p class="clearfix text-right">
73
- <?php if ('false' == $gm_screen_options['uploader_chunking'] || ('html4' == $gm_screen_options['uploader_runtime'])){ ?>
74
- <span class="label label-default"><?php echo __('Maximum file size', 'gmLang') . ": {$maxupsize_mb}Mb"; ?></span>
75
- <?php } else{ ?>
76
- <span class="label label-default"><?php echo __('Maximum $_POST size', 'gmLang') . ": {$maxupsize_mb}Mb"; ?></span>
77
- <span class="label label-default hidden"><?php echo __('Chunk size', 'gmLang') . ': ' . min($maxupsize_mb, $gm_screen_options['uploader_chunk_size']) . 'Mb'; ?></span>
78
- <?php } ?>
79
- </p>
 
 
 
 
 
 
 
 
 
 
 
80
 
 
81
  <div class="form-group">
82
  <?php
83
  $term_type = 'gmedia_category';
@@ -90,22 +117,23 @@ function gmedia_upload_files(){
90
  }
91
  }
92
  ?>
93
- <label><?php _e('Assign Category', 'gmLang'); ?> <small><?php _e('(for images only)') ?></small></label>
 
 
94
  <select id="gmedia_category" name="terms[gmedia_category]" class="form-control input-sm">
95
  <option value=""><?php _e('Uncategorized', 'gmLang'); ?></option>
96
  <?php echo $terms_category; ?>
97
  </select>
98
  </div>
99
-
100
  <div class="form-group">
101
  <?php
102
  $term_type = 'gmedia_album';
103
- $gm_terms = $gmDB->get_terms($term_type);
104
 
105
  $terms_album = '';
106
  if(count($gm_terms)){
107
  foreach($gm_terms as $term){
108
- $terms_album .= '<option value="' . esc_attr($term->name) . '">' . esc_html($term->name) . '</option>' . "\n";
109
  }
110
  }
111
  ?>
@@ -115,148 +143,180 @@ function gmedia_upload_files(){
115
  <?php echo $terms_album; ?>
116
  </select>
117
  </div>
118
-
119
  <div class="form-group">
120
  <?php
121
  $term_type = 'gmedia_tag';
122
  $gm_terms = $gmDB->get_terms($term_type, array('fields' => 'names'));
123
  ?>
124
  <label><?php _e('Add Tags', 'gmLang'); ?> </label>
125
- <input id="combobox_gmedia_tag" name="terms[gmedia_tag]" class="form-control input-sm" value="" placeholder="<?php _e('Add Tags...', 'gmLang'); ?>" />
126
  </div>
 
 
 
127
 
128
- <script type="text/javascript">
129
- jQuery(function($){
130
- $('#combobox_gmedia_album').selectize({
131
- create: true,
132
- createOnBlur: true,
133
- persist: false
134
- });
135
- var gm_terms = <?php echo json_encode($gm_terms); ?>;
136
- var items = gm_terms.map(function(x){
137
- return { item: x };
138
- });
139
- $('#combobox_gmedia_tag').selectize({
140
- delimiter: ',',
141
- maxItems: null,
142
- createOnBlur: true,
143
- openOnFocus: false,
144
- persist: false,
145
- options: items,
146
- labelField: 'item',
147
- valueField: 'item',
148
- hideSelected: true,
149
- create: function(input){
150
- return {
151
- item: input
152
- }
153
- }
154
- });
155
- $('#uploader_runtime select').change(function(){
156
- if('html4' == $(this).val()){
157
- $('#uploader_chunking').addClass('hide');
158
- $('#uploader_urlstream_upload').addClass('hide');
159
- } else {
160
- $('#uploader_chunking').removeClass('hide');
161
- $('#uploader_urlstream_upload').removeClass('hide');
162
- }
163
- });
164
  });
165
- </script>
166
- </div>
167
- <div class="col-md-8" id="pluploadUploader">
168
- <p><?php _e("You browser doesn't have Flash or HTML5 support. Check also if page have no JavaScript errors.", 'gmLang'); ?></p>
169
- <script type="text/javascript">
170
- // Convert divs to queue widgets when the DOM is ready
171
- jQuery(function($){
172
- $("#pluploadUploader").plupload({
173
- <?php if('auto' != $gm_screen_options['uploader_runtime']){ ?>
174
- runtimes: '<?php echo $gm_screen_options['uploader_runtime']; ?>',
175
- <?php } ?>
176
- url: '<?php echo wp_nonce_url($gmCore->gmedia_url . '/admin/upload.php', 'grandMedia' ); ?>',
177
- <?php if(('true' == $gm_screen_options['uploader_urlstream_upload']) && ('html4' != $gm_screen_options['uploader_runtime'])){ ?>
178
- urlstream_upload: true,
179
- multipart: false,
180
- <?php } else{ ?>
181
- multipart: true,
182
- <?php } ?>
183
- multipart_params: { params: ''},
184
- <?php if('true' == $gm_screen_options['uploader_chunking'] && ('html4' != $gm_screen_options['uploader_runtime'])){ ?>
185
- max_file_size: '2000Mb',
186
- chunk_size: 200000<?php //echo min($maxupsize, $gm_screen_options['uploader_chunk_size']*1024*1024); ?>,
187
- <?php } else{ ?>
188
- max_file_size: <?php echo $maxupsize; ?>,
189
- <?php } ?>
190
- max_retries: 2,
191
- unique_names: false,
192
- rename: true,
193
- sortable: true,
194
- dragdrop: true,
195
- views: {
196
- list: true,
197
- thumbs: true,
198
- active: 'thumbs'
199
- },
200
- filters: [
201
- {title: "All files", extensions: "*"}
202
- ],
203
- flash_swf_url: '<?php echo $gmCore->gmedia_url; ?>/assets/plupload/Moxie.swf',
204
- silverlight_xap_url: '<?php echo $gmCore->gmedia_url; ?>/assets/plupload/Moxie.xap'
205
-
206
- });
207
- var closebtn = '<button type="button" class="close" data-dismiss="alert" aria-hidden="true">&times;</button>';
208
- var uploader = $("#pluploadUploader").plupload('getUploader');
209
- uploader.bind('StateChanged', function(up){
210
- if(up.state == plupload.STARTED){
211
- up.settings.multipart_params = { params: jQuery('#uploader_multipart_params :input').serialize() };
212
- }
213
- console.log('[StateChanged]', up.state, up.settings.multipart_params);
214
- });
215
- uploader.bind('ChunkUploaded', function(up, file, info){
216
- console.log('[ChunkUploaded] File:', file, "Info:", info);
217
- var response = jQuery.parseJSON(info.response);
218
- if(response && response.error){
219
- up.stop();
220
- file.status = plupload.FAILED;
221
- jQuery('<div/>').addClass('alert alert-danger alert-dismissable').html(closebtn + '<strong>' + response.id + ':</strong> ' + response.error.message).appendTo('#gmedia-msg-panel');
222
- console.log(response.error);
223
- up.trigger('QueueChanged StateChanged');
224
- up.trigger('UploadProgress', file);
225
- up.start();
226
- }
227
- });
228
- uploader.bind('FileUploaded', function(up, file, info){
229
- console.log('[FileUploaded] File:', file, "Info:", info);
230
- var response = jQuery.parseJSON(info.response);
231
- if(response && response.error){
232
- file.status = plupload.FAILED;
233
- jQuery('<div/>').addClass('alert alert-danger alert-dismissable').html(closebtn + '<strong>' + response.id + ':</strong> ' + response.error.message).appendTo('#gmedia-msg-panel');
234
- console.log(response.error);
235
  }
236
- });
237
- uploader.bind('UploadProgress', function(up, file){
238
- var percent = uploader.total.percent;
239
- $('#total-progress-info .progress-bar').css('width', percent + "%").attr('aria-valuenow', percent);
240
- });
241
- uploader.bind('Error', function(up, args){
242
- console.log('[Error] ', args);
243
- jQuery('<div/>').addClass('alert alert-danger alert-dismissable').html(closebtn + '<strong>' + args.file.name + ':</strong> ' + args.message + ' ' + args.status).appendTo('#gmedia-msg-panel');
244
- });
245
- uploader.bind('UploadComplete', function(up, files){
246
- console.log('[UploadComplete]', files);
247
- $('#total-progress-info .progress-bar').css('width', '0').attr('aria-valuenow', '0');
248
- });
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
249
 
250
  });
251
- </script>
252
- </div>
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
253
  </form>
254
  <?php
255
  }
256
 
257
 
258
  function gmedia_import(){
259
- global $wpdb, $gmCore, $gmGallery, $gmDB;
 
 
 
 
 
 
 
260
  $gmediaURL = plugins_url(GMEDIA_FOLDER);
261
  ?>
262
  <form class="row" id="import_form" name="import_form" target="import_window" action="<?php echo $gmCore->gmedia_url; ?>/admin/import.php" method="POST" accept-charset="utf-8" style="padding:20px 0 10px;">
@@ -264,80 +324,94 @@ function gmedia_import(){
264
  <fieldset id="import_params" class="import-params">
265
  <?php wp_nonce_field('GmediaImport'); ?>
266
  <input type="hidden" id="import-action" name="import" value=""/>
267
- <div class="form-group">
268
- <?php
269
- $term_type = 'gmedia_category';
270
- $gm_terms = $gmGallery->options['taxonomies'][$term_type];
271
-
272
- $terms_category = '';
273
- if(count($gm_terms)){
274
- foreach($gm_terms as $term_name => $term_title){
275
- $terms_category .= '<option value="' . $term_name . '">' . esc_html($term_title) . '</option>' . "\n";
276
- }
277
- }
278
- ?>
279
- <label><?php _e('Assign Category', 'gmLang'); ?> <small><?php _e('(for images only)') ?></small></label>
280
- <select id="gmedia_category" name="terms[gmedia_category]" class="form-control input-sm">
281
- <option value=""><?php _e('Uncategorized', 'gmLang'); ?></option>
282
- <?php echo $terms_category; ?>
283
- </select>
284
- </div>
285
 
286
- <div class="form-group">
287
- <?php
288
- $term_type = 'gmedia_album';
289
- $gm_terms = $gmDB->get_terms($term_type);
 
290
 
291
- $terms_album = '';
292
- if(count($gm_terms)){
293
- foreach($gm_terms as $term){
294
- $terms_album .= '<option value="' . esc_attr($term->name) . '">' . esc_html($term->name) . '</option>' . "\n";
 
295
  }
296
- }
297
- ?>
298
- <label><?php _e('Add to Album', 'gmLang'); ?> </label>
299
- <select id="combobox_gmedia_album" name="terms[gmedia_album]" class="form-control input-sm" placeholder="<?php _e('Album Name...', 'gmLang'); ?>">
300
- <option value=""></option>
301
- <?php echo $terms_album; ?>
302
- </select>
303
- </div>
304
-
305
- <div class="form-group">
306
- <?php
307
- $term_type = 'gmedia_tag';
308
- $gm_terms = $gmDB->get_terms($term_type, array('fields' => 'names'));
309
- ?>
310
- <label><?php _e('Add Tags', 'gmLang'); ?> </label>
311
- <input id="combobox_gmedia_tag" name="terms[gmedia_tag]" class="form-control input-sm" value="" placeholder="<?php _e('Add Tags...', 'gmLang'); ?>" />
312
- </div>
313
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
314
  <script type="text/javascript">
315
  jQuery(function($){
 
316
  $('#combobox_gmedia_album').selectize({
 
317
  create: true,
318
  createOnBlur: true,
 
 
 
319
  persist: false
320
  });
321
  var gm_terms = <?php echo json_encode($gm_terms); ?>;
322
  var items = gm_terms.map(function(x){
323
- return { item: x };
324
- });
325
  $('#combobox_gmedia_tag').selectize({
 
 
 
 
 
 
 
 
 
 
326
  delimiter: ',',
327
  maxItems: null,
328
- createOnBlur: true,
329
  openOnFocus: false,
330
  persist: false,
331
  options: items,
332
  labelField: 'item',
333
  valueField: 'item',
334
- hideSelected: true,
335
- create: function(input){
336
- return {
337
- item: input
338
- }
339
- }
340
  });
 
341
  });
342
  </script>
343
  </fieldset>
@@ -363,10 +437,12 @@ function gmedia_import(){
363
 
364
  <div class="tab-inside">
365
  <h5><?php _e('Sever folders') ?>:</h5>
 
366
  <div id="file_browser"></div>
367
  </div>
368
  <div class="tab-footer">
369
- <div class="checkbox pull-left"><label><input type="checkbox" name="delete_source" value="1"/> <?php _e('delete source files after importing') ?></label></div>
 
370
  <button class="pull-right btn btn-info gmedia-import" type="button" name="import-folder"><?php _e('Import folder', 'gmLang'); ?></button>
371
  </div>
372
  <script type="text/javascript">
@@ -390,23 +466,26 @@ function gmedia_import(){
390
  $import['flagallery'] = $wpdb->get_results("SELECT gid, title, galdesc FROM `{$wpdb->prefix}flag_gallery`");
391
  if(!empty($import['flagallery'])){
392
  ?>
393
- <div class="tab-inside">
394
- <p><?php _e('If Album is not specified, then gallery name will be used as Album') ?></p>
395
- <h5><?php _e('Flagallery Galleries') ?>: <small>(<a href="#toggle-flaggalery" class="gm-toggle-cb"><?php _e('Toggle checkboxes', 'gmLang') ?></a>)</small></h5>
396
- <div id="toggle-flaggalery">
397
- <?php foreach($import['flagallery'] as $gallery){ ?>
398
- <div class="checkbox">
399
- <label><input type="checkbox" name="gallery[]" value="<?php echo $gallery->gid ?>"/> <span><?php echo esc_html($gallery->title); ?></span></label>
400
- <?php /* if(!empty($gallery->galdesc)){
 
 
401
  echo '<div class="help-block"> ' . stripslashes($gallery->galdesc) . '</div>';
402
- } */ ?>
403
- </div>
404
- <?php } ?>
 
 
 
 
 
405
  </div>
406
- </div>
407
- <div class="tab-footer">
408
- <button class="pull-right btn btn-info gmedia-import" type="button" name="import-flagallery"><?php _e('Import', 'gmLang'); ?></button>
409
- </div>
410
  <?php } else{ ?>
411
  <p class="tab-inside"><?php _e('There are no created galleries in this plugin.', 'gmLang') ?></p>
412
  <?php } ?>
@@ -419,23 +498,26 @@ function gmedia_import(){
419
  $import['nextgen'] = $wpdb->get_results("SELECT gid, title, galdesc FROM `{$wpdb->prefix}ngg_gallery`");
420
  if(!empty($import['nextgen'])){
421
  ?>
422
- <div class="tab-inside">
423
- <p><?php _e('If Album is not specified, then gallery name will be used as Album') ?></p>
424
- <h5><?php _e('Flagallery Galleries') ?>: <small>(<a href="#toggle-nextgen" class="gm-toggle-cb"><?php _e('Toggle checkboxes', 'gmLang') ?></a>)</small></h5>
425
- <div id="toggle-nextgen">
426
- <?php foreach($import['nextgen'] as $gallery){ ?>
427
- <div class="checkbox">
428
- <label><input type="checkbox" name="gallery[]" value="<?php echo $gallery->gid ?>"/> <span><?php echo esc_html($gallery->title); ?></span></label>
429
- <?php /* if(!empty($gallery->galdesc)){
 
 
430
  echo '<div class="help-block"> ' . stripslashes($gallery->galdesc) . '</div>';
431
- } */ ?>
432
- </div>
433
- <?php } ?>
 
 
 
 
 
434
  </div>
435
- </div>
436
- <div class="tab-footer">
437
- <button class="pull-right btn btn-info gmedia-import" type="button" name="import-nextgen"><?php _e('Import', 'gmLang'); ?></button>
438
- </div>
439
  <?php } else{ ?>
440
  <p class="tab-inside"><?php _e('There are no created galleries in this plugin.', 'gmLang') ?></p>
441
  <?php } ?>
@@ -464,9 +546,10 @@ function gmedia_import(){
464
  <iframe name="import_window" id="import_window" src="about:blank" width="100%" height="300" onload="gmedia_import_done()"></iframe>
465
  </div>
466
  <div class="modal-footer">
467
- <button type="button" id="import-done" class="btn btn-primary" data-dismiss="modal" data-complete-text="<?php _e( 'Close', 'gmLang' ); ?>" disabled="disabled"><?php _e( 'Working...', 'gmLang' ); ?></button>
468
  </div>
469
- </div><!-- /.modal-content -->
 
470
  </div>
471
  </div>
472
  <?php
19
  <div class="btn-toolbar pull-left">
20
  <div class="btn-group">
21
  <a class="btn btn<?php echo ($tab == 'upload')? '-primary active' : '-default'; ?>" href="<?php echo $gmCore->get_admin_url(array(), array('tab'));; ?>"><?php _e('Upload Files', 'gmLang'); ?></a>
22
+ <?php if($gmCore->caps['gmedia_import']){ ?>
23
+ <a class="btn btn<?php echo ($tab == 'import')? '-primary active' : '-default'; ?>" href="<?php echo $gmCore->get_admin_url(array('tab' => 'import')); ?>"><?php _e('Import', 'gmLang'); ?></a><?php } ?>
24
  </div>
25
  </div>
26
  <?php } ?>
57
 
58
 
59
  function gmedia_upload_files(){
60
+ global $gmCore, $gmDB, $gmProcessor, $gmGallery, $user_ID;
61
+
62
+ if(!$gmCore->caps['gmedia_upload']){
63
+ _e('You do not have permissions to upload media', 'gmLang');
64
+
65
+ return;
66
+ }
67
 
68
  $maxupsize = wp_max_upload_size();
69
  $maxupsize = floor($maxupsize * 0.99);
73
 
74
  ?>
75
  <form class="row" id="gmUpload" name="upload_form" method="POST" accept-charset="utf-8" onsubmit="return false;">
76
+ <div class="col-md-4" id="uploader_multipart_params">
77
+ <br/>
78
+ <?php if('false' == $gm_screen_options['uploader_chunking'] || ('html4' == $gm_screen_options['uploader_runtime'])){ ?>
79
+ <p class="clearfix text-right"><span class="label label-default"><?php echo __('Maximum file size', 'gmLang') . ": {$maxupsize_mb}Mb"; ?></span></p>
80
+ <?php } else{ ?>
81
+ <p class="clearfix text-right hidden">
82
+ <span class="label label-default"><?php echo __('Maximum $_POST size', 'gmLang') . ": {$maxupsize_mb}Mb"; ?></span>
83
+ <span class="label label-default"><?php echo __('Chunk size', 'gmLang') . ': ' . min($maxupsize_mb, $gm_screen_options['uploader_chunk_size']) . 'Mb'; ?></span>
84
+ </p>
85
+ <?php } ?>
86
 
87
+ <div class="form-group">
88
+ <label><?php _e('Title', 'gmLang'); ?></label>
89
+ <select name="set_title" class="form-control input-sm">
90
+ <option value="exif"><?php _e('EXIF or File Name', 'gmLang'); ?></option>
91
+ <option value="filename"><?php _e('File Name', 'gmLang'); ?></option>
92
+ <option value="empty"><?php _e('Empty', 'gmLang'); ?></option>
93
+ </select>
94
+ </div>
95
+ <div class="form-group">
96
+ <label><?php _e('Status', 'gmLang'); ?></label>
97
+ <select name="set_status" class="form-control input-sm">
98
+ <option value="inherit"><?php _e('Same as Album or Public', 'gmLang'); ?></option>
99
+ <option value="public"><?php _e('Public', 'gmLang'); ?></option>
100
+ <option value="private"><?php _e('Private', 'gmLang'); ?></option>
101
+ <option value="draft"><?php _e('Draft', 'gmLang'); ?></option>
102
+ </select>
103
+ </div>
104
+
105
+ <hr />
106
 
107
+ <?php if($gmCore->caps['gmedia_terms']){ ?>
108
  <div class="form-group">
109
  <?php
110
  $term_type = 'gmedia_category';
117
  }
118
  }
119
  ?>
120
+ <label><?php _e('Assign Category', 'gmLang'); ?>
121
+ <small><?php _e('(for images only)') ?></small>
122
+ </label>
123
  <select id="gmedia_category" name="terms[gmedia_category]" class="form-control input-sm">
124
  <option value=""><?php _e('Uncategorized', 'gmLang'); ?></option>
125
  <?php echo $terms_category; ?>
126
  </select>
127
  </div>
 
128
  <div class="form-group">
129
  <?php
130
  $term_type = 'gmedia_album';
131
+ $gm_terms = $gmDB->get_terms($term_type, array('global' => array(0, $user_ID), 'orderby' => 'global_desc_name'));
132
 
133
  $terms_album = '';
134
  if(count($gm_terms)){
135
  foreach($gm_terms as $term){
136
+ $terms_album .= '<option value="' . esc_attr($term->term_id) . '">' . esc_html($term->name) . ($term->global? '' : __(' (shared)', 'gmLang')) . ('public' == $term->status? '' : " [{$term->status}]") . '</option>' . "\n";
137
  }
138
  }
139
  ?>
143
  <?php echo $terms_album; ?>
144
  </select>
145
  </div>
 
146
  <div class="form-group">
147
  <?php
148
  $term_type = 'gmedia_tag';
149
  $gm_terms = $gmDB->get_terms($term_type, array('fields' => 'names'));
150
  ?>
151
  <label><?php _e('Add Tags', 'gmLang'); ?> </label>
152
+ <input id="combobox_gmedia_tag" name="terms[gmedia_tag]" class="form-control input-sm" value="" placeholder="<?php _e('Add Tags...', 'gmLang'); ?>"/>
153
  </div>
154
+ <?php } else{ ?>
155
+ <p><?php _e('You are not allowed to assign terms', 'gmLang') ?></p>
156
+ <?php } ?>
157
 
158
+ <script type="text/javascript">
159
+ jQuery(function($){
160
+ <?php if($gmCore->caps['gmedia_terms']){ ?>
161
+ $('#combobox_gmedia_album').selectize({
162
+ <?php if($gmCore->caps['gmedia_album_manage']){ ?>
163
+ create: true,
164
+ createOnBlur: true,
165
+ <?php } else{ ?>
166
+ create: false,
167
+ <?php } ?>
168
+ persist: false
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
169
  });
170
+ var gm_terms = <?php echo json_encode($gm_terms); ?>;
171
+ var items = gm_terms.map(function(x){
172
+ return { item: x };
173
+ });
174
+ $('#combobox_gmedia_tag').selectize({
175
+ <?php if($gmCore->caps['gmedia_tag_manage']){ ?>
176
+ create: function(input){
177
+ return {
178
+ item: input
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
179
  }
180
+ },
181
+ createOnBlur: true,
182
+ <?php } else{ ?>
183
+ create: false,
184
+ <?php } ?>
185
+ delimiter: ',',
186
+ maxItems: null,
187
+ openOnFocus: false,
188
+ persist: false,
189
+ options: items,
190
+ labelField: 'item',
191
+ valueField: 'item',
192
+ hideSelected: true
193
+ });
194
+ <?php } ?>
195
+ $('#uploader_runtime select').change(function(){
196
+ if('html4' == $(this).val()){
197
+ $('#uploader_chunking').addClass('hide');
198
+ $('#uploader_urlstream_upload').addClass('hide');
199
+ } else{
200
+ $('#uploader_chunking').removeClass('hide');
201
+ $('#uploader_urlstream_upload').removeClass('hide');
202
+ }
203
+ });
204
+ });
205
+ </script>
206
+ </div>
207
+ <div class="col-md-8" id="pluploadUploader">
208
+ <p><?php _e("You browser doesn't have Flash or HTML5 support. Check also if page have no JavaScript errors.", 'gmLang'); ?></p>
209
+ <?php
210
+ $mime_types = get_allowed_mime_types($user_ID);
211
+ $type_ext = array();
212
+ $filters = array();
213
+ foreach($mime_types as $ext => $mime){
214
+ $type = strtok($mime, '/');
215
+ $type_ext[$type][] = $ext;
216
+ }
217
+ foreach($type_ext as $filter => $ext){
218
+ $filters[] = array(
219
+ 'title' => $filter,
220
+ 'extensions' => str_replace('|', ',', implode(',', $ext))
221
+ );
222
+ }
223
+ ?>
224
+ <script type="text/javascript">
225
+ // Convert divs to queue widgets when the DOM is ready
226
+ jQuery(function($){
227
+ $("#pluploadUploader").plupload({
228
+ <?php if('auto' != $gm_screen_options['uploader_runtime']){ ?>
229
+ runtimes: '<?php echo $gm_screen_options['uploader_runtime']; ?>',
230
+ <?php } ?>
231
+ url: '<?php echo wp_nonce_url($gmCore->gmedia_url . '/admin/upload.php', 'grandMedia' ); ?>',
232
+ <?php if(('true' == $gm_screen_options['uploader_urlstream_upload']) && ('html4' != $gm_screen_options['uploader_runtime'])){ ?>
233
+ urlstream_upload: true,
234
+ multipart: false,
235
+ <?php } else{ ?>
236
+ multipart: true,
237
+ <?php } ?>
238
+ multipart_params: { params: ''},
239
+ <?php if('true' == $gm_screen_options['uploader_chunking'] && ('html4' != $gm_screen_options['uploader_runtime'])){ ?>
240
+ max_file_size: '2000Mb',
241
+ chunk_size: 200000<?php //echo min($maxupsize, $gm_screen_options['uploader_chunk_size']*1024*1024); ?>,
242
+ <?php } else{ ?>
243
+ max_file_size: <?php echo $maxupsize; ?>,
244
+ <?php } ?>
245
+ max_retries: 2,
246
+ unique_names: false,
247
+ rename: true,
248
+ sortable: true,
249
+ dragdrop: true,
250
+ views: {
251
+ list: true,
252
+ thumbs: true,
253
+ active: 'thumbs'
254
+ },
255
+ filters: <?php echo json_encode($filters); ?>,
256
+ flash_swf_url: '<?php echo $gmCore->gmedia_url; ?>/assets/plupload/Moxie.swf',
257
+ silverlight_xap_url: '<?php echo $gmCore->gmedia_url; ?>/assets/plupload/Moxie.xap'
258
 
259
  });
260
+ var closebtn = '<button type="button" class="close" data-dismiss="alert" aria-hidden="true">&times;</button>';
261
+ var uploader = $("#pluploadUploader").plupload('getUploader');
262
+ uploader.bind('StateChanged', function(up){
263
+ if(up.state == plupload.STARTED){
264
+ up.settings.multipart_params = { params: jQuery('#uploader_multipart_params :input').serialize() };
265
+ }
266
+ console.log('[StateChanged]', up.state, up.settings.multipart_params);
267
+ });
268
+ uploader.bind('ChunkUploaded', function(up, file, info){
269
+ console.log('[ChunkUploaded] File:', file, "Info:", info);
270
+ var response = jQuery.parseJSON(info.response);
271
+ if(response && response.error){
272
+ up.stop();
273
+ file.status = plupload.FAILED;
274
+ jQuery('<div/>').addClass('alert alert-danger alert-dismissable').html(closebtn + '<strong>' + response.id + ':</strong> ' + response.error.message).appendTo('#gmedia-msg-panel');
275
+ console.log(response.error);
276
+ up.trigger('QueueChanged StateChanged');
277
+ up.trigger('UploadProgress', file);
278
+ up.start();
279
+ }
280
+ });
281
+ uploader.bind('FileUploaded', function(up, file, info){
282
+ console.log('[FileUploaded] File:', file, "Info:", info);
283
+ var response = jQuery.parseJSON(info.response);
284
+ if(response && response.error){
285
+ file.status = plupload.FAILED;
286
+ jQuery('<div/>').addClass('alert alert-danger alert-dismissable').html(closebtn + '<strong>' + response.id + ':</strong> ' + response.error.message).appendTo('#gmedia-msg-panel');
287
+ console.log(response.error);
288
+ }
289
+ });
290
+ uploader.bind('UploadProgress', function(up, file){
291
+ var percent = uploader.total.percent;
292
+ $('#total-progress-info .progress-bar').css('width', percent + "%").attr('aria-valuenow', percent);
293
+ });
294
+ uploader.bind('Error', function(up, args){
295
+ console.log('[Error] ', args);
296
+ jQuery('<div/>').addClass('alert alert-danger alert-dismissable').html(closebtn + '<strong>' + args.file.name + ':</strong> ' + args.message + ' ' + args.status).appendTo('#gmedia-msg-panel');
297
+ });
298
+ uploader.bind('UploadComplete', function(up, files){
299
+ console.log('[UploadComplete]', files);
300
+ $('#total-progress-info .progress-bar').css('width', '0').attr('aria-valuenow', '0');
301
+ });
302
+
303
+ });
304
+ </script>
305
+ </div>
306
  </form>
307
  <?php
308
  }
309
 
310
 
311
  function gmedia_import(){
312
+ global $wpdb, $gmCore, $gmGallery, $gmDB, $user_ID;
313
+
314
+ if(!$gmCore->caps['gmedia_import']){
315
+ _e('You do not have permissions to import media', 'gmLang');
316
+
317
+ return;
318
+ }
319
+
320
  $gmediaURL = plugins_url(GMEDIA_FOLDER);
321
  ?>
322
  <form class="row" id="import_form" name="import_form" target="import_window" action="<?php echo $gmCore->gmedia_url; ?>/admin/import.php" method="POST" accept-charset="utf-8" style="padding:20px 0 10px;">
324
  <fieldset id="import_params" class="import-params">
325
  <?php wp_nonce_field('GmediaImport'); ?>
326
  <input type="hidden" id="import-action" name="import" value=""/>
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
327
 
328
+ <?php if($gmCore->caps['gmedia_terms']){ ?>
329
+ <div class="form-group">
330
+ <?php
331
+ $term_type = 'gmedia_category';
332
+ $gm_terms = $gmGallery->options['taxonomies'][$term_type];
333
 
334
+ $terms_category = '';
335
+ if(count($gm_terms)){
336
+ foreach($gm_terms as $term_name => $term_title){
337
+ $terms_category .= '<option value="' . $term_name . '">' . esc_html($term_title) . '</option>' . "\n";
338
+ }
339
  }
340
+ ?>
341
+ <label><?php _e('Assign Category', 'gmLang'); ?>
342
+ <small><?php _e('(for images only)') ?></small>
343
+ </label>
344
+ <select id="gmedia_category" name="terms[gmedia_category]" class="form-control input-sm">
345
+ <option value=""><?php _e('Uncategorized', 'gmLang'); ?></option>
346
+ <?php echo $terms_category; ?>
347
+ </select>
348
+ </div>
349
+ <div class="form-group">
350
+ <?php
351
+ $term_type = 'gmedia_album';
352
+ $gm_terms = $gmDB->get_terms($term_type, array('global' => array(0, $user_ID), 'orderby' => 'global_desc_name'));
 
 
 
 
353
 
354
+ $terms_album = '';
355
+ if(count($gm_terms)){
356
+ foreach($gm_terms as $term){
357
+ $terms_album .= '<option value="' . esc_attr($term->term_id) . '">' . esc_html($term->name) . ($term->global? '' : __(' (shared)', 'gmLang')) . ('public' == $term->status? '' : " [{$term->status}]") . '</option>' . "\n";
358
+ }
359
+ }
360
+ ?>
361
+ <label><?php _e('Add to Album', 'gmLang'); ?> </label>
362
+ <select id="combobox_gmedia_album" name="terms[gmedia_album]" class="form-control input-sm" placeholder="<?php _e('Album Name...', 'gmLang'); ?>">
363
+ <option value=""></option>
364
+ <?php echo $terms_album; ?>
365
+ </select>
366
+ </div>
367
+ <div class="form-group">
368
+ <?php
369
+ $term_type = 'gmedia_tag';
370
+ $gm_terms = $gmDB->get_terms($term_type, array('fields' => 'names'));
371
+ ?>
372
+ <label><?php _e('Add Tags', 'gmLang'); ?> </label>
373
+ <input id="combobox_gmedia_tag" name="terms[gmedia_tag]" class="form-control input-sm" value="" placeholder="<?php _e('Add Tags...', 'gmLang'); ?>"/>
374
+ </div>
375
+ <?php } else{ ?>
376
+ <p><?php _e('You are not allowed to assign terms', 'gmLang') ?></p>
377
+ <?php } ?>
378
  <script type="text/javascript">
379
  jQuery(function($){
380
+ <?php if($gmCore->caps['gmedia_terms']){ ?>
381
  $('#combobox_gmedia_album').selectize({
382
+ <?php if($gmCore->caps['gmedia_album_manage']){ ?>
383
  create: true,
384
  createOnBlur: true,
385
+ <?php } else{ ?>
386
+ create: false,
387
+ <?php } ?>
388
  persist: false
389
  });
390
  var gm_terms = <?php echo json_encode($gm_terms); ?>;
391
  var items = gm_terms.map(function(x){
392
+ return { item: x };
393
+ });
394
  $('#combobox_gmedia_tag').selectize({
395
+ <?php if($gmCore->caps['gmedia_tag_manage']){ ?>
396
+ create: function(input){
397
+ return {
398
+ item: input
399
+ }
400
+ },
401
+ createOnBlur: true,
402
+ <?php } else{ ?>
403
+ create: false,
404
+ <?php } ?>
405
  delimiter: ',',
406
  maxItems: null,
 
407
  openOnFocus: false,
408
  persist: false,
409
  options: items,
410
  labelField: 'item',
411
  valueField: 'item',
412
+ hideSelected: true
 
 
 
 
 
413
  });
414
+ <?php } ?>
415
  });
416
  </script>
417
  </fieldset>
437
 
438
  <div class="tab-inside">
439
  <h5><?php _e('Sever folders') ?>:</h5>
440
+
441
  <div id="file_browser"></div>
442
  </div>
443
  <div class="tab-footer">
444
+ <div class="checkbox pull-left"><label><input type="checkbox" name="delete_source" value="1"/> <?php _e('delete source files after importing') ?>
445
+ </label></div>
446
  <button class="pull-right btn btn-info gmedia-import" type="button" name="import-folder"><?php _e('Import folder', 'gmLang'); ?></button>
447
  </div>
448
  <script type="text/javascript">
466
  $import['flagallery'] = $wpdb->get_results("SELECT gid, title, galdesc FROM `{$wpdb->prefix}flag_gallery`");
467
  if(!empty($import['flagallery'])){
468
  ?>
469
+ <div class="tab-inside">
470
+ <p><?php _e('If Album is not specified, then gallery name will be used as Album') ?></p>
471
+ <h5><?php _e('Flagallery Galleries') ?>:
472
+ <small>(<a href="#toggle-flaggalery" class="gm-toggle-cb"><?php _e('Toggle checkboxes', 'gmLang') ?></a>)</small>
473
+ </h5>
474
+ <div id="toggle-flaggalery">
475
+ <?php foreach($import['flagallery'] as $gallery){ ?>
476
+ <div class="checkbox">
477
+ <label><input type="checkbox" name="gallery[]" value="<?php echo $gallery->gid ?>"/> <span><?php echo esc_html($gallery->title); ?></span></label>
478
+ <?php /* if(!empty($gallery->galdesc)){
479
  echo '<div class="help-block"> ' . stripslashes($gallery->galdesc) . '</div>';
480
+ } */
481
+ ?>
482
+ </div>
483
+ <?php } ?>
484
+ </div>
485
+ </div>
486
+ <div class="tab-footer">
487
+ <button class="pull-right btn btn-info gmedia-import" type="button" name="import-flagallery"><?php _e('Import', 'gmLang'); ?></button>
488
  </div>
 
 
 
 
489
  <?php } else{ ?>
490
  <p class="tab-inside"><?php _e('There are no created galleries in this plugin.', 'gmLang') ?></p>
491
  <?php } ?>
498
  $import['nextgen'] = $wpdb->get_results("SELECT gid, title, galdesc FROM `{$wpdb->prefix}ngg_gallery`");
499
  if(!empty($import['nextgen'])){
500
  ?>
501
+ <div class="tab-inside">
502
+ <p><?php _e('If Album is not specified, then gallery name will be used as Album') ?></p>
503
+ <h5><?php _e('Flagallery Galleries') ?>:
504
+ <small>(<a href="#toggle-nextgen" class="gm-toggle-cb"><?php _e('Toggle checkboxes', 'gmLang') ?></a>)</small>
505
+ </h5>
506
+ <div id="toggle-nextgen">
507
+ <?php foreach($import['nextgen'] as $gallery){ ?>
508
+ <div class="checkbox">
509
+ <label><input type="checkbox" name="gallery[]" value="<?php echo $gallery->gid ?>"/> <span><?php echo esc_html($gallery->title); ?></span></label>
510
+ <?php /* if(!empty($gallery->galdesc)){
511
  echo '<div class="help-block"> ' . stripslashes($gallery->galdesc) . '</div>';
512
+ } */
513
+ ?>
514
+ </div>
515
+ <?php } ?>
516
+ </div>
517
+ </div>
518
+ <div class="tab-footer">
519
+ <button class="pull-right btn btn-info gmedia-import" type="button" name="import-nextgen"><?php _e('Import', 'gmLang'); ?></button>
520
  </div>
 
 
 
 
521
  <?php } else{ ?>
522
  <p class="tab-inside"><?php _e('There are no created galleries in this plugin.', 'gmLang') ?></p>
523
  <?php } ?>
546
  <iframe name="import_window" id="import_window" src="about:blank" width="100%" height="300" onload="gmedia_import_done()"></iframe>
547
  </div>
548
  <div class="modal-footer">
549
+ <button type="button" id="import-done" class="btn btn-primary" data-dismiss="modal" data-complete-text="<?php _e('Close', 'gmLang'); ?>" disabled="disabled"><?php _e('Working...', 'gmLang'); ?></button>
550
  </div>
551
+ </div>
552
+ <!-- /.modal-content -->
553
  </div>
554
  </div>
555
  <?php
admin/admin.php CHANGED
@@ -1,31 +1,29 @@
1
  <?php
 
2
  /**
3
  * GmediaAdmin - Admin Section for GRAND Media
4
  *
5
  */
6
- class GmediaAdmin {
7
  var $pages = array();
8
 
9
  /**
10
  * constructor
11
  */
12
- function __construct() {
13
  global $pagenow;
14
 
15
  // Add the admin menu
16
- add_action( 'admin_menu', array( &$this, 'add_menu' ) );
17
 
18
  // Add the script and style files
19
- add_action( 'admin_enqueue_scripts', array( &$this, 'load_scripts' ) );
20
 
21
- add_filter( 'screen_settings', array( &$this, 'screen_settings' ), 10, 2 );
22
- add_filter( 'set-screen-option', array( &$this, 'screen_settings_save'), 11, 3);
23
 
24
- if ( ('admin.php' == $pagenow)
25
- && isset($_GET['page'])
26
- && (false !== strpos( $_GET['page'], 'GrandMedia' ))
27
- && isset($_GET['gmediablank']) ) {
28
- add_action( 'admin_init', array( &$this, 'gmedia_blank_page' ) );
29
  }
30
 
31
  }
@@ -33,7 +31,7 @@ class GmediaAdmin {
33
  /**
34
  * Load gmedia pages in wpless interface
35
  */
36
- function gmedia_blank_page() {
37
  set_current_screen('GrandMedia_Settings');
38
 
39
  global $gmCore;
@@ -43,18 +41,18 @@ class GmediaAdmin {
43
  $gmediablank = isset($_GET['gmediablank'])? $_GET['gmediablank'] : '';
44
  return "gmedia-blank $gmediablank"; });
45
  */
46
- add_filter('admin_body_class', create_function( '', '$gmediablank = isset($_GET["gmediablank"])? $_GET["gmediablank"] : ""; return "gmedia-blank $gmediablank";' ));
47
  define('IFRAME_REQUEST', true);
48
 
49
  iframe_header('GmediaGallery');
50
 
51
  switch($gmediablank){
52
  case 'update_plugin':
53
- require_once( dirname(dirname( __FILE__ )) . '/update.php' );
54
  gmedia_do_update();
55
  break;
56
  case 'image_editor':
57
- require_once( dirname(dirname( __FILE__ )) . '/inc/image-editor.php' );
58
  gmedia_image_editor();
59
  break;
60
  }
@@ -71,21 +69,46 @@ class GmediaAdmin {
71
  }
72
 
73
  // integrate the menu
74
- function add_menu() {
75
- $gmediaURL = plugins_url( GMEDIA_FOLDER );
76
- $this->pages = array(
77
- add_object_page( __( 'Gmedia Library', 'gmLang' ), 'Gmedia Gallery', 'edit_pages', 'GrandMedia', array( &$this, 'shell' ), $gmediaURL . '/admin/images/gm-icon.png' ),
78
- add_submenu_page( 'GrandMedia', __( 'Gmedia Library', 'gmLang' ), __( 'Gmedia Library', 'gmLang' ), 'edit_pages', 'GrandMedia', array( &$this, 'shell' ) ),
79
- add_submenu_page( 'GrandMedia', __( 'Add Media Files', 'gmLang' ), __( 'Add/Import Files', 'gmLang' ), 'edit_pages', 'GrandMedia_AddMedia', array( &$this, 'shell' ) ),
80
- add_submenu_page( 'GrandMedia', __( 'Albums, Tags...', 'gmLang' ), __( 'Albums, Tags...', 'gmLang' ), 'edit_pages', 'GrandMedia_Terms', array( &$this, 'shell' ) ),
81
- add_submenu_page( 'GrandMedia', __( 'Gmedia Galleries', 'gmLang' ), __( 'Create/Manage Galleries...', 'gmLang' ), 'edit_pages', 'GrandMedia_Galleries', array( &$this, 'shell' ) ),
82
- add_submenu_page( 'GrandMedia', __( 'Modules', 'gmLang' ), __( 'Modules', 'gmLang' ), 'edit_pages', 'GrandMedia_Modules', array( &$this, 'shell' ) ),
83
- add_submenu_page( 'GrandMedia', __( 'Gmedia Settings', 'gmLang' ), __( 'Settings', 'gmLang' ), 'edit_pages', 'GrandMedia_Settings', array( &$this, 'shell' ) ),
84
- add_submenu_page( 'GrandMedia', __( 'Wordpress Media Library', 'gmLang' ), __( 'WP Media Library', 'gmLang' ), 'edit_pages', 'GrandMedia_WordpressLibrary', array( &$this, 'shell' ) )
85
- );
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
86
 
87
  foreach($this->pages as $page){
88
- add_action("load-$page", array( &$this, 'screen_help' ));
89
  }
90
  }
91
 
@@ -93,13 +116,13 @@ class GmediaAdmin {
93
  * Load the script for the defined page and load only this code
94
  * Display shell of plugin
95
  */
96
- function shell() {
97
  global $gmProcessor;
98
 
99
  // check for upgrade
100
- if ( get_option( 'gmediaDbVersion' ) != GMEDIA_DBVERSION ) {
101
  if(isset($_GET['do_update']) && ('gmedia' == $_GET['do_update'])){
102
- $update_frame = '<iframe name="gmedia_update" id="gmedia_update" width="100%" height="500" src="'.admin_url('admin.php?page=GrandMedia&gmediablank=update_plugin').'"></iframe>';
103
  $gmProcessor->page = 'GrandMedia_Update';
104
  } else{
105
  return;
@@ -114,7 +137,9 @@ class GmediaAdmin {
114
  ?>
115
  <div id="gmedia-container">
116
  <div id="gmedia-header" class="clearfix">
117
- <div id="gmedia-logo">Gmedia<small> by CodEasily.com </small></div>
 
 
118
  <h2><?php echo $sideLinks['grandTitle']; ?></h2>
119
  </div>
120
  <div id="gm-message"></div>
@@ -128,7 +153,8 @@ class GmediaAdmin {
128
  echo $gmProcessor->alert('success', $gmProcessor->msg);
129
  echo $gmProcessor->alert('danger', $gmProcessor->error);
130
 
131
- if(isset($update_frame)){ ?>
 
132
  <div class="panel panel-default">
133
  <div class="panel-body"><?php echo $update_frame; ?></div>
134
  </div>
@@ -144,22 +170,21 @@ class GmediaAdmin {
144
  <?php
145
  }
146
 
147
- function sideLinks() {
148
  global $submenu, $gmProcessor;
149
  $content['sideLinks'] = '
150
  <div id="gmedia-navbar">
151
  <div class="row">
152
  <ul class="list-group">';
153
- foreach ( $submenu['GrandMedia'] as $menuKey => $menuItem ) {
154
- if ( $submenu['GrandMedia'][$menuKey][2] == $gmProcessor->page ) {
155
- $iscur = ' active';
156
  $content['grandTitle'] = $submenu['GrandMedia'][$menuKey][3];
157
- }
158
- else {
159
  $iscur = '';
160
  }
161
 
162
- $content['sideLinks'] .= "\n".'<a class="list-group-item' . $iscur . '" href="' . admin_url( 'admin.php?page=' . $submenu['GrandMedia'][$menuKey][2] ) . '">' . $submenu['GrandMedia'][$menuKey][0] . '</a>';
163
  }
164
  $content['sideLinks'] .= '
165
  </ul>
@@ -169,17 +194,17 @@ class GmediaAdmin {
169
  return $content;
170
  }
171
 
172
- function controller() {
173
 
174
  global $gmProcessor;
175
- switch ( $gmProcessor->page ) {
176
  case 'GrandMedia_AddMedia':
177
- include_once ( dirname( __FILE__ ) . '/addmedia.php' );
178
  gmedia_AddMedia();
179
  break;
180
  case 'GrandMedia_Terms':
181
  include_once(dirname(__FILE__) . '/terms.php');
182
- if ( isset( $_GET['edit_album'] ) ) {
183
  gmediaAlbumEdit();
184
  } else{
185
  gmediaTerms();
@@ -198,16 +223,16 @@ class GmediaAdmin {
198
  gmediaModules();
199
  break;
200
  case 'GrandMedia_Settings':
201
- include_once ( dirname( __FILE__ ) . '/settings.php' );
202
  gmSettings();
203
  break;
204
  case 'GrandMedia_WordpressLibrary':
205
- include_once ( dirname( __FILE__ ) . '/wpmedia.php' );
206
  grandWPMedia();
207
  break;
208
  case 'GrandMedia':
209
  default:
210
- include_once ( dirname( __FILE__ ) . '/gmedia.php' );
211
  gmediaLib();
212
  break;
213
  }
@@ -216,54 +241,59 @@ class GmediaAdmin {
216
  /**
217
  * @param $hook
218
  */
219
- function load_scripts( $hook ) {
220
  global $gmCore, $gmProcessor;
221
 
222
  // no need to go on if it's not a plugin page
223
- if ( 'admin.php' != $hook && strpos( $gmCore->_get( 'page' ), 'GrandMedia' ) === false )
224
  return;
 
225
 
226
- wp_enqueue_style( 'gmedia-bootstrap' );
227
  //wp_enqueue_style( 'gmedia-bootstrap-theme' );
228
- wp_enqueue_script( 'gmedia-bootstrap' );
229
 
230
  //wp_enqueue_script( 'outside-events' );
231
 
232
- if ( isset( $_GET['page'] ) ) {
233
- switch ( $_GET['page'] ) {
234
  case "GrandMedia" :
235
- if($gmCore->_get('gmediablank') == 'image_editor'){
236
- wp_enqueue_script('camanjs', $gmCore->gmedia_url . '/assets/image-editor/camanjs/caman.full.min.js', array(), '4.1.1');
 
237
 
238
- wp_enqueue_style('nouislider', $gmCore->gmedia_url . '/assets/image-editor/js/jquery.nouislider.css', array('gmedia-bootstrap'), '6.1.0');
239
- wp_enqueue_script('nouislider', $gmCore->gmedia_url . '/assets/image-editor/js/jquery.nouislider.min.js', array('jquery'), '6.1.0');
240
 
241
- wp_enqueue_style('gmedia-image-editor', $gmCore->gmedia_url . '/assets/image-editor/style.css', array('gmedia-bootstrap'), '0.9.16', 'screen');
242
- wp_enqueue_script('gmedia-image-editor', $gmCore->gmedia_url . '/assets/image-editor/image-editor.js', array('jquery','camanjs'), '0.9.16');
243
- break;
 
 
 
 
 
 
 
 
 
 
 
 
244
  }
245
- wp_enqueue_style('selectize', $gmCore->gmedia_url . '/assets/selectize/selectize.bootstrap3.css', array('gmedia-bootstrap'), '0.8.5', 'screen');
246
- wp_enqueue_script('selectize', $gmCore->gmedia_url . '/assets/selectize/selectize.min.js', array('jquery'), '0.8.5');
247
-
248
- if($gmProcessor->mode){
249
- wp_enqueue_script( 'alphanum', $gmCore->gmedia_url . '/assets/jq-plugins/jquery.alphanum.js', array( 'jquery' ), '1.0.16' );
250
-
251
- wp_enqueue_script( 'moment', $gmCore->gmedia_url . '/assets/bootstrap-datetimepicker/moment.min.js', array( 'jquery' ), '2.5.1' );
252
- wp_enqueue_style( 'datetimepicker', $gmCore->gmedia_url . '/assets/bootstrap-datetimepicker/bootstrap-datetimepicker.min.css', array('gmedia-bootstrap'), '2.1.32' );
253
- wp_enqueue_script( 'datetimepicker', $gmCore->gmedia_url . '/assets/bootstrap-datetimepicker/bootstrap-datetimepicker.min.js', array( 'jquery', 'moment', 'gmedia-bootstrap' ), '2.1.32' );
254
-
255
- //wp_enqueue_style( 'thickbox' );
256
- //wp_enqueue_script( 'thickbox' );
257
  }
258
- //wp_enqueue_style( 'mediaelement' );
259
- //wp_enqueue_script( 'mediaelement' );
260
  break;
261
  case "GrandMedia_WordpressLibrary" :
262
- wp_enqueue_style( 'selectize', $gmCore->gmedia_url . '/assets/selectize/selectize.bootstrap3.css', array('gmedia-bootstrap'), '0.8.5', 'screen' );
263
- wp_enqueue_script('selectize', $gmCore->gmedia_url . '/assets/selectize/selectize.min.js', array('jquery'), '0.8.5');
 
 
264
  break;
265
  case "GrandMedia_Terms" :
266
- if($gmCore->_get('edit_album')){
267
  wp_enqueue_style('jquery-ui-smoothness', 'http://ajax.googleapis.com/ajax/libs/jqueryui/1.10.2/themes/smoothness/jquery-ui.min.css', array(), '1.10.2', 'screen');
268
  wp_enqueue_script('jquery-ui-full', 'http://ajax.googleapis.com/ajax/libs/jqueryui/1.10.2/jquery-ui.min.js', array(), '1.10.2');
269
 
@@ -272,42 +302,48 @@ class GmediaAdmin {
272
 
273
  break;
274
  case "GrandMedia_AddMedia" :
275
- wp_enqueue_style( 'selectize', $gmCore->gmedia_url . '/assets/selectize/selectize.bootstrap3.css', array('gmedia-bootstrap'), '0.8.5', 'screen' );
276
- wp_enqueue_script('selectize', $gmCore->gmedia_url . '/assets/selectize/selectize.min.js', array('jquery'), '0.8.5');
277
-
278
- $tab = $gmCore->_get('tab', 'upload');
279
- if($tab == 'upload') {
280
- wp_enqueue_style('jquery-ui-smoothness', 'http://ajax.googleapis.com/ajax/libs/jqueryui/1.10.2/themes/smoothness/jquery-ui.min.css', array(), '1.10.2', 'screen');
281
- wp_enqueue_script('jquery-ui-full', 'http://ajax.googleapis.com/ajax/libs/jqueryui/1.10.2/jquery-ui.min.js', array(), '1.10.2');
 
 
282
 
283
- wp_enqueue_script('gmedia-plupload', $gmCore->gmedia_url . '/assets/plupload/plupload.full.min.js', array('jquery', 'jquery-ui-full'), '2.1.1');
284
 
285
- wp_enqueue_style( 'jquery.ui.plupload', $gmCore->gmedia_url . '/assets/plupload/jquery.ui.plupload/css/jquery.ui.plupload.css', array( 'jquery-ui-smoothness' ), '2.1.1', 'screen' );
286
- wp_enqueue_script( 'jquery.ui.plupload', $gmCore->gmedia_url . '/assets/plupload/jquery.ui.plupload/jquery.ui.plupload.min.js', array( 'gmedia-plupload', 'jquery-ui-full' ), '2.1.1' );
 
 
 
287
 
 
288
  }
289
  break;
290
  case "GrandMedia_Settings" :
291
  // enqueue jscolor
292
  break;
293
  case "GrandMedia_Galleries" :
294
- if(isset($_GET['gallery_module']) || isset($_GET['edit_gallery'])){
295
- wp_enqueue_style( 'selectize', $gmCore->gmedia_url . '/assets/selectize/selectize.bootstrap3.css', array('gmedia-bootstrap'), '0.8.5', 'screen' );
296
- wp_enqueue_script('selectize', $gmCore->gmedia_url . '/assets/selectize/selectize.min.js', array('jquery','jquery-ui-sortable'), '0.8.5');
297
 
298
- wp_enqueue_style( 'jquery.minicolors', $gmCore->gmedia_url . '/assets/minicolors/jquery.minicolors.css', array('gmedia-bootstrap'), '0.9.13');
299
- wp_enqueue_script( 'jquery.minicolors', $gmCore->gmedia_url . '/assets/minicolors/jquery.minicolors.js', array('jquery'), '0.9.13');
300
  }
301
  break;
302
  }
303
  }
304
 
305
- wp_enqueue_style( 'grand-media' );
306
- wp_enqueue_script( 'grand-media' );
307
 
308
  }
309
 
310
- function screen_help() {
311
  $screen = get_current_screen();
312
  $screen_id = explode('page_', $screen->id, 2);
313
  $screen_id = $screen_id[1];
@@ -321,22 +357,22 @@ class GmediaAdmin {
321
  }
322
  */
323
 
324
- $screen->add_help_tab( array(
325
- 'id' => 'help_'.$screen_id.'_support',
326
- 'title' => __('Support'),
327
- 'content' => '<h4>First steps</h4>
328
  <p>If you have any problems with displaying Gmedia Gallery in admin or on website. Before posting to the Forum try next:</p>
329
  <ul>
330
  <li>Exclude plugin conflicts: Disable other plugins one by one and check if it resolve problem</li>
331
  <li>Exclude theme conflict: Temporary switch to one of default themes and check if gallery works</li>
332
  </ul>
333
  <h4>Links</h4>
334
- <p><a href="http://codeasily.com/community/forum/gmedia-gallery-wordpress-plugin/" target="_blank">'.__('Support Forum', 'gmLang').'</a>
335
- | <a href="http://codeasily.com/contact/" target="_blank">'.__('Contact', 'gmLang').'</a>
336
- | <a href="http://codeasily.com/portfolio/gmedia-gallery-modules/" target="_blank">'.__('Demo', 'gmLang').'</a>
337
- | <a href="http://codeasily.com/product/one-site-license/" target="_blank">'.__('Premium', 'gmLang').'</a>
338
  </p>',
339
- ) );
340
 
341
  }
342
 
@@ -346,48 +382,60 @@ class GmediaAdmin {
346
  *
347
  * @return string
348
  */
349
- function screen_settings( $current, $screen ) {
350
  global $gmProcessor, $gmCore;
351
- if ( in_array( $screen->id, $this->pages ) ) {
352
 
353
  $gm_screen_options = $gmProcessor->user_options();
354
 
355
- $title = '<h5><strong>' . __( 'Settings', 'gmLang' ) . '</strong></h5>';
356
- $wp_screen_options = '<input type="hidden" name="wp_screen_options[option]" value="gm_screen_options" /><input type="hidden" name="wp_screen_options[value]" value="'.$screen->id.'" />';
357
- $button = get_submit_button( __( 'Apply', 'gmLang' ), 'button', 'screen-options-apply', false );
358
 
359
  $settings = false;
360
 
361
  $screen_id = explode('page_', $screen->id, 2);
362
 
363
- switch ( $screen_id[1] ) {
364
  case 'GrandMedia' :
365
  $settings = '
366
  <div class="form-inline pull-left">
367
  <div class="form-group">
368
- <input type="number" max="999" min="0" step="5" size="3" name="gm_screen_options[per_page_gmedia]" class="form-control input-sm" style="width: auto;" value="'.$gm_screen_options['per_page_gmedia'].'" /> <span>'.__( 'items per page', 'gmLang' ).'</span>
369
  </div>
370
  <div class="form-group">
371
  <select name="gm_screen_options[orderby_gmedia]" class="form-control input-sm">
372
- <option'.selected($gm_screen_options['orderby_gmedia'], 'ID', false).' value="ID">'.__('ID','gmLang').'</option>
373
- <option'.selected($gm_screen_options['orderby_gmedia'], 'title', false).' value="title">'.__('Title','gmLang').'</option>
374
- <option'.selected($gm_screen_options['orderby_gmedia'], 'date', false).' value="date">'.__('Date','gmLang').'</option>
375
- <option'.selected($gm_screen_options['orderby_gmedia'], 'modified', false).' value="modified">'.__('Last Modified','gmLang').'</option>
376
- <option'.selected($gm_screen_options['orderby_gmedia'], 'mime_type', false).' value="mime_type">'.__('MIME Type','gmLang').'</option>
377
- <option'.selected($gm_screen_options['orderby_gmedia'], 'author', false).' value="author">'.__('Author','gmLang').'</option>
378
- </select> <span>'.__( 'order items', 'gmLang' ).'</span>
379
  </div>
380
  <div class="form-group">
381
  <select name="gm_screen_options[sortorder_gmedia]" class="form-control input-sm">
382
- <option'.selected($gm_screen_options['sortorder_gmedia'], 'DESC', false).' value="DESC">'.__('DESC','gmLang').'</option>
383
- <option'.selected($gm_screen_options['sortorder_gmedia'], 'ASC', false).' value="ASC">'.__('ASC','gmLang').'</option>
384
- </select> <span>'.__( 'sort order', 'gmLang' ).'</span>
 
 
 
 
 
 
 
 
 
385
  </div>
 
 
 
386
  </div>
387
  ';
388
  break;
389
  case 'GrandMedia_WordpressLibrary' :
390
- $settings = '<p>'.__('Set query options for this page to be loaded by default.', 'gmLang').'</p>
391
  <div class="form-inline pull-left">
392
  <div class="form-group">
393
  <input type="number" max="999" min="0" step="5" size="3" name="gm_screen_options[per_page_wpmedia]" class="form-control input-sm" style="width: auto;" value="' . $gm_screen_options['per_page_wpmedia'] . '" /> <span>' . __('items per page', 'gmLang') . '</span>
@@ -444,10 +492,11 @@ class GmediaAdmin {
444
  }
445
 
446
  if($settings){
447
- $current = $title.$settings.$wp_screen_options.$button;
448
  }
449
 
450
  }
 
451
  return $current;
452
  }
453
 
@@ -458,9 +507,9 @@ class GmediaAdmin {
458
  *
459
  * @return array
460
  */
461
- function screen_settings_save( $status, $option, $value) {
462
  global $user_ID;
463
- if ( 'gm_screen_options' == $option ) {
464
  /*
465
  global $gmGallery;
466
  foreach ( $_POST['gm_screen_options'] as $key => $val ) {
@@ -469,9 +518,11 @@ class GmediaAdmin {
469
  update_option( 'gmediaOptions', $gmGallery->options );
470
  */
471
  $gm_screen_options = get_user_meta($user_ID, 'gm_screen_options', true);
472
- if(!is_array($gm_screen_options))
473
  $gm_screen_options = array();
 
474
  $value = array_merge($gm_screen_options, $_POST['gm_screen_options']);
 
475
  return $value;
476
  }
477
 
1
  <?php
2
+
3
  /**
4
  * GmediaAdmin - Admin Section for GRAND Media
5
  *
6
  */
7
+ class GmediaAdmin{
8
  var $pages = array();
9
 
10
  /**
11
  * constructor
12
  */
13
+ function __construct(){
14
  global $pagenow;
15
 
16
  // Add the admin menu
17
+ add_action('admin_menu', array(&$this, 'add_menu'));
18
 
19
  // Add the script and style files
20
+ add_action('admin_enqueue_scripts', array(&$this, 'load_scripts'));
21
 
22
+ add_filter('screen_settings', array(&$this, 'screen_settings'), 10, 2);
23
+ add_filter('set-screen-option', array(&$this, 'screen_settings_save'), 11, 3);
24
 
25
+ if(('admin.php' == $pagenow) && isset($_GET['page']) && (false !== strpos($_GET['page'], 'GrandMedia')) && isset($_GET['gmediablank'])){
26
+ add_action('admin_init', array(&$this, 'gmedia_blank_page'));
 
 
 
27
  }
28
 
29
  }
31
  /**
32
  * Load gmedia pages in wpless interface
33
  */
34
+ function gmedia_blank_page(){
35
  set_current_screen('GrandMedia_Settings');
36
 
37
  global $gmCore;
41
  $gmediablank = isset($_GET['gmediablank'])? $_GET['gmediablank'] : '';
42
  return "gmedia-blank $gmediablank"; });
43
  */
44
+ add_filter('admin_body_class', create_function('', '$gmediablank = isset($_GET["gmediablank"])? $_GET["gmediablank"] : ""; return "gmedia-blank $gmediablank";'));
45
  define('IFRAME_REQUEST', true);
46
 
47
  iframe_header('GmediaGallery');
48
 
49
  switch($gmediablank){
50
  case 'update_plugin':
51
+ require_once(dirname(dirname(__FILE__)) . '/update.php');
52
  gmedia_do_update();
53
  break;
54
  case 'image_editor':
55
+ require_once(dirname(dirname(__FILE__)) . '/inc/image-editor.php');
56
  gmedia_image_editor();
57
  break;
58
  }
69
  }
70
 
71
  // integrate the menu
72
+ function add_menu(){
73
+ $gmediaURL = plugins_url(GMEDIA_FOLDER);
74
+ $this->pages = array();
75
+ $this->pages[] = add_object_page(__('Gmedia Library', 'gmLang'), 'Gmedia Gallery', 'gmedia_library', 'GrandMedia', array(
76
+ &$this,
77
+ 'shell'
78
+ ), $gmediaURL . '/admin/images/gm-icon.png');
79
+ $this->pages[] = add_submenu_page('GrandMedia', __('Gmedia Library', 'gmLang'), __('Gmedia Library', 'gmLang'), 'gmedia_library', 'GrandMedia', array(
80
+ &$this,
81
+ 'shell'
82
+ ));
83
+ if(current_user_can('gmedia_library')){
84
+ $this->pages[] = add_submenu_page('GrandMedia', __('Add Media Files', 'gmLang'), __('Add/Import Files', 'gmLang'), 'gmedia_upload', 'GrandMedia_AddMedia', array(
85
+ &$this,
86
+ 'shell'
87
+ ));
88
+ $this->pages[] = add_submenu_page('GrandMedia', __('Albums, Tags...', 'gmLang'), __('Albums, Tags...', 'gmLang'), 'gmedia_library', 'GrandMedia_Terms', array(
89
+ &$this,
90
+ 'shell'
91
+ ));
92
+ $this->pages[] = add_submenu_page('GrandMedia', __('Gmedia Galleries', 'gmLang'), __('Create/Manage Galleries...', 'gmLang'), 'gmedia_gallery_manage', 'GrandMedia_Galleries', array(
93
+ &$this,
94
+ 'shell'
95
+ ));
96
+ $this->pages[] = add_submenu_page('GrandMedia', __('Modules', 'gmLang'), __('Modules', 'gmLang'), 'gmedia_gallery_manage', 'GrandMedia_Modules', array(
97
+ &$this,
98
+ 'shell'
99
+ ));
100
+ $this->pages[] = add_submenu_page('GrandMedia', __('Gmedia Settings', 'gmLang'), __('Settings', 'gmLang'), 'gmedia_settings', 'GrandMedia_Settings', array(
101
+ &$this,
102
+ 'shell'
103
+ ));
104
+ $this->pages[] = add_submenu_page('GrandMedia', __('Wordpress Media Library', 'gmLang'), __('WP Media Library', 'gmLang'), 'gmedia_import', 'GrandMedia_WordpressLibrary', array(
105
+ &$this,
106
+ 'shell'
107
+ ));
108
+ }
109
 
110
  foreach($this->pages as $page){
111
+ add_action("load-$page", array(&$this, 'screen_help'));
112
  }
113
  }
114
 
116
  * Load the script for the defined page and load only this code
117
  * Display shell of plugin
118
  */
119
+ function shell(){
120
  global $gmProcessor;
121
 
122
  // check for upgrade
123
+ if(get_option('gmediaDbVersion') != GMEDIA_DBVERSION){
124
  if(isset($_GET['do_update']) && ('gmedia' == $_GET['do_update'])){
125
+ $update_frame = '<iframe name="gmedia_update" id="gmedia_update" width="100%" height="500" src="' . admin_url('admin.php?page=GrandMedia&gmediablank=update_plugin') . '"></iframe>';
126
  $gmProcessor->page = 'GrandMedia_Update';
127
  } else{
128
  return;
137
  ?>
138
  <div id="gmedia-container">
139
  <div id="gmedia-header" class="clearfix">
140
+ <div id="gmedia-logo">Gmedia
141
+ <small> by CodEasily.com</small>
142
+ </div>
143
  <h2><?php echo $sideLinks['grandTitle']; ?></h2>
144
  </div>
145
  <div id="gm-message"></div>
153
  echo $gmProcessor->alert('success', $gmProcessor->msg);
154
  echo $gmProcessor->alert('danger', $gmProcessor->error);
155
 
156
+ if(isset($update_frame)){
157
+ ?>
158
  <div class="panel panel-default">
159
  <div class="panel-body"><?php echo $update_frame; ?></div>
160
  </div>
170
  <?php
171
  }
172
 
173
+ function sideLinks(){
174
  global $submenu, $gmProcessor;
175
  $content['sideLinks'] = '
176
  <div id="gmedia-navbar">
177
  <div class="row">
178
  <ul class="list-group">';
179
+ foreach($submenu['GrandMedia'] as $menuKey => $menuItem){
180
+ if($submenu['GrandMedia'][$menuKey][2] == $gmProcessor->page){
181
+ $iscur = ' active';
182
  $content['grandTitle'] = $submenu['GrandMedia'][$menuKey][3];
183
+ } else{
 
184
  $iscur = '';
185
  }
186
 
187
+ $content['sideLinks'] .= "\n" . '<a class="list-group-item' . $iscur . '" href="' . admin_url('admin.php?page=' . $submenu['GrandMedia'][$menuKey][2]) . '">' . $submenu['GrandMedia'][$menuKey][0] . '</a>';
188
  }
189
  $content['sideLinks'] .= '
190
  </ul>
194
  return $content;
195
  }
196
 
197
+ function controller(){
198
 
199
  global $gmProcessor;
200
+ switch($gmProcessor->page){
201
  case 'GrandMedia_AddMedia':
202
+ include_once(dirname(__FILE__) . '/addmedia.php');
203
  gmedia_AddMedia();
204
  break;
205
  case 'GrandMedia_Terms':
206
  include_once(dirname(__FILE__) . '/terms.php');
207
+ if(isset($_GET['edit_album'])){
208
  gmediaAlbumEdit();
209
  } else{
210
  gmediaTerms();
223
  gmediaModules();
224
  break;
225
  case 'GrandMedia_Settings':
226
+ include_once(dirname(__FILE__) . '/settings.php');
227
  gmSettings();
228
  break;
229
  case 'GrandMedia_WordpressLibrary':
230
+ include_once(dirname(__FILE__) . '/wpmedia.php');
231
  grandWPMedia();
232
  break;
233
  case 'GrandMedia':
234
  default:
235
+ include_once(dirname(__FILE__) . '/gmedia.php');
236
  gmediaLib();
237
  break;
238
  }
241
  /**
242
  * @param $hook
243
  */
244
+ function load_scripts($hook){
245
  global $gmCore, $gmProcessor;
246
 
247
  // no need to go on if it's not a plugin page
248
+ if('admin.php' != $hook && strpos($gmCore->_get('page'), 'GrandMedia') === false){
249
  return;
250
+ }
251
 
252
+ wp_enqueue_style('gmedia-bootstrap');
253
  //wp_enqueue_style( 'gmedia-bootstrap-theme' );
254
+ wp_enqueue_script('gmedia-bootstrap');
255
 
256
  //wp_enqueue_script( 'outside-events' );
257
 
258
+ if(isset($_GET['page'])){
259
+ switch($_GET['page']){
260
  case "GrandMedia" :
261
+ if($gmCore->caps['gmedia_edit_media']){
262
+ if($gmCore->_get('gmediablank') == 'image_editor'){
263
+ wp_enqueue_script('camanjs', $gmCore->gmedia_url . '/assets/image-editor/camanjs/caman.full.min.js', array(), '4.1.1');
264
 
265
+ wp_enqueue_style('nouislider', $gmCore->gmedia_url . '/assets/image-editor/js/jquery.nouislider.css', array('gmedia-bootstrap'), '6.1.0');
266
+ wp_enqueue_script('nouislider', $gmCore->gmedia_url . '/assets/image-editor/js/jquery.nouislider.min.js', array('jquery'), '6.1.0');
267
 
268
+ wp_enqueue_style('gmedia-image-editor', $gmCore->gmedia_url . '/assets/image-editor/style.css', array('gmedia-bootstrap'), '0.9.16', 'screen');
269
+ wp_enqueue_script('gmedia-image-editor', $gmCore->gmedia_url . '/assets/image-editor/image-editor.js', array('jquery', 'camanjs'), '0.9.16');
270
+ break;
271
+ }
272
+ if($gmProcessor->mode){
273
+ wp_enqueue_script('alphanum', $gmCore->gmedia_url . '/assets/jq-plugins/jquery.alphanum.js', array('jquery'), '1.0.16');
274
+
275
+ wp_enqueue_script('moment', $gmCore->gmedia_url . '/assets/bootstrap-datetimepicker/moment.min.js', array('jquery'), '2.5.1');
276
+ wp_enqueue_style('datetimepicker', $gmCore->gmedia_url . '/assets/bootstrap-datetimepicker/bootstrap-datetimepicker.min.css', array('gmedia-bootstrap'), '2.1.32');
277
+ wp_enqueue_script('datetimepicker', $gmCore->gmedia_url . '/assets/bootstrap-datetimepicker/bootstrap-datetimepicker.min.js', array(
278
+ 'jquery',
279
+ 'moment',
280
+ 'gmedia-bootstrap'
281
+ ), '2.1.32');
282
+ }
283
  }
284
+ if($gmCore->caps['gmedia_terms']){
285
+ wp_enqueue_style('selectize', $gmCore->gmedia_url . '/assets/selectize/selectize.bootstrap3.css', array('gmedia-bootstrap'), '0.8.5', 'screen');
286
+ wp_enqueue_script('selectize', $gmCore->gmedia_url . '/assets/selectize/selectize.min.js', array('jquery'), '0.8.5');
 
 
 
 
 
 
 
 
 
287
  }
 
 
288
  break;
289
  case "GrandMedia_WordpressLibrary" :
290
+ if($gmCore->caps['gmedia_import']){
291
+ wp_enqueue_style('selectize', $gmCore->gmedia_url . '/assets/selectize/selectize.bootstrap3.css', array('gmedia-bootstrap'), '0.8.5', 'screen');
292
+ wp_enqueue_script('selectize', $gmCore->gmedia_url . '/assets/selectize/selectize.min.js', array('jquery'), '0.8.5');
293
+ }
294
  break;
295
  case "GrandMedia_Terms" :
296
+ if($gmCore->_get('edit_album') && $gmCore->caps['gmedia_album_manage']){
297
  wp_enqueue_style('jquery-ui-smoothness', 'http://ajax.googleapis.com/ajax/libs/jqueryui/1.10.2/themes/smoothness/jquery-ui.min.css', array(), '1.10.2', 'screen');
298
  wp_enqueue_script('jquery-ui-full', 'http://ajax.googleapis.com/ajax/libs/jqueryui/1.10.2/jquery-ui.min.js', array(), '1.10.2');
299
 
302
 
303
  break;
304
  case "GrandMedia_AddMedia" :
305
+ if($gmCore->caps['gmedia_terms']){
306
+ wp_enqueue_style('selectize', $gmCore->gmedia_url . '/assets/selectize/selectize.bootstrap3.css', array('gmedia-bootstrap'), '0.8.5', 'screen');
307
+ wp_enqueue_script('selectize', $gmCore->gmedia_url . '/assets/selectize/selectize.min.js', array('jquery'), '0.8.5');
308
+ }
309
+ if($gmCore->caps['gmedia_upload']){
310
+ $tab = $gmCore->_get('tab', 'upload');
311
+ if($tab == 'upload'){
312
+ wp_enqueue_style('jquery-ui-smoothness', 'http://ajax.googleapis.com/ajax/libs/jqueryui/1.10.2/themes/smoothness/jquery-ui.min.css', array(), '1.10.2', 'screen');
313
+ wp_enqueue_script('jquery-ui-full', 'http://ajax.googleapis.com/ajax/libs/jqueryui/1.10.2/jquery-ui.min.js', array(), '1.10.2');
314
 
315
+ wp_enqueue_script('gmedia-plupload', $gmCore->gmedia_url . '/assets/plupload/plupload.full.min.js', array('jquery', 'jquery-ui-full'), '2.1.2');
316
 
317
+ wp_enqueue_style('jquery.ui.plupload', $gmCore->gmedia_url . '/assets/plupload/jquery.ui.plupload/css/jquery.ui.plupload.css', array('jquery-ui-smoothness'), '2.1.2', 'screen');
318
+ wp_enqueue_script('jquery.ui.plupload', $gmCore->gmedia_url . '/assets/plupload/jquery.ui.plupload/jquery.ui.plupload.min.js', array(
319
+ 'gmedia-plupload',
320
+ 'jquery-ui-full'
321
+ ), '2.1.2');
322
 
323
+ }
324
  }
325
  break;
326
  case "GrandMedia_Settings" :
327
  // enqueue jscolor
328
  break;
329
  case "GrandMedia_Galleries" :
330
+ if($gmCore->caps['gmedia_gallery_manage'] && (isset($_GET['gallery_module']) || isset($_GET['edit_gallery']))){
331
+ wp_enqueue_style('selectize', $gmCore->gmedia_url . '/assets/selectize/selectize.bootstrap3.css', array('gmedia-bootstrap'), '0.8.5', 'screen');
332
+ wp_enqueue_script('selectize', $gmCore->gmedia_url . '/assets/selectize/selectize.min.js', array('jquery', 'jquery-ui-sortable'), '0.8.5');
333
 
334
+ wp_enqueue_style('jquery.minicolors', $gmCore->gmedia_url . '/assets/minicolors/jquery.minicolors.css', array('gmedia-bootstrap'), '0.9.13');
335
+ wp_enqueue_script('jquery.minicolors', $gmCore->gmedia_url . '/assets/minicolors/jquery.minicolors.js', array('jquery'), '0.9.13');
336
  }
337
  break;
338
  }
339
  }
340
 
341
+ wp_enqueue_style('grand-media');
342
+ wp_enqueue_script('grand-media');
343
 
344
  }
345
 
346
+ function screen_help(){
347
  $screen = get_current_screen();
348
  $screen_id = explode('page_', $screen->id, 2);
349
  $screen_id = $screen_id[1];
357
  }
358
  */
359
 
360
+ $screen->add_help_tab(array(
361
+ 'id' => 'help_' . $screen_id . '_support',
362
+ 'title' => __('Support'),
363
+ 'content' => '<h4>First steps</h4>
364
  <p>If you have any problems with displaying Gmedia Gallery in admin or on website. Before posting to the Forum try next:</p>
365
  <ul>
366
  <li>Exclude plugin conflicts: Disable other plugins one by one and check if it resolve problem</li>
367
  <li>Exclude theme conflict: Temporary switch to one of default themes and check if gallery works</li>
368
  </ul>
369
  <h4>Links</h4>
370
+ <p><a href="http://codeasily.com/community/forum/gmedia-gallery-wordpress-plugin/" target="_blank">' . __('Support Forum', 'gmLang') . '</a>
371
+ | <a href="http://codeasily.com/contact/" target="_blank">' . __('Contact', 'gmLang') . '</a>
372
+ | <a href="http://codeasily.com/portfolio/gmedia-gallery-modules/" target="_blank">' . __('Demo', 'gmLang') . '</a>
373
+ | <a href="http://codeasily.com/product/one-site-license/" target="_blank">' . __('Premium', 'gmLang') . '</a>
374
  </p>',
375
+ ));
376
 
377
  }
378
 
382
  *
383
  * @return string
384
  */
385
+ function screen_settings($current, $screen){
386
  global $gmProcessor, $gmCore;
387
+ if(in_array($screen->id, $this->pages)){
388
 
389
  $gm_screen_options = $gmProcessor->user_options();
390
 
391
+ $title = '<h5><strong>' . __('Settings', 'gmLang') . '</strong></h5>';
392
+ $wp_screen_options = '<input type="hidden" name="wp_screen_options[option]" value="gm_screen_options" /><input type="hidden" name="wp_screen_options[value]" value="' . $screen->id . '" />';
393
+ $button = get_submit_button(__('Apply', 'gmLang'), 'button', 'screen-options-apply', false);
394
 
395
  $settings = false;
396
 
397
  $screen_id = explode('page_', $screen->id, 2);
398
 
399
+ switch($screen_id[1]){
400
  case 'GrandMedia' :
401
  $settings = '
402
  <div class="form-inline pull-left">
403
  <div class="form-group">
404
+ <input type="number" max="999" min="0" step="5" size="3" name="gm_screen_options[per_page_gmedia]" class="form-control input-sm" style="width: auto;" value="' . $gm_screen_options['per_page_gmedia'] . '" /> <span>' . __('items per page', 'gmLang') . '</span>
405
  </div>
406
  <div class="form-group">
407
  <select name="gm_screen_options[orderby_gmedia]" class="form-control input-sm">
408
+ <option' . selected($gm_screen_options['orderby_gmedia'], 'ID', false) . ' value="ID">' . __('ID', 'gmLang') . '</option>
409
+ <option' . selected($gm_screen_options['orderby_gmedia'], 'title', false) . ' value="title">' . __('Title', 'gmLang') . '</option>
410
+ <option' . selected($gm_screen_options['orderby_gmedia'], 'date', false) . ' value="date">' . __('Date', 'gmLang') . '</option>
411
+ <option' . selected($gm_screen_options['orderby_gmedia'], 'modified', false) . ' value="modified">' . __('Last Modified', 'gmLang') . '</option>
412
+ <option' . selected($gm_screen_options['orderby_gmedia'], 'mime_type', false) . ' value="mime_type">' . __('MIME Type', 'gmLang') . '</option>
413
+ <option' . selected($gm_screen_options['orderby_gmedia'], 'author', false) . ' value="author">' . __('Author', 'gmLang') . '</option>
414
+ </select> <span>' . __('order items', 'gmLang') . '</span>
415
  </div>
416
  <div class="form-group">
417
  <select name="gm_screen_options[sortorder_gmedia]" class="form-control input-sm">
418
+ <option' . selected($gm_screen_options['sortorder_gmedia'], 'DESC', false) . ' value="DESC">' . __('DESC', 'gmLang') . '</option>
419
+ <option' . selected($gm_screen_options['sortorder_gmedia'], 'ASC', false) . ' value="ASC">' . __('ASC', 'gmLang') . '</option>
420
+ </select> <span>' . __('sort order', 'gmLang') . '</span>
421
+ </div>
422
+ ';
423
+ if('edit' == $gmCore->_get('mode')){
424
+ $settings .= '
425
+ <div class="form-group">
426
+ <select name="gm_screen_options[library_edit_quicktags]" class="form-control input-sm">
427
+ <option' . selected($gm_screen_options['library_edit_quicktags'], 'false', false) . ' value="false">' . __('FALSE', 'gmLang') . '</option>
428
+ <option' . selected($gm_screen_options['library_edit_quicktags'], 'true', false) . ' value="true">' . __('TRUE', 'gmLang') . '</option>
429
+ </select> <span>' . __('Quick Tags panel for Description field', 'gmLang') . '</span>
430
  </div>
431
+ ';
432
+ }
433
+ $settings .= '
434
  </div>
435
  ';
436
  break;
437
  case 'GrandMedia_WordpressLibrary' :
438
+ $settings = '<p>' . __('Set query options for this page to be loaded by default.', 'gmLang') . '</p>
439
  <div class="form-inline pull-left">
440
  <div class="form-group">
441
  <input type="number" max="999" min="0" step="5" size="3" name="gm_screen_options[per_page_wpmedia]" class="form-control input-sm" style="width: auto;" value="' . $gm_screen_options['per_page_wpmedia'] . '" /> <span>' . __('items per page', 'gmLang') . '</span>
492
  }
493
 
494
  if($settings){
495
+ $current = $title . $settings . $wp_screen_options . $button;
496
  }
497
 
498
  }
499
+
500
  return $current;
501
  }
502
 
507
  *
508
  * @return array
509
  */
510
+ function screen_settings_save($status, $option, $value){
511
  global $user_ID;
512
+ if('gm_screen_options' == $option){
513
  /*
514
  global $gmGallery;
515
  foreach ( $_POST['gm_screen_options'] as $key => $val ) {
518
  update_option( 'gmediaOptions', $gmGallery->options );
519
  */
520
  $gm_screen_options = get_user_meta($user_ID, 'gm_screen_options', true);
521
+ if(!is_array($gm_screen_options)){
522
  $gm_screen_options = array();
523
+ }
524
  $value = array_merge($gm_screen_options, $_POST['gm_screen_options']);
525
+
526
  return $value;
527
  }
528
 
admin/ajax.php CHANGED
@@ -1,62 +1,92 @@
1
  <?php
2
- add_action( 'wp_ajax_gmedia_update_data', 'gmedia_update_data' );
3
  function gmedia_update_data(){
4
  global $gmDB, $gmCore;
5
- check_ajax_referer( "GmediaGallery" );
6
- if ( ! current_user_can( 'edit_posts' ) )
7
- die( '-1' );
 
8
 
9
  $data = $gmCore->_post('data');
10
 
11
  wp_parse_str($data, $gmedia);
12
 
13
- if ( ! empty( $gmedia['ID'] ) ) {
14
- $item = $gmDB->get_gmedia( $gmedia['ID'] );
 
 
 
 
 
15
 
16
- $gmedia['modified'] = current_time( 'mysql' );
17
  $gmedia['mime_type'] = $item->mime_type;
18
  $gmedia['gmuid'] = $item->gmuid;
19
 
20
  $gmuid = pathinfo($item->gmuid);
21
 
22
- $gmedia['filename'] = preg_replace( '/[^a-z0-9_\.-]+/i', '_', $gmedia['filename'] );
23
- if($gmedia['filename'] != $gmuid['filename']){
24
- $fileinfo = $gmCore->fileinfo($gmedia['filename'].'.'.$gmuid['extension']);
25
- if ( 'image' == $fileinfo['dirname'] && file_is_displayable_image( $fileinfo['dirpath'].'/'.$item->gmuid ) ) {
26
- @rename($fileinfo['dirpath_original'].'/'.$item->gmuid, $fileinfo['filepath_original']);
27
- @rename($fileinfo['dirpath_thumb'].'/'.$item->gmuid, $fileinfo['filepath_thumb']);
28
  }
29
- if(@rename($fileinfo['dirpath'].'/'.$item->gmuid, $fileinfo['filepath'])){
30
  $gmedia['gmuid'] = $fileinfo['basename'];
31
  }
32
  }
 
 
 
33
 
34
- $id = $gmDB->insert_gmedia( $gmedia );
35
- if ( ! is_wp_error( $id ) ) {
36
  // Meta Stuff
37
- if ( isset($gmedia['meta']) && is_array($gmedia['meta']) ) {
38
- foreach ( $gmedia['meta'] as $key => $value ) {
39
- $gmDB->update_metadata( 'gmedia', $id, $key, $value );
 
 
 
40
  }
41
  }
42
- $result = $gmDB->get_gmedia( $id );
 
 
43
  }
44
- else {
45
- $result = $gmDB->get_gmedia( $id );
 
 
 
 
 
 
 
 
 
 
 
 
 
 
46
  }
47
- header( 'Content-Type: application/json; charset=' . get_option( 'blog_charset' ), true );
48
- echo json_encode( $result );
 
49
  }
50
 
51
  die();
52
  }
53
 
54
- add_action( 'wp_ajax_gmedit_save', 'gmedit_save' );
55
  function gmedit_save(){
56
  global $gmDB, $gmCore, $gmGallery, $gmProcessor;
57
- check_ajax_referer( "gmedit-save" );
58
- if ( ! current_user_can( 'edit_posts' ) )
59
- die( '-1' );
 
60
 
61
  $gmedia = array();
62
  $fail = '';
@@ -65,12 +95,17 @@ function gmedit_save(){
65
  $image = $gmCore->_post('image');
66
  $applyto = $gmCore->_post('applyto', 'web');
67
 
68
- $item = $gmDB->get_gmedia( $gmid );
69
- if (!empty($item)){
 
 
 
 
 
70
  $meta = $gmDB->get_metadata('gmedia', $item->ID, '_metadata', true);
71
  $gmedia['ID'] = $gmid;
72
  $gmedia['date'] = $item->date;
73
- $gmedia['modified'] = current_time( 'mysql' );
74
  $gmedia['author'] = $item->author;
75
 
76
  $webimg = $gmGallery->options['image'];
@@ -80,10 +115,10 @@ function gmedit_save(){
80
 
81
  $fileinfo = $gmCore->fileinfo($item->gmuid, false);
82
 
83
- if(!file_exists($fileinfo['filepath_original'].'_backup')){
84
- @copy($fileinfo['filepath_original'], $fileinfo['filepath_original'].'_backup');
85
  }
86
- rename($fileinfo['filepath_original'], $fileinfo['filepath_original'].'.tmp');
87
  file_put_contents($fileinfo['filepath_original'], $image['data']);
88
  $size = @getimagesize($fileinfo['filepath_original']);
89
 
@@ -91,31 +126,37 @@ function gmedit_save(){
91
  $editor = wp_get_image_editor($fileinfo['filepath_original']);
92
  if(is_wp_error($editor)){
93
  @unlink($fileinfo['filepath_original']);
94
- rename($fileinfo['filepath_original'].'.tmp', $fileinfo['filepath_original']);
95
- $fail = $fileinfo['basename']. " (wp_get_image_editor): ". $editor->get_error_message();
96
  break;
97
  }
98
 
 
 
99
  // Web-image
100
- if( 'web' == $applyto || 'original' == $applyto ) {
101
  $webimg['resize'] = (($webimg['width'] < $size[0]) || ($webimg['height'] < $size[1]))? true : false;
102
  if($webimg['resize']){
103
  $editor->set_quality($webimg['quality']);
104
  $resized = $editor->resize($webimg['width'], $webimg['height'], $webimg['crop']);
105
  if(is_wp_error($resized)){
106
  @unlink($fileinfo['filepath_original']);
107
- rename($fileinfo['filepath_original'].'.tmp', $fileinfo['filepath_original']);
108
- $fail = $fileinfo['basename']. " (".$resized->get_error_code()." | editor->resize->webimage({$webimg['width']}, {$webimg['height']}, {$webimg['crop']})): ". $resized->get_error_message();
109
  break;
110
  }
111
-
112
- rename($fileinfo['filepath'], $fileinfo['filepath'].'.tmp');
 
 
113
  $saved = $editor->save($fileinfo['filepath']);
114
  if(is_wp_error($saved)){
115
  @unlink($fileinfo['filepath_original']);
116
- rename($fileinfo['filepath_original'].'.tmp', $fileinfo['filepath_original']);
117
- rename($fileinfo['filepath'].'.tmp', $fileinfo['filepath']);
118
- $fail = $fileinfo['basename']. " (".$saved->get_error_code()." | editor->save->webimage): ". $saved->get_error_message();
 
 
119
  break;
120
  }
121
  } else{
@@ -130,22 +171,31 @@ function gmedit_save(){
130
  $resized = $editor->resize($thumbimg['width'], $thumbimg['height'], $thumbimg['crop']);
131
  if(is_wp_error($resized)){
132
  @unlink($fileinfo['filepath_original']);
133
- rename($fileinfo['filepath_original'].'.tmp', $fileinfo['filepath_original']);
134
- @unlink($fileinfo['filepath']);
135
- rename($fileinfo['filepath'].'.tmp', $fileinfo['filepath']);
136
- $fail = $fileinfo['basename']. " (".$resized->get_error_code()." | editor->resize->thumb({$thumbimg['width']}, {$thumbimg['height']}, {$thumbimg['crop']})): ". $resized->get_error_message();
 
 
137
  break;
138
  }
139
 
140
- rename($fileinfo['filepath_thumb'], $fileinfo['filepath_thumb'].'.tmp');
 
 
 
141
  $saved = $editor->save($fileinfo['filepath_thumb']);
142
  if(is_wp_error($saved)){
143
  @unlink($fileinfo['filepath_original']);
144
- rename($fileinfo['filepath_original'].'.tmp', $fileinfo['filepath_original']);
145
- @unlink($fileinfo['filepath']);
146
- rename($fileinfo['filepath'].'.tmp', $fileinfo['filepath']);
147
- rename($fileinfo['filepath_thumb'].'.tmp', $fileinfo['filepath_thumb']);
148
- $fail = $fileinfo['basename'] . " (".$saved->get_error_code()." | editor->save->thumb): ". $saved->get_error_message();
 
 
 
 
149
  break;
150
  }
151
 
@@ -154,24 +204,24 @@ function gmedit_save(){
154
  @copy($fileinfo['filepath_original'], $fileinfo['filepath_thumb']);
155
  }
156
 
157
- if( 'original' !== $applyto ){
158
  @unlink($fileinfo['filepath_original']);
159
- rename($fileinfo['filepath_original'].'.tmp', $fileinfo['filepath_original']);
160
- if(filesize($fileinfo['filepath_original']) === filesize($fileinfo['filepath_original'].'_backup')){
161
- @unlink($fileinfo['filepath_original'].'_backup');
162
  }
163
  }
164
- if(file_exists($fileinfo['filepath'].'.tmp')){
165
- @unlink($fileinfo['filepath'].'.tmp');
166
  }
167
- if(file_exists($fileinfo['filepath_original'].'.tmp')){
168
- @unlink($fileinfo['filepath_original'].'.tmp');
169
  }
170
- if(file_exists($fileinfo['filepath_thumb'].'.tmp')){
171
- @unlink($fileinfo['filepath_thumb'].'.tmp');
172
  }
173
 
174
- $id = $gmDB->insert_gmedia( $gmedia );
175
 
176
  $metadata = $gmDB->generate_gmedia_metadata($id, $fileinfo);
177
  $meta['web'] = $metadata['web'];
@@ -189,31 +239,37 @@ function gmedit_save(){
189
  $out = array('error' => $gmProcessor->alert('danger', $fail));
190
  }
191
 
192
- header( 'Content-Type: application/json; charset=' . get_option( 'blog_charset' ), true );
193
- echo json_encode( $out );
194
  }
195
 
196
  die();
197
  }
198
 
199
- add_action( 'wp_ajax_gmedit_restore', 'gmedit_restore' );
200
  function gmedit_restore(){
201
  global $gmDB, $gmCore, $gmGallery, $gmProcessor;
202
- check_ajax_referer( "gmedit-save" );
203
- if ( ! current_user_can( 'edit_posts' ) )
204
- die( '-1' );
 
205
 
206
  $gmedia = array();
207
  $fail = '';
208
  $success = '';
209
  $gmid = $gmCore->_post('id');
210
 
211
- $item = $gmDB->get_gmedia( $gmid );
212
- if (!empty($item)){
 
 
 
 
 
213
  $meta = $gmDB->get_metadata('gmedia', $item->ID, '_metadata', true);
214
  $gmedia['ID'] = $gmid;
215
  $gmedia['date'] = $item->date;
216
- $gmedia['modified'] = current_time( 'mysql' );
217
  $gmedia['author'] = $item->author;
218
 
219
  $webimg = $gmGallery->options['image'];
@@ -221,15 +277,15 @@ function gmedit_restore(){
221
 
222
  $fileinfo = $gmCore->fileinfo($item->gmuid, false);
223
 
224
- if(file_exists($fileinfo['filepath_original'].'_backup')){
225
- rename($fileinfo['filepath_original'].'_backup', $fileinfo['filepath_original']);
226
  }
227
  $size = @getimagesize($fileinfo['filepath_original']);
228
 
229
  do{
230
  $editor = wp_get_image_editor($fileinfo['filepath_original']);
231
  if(is_wp_error($editor)){
232
- $fail = $fileinfo['basename']. " (wp_get_image_editor): ". $editor->get_error_message();
233
  break;
234
  }
235
 
@@ -242,13 +298,13 @@ function gmedit_restore(){
242
  $editor->set_quality($webimg['quality']);
243
  $resized = $editor->resize($webimg['width'], $webimg['height'], $webimg['crop']);
244
  if(is_wp_error($resized)){
245
- $fail = $fileinfo['basename']. " (".$resized->get_error_code()." | editor->resize->webimage({$webimg['width']}, {$webimg['height']}, {$webimg['crop']})): ". $resized->get_error_message();
246
  break;
247
  }
248
 
249
  $saved = $editor->save($fileinfo['filepath']);
250
  if(is_wp_error($saved)){
251
- $fail = $fileinfo['basename']. " (".$saved->get_error_code()." | editor->save->webimage): ". $saved->get_error_message();
252
  break;
253
  }
254
  } else{
@@ -259,13 +315,13 @@ function gmedit_restore(){
259
  $editor->set_quality($thumbimg['quality']);
260
  $resized = $editor->resize($thumbimg['width'], $thumbimg['height'], $thumbimg['crop']);
261
  if(is_wp_error($resized)){
262
- $fail = $fileinfo['basename']. " (".$resized->get_error_code()." | editor->resize->thumb({$thumbimg['width']}, {$thumbimg['height']}, {$thumbimg['crop']})): ". $resized->get_error_message();
263
  break;
264
  }
265
 
266
  $saved = $editor->save($fileinfo['filepath_thumb']);
267
  if(is_wp_error($saved)){
268
- $fail = $fileinfo['basename'] . " (".$saved->get_error_code()." | editor->save->thumb): ". $saved->get_error_message();
269
  break;
270
  }
271
 
@@ -274,7 +330,7 @@ function gmedit_restore(){
274
  @copy($fileinfo['filepath_original'], $fileinfo['filepath_thumb']);
275
  }
276
 
277
- $id = $gmDB->insert_gmedia( $gmedia );
278
 
279
  $metadata = $gmDB->generate_gmedia_metadata($id, $fileinfo);
280
  $meta['web'] = $metadata['web'];
@@ -292,367 +348,606 @@ function gmedit_restore(){
292
  $out = array('error' => $gmProcessor->alert('danger', $fail));
293
  }
294
 
295
- header( 'Content-Type: application/json; charset=' . get_option( 'blog_charset' ), true );
296
- echo json_encode( $out );
297
  }
298
 
299
  die();
300
  }
301
 
302
- add_action( 'wp_ajax_gmedia_terms_modal', 'gmedia_terms_modal' );
303
- function gmedia_terms_modal(){
304
  global $gmDB, $gmCore, $gmGallery;
305
- check_ajax_referer( "GmediaGallery" );
306
- if ( ! current_user_can( 'edit_posts' ) )
307
- die( '-1' );
308
-
309
  $button_class = 'btn-primary';
310
  $gm_terms = array();
311
  $modal = $gmCore->_post('modal');
312
- switch ( $modal ) {
313
  case 'quick_gallery':
314
- $modal_title = __( 'Quick Gallery from selected items', 'gmLang' );
315
- $modal_button = __( 'Create Quick Gallery', 'gmLang' );
 
 
 
316
  break;
317
  case 'filter_categories':
318
- $modal_title = __( 'Show Images from Categories', 'gmLang' );
319
- $modal_button = __( 'Show Selected', 'gmLang' );
320
  break;
321
  case 'assign_category':
 
 
 
322
  $modal_title = __('Assign Category for Selected Images', 'gmLang');
323
  $modal_button = __('Assign Category', 'gmLang');
324
  break;
325
  case 'filter_albums':
326
- $modal_title = __( 'Filter Albums', 'gmLang' );
327
- $modal_button = __( 'Show Selected', 'gmLang' );
328
  break;
329
  case 'assign_album':
330
- $modal_title = __( 'Assign Album for Selected Items', 'gmLang' );
331
- $modal_button = __( 'Assign Album', 'gmLang' );
 
 
 
332
  break;
333
  case 'filter_tags':
334
- $modal_title = __( 'Filter by Tags', 'gmLang' );
335
- $modal_button = __( 'Show Selected', 'gmLang' );
336
  break;
337
  case 'add_tags':
338
- $modal_title = __( 'Add Tags to Selected Items', 'gmLang' );
339
- $modal_button = __( 'Add Tags', 'gmLang' );
 
 
 
340
  break;
341
  case 'delete_tags':
 
 
 
342
  $button_class = 'btn-danger';
343
- $modal_title = __( 'Delete Tags from Selected Items', 'gmLang' );
344
- $modal_button = __( 'Delete Tags', 'gmLang' );
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
345
  break;
346
  default:
347
  $modal_title = ' ';
348
  $modal_button = false;
349
  break;
350
  }
351
- ?>
352
- <form class="modal-content" autocomplete="off" method="post">
353
- <div class="modal-header">
354
- <button type="button" class="close" data-dismiss="modal" aria-hidden="true">&times;</button>
355
- <h4 class="modal-title"><?php echo $modal_title; ?></h4>
356
- </div>
357
- <div class="modal-body">
358
- <?php
359
- switch ( $modal ) {
360
- case 'quick_gallery':
361
- global $user_ID;
362
- $ckey = "gmedia_u{$user_ID}_library";
363
- $selected = isset($_COOKIE[$ckey])? $_COOKIE[$ckey] : '';
364
- if(empty($selected)){
365
- _e('No selected Gmedia. Select at least one item in library.', 'gmLang');
366
- break;
367
- }
368
- $modules = array();
369
- if(($plugin_modules = glob(GMEDIA_ABSPATH . 'module/*', GLOB_ONLYDIR | GLOB_NOSORT))){
370
- foreach($plugin_modules as $path){
371
- $mfold = basename($path);
372
- $modules[$mfold] = array(
373
- 'place' => 'plugin',
374
- 'module_name' => $mfold,
375
- 'module_url' => "{$gmCore->gmedia_url}/module/{$mfold}",
376
- 'module_path' => $path
377
- );
378
- }
379
- }
380
- if(($upload_modules = glob($gmCore->upload['path'].'/'.$gmGallery->options['folder']['module'].'/*', GLOB_ONLYDIR | GLOB_NOSORT))){
381
- foreach($upload_modules as $path){
382
- $mfold = basename($path);
383
- $modules[$mfold] = array(
384
- 'place' => 'upload',
385
- 'module_name' => $mfold,
386
- 'module_url' => "{$gmCore->upload['url']}/{$gmGallery->options['folder']['module']}/{$mfold}",
387
- 'module_path' => $path
388
- );
389
- }
390
- }
391
- ?>
392
- <div class="form-group">
393
- <label><?php _e('Gallery Name', 'gmLang'); ?></label>
394
- <input type="text" class="form-control input-sm" name="gallery[name]" placeholder="<?php echo esc_attr(__('Gallery Name', 'gmLang')); ?>" value="" required="required" />
395
- </div>
396
- <div class="form-group">
397
- <label><?php _e('Modue', 'gmLang'); ?></label>
398
- <select class="form-control input-sm" name="gallery[module]">
399
- <?php
400
- if(!empty($modules)){
401
- foreach($modules as $m){
402
- /**
403
- * @var $module_name
404
- * @var $module_url
405
- * @var $module_path
406
- */
407
- extract($m);
408
- if(!file_exists($module_path . '/index.php')){
409
- continue;
410
- }
411
- $module_info = array();
412
- include($module_path . '/index.php');
413
- if(empty($module_info)){
414
- continue;
415
- }
416
- ?>
417
- <option value="<?php echo $module_name; ?>"><?php echo $module_info['title']; ?></option>
418
- <?php
419
- }
420
  }
421
  ?>
422
- </select>
423
- </div>
424
- <div class="form-group">
425
- <label><?php _e('Selected IDs', 'gmLang'); ?></label>
426
- <input type="text" name="gallery[query][gmedia__in][]" class="form-control input-sm" value="<?php echo $selected; ?>" required="required" />
427
- </div>
428
- <?php
429
- break;
430
- case 'filter_categories':
431
- $gm_terms = $gmDB->get_terms( 'gmedia_category' );
432
- ?>
433
- <div class="checkbox"><label><input type="checkbox" name="cat[]" value="0"> <?php _e( 'Uncategorized', 'gmLang' ); ?></label></div>
434
- <?php if ( count( $gm_terms ) ) {
435
- foreach ($gm_terms as $term ) {
436
- if($term->count){ ?>
437
- <div class="checkbox">
438
- <label><input type="checkbox" name="cat[]" value="<?php echo $term->term_id; ?>"> <?php echo esc_html($term->name); ?></label>
439
- <span class="badge pull-right"><?php echo $term->count; ?></span>
440
- </div>
441
- <?php }
442
  }
443
  }
444
- break;
445
- case 'assign_category':
446
- $term_type = 'gmedia_category';
447
- $gm_terms = $gmGallery->options['taxonomies'][$term_type];
448
  ?>
449
- <div class="radio"><label><input type="radio" name="cat" value="0"> <?php _e('Uncategorized', 'gmLang'); ?></label></div>
450
- <?php if ( count( $gm_terms ) ) {
451
- foreach ($gm_terms as $term_name => $term_title ) {
452
- echo '<div class="radio"><label><input type="radio" name="cat" value="' . $term_name . '"> ' . esc_html($term_title) . '</label></div>';
453
- }
454
- }
455
- break;
456
- case 'filter_albums':
457
- $gm_terms = $gmDB->get_terms( 'gmedia_album' );
 
 
 
 
 
 
458
  ?>
459
- <div class="checkbox"><label><input type="checkbox" name="alb[]" value="0"> <?php _e( 'No Album', 'gmLang' ); ?></label></div>
460
- <?php if ( count( $gm_terms ) ) {
461
- foreach ($gm_terms as $term ) { ?>
462
- <div class="checkbox">
463
- <label><input type="checkbox" name="alb[]" value="<?php echo $term->term_id; ?>"> <?php echo esc_html($term->name); ?></label>
464
- <span class="badge pull-right"><?php echo $term->count; ?></span>
465
- </div>
466
- <?php }
467
- } else {
468
- $modal_button = false;
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
469
  }
470
- break;
471
- case 'assign_album':
472
- $gm_terms = $gmDB->get_terms( 'gmedia_album' );
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
473
  ?>
474
- <div class="radio">
475
- <label><input type="radio" name="alb"> <?php _e( 'Create Album', 'gmLang' ); ?></label>
476
- <input type="text" class="form-control input-sm" name="alb" value="" />
477
  </div>
478
- <div class="radio"><label><input type="radio" name="alb" value="0"> <?php _e( 'No Album', 'gmLang' ); ?></label></div>
479
- <?php if ( count( $gm_terms ) ) {
480
- foreach ($gm_terms as $term ) { ?>
481
- <div class="radio">
482
- <label><input type="radio" name="alb" value="<?php echo $term->term_id; ?>"> <?php echo esc_html($term->name); ?></label>
483
- <span class="badge pull-right"><?php echo $term->count; ?></span></div>
484
- <?php }
485
- }
486
- break;
487
- case 'filter_tags':
488
- $gm_terms = $gmDB->get_terms( 'gmedia_tag', array('fields' => 'names_count') );
489
- $gm_terms = array_values($gm_terms);
490
- if ( count( $gm_terms ) ) { ?>
491
- <div class="form-group"><input id="combobox_gmedia_tag" name="tag_ids" class="form-control input-sm" value="" placeholder="<?php _e('Filter Tags...', 'gmLang'); ?>" /></div>
492
- <script type="text/javascript">
493
- jQuery(function($){
494
- var gm_terms = <?php echo json_encode($gm_terms); ?>;
495
- var items = gm_terms.map(function(x){
496
- return { id: x.term_id, name: x.name, count: x.count };
497
- });
498
- $('#combobox_gmedia_tag').selectize({
499
- delimiter: ',',
500
- maxItems: null,
501
- openOnFocus: false,
502
- labelField: 'name',
503
- hideSelected: true,
504
- options: items,
505
- searchField: ['name'],
506
- valueField: 'id',
507
- create: false,
508
- render: {
509
- item: function(item, escape) {
510
- return '<div>' + escape(item.name) + '</div>';
511
- },
512
- option: function(item, escape) {
513
- return '<div>' + escape(item.name) + ' <span class="badge">' + escape(item.count) + '</span></div>';
514
- }
515
- }
516
- });
517
- });
518
- </script>
519
- <?php } else {
520
- $modal_button = false; ?>
521
- <p class="notags"><?php _e( 'No tags', 'gmLang' ); ?></p>
522
- <?php
523
- }
524
- break;
525
- case 'add_tags':
526
- $gm_terms = $gmDB->get_terms( 'gmedia_tag', array('fields' => 'names_count') );
527
- $gm_terms = array_values($gm_terms);
528
- if ( count( $gm_terms ) ) { ?>
529
- <div class="form-group"><input id="combobox_gmedia_tag" name="tag_names" class="form-control input-sm" value="" placeholder="<?php _e('Add Tags...', 'gmLang'); ?>" /></div>
530
- <script type="text/javascript">
531
- jQuery(function($){
532
- var gm_terms = <?php echo json_encode($gm_terms); ?>;
533
- var items = gm_terms.map(function(x){
534
- return { id: x.term_id, name: x.name, count: x.count };
535
- });
536
- $('#combobox_gmedia_tag').selectize({
537
- delimiter: ',',
538
- maxItems: null,
539
- openOnFocus: false,
540
- labelField: 'name',
541
- hideSelected: true,
542
- options: items,
543
- searchField: ['name'],
544
- valueField: 'name',
545
- createOnBlur: true,
546
- persist: false,
547
- create: function(input){
548
- return {
549
- name: input
550
- }
551
- },
552
- render: {
553
- item: function(item, escape) {
554
- return '<div>' + escape(item.name) + '</div>';
555
- },
556
- option: function(item, escape) {
557
- return '<div>' + escape(item.name) + ' <span class="badge">' + escape(item.count) + '</span></div>';
558
- }
559
- }
560
- });
561
- });
562
- </script>
563
- <?php } else {
564
- $modal_button = false; ?>
565
- <p class="notags"><?php _e( 'No tags', 'gmLang' ); ?></p>
566
- <?php
567
- }
568
- break;
569
- case 'delete_tags':
570
- global $gmProcessor;
571
- if(!empty($gmProcessor->selected_items)){
572
- $gm_terms = $gmDB->get_gmedia_terms($gmProcessor->selected_items, 'gmedia_tag');
573
- }
574
- if ( count( $gm_terms ) ) {
575
- foreach ( $gm_terms as $term ) { ?>
576
- <div class="checkbox">
577
- <label><input type="checkbox" name="tag_id[]" value="<?php echo $term->term_id; ?>"> <?php echo esc_html($term->name); ?></label>
578
- <span class="badge pull-right"><?php echo $term->count; ?></span>
579
- </div>
580
- <?php }
581
- } else {
582
- $modal_button = false; ?>
583
- <p class="notags"><?php _e( 'No tags', 'gmLang' ); ?></p>
584
  <?php
 
 
 
 
 
 
 
 
 
 
 
 
585
  }
586
- break;
587
- default:
588
- _e('Ops! Something wrong.', 'gmLang');
589
- break;
 
 
590
  }
 
 
591
  ?>
592
- </div>
593
- <div class="modal-footer">
594
- <button type="button" class="btn btn-default" data-dismiss="modal"><?php _e( 'Cancel', 'gmLang' ); ?></button>
595
- <?php if($modal_button){ ?>
596
- <button type="submit" name="<?php echo $modal; ?>" class="btn <?php echo $button_class; ?>"><?php echo $modal_button; ?></button>
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
597
  <?php } ?>
598
- </div>
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
599
  </form><!-- /.modal-content -->
600
- <?php
601
  die();
602
  }
603
 
604
- add_action( 'wp_ajax_gmedia_tag_edit', 'gmedia_tag_edit' );
605
  function gmedia_tag_edit(){
606
- global $gmCore, $gmDB;
607
 
608
- check_ajax_referer( 'GmediaTerms' );
609
- if ( ! current_user_can( 'edit_posts' ) )
610
- die( '-1' );
 
611
 
612
  $term = array('taxonomy' => 'gmedia_tag');
613
  $term['name'] = trim($gmCore->_post('tag_name', ''));
614
  $term['term_id'] = intval($gmCore->_post('tag_id', 0));
615
- if( $term['name'] && !$gmCore->is_digit($term['name']) ){
616
- if ( ($term_id = $gmDB->term_exists( $term['term_id'], $term['taxonomy'] )) ) {
617
- $term_id = $gmDB->update_term( $term['term_id'], $term['taxonomy'], $term );
618
- if ( is_wp_error( $term_id ) ) {
619
- $out['error'] = $term_id->get_error_message();
 
 
 
 
620
  } else{
621
- $out['msg'] = sprintf( __( "Tag %d successfuly updated", 'gmLang' ), $term_id );
622
  }
623
  } else{
624
- $out['error'] = __( "A term with the id provided do not exists.", 'gmLang' );
625
  }
626
  } else{
627
- $out['error'] = __( "Term name can't be only digits or empty", 'gmLang' );
628
  }
629
 
630
- header( 'Content-Type: application/json; charset=' . get_option( 'blog_charset' ), true );
631
- echo json_encode( $out );
632
 
633
  die();
634
 
635
  }
636
 
637
- add_action( 'wp_ajax_gmedia_module_install', 'gmedia_module_install' );
638
  function gmedia_module_install(){
639
  global $gmCore, $gmProcessor, $gmGallery;
640
 
641
- check_ajax_referer( 'GmediaModule' );
642
- if ( ! current_user_can( 'edit_posts' ) ){
643
  echo $gmProcessor->alert('danger', __('You are not allowed to install modules'));
644
  die();
645
  }
646
 
647
  if(($download = $gmCore->_post('download'))){
648
  $module = $gmCore->_post('module');
649
- $mzip = download_url( $download );
650
  if(is_wp_error($mzip)){
651
  echo $gmProcessor->alert('danger', $mzip->get_error_message());
652
  die();
653
  }
654
 
655
- $mzip = str_replace( "\\", "/", $mzip );
656
  $to_folder = $gmCore->upload['path'] . '/' . $gmGallery->options['folder']['module'] . '/';
657
 
658
  global $wp_filesystem;
@@ -682,18 +977,19 @@ function gmedia_module_install(){
682
  echo $gmProcessor->alert('danger', __('No file specified', 'gmLang'));
683
  }
684
 
685
- die();
686
 
687
  }
688
 
689
 
690
- add_action( 'wp_ajax_gmedia_import_modal', 'gmedia_import_modal' );
691
  function gmedia_import_modal(){
692
  global $user_ID, $gmDB, $gmCore, $gmGallery;
693
 
694
- check_ajax_referer( 'GmediaGallery' );
695
- if ( ! current_user_can( 'edit_posts' ) )
696
- die( '-1' );
 
697
 
698
  ?>
699
  <div class="modal-content">
@@ -701,87 +997,112 @@ function gmedia_import_modal(){
701
  <button type="button" class="close" data-dismiss="modal" aria-hidden="true">&times;</button>
702
  <h4 class="modal-title"><?php _e('Import from WP Media Library'); ?></h4>
703
  </div>
704
- <div class="modal-body" style="position:relative;">
705
  <form id="import_form" name="import_form" target="import_window" action="<?php echo $gmCore->gmedia_url; ?>/admin/import.php" method="POST" accept-charset="utf-8">
706
  <?php wp_nonce_field('GmediaImport'); ?>
707
- <input type="hidden" id="import-action" name="import" value="<?php echo esc_attr($gmCore->_post('modal','')); ?>"/>
708
- <input type="hidden" name="selected" value="<?php $ckey = "gmedia_u{$user_ID}_wpmedia"; if(isset($_COOKIE[$ckey])){ echo $_COOKIE[$ckey]; } ?>"/>
709
- <div class="form-group">
710
- <?php
711
- $term_type = 'gmedia_category';
712
- $gm_terms = $gmGallery->options['taxonomies'][$term_type];
 
 
 
 
713
 
714
- $terms_category = '';
715
- if(count($gm_terms)){
716
- foreach($gm_terms as $term_name => $term_title){
717
- $terms_category .= '<option value="' . $term_name . '">' . esc_html($term_title) . '</option>' . "\n";
 
718
  }
719
- }
720
- ?>
721
- <label><?php _e('Assign Category', 'gmLang'); ?> <small><?php _e('(for images only)') ?></small></label>
722
- <select id="gmedia_category" name="terms[gmedia_category]" class="form-control input-sm">
723
- <option value=""><?php _e('Uncategorized', 'gmLang'); ?></option>
724
- <?php echo $terms_category; ?>
725
- </select>
726
- </div>
 
727
 
728
- <div class="form-group">
729
- <?php
730
- $term_type = 'gmedia_album';
731
- $gm_terms = $gmDB->get_terms($term_type);
732
 
733
- $terms_album = '';
734
- if(count($gm_terms)){
735
- foreach($gm_terms as $term){
736
- $terms_album .= '<option value="' . esc_attr($term->name) . '">' . esc_html($term->name) . '</option>' . "\n";
 
737
  }
738
- }
739
- ?>
740
- <label><?php _e('Add to Album', 'gmLang'); ?> </label>
741
- <select id="combobox_gmedia_album" name="terms[gmedia_album]" class="form-control input-sm" placeholder="<?php _e('Album Name...', 'gmLang'); ?>">
742
- <option value=""></option>
743
- <?php echo $terms_album; ?>
744
- </select>
745
- </div>
746
 
747
- <div class="form-group">
748
- <?php
749
- $term_type = 'gmedia_tag';
750
- $gm_terms = $gmDB->get_terms($term_type, array('fields' => 'names'));
751
- ?>
752
- <label><?php _e('Add Tags', 'gmLang'); ?> </label>
753
- <input id="combobox_gmedia_tag" name="terms[gmedia_tag]" class="form-control input-sm" value="" placeholder="<?php _e('Add Tags...', 'gmLang'); ?>" />
754
- </div>
 
 
 
755
 
756
  <script type="text/javascript">
757
  jQuery(function($){
 
758
  $('#combobox_gmedia_album').selectize({
 
759
  create: true,
 
 
 
 
760
  persist: false
761
  });
762
- var gm_terms = <?php echo json_encode($gm_terms); ?>,
763
- items = gm_terms.map(function(x){
764
- return { item: x };
765
- });
766
  $('#combobox_gmedia_tag').selectize({
 
 
 
 
 
 
 
 
 
 
767
  delimiter: ',',
768
  maxItems: null,
 
769
  persist: false,
770
  options: items,
771
  labelField: 'item',
772
  valueField: 'item',
773
- create: function(input){
774
- return {
775
- item: input
776
- }
777
- }
778
  });
 
779
 
780
  $('#import-done').one('click', function(e){
781
  $('#import_form').submit();
782
  $(this).button('loading').prop('disabled', true);
783
  $('#import_window').show();
784
- $(this).one('click', function(e){ $('#importModal').modal('hide'); });
 
 
785
  });
786
 
787
  });
@@ -790,146 +1111,150 @@ function gmedia_import_modal(){
790
  <iframe name="import_window" id="import_window" src="about:blank" style="display:none; position:absolute; left:0; top:0; width:100%; height:100%; z-index:1000; background-color:#ffffff; padding:20px 20px 0 20px;" onload="gmedia_import_done()"></iframe>
791
  </div>
792
  <div class="modal-footer">
793
- <button type="button" class="btn btn-default" data-dismiss="modal"><?php _e( 'Cancel', 'gmLang' ); ?></button>
794
- <button type="button" id="import-done" class="btn btn-primary" data-complete-text="<?php _e( 'Close', 'gmLang' ); ?>" data-loading-text="<?php _e( 'Working...', 'gmLang' ); ?>"><?php _e( 'Import', 'gmLang' ); ?></button>
795
  </div>
796
  </div><!-- /.modal-content -->
797
  <?php
798
  die();
799
  }
800
 
801
- add_action( 'wp_ajax_gmedia_relimage', 'gmedia_relimage' );
802
  /**
803
  * Do Actions via Ajax
 
 
804
  *
805
  * @return void
806
  */
807
- function gmedia_relimage() {
808
  /** @var $wpdb wpdb */
809
  global $wpdb, $gmCore, $gmDB;
810
 
811
- check_ajax_referer( "grandMedia" );
812
 
813
  // check for correct capability
814
- if ( ! current_user_can( 'edit_posts' ) )
815
- die( '-1' );
 
816
 
817
- $post_tags = array_filter(array_map( 'trim', explode(',', stripslashes(urldecode($gmCore->_get('tags', '')))) ));
818
- $paged = (int) $gmCore->_get('paged', 1);
819
  $per_page = 20;
820
- $s = trim( stripslashes(urldecode($gmCore->_get('search'))) );
821
- if ( $s && strlen( $s ) > 2 ) {
822
  $post_tags = array();
823
- } else {
824
  $s = '';
825
  }
826
 
827
  $gmediaLib = array();
828
- $relative = (int) $gmCore->_get('rel', 1);
829
  $continue = true;
830
  $content = '';
831
 
832
  if($relative == 1){
833
  $arg = array(
834
- 'mime_type' => 'image/*'
835
- , 'orderby' => 'ID'
836
- , 'order' => 'DESC'
837
- , 'per_page' => $per_page
838
- , 'page' => $paged
839
- , 's' => $s
840
- , 'tag_name__in' => $post_tags
841
- , 'null_tags' => true
842
  );
843
- $gmediaLib = $gmDB->get_gmedias( $arg );
844
  }
845
 
846
- if( empty( $gmediaLib ) && count($post_tags) ) {
847
 
848
  if($relative == 1){
849
  $relative = 0;
850
  $paged = 1;
851
- $content .= '<li class="emptydb">' . __( 'No items related by tags.', 'gmLang' ) . '</li>'."\n";
852
  }
853
 
854
- $tag__not_in = "'" . implode( "','", array_map( 'esc_sql', array_unique( (array) $post_tags ) ) ) . "'";
855
- $tag__not_in = $wpdb->get_col( "
856
  SELECT term_id
857
  FROM {$wpdb->prefix}gmedia_term
858
  WHERE taxonomy = 'gmedia_tag'
859
  AND name IN ({$tag__not_in})
860
- " );
861
 
862
  $arg = array(
863
- 'mime_type' => 'image/*'
864
- , 'orderby' => 'ID'
865
- , 'order' => 'DESC'
866
- , 'per_page' => $per_page
867
- , 'page' => $paged
868
- , 'tag__not_in' => $tag__not_in
869
  );
870
- $gmediaLib = $gmDB->get_gmedias( $arg );
871
  }
872
 
873
- if( ($count = count( $gmediaLib )) ) {
874
- foreach ( $gmediaLib as $item ) {
875
  $content .= "<li class='gmedia-image-li' id='gm-img-{$item->ID}'>\n";
876
- $content .= " <a target='_blank' class='gm-img' data-gmid='{$item->ID}' href='".$gmCore->gm_get_media_image($item)."'><img src='".$gmCore->gm_get_media_image( $item, 'thumb' )."' height='50' style='width:auto;' alt='' title='".esc_attr($item->title)."' /></a>\n";
877
- $content .= " <div style='display: none;' class='gm-img-description'>".esc_html($item->description)."</div>\n";
878
  $content .= "</li>\n";
879
  }
880
  if(($count < $per_page) && ($relative == 0 || !empty($s))){
881
  $continue = false;
882
  }
883
- }
884
- else {
885
  if($s){
886
- $content .= '<li class="emptydb">' . __( 'No items matching the search query.', 'gmLang' ) . '</li>'."\n";
887
- } else {
888
- $content .= '<li class="emptydb">' . __( 'No items to show', 'gmLang' ) . '</li>'."\n";
889
  }
890
  $continue = false;
891
  }
892
- $result = array( 'paged' => $paged, 'rel' => $relative, 'continue' => $continue, 'content' => $content, 'data' => $post_tags );
893
- header( 'Content-Type: application/json; charset=' . get_option( 'blog_charset' ), true );
894
- echo json_encode( $result );
895
 
896
  die();
897
 
898
  }
899
 
900
- add_action( 'wp_ajax_gmedia_ftp_browser', 'gmedia_ftp_browser' );
901
  /**
902
  * jQuery File Tree PHP Connector
903
- * @author Cory S.N. LaViska - A Beautiful Site (http://abeautifulsite.net/)
904
  * @version 1.0.1
905
  *
906
  * @return string folder content
907
  */
908
- function gmedia_ftp_browser() {
909
- if ( !current_user_can('upload_files') )
910
  die('No access');
 
911
 
912
  // if nonce is not correct it returns -1
913
- check_ajax_referer( 'grandMedia' );
914
 
915
  // start from the default path
916
- $root = trailingslashit ( ABSPATH );
917
  // get the current directory
918
- $dir = trailingslashit ( urldecode($_POST['dir']) );
919
 
920
- if( file_exists($root . $dir) ) {
921
  $files = scandir($root . $dir);
922
  natcasesort($files);
923
 
924
  // The 2 counts for . and ..
925
- if( count($files) > 2 ) {
926
  echo "<ul class=\"jqueryDirTree\" style=\"display: none;\">";
927
  // return only directories
928
- foreach( $files as $file ) {
929
- if ( in_array( $file, array('wp-admin', 'wp-includes', 'plugins', 'themes', 'thumb', 'thumbs') ) )
930
  continue;
 
931
 
932
- if ( file_exists($root . $dir . $file) && $file != '.' && $file != '..' && is_dir($root . $dir . $file) ) {
933
  echo "<li class=\"directory collapsed\"><a href=\"#\" rel=\"" . esc_attr($dir . $file) . "/\">" . esc_html($file) . "</a></li>";
934
  }
935
  }
1
  <?php
2
+ add_action('wp_ajax_gmedia_update_data', 'gmedia_update_data');
3
  function gmedia_update_data(){
4
  global $gmDB, $gmCore;
5
+ check_ajax_referer("GmediaGallery");
6
+ if(!current_user_can('gmedia_edit_media')){
7
+ die('-1');
8
+ }
9
 
10
  $data = $gmCore->_post('data');
11
 
12
  wp_parse_str($data, $gmedia);
13
 
14
+ if(!empty($gmedia['ID'])){
15
+ $item = $gmDB->get_gmedia($gmedia['ID']);
16
+ if((int)$item->author != get_current_user_id()){
17
+ if(!current_user_can('gmedia_edit_others_media')){
18
+ die('-2');
19
+ }
20
+ }
21
 
22
+ $gmedia['modified'] = current_time('mysql');
23
  $gmedia['mime_type'] = $item->mime_type;
24
  $gmedia['gmuid'] = $item->gmuid;
25
 
26
  $gmuid = pathinfo($item->gmuid);
27
 
28
+ $gmedia['filename'] = preg_replace('/[^a-z0-9_\.-]+/i', '_', $gmedia['filename']);
29
+ if(($gmedia['filename'] != $gmuid['filename']) && ((int)$item->author == get_current_user_id())){
30
+ $fileinfo = $gmCore->fileinfo($gmedia['filename'] . '.' . $gmuid['extension']);
31
+ if('image' == $fileinfo['dirname'] && file_is_displayable_image($fileinfo['dirpath'] . '/' . $item->gmuid)){
32
+ @rename($fileinfo['dirpath_original'] . '/' . $item->gmuid, $fileinfo['filepath_original']);
33
+ @rename($fileinfo['dirpath_thumb'] . '/' . $item->gmuid, $fileinfo['filepath_thumb']);
34
  }
35
+ if(@rename($fileinfo['dirpath'] . '/' . $item->gmuid, $fileinfo['filepath'])){
36
  $gmedia['gmuid'] = $fileinfo['basename'];
37
  }
38
  }
39
+ if(!current_user_can('gmedia_terms')){
40
+ unset($gmedia['terms']);
41
+ }
42
 
43
+ $id = $gmDB->insert_gmedia($gmedia);
44
+ if(!is_wp_error($id)){
45
  // Meta Stuff
46
+ if(isset($gmedia['meta']) && is_array($gmedia['meta'])){
47
+ foreach($gmedia['meta'] as $key => $value){
48
+ if('cover' == $key){
49
+ $value = ltrim($value, '#');
50
+ }
51
+ $gmDB->update_metadata('gmedia', $id, $key, $value);
52
  }
53
  }
54
+ $result = $gmDB->get_gmedia($id);
55
+ } else{
56
+ $result = $gmDB->get_gmedia($id);
57
  }
58
+ if(current_user_can('gmedia_terms')){
59
+ $tags = $gmDB->get_the_gmedia_terms($id, 'gmedia_tag');
60
+ if($tags){
61
+ $tags_list = array();
62
+ foreach($tags as $tag){
63
+ $tags_list[] = $tag->name;
64
+ }
65
+ $result->tags = implode(', ', $tags_list);
66
+ }
67
+ if(!empty($gmedia['terms']['gmedia_album'])){
68
+ $alb_id = (int) $gmedia['terms']['gmedia_album'];
69
+ $alb = $gmDB->get_term($alb_id, 'gmedia_album');
70
+ $result->album_status = $alb->status;
71
+ } else{
72
+ $result->album_status = 'none';
73
+ }
74
  }
75
+
76
+ header('Content-Type: application/json; charset=' . get_option('blog_charset'), true);
77
+ echo json_encode($result);
78
  }
79
 
80
  die();
81
  }
82
 
83
+ add_action('wp_ajax_gmedit_save', 'gmedit_save');
84
  function gmedit_save(){
85
  global $gmDB, $gmCore, $gmGallery, $gmProcessor;
86
+ check_ajax_referer("gmedit-save");
87
+ if(!current_user_can('gmedia_edit_media')){
88
+ die('-1');
89
+ }
90
 
91
  $gmedia = array();
92
  $fail = '';
95
  $image = $gmCore->_post('image');
96
  $applyto = $gmCore->_post('applyto', 'web');
97
 
98
+ $item = $gmDB->get_gmedia($gmid);
99
+ if(!empty($item)){
100
+ if((int)$item->author != get_current_user_id()){
101
+ if(!current_user_can('gmedia_edit_others_media')){
102
+ die('-2');
103
+ }
104
+ }
105
  $meta = $gmDB->get_metadata('gmedia', $item->ID, '_metadata', true);
106
  $gmedia['ID'] = $gmid;
107
  $gmedia['date'] = $item->date;
108
+ $gmedia['modified'] = current_time('mysql');
109
  $gmedia['author'] = $item->author;
110
 
111
  $webimg = $gmGallery->options['image'];
115
 
116
  $fileinfo = $gmCore->fileinfo($item->gmuid, false);
117
 
118
+ if(!file_exists($fileinfo['filepath_original'] . '_backup')){
119
+ @copy($fileinfo['filepath_original'], $fileinfo['filepath_original'] . '_backup');
120
  }
121
+ rename($fileinfo['filepath_original'], $fileinfo['filepath_original'] . '.tmp');
122
  file_put_contents($fileinfo['filepath_original'], $image['data']);
123
  $size = @getimagesize($fileinfo['filepath_original']);
124
 
126
  $editor = wp_get_image_editor($fileinfo['filepath_original']);
127
  if(is_wp_error($editor)){
128
  @unlink($fileinfo['filepath_original']);
129
+ rename($fileinfo['filepath_original'] . '.tmp', $fileinfo['filepath_original']);
130
+ $fail = $fileinfo['basename'] . " (wp_get_image_editor): " . $editor->get_error_message();
131
  break;
132
  }
133
 
134
+ $webis = false;
135
+ $thumbis = false;
136
  // Web-image
137
+ if('web' == $applyto || 'original' == $applyto){
138
  $webimg['resize'] = (($webimg['width'] < $size[0]) || ($webimg['height'] < $size[1]))? true : false;
139
  if($webimg['resize']){
140
  $editor->set_quality($webimg['quality']);
141
  $resized = $editor->resize($webimg['width'], $webimg['height'], $webimg['crop']);
142
  if(is_wp_error($resized)){
143
  @unlink($fileinfo['filepath_original']);
144
+ rename($fileinfo['filepath_original'] . '.tmp', $fileinfo['filepath_original']);
145
+ $fail = $fileinfo['basename'] . " (" . $resized->get_error_code() . " | editor->resize->webimage({$webimg['width']}, {$webimg['height']}, {$webimg['crop']})): " . $resized->get_error_message();
146
  break;
147
  }
148
+ if(file_exists($fileinfo['filepath'])){
149
+ $webis = true;
150
+ rename($fileinfo['filepath'], $fileinfo['filepath'] . '.tmp');
151
+ }
152
  $saved = $editor->save($fileinfo['filepath']);
153
  if(is_wp_error($saved)){
154
  @unlink($fileinfo['filepath_original']);
155
+ rename($fileinfo['filepath_original'] . '.tmp', $fileinfo['filepath_original']);
156
+ if($webis){
157
+ rename($fileinfo['filepath'] . '.tmp', $fileinfo['filepath']);
158
+ }
159
+ $fail = $fileinfo['basename'] . " (" . $saved->get_error_code() . " | editor->save->webimage): " . $saved->get_error_message();
160
  break;
161
  }
162
  } else{
171
  $resized = $editor->resize($thumbimg['width'], $thumbimg['height'], $thumbimg['crop']);
172
  if(is_wp_error($resized)){
173
  @unlink($fileinfo['filepath_original']);
174
+ rename($fileinfo['filepath_original'] . '.tmp', $fileinfo['filepath_original']);
175
+ if($webis){
176
+ @unlink($fileinfo['filepath']);
177
+ rename($fileinfo['filepath'] . '.tmp', $fileinfo['filepath']);
178
+ }
179
+ $fail = $fileinfo['basename'] . " (" . $resized->get_error_code() . " | editor->resize->thumb({$thumbimg['width']}, {$thumbimg['height']}, {$thumbimg['crop']})): " . $resized->get_error_message();
180
  break;
181
  }
182
 
183
+ if(file_exists($fileinfo['filepath_thumb'])){
184
+ $thumbis = true;
185
+ rename($fileinfo['filepath_thumb'], $fileinfo['filepath_thumb'] . '.tmp');
186
+ }
187
  $saved = $editor->save($fileinfo['filepath_thumb']);
188
  if(is_wp_error($saved)){
189
  @unlink($fileinfo['filepath_original']);
190
+ rename($fileinfo['filepath_original'] . '.tmp', $fileinfo['filepath_original']);
191
+ if($webis){
192
+ @unlink($fileinfo['filepath']);
193
+ rename($fileinfo['filepath'] . '.tmp', $fileinfo['filepath']);
194
+ }
195
+ if($thumbis){
196
+ rename($fileinfo['filepath_thumb'] . '.tmp', $fileinfo['filepath_thumb']);
197
+ }
198
+ $fail = $fileinfo['basename'] . " (" . $saved->get_error_code() . " | editor->save->thumb): " . $saved->get_error_message();
199
  break;
200
  }
201
 
204
  @copy($fileinfo['filepath_original'], $fileinfo['filepath_thumb']);
205
  }
206
 
207
+ if('original' !== $applyto){
208
  @unlink($fileinfo['filepath_original']);
209
+ rename($fileinfo['filepath_original'] . '.tmp', $fileinfo['filepath_original']);
210
+ if(filesize($fileinfo['filepath_original']) === filesize($fileinfo['filepath_original'] . '_backup')){
211
+ @unlink($fileinfo['filepath_original'] . '_backup');
212
  }
213
  }
214
+ if(file_exists($fileinfo['filepath'] . '.tmp')){
215
+ @unlink($fileinfo['filepath'] . '.tmp');
216
  }
217
+ if(file_exists($fileinfo['filepath_original'] . '.tmp')){
218
+ @unlink($fileinfo['filepath_original'] . '.tmp');
219
  }
220
+ if(file_exists($fileinfo['filepath_thumb'] . '.tmp')){
221
+ @unlink($fileinfo['filepath_thumb'] . '.tmp');
222
  }
223
 
224
+ $id = $gmDB->insert_gmedia($gmedia);
225
 
226
  $metadata = $gmDB->generate_gmedia_metadata($id, $fileinfo);
227
  $meta['web'] = $metadata['web'];
239
  $out = array('error' => $gmProcessor->alert('danger', $fail));
240
  }
241
 
242
+ header('Content-Type: application/json; charset=' . get_option('blog_charset'), true);
243
+ echo json_encode($out);
244
  }
245
 
246
  die();
247
  }
248
 
249
+ add_action('wp_ajax_gmedit_restore', 'gmedit_restore');
250
  function gmedit_restore(){
251
  global $gmDB, $gmCore, $gmGallery, $gmProcessor;
252
+ check_ajax_referer("gmedit-save");
253
+ if(!current_user_can('gmedia_edit_media')){
254
+ die('-1');
255
+ }
256
 
257
  $gmedia = array();
258
  $fail = '';
259
  $success = '';
260
  $gmid = $gmCore->_post('id');
261
 
262
+ $item = $gmDB->get_gmedia($gmid);
263
+ if(!empty($item)){
264
+ if((int)$item->author != get_current_user_id()){
265
+ if(!current_user_can('gmedia_edit_others_media')){
266
+ die('-2');
267
+ }
268
+ }
269
  $meta = $gmDB->get_metadata('gmedia', $item->ID, '_metadata', true);
270
  $gmedia['ID'] = $gmid;
271
  $gmedia['date'] = $item->date;
272
+ $gmedia['modified'] = current_time('mysql');
273
  $gmedia['author'] = $item->author;
274
 
275
  $webimg = $gmGallery->options['image'];
277
 
278
  $fileinfo = $gmCore->fileinfo($item->gmuid, false);
279
 
280
+ if(file_exists($fileinfo['filepath_original'] . '_backup')){
281
+ rename($fileinfo['filepath_original'] . '_backup', $fileinfo['filepath_original']);
282
  }
283
  $size = @getimagesize($fileinfo['filepath_original']);
284
 
285
  do{
286
  $editor = wp_get_image_editor($fileinfo['filepath_original']);
287
  if(is_wp_error($editor)){
288
+ $fail = $fileinfo['basename'] . " (wp_get_image_editor): " . $editor->get_error_message();
289
  break;
290
  }
291
 
298
  $editor->set_quality($webimg['quality']);
299
  $resized = $editor->resize($webimg['width'], $webimg['height'], $webimg['crop']);
300
  if(is_wp_error($resized)){
301
+ $fail = $fileinfo['basename'] . " (" . $resized->get_error_code() . " | editor->resize->webimage({$webimg['width']}, {$webimg['height']}, {$webimg['crop']})): " . $resized->get_error_message();
302
  break;
303
  }
304
 
305
  $saved = $editor->save($fileinfo['filepath']);
306
  if(is_wp_error($saved)){
307
+ $fail = $fileinfo['basename'] . " (" . $saved->get_error_code() . " | editor->save->webimage): " . $saved->get_error_message();
308
  break;
309
  }
310
  } else{
315
  $editor->set_quality($thumbimg['quality']);
316
  $resized = $editor->resize($thumbimg['width'], $thumbimg['height'], $thumbimg['crop']);
317
  if(is_wp_error($resized)){
318
+ $fail = $fileinfo['basename'] . " (" . $resized->get_error_code() . " | editor->resize->thumb({$thumbimg['width']}, {$thumbimg['height']}, {$thumbimg['crop']})): " . $resized->get_error_message();
319
  break;
320
  }
321
 
322
  $saved = $editor->save($fileinfo['filepath_thumb']);
323
  if(is_wp_error($saved)){
324
+ $fail = $fileinfo['basename'] . " (" . $saved->get_error_code() . " | editor->save->thumb): " . $saved->get_error_message();
325
  break;
326
  }
327
 
330
  @copy($fileinfo['filepath_original'], $fileinfo['filepath_thumb']);
331
  }
332
 
333
+ $id = $gmDB->insert_gmedia($gmedia);
334
 
335
  $metadata = $gmDB->generate_gmedia_metadata($id, $fileinfo);
336
  $meta['web'] = $metadata['web'];
348
  $out = array('error' => $gmProcessor->alert('danger', $fail));
349
  }
350
 
351
+ header('Content-Type: application/json; charset=' . get_option('blog_charset'), true);
352
+ echo json_encode($out);
353
  }
354
 
355
  die();
356
  }
357
 
358
+ add_action('wp_ajax_gmedia_get_modal', 'gmedia_get_modal');
359
+ function gmedia_get_modal(){
360
  global $gmDB, $gmCore, $gmGallery;
361
+ check_ajax_referer("GmediaGallery");
362
+ $user_ID = get_current_user_id();
 
 
363
  $button_class = 'btn-primary';
364
  $gm_terms = array();
365
  $modal = $gmCore->_post('modal');
366
+ switch($modal){
367
  case 'quick_gallery':
368
+ if(!current_user_can('gmedia_gallery_manage')){
369
+ die('-1');
370
+ }
371
+ $modal_title = __('Quick Gallery from selected items', 'gmLang');
372
+ $modal_button = __('Create Quick Gallery', 'gmLang');
373
  break;
374
  case 'filter_categories':
375
+ $modal_title = __('Show Images from Categories', 'gmLang');
376
+ $modal_button = __('Show Selected', 'gmLang');
377
  break;
378
  case 'assign_category':
379
+ if(!current_user_can('gmedia_terms')){
380
+ die('-1');
381
+ }
382
  $modal_title = __('Assign Category for Selected Images', 'gmLang');
383
  $modal_button = __('Assign Category', 'gmLang');
384
  break;
385
  case 'filter_albums':
386
+ $modal_title = __('Filter Albums', 'gmLang');
387
+ $modal_button = __('Show Selected', 'gmLang');
388
  break;
389
  case 'assign_album':
390
+ if(!current_user_can('gmedia_terms')){
391
+ die('-1');
392
+ }
393
+ $modal_title = __('Assign Album for Selected Items', 'gmLang');
394
+ $modal_button = __('Assign Album', 'gmLang');
395
  break;
396
  case 'filter_tags':
397
+ $modal_title = __('Filter by Tags', 'gmLang');
398
+ $modal_button = __('Show Selected', 'gmLang');
399
  break;
400
  case 'add_tags':
401
+ if(!current_user_can('gmedia_terms')){
402
+ die('-1');
403
+ }
404
+ $modal_title = __('Add Tags to Selected Items', 'gmLang');
405
+ $modal_button = __('Add Tags', 'gmLang');
406
  break;
407
  case 'delete_tags':
408
+ if(!current_user_can('gmedia_terms')){
409
+ die('-1');
410
+ }
411
  $button_class = 'btn-danger';
412
+ $modal_title = __('Delete Tags from Selected Items', 'gmLang');
413
+ $modal_button = __('Delete Tags', 'gmLang');
414
+ break;
415
+ case 'filter_authors':
416
+ $modal_title = __('Filter by Author', 'gmLang');
417
+ if($gmCore->caps['gmedia_show_others_media']){
418
+ $modal_button = __('Show Selected', 'gmLang');
419
+ } else{
420
+ $modal_button = false;
421
+ }
422
+ break;
423
+ case 'batch_edit':
424
+ if(!current_user_can('gmedia_edit_media')){
425
+ die('-1');
426
+ }
427
+ $modal_title = __('Batch Edit', 'gmLang');
428
+ $modal_button = __('Batch Save', 'gmLang');
429
  break;
430
  default:
431
  $modal_title = ' ';
432
  $modal_button = false;
433
  break;
434
  }
435
+ ?>
436
+ <form class="modal-content" id="ajax-modal-form" autocomplete="off" method="post">
437
+ <div class="modal-header">
438
+ <button type="button" class="close" data-dismiss="modal" aria-hidden="true">&times;</button>
439
+ <h4 class="modal-title"><?php echo $modal_title; ?></h4>
440
+ </div>
441
+ <div class="modal-body">
442
+ <?php
443
+ switch($modal){
444
+ case 'quick_gallery':
445
+ global $user_ID;
446
+ $ckey = "gmuser_{$user_ID}_library";
447
+ $selected = isset($_COOKIE[$ckey])? $_COOKIE[$ckey] : '';
448
+ if(empty($selected)){
449
+ _e('No selected Gmedia. Select at least one item in library.', 'gmLang');
450
+ break;
451
+ }
452
+ $modules = array();
453
+ if(($plugin_modules = glob(GMEDIA_ABSPATH . 'module/*', GLOB_ONLYDIR | GLOB_NOSORT))){
454
+ foreach($plugin_modules as $path){
455
+ $mfold = basename($path);
456
+ $modules[$mfold] = array(
457
+ 'place' => 'plugin',
458
+ 'module_name' => $mfold,
459
+ 'module_url' => "{$gmCore->gmedia_url}/module/{$mfold}",
460
+ 'module_path' => $path
461
+ );
462
+ }
463
+ }
464
+ if(($upload_modules = glob($gmCore->upload['path'] . '/' . $gmGallery->options['folder']['module'] . '/*', GLOB_ONLYDIR | GLOB_NOSORT))){
465
+ foreach($upload_modules as $path){
466
+ $mfold = basename($path);
467
+ $modules[$mfold] = array(
468
+ 'place' => 'upload',
469
+ 'module_name' => $mfold,
470
+ 'module_url' => "{$gmCore->upload['url']}/{$gmGallery->options['folder']['module']}/{$mfold}",
471
+ 'module_path' => $path
472
+ );
473
+ }
474
+ }
475
+ ?>
476
+ <div class="form-group">
477
+ <label><?php _e('Gallery Name', 'gmLang'); ?></label>
478
+ <input type="text" class="form-control input-sm" name="gallery[name]" placeholder="<?php echo esc_attr(__('Gallery Name', 'gmLang')); ?>" value="" required="required"/>
479
+ </div>
480
+ <div class="form-group">
481
+ <label><?php _e('Modue', 'gmLang'); ?></label>
482
+ <select class="form-control input-sm" name="gallery[module]">
483
+ <?php
484
+ if(!empty($modules)){
485
+ foreach($modules as $m){
486
+ /**
487
+ * @var $module_name
488
+ * @var $module_url
489
+ * @var $module_path
490
+ */
491
+ extract($m);
492
+ if(!file_exists($module_path . '/index.php')){
493
+ continue;
494
+ }
495
+ $module_info = array();
496
+ include($module_path . '/index.php');
497
+ if(empty($module_info)){
498
+ continue;
 
 
 
 
 
499
  }
500
  ?>
501
+ <option value="<?php echo $module_name; ?>"><?php echo $module_info['title']; ?></option>
502
+ <?php
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
503
  }
504
  }
 
 
 
 
505
  ?>
506
+ </select>
507
+ </div>
508
+ <div class="form-group">
509
+ <label><?php _e('Selected IDs', 'gmLang'); ?></label>
510
+ <input type="text" name="gallery[query][gmedia__in][]" class="form-control input-sm" value="<?php echo $selected; ?>" required="required"/>
511
+ </div>
512
+ <?php
513
+ break;
514
+ case 'filter_categories':
515
+ $gm_terms = $gmDB->get_terms('gmedia_category');
516
+ ?>
517
+ <div class="checkbox"><label><input type="checkbox" name="cat[]" value="0"> <?php _e('Uncategorized', 'gmLang'); ?></label></div>
518
+ <?php if(count($gm_terms)){
519
+ foreach($gm_terms as $term){
520
+ if($term->count){
521
  ?>
522
+ <div class="checkbox">
523
+ <label><input type="checkbox" name="cat[]" value="<?php echo $term->term_id; ?>"> <?php echo esc_html($term->name); ?></label>
524
+ <span class="badge pull-right"><?php echo $term->count; ?></span>
525
+ </div>
526
+ <?php
527
+ }
528
+ }
529
+ }
530
+ break;
531
+ case 'assign_category':
532
+ $term_type = 'gmedia_category';
533
+ $gm_terms = $gmGallery->options['taxonomies'][$term_type];
534
+ ?>
535
+ <div class="radio"><label><input type="radio" name="cat" value="0"> <?php _e('Uncategorized', 'gmLang'); ?></label></div>
536
+ <?php if(count($gm_terms)){
537
+ foreach($gm_terms as $term_name => $term_title){
538
+ echo '<div class="radio"><label><input type="radio" name="cat" value="' . $term_name . '"> ' . esc_html($term_title) . '</label></div>';
539
+ }
540
+ }
541
+ break;
542
+ case 'filter_albums':
543
+ if($gmCore->caps['gmedia_show_others_media']){
544
+ $args = array();
545
+ } else{
546
+ $args = array(
547
+ 'global' => array(0, $user_ID),
548
+ 'orderby' => 'global_desc_name'
549
+ );
550
+ }
551
+ $gm_terms = $gmDB->get_terms('gmedia_album', $args);
552
+ ?>
553
+ <div class="checkbox"><label><input type="checkbox" name="alb[]" value="0"> <?php _e('No Album', 'gmLang'); ?></label></div>
554
+ <hr/>
555
+ <?php if(count($gm_terms)){
556
+ foreach($gm_terms as $term){
557
+ $author_name = '';
558
+ if($term->global){
559
+ if($gmCore->caps['gmedia_show_others_media']){
560
+ $author_name .= sprintf(__('by %s', 'gmLang'), get_the_author_meta('display_name', $term->global));
561
  }
562
+ } else{
563
+ $author_name .= '(' . __('shared', 'gmLang') . ')';
564
+ }
565
+ if ('public' != $term->status) {
566
+ $author_name .= ' [' . $term->status . ']';
567
+ }
568
+ if($author_name){
569
+ $author_name = " <small>{$author_name}</small>";
570
+ }
571
+ ?>
572
+ <div class="checkbox">
573
+ <label><input type="checkbox" name="alb[]" value="<?php echo $term->term_id; ?>"> <?php echo esc_html($term->name) . $author_name; ?></label>
574
+ <span class="badge pull-right"><?php echo $term->count; ?></span>
575
+ </div>
576
+ <?php
577
+ }
578
+ } else{
579
+ $modal_button = false;
580
+ }
581
+ break;
582
+ case 'assign_album':
583
+ if($gmCore->caps['gmedia_edit_others_media']){
584
+ $args = array();
585
+ } else{
586
+ $args = array(
587
+ 'global' => array(0, $user_ID),
588
+ 'orderby' => 'global_desc_name'
589
+ );
590
+ }
591
+ $gm_terms = $gmDB->get_terms('gmedia_album', $args);
592
+
593
+ $terms_album = '';
594
+ if(count($gm_terms)){
595
+ foreach($gm_terms as $term){
596
+ $author_name = '';
597
+ if($term->global){
598
+ if($gmCore->caps['gmedia_edit_others_media']){
599
+ $author_name .= ' &nbsp; ' . sprintf(__('by %s', 'gmLang'), get_the_author_meta('display_name', $term->global));
600
+ }
601
+ } else{
602
+ $author_name .= ' &nbsp; (' . __('shared', 'gmLang') . ')';
603
+ }
604
+ if ('public' != $term->status) {
605
+ $author_name .= ' [' . $term->status . ']';
606
+ }
607
+ $terms_album .= '<option value="' . $term->term_id . '" data-count="' . $term->count . '" data-name="' . esc_html($term->name) . '" data-meta="' . $author_name . '">' . esc_html($term->name) . $author_name . '</option>' . "\n";
608
+ }
609
+ }
610
+ ?>
611
+ <div class="form-group">
612
+ <label><?php _e('Move to Album', 'gmLang'); ?> </label>
613
+ <select id="combobox_gmedia_album" name="alb" class="form-control" placeholder="<?php _e('Album Name...', 'gmLang'); ?>">
614
+ <option></option>
615
+ <option value="0"><?php _e('No Album', 'gmLang'); ?></option>
616
+ <?php echo $terms_album; ?>
617
+ </select>
618
+ </div>
619
+ <div class="form-group">
620
+ <div class="checkbox"><label><input type="checkbox" name="status_global" value="1" checked> <?php _e('Make status of selected items be the same as Album status', 'gmLang'); ?></label></div>
621
+ </div>
622
+ <script type="text/javascript">
623
+ jQuery(function($){
624
+ var albums = $('#combobox_gmedia_album');
625
+ var albums_data = $('option', albums);
626
+ albums.selectize({
627
+ <?php if($gmCore->caps['gmedia_album_manage']){ ?>
628
+ create: function(input){
629
+ return {
630
+ value: input,
631
+ text: input
632
+ }
633
+ },
634
+ createOnBlur: true,
635
+ <?php } else{ ?>
636
+ create: false,
637
+ <?php } ?>
638
+ persist: false,
639
+ render: {
640
+ item: function(item, escape){
641
+ if(0 === (parseInt(item.value, 10) || 0)){
642
+ return '<div>' + escape(item.text) + '</div>';
643
+ }
644
+ if(item.$order) {
645
+ var data = $(albums_data[item.$order]).data();
646
+ return '<div>' + escape(data.name) + ' <small>' + escape(data.meta) + '</small></div>';
647
+ }
648
+ },
649
+ option: function(item, escape){
650
+ if(0 === (parseInt(item.value) || 0)){
651
+ return '<div>' + escape(item.text) + '</div>';
652
+ }
653
+ if(item.$order) {
654
+ var data = $(albums_data[item.$order]).data();
655
+ return '<div>' + escape(data.name) + ' <small>' + escape(data.meta) + '</small>' + ' <span class="badge pull-right">' + escape(data.count) + '</span></div>';
656
+ }
657
+ }
658
+ }
659
+
660
+ });
661
+ });
662
+ </script>
663
+ <?php
664
+ break;
665
+ case 'filter_tags':
666
+ $gm_terms = $gmDB->get_terms('gmedia_tag', array('fields' => 'names_count'));
667
+ $gm_terms = array_values($gm_terms);
668
+ if(count($gm_terms)){
669
+ ?>
670
+ <div class="form-group">
671
+ <input id="combobox_gmedia_tag" name="tag_ids" class="form-control input-sm" value="" placeholder="<?php _e('Filter Tags...', 'gmLang'); ?>"/></div>
672
+ <script type="text/javascript">
673
+ jQuery(function($){
674
+ var gm_terms = <?php echo json_encode($gm_terms); ?>;
675
+ var items = gm_terms.map(function(x){
676
+ return { id: x.term_id, name: x.name, count: x.count };
677
+ });
678
+ $('#combobox_gmedia_tag').selectize({
679
+ delimiter: ',',
680
+ maxItems: null,
681
+ openOnFocus: true,
682
+ labelField: 'name',
683
+ hideSelected: true,
684
+ options: items,
685
+ searchField: ['name'],
686
+ valueField: 'id',
687
+ create: false,
688
+ render: {
689
+ item: function(item, escape){
690
+ return '<div>' + escape(item.name) + '</div>';
691
+ },
692
+ option: function(item, escape){
693
+ return '<div>' + escape(item.name) + ' <span class="badge">' + escape(item.count) + '</span></div>';
694
+ }
695
+ }
696
+ });
697
+ });
698
+ </script>
699
+ <?php
700
+ } else{
701
+ $modal_button = false; ?>
702
+ <p class="notags"><?php _e('No tags', 'gmLang'); ?></p>
703
+ <?php
704
+ }
705
+ break;
706
+ case 'add_tags':
707
+ $gm_terms = $gmDB->get_terms('gmedia_tag', array('fields' => 'names_count'));
708
+ $gm_terms = array_values($gm_terms);
709
+ if(count($gm_terms)){
710
+ ?>
711
+ <div class="form-group">
712
+ <input id="combobox_gmedia_tag" name="tag_names" class="form-control input-sm" value="" placeholder="<?php _e('Add Tags...', 'gmLang'); ?>"/></div>
713
+ <script type="text/javascript">
714
+ jQuery(function($){
715
+ var gm_terms = <?php echo json_encode($gm_terms); ?>;
716
+ var items = gm_terms.map(function(x){
717
+ return { id: x.term_id, name: x.name, count: x.count };
718
+ });
719
+ $('#combobox_gmedia_tag').selectize({
720
+ delimiter: ',',
721
+ maxItems: null,
722
+ openOnFocus: false,
723
+ labelField: 'name',
724
+ hideSelected: true,
725
+ options: items,
726
+ searchField: ['name'],
727
+ valueField: 'name',
728
+ persist: false,
729
+ <?php if($gmCore->caps['gmedia_tag_manage']){ ?>
730
+ createOnBlur: true,
731
+ create: function(input){
732
+ return {
733
+ name: input
734
+ }
735
+ },
736
+ <?php } else{ ?>
737
+ create: false,
738
+ <?php } ?>
739
+ render: {
740
+ item: function(item, escape){
741
+ return '<div>' + escape(item.name) + '</div>';
742
+ },
743
+ option: function(item, escape){
744
+ return '<div>' + escape(item.name) + ' <span class="badge">' + escape(item.count) + '</span></div>';
745
+ }
746
+ }
747
+ });
748
+ });
749
+ </script>
750
+ <?php
751
+ } else{
752
+ $modal_button = false; ?>
753
+ <p class="notags"><?php _e('No tags', 'gmLang'); ?></p>
754
+ <?php
755
+ }
756
+ break;
757
+ case 'delete_tags':
758
+ global $gmProcessor;
759
+ if(!empty($gmProcessor->selected_items)){
760
+ $gm_terms = $gmDB->get_gmedia_terms($gmProcessor->selected_items, 'gmedia_tag');
761
+ }
762
+ if(count($gm_terms)){
763
+ foreach($gm_terms as $term){
764
  ?>
765
+ <div class="checkbox">
766
+ <label><input type="checkbox" name="tag_id[]" value="<?php echo $term->term_id; ?>"> <?php echo esc_html($term->name); ?></label>
767
+ <span class="badge pull-right"><?php echo $term->count; ?></span>
768
  </div>
769
+ <?php
770
+ }
771
+ } else{
772
+ $modal_button = false; ?>
773
+ <p class="notags"><?php _e('No tags', 'gmLang'); ?></p>
774
+ <?php
775
+ }
776
+ break;
777
+ case 'filter_authors':
778
+ if($gmCore->caps['gmedia_show_others_media']){
779
+ ?>
780
+ <div class="form-group">
781
+ <label><?php _e('Choose Author', 'gmLang'); ?></label>
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
782
  <?php
783
+ $user_ids = $gmCore->get_editable_user_ids();
784
+ if($user_ids){
785
+ wp_dropdown_users(array(
786
+ 'show_option_all' => ' &#8212; ',
787
+ 'include' => $user_ids,
788
+ 'include_selected' => true,
789
+ 'name' => 'author_ids',
790
+ 'selected' => $user_ID,
791
+ 'class' => 'form-control'
792
+ ));
793
+ } else{
794
+ echo '<div>' . get_the_author_meta('display_name', $user_ID) . '</div>';
795
  }
796
+ ?>
797
+ </div>
798
+ <?php
799
+ } else{
800
+ echo '<p>' . __('You are not allowed to see others media') . '</p>';
801
+ echo '<p><strong>' . get_the_author_meta('display_name', $user_ID) . '</strong></p>';
802
  }
803
+ break;
804
+ case 'batch_edit':
805
  ?>
806
+ <p><?php _e('Note, data will be saved to all selected items in Gmedia Library.') ?></p>
807
+ <div class="form-group">
808
+ <label><?php _e('Title', 'gmLang'); ?></label>
809
+ <select class="form-control input-sm batch_set" name="batch_title">
810
+ <option value=""><?php _e('Skip. Do not change', 'gmLang'); ?></option>
811
+ <option value="empty"><?php _e('Empty Title', 'gmLang'); ?></option>
812
+ <option value="filename"><?php _e('From Filename', 'gmLang'); ?></option>
813
+ <option value="custom"><?php _e('Custom', 'gmLang'); ?></option>
814
+ </select>
815
+ <input class="form-control input-sm batch_set_custom" style="margin-top:5px;display:none;" name="batch_title_custom" value="" placeholder="<?php _e('Enter custom title here'); ?>" />
816
+ </div>
817
+ <div class="form-group">
818
+ <label><?php _e('Description', 'gmLang'); ?></label>
819
+ <select class="form-control input-sm batch_set" name="batch_description">
820
+ <option value=""><?php _e('Skip. Do not change', 'gmLang'); ?></option>
821
+ <option value="empty"><?php _e('Empty Description', 'gmLang'); ?></option>
822
+ <option value="custom"><?php _e('Custom', 'gmLang'); ?></option>
823
+ </select>
824
+ <textarea class="form-control input-sm batch_set_custom" style="margin-top:5px;display:none;" cols="30" rows="3" name="batch_description_custom" placeholder="<?php _e('Enter description here'); ?>"></textarea>
825
+ </div>
826
+ <div class="form-group">
827
+ <label><?php _e('Link', 'gmLang'); ?></label>
828
+ <select class="form-control input-sm batch_set" name="batch_link">
829
+ <option value=""><?php _e('Skip. Do not change', 'gmLang'); ?></option>
830
+ <option value="empty"><?php _e('Empty Link', 'gmLang'); ?></option>
831
+ <option value="self"><?php _e('Link to original file', 'gmLang'); ?></option>
832
+ <option value="custom"><?php _e('Custom', 'gmLang'); ?></option>
833
+ </select>
834
+ <input class="form-control input-sm batch_set_custom" style="margin-top:5px;display:none;" name="batch_link_custom" value="" placeholder="<?php _e('Enter url here'); ?>" />
835
+ </div>
836
+ <div class="form-group">
837
+ <label><?php _e('Status', 'gmLang'); ?></label>
838
+ <select class="form-control input-sm batch_set" name="batch_status">
839
+ <option value=""><?php _e('Skip. Do not change', 'gmLang'); ?></option>
840
+ <option value="public"><?php _e('Public', 'gmLang'); ?></option>
841
+ <option value="private"><?php _e('Private', 'gmLang'); ?></option>
842
+ <option value="draft"><?php _e('Draft', 'gmLang'); ?></option>
843
+ </select>
844
+ </div>
845
+ <?php $user_ids = $gmCore->get_editable_user_ids();
846
+ if($user_ids){
847
+ ?>
848
+ <div class="form-group">
849
+ <label><?php _e('Author', 'gmLang'); ?></label>
850
+ <?php wp_dropdown_users(array(
851
+ 'show_option_none' => __('Skip. Do not change', 'gmLang'),
852
+ 'include' => $user_ids,
853
+ 'include_selected' => true,
854
+ 'name' => 'batch_author',
855
+ 'selected' => -1,
856
+ 'class' => 'input-sm form-control'
857
+ ));
858
+ ?>
859
+ </div>
860
  <?php } ?>
861
+ <script type="text/javascript">
862
+ jQuery(function($){
863
+ $('select.batch_set').change(function(){
864
+ if('custom' == $(this).val()){
865
+ $(this).next().css({display:'block'});
866
+ } else{
867
+ $(this).next().css({display:'none'});
868
+ }
869
+ });
870
+ });
871
+ </script>
872
+ <?php
873
+ break;
874
+ default:
875
+ _e('Ops! Something wrong.', 'gmLang');
876
+ break;
877
+ }
878
+ ?>
879
+ </div>
880
+ <div class="modal-footer">
881
+ <button type="button" class="btn btn-default" data-dismiss="modal"><?php _e('Cancel', 'gmLang'); ?></button>
882
+ <?php if($modal_button){ ?>
883
+ <input type="hidden" name="<?php echo $modal; ?>" />
884
+ <button type="button" onclick="jQuery('#ajax-modal-form').submit()" name="<?php echo $modal; ?>" class="btn <?php echo $button_class; ?>"><?php echo $modal_button; ?></button>
885
+ <?php }
886
+ wp_nonce_field('gmedia_modal');
887
+ ?>
888
+ </div>
889
  </form><!-- /.modal-content -->
890
+ <?php
891
  die();
892
  }
893
 
894
+ add_action('wp_ajax_gmedia_tag_edit', 'gmedia_tag_edit');
895
  function gmedia_tag_edit(){
896
+ global $gmCore, $gmDB, $gmProcessor;
897
 
898
+ check_ajax_referer('GmediaTerms');
899
+ if(!current_user_can('gmedia_tag_manage')){
900
+ die('-1');
901
+ }
902
 
903
  $term = array('taxonomy' => 'gmedia_tag');
904
  $term['name'] = trim($gmCore->_post('tag_name', ''));
905
  $term['term_id'] = intval($gmCore->_post('tag_id', 0));
906
+ if($term['name'] && !$gmCore->is_digit($term['name'])){
907
+ if(($term_id = $gmDB->term_exists($term['term_id'], $term['taxonomy']))){
908
+ if(!$gmDB->term_exists($term['name'], $term['taxonomy'])){
909
+ $term_id = $gmDB->update_term($term['term_id'], $term['taxonomy'], $term);
910
+ if(is_wp_error($term_id)){
911
+ $out['error'] = $gmProcessor->alert('danger', $term_id->get_error_message());
912
+ } else{
913
+ $out['msg'] = $gmProcessor->alert('info', sprintf(__("Tag #%d successfuly updated", 'gmLang'), $term_id));
914
+ }
915
  } else{
916
+ $out['error'] = $gmProcessor->alert('danger', __("A term with the name provided already exists", 'gmLang'));
917
  }
918
  } else{
919
+ $out['error'] = $gmProcessor->alert('danger', __("A term with the id provided do not exists", 'gmLang'));
920
  }
921
  } else{
922
+ $out['error'] = $gmProcessor->alert('danger', __("Term name can't be only digits or empty", 'gmLang'));
923
  }
924
 
925
+ header('Content-Type: application/json; charset=' . get_option('blog_charset'), true);
926
+ echo json_encode($out);
927
 
928
  die();
929
 
930
  }
931
 
932
+ add_action('wp_ajax_gmedia_module_install', 'gmedia_module_install');
933
  function gmedia_module_install(){
934
  global $gmCore, $gmProcessor, $gmGallery;
935
 
936
+ check_ajax_referer('GmediaModule');
937
+ if(!current_user_can('gmedia_module_manage')){
938
  echo $gmProcessor->alert('danger', __('You are not allowed to install modules'));
939
  die();
940
  }
941
 
942
  if(($download = $gmCore->_post('download'))){
943
  $module = $gmCore->_post('module');
944
+ $mzip = download_url($download);
945
  if(is_wp_error($mzip)){
946
  echo $gmProcessor->alert('danger', $mzip->get_error_message());
947
  die();
948
  }
949
 
950
+ $mzip = str_replace("\\", "/", $mzip);
951
  $to_folder = $gmCore->upload['path'] . '/' . $gmGallery->options['folder']['module'] . '/';
952
 
953
  global $wp_filesystem;
977
  echo $gmProcessor->alert('danger', __('No file specified', 'gmLang'));
978
  }
979
 
980
+ die();
981
 
982
  }
983
 
984
 
985
+ add_action('wp_ajax_gmedia_import_modal', 'gmedia_import_modal');
986
  function gmedia_import_modal(){
987
  global $user_ID, $gmDB, $gmCore, $gmGallery;
988
 
989
+ check_ajax_referer('GmediaGallery');
990
+ if(!current_user_can('gmedia_import')){
991
+ die('-1');
992
+ }
993
 
994
  ?>
995
  <div class="modal-content">
997
  <button type="button" class="close" data-dismiss="modal" aria-hidden="true">&times;</button>
998
  <h4 class="modal-title"><?php _e('Import from WP Media Library'); ?></h4>
999
  </div>
1000
+ <div class="modal-body" style="position:relative; min-height:270px;">
1001
  <form id="import_form" name="import_form" target="import_window" action="<?php echo $gmCore->gmedia_url; ?>/admin/import.php" method="POST" accept-charset="utf-8">
1002
  <?php wp_nonce_field('GmediaImport'); ?>
1003
+ <input type="hidden" id="import-action" name="import" value="<?php echo esc_attr($gmCore->_post('modal', '')); ?>"/>
1004
+ <input type="hidden" name="selected" value="<?php $ckey = "gmuser_{$user_ID}_wpmedia";
1005
+ if(isset($_COOKIE[$ckey])){
1006
+ echo $_COOKIE[$ckey];
1007
+ } ?>"/>
1008
+ <?php if($gmCore->caps['gmedia_terms']){ ?>
1009
+ <div class="form-group">
1010
+ <?php
1011
+ $term_type = 'gmedia_category';
1012
+ $gm_terms = $gmGallery->options['taxonomies'][$term_type];
1013
 
1014
+ $terms_category = '';
1015
+ if(count($gm_terms)){
1016
+ foreach($gm_terms as $term_name => $term_title){
1017
+ $terms_category .= '<option value="' . $term_name . '">' . esc_html($term_title) . '</option>' . "\n";
1018
+ }
1019
  }
1020
+ ?>
1021
+ <label><?php _e('Assign Category', 'gmLang'); ?>
1022
+ <small><?php _e('(for images only)') ?></small>
1023
+ </label>
1024
+ <select id="gmedia_category" name="terms[gmedia_category]" class="form-control input-sm">
1025
+ <option value=""><?php _e('Uncategorized', 'gmLang'); ?></option>
1026
+ <?php echo $terms_category; ?>
1027
+ </select>
1028
+ </div>
1029
 
1030
+ <div class="form-group">
1031
+ <?php
1032
+ $term_type = 'gmedia_album';
1033
+ $gm_terms = $gmDB->get_terms($term_type, array('global' => array(0, $user_ID), 'orderby' => 'global_desc_name'));
1034
 
1035
+ $terms_album = '';
1036
+ if(count($gm_terms)){
1037
+ foreach($gm_terms as $term){
1038
+ $terms_album .= '<option value="' . esc_attr($term->term_id) . '">' . esc_html($term->name) . ($term->global? '' : __(' (shared)', 'gmLang')) . ('public' == $term->status? '' : " [{$term->status}]") . '</option>' . "\n";
1039
+ }
1040
  }
1041
+ ?>
1042
+ <label><?php _e('Add to Album', 'gmLang'); ?> </label>
1043
+ <select id="combobox_gmedia_album" name="terms[gmedia_album]" class="form-control input-sm" placeholder="<?php _e('Album Name...', 'gmLang'); ?>">
1044
+ <option value=""></option>
1045
+ <?php echo $terms_album; ?>
1046
+ </select>
1047
+ </div>
 
1048
 
1049
+ <div class="form-group">
1050
+ <?php
1051
+ $term_type = 'gmedia_tag';
1052
+ $gm_terms = $gmDB->get_terms($term_type, array('fields' => 'names'));
1053
+ ?>
1054
+ <label><?php _e('Add Tags', 'gmLang'); ?> </label>
1055
+ <input id="combobox_gmedia_tag" name="terms[gmedia_tag]" class="form-control input-sm" value="" placeholder="<?php _e('Add Tags...', 'gmLang'); ?>"/>
1056
+ </div>
1057
+ <?php } else{ ?>
1058
+ <p><?php _e('You are not allowed to assign terms', 'gmLang') ?></p>
1059
+ <?php } ?>
1060
 
1061
  <script type="text/javascript">
1062
  jQuery(function($){
1063
+ <?php if($gmCore->caps['gmedia_terms']){ ?>
1064
  $('#combobox_gmedia_album').selectize({
1065
+ <?php if($gmCore->caps['gmedia_album_manage']){ ?>
1066
  create: true,
1067
+ createOnBlur: true,
1068
+ <?php } else{ ?>
1069
+ create: false,
1070
+ <?php } ?>
1071
  persist: false
1072
  });
1073
+ var gm_terms = <?php echo json_encode($gm_terms); ?>;
1074
+ var items = gm_terms.map(function(x){
1075
+ return { item: x };
1076
+ });
1077
  $('#combobox_gmedia_tag').selectize({
1078
+ <?php if($gmCore->caps['gmedia_tag_manage']){ ?>
1079
+ create: function(input){
1080
+ return {
1081
+ item: input
1082
+ }
1083
+ },
1084
+ createOnBlur: true,
1085
+ <?php } else{ ?>
1086
+ create: false,
1087
+ <?php } ?>
1088
  delimiter: ',',
1089
  maxItems: null,
1090
+ openOnFocus: false,
1091
  persist: false,
1092
  options: items,
1093
  labelField: 'item',
1094
  valueField: 'item',
1095
+ hideSelected: true
 
 
 
 
1096
  });
1097
+ <?php } ?>
1098
 
1099
  $('#import-done').one('click', function(e){
1100
  $('#import_form').submit();
1101
  $(this).button('loading').prop('disabled', true);
1102
  $('#import_window').show();
1103
+ $(this).one('click', function(e){
1104
+ $('#importModal').modal('hide');
1105
+ });
1106
  });
1107
 
1108
  });
1111
  <iframe name="import_window" id="import_window" src="about:blank" style="display:none; position:absolute; left:0; top:0; width:100%; height:100%; z-index:1000; background-color:#ffffff; padding:20px 20px 0 20px;" onload="gmedia_import_done()"></iframe>
1112
  </div>
1113
  <div class="modal-footer">
1114
+ <button type="button" class="btn btn-default" data-dismiss="modal"><?php _e('Cancel', 'gmLang'); ?></button>
1115
+ <button type="button" id="import-done" class="btn btn-primary" data-complete-text="<?php _e('Close', 'gmLang'); ?>" data-loading-text="<?php _e('Working...', 'gmLang'); ?>"><?php _e('Import', 'gmLang'); ?></button>
1116
  </div>
1117
  </div><!-- /.modal-content -->
1118
  <?php
1119
  die();
1120
  }
1121
 
1122
+ add_action('wp_ajax_gmedia_relimage', 'gmedia_relimage');
1123
  /**
1124
  * Do Actions via Ajax
1125
+ * TODO add related images to post
1126
+ * TODO check author for related images
1127
  *
1128
  * @return void
1129
  */
1130
+ function gmedia_relimage(){
1131
  /** @var $wpdb wpdb */
1132
  global $wpdb, $gmCore, $gmDB;
1133
 
1134
+ check_ajax_referer("grandMedia");
1135
 
1136
  // check for correct capability
1137
+ if(!current_user_can('gmedia_library')){
1138
+ die('-1');
1139
+ }
1140
 
1141
+ $post_tags = array_filter(array_map('trim', explode(',', stripslashes(urldecode($gmCore->_get('tags', ''))))));
1142
+ $paged = (int)$gmCore->_get('paged', 1);
1143
  $per_page = 20;
1144
+ $s = trim(stripslashes(urldecode($gmCore->_get('search'))));
1145
+ if($s && strlen($s) > 2){
1146
  $post_tags = array();
1147
+ } else{
1148
  $s = '';
1149
  }
1150
 
1151
  $gmediaLib = array();
1152
+ $relative = (int)$gmCore->_get('rel', 1);
1153
  $continue = true;
1154
  $content = '';
1155
 
1156
  if($relative == 1){
1157
  $arg = array(
1158
+ 'mime_type' => 'image/*',
1159
+ 'orderby' => 'ID',
1160
+ 'order' => 'DESC',
1161
+ 'per_page' => $per_page,
1162
+ 'page' => $paged,
1163
+ 's' => $s,
1164
+ 'tag_name__in' => $post_tags,
1165
+ 'null_tags' => true
1166
  );
1167
+ $gmediaLib = $gmDB->get_gmedias($arg);
1168
  }
1169
 
1170
+ if(empty($gmediaLib) && count($post_tags)){
1171
 
1172
  if($relative == 1){
1173
  $relative = 0;
1174
  $paged = 1;
1175
+ $content .= '<li class="emptydb">' . __('No items related by tags.', 'gmLang') . '</li>' . "\n";
1176
  }
1177
 
1178
+ $tag__not_in = "'" . implode("','", array_map('esc_sql', array_unique((array)$post_tags))) . "'";
1179
+ $tag__not_in = $wpdb->get_col("
1180
  SELECT term_id
1181
  FROM {$wpdb->prefix}gmedia_term
1182
  WHERE taxonomy = 'gmedia_tag'
1183
  AND name IN ({$tag__not_in})
1184
+ ");
1185
 
1186
  $arg = array(
1187
+ 'mime_type' => 'image/*',
1188
+ 'orderby' => 'ID',
1189
+ 'order' => 'DESC',
1190
+ 'per_page' => $per_page,
1191
+ 'page' => $paged,
1192
+ 'tag__not_in' => $tag__not_in
1193
  );
1194
+ $gmediaLib = $gmDB->get_gmedias($arg);
1195
  }
1196
 
1197
+ if(($count = count($gmediaLib))){
1198
+ foreach($gmediaLib as $item){
1199
  $content .= "<li class='gmedia-image-li' id='gm-img-{$item->ID}'>\n";
1200
+ $content .= " <a target='_blank' class='gm-img' data-gmid='{$item->ID}' href='" . $gmCore->gm_get_media_image($item) . "'><img src='" . $gmCore->gm_get_media_image($item, 'thumb') . "' height='50' style='width:auto;' alt='' title='" . esc_attr($item->title) . "' /></a>\n";
1201
+ $content .= " <div style='display: none;' class='gm-img-description'>" . esc_html($item->description) . "</div>\n";
1202
  $content .= "</li>\n";
1203
  }
1204
  if(($count < $per_page) && ($relative == 0 || !empty($s))){
1205
  $continue = false;
1206
  }
1207
+ } else{
 
1208
  if($s){
1209
+ $content .= '<li class="emptydb">' . __('No items matching the search query.', 'gmLang') . '</li>' . "\n";
1210
+ } else{
1211
+ $content .= '<li class="emptydb">' . __('No items to show', 'gmLang') . '</li>' . "\n";
1212
  }
1213
  $continue = false;
1214
  }
1215
+ $result = array('paged' => $paged, 'rel' => $relative, 'continue' => $continue, 'content' => $content, 'data' => $post_tags);
1216
+ header('Content-Type: application/json; charset=' . get_option('blog_charset'), true);
1217
+ echo json_encode($result);
1218
 
1219
  die();
1220
 
1221
  }
1222
 
1223
+ add_action('wp_ajax_gmedia_ftp_browser', 'gmedia_ftp_browser');
1224
  /**
1225
  * jQuery File Tree PHP Connector
1226
+ * @author Cory S.N. LaViska - A Beautiful Site (http://abeautifulsite.net/)
1227
  * @version 1.0.1
1228
  *
1229
  * @return string folder content
1230
  */
1231
+ function gmedia_ftp_browser(){
1232
+ if(!current_user_can('gmedia_import')){
1233
  die('No access');
1234
+ }
1235
 
1236
  // if nonce is not correct it returns -1
1237
+ check_ajax_referer('grandMedia');
1238
 
1239
  // start from the default path
1240
+ $root = trailingslashit(ABSPATH);
1241
  // get the current directory
1242
+ $dir = trailingslashit(urldecode($_POST['dir']));
1243
 
1244
+ if(file_exists($root . $dir)){
1245
  $files = scandir($root . $dir);
1246
  natcasesort($files);
1247
 
1248
  // The 2 counts for . and ..
1249
+ if(count($files) > 2){
1250
  echo "<ul class=\"jqueryDirTree\" style=\"display: none;\">";
1251
  // return only directories
1252
+ foreach($files as $file){
1253
+ if(in_array($file, array('wp-admin', 'wp-includes', 'plugins', 'themes', 'thumb', 'thumbs'))){
1254
  continue;
1255
+ }
1256
 
1257
+ if(file_exists($root . $dir . $file) && $file != '.' && $file != '..' && is_dir($root . $dir . $file)){
1258
  echo "<li class=\"directory collapsed\"><a href=\"#\" rel=\"" . esc_attr($dir . $file) . "/\">" . esc_html($file) . "</a></li>";
1259
  }
1260
  }
admin/css/grand-media.css CHANGED
@@ -5,6 +5,12 @@ html { background:#708090; }
5
  #TB_caption { height:auto; }
6
  a { color:#0074a2; }
7
  input[type="checkbox"] { margin-top:2px; margin-right:2px }
 
 
 
 
 
 
8
  form {margin:0;}
9
  body.gmedia-busy { cursor:wait !important; }
10
  iframe, iframe html { background-color:#ffffff; }
@@ -62,6 +68,8 @@ div#gmedia-header h2 {
62
 
63
  div#gmedia-navbar { font-size:14px; }
64
 
 
 
65
  form.gmedia-search-form {
66
  float:right;
67
  margin-left:10px;
@@ -79,22 +87,30 @@ input.pager_current_page {
79
  }
80
 
81
  .txt-lg { font-size:120%; line-height:50%; }
82
-
83
  .btn > input[type="checkbox"] { margin-top:0; width:16px; height:16px; }
84
 
85
  .gm-checkgroup { margin-right:20px; }
86
 
87
  .gm-backfade { background-color:rgba(0, 0, 0, 0.1); }
88
 
 
 
 
89
  div#gm-list-table { font-size:13px; }
90
  .list-group-item.row { position:relative; margin-left:0; margin-right:0; padding-left:0; padding-right:0; }
91
- .list-group-item.d-row { position:relative; }
92
- div.list-group-item.d-row:hover { background-color:#fafafa; }
93
- form.list-group-item.d-row:hover { background-color:#fcfcfc; }
94
- .list-group-item.d-row.active { background-color:rgb(250, 255, 245); box-shadow:inset -1px 0 0 2px rgb(250, 255, 245), inset 7px 0 0 0 #1e8cbe; }
95
- .list-group-item.d-row.active:hover { background-color:rgb(245, 255, 240); box-shadow:inset -1px 0 0 2px rgb(245, 255, 240), inset 7px 0 0 0 #1e8cbe; }
 
 
 
 
96
 
97
  label.cb_media-object { margin-right:15px; float:left; width:310px; max-width: 100%; }
 
98
  .d-row .thumbnail { margin-bottom:0; }
99
  .active .thumbnail { border-color:#428bca; }
100
  .thumbnail { position:relative; display:inline-block; max-width:100%; }
@@ -104,10 +120,12 @@ label.cb_media-object { margin-right:15px; float:left; width:310px; max-width: 1
104
  .media-meta { width:100%; overflow:hidden; text-overflow:ellipsis; /*white-space:nowrap;*/ }
105
  .media-meta .label-default { background-color:#eeeeee; color:#444444; }
106
 
107
- .gmedia_id, .term_id { position:absolute; right:10px; top:10px; display:none; }
 
 
108
  .term_id { position:absolute; right:0; top:0; padding: 10px 10px 0 0px; background-color:#fff; display:none; height:100%; box-shadow: -10px 0 5px -2px #fff; z-index:100; }
109
- #gm-list-table .list-group-item:hover .gmedia_id,
110
- #gm-list-table .list-group-item:hover .term_id { display:block; }
111
 
112
  #gm-list-table .hidden { display:none !important; visibility:hidden !important; }
113
 
@@ -116,13 +134,14 @@ form#adv-settings .form-inline .form-group { margin-right:20px; }
116
  form.changed { }
117
  form.changed.saved { }
118
  form.changed .gm-last-edited { text-decoration:line-through; }
 
119
 
120
  .rel-selected-hide { display:none; }
121
 
122
  div#pluploadUploader { padding:0; }
123
  div#pluploadUploader * { box-sizing:content-box; }
124
  .plupload_container { padding:0; }
125
- div#pluploadUploader_container { border-bottom-right-radius: 4px; }
126
  div#pluploadUploader_container .plupload_filelist_footer { border-bottom-right-radius: 4px; }
127
  div.panel-body, div#gmedia-msg-panel { -webkit-transition:all .2s ease-in-out; transition:all .2s ease-in-out; }
128
  div.panel-body:empty, div#gmedia-msg-panel:empty { padding:0; }
@@ -139,17 +158,20 @@ div#gmedia-msg-panel .alert { padding:2px 35px 2px 12px; margin-bottom:5px; }
139
  .selectize-control.input-sm .selectize-input:after { right: 10px; }
140
 
141
  .term-list-item {padding-top:0; padding-bottom:0;}
 
 
142
  .term-list-item .checkbox input {margin-top:0; margin-right:15px;}
143
- .term-list-item .term-description {padding:1px 0 4px; white-space:nowrap; overflow:hidden;}
144
  .term-list-item .term-description:empty {padding:0;}
145
  .term-list-item .term-images {padding-top:5px; padding-bottom:2px; overflow:hidden; white-space:nowrap;}
146
  .term-list-item .term-images img {position:relative; height:30px; width:auto; background-color:#ffffff;}
147
- .term-list-item .term-images img:hover {z-index:100 !important;}
 
148
 
149
- .edit_tag_form {display:inline-block; margin-left:-5px;}
150
  .edit_tag_form input.edit_tag_input {padding:0 5px;border-width:0 0 1px 0;margin:0;}
151
  a.edit_tag_save.btn {padding-top:0;padding-bottom:0;}
152
- a.edit_tag_save.btn-link:hover {text-decoration:none;}
153
 
154
  .gm-img-thumbnail {
155
  display: inline-block;
@@ -176,7 +198,7 @@ a.edit_tag_save.btn-link:hover {text-decoration:none;}
176
  .termItems .gm-img-thumbnail img {height:auto;width:auto;max-width:100%;max-height:100%;display:inline-block;vertical-align:middle;}
177
 
178
  .choose-module {padding:10px;cursor:pointer;}
179
- .choose-module:hover {background-color:#d0e9c6;}
180
  .choose-module .thumbnail {margin-bottom:0;}
181
 
182
 
@@ -218,6 +240,9 @@ body.gmedia-blank .media-edit-sidebar .panel-footer {position:absolute; left:0;
218
  }
219
  #gallery_preview {width:100%; height:600px; border: solid #ccc 1px; overflow:auto;}
220
 
 
 
 
221
  @media (min-width:782px) {
222
  div.modal { top:32px; }
223
 
@@ -275,13 +300,13 @@ body.gmedia-blank .media-edit-sidebar .panel-footer {position:absolute; left:0;
275
  border-radius: 4px 0 0 4px;
276
  }
277
 
278
- .tabs-left > .nav-tabs > li > a:hover,
279
  .tabs-left > .nav-tabs > li > a:focus {
280
  border-color: #eeeeee #dddddd #eeeeee #eeeeee;
281
  }
282
 
283
  .tabs-left > .nav-tabs .active > a,
284
- .tabs-left > .nav-tabs .active > a:hover,
285
  .tabs-left > .nav-tabs .active > a:focus {
286
  border-color: #ddd transparent #ddd #ddd;
287
  *border-right-color: #ffffff;
@@ -300,13 +325,13 @@ body.gmedia-blank .media-edit-sidebar .panel-footer {position:absolute; left:0;
300
  border-radius: 0 4px 4px 0;
301
  }
302
 
303
- .tabs-right > .nav-tabs > li > a:hover,
304
  .tabs-right > .nav-tabs > li > a:focus {
305
  border-color: #eeeeee #eeeeee #eeeeee #dddddd;
306
  }
307
 
308
  .tabs-right > .nav-tabs .active > a,
309
- .tabs-right > .nav-tabs .active > a:hover,
310
  .tabs-right > .nav-tabs .active > a:focus {
311
  border-color: #ddd #ddd #ddd transparent;
312
  *border-left-color: #ffffff;
5
  #TB_caption { height:auto; }
6
  a { color:#0074a2; }
7
  input[type="checkbox"] { margin-top:2px; margin-right:2px }
8
+ input::-moz-focus-inner {
9
+ border: 0;
10
+ padding: 0;
11
+ margin-top:-2px;
12
+ margin-bottom: -2px;
13
+ }
14
  form {margin:0;}
15
  body.gmedia-busy { cursor:wait !important; }
16
  iframe, iframe html { background-color:#ffffff; }
68
 
69
  div#gmedia-navbar { font-size:14px; }
70
 
71
+ div.library-author {position:absolute; right:15px; top:-35px; padding: 5px 10px; margin:0}
72
+
73
  form.gmedia-search-form {
74
  float:right;
75
  margin-left:10px;
87
  }
88
 
89
  .txt-lg { font-size:120%; line-height:50%; }
90
+ a.text-danger{ color:#a94442; }
91
  .btn > input[type="checkbox"] { margin-top:0; width:16px; height:16px; }
92
 
93
  .gm-checkgroup { margin-right:20px; }
94
 
95
  .gm-backfade { background-color:rgba(0, 0, 0, 0.1); }
96
 
97
+ .dropdown-menu > .disabled{ cursor: not-allowed; }
98
+ .dropdown-menu > .disabled > a{ pointer-events: none; }
99
+
100
  div#gm-list-table { font-size:13px; }
101
  .list-group-item.row { position:relative; margin-left:0; margin-right:0; padding-left:0; padding-right:0; }
102
+ .list-group-item.d-row { position:relative; color: inherit; }
103
+ .no-touch div.list-group-item.d-row:hover { background-color:#fafafa; }
104
+ .no-touch form.list-group-item.d-row:hover { background-color:#fcfcfc; }
105
+ .list-group-item.d-row.active { color:#444; border-color: #ddd; background-color:rgb(250, 255, 245); box-shadow:inset -1px 0 0 2px rgb(250, 255, 245), inset 7px 0 0 0 #1e8cbe; }
106
+ .no-touch .list-group-item.d-row.active:hover { color:#444; border-color: #ddd; background-color:rgb(245, 255, 240); box-shadow:inset -1px 0 0 2px rgb(245, 255, 240), inset 7px 0 0 0 #1e8cbe; }
107
+ .list-group-item-info { background-color: #d9edf7 !important; }
108
+ .list-group-item-warning { background-color: #fcf8e3 !important; }
109
+ .bg-status-private { background-color: #d9edf7; box-shadow:3px 0 0 5px #d9edf7, -2px 0 0 5px #6fbfff; }
110
+ .bg-status-draft { background-color: #fcf8e3; box-shadow:3px 0 0 5px #fcf8e3, -2px 0 0 5px #ffd87c; }
111
 
112
  label.cb_media-object { margin-right:15px; float:left; width:310px; max-width: 100%; }
113
+ div.li_media-object { margin-right:15px; padding-left:15px; float:left; width:310px; max-width: 100%; }
114
  .d-row .thumbnail { margin-bottom:0; }
115
  .active .thumbnail { border-color:#428bca; }
116
  .thumbnail { position:relative; display:inline-block; max-width:100%; }
120
  .media-meta { width:100%; overflow:hidden; text-overflow:ellipsis; /*white-space:nowrap;*/ }
121
  .media-meta .label-default { background-color:#eeeeee; color:#444444; }
122
 
123
+ .gmedia_id { position:absolute; right:10px; top:10px; }
124
+ .no-touch .gmedia_id,
125
+ .no-touch .term_id { display:none; }
126
  .term_id { position:absolute; right:0; top:0; padding: 10px 10px 0 0px; background-color:#fff; display:none; height:100%; box-shadow: -10px 0 5px -2px #fff; z-index:100; }
127
+ .no-touch #gm-list-table .list-group-item:hover .gmedia_id,
128
+ .no-touch #gm-list-table .list-group-item:hover .term_id { display:block; }
129
 
130
  #gm-list-table .hidden { display:none !important; visibility:hidden !important; }
131
 
134
  form.changed { }
135
  form.changed.saved { }
136
  form.changed .gm-last-edited { text-decoration:line-through; }
137
+ .selectize-input.full input { width: 4px !important; }
138
 
139
  .rel-selected-hide { display:none; }
140
 
141
  div#pluploadUploader { padding:0; }
142
  div#pluploadUploader * { box-sizing:content-box; }
143
  .plupload_container { padding:0; }
144
+ div#pluploadUploader_container { min-height: 450px; border-bottom-right-radius: 4px; }
145
  div#pluploadUploader_container .plupload_filelist_footer { border-bottom-right-radius: 4px; }
146
  div.panel-body, div#gmedia-msg-panel { -webkit-transition:all .2s ease-in-out; transition:all .2s ease-in-out; }
147
  div.panel-body:empty, div#gmedia-msg-panel:empty { padding:0; }
158
  .selectize-control.input-sm .selectize-input:after { right: 10px; }
159
 
160
  .term-list-item {padding-top:0; padding-bottom:0;}
161
+ .term-list-item .term-label .checkbox {padding-left:35px;}
162
+ .term-list-item .term-label .checkbox > input {margin-left:-35px;}
163
  .term-list-item .checkbox input {margin-top:0; margin-right:15px;}
164
+ .term-list-item .term-description {padding:1px 0 4px; white-space:nowrap; overflow:hidden; color:#444444;}
165
  .term-list-item .term-description:empty {padding:0;}
166
  .term-list-item .term-images {padding-top:5px; padding-bottom:2px; overflow:hidden; white-space:nowrap;}
167
  .term-list-item .term-images img {position:relative; height:30px; width:auto; background-color:#ffffff;}
168
+ .term-list-item .term_info_author {font-size:80%; margin-left:10px;}
169
+ .no-touch .term-list-item .term-images img:hover {z-index:100 !important;}
170
 
171
+ .edit_tag_form {display:inline-block; margin-left:-5px; margin-bottom:-1px; margin-top:-1px;}
172
  .edit_tag_form input.edit_tag_input {padding:0 5px;border-width:0 0 1px 0;margin:0;}
173
  a.edit_tag_save.btn {padding-top:0;padding-bottom:0;}
174
+ .no-touch a.edit_tag_save.btn-link:hover {text-decoration:none;}
175
 
176
  .gm-img-thumbnail {
177
  display: inline-block;
198
  .termItems .gm-img-thumbnail img {height:auto;width:auto;max-width:100%;max-height:100%;display:inline-block;vertical-align:middle;}
199
 
200
  .choose-module {padding:10px;cursor:pointer;}
201
+ .no-touch .choose-module:hover {background-color:#d0e9c6;}
202
  .choose-module .thumbnail {margin-bottom:0;}
203
 
204
 
240
  }
241
  #gallery_preview {width:100%; height:600px; border: solid #ccc 1px; overflow:auto;}
242
 
243
+ #adv-settings { overflow:hidden; }
244
+ #screen-meta .form-group { padding-bottom: 10px; }
245
+
246
  @media (min-width:782px) {
247
  div.modal { top:32px; }
248
 
300
  border-radius: 4px 0 0 4px;
301
  }
302
 
303
+ .no-touch .tabs-left > .nav-tabs > li > a:hover,
304
  .tabs-left > .nav-tabs > li > a:focus {
305
  border-color: #eeeeee #dddddd #eeeeee #eeeeee;
306
  }
307
 
308
  .tabs-left > .nav-tabs .active > a,
309
+ .no-touch .tabs-left > .nav-tabs .active > a:hover,
310
  .tabs-left > .nav-tabs .active > a:focus {
311
  border-color: #ddd transparent #ddd #ddd;
312
  *border-right-color: #ffffff;
325
  border-radius: 0 4px 4px 0;
326
  }
327
 
328
+ .no-touch .tabs-right > .nav-tabs > li > a:hover,
329
  .tabs-right > .nav-tabs > li > a:focus {
330
  border-color: #eeeeee #eeeeee #eeeeee #dddddd;
331
  }
332
 
333
  .tabs-right > .nav-tabs .active > a,
334
+ .no-touch .tabs-right > .nav-tabs .active > a:hover,
335
  .tabs-right > .nav-tabs .active > a:focus {
336
  border-color: #ddd #ddd #ddd transparent;
337
  *border-left-color: #ffffff;
admin/galleries.php CHANGED
@@ -1,6 +1,6 @@
1
  <?php
2
- if ( preg_match( '#' . basename( __FILE__ ) . '#', $_SERVER['PHP_SELF'] ) ) {
3
- die( 'You are not allowed to call this page directly.' );
4
  }
5
 
6
  /**
@@ -8,7 +8,7 @@ if ( preg_match( '#' . basename( __FILE__ ) . '#', $_SERVER['PHP_SELF'] ) ) {
8
  *
9
  * @return mixed content
10
  */
11
- function gmediaGalleries() {
12
  global $user_ID, $gmDB, $gmCore, $gmGallery, $gmProcessor;
13
 
14
  $url = add_query_arg(array('page' => $gmProcessor->page), admin_url('admin.php'));
@@ -22,11 +22,23 @@ function gmediaGalleries() {
22
  */
23
 
24
  $filter = ('selected' == $gmCore->_req('filter'))? $gmProcessor->selected_items : null;
25
- $args = array('orderby' => $gmCore->_get('orderby', 'name'), 'order' => $gmCore->_get('order', 'ASC'),
26
- 'search' => $gmCore->_get('s', ''), 'number' => $gmCore->_get('number', 30),
27
- 'hide_empty' => 0, 'page' => $gmCore->_get('pager', 1), 'include' => $filter);
 
 
 
 
 
 
28
  $args['offset'] = ($args['page'] - 1) * $args['number'];
29
 
 
 
 
 
 
 
30
  $taxonomy = 'gmedia_gallery';
31
  $gmediaTerms = $gmDB->get_terms($taxonomy, $args);
32
  if(is_wp_error($gmediaTerms)){
@@ -45,7 +57,7 @@ function gmediaGalleries() {
45
  );
46
  }
47
  }
48
- if(($upload_modules = glob($gmCore->upload['path'].'/'.$gmGallery->options['folder']['module'].'/*', GLOB_ONLYDIR | GLOB_NOSORT))){
49
  foreach($upload_modules as $path){
50
  $mfold = basename($path);
51
  $modules[$mfold] = array(
@@ -100,14 +112,17 @@ function gmediaGalleries() {
100
  ?>
101
  <ul class="dropdown-menu" role="menu">
102
  <li class="dropdown-header <?php echo $rel_selected_hide; ?>"><span><?php _e("Select items to see more actions", "gmLang"); ?></span></li>
103
- <li class="<?php echo $rel_selected_show; ?>"><a href="<?php echo wp_nonce_url($gmCore->get_admin_url(array('delete' => 'selected'), array('filter')), 'gmedia_delete') ?>" class="gmedia-delete" data-confirm="<?php _e("You are about to permanently delete the selected items.\n\r'Cancel' to stop, 'OK' to delete.", "gmLang"); ?>"><?php _e('Delete Selected Items', 'gmLang'); ?></a></li>
 
 
104
  <?php do_action('gmedia_term_action_list'); ?>
105
  </ul>
106
  </div>
107
 
108
  <form class="btn-group" id="gm-selected-btn" name="gm-selected-form" action="<?php echo add_query_arg(array('filter' => 'selected'), $url); ?>" method="post">
109
  <button type="submit" class="btn btn<?php echo ('selected' == $gmCore->_req('filter'))? '-success' : '-info' ?>"><?php printf(__('%s selected', 'gmLang'), '<span id="gm-selected-qty">' . count($gmProcessor->selected_items) . '</span>'); ?></button>
110
- <button type="button" class="btn btn-info dropdown-toggle" data-toggle="dropdown"><span class="caret"></span> <span class="sr-only"><?php _e('Toggle Dropdown', 'gmLang'); ?></span></button>
 
111
  <input type="hidden" id="gm-selected" data-userid="<?php echo $user_ID; ?>" data-key="<?php echo $taxonomy; ?>" name="selected_items" value="<?php echo implode(',', $gmProcessor->selected_items); ?>"/>
112
  <ul class="dropdown-menu" role="menu">
113
  <li><a id="gm-selected-show" href="#show"><?php _e('Show only selected items', 'gmLang'); ?></a></li>
@@ -129,7 +144,7 @@ function gmediaGalleries() {
129
  $term_meta = array_map('reset', $term_meta);
130
  $term_meta = array_map('maybe_unserialize', $term_meta);
131
 
132
- $module = $gmCore->get_module_path( $term_meta['module'] );
133
  $module_info = array('type' => '&#8212;');
134
  if(file_exists($module['path'] . '/index.php')){
135
  $broken = false;
@@ -138,6 +153,11 @@ function gmediaGalleries() {
138
  $broken = true;
139
  }
140
 
 
 
 
 
 
141
 
142
  $is_selected = in_array($term->term_id, $gmProcessor->selected_items)? true : false;
143
  ?>
@@ -147,16 +167,28 @@ function gmediaGalleries() {
147
  <label class="cb_media-object" style="width:130px;">
148
  <input name="doaction[]" type="checkbox"<?php echo $is_selected? ' checked="checked"' : ''; ?> data-type="<?php echo $term_meta['module']; ?>" class="hidden" value="<?php echo $term->term_id; ?>"/>
149
  <?php if(!$broken){ ?>
150
- <span class="thumbnail"><img src="<?php echo $module['url'].'/screenshot.png'; ?>" alt="<?php echo esc_attr($term->name); ?>"/></span>
151
  <?php } else{ ?>
152
  <div class="bg-danger text-center"><?php _e('Module broken <br>Reinstall module', 'gmLang') ?></div>
153
  <?php } ?>
154
  </label>
 
155
  <div class="media-body" style="margin-left:145px;">
156
  <p class="media-title">
157
- <a href="<?php echo add_query_arg(array('edit_gallery' => $term->term_id), $url); ?>"><?php echo esc_html($term->name); ?></a>
 
 
 
 
158
  </p>
 
 
 
 
 
 
159
  <p class="media-caption"><?php echo esc_html($term->description); ?></p>
 
160
  <p class="media-meta" title="<?php _e('Shortcode', 'gmLang'); ?>" style="font-weight:bold">
161
  <span class="label label-default"><?php _e('Shortcode', 'gmLang'); ?>:</span> [gmedia id=<?php echo $term->term_id; ?>]
162
  </p>
@@ -165,17 +197,17 @@ function gmediaGalleries() {
165
  <div class="col-xs-5">
166
  <p class="media-meta">
167
  <span class="label label-default"><?php _e('Module', 'gmLang'); ?>:</span> <?php echo $term_meta['module']; ?>
168
- <br><span class="label label-default"><?php _e('Type','gmLang'); ?>:</span> <?php echo $module_info['type']; ?>
169
- <br><span class="label label-default"><?php _e('Last Edited','gmLang'); ?>:</span> <?php echo $term_meta['edited']; ?>
170
- <br><span class="label label-default"><?php _e('Status','gmLang'); ?>:</span> <?php echo $term->status; ?>
171
- <br><span class="label label-default"><?php _e('Source','gmLang'); ?>:</span>
172
  <?php
173
  $gallery_tabs = reset($term_meta['query']);
174
  $tax_tabs = key($term_meta['query']);
175
  if('gmedia__in' == $tax_tabs){
176
  _e('Selected Gmedia', 'gmLang');
177
  $gmedia_ids = wp_parse_id_list($gallery_tabs[0]);
178
- $gal_source = sprintf('<a class="selected__in" href="%s">'.__('Show %d items in Gmedia Library','gmLang').'</a>', esc_url(add_query_arg(array('gmedia__in' => implode(',', $gmedia_ids)), $lib_url)), count($gmedia_ids));
179
  echo " ($gal_source)";
180
  } else{
181
  $tabs = $gmDB->get_terms($tax_tabs, array('include' => $gallery_tabs));
@@ -202,7 +234,7 @@ function gmediaGalleries() {
202
  }
203
  }
204
  if(!empty($terms_source)){
205
- echo ' ('.join(', ', $terms_source).')';
206
  }
207
  }
208
  ?>
@@ -252,15 +284,18 @@ function gmediaGalleries() {
252
  if(empty($module_info)){
253
  continue;
254
  }
255
- $mclass = ' module-'.$module_info['type'].' module-'.$module_info['status'];
256
  ?>
257
  <div data-href="<?php echo add_query_arg(array('gallery_module' => $module_name), $url); ?>" class="choose-module media<?php echo $mclass; ?>">
258
  <a href="<?php echo add_query_arg(array('gallery_module' => $module_name), $url); ?>" class="thumbnail pull-left">
259
- <img class="media-object" src="<?php echo $module_url.'/screenshot.png'; ?>" alt="<?php echo esc_attr($module_info['title']); ?>" width="160" height="120"/>
260
  </a>
 
261
  <div class="media-body" style="margin-left:180px;">
262
  <h4 class="media-heading"><?php echo $module_info['title']; ?></h4>
 
263
  <p class="version"><?php echo __('Version', 'gmLang') . ': ' . $module_info['version']; ?></p>
 
264
  <div class="description"><?php echo str_replace("\n", '<br />', $module_info['description']); ?></div>
265
  </div>
266
  </div>
@@ -277,7 +312,7 @@ function gmediaGalleries() {
277
  </div>
278
  </div>
279
  </div>
280
- <?php
281
  }
282
 
283
  /**
@@ -285,19 +320,26 @@ function gmediaGalleries() {
285
  *
286
  * @return mixed content
287
  */
288
- function gmediaGalleryEdit() {
289
- global $gmDB, $gmCore, $gmGallery, $gmProcessor;
290
 
291
  $alert = array();
292
 
293
  $module_name = $gmCore->_get('gallery_module');
294
  $gallery_id = $gmCore->_get('edit_gallery');
 
 
 
 
 
 
295
 
296
- $url = add_query_arg(array('page' => $gmProcessor->page, 'edit_gallery' => $gallery_id ), admin_url('admin.php'));
297
 
298
  $gallery = array(
299
- 'name'=>'',
300
- 'description'=>'',
 
301
  'status' => 'public',
302
  'edited' => '&#8212;',
303
  'module' => '',
@@ -306,23 +348,32 @@ function gmediaGalleryEdit() {
306
  );
307
  $taxonomy = 'gmedia_gallery';
308
  if($gallery_id){
309
- $url = add_query_arg(array('page' => $gmProcessor->page, 'edit_gallery' => $gallery_id ), admin_url('admin.php'));
310
  $gallery = $gmDB->get_term($gallery_id, $taxonomy, ARRAY_A);
311
  if(is_wp_error($gallery)){
312
  $alert[] = $gallery->get_error_message();
313
  } elseif(empty($gallery)){
314
  $alert[] = sprintf(__('No gallery with ID #%s in database'), $gallery_id);
315
  } else{
316
- $gallery_meta = $gmDB->get_metadata('gmedia_term', $gallery_id);
317
- $gallery_meta = array_map('reset', $gallery_meta);
318
- $gallery_meta = array_map('maybe_unserialize', $gallery_meta);
319
- $gallery = array_merge($gallery, $gallery_meta);
320
- if(!$module_name){
321
- $module_name = $gallery['module'];
 
 
 
 
 
 
 
 
 
322
  }
323
  }
324
  } elseif($module_name){
325
- $url = add_query_arg(array('page' => $gmProcessor->page, 'gallery_module' => $module_name ), admin_url('admin.php'));
326
  $error_post = $gmCore->_post('gallery');
327
  if($error_post){
328
  $gallery = $gmCore->array_replace_recursive($gallery, $error_post);
@@ -333,6 +384,7 @@ function gmediaGalleryEdit() {
333
  if(!empty($alert)){
334
  echo $gmProcessor->alert('danger', $alert);
335
  gmediaGalleries();
 
336
  return;
337
  }
338
 
@@ -348,7 +400,7 @@ function gmediaGalleryEdit() {
348
  );
349
  }
350
  }
351
- if(($upload_modules = glob($gmCore->upload['path'].'/'.$gmGallery->options['folder']['module'].'/*', GLOB_ONLYDIR | GLOB_NOSORT))){
352
  foreach($upload_modules as $path){
353
  $mfold = basename($path);
354
  $modules[$mfold] = array(
@@ -405,343 +457,399 @@ function gmediaGalleryEdit() {
405
  ?>
406
 
407
  <form class="panel panel-default" id="gallerySettingsForm" method="post" action="<?php echo $url; ?>">
408
- <div class="panel-heading clearfix">
409
- <div class="btn-toolbar pull-left">
410
- <div class="btn-group">
411
- <a href="<?php echo add_query_arg(array('page' => 'GrandMedia_Galleries' ), admin_url('admin.php')); ?>" class="btn btn-default"><span class="glyphicon glyphicon-arrow-left"></span> <?php _e('Manage Galleries', 'gmLang'); ?></a>
412
- </div>
413
- <div class="btn-group">
414
- <?php if($gallery['module'] != $module_name){ ?>
415
- <a href="<?php echo $url; ?>" class="btn btn-default"><?php _e('Cancel preview module', 'gmLang'); ?></a>
416
- <button type="submit" name="gmedia_gallery_save" class="btn btn-primary"><?php _e('Save with new module', 'gmLang'); ?></button>
417
- <?php } else{ ?>
418
- <?php $reset_settings = $gmCore->array_diff_keyval_recursive($default_options, $gallery_settings, true);
419
- if(!empty($reset_settings)){ ?>
420
- <button type="submit" name="gmedia_gallery_reset" class="btn btn-default" data-confirm="<?php _e('Confirm reset gallery options') ?>"><?php _e('Reset to default', 'gmLang'); ?></button>
421
- <?php } ?>
422
- <button type="submit" name="gmedia_gallery_save" class="btn btn-primary"><?php _e('Save', 'gmLang'); ?></button>
423
  <?php } ?>
424
- </div>
 
425
  </div>
426
  </div>
427
- <div class="panel-body" id="gmedia-msg-panel"></div>
428
- <div class="panel-body" id="gmedia-edit-gallery" style="margin-bottom:4px; padding-top:0;">
429
- <div class="row">
430
- <div class="col-lg-6 tabable tabs-left">
431
- <ul class="nav nav-tabs" id="galleryTabs" style="padding:10px 0;">
432
- <?php if(isset($module_info)){ ?>
433
- <li class="text-center"><strong><?php echo $module_info['title']; ?></strong><a href="#chooseModuleModal" data-toggle="modal" style="padding:5px 0;"><img src="<?php echo $module_url.'/screenshot.png'; ?>" alt="<?php echo esc_attr($module_info['title']); ?>" width="100" style="height:auto;"/></a></li>
434
- <?php } ?>
435
- <li class="active"><a href="#general_settings" data-toggle="tab"><?php _e('General Settings', 'gmLang'); ?></a></li>
436
- <?php
437
- if(isset($options_tree)){
438
- gmedia_gallery_options_nav($options_tree);
439
- }
440
- ?>
441
- </ul>
442
-
443
- <div id="gallery_options_block" class="tab-content" style="padding-top:20px;">
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
444
 
445
- <fieldset id="general_settings" class="tab-pane active">
446
- <p><?php echo '<b>'.__('Gallery module:').'</b> '.$gallery['module'];
447
- if($gallery['module'] != $module_name){
448
- echo '<br /><b>'.__('Preview module:').'</b> '.$module_name;
449
- echo '<br /><span class="text-muted">'.sprintf(__('Note: Module changed to %s, but not saved yet'), $module_name).'</span>';
450
- } ?></p>
451
- <?php if($gallery_id){ ?>
452
- <p><b><?php _e('Shortcode:'); ?></b> [gmedia id=<?php echo $gallery_id; ?>]</p>
453
- <?php } ?>
454
- <input type="hidden" name="gallery[module]" value="<?php echo esc_attr($module_name); ?>">
455
- <div class="form-group">
456
- <label><?php _e('Gallery Name', 'gmLang'); ?></label>
457
- <input type="text" class="form-control input-sm" name="gallery[name]" placeholder="<?php echo empty($gallery['name'])? esc_attr(__('Gallery Name', 'gmLang')) : esc_attr($gallery['name']); ?>" value="<?php echo esc_attr($gallery['name']); ?>" required="required" />
458
- </div>
459
- <div class="form-group">
460
- <label><?php _e('Status', 'gmLang'); ?></label>
461
- <select name="gallery[status]" class="form-control input-sm">
462
- <option value="public"<?php selected($gallery['status'], 'public'); ?>><?php _e('Public', 'gmLang'); ?></option>
463
- <?php /* ?>
464
  <option value="private"<?php selected($gallery['status'], 'private'); ?>><?php _e('Private', 'gmLang'); ?></option>
465
  <option value="draft"<?php selected($gallery['status'], 'draft'); ?>><?php _e('Draft', 'gmLang'); ?></option>
466
- <?php */ ?>
467
- </select>
468
- </div>
469
- <div class="form-group">
470
- <label><?php _e('Show supported files from', 'gmLang'); ?></label>
471
- <select data-watch="change" id="gmedia_query" class="form-control input-sm" name="gallery[term]">
472
- <?php reset($gallery['query']); $gallery['term'] = key($gallery['query']); ?>
473
- <option value="gmedia_album"<?php selected($gallery['term'], 'gmedia_album'); ?>><?php _e('Albums', 'gmLang'); ?></option>
474
- <option value="gmedia_tag"<?php selected($gallery['term'], 'gmedia_tag'); ?>><?php _e('Tags', 'gmLang'); ?></option>
475
- <option value="gmedia_category"<?php selected($gallery['term'], 'gmedia_category'); ?>><?php _e('Categories', 'gmLang'); ?></option>
476
- <option value="gmedia__in"<?php selected($gallery['term'], 'gmedia__in'); ?>><?php _e('Selected Gmedia', 'gmLang'); ?></option>
477
- <!-- <option value="gmedia_filter"<?php selected($gallery['term'], 'gmedia_filter'); ?>><?php _e('Filter', 'gmLang'); ?></option> -->
478
- </select>
479
- </div>
480
-
 
 
 
481
 
482
- <div class="form-group" id="div_gmedia_category">
483
- <?php
484
- $term_type = 'gmedia_category';
485
- $gm_terms_all = $gmGallery->options['taxonomies'][$term_type];
486
- $gm_terms = $gmDB->get_terms($term_type, array('fields' => 'names_count'));
487
-
488
- $terms_items = '';
489
- if(count($gm_terms)){
490
- foreach($gm_terms as $id => $term){
491
- $selected = (isset($gallery['query'][$term_type]) && in_array($id, $gallery['query'][$term_type]))? ' selected="selected"' : '';
492
- $terms_items .= '<option value="' . $id . '"'.$selected.'>' . esc_html($gm_terms_all[$term['name']]) . ' (' . $term['count'] . ')</option>' . "\n";
493
- }
494
  }
495
- $setvalue = isset($gallery['query'][$term_type])? 'data-setvalue="'.implode(',',$gallery['query'][$term_type]).'"' : '';
496
- ?>
497
- <label><?php _e('Choose Categories', 'gmLang'); ?></label>
498
- <select data-gmedia_query="is:gmedia_category" <?php echo $setvalue; ?> id="gmedia_category" name="gallery[query][gmedia_category][]" class="gmedia-combobox form-control input-sm" multiple="multiple" placeholder="<?php echo esc_attr(__('Choose Categories...', 'gmLang')); ?>">
499
- <option value=""><?php _e('Choose Categories...', 'gmLang'); ?></option>
500
- <?php echo $terms_items; ?>
501
- </select>
502
- </div>
 
503
 
504
- <div class="form-group" id="div_gmedia_tag">
505
- <?php
506
- $term_type = 'gmedia_tag';
507
- $gm_terms = $gmDB->get_terms($term_type, array('fields' => 'names_count'));
508
-
509
- $terms_items = '';
510
- if(count($gm_terms)){
511
- foreach($gm_terms as $id => $term){
512
- $selected = (isset($gallery['query'][$term_type]) && in_array($id, $gallery['query'][$term_type]))? ' selected="selected"' : '';
513
- $terms_items .= '<option value="' . $id . '"'.$selected.'>' . esc_html($term['name']) . ' (' . $term['count'] . ')</option>' . "\n";
514
- }
515
- }
516
- $setvalue = isset($gallery['query'][$term_type])? 'data-setvalue="'.implode(',',$gallery['query'][$term_type]).'"' : '';
517
- ?>
518
- <label><?php _e('Choose Tags', 'gmLang'); ?> </label>
519
- <select data-gmedia_query="is:gmedia_tag" <?php echo $setvalue; ?> id="gmedia_tag" name="gallery[query][gmedia_tag][]" class="gmedia-combobox form-control input-sm" multiple="multiple" placeholder="<?php echo esc_attr(__('Choose Tags...', 'gmLang')); ?>">
520
- <option value=""><?php echo __('Choose Tags...', 'gmLang'); ?></option>
521
- <?php echo $terms_items; ?>
522
- </select>
523
- </div>
524
 
525
- <div class="form-group" id="div_gmedia_album">
526
- <?php
527
- $term_type = 'gmedia_album';
528
- $gm_terms = $gmDB->get_terms($term_type, array('fields' => 'names_count'));
529
-
530
- $terms_items = '';
531
- if(count($gm_terms)){
532
- foreach($gm_terms as $id => $term){
533
- //if(!$term->count){ continue; }
534
- $selected = (isset($gallery['query'][$term_type]) && in_array($id, $gallery['query'][$term_type]))? ' selected="selected"' : '';
535
- $terms_items .= '<option value="' . $id . '"'.$selected.'>' . esc_html($term['name']) . ' &nbsp; (' . $term['count'] . ')</option>' . "\n";
536
- }
537
  }
538
- $setvalue = isset($gallery['query'][$term_type])? 'data-setvalue="'.implode(',',$gallery['query'][$term_type]).'"' : '';
539
- ?>
540
- <label><?php _e('Choose Albums', 'gmLang'); ?> </label>
541
- <select data-gmedia_query="is:gmedia_album" <?php echo $setvalue; ?> id="gmedia_album" name="gallery[query][gmedia_album][]" class="gmedia-combobox form-control input-sm" multiple="multiple" placeholder="<?php echo esc_attr(__('Choose Albums...', 'gmLang')); ?>">
542
- <option value=""><?php echo __('Choose Albums...', 'gmLang'); ?></option>
543
- <?php echo $terms_items; ?>
544
- </select>
545
- </div>
 
546
 
547
- <div class="form-group" id="div_gmedia__in">
548
- <label><?php _e('Selected Gmedia IDs <small class="text-muted">separated by comma</small>', 'gmLang'); ?> </label>
549
- <?php $value = isset($gallery['query']['gmedia__in'][0])? implode(',', wp_parse_id_list($gallery['query']['gmedia__in'][0])) : ''; ?>
550
- <textarea data-gmedia_query="is:gmedia__in" id="gmedia__in" name="gallery[query][gmedia__in][]" rows="1" class="form-control input-sm" style="resize:vertical;" placeholder="<?php echo esc_attr(__('Gmedia IDs...', 'gmLang')); ?>"><?php echo $value; ?></textarea>
551
- </div>
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
552
 
553
- <div class="form-group">
554
- <label><?php _e('Description', 'gmLang'); ?></label>
555
- <textarea class="form-control input-sm" rows="5" name="gallery[description]"><?php echo esc_html($gallery['description']) ?></textarea>
556
- </div>
557
 
558
- </fieldset>
 
 
 
 
559
 
560
- <?php
561
- if(isset($options_tree)){
562
- gmedia_gallery_options_fieldset($options_tree, $default_options, $gallery_settings);
563
- }
564
- ?>
565
  </div>
566
 
567
- </div>
568
- <div class="col-lg-6" style="padding-top:20px;">
569
- <p><b><?php _e('Last edited:'); ?></b> <?php echo $gallery['edited']; ?></p>
570
- <?php if($gallery_id){
571
- $params = array();
572
- $params['preview'] = ($gallery['module'] != $module_name)? $module_name : false;
573
- $params['iframe'] = 1;
574
- ?>
575
- <p><b><?php _e('Gallery ID:'); ?></b> #<?php echo $gallery_id; ?></p>
576
- <p><b><?php _e('Gallery URL:'); ?></b> <?php
577
- $gallery_link_default = home_url('index.php?gmedia='.$gallery_id);
578
- if ( get_option('permalink_structure') ) {
579
- $ep = $gmGallery->options['endpoint'];
580
- $gallery_link = home_url($ep.'/'.$gallery_id);
581
- } else{
582
- $gallery_link = $gallery_link_default;
583
- } ?>
584
- <a target="_blank" href="<?php echo $gallery_link; ?>"><?php echo $gallery_link; ?></a>
585
- <br /><?php _e('update <a href="options-permalink.php">Permalink Settings</a> if above link not working', 'gmLang'); ?>
586
- </p>
587
 
588
- <div><b><?php _e('Gallery Preview:'); ?></b></div>
589
- <div class="gallery_preview" style="overflow:hidden;">
590
- <iframe id="gallery_preview" name="gallery_preview" src="<?php echo add_query_arg($params, $gallery_link_default); ?>"></iframe>
591
- </div>
592
- <?php } ?>
593
- </div>
594
  </div>
595
- <script type="text/javascript">
596
- jQuery(function($){
597
- <?php if(!empty($alert)){ ?>
598
- $('#chooseModuleModal').modal('show');
599
- <?php } ?>
600
 
601
- var hash = window.location.hash;
602
- if(hash){
603
- $('#galleryTabs a').eq(hash.replace('#tab-','')).tab('show');
604
- }
605
- $('#gallerySettingsForm').on('submit', function(){
606
- $(this).attr('action', $(this).attr('action') + '#tab-' + $('#galleryTabs li.active').index());
607
- });
608
-
609
- $('.gmedia-combobox').each(function(){
610
- var select = $(this).selectize({
611
- plugins: ['drag_drop'],
612
- create: false,
613
- hideSelected: true
614
- });
615
- var val = $(this).data('setvalue');
616
- if(val){
617
- val = val.toString().split(',');
618
- select[0].selectize.setValue(val);
619
- }
620
- });
621
-
622
- var main = $('#gallery_options_block');
623
-
624
- $('input', main).filter('[data-type="color"]').minicolors({
625
- animationSpeed: 50,
626
- animationEasing: 'swing',
627
- change: null,
628
- changeDelay: 0,
629
- control: 'hue',
630
- //defaultValue: '',
631
- hide: null,
632
- hideSpeed: 100,
633
- inline: false,
634
- letterCase: 'lowercase',
635
- opacity: false,
636
- position: 'bottom left',
637
- show: null,
638
- showSpeed: 100,
639
- theme: 'bootstrap'
640
- });
641
 
642
- $('[data-watch]', main).each(function(){
643
- var el = $(this);
644
- gmedia_options_conditional_logic(el, 0);
645
- el.on(el.data('watch'),function(){
646
- if('change' == el.data('watch')){
647
- $(this).blur().focus();
648
- }
649
- gmedia_options_conditional_logic($(this), 400);
650
- });
651
- });
 
 
 
 
 
 
 
 
 
 
 
 
652
 
653
- function gmedia_options_conditional_logic(el, slide){
654
- if(el.is(':input')){
655
- var val = el.val();
656
- var id = el.attr('id').toLowerCase();
657
- if(el.is(':checkbox') && !el[0].checked){
658
- val = '0';
659
- }
660
- $('[data-'+id+']', main).each(function(){
661
- var key = $(this).data(id);
662
- key = key.split(':');
663
- var hidden = $(this).data('hidden')? parseInt($(this).data('hidden')) : 0;
664
- var ch = true;
665
- switch(key[0]){
666
- case '=':
667
- case 'is':
668
- if(val == key[1]){
669
- if(slide && (0 === --hidden) ){
670
- $(this).prop('disabled',false).closest('.form-group').stop().slideDown(slide, function(){ $(this).css({display:'block'}); });
671
- $(this).data('hidden', 0);
672
- if(key[2]){
673
- key[2] = $(this).data('value');
674
- } else{
675
- ch = false;
676
- }
677
- } else{
678
- $(this).data('hidden', 0 < hidden? hidden : 0 );
679
- ch = false;
680
- }
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
681
  } else{
682
- if(!hidden){
683
- if(key[2]){
684
- $(this).closest('.form-group').stop().slideUp(slide, function(){ $(this).css({display:'none'}); });
685
- } else{
686
- $(this).prop('disabled',true).closest('.form-group').stop().slideUp(slide, function(){ $(this).css({display:'none'}); });
687
- }
688
- } else{
689
- ch = false;
690
- }
691
- $(this).data('hidden', ++hidden);
692
  }
693
- break;
694
- case '!=':
695
- case 'not':
696
- if(val == key[1]){
697
- if(!hidden){
698
- if(key[2]){
699
- $(this).closest('.form-group').stop().slideUp(slide, function(){ $(this).css({display:'none'}); });
700
- } else{
701
- $(this).prop('disabled',true).closest('.form-group').stop().slideUp(slide, function(){ $(this).css({display:'none'}); });
702
- }
703
- } else{
704
- ch = false;
705
- }
706
- $(this).data('hidden', ++hidden);
707
  } else{
708
- if(slide && (0 === --hidden) ){
709
- $(this).prop('disabled',false).closest('.form-group').stop().slideDown(slide, function(){ $(this).css({display:'block'}); });
710
- $(this).data('hidden', 0);
711
- if(key[2] && slide){
712
- key[2] = $(this).data('value');
713
- } else{
714
- ch = false;
715
- }
716
- } else{
717
- $(this).data('hidden', 0 < hidden? hidden : 0 );
718
- ch = false;
719
- }
720
  }
721
- break;
 
 
 
 
722
  }
723
- if(key[2] && ch){
724
- if($(this).is(':checkbox')){
725
- if(+($(this).prop('checked')) != parseInt(key[2])){
726
- $(this).data('value', ($(this).prop('checked')? '1' : '0'));
727
- $(this).prop('checked', ('0' != key[2])).trigger('change');
 
 
 
 
 
 
 
 
728
  }
729
  } else{
730
- if($(this).val() != key[2]){
731
- $(this).data('value', $(this).val());
732
- $(this).val(key[2]).trigger('change');
 
 
 
 
 
 
 
 
 
 
 
733
  }
 
 
734
  }
 
735
  }
736
- });
737
  }
738
- }
739
- });
740
- </script>
741
- </div>
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
742
  </form>
743
 
744
  <!-- Modal -->
 
 
 
 
 
 
745
  <div class="modal fade gmedia-modal" id="chooseModuleModal" tabindex="-1" role="dialog" aria-hidden="true">
746
  <div class="modal-dialog">
747
  <div class="modal-content">
@@ -772,15 +880,24 @@ function gmediaGalleryEdit() {
772
  if(empty($module_info)){
773
  continue;
774
  }
775
- $mclass = ' module-'.$module_info['type'].' module-'.$module_info['status'];
776
  ?>
777
- <div data-href="<?php echo add_query_arg(array('edit_gallery' => $gallery_id, 'gallery_module' => $module_name), $url); ?>" class="choose-module media<?php echo $mclass; ?>">
778
- <a href="<?php echo add_query_arg(array('edit_gallery' => $gallery_id, 'gallery_module' => $module_name), $url); ?>" class="thumbnail pull-left">
779
- <img class="media-object" src="<?php echo $module_url.'/screenshot.png'; ?>" alt="<?php echo esc_attr($module_info['title']); ?>" width="160" height="120"/>
 
 
 
 
 
 
780
  </a>
 
781
  <div class="media-body" style="margin-left:180px;">
782
  <h4 class="media-heading"><?php echo $module_info['title']; ?></h4>
 
783
  <p class="version"><?php echo __('Version', 'gmLang') . ': ' . $module_info['version']; ?></p>
 
784
  <div class="description"><?php echo str_replace("\n", '<br />', $module_info['description']); ?></div>
785
  </div>
786
  </div>
@@ -798,6 +915,6 @@ function gmediaGalleryEdit() {
798
  </div>
799
  </div>
800
 
801
- <?php
802
  }
803
 
1
  <?php
2
+ if(preg_match('#' . basename(__FILE__) . '#', $_SERVER['PHP_SELF'])){
3
+ die('You are not allowed to call this page directly.');
4
  }
5
 
6
  /**
8
  *
9
  * @return mixed content
10
  */
11
+ function gmediaGalleries(){
12
  global $user_ID, $gmDB, $gmCore, $gmGallery, $gmProcessor;
13
 
14
  $url = add_query_arg(array('page' => $gmProcessor->page), admin_url('admin.php'));
22
  */
23
 
24
  $filter = ('selected' == $gmCore->_req('filter'))? $gmProcessor->selected_items : null;
25
+ $args = array(
26
+ 'orderby' => $gmCore->_get('orderby', 'name'),
27
+ 'order' => $gmCore->_get('order', 'ASC'),
28
+ 'search' => $gmCore->_get('s', ''),
29
+ 'number' => $gmCore->_get('number', 30),
30
+ 'hide_empty' => 0,
31
+ 'page' => $gmCore->_get('pager', 1),
32
+ 'include' => $filter
33
+ );
34
  $args['offset'] = ($args['page'] - 1) * $args['number'];
35
 
36
+ if($gmCore->caps['gmedia_edit_others_media']){
37
+ $args['global'] = $gmCore->_get('author', '');
38
+ } else{
39
+ $args['global'] = array($user_ID);
40
+ }
41
+
42
  $taxonomy = 'gmedia_gallery';
43
  $gmediaTerms = $gmDB->get_terms($taxonomy, $args);
44
  if(is_wp_error($gmediaTerms)){
57
  );
58
  }
59
  }
60
+ if(($upload_modules = glob($gmCore->upload['path'] . '/' . $gmGallery->options['folder']['module'] . '/*', GLOB_ONLYDIR | GLOB_NOSORT))){
61
  foreach($upload_modules as $path){
62
  $mfold = basename($path);
63
  $modules[$mfold] = array(
112
  ?>
113
  <ul class="dropdown-menu" role="menu">
114
  <li class="dropdown-header <?php echo $rel_selected_hide; ?>"><span><?php _e("Select items to see more actions", "gmLang"); ?></span></li>
115
+ <li class="<?php echo $rel_selected_show; ?>">
116
+ <a href="<?php echo wp_nonce_url($gmCore->get_admin_url(array('delete' => 'selected'), array('filter')), 'gmedia_delete') ?>" class="gmedia-delete" data-confirm="<?php _e("You are about to permanently delete the selected items.\n\r'Cancel' to stop, 'OK' to delete.", "gmLang"); ?>"><?php _e('Delete Selected Items', 'gmLang'); ?></a>
117
+ </li>
118
  <?php do_action('gmedia_term_action_list'); ?>
119
  </ul>
120
  </div>
121
 
122
  <form class="btn-group" id="gm-selected-btn" name="gm-selected-form" action="<?php echo add_query_arg(array('filter' => 'selected'), $url); ?>" method="post">
123
  <button type="submit" class="btn btn<?php echo ('selected' == $gmCore->_req('filter'))? '-success' : '-info' ?>"><?php printf(__('%s selected', 'gmLang'), '<span id="gm-selected-qty">' . count($gmProcessor->selected_items) . '</span>'); ?></button>
124
+ <button type="button" class="btn btn-info dropdown-toggle" data-toggle="dropdown"><span class="caret"></span>
125
+ <span class="sr-only"><?php _e('Toggle Dropdown', 'gmLang'); ?></span></button>
126
  <input type="hidden" id="gm-selected" data-userid="<?php echo $user_ID; ?>" data-key="<?php echo $taxonomy; ?>" name="selected_items" value="<?php echo implode(',', $gmProcessor->selected_items); ?>"/>
127
  <ul class="dropdown-menu" role="menu">
128
  <li><a id="gm-selected-show" href="#show"><?php _e('Show only selected items', 'gmLang'); ?></a></li>
144
  $term_meta = array_map('reset', $term_meta);
145
  $term_meta = array_map('maybe_unserialize', $term_meta);
146
 
147
+ $module = $gmCore->get_module_path($term_meta['module']);
148
  $module_info = array('type' => '&#8212;');
149
  if(file_exists($module['path'] . '/index.php')){
150
  $broken = false;
153
  $broken = true;
154
  }
155
 
156
+ if($term->global == $user_ID){
157
+ $allow_edit = true;
158
+ } else{
159
+ $allow_edit = $gmCore->caps['gmedia_edit_others_media'];
160
+ }
161
 
162
  $is_selected = in_array($term->term_id, $gmProcessor->selected_items)? true : false;
163
  ?>
167
  <label class="cb_media-object" style="width:130px;">
168
  <input name="doaction[]" type="checkbox"<?php echo $is_selected? ' checked="checked"' : ''; ?> data-type="<?php echo $term_meta['module']; ?>" class="hidden" value="<?php echo $term->term_id; ?>"/>
169
  <?php if(!$broken){ ?>
170
+ <span class="thumbnail"><img src="<?php echo $module['url'] . '/screenshot.png'; ?>" alt="<?php echo esc_attr($term->name); ?>"/></span>
171
  <?php } else{ ?>
172
  <div class="bg-danger text-center"><?php _e('Module broken <br>Reinstall module', 'gmLang') ?></div>
173
  <?php } ?>
174
  </label>
175
+
176
  <div class="media-body" style="margin-left:145px;">
177
  <p class="media-title">
178
+ <?php if($allow_edit){ ?>
179
+ <a href="<?php echo add_query_arg(array('edit_gallery' => $term->term_id), $url); ?>"><?php echo esc_html($term->name); ?></a>
180
+ <?php } else{ ?>
181
+ <span><?php echo esc_html($term->name); ?></span>
182
+ <?php } ?>
183
  </p>
184
+
185
+ <p class="media-meta">
186
+ <span class="label label-default"><?php _e('Author', 'gmLang'); ?>
187
+ :</span> <?php echo $term->global? get_the_author_meta('display_name', $term->global) : '&#8212;'; ?>
188
+ </p>
189
+
190
  <p class="media-caption"><?php echo esc_html($term->description); ?></p>
191
+
192
  <p class="media-meta" title="<?php _e('Shortcode', 'gmLang'); ?>" style="font-weight:bold">
193
  <span class="label label-default"><?php _e('Shortcode', 'gmLang'); ?>:</span> [gmedia id=<?php echo $term->term_id; ?>]
194
  </p>
197
  <div class="col-xs-5">
198
  <p class="media-meta">
199
  <span class="label label-default"><?php _e('Module', 'gmLang'); ?>:</span> <?php echo $term_meta['module']; ?>
200
+ <br><span class="label label-default"><?php _e('Type', 'gmLang'); ?>:</span> <?php echo $module_info['type']; ?>
201
+ <br><span class="label label-default"><?php _e('Last Edited', 'gmLang'); ?>:</span> <?php echo $term_meta['edited']; ?>
202
+ <br><span class="label label-default"><?php _e('Status', 'gmLang'); ?>:</span> <?php echo $term->status; ?>
203
+ <br><span class="label label-default"><?php _e('Source', 'gmLang'); ?>:</span>
204
  <?php
205
  $gallery_tabs = reset($term_meta['query']);
206
  $tax_tabs = key($term_meta['query']);
207
  if('gmedia__in' == $tax_tabs){
208
  _e('Selected Gmedia', 'gmLang');
209
  $gmedia_ids = wp_parse_id_list($gallery_tabs[0]);
210
+ $gal_source = sprintf('<a class="selected__in" href="%s">' . __('Show %d items in Gmedia Library', 'gmLang') . '</a>', esc_url(add_query_arg(array('gmedia__in' => implode(',', $gmedia_ids)), $lib_url)), count($gmedia_ids));
211
  echo " ($gal_source)";
212
  } else{
213
  $tabs = $gmDB->get_terms($tax_tabs, array('include' => $gallery_tabs));
234
  }
235
  }
236
  if(!empty($terms_source)){
237
+ echo ' (' . join(', ', $terms_source) . ')';
238
  }
239
  }
240
  ?>
284
  if(empty($module_info)){
285
  continue;
286
  }
287
+ $mclass = ' module-' . $module_info['type'] . ' module-' . $module_info['status'];
288
  ?>
289
  <div data-href="<?php echo add_query_arg(array('gallery_module' => $module_name), $url); ?>" class="choose-module media<?php echo $mclass; ?>">
290
  <a href="<?php echo add_query_arg(array('gallery_module' => $module_name), $url); ?>" class="thumbnail pull-left">
291
+ <img class="media-object" src="<?php echo $module_url . '/screenshot.png'; ?>" alt="<?php echo esc_attr($module_info['title']); ?>" width="160" height="120"/>
292
  </a>
293
+
294
  <div class="media-body" style="margin-left:180px;">
295
  <h4 class="media-heading"><?php echo $module_info['title']; ?></h4>
296
+
297
  <p class="version"><?php echo __('Version', 'gmLang') . ': ' . $module_info['version']; ?></p>
298
+
299
  <div class="description"><?php echo str_replace("\n", '<br />', $module_info['description']); ?></div>
300
  </div>
301
  </div>
312
  </div>
313
  </div>
314
  </div>
315
+ <?php
316
  }
317
 
318
  /**
320
  *
321
  * @return mixed content
322
  */
323
+ function gmediaGalleryEdit(){
324
+ global $gmDB, $gmCore, $gmGallery, $gmProcessor, $user_ID;
325
 
326
  $alert = array();
327
 
328
  $module_name = $gmCore->_get('gallery_module');
329
  $gallery_id = $gmCore->_get('edit_gallery');
330
+ $author_new = false;
331
+ if($gmCore->caps['gmedia_edit_others_media']){
332
+ $author = (int)$gmCore->_get('author', $user_ID);
333
+ } else{
334
+ $author = $user_ID;
335
+ }
336
 
337
+ $url = add_query_arg(array('page' => $gmProcessor->page, 'edit_gallery' => $gallery_id), admin_url('admin.php'));
338
 
339
  $gallery = array(
340
+ 'name' => '',
341
+ 'description' => '',
342
+ 'global' => $author,
343
  'status' => 'public',
344
  'edited' => '&#8212;',
345
  'module' => '',
348
  );
349
  $taxonomy = 'gmedia_gallery';
350
  if($gallery_id){
351
+ $url = add_query_arg(array('page' => $gmProcessor->page, 'edit_gallery' => $gallery_id), admin_url('admin.php'));
352
  $gallery = $gmDB->get_term($gallery_id, $taxonomy, ARRAY_A);
353
  if(is_wp_error($gallery)){
354
  $alert[] = $gallery->get_error_message();
355
  } elseif(empty($gallery)){
356
  $alert[] = sprintf(__('No gallery with ID #%s in database'), $gallery_id);
357
  } else{
358
+ if(($gallery['global'] == $author) || $gmCore->caps['gmedia_edit_others_media']){
359
+ $gallery_meta = $gmDB->get_metadata('gmedia_term', $gallery_id);
360
+ $gallery_meta = array_map('reset', $gallery_meta);
361
+ $gallery_meta = array_map('maybe_unserialize', $gallery_meta);
362
+ $gallery = array_merge($gallery, $gallery_meta);
363
+ if(isset($_GET['author']) && ($gallery['global'] != $author)){
364
+ unset($gallery['query']['gmedia_album']);
365
+ $gallery['global'] = $author;
366
+ $author_new = true;
367
+ }
368
+ if(!$module_name){
369
+ $module_name = $gallery['module'];
370
+ }
371
+ } else{
372
+ $alert[] = __('You are not allowed to edit others media');
373
  }
374
  }
375
  } elseif($module_name){
376
+ $url = add_query_arg(array('page' => $gmProcessor->page, 'gallery_module' => $module_name), admin_url('admin.php'));
377
  $error_post = $gmCore->_post('gallery');
378
  if($error_post){
379
  $gallery = $gmCore->array_replace_recursive($gallery, $error_post);
384
  if(!empty($alert)){
385
  echo $gmProcessor->alert('danger', $alert);
386
  gmediaGalleries();
387
+
388
  return;
389
  }
390
 
400
  );
401
  }
402
  }
403
+ if(($upload_modules = glob($gmCore->upload['path'] . '/' . $gmGallery->options['folder']['module'] . '/*', GLOB_ONLYDIR | GLOB_NOSORT))){
404
  foreach($upload_modules as $path){
405
  $mfold = basename($path);
406
  $modules[$mfold] = array(
457
  ?>
458
 
459
  <form class="panel panel-default" id="gallerySettingsForm" method="post" action="<?php echo $url; ?>">
460
+ <div class="panel-heading clearfix">
461
+ <div class="btn-toolbar pull-left">
462
+ <div class="btn-group">
463
+ <a href="<?php echo add_query_arg(array('page' => 'GrandMedia_Galleries'), admin_url('admin.php')); ?>" class="btn btn-default"><span class="glyphicon glyphicon-arrow-left"></span> <?php _e('Manage Galleries', 'gmLang'); ?>
464
+ </a>
465
+ </div>
466
+ <div class="btn-group">
467
+ <?php if($gallery['module'] != $module_name){ ?>
468
+ <a href="<?php echo $url; ?>" class="btn btn-default"><?php _e('Cancel preview module', 'gmLang'); ?></a>
469
+ <button type="submit" name="gmedia_gallery_save" class="btn btn-primary"><?php _e('Save with new module', 'gmLang'); ?></button>
470
+ <?php } else{ ?>
471
+ <?php $reset_settings = $gmCore->array_diff_keyval_recursive($default_options, $gallery_settings, true);
472
+ if(!empty($reset_settings)){
473
+ ?>
474
+ <button type="submit" name="gmedia_gallery_reset" class="btn btn-default" data-confirm="<?php _e('Confirm reset gallery options') ?>"><?php _e('Reset to default', 'gmLang'); ?></button>
475
  <?php } ?>
476
+ <button type="submit" name="gmedia_gallery_save" class="btn btn-primary"><?php _e('Save', 'gmLang'); ?></button>
477
+ <?php } ?>
478
  </div>
479
  </div>
480
+ </div>
481
+ <div class="panel-body" id="gmedia-msg-panel"></div>
482
+ <div class="panel-body" id="gmedia-edit-gallery" style="margin-bottom:4px; padding-top:0;">
483
+ <div class="row">
484
+ <div class="col-lg-6 tabable tabs-left">
485
+ <ul class="nav nav-tabs" id="galleryTabs" style="padding:10px 0;">
486
+ <?php if(isset($module_info)){ ?>
487
+ <li class="text-center">
488
+ <strong><?php echo $module_info['title']; ?></strong><a href="#chooseModuleModal" data-toggle="modal" style="padding:5px 0;"><img src="<?php echo $module_url . '/screenshot.png'; ?>" alt="<?php echo esc_attr($module_info['title']); ?>" width="100" style="height:auto;"/></a>
489
+ </li>
490
+ <?php } else{ ?>
491
+ <li class="text-center"><strong><?php echo $gallery['module']; ?></strong>
492
+
493
+ <p><?php _e('This module is broken or outdated. Please, go to Modules page and update/install module.', 'gmLang'); ?></p>
494
+ <a href="#chooseModuleModal" data-toggle="modal" style="padding:5px 0;"><img src="<?php echo $module_url . '/screenshot.png'; ?>" alt="<?php echo esc_attr($gallery['module']); ?>" width="100" style="height:auto;"/></a>
495
+ </li>
496
+ <?php } ?>
497
+ <li class="active"><a href="#general_settings" data-toggle="tab"><?php _e('General Settings', 'gmLang'); ?></a></li>
498
+ <?php
499
+ if(isset($options_tree)){
500
+ gmedia_gallery_options_nav($options_tree);
501
+ }
502
+ ?>
503
+ </ul>
504
+
505
+ <div id="gallery_options_block" class="tab-content" style="padding-top:20px;">
506
+
507
+ <fieldset id="general_settings" class="tab-pane active">
508
+ <p><?php echo '<b>' . __('Gallery module:') . '</b> ' . $gallery['module'];
509
+ if($gallery['module'] != $module_name){
510
+ echo '<br /><b>' . __('Preview module:') . '</b> ' . $module_name;
511
+ echo '<br /><span class="text-muted">' . sprintf(__('Note: Module changed to %s, but not saved yet'), $module_name) . '</span>';
512
+ } ?></p>
513
+
514
+ <p><b><?php _e('Gallery author:', 'gmLang'); ?></b>
515
+ <?php if($gmCore->caps['gmedia_edit_others_media']){ ?>
516
+ <a href="#gallModal" data-modal="filter_authors" data-action="gmedia_get_modal" class="gmedia-modal" title="<?php _e('Click to choose author for gallery', 'gmLang'); ?>"><?php echo $gallery['global']? get_the_author_meta('display_name', $gallery['global']) : __('(no author / shared albums)'); ?></a>
517
+ <?php if($author_new){
518
+ echo '<br /><span class="text-danger">' . __('Note: Author changed but not saved yet. You can see Albums list only of chosen author') . '</span>';
519
+ } ?>
520
+ <?php } else{
521
+ echo $gallery['global']? get_the_author_meta('display_name', $gallery['global']) : '&#8212;';
522
+ } ?>
523
+ <input type="hidden" name="gallery[global]" value="<?php echo $gallery['global']; ?>"/></p>
524
+ <?php if($gallery_id){ ?>
525
+ <p><b><?php _e('Shortcode:'); ?></b> [gmedia id=<?php echo $gallery_id; ?>]</p>
526
+ <?php } ?>
527
+ <input type="hidden" name="gallery[module]" value="<?php echo esc_attr($module_name); ?>">
528
 
529
+ <div class="form-group">
530
+ <label><?php _e('Gallery Name', 'gmLang'); ?></label>
531
+ <input type="text" class="form-control input-sm" name="gallery[name]" placeholder="<?php echo empty($gallery['name'])? esc_attr(__('Gallery Name', 'gmLang')) : esc_attr($gallery['name']); ?>" value="<?php echo esc_attr($gallery['name']); ?>" required="required"/>
532
+ </div>
533
+ <div class="form-group">
534
+ <label><?php _e('Status', 'gmLang'); ?></label>
535
+ <select name="gallery[status]" class="form-control input-sm">
536
+ <option value="public"<?php selected($gallery['status'], 'public'); ?>><?php _e('Public', 'gmLang'); ?></option>
537
+ <?php /* ?>
 
 
 
 
 
 
 
 
 
 
538
  <option value="private"<?php selected($gallery['status'], 'private'); ?>><?php _e('Private', 'gmLang'); ?></option>
539
  <option value="draft"<?php selected($gallery['status'], 'draft'); ?>><?php _e('Draft', 'gmLang'); ?></option>
540
+ <?php */
541
+ ?>
542
+ </select>
543
+ </div>
544
+ <div class="form-group">
545
+ <label><?php _e('Show supported files from', 'gmLang'); ?></label>
546
+ <select data-watch="change" id="gmedia_query" class="form-control input-sm" name="gallery[term]">
547
+ <?php reset($gallery['query']);
548
+ $gallery['term'] = key($gallery['query']); ?>
549
+ <?php if($gmCore->caps['gmedia_terms']){ ?>
550
+ <option value="gmedia_album"<?php selected($gallery['term'], 'gmedia_album'); ?>><?php _e('Albums', 'gmLang'); ?></option>
551
+ <option value="gmedia_tag"<?php selected($gallery['term'], 'gmedia_tag'); ?>><?php _e('Tags', 'gmLang'); ?></option>
552
+ <option value="gmedia_category"<?php selected($gallery['term'], 'gmedia_category'); ?>><?php _e('Categories', 'gmLang'); ?></option>
553
+ <?php } ?>
554
+ <option value="gmedia__in"<?php selected($gallery['term'], 'gmedia__in'); ?>><?php _e('Selected Gmedia', 'gmLang'); ?></option>
555
+ <!-- <option value="gmedia_filter"<?php selected($gallery['term'], 'gmedia_filter'); ?>><?php _e('Filter', 'gmLang'); ?></option> -->
556
+ </select>
557
+ </div>
558
 
559
+ <?php if($gmCore->caps['gmedia_terms']){ ?>
560
+ <div class="form-group" id="div_gmedia_category">
561
+ <?php
562
+ $term_type = 'gmedia_category';
563
+ $gm_terms_all = $gmGallery->options['taxonomies'][$term_type];
564
+ $gm_terms = $gmDB->get_terms($term_type, array('fields' => 'names_count'));
565
+
566
+ $terms_items = '';
567
+ if(count($gm_terms)){
568
+ foreach($gm_terms as $id => $term){
569
+ $selected = (isset($gallery['query'][$term_type]) && in_array($id, $gallery['query'][$term_type]))? ' selected="selected"' : '';
570
+ $terms_items .= '<option value="' . $id . '"' . $selected . '>' . esc_html($gm_terms_all[$term['name']]) . ' (' . $term['count'] . ')</option>' . "\n";
571
  }
572
+ }
573
+ $setvalue = isset($gallery['query'][$term_type])? 'data-setvalue="' . implode(',', $gallery['query'][$term_type]) . '"' : '';
574
+ ?>
575
+ <label><?php _e('Choose Categories', 'gmLang'); ?></label>
576
+ <select data-gmedia_query="is:gmedia_category" <?php echo $setvalue; ?> id="gmedia_category" name="gallery[query][gmedia_category][]" class="gmedia-combobox form-control input-sm" multiple="multiple" placeholder="<?php echo esc_attr(__('Choose Categories...', 'gmLang')); ?>">
577
+ <option value=""><?php _e('Choose Categories...', 'gmLang'); ?></option>
578
+ <?php echo $terms_items; ?>
579
+ </select>
580
+ </div>
581
 
582
+ <div class="form-group" id="div_gmedia_tag">
583
+ <?php
584
+ $term_type = 'gmedia_tag';
585
+ $gm_terms = $gmDB->get_terms($term_type, array('fields' => 'names_count'));
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
586
 
587
+ $terms_items = '';
588
+ if(count($gm_terms)){
589
+ foreach($gm_terms as $id => $term){
590
+ $selected = (isset($gallery['query'][$term_type]) && in_array($id, $gallery['query'][$term_type]))? ' selected="selected"' : '';
591
+ $terms_items .= '<option value="' . $id . '"' . $selected . '>' . esc_html($term['name']) . ' (' . $term['count'] . ')</option>' . "\n";
 
 
 
 
 
 
 
592
  }
593
+ }
594
+ $setvalue = isset($gallery['query'][$term_type])? 'data-setvalue="' . implode(',', $gallery['query'][$term_type]) . '"' : '';
595
+ ?>
596
+ <label><?php _e('Choose Tags', 'gmLang'); ?> </label>
597
+ <select data-gmedia_query="is:gmedia_tag" <?php echo $setvalue; ?> id="gmedia_tag" name="gallery[query][gmedia_tag][]" class="gmedia-combobox form-control input-sm" multiple="multiple" placeholder="<?php echo esc_attr(__('Choose Tags...', 'gmLang')); ?>">
598
+ <option value=""><?php echo __('Choose Tags...', 'gmLang'); ?></option>
599
+ <?php echo $terms_items; ?>
600
+ </select>
601
+ </div>
602
 
603
+ <div class="form-group" id="div_gmedia_album">
604
+ <?php
605
+ $term_type = 'gmedia_album';
606
+ $args = array();
607
+ $args['global'] = $gallery['global']? array(0, $gallery['global']) : 0;
608
+ $gm_terms = $gmDB->get_terms($term_type, $args);
609
+
610
+ $terms_items = '';
611
+ if(count($gm_terms)){
612
+ foreach($gm_terms as $term){
613
+ $selected = (isset($gallery['query'][$term_type]) && in_array($term->term_id, $gallery['query'][$term_type]))? ' selected="selected"' : '';
614
+ $terms_items .= '<option value="' . $term->term_id . '"' . $selected . '>' . esc_html($term->name) . ('public' == $term->status? '' : " [{$term->status}]") . ' &nbsp; (' . $term->count . ')</option>' . "\n";
615
+ }
616
+ }
617
+ $setvalue = isset($gallery['query'][$term_type])? 'data-setvalue="' . implode(',', $gallery['query'][$term_type]) . '"' : '';
618
+ ?>
619
+ <label><?php _e('Choose Albums', 'gmLang'); ?> </label>
620
+ <select data-gmedia_query="is:gmedia_album" <?php echo $setvalue; ?> id="gmedia_album" name="gallery[query][gmedia_album][]" class="gmedia-combobox form-control input-sm" multiple="multiple" placeholder="<?php echo esc_attr(__('Choose Albums...', 'gmLang')); ?>">
621
+ <option value=""><?php echo __('Choose Albums...', 'gmLang'); ?></option>
622
+ <?php echo $terms_items; ?>
623
+ </select>
624
 
625
+ <p class="help-block"><?php _e('You can choose Albums from the same author as Gallery author or Albums without author', 'gmLang'); ?></p>
626
+ </div>
627
+ <?php } ?>
 
628
 
629
+ <div class="form-group" id="div_gmedia__in">
630
+ <label><?php _e('Selected Gmedia IDs <small class="text-muted">separated by comma</small>', 'gmLang'); ?> </label>
631
+ <?php $value = isset($gallery['query']['gmedia__in'][0])? implode(',', wp_parse_id_list($gallery['query']['gmedia__in'][0])) : ''; ?>
632
+ <textarea data-gmedia_query="is:gmedia__in" id="gmedia__in" name="gallery[query][gmedia__in][]" rows="1" class="form-control input-sm" style="resize:vertical;" placeholder="<?php echo esc_attr(__('Gmedia IDs...', 'gmLang')); ?>"><?php echo $value; ?></textarea>
633
+ </div>
634
 
635
+ <div class="form-group">
636
+ <label><?php _e('Description', 'gmLang'); ?></label>
637
+ <textarea class="form-control input-sm" rows="5" name="gallery[description]"><?php echo esc_html($gallery['description']) ?></textarea>
 
 
638
  </div>
639
 
640
+ </fieldset>
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
641
 
642
+ <?php
643
+ if(isset($options_tree)){
644
+ gmedia_gallery_options_fieldset($options_tree, $default_options, $gallery_settings);
645
+ }
646
+ ?>
 
647
  </div>
 
 
 
 
 
648
 
649
+ </div>
650
+ <div class="col-lg-6" style="padding-top:20px;">
651
+ <p><b><?php _e('Last edited:'); ?></b> <?php echo $gallery['edited']; ?></p>
652
+ <?php if($gallery_id){
653
+ $params = array();
654
+ $params['preview'] = ($gallery['module'] != $module_name)? $module_name : false;
655
+ $params['iframe'] = 1;
656
+ ?>
657
+ <p><b><?php _e('Gallery ID:'); ?></b> #<?php echo $gallery_id; ?></p>
658
+ <p><b><?php _e('Gallery URL:'); ?></b> <?php
659
+ $gallery_link_default = home_url('index.php?gmedia=' . $gallery_id);
660
+ if(get_option('permalink_structure')){
661
+ $ep = $gmGallery->options['endpoint'];
662
+ $gallery_link = home_url($ep . '/' . $gallery_id);
663
+ } else{
664
+ $gallery_link = $gallery_link_default;
665
+ } ?>
666
+ <a target="_blank" href="<?php echo $gallery_link; ?>"><?php echo $gallery_link; ?></a>
667
+ <br/><?php _e('update <a href="options-permalink.php">Permalink Settings</a> if above link not working', 'gmLang'); ?>
668
+ </p>
669
+
670
+ <div><b><?php _e('Gallery Preview:'); ?></b></div>
671
+ <div class="gallery_preview" style="overflow:hidden;">
672
+ <iframe id="gallery_preview" name="gallery_preview" src="<?php echo add_query_arg($params, $gallery_link_default); ?>"></iframe>
673
+ </div>
674
+ <?php } ?>
675
+ </div>
676
+ </div>
677
+ <script type="text/javascript">
678
+ jQuery(function($){
679
+ <?php if(!empty($alert)){ ?>
680
+ $('#chooseModuleModal').modal('show');
681
+ <?php } ?>
 
 
 
 
 
 
 
682
 
683
+ var hash = window.location.hash;
684
+ if(hash){
685
+ $('#galleryTabs a').eq(hash.replace('#tab-', '')).tab('show');
686
+ }
687
+ $('#gallerySettingsForm').on('submit', function(){
688
+ $(this).attr('action', $(this).attr('action') + '#tab-' + $('#galleryTabs li.active').index());
689
+ });
690
+
691
+ <?php if($gmCore->caps['gmedia_terms']){ ?>
692
+ $('.gmedia-combobox').each(function(){
693
+ var select = $(this).selectize({
694
+ plugins: ['drag_drop'],
695
+ create: false,
696
+ hideSelected: true
697
+ });
698
+ var val = $(this).data('setvalue');
699
+ if(val){
700
+ val = val.toString().split(',');
701
+ select[0].selectize.setValue(val);
702
+ }
703
+ });
704
+ <?php } ?>
705
 
706
+ var main = $('#gallery_options_block');
707
+
708
+ $('input', main).filter('[data-type="color"]').minicolors({
709
+ animationSpeed: 50,
710
+ animationEasing: 'swing',
711
+ change: null,
712
+ changeDelay: 0,
713
+ control: 'hue',
714
+ //defaultValue: '',
715
+ hide: null,
716
+ hideSpeed: 100,
717
+ inline: false,
718
+ letterCase: 'lowercase',
719
+ opacity: false,
720
+ position: 'bottom left',
721
+ show: null,
722
+ showSpeed: 100,
723
+ theme: 'bootstrap'
724
+ });
725
+
726
+ $('[data-watch]', main).each(function(){
727
+ var el = $(this);
728
+ gmedia_options_conditional_logic(el, 0);
729
+ el.on(el.data('watch'), function(){
730
+ if('change' == el.data('watch')){
731
+ $(this).blur().focus();
732
+ }
733
+ gmedia_options_conditional_logic($(this), 400);
734
+ });
735
+ });
736
+
737
+ function gmedia_options_conditional_logic(el, slide){
738
+ if(el.is(':input')){
739
+ var val = el.val();
740
+ var id = el.attr('id').toLowerCase();
741
+ if(el.is(':checkbox') && !el[0].checked){
742
+ val = '0';
743
+ }
744
+ $('[data-' + id + ']', main).each(function(){
745
+ var key = $(this).data(id);
746
+ key = key.split(':');
747
+ //var hidden = $(this).data('hidden')? parseInt($(this).data('hidden')) : 0;
748
+ var hidden = $(this).data('hidden')? $(this).data('hidden') : {};
749
+ var ch = true;
750
+ switch(key[0]){
751
+ case '=':
752
+ case 'is':
753
+ if(val == key[1]){
754
+ delete hidden[id];
755
+ if(slide && $.isEmptyObject(hidden)){
756
+ $(this).prop('disabled', false).closest('.form-group').stop().slideDown(slide, function(){
757
+ $(this).css({display: 'block'});
758
+ });
759
+ if(key[2]){
760
+ key[2] = $(this).data('value');
761
  } else{
762
+ ch = false;
 
 
 
 
 
 
 
 
 
763
  }
764
+ } else{
765
+ ch = false;
766
+ }
767
+ $(this).data('hidden', hidden);
768
+ } else{
769
+ if($.isEmptyObject(hidden)){
770
+ if(key[2]){
771
+ $(this).closest('.form-group').stop().slideUp(slide, function(){
772
+ $(this).css({display: 'none'});
773
+ });
 
 
 
 
774
  } else{
775
+ $(this).prop('disabled', true).closest('.form-group').stop().slideUp(slide, function(){
776
+ $(this).css({display: 'none'});
777
+ });
 
 
 
 
 
 
 
 
 
778
  }
779
+ } else{
780
+ ch = false;
781
+ }
782
+ hidden[id] = 1;
783
+ $(this).data('hidden', hidden);
784
  }
785
+ break;
786
+ case '!=':
787
+ case 'not':
788
+ if(val == key[1]){
789
+ if($.isEmptyObject(hidden)){
790
+ if(key[2]){
791
+ $(this).closest('.form-group').stop().slideUp(slide, function(){
792
+ $(this).css({display: 'none'});
793
+ });
794
+ } else{
795
+ $(this).prop('disabled', true).closest('.form-group').stop().slideUp(slide, function(){
796
+ $(this).css({display: 'none'});
797
+ });
798
  }
799
  } else{
800
+ ch = false;
801
+ }
802
+ hidden[id] = 1;
803
+ $(this).data('hidden', hidden);
804
+ } else{
805
+ delete hidden[id];
806
+ if(slide && $.isEmptyObject(hidden)){
807
+ $(this).prop('disabled', false).closest('.form-group').stop().slideDown(slide, function(){
808
+ $(this).css({display: 'block'});
809
+ });
810
+ if(key[2] && slide){
811
+ key[2] = $(this).data('value');
812
+ } else{
813
+ ch = false;
814
  }
815
+ } else{
816
+ ch = false;
817
  }
818
+ $(this).data('hidden', hidden);
819
  }
820
+ break;
821
  }
822
+ if(key[2] && ch){
823
+ if($(this).is(':checkbox')){
824
+ if(+($(this).prop('checked')) != parseInt(key[2])){
825
+ $(this).data('value', ($(this).prop('checked')? '1' : '0'));
826
+ $(this).prop('checked', ('0' != key[2])).trigger('change');
827
+ }
828
+ } else{
829
+ if($(this).val() != key[2]){
830
+ $(this).data('value', $(this).val());
831
+ $(this).val(key[2]).trigger('change');
832
+ }
833
+ }
834
+ }
835
+ });
836
+ }
837
+ }
838
+ });
839
+ </script>
840
+ </div>
841
+ <?php
842
+ wp_nonce_field('GmediaGallery');
843
+ ?>
844
  </form>
845
 
846
  <!-- Modal -->
847
+ <?php if($gmCore->caps['gmedia_edit_others_media']){ ?>
848
+ <div class="modal fade gmedia-modal" id="gallModal" tabindex="-1" role="dialog" aria-hidden="true">
849
+ <div class="modal-dialog"></div>
850
+ </div>
851
+ <?php } ?>
852
+
853
  <div class="modal fade gmedia-modal" id="chooseModuleModal" tabindex="-1" role="dialog" aria-hidden="true">
854
  <div class="modal-dialog">
855
  <div class="modal-content">
880
  if(empty($module_info)){
881
  continue;
882
  }
883
+ $mclass = ' module-' . $module_info['type'] . ' module-' . $module_info['status'];
884
  ?>
885
+ <div data-href="<?php echo add_query_arg(array(
886
+ 'edit_gallery' => $gallery_id,
887
+ 'gallery_module' => $module_name
888
+ ), $url); ?>" class="choose-module media<?php echo $mclass; ?>">
889
+ <a href="<?php echo add_query_arg(array(
890
+ 'edit_gallery' => $gallery_id,
891
+ 'gallery_module' => $module_name
892
+ ), $url); ?>" class="thumbnail pull-left">
893
+ <img class="media-object" src="<?php echo $module_url . '/screenshot.png'; ?>" alt="<?php echo esc_attr($module_info['title']); ?>" width="160" height="120"/>
894
  </a>
895
+
896
  <div class="media-body" style="margin-left:180px;">
897
  <h4 class="media-heading"><?php echo $module_info['title']; ?></h4>
898
+
899
  <p class="version"><?php echo __('Version', 'gmLang') . ': ' . $module_info['version']; ?></p>
900
+
901
  <div class="description"><?php echo str_replace("\n", '<br />', $module_info['description']); ?></div>
902
  </div>
903
  </div>
915
  </div>
916
  </div>
917
 
918
+ <?php
919
  }
920
 
admin/gmedia.php CHANGED
@@ -19,40 +19,73 @@ function gmediaLib(){
19
  }
20
  $gm_screen_options = array_merge($gmGallery->options['gm_screen_options'], $gm_screen_options);
21
 
 
 
 
 
 
22
  $gmedia__in = $gmCore->_get('gmedia__in', null);
 
 
 
 
 
23
  $orderby = $gm_screen_options['orderby_gmedia'];
24
  $order = $gm_screen_options['sortorder_gmedia'];
25
- if('selected' == $gmCore->_req('filter')){
26
  $gmedia__in = $gmProcessor->selected_items;
27
  $orderby = 'gmedia__in';
28
  $order = 'ASC';
29
  }
30
- $args = array('mime_type' => $gmCore->_get('mime_type', null),
31
- 'orderby' => $orderby, 'order' => $order,
32
- 'per_page' => $gm_screen_options['per_page_gmedia'], 'page' => $gmCore->_get('pager', 1),
33
- 'tag_id' => $gmCore->_get('tag_id', null), 'tag__in' => $gmCore->_get('tag__in', null),
34
- 'cat' => $gmCore->_get('cat', null), 'category__in' => $gmCore->_get('category__in', null),
35
- 'alb' => $gmCore->_get('alb', null), 'album__in' => $gmCore->_get('album__in', null),
36
- 'gmedia__in' => $gmedia__in, 's' => $gmCore->_get('s', null));
 
 
 
 
 
 
 
 
 
37
  $gmediaQuery = $gmDB->get_gmedias($args);
38
 
39
- $gm_qty = array('total' => '', 'image' => '', 'audio' => '', 'video' => '', 'text' => '', 'application' => '',
40
- 'other' => '');
 
 
 
 
 
 
 
41
 
42
  $gmDbCount = $gmDB->count_gmedia();
43
  foreach($gmDbCount as $key => $value){
44
  $gm_qty[$key] = '<span class="badge pull-right">' . (int)$value . '</span>';
45
  }
46
-
47
  ?>
 
 
 
 
 
 
48
  <div class="panel panel-default" id="gmedia-panel">
49
  <div class="panel-heading clearfix">
50
  <form class="form-inline gmedia-search-form" role="search">
51
  <div class="form-group">
52
  <?php foreach($_GET as $key => $value){
53
- if(in_array($key, array('page', 'mime_type', 'tag_id', 'tag__in', 'cat', 'category__in', 'alb', 'album__in'))){ ?>
54
- <input type="hidden" name="<?php echo $key; ?>" value="<?php echo $value; ?>"/>
55
- <?php }
 
 
56
  } ?>
57
  <input id="gmedia-search" class="form-control input-sm" type="text" name="s" placeholder="<?php _e('Search...', 'gmLang'); ?>" value="<?php echo $gmCore->_get('s', ''); ?>"/>
58
  </div>
@@ -64,7 +97,8 @@ function gmediaLib(){
64
  <?php if(!$gmProcessor->mode){ ?>
65
  <div class="btn-group gm-checkgroup" id="cb_global-btn">
66
  <span class="btn btn-default active"><input class="doaction" id="cb_global" data-group="cb_media-object" type="checkbox"/></span>
67
- <button type="button" class="btn btn-default dropdown-toggle" data-toggle="dropdown"><span class="caret"></span> <span class="sr-only"><?php _e('Toggle Dropdown', 'gmLang'); ?></span></button>
 
68
  <ul class="dropdown-menu" role="menu">
69
  <li><a data-select="total" href="#"><?php _e('All', 'gmLang'); ?></a></li>
70
  <li><a data-select="none" href="#"><?php _e('None', 'gmLang'); ?></a></li>
@@ -90,16 +124,59 @@ function gmediaLib(){
90
  <span class="sr-only"><?php _e('Toggle Dropdown', 'gmLang'); ?></span>
91
  </button>
92
  <ul class="dropdown-menu" role="menu">
 
 
 
 
 
 
 
93
  <li role="presentation" class="dropdown-header"><?php _e('TYPE', 'gmLang'); ?></li>
94
- <li class="total<?php if(in_array('total', $curr_mime)){ echo ' active'; } ?>"><a rel="total" href="<?php echo $gmCore->get_admin_url(array(), array('mime_type','pager')); ?>"><?php _e('All', 'gmLang'); echo $gm_qty['total']; ?></a></li>
95
- <li class="image<?php if(in_array('image', $curr_mime)){ echo ' active'; } if(!$gmDbCount['image']){ echo ' disabled'; } ?>"><a rel="image" href="<?php echo $gmCore->get_admin_url(array('mime_type' => 'image'), array('pager')); ?>"><?php _e('Images', 'gmLang'); echo $gm_qty['image']; ?></a></li>
96
- <li class="audio<?php if(in_array('audio', $curr_mime)){ echo ' active'; } if(!$gmDbCount['audio']){ echo ' disabled'; } ?>"><a rel="audio" href="<?php echo $gmCore->get_admin_url(array('mime_type' => 'audio'), array('pager')); ?>"><?php _e('Audio', 'gmLang'); echo $gm_qty['audio']; ?></a></li>
97
- <li class="video<?php if(in_array('video', $curr_mime)){ echo ' active'; } if(!$gmDbCount['video']){ echo ' disabled'; } ?>"><a rel="video" href="<?php echo $gmCore->get_admin_url(array('mime_type' => 'video'), array('pager')); ?>"><?php _e('Video', 'gmLang'); echo $gm_qty['video']; ?></a></li>
98
- <li class="application<?php if(in_array('application', $curr_mime) || in_array('text', $curr_mime)){ echo ' active'; } if(!$gmDbCount['application']){ echo ' disabled'; } ?>"><a rel="application" href="<?php echo $gmCore->get_admin_url(array('mime_type' => 'application,text'), array('pager')); ?>"><?php _e('Other', 'gmLang'); echo $gm_qty['other']; ?></a></li>
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
99
  <li role="presentation" class="dropdown-header"><?php _e('COLLECTIONS', 'gmLang'); ?></li>
100
- <li class="filter_categories<?php if(isset($gmDB->filter_tax['gmedia_category'])){ echo ' active'; } ?>"><a href="#termsModal" data-modal="filter_categories" data-action="gmedia_terms_modal" class="gmedia-modal"><?php _e('Categories', 'gmLang'); ?></a></li>
101
- <li class="filter_albums<?php if(isset($gmDB->filter_tax['gmedia_album'])){ echo ' active'; } ?>"><a href="#termsModal" data-modal="filter_albums" data-action="gmedia_terms_modal" class="gmedia-modal"><?php _e('Albums', 'gmLang'); ?></a></li>
102
- <li class="filter_tags<?php if(isset($gmDB->filter_tax['gmedia_tag'])){ echo ' active'; } ?>"><a href="#termsModal" data-modal="filter_tags" data-action="gmedia_terms_modal" class="gmedia-modal"><?php _e('Tags', 'gmLang'); ?></a></li>
 
 
 
 
 
 
 
 
103
  <?php do_action('gmedia_filter_list'); ?>
104
  </ul>
105
  </div>
@@ -108,37 +185,86 @@ function gmediaLib(){
108
  <?php if(!$gmProcessor->mode){
109
  $args = array('mode' => 'edit');
110
  $edit_mode_href = $gmCore->get_admin_url($args);
111
- $args2 = array('mode' => 'edit', 'filter' => 'selected', 'pager' => false);
112
- $edit_mode_data = 'data-href="'.$edit_mode_href.'" data-href_sel="'.$gmCore->get_admin_url($args2).'"';
113
  } else{
114
  $edit_mode_href = $gmCore->get_admin_url(array(), array('mode'));
115
  $edit_mode_data = '';
116
  } ?>
117
- <a class="btn btn-default edit-mode-link" title="<?php _e('Toggle Edit Mode', 'gmLang'); ?>" href="<?php echo $edit_mode_href; ?>" <?php echo $edit_mode_data; ?>><?php _e('Action', 'gmLang'); ?></a>
118
- <button type="button" class="btn btn-default dropdown-toggle" data-toggle="dropdown"><span class="caret"></span> <span class="sr-only"><?php _e('Toggle Dropdown', 'gmLang'); ?></span></button>
 
 
 
 
 
119
  <?php
120
  $rel_selected_show = 'rel-selected-show';
121
  $rel_selected_hide = 'rel-selected-hide';
122
  ?>
123
  <ul class="dropdown-menu" role="menu">
124
  <?php if(!$gmProcessor->mode){ ?>
125
- <li><a class="edit-mode-link" href="<?php echo $edit_mode_href; ?>" <?php echo $edit_mode_data; ?>><?php _e('Enter Edit Mode', 'gmLang'); ?></a></li>
 
 
 
 
 
 
 
 
 
126
 
127
  <li class="divider"></li>
128
- <li class="<?php echo $rel_selected_show; ?>"><a href="#termsModal" data-modal="quick_gallery" data-action="gmedia_terms_modal" class="gmedia-modal"><?php _e('Quick Gallery from Selected', 'gmLang'); ?></a></li>
129
- <li class="<?php echo $rel_selected_show; ?>"><a href="#termsModal" data-modal="assign_category" data-action="gmedia_terms_modal" class="gmedia-modal"><?php _e('Assign Category...', 'gmLang'); ?></a></li>
130
- <li class="<?php echo $rel_selected_show; ?>"><a href="#termsModal" data-modal="assign_album" data-action="gmedia_terms_modal" class="gmedia-modal"><?php _e('Move to Album...', 'gmLang'); ?></a></li>
131
- <li class="<?php echo $rel_selected_show; ?>"><a href="#termsModal" data-modal="add_tags" data-action="gmedia_terms_modal" class="gmedia-modal"><?php _e('Add Tags...', 'gmLang'); ?></a></li>
132
- <li class="<?php echo $rel_selected_show; ?>"><a href="#termsModal" data-modal="delete_tags" data-action="gmedia_terms_modal" class="gmedia-modal"><?php _e('Delete Tags...', 'gmLang'); ?></a></li>
133
- <li class="<?php echo $rel_selected_show; ?>"><a href="<?php echo wp_nonce_url($gmCore->get_admin_url(array('delete' => 'selected'), array('filter')), 'gmedia_delete') ?>" class="gmedia-delete" data-confirm="<?php _e("You are about to permanently delete the selected items.\n\r'Cancel' to stop, 'OK' to delete.", "gmLang"); ?>"><?php _e('Delete Selected Items', 'gmLang'); ?></a></li>
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
134
 
135
  <li class="divider <?php echo $rel_selected_show; ?>"></li>
136
- <li class="<?php echo $rel_selected_show; ?>"><a href="<?php echo wp_nonce_url($gmCore->get_admin_url(array('update_meta' => 'selected'), array()), 'gmedia_update_meta') ?>" class="gmedia-update"><?php _e('Update Metadata in Database', 'gmLang'); ?></a></li>
 
 
 
 
 
137
 
138
  <li class="dropdown-header <?php echo $rel_selected_hide; ?>"><span><?php _e("Select items to see more actions", "gmLang"); ?></span></li>
139
  <?php } else{ ?>
140
  <li><a href="<?php echo $edit_mode_href; ?>"><?php _e('Exit Edit Mode', 'gmLang'); ?></a></li>
141
- <?php }
 
142
  do_action('gmedia_action_list');
143
  ?>
144
  </ul>
@@ -150,7 +276,8 @@ function gmediaLib(){
150
  ?>
151
  <form class="btn-group" id="gm-selected-btn" name="gm-selected-form" action="<?php echo add_query_arg(array('filter' => $filter_selected_arg), $url); ?>" method="post">
152
  <button type="submit" class="btn btn<?php echo ('selected' == $filter_selected)? '-success' : '-info' ?>"><?php printf(__('%s selected', 'gmLang'), '<span id="gm-selected-qty">' . count($gmProcessor->selected_items) . '</span>'); ?></button>
153
- <button type="button" class="btn btn-info dropdown-toggle" data-toggle="dropdown"><span class="caret"></span> <span class="sr-only"><?php _e('Toggle Dropdown', 'gmLang'); ?></span></button>
 
154
  <input type="hidden" id="gm-selected" data-userid="<?php echo $user_ID; ?>" data-key="library" name="selected_items" value="<?php echo implode(',', $gmProcessor->selected_items); ?>"/>
155
  <ul class="dropdown-menu" role="menu">
156
  <li><a id="gm-selected-show" href="#show"><?php
@@ -161,7 +288,11 @@ function gmediaLib(){
161
  }
162
  ?></a></li>
163
  <li><a id="gm-selected-clear" href="#clear"><?php _e('Clear selected items', 'gmLang'); ?></a></li>
164
- <li><a href="#termsModal" data-modal="quick_gallery" data-action="gmedia_terms_modal" class="gmedia-modal"><?php _e('Quick Gallery from Selected', 'gmLang'); ?></a></li>
 
 
 
 
165
  </ul>
166
  </form>
167
 
@@ -172,27 +303,50 @@ function gmediaLib(){
172
  <div class="list-group" id="gm-list-table">
173
  <?php
174
  if(count($gmediaQuery)){
175
- foreach($gmediaQuery as $item) {
176
- $meta = $gmDB->get_metadata('gmedia', $item->ID);
177
- $type = explode('/', $item->mime_type);
178
- $item_url = $gmCore->upload['url'] . '/' . $gmGallery->options['folder'][$type[0]] . '/' . $item->gmuid;
179
- $item_path = $gmCore->upload['path'] . '/' . $gmGallery->options['folder'][$type[0]] . '/' . $item->gmuid;
180
-
181
- if (function_exists('exif_imagetype')) {
182
- $is_webimage = (('image' == $type[0]) && in_array(exif_imagetype($item_path), array(IMAGETYPE_GIF,
183
- IMAGETYPE_JPEG,
184
- IMAGETYPE_PNG)))? true : false;
185
- } else{
186
- $is_webimage = (('image' == $type[0]) && in_array($type[1], array('jpeg', 'png', 'gif')))? true : false;
187
- }
188
-
189
- $tags = $gmDB->get_the_gmedia_terms($item->ID, 'gmedia_tag');
190
- $albs = $gmDB->get_the_gmedia_terms($item->ID, 'gmedia_album');
191
- $cats = $gmDB->get_the_gmedia_terms($item->ID, 'gmedia_category');
192
  ?>
193
- <?php if(!$gmProcessor->mode){
194
- $is_selected = in_array($item->ID, $gmProcessor->selected_items)? true : false; ?>
195
- <div class="list-group-item d-row clearfix<?php echo $is_selected? ' active' : ''; ?>" id="list-item-<?php echo $item->ID; ?>" data-id="<?php echo $item->ID; ?>" data-type="<?php echo $type[0]; ?>">
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
196
  <div class="gmedia_id">#<?php echo $item->ID; ?></div>
197
  <label class="cb_media-object">
198
  <input name="doaction[]" type="checkbox"<?php echo $is_selected? ' checked="checked"' : ''; ?> data-type="<?php echo $type[0]; ?>" class="hidden" value="<?php echo $item->ID; ?>"/>
@@ -234,7 +388,7 @@ function gmediaLib(){
234
  }
235
  $terms_category = join(', ', $terms_category);
236
  } else{
237
- $terms_category = sprintf('<a class="category" href="%s">%s</a>', esc_url(add_query_arg(array('cat' => 0), $url)), __('Uncategorized'));
238
  }
239
  echo $terms_category;
240
  } ?>
@@ -255,46 +409,165 @@ function gmediaLib(){
255
  </div>
256
  <div class="col-md-6">
257
  <div class="media-meta">
258
- <span class="label label-default"><?php _e('Type','gmLang'); ?>:</span> <?php echo $item->mime_type; //echo ucfirst($type[0]); ?>
 
 
 
259
  </div>
260
  <?php if('image' == $type[0]){
261
  $_metadata = unserialize($meta['_metadata'][0]);
262
  ?>
263
  <div class="media-meta">
264
- <span class="label label-default"><?php _e('Size','gmLang'); ?>:</span> <?php echo $_metadata['original']['width'] . ' × ' . $_metadata['original']['height']; ?>
 
265
  </div>
266
  <?php } ?>
267
- <div class="media-meta"><span class="label label-default"><?php _e('Filename','gmLang'); ?>:</span>
268
  <a href="<?php echo $item_url; ?>"><?php echo $item->gmuid; ?></a></div>
269
  <div class="media-meta">
270
- <span class="label label-default"><?php _e('Author','gmLang'); ?>:</span> <?php printf('<a class="gmedia-author" href="%s">%s</a>', esc_url(add_query_arg(array('author' => $item->author), $url)), get_user_option('display_name', $item->author)); ?>
 
271
  </div>
272
  <div class="media-meta"><span class="label label-default"><?php _e('Date', 'gmLang'); ?>:</span> <?php echo $item->date;
273
- echo ' <small class="modified" title="' . __('Last Modified Date', 'gmLang') . '">' . (($item->modified != $item->date)? $item->modified : '') . '</small>';
274
  ?></div>
275
- <div class="media-meta"><span class="label label-default"><?php _e('Link','gmLang'); ?>:</span>
276
  <?php if(!empty($item->link)){ ?>
277
  <a href="<?php echo $item->link; ?>"><?php echo $item->link; ?></a>
278
  <?php
279
  } else{
280
  echo '&#8212;';
281
  } ?></div>
282
- <?php if('image' == $type[0]){ ?>
283
- <p class="media-meta" style="margin:5px 4px;">
284
- <a href="<?php echo admin_url("admin.php?page=GrandMedia&gmediablank=image_editor&id={$item->ID}"); ?>" data-target="#gmeditModal" class="gmedit-modal" title="<?php echo esc_attr($item->title); ?>">
285
- <?php _e('Edit Image', 'gmLang'); ?>
286
- </a> |
287
- <a href="<?php echo $gmCore->gm_get_media_image($item, 'original'); ?>" data-target="#previewModal" class="preview-modal" title="<?php echo esc_attr($item->title); ?>">
288
- <?php _e('View Original', 'gmLang'); ?>
289
- </a>
290
- </p>
291
- <?php } ?>
 
 
 
 
 
 
 
 
 
292
  </div>
293
  </div>
294
  </div>
295
 
296
- <?php } else{ ?>
 
 
 
 
 
 
 
 
 
 
 
297
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
298
  <form class="list-group-item row d-row edit-gmedia" id="list-item-<?php echo $item->ID; ?>" data-id="<?php echo $item->ID; ?>" data-type="<?php echo $type[0]; ?>" role="form">
299
  <div class="col-sm-4" style="max-width:350px;">
300
  <input name="ID" type="hidden" value="<?php echo $item->ID; ?>"/>
@@ -303,12 +576,18 @@ function gmediaLib(){
303
  <img class="gmedia-thumb" src="<?php echo $gmCore->gm_get_media_image($item, 'thumb'); ?>" alt=""/>
304
  </a>
305
  <p>
306
- <a href="<?php echo admin_url("admin.php?page=GrandMedia&gmediablank=image_editor&id={$item->ID}"); ?>" data-target="#gmeditModal" class="btn btn-link btn-sm gmedit-modal" title="<?php echo esc_attr($item->title); ?>">
307
  <?php _e('Edit Image', 'gmLang'); ?>
308
  </a> |
309
- <a href="<?php echo $gmCore->gm_get_media_image($item, 'original'); ?>" data-target="#previewModal" class="btn btn-link btn-sm preview-modal" title="<?php echo esc_attr($item->title); ?>">
310
  <?php _e('View Original', 'gmLang'); ?>
311
  </a>
 
 
 
 
 
 
312
  </p>
313
  <?php } else{ ?>
314
  <a href="<?php echo $item_url; ?>" data-target="#previewModal" class="thumbnail preview-modal" title="<?php echo esc_attr($item->title); ?>">
@@ -333,86 +612,120 @@ function gmediaLib(){
333
  <div class="row">
334
  <div class="form-group col-lg-6">
335
  <label><?php _e('Description', 'gmLang'); ?></label>
336
- <?php wp_editor(esc_html($item->description), "gm{$item->ID}_description", array('editor_class' => 'form-control input-sm',
337
- 'editor_height' => 140,
338
- 'wpautop' => false,
339
- 'media_buttons' => false,
340
- 'textarea_name' => 'description',
341
- 'textarea_rows' => '4',
342
- 'tinymce' => false,
343
- 'quicktags' => array('buttons' => apply_filters('gmedia_editor_quicktags', 'strong,em,link,ul,li,close')))); ?>
 
 
 
 
 
 
344
  </div>
345
  <div class="col-lg-6">
346
- <?php if($is_webimage){ ?>
347
- <div class="form-group">
348
- <?php
349
- $cat_name = empty($cats)? 0 : reset($cats)->name;
350
- $term_type = 'gmedia_category';
351
- $gm_terms = $gmGallery->options['taxonomies'][$term_type];
352
-
353
- $terms_category = '';
354
- if(count($gm_terms)){
355
- foreach($gm_terms as $term_name => $term_title){
356
- $selected_option = ($cat_name === $term_name)? ' selected="selected"' : '';
357
- $terms_category .= '<option' . $selected_option . ' value="' . $term_name . '">' . esc_html($term_title) . '</option>' . "\n";
358
- }
359
- }
360
- ?>
361
- <label><?php _e('Category', 'gmLang'); ?> </label>
362
- <select name="terms[gmedia_category]" class="gmedia_category form-control input-sm">
363
- <option<?php echo $cat_name? '' : ' selected="selected"'; ?> value=""><?php _e('Uncategorized', 'gmLang'); ?></option>
364
- <?php echo $terms_category; ?>
365
- </select>
366
- </div>
367
- <?php } elseif(('image' != $type[0])){ ?>
368
  <div class="form-group">
369
  <label><?php _e('Cover', 'gmLang'); ?></label>
370
- <input name="meta[cover]" type="text" class="form-control input-sm gmedia-cover" value="<?php if(isset($meta['cover'][0])){ echo $meta['cover'][0]; } ?>" placeholder="<?php _e('Gmedia ID or Image URL', 'gmLang'); ?>"/>
 
 
371
  </div>
372
  <?php } ?>
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
373
 
374
- <div class="form-group">
375
  <?php
376
- $alb_id = empty($albs)? 0 : reset($albs)->term_id;
377
- $term_type = 'gmedia_album';
378
- $gm_terms = $gmDB->get_terms($term_type);
379
-
380
- $terms_album = '';
381
- if(count($gm_terms)){
382
- foreach($gm_terms as $term){
383
- $selected_option = ($alb_id == $term->term_id)? ' selected="selected"' : '';
384
- $terms_album .= '<option' . $selected_option . ' value="' . $term->term_id . '">' . esc_html($term->name) . '</option>' . "\n";
385
- }
386
- }
387
- ?>
388
- <label><?php _e('Album ', 'gmLang'); ?></label>
389
- <select name="terms[gmedia_album]" class="combobox_gmedia_album form-control input-sm" placeholder="<?php _e('Album Name...', 'gmLang'); ?>">
390
- <option<?php echo $alb_id? '' : ' selected="selected"'; ?> value=""></option>
391
- <?php echo $terms_album; ?>
392
- </select>
393
- </div>
394
- <div class="form-group">
395
- <?php
396
- if(!empty($tags)){
397
- $terms_tag = array();
398
- foreach($tags as $c){
399
- $terms_tag[] = esc_html($c->name);
400
- }
401
- $terms_tag = join(', ', $terms_tag);
402
- } else{
403
- $terms_tag = '';
404
- }
405
- ?>
406
- <label><?php _e('Tags ', 'gmLang'); ?></label>
407
- <textarea name="terms[gmedia_tag]" class="form-control input-sm" rows="1" cols="50"><?php echo $terms_tag; ?></textarea>
408
- </div>
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
409
  </div>
410
  </div>
411
  <div class="row">
412
  <div class="col-lg-6">
413
  <div class="form-group">
414
  <label><?php _e('Filename', 'gmLang'); ?></label>
415
- <input name="filename" type="text" class="form-control input-sm gmedia-filename" value="<?php echo pathinfo($item->gmuid, PATHINFO_FILENAME); ?>"/>
 
 
416
  </div>
417
  <div class="form-group">
418
  <label><?php _e('Date', 'gmLang'); ?></label>
@@ -423,24 +736,47 @@ function gmediaLib(){
423
  <span class="glyphicon glyphicon-calendar"></span></button></span>
424
  </div>
425
  </div>
 
 
 
 
 
 
 
 
426
  </div>
427
  <div class="col-lg-6">
428
- <div class="form-group hidden">
429
  <label><?php _e('Author', 'gmLang'); ?></label>
430
- <?php $user_ids = $gmCore->get_editable_user_ids($user_ID);
431
- wp_dropdown_users(array('include' => $user_ids, 'include_selected' => true,
432
- 'name' => 'author', 'selected' => $item->author,
433
- 'class' => 'form-control'));
 
 
 
 
 
 
 
 
 
 
434
  ?>
435
  </div>
436
  <div class="media-meta"><span class="label label-default"><?php _e('ID', 'gmLang') ?>:</span> <strong><?php echo $item->ID; ?></strong></div>
437
- <div class="media-meta"><span class="label label-default"><?php _e('Type', 'gmLang') ?>:</span> <?php echo $item->mime_type; //echo ucfirst($type[0]); ?></div>
438
- <div class="media-meta"><span class="label label-default"><?php _e('File Size', 'gmLang') ?> :</span> <?php echo $gmCore->filesize($item_path); ?></div>
 
 
439
  <?php if('image' == $type[0]){
440
  $_metadata = unserialize($meta['_metadata'][0]); ?>
441
- <div class="media-meta"> <span class="label label-default"><?php _e('Dimensions', 'gmLang') ?>:</span> <?php echo $_metadata['original']['width'] . ' × ' . $_metadata['original']['height']; ?></div>
 
442
  <?php } ?>
443
- <div class="media-meta"><span class="label label-default"><?php _e('Last Edited', 'gmLang') ?>:</span> <span class="gm-last-edited modified"><?php echo $item->modified; ?></span></div>
 
 
444
  </div>
445
  </div>
446
  <?php do_action('gmedia_edit_form'); ?>
@@ -451,7 +787,7 @@ function gmediaLib(){
451
  <script type="text/javascript">
452
  jQuery(function($){
453
  <?php if(!$gmProcessor->mode){ ?>
454
- $('#gm-selected').on('change', function(){
455
  var val = $(this).val();
456
  $('.edit-mode-link').each(function(){
457
  if(val){
@@ -463,62 +799,82 @@ function gmediaLib(){
463
  }).trigger('change');
464
 
465
  <?php } else { ?>
 
466
  $('.combobox_gmedia_album').selectize({
467
- create: true,
468
  persist: false
469
  });
 
470
 
471
  var gmedia_date_temp;
472
- $('.input-group.date').datetimepicker({useSeconds: true}).on('show.dp',function(e){
473
  gmedia_date_temp = $('input', this).val();
474
- }).on('hide.dp', function(e){
475
  if(gmedia_date_temp != $('input', this).val()){
476
- $('input', this).change();
477
  }
478
  });
479
- $('input.gmedia-filename').alphanum({
480
- allow: '-_',
481
- disallow: '',
482
- allowSpace: false,
483
- allowNumeric: true,
484
- allowUpper: true,
485
- allowLower: true,
486
- allowCaseless: true,
487
- allowLatin: true,
488
- allowOtherCharSets: false,
489
- forceUpper: false,
490
- forceLower: false,
491
- maxLength: NaN
492
- });
 
 
 
 
493
 
494
  <?php } ?>
495
  });
496
  window.closeModal = function(id){
497
- jQuery('#'+id).modal('hide');
498
  };
499
  </script>
500
  <?php } else{ ?>
501
  <div class="list-group-item">
502
  <div class="well well-lg text-center">
503
  <h4><?php _e('No items to show.', 'gmLang'); ?></h4>
504
- <p><a href="<?php echo admin_url('admin.php?page=GrandMedia_AddMedia') ?>" class="btn btn-success"><span class="glyphicon glyphicon-plus"></span> <?php _e('Add Media', 'gmLang'); ?></a></p>
 
 
 
 
505
  </div>
506
  </div>
507
  <?php } ?>
508
  </div>
509
 
 
 
 
 
 
 
510
  <?php
511
  wp_original_referer_field(true, 'previous');
512
  wp_nonce_field('GmediaGallery');
513
  ?>
514
  </div>
515
 
516
- <div class="modal fade gmedia-modal" id="termsModal" tabindex="-1" role="dialog" aria-hidden="true">
517
  <div class="modal-dialog"></div>
518
  </div>
519
- <div class="modal fade gmedia-modal" id="gmeditModal" tabindex="-1" role="dialog" aria-hidden="true">
520
- <div class="modal-dialog modal-lg"><div class="modal-content"></div></div>
521
- </div>
 
 
 
 
522
  <div class="modal fade gmedia-modal" id="previewModal" tabindex="-1" role="dialog" aria-hidden="true">
523
  <div class="modal-dialog modal-lg">
524
  <div class="modal-content">
19
  }
20
  $gm_screen_options = array_merge($gmGallery->options['gm_screen_options'], $gm_screen_options);
21
 
22
+ if($gmCore->caps['gmedia_show_others_media']){
23
+ $author = $gmCore->_get('author', 0);
24
+ } else{
25
+ $author = $user_ID;
26
+ }
27
  $gmedia__in = $gmCore->_get('gmedia__in', null);
28
+ $search_string = $gmCore->_get('s', null);
29
+ if('#' == substr($search_string, 0, 1)){
30
+ $gmedia__in = substr($search_string, 1);
31
+ $search_string = null;
32
+ }
33
  $orderby = $gm_screen_options['orderby_gmedia'];
34
  $order = $gm_screen_options['sortorder_gmedia'];
35
+ if(('selected' == $gmCore->_req('filter')) && !empty($gmProcessor->selected_items)){
36
  $gmedia__in = $gmProcessor->selected_items;
37
  $orderby = 'gmedia__in';
38
  $order = 'ASC';
39
  }
40
+ $args = array(
41
+ 'mime_type' => $gmCore->_get('mime_type', null),
42
+ 'orderby' => $orderby,
43
+ 'order' => $order,
44
+ 'per_page' => $gm_screen_options['per_page_gmedia'],
45
+ 'page' => $gmCore->_get('pager', 1),
46
+ 'tag_id' => $gmCore->_get('tag_id', null),
47
+ 'tag__in' => $gmCore->_get('tag__in', null),
48
+ 'cat' => $gmCore->_get('cat', null),
49
+ 'category__in' => $gmCore->_get('category__in', null),
50
+ 'alb' => $gmCore->_get('alb', null),
51
+ 'album__in' => $gmCore->_get('album__in', null),
52
+ 'author' => $author,
53
+ 'gmedia__in' => $gmedia__in,
54
+ 's' => $search_string
55
+ );
56
  $gmediaQuery = $gmDB->get_gmedias($args);
57
 
58
+ $gm_qty = array(
59
+ 'total' => '',
60
+ 'image' => '',
61
+ 'audio' => '',
62
+ 'video' => '',
63
+ 'text' => '',
64
+ 'application' => '',
65
+ 'other' => ''
66
+ );
67
 
68
  $gmDbCount = $gmDB->count_gmedia();
69
  foreach($gmDbCount as $key => $value){
70
  $gm_qty[$key] = '<span class="badge pull-right">' . (int)$value . '</span>';
71
  }
 
72
  ?>
73
+ <?php if(!empty($author)){ ?>
74
+ <div class="library-author alert alert-info">
75
+ <strong><?php _e('Selected Author:', 'gmLang'); ?></strong>
76
+ <a href="#libModal" data-modal="filter_authors" data-action="gmedia_get_modal" class="gmedia-modal"><?php echo get_the_author_meta('display_name', $author); ?></a>
77
+ </div>
78
+ <?php } ?>
79
  <div class="panel panel-default" id="gmedia-panel">
80
  <div class="panel-heading clearfix">
81
  <form class="form-inline gmedia-search-form" role="search">
82
  <div class="form-group">
83
  <?php foreach($_GET as $key => $value){
84
+ if(in_array($key, array('page', 'mode', 'author', 'mime_type', 'tag_id', 'tag__in', 'cat', 'category__in', 'alb', 'album__in'))){
85
+ ?>
86
+ <input type="hidden" name="<?php echo $key; ?>" value="<?php echo $value; ?>"/>
87
+ <?php
88
+ }
89
  } ?>
90
  <input id="gmedia-search" class="form-control input-sm" type="text" name="s" placeholder="<?php _e('Search...', 'gmLang'); ?>" value="<?php echo $gmCore->_get('s', ''); ?>"/>
91
  </div>
97
  <?php if(!$gmProcessor->mode){ ?>
98
  <div class="btn-group gm-checkgroup" id="cb_global-btn">
99
  <span class="btn btn-default active"><input class="doaction" id="cb_global" data-group="cb_media-object" type="checkbox"/></span>
100
+ <button type="button" class="btn btn-default dropdown-toggle" data-toggle="dropdown"><span class="caret"></span>
101
+ <span class="sr-only"><?php _e('Toggle Dropdown', 'gmLang'); ?></span></button>
102
  <ul class="dropdown-menu" role="menu">
103
  <li><a data-select="total" href="#"><?php _e('All', 'gmLang'); ?></a></li>
104
  <li><a data-select="none" href="#"><?php _e('None', 'gmLang'); ?></a></li>
124
  <span class="sr-only"><?php _e('Toggle Dropdown', 'gmLang'); ?></span>
125
  </button>
126
  <ul class="dropdown-menu" role="menu">
127
+ <li role="presentation" class="dropdown-header"><?php _e('FILTER BY AUTHOR', 'gmLang'); ?></li>
128
+ <li class="gmedia_author">
129
+ <a href="#libModal" data-modal="filter_authors" data-action="gmedia_get_modal" class="gmedia-modal"><?php if(!empty($author)){
130
+ echo get_the_author_meta('display_name', $author);
131
+ } else{
132
+ _e('Show all authors', 'gmLang');
133
+ } ?></a></li>
134
  <li role="presentation" class="dropdown-header"><?php _e('TYPE', 'gmLang'); ?></li>
135
+ <li class="total<?php if(in_array('total', $curr_mime)){
136
+ echo ' active';
137
+ } ?>"><a rel="total" href="<?php echo $gmCore->get_admin_url(array(), array('mime_type', 'pager')); ?>"><?php echo $gm_qty['total'];
138
+ _e('All', 'gmLang'); ?></a></li>
139
+ <li class="image<?php if(in_array('image', $curr_mime)){
140
+ echo ' active';
141
+ }
142
+ if(!$gmDbCount['image']){
143
+ echo ' disabled';
144
+ } ?>"><a rel="image" href="<?php echo $gmCore->get_admin_url(array('mime_type' => 'image'), array('pager')); ?>"><?php echo $gm_qty['image'];
145
+ _e('Images', 'gmLang'); ?></a></li>
146
+ <li class="audio<?php if(in_array('audio', $curr_mime)){
147
+ echo ' active';
148
+ }
149
+ if(!$gmDbCount['audio']){
150
+ echo ' disabled';
151
+ } ?>"><a rel="audio" href="<?php echo $gmCore->get_admin_url(array('mime_type' => 'audio'), array('pager')); ?>"><?php echo $gm_qty['audio'];
152
+ _e('Audio', 'gmLang'); ?></a></li>
153
+ <li class="video<?php if(in_array('video', $curr_mime)){
154
+ echo ' active';
155
+ }
156
+ if(!$gmDbCount['video']){
157
+ echo ' disabled';
158
+ } ?>"><a rel="video" href="<?php echo $gmCore->get_admin_url(array('mime_type' => 'video'), array('pager')); ?>"><?php echo $gm_qty['video'];
159
+ _e('Video', 'gmLang'); ?></a></li>
160
+ <li class="application<?php if(in_array('application', $curr_mime) || in_array('text', $curr_mime)){
161
+ echo ' active';
162
+ }
163
+ if(!$gmDbCount['application']){
164
+ echo ' disabled';
165
+ } ?>">
166
+ <a rel="application" href="<?php echo $gmCore->get_admin_url(array('mime_type' => 'application,text'), array('pager')); ?>"><?php echo $gm_qty['other'];
167
+ _e('Other', 'gmLang'); ?></a></li>
168
  <li role="presentation" class="dropdown-header"><?php _e('COLLECTIONS', 'gmLang'); ?></li>
169
+ <li class="filter_categories<?php if(isset($gmDB->filter_tax['gmedia_category'])){
170
+ echo ' active';
171
+ } ?>">
172
+ <a href="#libModal" data-modal="filter_categories" data-action="gmedia_get_modal" class="gmedia-modal"><?php _e('Categories', 'gmLang'); ?></a>
173
+ </li>
174
+ <li class="filter_albums<?php if(isset($gmDB->filter_tax['gmedia_album'])){
175
+ echo ' active';
176
+ } ?>"><a href="#libModal" data-modal="filter_albums" data-action="gmedia_get_modal" class="gmedia-modal"><?php _e('Albums', 'gmLang'); ?></a></li>
177
+ <li class="filter_tags<?php if(isset($gmDB->filter_tax['gmedia_tag'])){
178
+ echo ' active';
179
+ } ?>"><a href="#libModal" data-modal="filter_tags" data-action="gmedia_get_modal" class="gmedia-modal"><?php _e('Tags', 'gmLang'); ?></a></li>
180
  <?php do_action('gmedia_filter_list'); ?>
181
  </ul>
182
  </div>
185
  <?php if(!$gmProcessor->mode){
186
  $args = array('mode' => 'edit');
187
  $edit_mode_href = $gmCore->get_admin_url($args);
188
+ $args2 = array('mode' => 'edit', 'filter' => 'selected', 'pager' => false, 's' => false);
189
+ $edit_mode_data = 'data-href="' . $edit_mode_href . '" data-href_sel="' . $gmCore->get_admin_url($args2) . '"';
190
  } else{
191
  $edit_mode_href = $gmCore->get_admin_url(array(), array('mode'));
192
  $edit_mode_data = '';
193
  } ?>
194
+ <?php if($gmCore->caps['gmedia_edit_media']){ ?>
195
+ <a class="btn btn-default edit-mode-link" title="<?php _e('Toggle Edit Mode', 'gmLang'); ?>" href="<?php echo $edit_mode_href; ?>" <?php echo $edit_mode_data; ?>><?php _e('Action', 'gmLang'); ?></a>
196
+ <?php } else{ ?>
197
+ <button type="button" class="btn btn-default"><?php _e('Action', 'gmLang'); ?></button>
198
+ <?php } ?>
199
+ <button type="button" class="btn btn-default dropdown-toggle" data-toggle="dropdown"><span class="caret"></span>
200
+ <span class="sr-only"><?php _e('Toggle Dropdown', 'gmLang'); ?></span></button>
201
  <?php
202
  $rel_selected_show = 'rel-selected-show';
203
  $rel_selected_hide = 'rel-selected-hide';
204
  ?>
205
  <ul class="dropdown-menu" role="menu">
206
  <?php if(!$gmProcessor->mode){ ?>
207
+ <li class="<?php if(!$gmCore->caps['gmedia_edit_media']){
208
+ echo 'disabled';
209
+ } ?>"><a class="edit-mode-link" href="<?php echo $edit_mode_href; ?>" <?php echo $edit_mode_data; ?>><?php _e('Enter Edit Mode', 'gmLang'); ?></a>
210
+ </li>
211
+ <li class="<?php echo $rel_selected_show;
212
+ if(!$gmCore->caps['gmedia_edit_media']){
213
+ echo ' disabled';
214
+ } ?>">
215
+ <a href="#libModal" data-modal="batch_edit" data-action="gmedia_get_modal" class="gmedia-modal"><?php _e('Batch Edit', 'gmLang'); ?></a>
216
+ </li>
217
 
218
  <li class="divider"></li>
219
+ <li class="<?php echo $rel_selected_show;
220
+ if(!$gmCore->caps['gmedia_gallery_manage']){
221
+ echo ' disabled';
222
+ } ?>">
223
+ <a href="#libModal" data-modal="quick_gallery" data-action="gmedia_get_modal" class="gmedia-modal"><?php _e('Quick Gallery from Selected', 'gmLang'); ?></a>
224
+ </li>
225
+ <li class="<?php echo $rel_selected_show;
226
+ if(!$gmCore->caps['gmedia_terms']){
227
+ echo ' disabled';
228
+ } ?>">
229
+ <a href="#libModal" data-modal="assign_category" data-action="gmedia_get_modal" class="gmedia-modal"><?php _e('Assign Category...', 'gmLang'); ?></a>
230
+ </li>
231
+ <li class="<?php echo $rel_selected_show;
232
+ if(!$gmCore->caps['gmedia_terms']){
233
+ echo ' disabled';
234
+ } ?>">
235
+ <a href="#libModal" data-modal="assign_album" data-action="gmedia_get_modal" class="gmedia-modal"><?php _e('Move to Album...', 'gmLang'); ?></a>
236
+ </li>
237
+ <li class="<?php echo $rel_selected_show;
238
+ if(!$gmCore->caps['gmedia_terms']){
239
+ echo ' disabled';
240
+ } ?>"><a href="#libModal" data-modal="add_tags" data-action="gmedia_get_modal" class="gmedia-modal"><?php _e('Add Tags...', 'gmLang'); ?></a>
241
+ </li>
242
+ <li class="<?php echo $rel_selected_show;
243
+ if(!$gmCore->caps['gmedia_terms']){
244
+ echo ' disabled';
245
+ } ?>">
246
+ <a href="#libModal" data-modal="delete_tags" data-action="gmedia_get_modal" class="gmedia-modal"><?php _e('Delete Tags...', 'gmLang'); ?></a>
247
+ </li>
248
+ <li class="<?php echo $rel_selected_show;
249
+ if(!$gmCore->caps['gmedia_delete_media']){
250
+ echo ' disabled';
251
+ } ?>">
252
+ <a href="<?php echo wp_nonce_url($gmCore->get_admin_url(array('delete' => 'selected'), array('filter')), 'gmedia_delete') ?>" class="gmedia-delete" data-confirm="<?php _e("You are about to permanently delete the selected items.\n\r'Cancel' to stop, 'OK' to delete.", "gmLang"); ?>"><?php _e('Delete Selected Items', 'gmLang'); ?></a>
253
+ </li>
254
 
255
  <li class="divider <?php echo $rel_selected_show; ?>"></li>
256
+ <li class="<?php echo $rel_selected_show;
257
+ if(!$gmCore->caps['gmedia_edit_media']){
258
+ echo ' disabled';
259
+ } ?>">
260
+ <a href="<?php echo wp_nonce_url($gmCore->get_admin_url(array('update_meta' => 'selected'), array()), 'gmedia_update_meta') ?>" class="gmedia-update"><?php _e('Update Metadata in Database', 'gmLang'); ?></a>
261
+ </li>
262
 
263
  <li class="dropdown-header <?php echo $rel_selected_hide; ?>"><span><?php _e("Select items to see more actions", "gmLang"); ?></span></li>
264
  <?php } else{ ?>
265
  <li><a href="<?php echo $edit_mode_href; ?>"><?php _e('Exit Edit Mode', 'gmLang'); ?></a></li>
266
+ <?php
267
+ }
268
  do_action('gmedia_action_list');
269
  ?>
270
  </ul>
276
  ?>
277
  <form class="btn-group" id="gm-selected-btn" name="gm-selected-form" action="<?php echo add_query_arg(array('filter' => $filter_selected_arg), $url); ?>" method="post">
278
  <button type="submit" class="btn btn<?php echo ('selected' == $filter_selected)? '-success' : '-info' ?>"><?php printf(__('%s selected', 'gmLang'), '<span id="gm-selected-qty">' . count($gmProcessor->selected_items) . '</span>'); ?></button>
279
+ <button type="button" class="btn btn-info dropdown-toggle" data-toggle="dropdown"><span class="caret"></span>
280
+ <span class="sr-only"><?php _e('Toggle Dropdown', 'gmLang'); ?></span></button>
281
  <input type="hidden" id="gm-selected" data-userid="<?php echo $user_ID; ?>" data-key="library" name="selected_items" value="<?php echo implode(',', $gmProcessor->selected_items); ?>"/>
282
  <ul class="dropdown-menu" role="menu">
283
  <li><a id="gm-selected-show" href="#show"><?php
288
  }
289
  ?></a></li>
290
  <li><a id="gm-selected-clear" href="#clear"><?php _e('Clear selected items', 'gmLang'); ?></a></li>
291
+ <li class="<?php if(!$gmCore->caps['gmedia_gallery_manage']){
292
+ echo 'disabled';
293
+ } ?>">
294
+ <a href="#libModal" data-modal="quick_gallery" data-action="gmedia_get_modal" class="gmedia-modal"><?php _e('Quick Gallery from Selected', 'gmLang'); ?></a>
295
+ </li>
296
  </ul>
297
  </form>
298
 
303
  <div class="list-group" id="gm-list-table">
304
  <?php
305
  if(count($gmediaQuery)){
306
+ if($gmProcessor->mode && $gmCore->caps['gmedia_show_others_media'] && !$gmCore->caps['gmedia_edit_others_media']){
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
307
  ?>
308
+ <div class="alert alert-warning alert-dismissible" role="alert" style="margin-bottom:0">
309
+ <button type="button" class="close" data-dismiss="alert">
310
+ <span aria-hidden="true">&times;</span><span class="sr-only"><?php _e('Close', 'gmLang'); ?></span></button>
311
+ <strong><?php _e('Info:', 'gmLang'); ?></strong> <?php _e('You are not allowed to edit others media', 'gmLang'); ?>
312
+ </div>
313
+ <?php
314
+ }
315
+
316
+ foreach ($gmediaQuery as $item) {
317
+
318
+ $meta = $gmDB->get_metadata('gmedia', $item->ID);
319
+ $type = explode('/', $item->mime_type);
320
+ $item_url = $gmCore->upload['url'] . '/' . $gmGallery->options['folder'][$type[0]] . '/' . $item->gmuid;
321
+ $item_path = $gmCore->upload['path'] . '/' . $gmGallery->options['folder'][$type[0]] . '/' . $item->gmuid;
322
+
323
+ if(function_exists('exif_imagetype')){
324
+ $is_webimage = (('image' == $type[0]) && in_array(exif_imagetype($item_path), array(
325
+ IMAGETYPE_GIF,
326
+ IMAGETYPE_JPEG,
327
+ IMAGETYPE_PNG
328
+ )))? true : false;
329
+ } else{
330
+ $is_webimage = (('image' == $type[0]) && in_array($type[1], array('jpeg', 'png', 'gif')))? true : false;
331
+ }
332
+
333
+ $tags = $gmDB->get_the_gmedia_terms($item->ID, 'gmedia_tag');
334
+ $albs = $gmDB->get_the_gmedia_terms($item->ID, 'gmedia_album');
335
+ $cats = $gmDB->get_the_gmedia_terms($item->ID, 'gmedia_category');
336
+
337
+ $list_row_class = '';
338
+ if ('public' != $item->status) {
339
+ if('private' == $item->status){
340
+ $list_row_class = ' list-group-item-info';
341
+ } elseif('draft' == $item->status){
342
+ $list_row_class = ' list-group-item-warning';
343
+ }
344
+ }
345
+
346
+ ?>
347
+ <?php if (!$gmProcessor->mode){
348
+ $is_selected = in_array($item->ID, $gmProcessor->selected_items)? true : false; ?>
349
+ <div class="list-group-item d-row clearfix<?php echo ($is_selected? ' active' : '') . $list_row_class; ?>" id="list-item-<?php echo $item->ID; ?>" data-id="<?php echo $item->ID; ?>" data-type="<?php echo $type[0]; ?>">
350
  <div class="gmedia_id">#<?php echo $item->ID; ?></div>
351
  <label class="cb_media-object">
352
  <input name="doaction[]" type="checkbox"<?php echo $is_selected? ' checked="checked"' : ''; ?> data-type="<?php echo $type[0]; ?>" class="hidden" value="<?php echo $item->ID; ?>"/>
388
  }
389
  $terms_category = join(', ', $terms_category);
390
  } else{
391
+ $terms_category = sprintf('<a class="category" href="%s">%s</a>', esc_url(add_query_arg(array('cat' => 0), $url)), __('Uncategorized', 'gmLang'));
392
  }
393
  echo $terms_category;
394
  } ?>
409
  </div>
410
  <div class="col-md-6">
411
  <div class="media-meta">
412
+ <span class="label label-default"><?php _e('Status', 'gmLang'); ?>:</span> <?php echo $item->status; ?>
413
+ </div>
414
+ <div class="media-meta">
415
+ <span class="label label-default"><?php _e('Type', 'gmLang'); ?>:</span> <?php echo $item->mime_type; ?>
416
  </div>
417
  <?php if('image' == $type[0]){
418
  $_metadata = unserialize($meta['_metadata'][0]);
419
  ?>
420
  <div class="media-meta">
421
+ <span class="label label-default"><?php _e('Size', 'gmLang'); ?>
422
+ :</span> <?php echo $_metadata['original']['width'] . ' × ' . $_metadata['original']['height']; ?>
423
  </div>
424
  <?php } ?>
425
+ <div class="media-meta"><span class="label label-default"><?php _e('Filename', 'gmLang'); ?>:</span>
426
  <a href="<?php echo $item_url; ?>"><?php echo $item->gmuid; ?></a></div>
427
  <div class="media-meta">
428
+ <span class="label label-default"><?php _e('Author', 'gmLang'); ?>
429
+ :</span> <?php printf('<a class="gmedia-author" href="%s">%s</a>', esc_url(add_query_arg(array('author' => $item->author), $url)), get_user_option('display_name', $item->author)); ?>
430
  </div>
431
  <div class="media-meta"><span class="label label-default"><?php _e('Date', 'gmLang'); ?>:</span> <?php echo $item->date;
432
+ echo ' <small class="modified" title="' . __('Last Modified Date', 'gmLang') . '">' . (($item->modified != $item->date)? $item->modified : '') . '</small>';
433
  ?></div>
434
+ <div class="media-meta"><span class="label label-default"><?php _e('Link', 'gmLang'); ?>:</span>
435
  <?php if(!empty($item->link)){ ?>
436
  <a href="<?php echo $item->link; ?>"><?php echo $item->link; ?></a>
437
  <?php
438
  } else{
439
  echo '&#8212;';
440
  } ?></div>
441
+ <p class="media-meta" style="margin:5px 4px;">
442
+ <?php $media_action_links = array();
443
+ if(($gmCore->caps['gmedia_edit_media'] && ((int)$item->author == get_current_user_id())) || $gmCore->caps['gmedia_edit_others_media']){
444
+ $media_action_links[] = '<a href="' . admin_url("admin.php?page=GrandMedia&mode=edit&gmedia__in={$item->ID}") . '">' . __('Edit Data', 'gmLang') . '</a>';
445
+ }
446
+ if('image' == $type[0]){
447
+ if(($gmCore->caps['gmedia_edit_media'] && ((int)$item->author == get_current_user_id())) || $gmCore->caps['gmedia_edit_others_media']){
448
+ $media_action_links[] = '<a href="' . admin_url("admin.php?page=GrandMedia&gmediablank=image_editor&id={$item->ID}") . '" data-target="#gmeditModal" class="gmedit-modal">' . __('Edit Image', 'gmLang') . '</a>';
449
+ }
450
+ $media_action_links[] = '<a href="' . $gmCore->gm_get_media_image($item, 'original') . '" data-target="#previewModal" class="preview-modal">' . __('View Original', 'gmLang') . '</a>';
451
+
452
+ }
453
+ if(($gmCore->caps['gmedia_delete_media'] && ((int)$item->author == get_current_user_id())) || $gmCore->caps['gmedia_delete_others_media']){
454
+ $media_action_links[] = '<a class="text-danger" href="' . wp_nonce_url($gmCore->get_admin_url(array('delete' => $item->ID)), 'gmedia_delete') . '" data-confirm="' . sprintf(__("You are about to permanently delete %s file.\n\r'Cancel' to stop, 'OK' to delete.", "gmLang"), $item->gmuid) . '">' . __('Delete', 'gmLang') . '</a>';
455
+ $media_action_links[] = '<a class="text-danger" href="' . wp_nonce_url($gmCore->get_admin_url(array('delete' => $item->ID, 'save_original_file' => 1)), 'gmedia_delete') . '" data-confirm="' . sprintf(__("You are about to delete record from DB for %s file.\n\r'Cancel' to stop, 'OK' to delete.", "gmLang"), $item->gmuid) . '">' . __('Delete DB record (leave file on the server)', 'gmLang') . '</a>';
456
+ }
457
+ echo implode(' | ', $media_action_links);
458
+ ?>
459
+ </p>
460
  </div>
461
  </div>
462
  </div>
463
 
464
+ <?php } elseif($gmCore->caps['gmedia_edit_media']){ ?>
465
+ <?php if(((int)$item->author != $user_ID) && !$gmCore->caps['gmedia_edit_others_media']){ ?>
466
+ <div class="list-group-item row d-row" id="list-item-<?php echo $item->ID; ?>" data-id="<?php echo $item->ID; ?>" data-type="<?php echo $type[0]; ?>">
467
+ <div class="gmedia_id">#<?php echo $item->ID; ?></div>
468
+ <div class="li_media-object">
469
+ <span data-target="<?php echo $item_url; ?>" class="thumbnail">
470
+ <img class="gmedia-thumb" src="<?php echo $gmCore->gm_get_media_image($item, 'thumb'); ?>" alt=""/>
471
+ <?php if(('image' != $type[0]) && isset($meta['cover'][0]) && !empty($meta['cover'][0])){ ?>
472
+ <img class="gmedia-typethumb" src="<?php echo $gmCore->gm_get_media_image($item, 'thumb', false); ?>" alt=""/>
473
+ <?php } ?>
474
+ </span>
475
+ </div>
476
 
477
+ <div class="media-body">
478
+ <div class="col-md-6">
479
+ <p class="media-title"><?php echo esc_html($item->title); ?>&nbsp;</p>
480
+
481
+ <p class="media-caption"><?php echo esc_html($item->description); ?></p>
482
+
483
+ <p class="media-meta"><span class="label label-default"><?php _e('Album', 'gmLang'); ?>:</span>
484
+ <?php
485
+ if($albs){
486
+ $terms_album = array();
487
+ foreach($albs as $c){
488
+ $terms_album[] = sprintf('<span class="album">%s</span>', esc_html($c->name));
489
+ }
490
+ $terms_album = join(', ', $terms_album);
491
+ } else{
492
+ $terms_album = '<span class="album">&#8212;</span>';
493
+ }
494
+ echo $terms_album;
495
+
496
+ if($is_webimage){
497
+ ?>
498
+ <br/><span class="label label-default"><?php _e('Category', 'gmLang'); ?>:</span>
499
+ <?php
500
+ if($cats){
501
+ $terms_category = array();
502
+ foreach($cats as $c){
503
+ $terms_category[] = sprintf('<span class="category">%s</span>', esc_html($gmGallery->options['taxonomies']['gmedia_category'][$c->name]));
504
+ }
505
+ $terms_category = join(', ', $terms_category);
506
+ } else{
507
+ $terms_category = sprintf('<span class="category">%s</span>', __('Uncategorized'));
508
+ }
509
+ echo $terms_category;
510
+ } ?>
511
+ <br/><span class="label label-default"><?php _e('Tags', 'gmLang'); ?>:</span>
512
+ <?php
513
+ if($tags){
514
+ $terms_tag = array();
515
+ foreach($tags as $c){
516
+ $terms_tag[] = sprintf('<span class="tag">%s</span>', esc_html($c->name));
517
+ }
518
+ $terms_tag = join(', ', $terms_tag);
519
+ } else{
520
+ $terms_tag = '&#8212;';
521
+ }
522
+ echo $terms_tag;
523
+ ?>
524
+ </p>
525
+ </div>
526
+ <div class="col-md-6">
527
+ <div class="media-meta">
528
+ <span class="label label-default"><?php _e('Status', 'gmLang'); ?>:</span> <?php echo $item->status; ?>
529
+ </div>
530
+ <div class="media-meta">
531
+ <span class="label label-default"><?php _e('Type', 'gmLang'); ?>:</span> <?php echo $item->mime_type; ?>
532
+ </div>
533
+ <?php if('image' == $type[0]){
534
+ $_metadata = unserialize($meta['_metadata'][0]);
535
+ ?>
536
+ <div class="media-meta">
537
+ <span class="label label-default"><?php _e('Size', 'gmLang'); ?>
538
+ :</span> <?php echo $_metadata['original']['width'] . ' × ' . $_metadata['original']['height']; ?>
539
+ </div>
540
+ <?php } ?>
541
+ <div class="media-meta"><span class="label label-default"><?php _e('Filename', 'gmLang'); ?>:</span>
542
+ <a href="<?php echo $item_url; ?>"><?php echo $item->gmuid; ?></a></div>
543
+ <div class="media-meta">
544
+ <span class="label label-default"><?php _e('Author', 'gmLang'); ?>
545
+ :</span> <?php printf('<span class="gmedia-author">%s</a>', get_user_option('display_name', $item->author)); ?>
546
+ </div>
547
+ <div class="media-meta"><span class="label label-default"><?php _e('Date', 'gmLang'); ?>:</span> <?php echo $item->date;
548
+ echo ' <small class="modified" title="' . __('Last Modified Date', 'gmLang') . '">' . (($item->modified != $item->date)? $item->modified : '') . '</small>';
549
+ ?></div>
550
+ <div class="media-meta"><span class="label label-default"><?php _e('Link', 'gmLang'); ?>:</span>
551
+ <?php if(!empty($item->link)){ ?>
552
+ <a href="<?php echo $item->link; ?>"><?php echo $item->link; ?></a>
553
+ <?php
554
+ } else{
555
+ echo '&#8212;';
556
+ } ?></div>
557
+ <?php if('image' == $type[0]){ ?>
558
+ <p class="media-meta" style="margin:5px 4px;">
559
+ <a href="<?php echo $gmCore->gm_get_media_image($item, 'original'); ?>" data-target="#previewModal" class="preview-modal" title="<?php echo esc_attr($item->title); ?>">
560
+ <?php _e('View Original', 'gmLang'); ?>
561
+ </a>
562
+ </p>
563
+ <?php } ?>
564
+ </div>
565
+ </div>
566
+ </div>
567
+ <?php
568
+ continue;
569
+ }
570
+ ?>
571
  <form class="list-group-item row d-row edit-gmedia" id="list-item-<?php echo $item->ID; ?>" data-id="<?php echo $item->ID; ?>" data-type="<?php echo $type[0]; ?>" role="form">
572
  <div class="col-sm-4" style="max-width:350px;">
573
  <input name="ID" type="hidden" value="<?php echo $item->ID; ?>"/>
576
  <img class="gmedia-thumb" src="<?php echo $gmCore->gm_get_media_image($item, 'thumb'); ?>" alt=""/>
577
  </a>
578
  <p>
579
+ <a href="<?php echo admin_url("admin.php?page=GrandMedia&gmediablank=image_editor&id={$item->ID}"); ?>" data-target="#gmeditModal" class="btn btn-link btn-sm gmedit-modal">
580
  <?php _e('Edit Image', 'gmLang'); ?>
581
  </a> |
582
+ <a href="<?php echo $gmCore->gm_get_media_image($item, 'original'); ?>" data-target="#previewModal" class="btn btn-link btn-sm preview-modal">
583
  <?php _e('View Original', 'gmLang'); ?>
584
  </a>
585
+ <?php if(($gmCore->caps['gmedia_delete_media'] && ((int)$item->author == get_current_user_id())) || $gmCore->caps['gmedia_delete_others_media']){ ?>
586
+ |
587
+ <a class="btn btn-link btn-sm text-danger" href="<?php echo wp_nonce_url($gmCore->get_admin_url(array('delete' => $item->ID)), 'gmedia_delete') ?>" data-confirm="<?php printf(__("You are about to permanently delete %s file.\n\r'Cancel' to stop, 'OK' to delete.", "gmLang"), $item->gmuid); ?>">
588
+ <?php _e('Delete', 'gmLang'); ?>
589
+ </a>
590
+ <?php } ?>
591
  </p>
592
  <?php } else{ ?>
593
  <a href="<?php echo $item_url; ?>" data-target="#previewModal" class="thumbnail preview-modal" title="<?php echo esc_attr($item->title); ?>">
612
  <div class="row">
613
  <div class="form-group col-lg-6">
614
  <label><?php _e('Description', 'gmLang'); ?></label>
615
+ <?php if('false' == $gm_screen_options['library_edit_quicktags']){
616
+ echo "<textarea id='gm{$item->ID}_description' class='form-control input-sm' name='description' cols='20' rows='4' style='height:174px'>" . esc_html($item->description) . '</textarea>';
617
+ } else{
618
+ wp_editor(esc_html($item->description), "gm{$item->ID}_description", array(
619
+ 'editor_class' => 'form-control input-sm',
620
+ 'editor_height' => 140,
621
+ 'wpautop' => false,
622
+ 'media_buttons' => false,
623
+ 'textarea_name' => 'description',
624
+ 'textarea_rows' => '4',
625
+ 'tinymce' => false,
626
+ 'quicktags' => array('buttons' => apply_filters('gmedia_editor_quicktags', 'strong,em,link,ul,li,close'))
627
+ ));
628
+ } ?>
629
  </div>
630
  <div class="col-lg-6">
631
+ <?php if(('image' != $type[0])){ ?>
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
632
  <div class="form-group">
633
  <label><?php _e('Cover', 'gmLang'); ?></label>
634
+ <input name="meta[cover]" type="text" class="form-control input-sm gmedia-cover" value="<?php if(isset($meta['cover'][0])){
635
+ echo $meta['cover'][0];
636
+ } ?>" placeholder="<?php _e('Gmedia ID or Image URL', 'gmLang'); ?>"/>
637
  </div>
638
  <?php } ?>
639
+ <?php if($gmCore->caps['gmedia_terms']){ ?>
640
+ <?php if($is_webimage){ ?>
641
+ <?php
642
+ $cat_name = empty($cats)? 0 : reset($cats)->name;
643
+ $term_type = 'gmedia_category';
644
+ $gm_terms = $gmGallery->options['taxonomies'][$term_type];
645
+
646
+ $terms_category = '';
647
+ if(count($gm_terms)){
648
+ foreach($gm_terms as $term_name => $term_title){
649
+ $selected_option = ($cat_name === $term_name)? ' selected="selected"' : '';
650
+ $terms_category .= '<option' . $selected_option . ' value="' . $term_name . '">' . esc_html($term_title) . '</option>' . "\n";
651
+ }
652
+ }
653
+ ?>
654
+ <div class="form-group">
655
+ <label><?php _e('Category', 'gmLang'); ?> </label>
656
+ <select name="terms[gmedia_category]" class="gmedia_category form-control input-sm">
657
+ <option<?php echo $cat_name? '' : ' selected="selected"'; ?> value=""><?php _e('Uncategorized', 'gmLang'); ?></option>
658
+ <?php echo $terms_category; ?>
659
+ </select>
660
+ </div>
661
+ <?php } ?>
662
 
 
663
  <?php
664
+ $alb_id = empty($albs)? 0 : reset($albs)->term_id;
665
+ $term_type = 'gmedia_album';
666
+ $args = array();
667
+ if(!$gmCore->caps['gmedia_edit_others_media']){
668
+ $args = array('global' => array(0, $user_ID), 'orderby' => 'global_desc_name');
669
+ }
670
+ $gm_terms = $gmDB->get_terms($term_type, $args);
671
+
672
+ $terms_album = '';
673
+ $album_status = 'none';
674
+ if(count($gm_terms)){
675
+ foreach($gm_terms as $term){
676
+ $author_name = '';
677
+ if($term->global){
678
+ if($gmCore->caps['gmedia_edit_others_media']){
679
+ $author_name .= ' &nbsp; ' . sprintf(__('by %s', 'gmLang'), get_the_author_meta('display_name', $term->global));
680
+ }
681
+ } else{
682
+ $author_name .= ' &nbsp; (' . __('shared', 'gmLang') . ')';
683
+ }
684
+ if ('public' != $term->status) {
685
+ $author_name .= ' [' . $term->status . ']';
686
+ }
687
+
688
+ $selected_option = '';
689
+ if($alb_id == $term->term_id) {
690
+ $selected_option = ' selected="selected"';
691
+ $album_status = $term->status;
692
+ }
693
+ $terms_album .= '<option' . $selected_option . ' value="' . $term->term_id . '">' . esc_html($term->name) . $author_name . '</option>' . "\n";
694
+ }
695
+ }
696
+ ?>
697
+ <div class="form-group status-album bg-status-<?php echo $album_status; ?>">
698
+ <label><?php _e('Album ', 'gmLang'); ?></label>
699
+ <select name="terms[gmedia_album]" class="combobox_gmedia_album form-control input-sm" placeholder="<?php _e('Album Name...', 'gmLang'); ?>">
700
+ <option<?php echo $alb_id? '' : ' selected="selected"'; ?> value=""></option>
701
+ <?php echo $terms_album; ?>
702
+ </select>
703
+ </div>
704
+ <?php
705
+ if(!empty($tags)){
706
+ $terms_tag = array();
707
+ foreach($tags as $c){
708
+ $terms_tag[] = esc_html($c->name);
709
+ }
710
+ $terms_tag = join(', ', $terms_tag);
711
+ } else{
712
+ $terms_tag = '';
713
+ }
714
+ ?>
715
+ <div class="form-group">
716
+ <label><?php _e('Tags ', 'gmLang'); ?></label>
717
+ <textarea name="terms[gmedia_tag]" class="gmedia_tags_input form-control input-sm" rows="1" cols="50"><?php echo $terms_tag; ?></textarea>
718
+ </div>
719
+ <?php } ?>
720
  </div>
721
  </div>
722
  <div class="row">
723
  <div class="col-lg-6">
724
  <div class="form-group">
725
  <label><?php _e('Filename', 'gmLang'); ?></label>
726
+ <input name="filename" type="text" class="form-control input-sm gmedia-filename" <?php if((int)$item->author !== $user_ID){
727
+ echo 'readonly';
728
+ } ?> value="<?php echo pathinfo($item->gmuid, PATHINFO_FILENAME); ?>"/>
729
  </div>
730
  <div class="form-group">
731
  <label><?php _e('Date', 'gmLang'); ?></label>
736
  <span class="glyphicon glyphicon-calendar"></span></button></span>
737
  </div>
738
  </div>
739
+ <div class="form-group status-item bg-status-<?php echo $item->status; ?>">
740
+ <label><?php _e('Status', 'gmLang'); ?></label>
741
+ <select name="status" class="form-control input-sm">
742
+ <option <?php selected($item->status, 'public'); ?> value="public"><?php _e('Public', 'gmLang'); ?></option>
743
+ <option <?php selected($item->status, 'private'); ?> value="private"><?php _e('Private', 'gmLang'); ?></option>
744
+ <option <?php selected($item->status, 'draft'); ?> value="draft"><?php _e('Draft', 'gmLang'); ?></option>
745
+ </select>
746
+ </div>
747
  </div>
748
  <div class="col-lg-6">
749
+ <div class="form-group">
750
  <label><?php _e('Author', 'gmLang'); ?></label>
751
+ <?php $user_ids = $gmCore->caps['gmedia_edit_others_media']? $gmCore->get_editable_user_ids() : false;
752
+ if($user_ids){
753
+ wp_dropdown_users(array(
754
+ 'include' => $user_ids,
755
+ 'include_selected' => true,
756
+ 'name' => 'author',
757
+ 'selected' => $item->author,
758
+ 'class' => 'form-control',
759
+ 'multi' => true
760
+ ));
761
+ } else{
762
+ echo '<input type="hidden" name="author" value="' . $item->author . '"/>';
763
+ echo '<div>' . get_the_author_meta('display_name', $item->author) . '</div>';
764
+ }
765
  ?>
766
  </div>
767
  <div class="media-meta"><span class="label label-default"><?php _e('ID', 'gmLang') ?>:</span> <strong><?php echo $item->ID; ?></strong></div>
768
+ <div class="media-meta"><span class="label label-default"><?php _e('Type', 'gmLang') ?>
769
+ :</span> <?php echo $item->mime_type; ?></div>
770
+ <div class="media-meta"><span class="label label-default"><?php _e('File Size', 'gmLang') ?> :</span> <?php echo $gmCore->filesize($item_path); ?>
771
+ </div>
772
  <?php if('image' == $type[0]){
773
  $_metadata = unserialize($meta['_metadata'][0]); ?>
774
+ <div class="media-meta"><span class="label label-default"><?php _e('Dimensions', 'gmLang') ?>
775
+ :</span> <span title="<?php echo $_metadata['web']['width'] . ' × ' . $_metadata['web']['height'] . ', ' . $_metadata['thumb']['width'] . ' × ' . $_metadata['thumb']['height']; ?>"><?php echo $_metadata['original']['width'] . ' × ' . $_metadata['original']['height']; ?></span></div>
776
  <?php } ?>
777
+ <div class="media-meta"><span class="label label-default"><?php _e('Uploaded', 'gmLang') ?>:</span><?php echo $item->date; ?></div>
778
+ <div class="media-meta"><span class="label label-default"><?php _e('Last Edited', 'gmLang') ?>:</span>
779
+ <span class="gm-last-edited modified"><?php echo $item->modified; ?></span></div>
780
  </div>
781
  </div>
782
  <?php do_action('gmedia_edit_form'); ?>
787
  <script type="text/javascript">
788
  jQuery(function($){
789
  <?php if(!$gmProcessor->mode){ ?>
790
+ $('#gm-selected').on('change',function(){
791
  var val = $(this).val();
792
  $('.edit-mode-link').each(function(){
793
  if(val){
799
  }).trigger('change');
800
 
801
  <?php } else { ?>
802
+ <?php if($gmCore->caps['gmedia_terms']){ ?>
803
  $('.combobox_gmedia_album').selectize({
804
+ create: <?php echo $gmCore->caps['gmedia_album_manage']? 'true' : 'false' ?>,
805
  persist: false
806
  });
807
+ <?php } ?>
808
 
809
  var gmedia_date_temp;
810
+ $('.input-group.date').datetimepicker({useSeconds: true}).on('dp.show',function(){
811
  gmedia_date_temp = $('input', this).val();
812
+ }).on('dp.hide', function(){
813
  if(gmedia_date_temp != $('input', this).val()){
814
+ $('input', this).trigger('change');
815
  }
816
  });
817
+
818
+ var inp_filename = $('input.gmedia-filename').not('[readonly]');
819
+ if(inp_filename.length){
820
+ inp_filename.alphanum({
821
+ allow: '-_',
822
+ disallow: '',
823
+ allowSpace: false,
824
+ allowNumeric: true,
825
+ allowUpper: true,
826
+ allowLower: true,
827
+ allowCaseless: true,
828
+ allowLatin: true,
829
+ allowOtherCharSets: false,
830
+ forceUpper: false,
831
+ forceLower: false,
832
+ maxLength: NaN
833
+ });
834
+ }
835
 
836
  <?php } ?>
837
  });
838
  window.closeModal = function(id){
839
+ jQuery('#' + id).modal('hide');
840
  };
841
  </script>
842
  <?php } else{ ?>
843
  <div class="list-group-item">
844
  <div class="well well-lg text-center">
845
  <h4><?php _e('No items to show.', 'gmLang'); ?></h4>
846
+ <?php if($gmCore->caps['gmedia_upload']){ ?>
847
+ <p>
848
+ <a href="<?php echo admin_url('admin.php?page=GrandMedia_AddMedia') ?>" class="btn btn-success"><span class="glyphicon glyphicon-plus"></span> <?php _e('Add Media', 'gmLang'); ?>
849
+ </a></p>
850
+ <?php } ?>
851
  </div>
852
  </div>
853
  <?php } ?>
854
  </div>
855
 
856
+ <div class="panel-footer clearfix">
857
+ <?php echo $gmDB->query_pager(); ?>
858
+
859
+ <a href="#top" class="btn btn-default btn-sm"><span class="glyphicon glyphicon-arrow-up"></span> <?php _e('Back to top', 'gmLang'); ?></a>
860
+ </div>
861
+
862
  <?php
863
  wp_original_referer_field(true, 'previous');
864
  wp_nonce_field('GmediaGallery');
865
  ?>
866
  </div>
867
 
868
+ <div class="modal fade gmedia-modal" id="libModal" tabindex="-1" role="dialog" aria-hidden="true">
869
  <div class="modal-dialog"></div>
870
  </div>
871
+ <?php if($gmCore->caps['gmedia_edit_media']){ ?>
872
+ <div class="modal fade gmedia-modal" id="gmeditModal" tabindex="-1" role="dialog" aria-hidden="true">
873
+ <div class="modal-dialog modal-lg">
874
+ <div class="modal-content"></div>
875
+ </div>
876
+ </div>
877
+ <?php } ?>
878
  <div class="modal fade gmedia-modal" id="previewModal" tabindex="-1" role="dialog" aria-hidden="true">
879
  <div class="modal-dialog modal-lg">
880
  <div class="modal-content">
admin/import.php CHANGED
@@ -19,12 +19,11 @@ require_once(ABSPATH . 'wp-admin/includes/image.php');
19
  // HTTP headers for no cache etc
20
  nocache_headers();
21
 
22
- if(!current_user_can('upload_files')){
 
23
  wp_die(__('You do not have permission to upload files.'));
24
  }
25
 
26
- check_admin_referer('GmediaImport');
27
-
28
  // 10 minutes execution time
29
  @set_time_limit(10 * 60);
30
 
@@ -34,7 +33,7 @@ usleep(10);
34
  global $gmCore, $gmGallery;
35
 
36
  $import = $gmCore->_post('import');
37
- $terms = $gmCore->_post('terms');
38
 
39
  /**
40
  * @param $files
@@ -45,10 +44,10 @@ $terms = $gmCore->_post('terms');
45
  function gmedia_import_files($files, $terms, $move, $exists = 0){
46
  global $gmCore, $gmGallery;
47
 
48
- if (ob_get_level() == 0) {
49
  ob_start();
50
  }
51
- $eol = '</pre>'.PHP_EOL;
52
  $c = count($files);
53
  $i = 0;
54
  foreach($files as $file){
@@ -144,7 +143,7 @@ function gmedia_import_files($files, $terms, $move, $exists = 0){
144
  $editor = wp_get_image_editor($fileinfo['filepath_original']);
145
  if(is_wp_error($editor)){
146
  @unlink($fileinfo['filepath_original']);
147
- echo $prefix_ko . $fileinfo['basename']. " (wp_get_image_editor): ". $editor->get_error_message() . $eol;
148
  continue;
149
  }
150
 
@@ -154,14 +153,14 @@ function gmedia_import_files($files, $terms, $move, $exists = 0){
154
  $resized = $editor->resize($webimg['width'], $webimg['height'], $webimg['crop']);
155
  if(is_wp_error($resized)){
156
  @unlink($fileinfo['filepath_original']);
157
- echo $prefix_ko . $fileinfo['basename']. " (".$resized->get_error_code()." | editor->resize->webimage({$webimg['width']}, {$webimg['height']}, {$webimg['crop']})): ". $resized->get_error_message() . $eol;
158
  continue;
159
  }
160
 
161
  $saved = $editor->save($fileinfo['filepath']);
162
  if(is_wp_error($saved)){
163
  @unlink($fileinfo['filepath_original']);
164
- echo $prefix_ko . $fileinfo['basename']. " (".$saved->get_error_code()." | editor->save->webimage): ". $saved->get_error_message() . $eol;
165
  continue;
166
  }
167
  }
@@ -173,7 +172,7 @@ function gmedia_import_files($files, $terms, $move, $exists = 0){
173
  if(is_wp_error($resized)){
174
  @unlink($fileinfo['filepath']);
175
  @unlink($fileinfo['filepath_original']);
176
- echo $prefix_ko . $fileinfo['basename']. " (".$resized->get_error_code()." | editor->resize->thumb({$thumbimg['width']}, {$thumbimg['height']}, {$thumbimg['crop']})): ". $resized->get_error_message() . $eol;
177
  continue;
178
  }
179
 
@@ -181,7 +180,7 @@ function gmedia_import_files($files, $terms, $move, $exists = 0){
181
  if(is_wp_error($saved)){
182
  @unlink($fileinfo['filepath']);
183
  @unlink($fileinfo['filepath_original']);
184
- echo $prefix_ko . $fileinfo['basename'] . " (".$saved->get_error_code()." | editor->save->thumb): ". $saved->get_error_message() . $eol;
185
  continue;
186
  }
187
  } else{
@@ -190,11 +189,13 @@ function gmedia_import_files($files, $terms, $move, $exists = 0){
190
  $is_webimage = true;
191
  } else{
192
  @unlink($fileinfo['filepath']);
193
- echo $prefix_ko . $fileinfo['basename']. ": " . __("Could not read image size. Invalid image was deleted.", 'gmLang') . $eol;
194
  continue;
195
  }
196
  }
197
 
 
 
198
  // Write media data to DB
199
  // TODO Option to set title empty string or from metadata or from filename or both
200
  // use image exif/iptc data for title and caption defaults if possible
@@ -207,26 +208,52 @@ function gmedia_import_files($files, $terms, $move, $exists = 0){
207
  $description = $image_meta['caption'];
208
  }
209
  }
210
- if(!isset($title) || empty($title)){ $title = $fileinfo['title']; }
211
- if(!isset($description)){ $description = ''; }
212
- if(!isset($link)){ $link = ''; }
 
 
 
 
 
 
213
 
214
  $_terms = $terms;
 
 
 
 
 
 
 
 
 
 
 
 
 
215
  if(!$is_webimage){
216
  unset($_terms['gmedia_category']);
217
  }
218
 
219
  // Construct the media_data array
220
- $media_data = array('mime_type' => $fileinfo['mime_type'], 'gmuid' => $fileinfo['basename'], 'title' => $title, 'link' => $link, 'description' => $description, 'terms' => $_terms);
 
 
 
 
 
 
 
 
221
 
222
  unset($title, $description);
223
 
224
- global $gmDB;
225
  // Save the data
226
  $id = $gmDB->insert_gmedia($media_data);
227
  $gmDB->update_metadata($meta_type = 'gmedia', $id, $meta_key = '_metadata', $gmDB->generate_gmedia_metadata($id, $fileinfo));
228
 
229
- echo $prefix . $fileinfo['basename']. ': <span class="ok">' . sprintf(__('success (ID #%s)', 'gmLang'), $id) . '</span>' . $eol;
230
 
231
  if($move){
232
  @unlink($file);
@@ -234,162 +261,177 @@ function gmedia_import_files($files, $terms, $move, $exists = 0){
234
 
235
  }
236
 
237
- echo '<p><b>'.__('Category').':</b> '. (!empty($terms['gmedia_category'])? esc_html($gmGallery->options['taxonomies']['gmedia_category'][$terms['gmedia_category']]) : '-') . PHP_EOL;
238
- echo '<br /><b>'.__('Album').':</b> '. esc_html($terms['gmedia_album']) . PHP_EOL;
239
- echo '<br /><b>'.__('Tags').':</b> '. esc_html(str_replace(',', ', ', $terms['gmedia_tag'])) .'</p>' . PHP_EOL;
240
 
241
  wp_ob_end_flush_all();
242
  flush();
243
  }
244
 
245
- if (ob_get_level() == 0) {
246
  ob_start();
247
  }
248
- echo str_pad(' ',4096) . PHP_EOL;
249
  wp_ob_end_flush_all();
250
  flush();
251
  ?>
252
- <html>
253
- <style type="text/css">
254
- * {margin:0; padding:0;}
255
- pre { display:block; }
256
- p { padding: 10px 0; font-size: 14px; }
257
- .ok { color: darkgreen; }
258
- .ko { color: darkred; }
259
- </style>
260
- <body>
261
- <?php
262
- if('import-folder' == $import){
263
-
264
- $path = $gmCore->_post('path');
265
- echo '<h4 style="margin: 0 0 10px">'.__('Import Server Folder')." `$path`:</h4>" . PHP_EOL;
266
-
267
- if($path){
268
- $path = trim(urldecode($path),'/');
269
- if(!empty($path)) {
270
- $fullpath = ABSPATH.trailingslashit ( $path );
271
- $files = glob($fullpath.'?*.?*', GLOB_NOSORT);
272
- if(!empty($files)) {
273
- if((GMEDIA_UPLOAD_FOLDER == basename(dirname(dirname($path)))) || (GMEDIA_UPLOAD_FOLDER == basename(dirname($path)))){
274
- global $wpdb;
275
- $gmedias = $wpdb->get_col("SELECT gmuid FROM {$wpdb->prefix}gmedia");
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
276
  foreach($files as $i => $filepath){
277
- $gmuid = basename($filepath);
278
- if(in_array($gmuid, $gmedias)){
279
  unset($files[$i]);
280
  }
281
  }
282
- $move = false;
283
- $exists = false;
284
  } else{
285
- $move = $gmCore->_post('delete_source');
286
- $exists = 0;
287
  }
288
- gmedia_import_files($files, $terms, $move, $exists);
289
- } else {
290
- echo sprintf( __( 'Folder `%s` is empty', 'gmLang' ), $path ) . PHP_EOL;
291
  }
292
- } else {
293
- echo __( 'No folder chosen', 'gmLang' ) . PHP_EOL;
294
  }
295
- }
296
- } elseif('import-flagallery' == $import){
297
 
298
- echo '<h4 style="margin: 0 0 10px">'.__('Import from Flagallery plugin').":</h4>" . PHP_EOL;
299
 
300
- $gallery = $gmCore->_post('gallery');
301
- if(!empty($gallery)){
302
- global $wpdb, $gmDB;
303
 
304
- $album = empty($terms['gmedia_album'])? false : true;
305
- foreach($gallery as $gid){
306
- $flag_gallery = $wpdb->get_row($wpdb->prepare("SELECT gid, path, title, galdesc FROM `{$wpdb->prefix}flag_gallery` WHERE gid = %d", $gid), ARRAY_A);
307
- if(empty($flag_gallery))
308
- continue;
 
309
 
310
- if(!$album) {
311
- $terms['gmedia_album'] = $flag_gallery['title'];
312
- if(!$gmDB->term_exists($flag_gallery['title'], 'gmedia_album') ) {
313
- $term_id = $gmDB->insert_term( $flag_gallery['title'], 'gmedia_album', array('description' => htmlspecialchars_decode(stripslashes( $flag_gallery['galdesc'] ))) );
 
314
  }
315
- }
316
 
317
- $path = ABSPATH.trailingslashit($flag_gallery['path']);
318
 
319
- echo '<h5 style="margin: 10px 0 5px">'.sprintf( __( 'Import `%s` gallery', 'gmLang' ), $flag_gallery['title'] ).":</h5>" . PHP_EOL;
320
 
321
- $flag_pictures = $wpdb->get_results($wpdb->prepare("SELECT CONCAT('%s', filename) AS file, description, alttext AS title, link FROM `{$wpdb->prefix}flag_pictures` WHERE galleryid = %d", $path, $flag_gallery['gid']), ARRAY_A);
322
- if(empty($flag_pictures)){
323
- echo '<pre>'.__( 'gallery contains 0 images', 'gmLang' ).'</pre>';
324
- continue;
 
 
 
325
  }
326
- //echo '<pre>'.print_r($flag_pictures, true).'</pre>';
327
- gmedia_import_files($flag_pictures, $terms, false);
328
  }
329
- } else {
330
- echo __( 'No gallery chosen', 'gmLang' ) . PHP_EOL;
331
- }
332
- } elseif('import-nextgen' == $import){
333
 
334
- echo '<h4 style="margin: 0 0 10px">'.__('Import from NextGen plugin').":</h4>" . PHP_EOL;
335
 
336
- $gallery = $gmCore->_post('gallery');
337
- if(!empty($gallery)){
338
- global $wpdb, $gmDB;
339
 
340
- $album = empty($terms['gmedia_album'])? false : true;
341
- foreach($gallery as $gid){
342
- $ngg_gallery = $wpdb->get_row($wpdb->prepare("SELECT gid, path, title, galdesc FROM `{$wpdb->prefix}ngg_gallery` WHERE gid = %d", $gid), ARRAY_A);
343
- if(empty($ngg_gallery))
344
- continue;
 
345
 
346
- if(!$album) {
347
- $terms['gmedia_album'] = $ngg_gallery['title'];
348
- if(!$gmDB->term_exists($ngg_gallery['title'], 'gmedia_album') ) {
349
- $term_id = $gmDB->insert_term( $ngg_gallery['title'], 'gmedia_album', array('description' => htmlspecialchars_decode(stripslashes( $ngg_gallery['galdesc'] ))) );
 
350
  }
351
- }
352
 
353
- $path = ABSPATH.trailingslashit($ngg_gallery['path']);
354
 
355
- echo '<h5 style="margin: 10px 0 5px">'.sprintf( __( 'Import `%s` gallery', 'gmLang' ), $ngg_gallery['title'] ).":</h5>" . PHP_EOL;
356
 
357
- $ngg_pictures = $wpdb->get_results($wpdb->prepare("SELECT CONCAT('%s', filename) AS file, description, alttext AS title FROM `{$wpdb->prefix}ngg_pictures` WHERE galleryid = %d", $path, $ngg_gallery['gid']), ARRAY_A);
358
- if(empty($ngg_pictures)){
359
- echo '<pre>'.__( 'gallery contains 0 images', 'gmLang' ).'</pre>';
360
- continue;
 
 
361
  }
362
- gmedia_import_files($ngg_pictures, $terms, false);
 
363
  }
364
- } else {
365
- echo __( 'No gallery chosen', 'gmLang' ) . PHP_EOL;
366
- }
367
- } elseif('import-wpmedia' == $import){
368
- global $user_ID, $gmDB;
369
 
370
- echo '<h4 style="margin: 0 0 10px">'.__('Import from WP Media Library').":</h4>" . PHP_EOL;
371
 
372
- $wpMediaLib = $gmDB->get_wp_media_lib(array('filter'=>'selected', 'selected'=>$gmCore->_post('selected')));
373
 
374
- if(!empty($wpMediaLib)){
375
 
376
- $wp_media = array();
377
- foreach($wpMediaLib as $item){
378
- $wp_media[] = array(
379
- 'file' => get_attached_file($item->ID),
380
- 'title' => $item->post_title,
381
- 'description' => $item->post_content
382
- );
383
- }
384
- //echo '<pre>' . print_r($wp_media, true) . '</pre>';
385
- gmedia_import_files($wp_media, $terms, false);
386
 
387
- } else {
388
- echo __( 'No items chosen', 'gmLang' ) . PHP_EOL;
 
389
  }
390
- }
391
- ?>
392
- </body>
393
- </html>
394
  <?php
395
  wp_ob_end_flush_all();
19
  // HTTP headers for no cache etc
20
  nocache_headers();
21
 
22
+ check_admin_referer('GmediaImport');
23
+ if(!current_user_can('gmedia_import')){
24
  wp_die(__('You do not have permission to upload files.'));
25
  }
26
 
 
 
27
  // 10 minutes execution time
28
  @set_time_limit(10 * 60);
29
 
33
  global $gmCore, $gmGallery;
34
 
35
  $import = $gmCore->_post('import');
36
+ $terms = $gmCore->_post('terms', array());
37
 
38
  /**
39
  * @param $files
44
  function gmedia_import_files($files, $terms, $move, $exists = 0){
45
  global $gmCore, $gmGallery;
46
 
47
+ if(ob_get_level() == 0){
48
  ob_start();
49
  }
50
+ $eol = '</pre>' . PHP_EOL;
51
  $c = count($files);
52
  $i = 0;
53
  foreach($files as $file){
143
  $editor = wp_get_image_editor($fileinfo['filepath_original']);
144
  if(is_wp_error($editor)){
145
  @unlink($fileinfo['filepath_original']);
146
+ echo $prefix_ko . $fileinfo['basename'] . " (wp_get_image_editor): " . $editor->get_error_message() . $eol;
147
  continue;
148
  }
149
 
153
  $resized = $editor->resize($webimg['width'], $webimg['height'], $webimg['crop']);
154
  if(is_wp_error($resized)){
155
  @unlink($fileinfo['filepath_original']);
156
+ echo $prefix_ko . $fileinfo['basename'] . " (" . $resized->get_error_code() . " | editor->resize->webimage({$webimg['width']}, {$webimg['height']}, {$webimg['crop']})): " . $resized->get_error_message() . $eol;
157
  continue;
158
  }
159
 
160
  $saved = $editor->save($fileinfo['filepath']);
161
  if(is_wp_error($saved)){
162
  @unlink($fileinfo['filepath_original']);
163
+ echo $prefix_ko . $fileinfo['basename'] . " (" . $saved->get_error_code() . " | editor->save->webimage): " . $saved->get_error_message() . $eol;
164
  continue;
165
  }
166
  }
172
  if(is_wp_error($resized)){
173
  @unlink($fileinfo['filepath']);
174
  @unlink($fileinfo['filepath_original']);
175
+ echo $prefix_ko . $fileinfo['basename'] . " (" . $resized->get_error_code() . " | editor->resize->thumb({$thumbimg['width']}, {$thumbimg['height']}, {$thumbimg['crop']})): " . $resized->get_error_message() . $eol;
176
  continue;
177
  }
178
 
180
  if(is_wp_error($saved)){
181
  @unlink($fileinfo['filepath']);
182
  @unlink($fileinfo['filepath_original']);
183
+ echo $prefix_ko . $fileinfo['basename'] . " (" . $saved->get_error_code() . " | editor->save->thumb): " . $saved->get_error_message() . $eol;
184
  continue;
185
  }
186
  } else{
189
  $is_webimage = true;
190
  } else{
191
  @unlink($fileinfo['filepath']);
192
+ echo $prefix_ko . $fileinfo['basename'] . ": " . __("Could not read image size. Invalid image was deleted.", 'gmLang') . $eol;
193
  continue;
194
  }
195
  }
196
 
197
+ global $gmDB;
198
+
199
  // Write media data to DB
200
  // TODO Option to set title empty string or from metadata or from filename or both
201
  // use image exif/iptc data for title and caption defaults if possible
208
  $description = $image_meta['caption'];
209
  }
210
  }
211
+ if(!isset($title) || empty($title)){
212
+ $title = $fileinfo['title'];
213
+ }
214
+ if(!isset($description)){
215
+ $description = '';
216
+ }
217
+ if(!isset($link)){
218
+ $link = '';
219
+ }
220
 
221
  $_terms = $terms;
222
+
223
+ $gmedia_album = isset($_terms['gmedia_album'])? $_terms['gmedia_album'] : false;
224
+ if($gmedia_album && $this->is_digit($gmedia_album)){
225
+ $album = $gmDB->get_term($gmedia_album, 'gmedia_album');
226
+ if(empty($album) || is_wp_error($album)){
227
+ $status = 'public';
228
+ } else{
229
+ $status = $album->status;
230
+ }
231
+ } else{
232
+ $status = 'public';
233
+ }
234
+
235
  if(!$is_webimage){
236
  unset($_terms['gmedia_category']);
237
  }
238
 
239
  // Construct the media_data array
240
+ $media_data = array(
241
+ 'mime_type' => $fileinfo['mime_type'],
242
+ 'gmuid' => $fileinfo['basename'],
243
+ 'title' => $title,
244
+ 'link' => $link,
245
+ 'description' => $description,
246
+ 'status' => $status,
247
+ 'terms' => $_terms
248
+ );
249
 
250
  unset($title, $description);
251
 
 
252
  // Save the data
253
  $id = $gmDB->insert_gmedia($media_data);
254
  $gmDB->update_metadata($meta_type = 'gmedia', $id, $meta_key = '_metadata', $gmDB->generate_gmedia_metadata($id, $fileinfo));
255
 
256
+ echo $prefix . $fileinfo['basename'] . ': <span class="ok">' . sprintf(__('success (ID #%s)', 'gmLang'), $id) . '</span>' . $eol;
257
 
258
  if($move){
259
  @unlink($file);
261
 
262
  }
263
 
264
+ echo '<p><b>' . __('Category') . ':</b> ' . ((isset($terms['gmedia_category']) && !empty($terms['gmedia_category']))? esc_html($gmGallery->options['taxonomies']['gmedia_category'][$terms['gmedia_category']]) : '-') . PHP_EOL;
265
+ echo '<br /><b>' . __('Album') . ':</b> ' . ((isset($terms['gmedia_album']) && !empty($terms['gmedia_album']))? esc_html($terms['gmedia_album']) : '-') . PHP_EOL;
266
+ echo '<br /><b>' . __('Tags') . ':</b> ' . ((isset($terms['gmedia_tag']) && !empty($terms['gmedia_tag']))? esc_html(str_replace(',', ', ', $terms['gmedia_tag'])) : '-') . '</p>' . PHP_EOL;
267
 
268
  wp_ob_end_flush_all();
269
  flush();
270
  }
271
 
272
+ if(ob_get_level() == 0){
273
  ob_start();
274
  }
275
+ echo str_pad(' ', 4096) . PHP_EOL;
276
  wp_ob_end_flush_all();
277
  flush();
278
  ?>
279
+ <html>
280
+ <style type="text/css">
281
+ * { margin:0; padding:0; }
282
+ pre { display:block; }
283
+ p { padding:10px 0; font-size:14px; }
284
+ .ok { color:darkgreen; }
285
+ .ko { color:darkred; }
286
+ </style>
287
+ <body>
288
+ <?php
289
+ if('import-folder' == $import){
290
+
291
+ $path = $gmCore->_post('path');
292
+ echo '<h4 style="margin: 0 0 10px">' . __('Import Server Folder') . " `$path`:</h4>" . PHP_EOL;
293
+
294
+ if($path){
295
+ $path = trim(urldecode($path), '/');
296
+ if(!empty($path)){
297
+ $fullpath = ABSPATH . trailingslashit($path);
298
+ $files = glob($fullpath . '?*.?*', GLOB_NOSORT);
299
+ if(!empty($files)){
300
+ $allowed_ext = get_allowed_mime_types();
301
+ $allowed_ext = array_keys($allowed_ext);
302
+ $allowed_ext = implode('|', $allowed_ext);
303
+ $allowed_ext = explode('|', $allowed_ext);
304
+ if((GMEDIA_UPLOAD_FOLDER == basename(dirname(dirname($path)))) || (GMEDIA_UPLOAD_FOLDER == basename(dirname($path)))){
305
+ global $wpdb;
306
+ $gmedias = $wpdb->get_col("SELECT gmuid FROM {$wpdb->prefix}gmedia");
307
+ foreach($files as $i => $filepath){
308
+ $gmuid = basename($filepath);
309
+ if(in_array($gmuid, $gmedias)){
310
+ $fileinfo = $gmCore->fileinfo($gmuid, false);
311
+ if(!(('image' == $fileinfo['dirname']) && !file_exists($fileinfo['filepath']))){
312
+ unset($files[$i]);
313
+ }
314
+ }
315
+ }
316
+ $move = false;
317
+ $exists = false;
318
+ } else{
319
+ $move = $gmCore->_post('delete_source');
320
+ $exists = 0;
321
+ }
322
  foreach($files as $i => $filepath){
323
+ $ext = pathinfo($filepath, PATHINFO_EXTENSION);
324
+ if(!in_array($ext, $allowed_ext)){
325
  unset($files[$i]);
326
  }
327
  }
328
+ gmedia_import_files($files, $terms, $move, $exists);
 
329
  } else{
330
+ echo sprintf(__('Folder `%s` is empty', 'gmLang'), $path) . PHP_EOL;
 
331
  }
332
+ } else{
333
+ echo __('No folder chosen', 'gmLang') . PHP_EOL;
 
334
  }
 
 
335
  }
336
+ } elseif('import-flagallery' == $import){
 
337
 
338
+ echo '<h4 style="margin: 0 0 10px">' . __('Import from Flagallery plugin') . ":</h4>" . PHP_EOL;
339
 
340
+ $gallery = $gmCore->_post('gallery');
341
+ if(!empty($gallery)){
342
+ global $wpdb, $gmDB;
343
 
344
+ $album = (!isset($terms['gmedia_album']) || empty($terms['gmedia_album']))? false : true;
345
+ foreach($gallery as $gid){
346
+ $flag_gallery = $wpdb->get_row($wpdb->prepare("SELECT gid, path, title, galdesc FROM `{$wpdb->prefix}flag_gallery` WHERE gid = %d", $gid), ARRAY_A);
347
+ if(empty($flag_gallery)){
348
+ continue;
349
+ }
350
 
351
+ if(!$album){
352
+ $terms['gmedia_album'] = $flag_gallery['title'];
353
+ if(!$gmDB->term_exists($flag_gallery['title'], 'gmedia_album')){
354
+ $term_id = $gmDB->insert_term($flag_gallery['title'], 'gmedia_album', array('description' => htmlspecialchars_decode(stripslashes($flag_gallery['galdesc']))));
355
+ }
356
  }
 
357
 
358
+ $path = ABSPATH . trailingslashit($flag_gallery['path']);
359
 
360
+ echo '<h5 style="margin: 10px 0 5px">' . sprintf(__('Import `%s` gallery', 'gmLang'), $flag_gallery['title']) . ":</h5>" . PHP_EOL;
361
 
362
+ $flag_pictures = $wpdb->get_results($wpdb->prepare("SELECT CONCAT('%s', filename) AS file, description, alttext AS title, link FROM `{$wpdb->prefix}flag_pictures` WHERE galleryid = %d", $path, $flag_gallery['gid']), ARRAY_A);
363
+ if(empty($flag_pictures)){
364
+ echo '<pre>' . __('gallery contains 0 images', 'gmLang') . '</pre>';
365
+ continue;
366
+ }
367
+ //echo '<pre>'.print_r($flag_pictures, true).'</pre>';
368
+ gmedia_import_files($flag_pictures, $terms, false);
369
  }
370
+ } else{
371
+ echo __('No gallery chosen', 'gmLang') . PHP_EOL;
372
  }
373
+ } elseif('import-nextgen' == $import){
 
 
 
374
 
375
+ echo '<h4 style="margin: 0 0 10px">' . __('Import from NextGen plugin') . ":</h4>" . PHP_EOL;
376
 
377
+ $gallery = $gmCore->_post('gallery');
378
+ if(!empty($gallery)){
379
+ global $wpdb, $gmDB;
380
 
381
+ $album = (!isset($terms['gmedia_album']) || empty($terms['gmedia_album']))? false : true;
382
+ foreach($gallery as $gid){
383
+ $ngg_gallery = $wpdb->get_row($wpdb->prepare("SELECT gid, path, title, galdesc FROM `{$wpdb->prefix}ngg_gallery` WHERE gid = %d", $gid), ARRAY_A);
384
+ if(empty($ngg_gallery)){
385
+ continue;
386
+ }
387
 
388
+ if(!$album){
389
+ $terms['gmedia_album'] = $ngg_gallery['title'];
390
+ if(!$gmDB->term_exists($ngg_gallery['title'], 'gmedia_album')){
391
+ $term_id = $gmDB->insert_term($ngg_gallery['title'], 'gmedia_album', array('description' => htmlspecialchars_decode(stripslashes($ngg_gallery['galdesc']))));
392
+ }
393
  }
 
394
 
395
+ $path = ABSPATH . trailingslashit($ngg_gallery['path']);
396
 
397
+ echo '<h5 style="margin: 10px 0 5px">' . sprintf(__('Import `%s` gallery', 'gmLang'), $ngg_gallery['title']) . ":</h5>" . PHP_EOL;
398
 
399
+ $ngg_pictures = $wpdb->get_results($wpdb->prepare("SELECT CONCAT('%s', filename) AS file, description, alttext AS title FROM `{$wpdb->prefix}ngg_pictures` WHERE galleryid = %d", $path, $ngg_gallery['gid']), ARRAY_A);
400
+ if(empty($ngg_pictures)){
401
+ echo '<pre>' . __('gallery contains 0 images', 'gmLang') . '</pre>';
402
+ continue;
403
+ }
404
+ gmedia_import_files($ngg_pictures, $terms, false);
405
  }
406
+ } else{
407
+ echo __('No gallery chosen', 'gmLang') . PHP_EOL;
408
  }
409
+ } elseif('import-wpmedia' == $import){
410
+ global $user_ID, $gmDB;
 
 
 
411
 
412
+ echo '<h4 style="margin: 0 0 10px">' . __('Import from WP Media Library') . ":</h4>" . PHP_EOL;
413
 
414
+ $wpMediaLib = $gmDB->get_wp_media_lib(array('filter' => 'selected', 'selected' => $gmCore->_post('selected')));
415
 
416
+ if(!empty($wpMediaLib)){
417
 
418
+ $wp_media = array();
419
+ foreach($wpMediaLib as $item){
420
+ $wp_media[] = array(
421
+ 'file' => get_attached_file($item->ID),
422
+ 'title' => $item->post_title,
423
+ 'description' => $item->post_content
424
+ );
425
+ }
426
+ //echo '<pre>' . print_r($wp_media, true) . '</pre>';
427
+ gmedia_import_files($wp_media, $terms, false);
428
 
429
+ } else{
430
+ echo __('No items chosen', 'gmLang') . PHP_EOL;
431
+ }
432
  }
433
+ ?>
434
+ </body>
435
+ </html>
 
436
  <?php
437
  wp_ob_end_flush_all();
admin/js/grand-media.js CHANGED
@@ -8,7 +8,7 @@ jQuery(function($){
8
 
9
  GmediaSelect = {
10
  msg_selected: function(obj, global){
11
- var gm_cb = $('.'+obj+' input'),
12
  qty_v = gm_cb.length,
13
  sel_v = gm_cb.filter(':checked').length,
14
  c = $('#cb_global');
@@ -20,7 +20,9 @@ jQuery(function($){
20
  c.css('opacity', '1').prop('checked', false);
21
  }
22
 
23
- if(!$('#gm-selected').length){ return; }
 
 
24
 
25
  var sel = $('#gm-selected'),
26
  arr = sel.val().split(','),
@@ -45,7 +47,7 @@ jQuery(function($){
45
  }
46
 
47
  if(sel.data('userid')){
48
- var storedData = getStorage('gmedia_u' + sel.data('userid') + '_');
49
  storedData.set(sel.data('key'), arr);
50
  }
51
  $('#gm-selected-qty').text(arr.length);
@@ -62,18 +64,18 @@ jQuery(function($){
62
  sel.trigger('change');
63
  },
64
  chk_all: function(type, obj){
65
- $('.'+obj+' input').filter(function(){
66
  return type? $(this).data('type') == type : true;
67
  }).prop('checked', true).closest('div.list-group-item').addClass('active');
68
  },
69
  chk_none: function(type, obj){
70
- $('.'+obj+' input').filter(function(){
71
  return type? $(this).data('type') == type : true;
72
  }).prop('checked', false).closest('div.list-group-item').removeClass('active');
73
  },
74
  chk_toggle: function(type, obj){
75
  if(type){
76
- if($('.'+obj+' input:checked').filter(function(){
77
  return $(this).data('type') == type;
78
  }).length){
79
  GmediaSelect.chk_none(type, obj);
@@ -81,7 +83,7 @@ jQuery(function($){
81
  GmediaSelect.chk_all(type, obj);
82
  }
83
  } else{
84
- $('.'+obj+' input').each(function(){
85
  $(this).prop("checked", !$(this).prop("checked")).closest('div.list-group-item').toggleClass('active');
86
  });
87
  }
@@ -179,14 +181,17 @@ jQuery(function($){
179
  },
180
  init: function(){
181
  $('#toplevel_page_GrandMedia').addClass('current').removeClass('wp-not-current-submenu');
 
 
 
182
 
183
  /*
184
- $(document).ajaxStart(function(){
185
- $('body').addClass('gmedia-busy');
186
- }).ajaxStop(function(){
187
- $('body').removeClass('gmedia-busy');
188
- });
189
- */
190
 
191
  $('[data-confirm]').click(function(){
192
  return GmediaFunction.confirm($(this).data('confirm'));
@@ -218,7 +223,7 @@ jQuery(function($){
218
  $('.modal-content', modal_div).html(
219
  $('<iframe />', {
220
  name: 'gmeditFrame',
221
- id: 'gmeditFrame',
222
  width: '100%',
223
  height: '500',
224
  src: $(this).attr('href')
@@ -239,7 +244,7 @@ jQuery(function($){
239
  $('.modal-body', modal_div).html(
240
  $('<iframe />', {
241
  name: 'previewFrame',
242
- id: 'previewFrame',
243
  width: '100%',
244
  src: $(this).attr('href'),
245
  load: function(){
@@ -263,8 +268,13 @@ jQuery(function($){
263
  };
264
  $.post(ajaxurl, post_data, function(data, textStatus, jqXHR){
265
  console.log(data);
266
- var id = data.ID;
267
- $('#list-item-'+id).find('.modified').text(data.modified);
 
 
 
 
 
268
  $('body').removeClass('gmedia-busy');
269
  });
270
  });
@@ -285,7 +295,7 @@ jQuery(function($){
285
  $('#importModal').modal({
286
  backdrop: 'static',
287
  show: true
288
- }).on('shown.bs.modal', function(){
289
  $('#import_form').submit();
290
  }).on('hidden.bs.modal', function(){
291
  $('#import-done').button('reset').prop('disabled', true);
@@ -297,7 +307,7 @@ jQuery(function($){
297
  e.preventDefault();
298
  $('body').addClass('gmedia-busy');
299
  var module = $(this).data('module');
300
- $('.module_install').filter('[data-module="'+module+'"]').button('loading');
301
  var post_data = {
302
  action: 'gmedia_module_install', download: $(this).attr('href'), module: module, _wpnonce: $('#_wpnonce').val()
303
  };
@@ -317,46 +327,46 @@ jQuery(function($){
317
  });
318
 
319
 
320
- function getStorage(key_prefix){
321
  // use document.cookie:
322
  return {
323
  set: function(id, data){
324
- document.cookie = key_prefix + id + '=' + encodeURIComponent(data);
325
  },
326
  get: function(id, data){
327
  var cookies = document.cookie, parsed = {};
328
  cookies.replace(/([^=]+)=([^;]*);?\s*/g, function(whole, key, value){
329
  parsed[key] = decodeURIComponent(value);
330
  });
331
- return parsed[key_prefix + id];
332
  }
333
  };
334
  }
335
 
336
  /*
337
- function gmHashCode(str){
338
- var l = str.length,
339
- hash = 5381 * l * (str.charCodeAt(0) + l);
340
- for(var i = 0; i < str.length; i++){
341
- hash += Math.floor((str.charCodeAt(i) + i + 0.33) / (str.charCodeAt(l - i - 1) + l) + (str.charCodeAt(i) + l) * (str.charCodeAt(l - i - 1) + i + 0.33));
342
- }
343
- return hash;
344
- }
345
- function gmCreateKey(site, lic, uuid){
346
- if(!lic){
347
- lic = '0:lk';
348
- }
349
- if(!uuid){
350
- uuid = 'xyxx-xxyx-xxxy';
351
- }
352
- var d = gmHashCode((site + ':' + lic).toLowerCase());
353
- var p = d;
354
- uuid = uuid.replace(/[xy]/g, function(c){
355
- var r = d % 16 | 0, v = c == 'x'? r : (r & 0x7 | 0x8);
356
- d = Math.floor(d * 15 / 16);
357
- return v.toString(16);
358
- });
359
- var key = p + ': ' + lic + '-' + uuid;
360
- return key.toLowerCase();
361
- }
362
- */
8
 
9
  GmediaSelect = {
10
  msg_selected: function(obj, global){
11
+ var gm_cb = $('.' + obj + ' input'),
12
  qty_v = gm_cb.length,
13
  sel_v = gm_cb.filter(':checked').length,
14
  c = $('#cb_global');
20
  c.css('opacity', '1').prop('checked', false);
21
  }
22
 
23
+ if(!$('#gm-selected').length){
24
+ return;
25
+ }
26
 
27
  var sel = $('#gm-selected'),
28
  arr = sel.val().split(','),
47
  }
48
 
49
  if(sel.data('userid')){
50
+ var storedData = getStorage('gmuser_' + sel.data('userid') + '_');
51
  storedData.set(sel.data('key'), arr);
52
  }
53
  $('#gm-selected-qty').text(arr.length);
64
  sel.trigger('change');
65
  },
66
  chk_all: function(type, obj){
67
+ $('.' + obj + ' input').filter(function(){
68
  return type? $(this).data('type') == type : true;
69
  }).prop('checked', true).closest('div.list-group-item').addClass('active');
70
  },
71
  chk_none: function(type, obj){
72
+ $('.' + obj + ' input').filter(function(){
73
  return type? $(this).data('type') == type : true;
74
  }).prop('checked', false).closest('div.list-group-item').removeClass('active');
75
  },
76
  chk_toggle: function(type, obj){
77
  if(type){
78
+ if($('.' + obj + ' input:checked').filter(function(){
79
  return $(this).data('type') == type;
80
  }).length){
81
  GmediaSelect.chk_none(type, obj);
83
  GmediaSelect.chk_all(type, obj);
84
  }
85
  } else{
86
+ $('.' + obj + ' input').each(function(){
87
  $(this).prop("checked", !$(this).prop("checked")).closest('div.list-group-item').toggleClass('active');
88
  });
89
  }
181
  },
182
  init: function(){
183
  $('#toplevel_page_GrandMedia').addClass('current').removeClass('wp-not-current-submenu');
184
+ if(!("ontouchstart" in document.documentElement)){
185
+ $('html').addClass('no-touch');
186
+ }
187
 
188
  /*
189
+ $(document).ajaxStart(function(){
190
+ $('body').addClass('gmedia-busy');
191
+ }).ajaxStop(function(){
192
+ $('body').removeClass('gmedia-busy');
193
+ });
194
+ */
195
 
196
  $('[data-confirm]').click(function(){
197
  return GmediaFunction.confirm($(this).data('confirm'));
223
  $('.modal-content', modal_div).html(
224
  $('<iframe />', {
225
  name: 'gmeditFrame',
226
+ id: 'gmeditFrame',
227
  width: '100%',
228
  height: '500',
229
  src: $(this).attr('href')
244
  $('.modal-body', modal_div).html(
245
  $('<iframe />', {
246
  name: 'previewFrame',
247
+ id: 'previewFrame',
248
  width: '100%',
249
  src: $(this).attr('href'),
250
  load: function(){
268
  };
269
  $.post(ajaxurl, post_data, function(data, textStatus, jqXHR){
270
  console.log(data);
271
+ var item = $('#list-item-' + data.ID);
272
+ item.find('.modified').text(data.modified);
273
+ item.find('.status-album').attr('class', 'form-group status-album bg-status-' + data.album_status);
274
+ item.find('.status-item').attr('class', 'form-group status-item bg-status-' + data.status);
275
+ if(data.tags){
276
+ item.find('.gmedia_tags_input').val(data.tags);
277
+ }
278
  $('body').removeClass('gmedia-busy');
279
  });
280
  });
295
  $('#importModal').modal({
296
  backdrop: 'static',
297
  show: true
298
+ }).on('shown.bs.modal',function(){
299
  $('#import_form').submit();
300
  }).on('hidden.bs.modal', function(){
301
  $('#import-done').button('reset').prop('disabled', true);
307
  e.preventDefault();
308
  $('body').addClass('gmedia-busy');
309
  var module = $(this).data('module');
310
+ $('.module_install').filter('[data-module="' + module + '"]').button('loading');
311
  var post_data = {
312
  action: 'gmedia_module_install', download: $(this).attr('href'), module: module, _wpnonce: $('#_wpnonce').val()
313
  };
327
  });
328
 
329
 
330
+ function getStorage(keyPprefix){
331
  // use document.cookie:
332
  return {
333
  set: function(id, data){
334
+ document.cookie = keyPprefix + id + '=' + encodeURIComponent(data);
335
  },
336
  get: function(id, data){
337
  var cookies = document.cookie, parsed = {};
338
  cookies.replace(/([^=]+)=([^;]*);?\s*/g, function(whole, key, value){
339
  parsed[key] = decodeURIComponent(value);
340
  });
341
+ return parsed[keyPprefix + id];
342
  }
343
  };
344
  }
345
 
346
  /*
347
+ function gmHashCode(str){
348
+ var l = str.length,
349
+ hash = 5381 * l * (str.charCodeAt(0) + l);
350
+ for(var i = 0; i < str.length; i++){
351
+ hash += Math.floor((str.charCodeAt(i) + i + 0.33) / (str.charCodeAt(l - i - 1) + l) + (str.charCodeAt(i) + l) * (str.charCodeAt(l - i - 1) + i + 0.33));
352
+ }
353
+ return hash;
354
+ }
355
+ function gmCreateKey(site, lic, uuid){
356
+ if(!lic){
357
+ lic = '0:lk';
358
+ }
359
+ if(!uuid){
360
+ uuid = 'xyxx-xxyx-xxxy';
361
+ }
362
+ var d = gmHashCode((site + ':' + lic).toLowerCase());
363
+ var p = d;
364
+ uuid = uuid.replace(/[xy]/g, function(c){
365
+ var r = d % 16 | 0, v = c == 'x'? r : (r & 0x7 | 0x8);
366
+ d = Math.floor(d * 15 / 16);
367
+ return v.toString(16);
368
+ });
369
+ var key = p + ': ' + lic + '-' + uuid;
370
+ return key.toLowerCase();
371
+ }
372
+ */
admin/modules.php CHANGED
@@ -25,7 +25,7 @@ function gmediaModules(){
25
  );
26
  }
27
  }
28
- if(($upload_modules = glob($gmCore->upload['path'].'/'.$gmGallery->options['folder']['module'].'/*', GLOB_ONLYDIR | GLOB_NOSORT))){
29
  foreach($upload_modules as $path){
30
  $mfold = basename($path);
31
  $modules[$mfold] = array(
@@ -57,133 +57,147 @@ function gmediaModules(){
57
  }
58
 
59
  ?>
60
- <div id="gmedia_modules">
61
- <div class="panel panel-default">
62
- <div class="panel-heading clearfix">
63
- <a href="#installModuleModal" class="btn btn-primary pull-right" data-toggle="modal"><?php _e('Install Module ZIP'); ?></a>
64
- <h3 class="panel-title"><?php _e('Installed Modules', 'gmLang'); ?></h3>
65
- </div>
66
- <div class="panel-body" id="gmedia-msg-panel"></div>
67
- <div class="panel-body">
68
- <?php
69
- // installed modules
70
- if(!empty($modules)){
71
- foreach($modules as $m){
72
- /**
73
- * @var $place
74
- * @var $module_name
75
- * @var $module_url
76
- * @var $module_path
77
- */
78
- extract($m);
79
-
80
- // todo: get broken modules folders and delete them with files in modules root
81
- if(!file_exists($module_path . '/index.php')){
82
- continue;
83
- }
84
 
85
- $module_info = array();
86
- include($module_path . '/index.php');
87
- if(empty($module_info)){
88
- continue;
89
- }
 
 
 
 
 
 
 
 
 
 
90
 
91
- $m = isset($xml_modules[$module_name])? array_merge($module_info, $xml_modules[$module_name]) : $module_info;
92
- $mclass = ' module-'.$m['type'].' module-'.$m['status'];
 
 
93
 
94
- $update_button = '';
95
- if(isset($xml_modules[$module_name])){
96
- if(version_compare((float)$xml_modules[$module_name]['version'], (float)$module_info['version'], '>')){
97
- $update_button = '<a class="btn btn-warning module_install" data-module="'.$module_name.'" data-loading-text="'.__('Loading...', 'gmLang').'" href="'.esc_url($xml_modules[$module_name]['download']).'">'.__('Update Module', 'gmLang')." (v{$xml_modules[$module_name]['version']})</a>";
98
- $mclass .= ' module-update';
99
- } else{
100
- unset($xml_modules[$module_name]);
101
  }
102
- }
103
- ?>
104
- <div class="media<?php echo $mclass; ?>">
105
- <div class="thumbnail pull-left">
106
- <img class="media-object" src="<?php echo $module_url.'/screenshot.png'; ?>" alt="<?php echo esc_attr($m['title']); ?>" width="320" height="240"/>
107
- </div>
108
- <div class="media-body" style="margin-left:340px;">
109
- <h4 class="media-heading"><?php echo $m['title']; ?></h4>
110
- <p class="version"><?php echo __('Version', 'gmLang') . ': ' . $module_info['version']; ?></p>
111
- <div class="description"><?php echo str_replace("\n", '<br />', (string) $m['description']); ?></div>
112
- <hr />
113
- <p class="buttons">
114
- <?php if(!empty($m['demo']) && $m['demo'] != '#'){ ?>
115
- <a class="btn btn-default" target="_blank" href="<?php echo $m['demo']; ?>"><?php _e('View Demo', 'gmLang') ?></a>
116
- <?php } ?>
117
- <a class="btn btn-success" href="<?php echo $gmCore->get_admin_url(array('page'=>'GrandMedia_Galleries','gallery_module'=>$module_name), array(), true); ?>"><?php _e('Create Gallery', 'gmLang'); ?></a>
118
- <?php echo $update_button; ?>
119
- </p>
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
120
  </div>
121
- </div>
122
- <?php
123
  }
124
- }
125
- ?>
126
  </div>
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
127
  </div>
128
 
129
- <?php if(!empty($xml_modules)){ ?>
130
- <div class="panel panel-default">
131
- <div class="panel-heading clearfix">
132
- <h3 class="panel-title"><?php _e('Not Installed Modules', 'gmLang'); ?></h3>
133
- </div>
134
- <div class="panel-body" id="gmedia-msg-panel"></div>
135
- <div class="panel-body">
136
- <?php
137
- $xml_dirpath = dirname($gmGallery->options['modules_xml']);
138
- foreach($xml_modules as $m){
139
- if(empty($m)){
140
- continue;
141
- }
142
- $mclass = ' module-'.$m['type'].' module-'.$m['status'];
143
- ?>
144
- <div class="media<?php echo $mclass; ?>">
145
- <div class="thumbnail pull-left">
146
- <img class="media-object" src="<?php echo $xml_dirpath.'/'.$m['name']; ?>.png" alt="<?php echo esc_attr($m['title']); ?>" width="320" height="240"/>
147
  </div>
148
- <div class="media-body" style="margin-left:340px;">
149
- <h4 class="media-heading"><?php echo $m['title']; ?></h4>
150
- <p class="version"><?php echo __('Version', 'gmLang') . ': ' . $m['version']; ?></p>
151
- <div class="description"><?php echo str_replace("\n", '<br />', (string) $m['description']); ?></div>
152
- <hr />
153
- <p class="buttons">
154
- <?php if(!empty($m['demo']) && $m['demo'] != '#'){ ?>
155
- <a class="btn btn-default" target="_blank" href="<?php echo $m['demo']; ?>"><?php _e('View Demo', 'gmLang') ?></a>
156
- <?php } ?>
157
- <a class="btn btn-primary module_install" data-module="<?php echo $m['name']; ?>" data-loading-text="<?php _e('Loading...', 'gmLang'); ?>" href="<?php echo $m['download']; ?>"><?php _e('Install Module', 'gmLang'); ?></a>
158
- </p>
159
  </div>
160
- </div>
161
- <?php } ?>
 
 
 
 
162
  </div>
163
- </div>
164
  <?php } ?>
165
- </div>
166
- <!-- Modal -->
167
- <div class="modal fade gmedia-modal" id="installModuleModal" tabindex="-1" role="dialog" aria-hidden="true">
168
- <div class="modal-dialog">
169
- <form class="modal-content" method="post" enctype="multipart/form-data" action="<?php echo $url; ?>">
170
- <div class="modal-header">
171
- <button type="button" class="close" data-dismiss="modal" aria-hidden="true">&times;</button>
172
- <h4 class="modal-title"><?php _e('Install a plugin in .zip format'); ?></h4>
173
- </div>
174
- <div class="modal-body">
175
- <p class="install-help"><?php _e('If you have a module in a .zip format, you may install it by uploading it here.'); ?></p>
176
- <?php wp_nonce_field( 'GmediaModule'); ?>
177
- <label class="screen-reader-text" for="modulezip"><?php _e('Module zip file'); ?></label>
178
- <input type="file" id="modulezip" name="modulezip" />
179
- </div>
180
- <div class="modal-footer">
181
- <button type="button" class="btn btn-default" data-dismiss="modal"><?php _e('Cancel', 'gmLang'); ?></button>
182
- <button type="submit" class="btn btn-primary"><?php _e('Install', 'gmLang'); ?></button>
183
- </div>
184
- </form>
185
- </div>
186
- </div>
187
  <?php
188
  }
189
 
25
  );
26
  }
27
  }
28
+ if(($upload_modules = glob($gmCore->upload['path'] . '/' . $gmGallery->options['folder']['module'] . '/*', GLOB_ONLYDIR | GLOB_NOSORT))){
29
  foreach($upload_modules as $path){
30
  $mfold = basename($path);
31
  $modules[$mfold] = array(
57
  }
58
 
59
  ?>
60
+ <div id="gmedia_modules">
61
+ <div class="panel panel-default">
62
+ <div class="panel-heading clearfix">
63
+ <a href="#installModuleModal" class="btn btn-primary pull-right<?php if(!$gmCore->caps['gmedia_module_manage']){
64
+ echo ' disabled';
65
+ } ?>" data-toggle="modal"><?php _e('Install Module ZIP'); ?></a>
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
66
 
67
+ <h3 class="panel-title"><?php _e('Installed Modules', 'gmLang'); ?></h3>
68
+ </div>
69
+ <div class="panel-body" id="gmedia-msg-panel"></div>
70
+ <div class="panel-body">
71
+ <?php
72
+ // installed modules
73
+ if(!empty($modules)){
74
+ foreach($modules as $m){
75
+ /**
76
+ * @var $place
77
+ * @var $module_name
78
+ * @var $module_url
79
+ * @var $module_path
80
+ */
81
+ extract($m);
82
 
83
+ // todo: get broken modules folders and delete them with files in modules root
84
+ if(!file_exists($module_path . '/index.php')){
85
+ continue;
86
+ }
87
 
88
+ $module_info = array();
89
+ include($module_path . '/index.php');
90
+ if(empty($module_info)){
91
+ continue;
 
 
 
92
  }
93
+
94
+ $m = isset($xml_modules[$module_name])? array_merge($module_info, $xml_modules[$module_name]) : $module_info;
95
+ $mclass = ' module-' . $m['type'] . ' module-' . $m['status'];
96
+
97
+ $update_button = '';
98
+ if(isset($xml_modules[$module_name])){
99
+ if(version_compare((float)$xml_modules[$module_name]['version'], (float)$module_info['version'], '>')){
100
+ $update_button = '<a class="btn btn-warning module_install" data-module="' . $module_name . '" data-loading-text="' . __('Loading...', 'gmLang') . '" href="' . esc_url($xml_modules[$module_name]['download']) . '">' . __('Update Module', 'gmLang') . " (v{$xml_modules[$module_name]['version']})</a>";
101
+ $mclass .= ' module-update';
102
+ } else{
103
+ unset($xml_modules[$module_name]);
104
+ }
105
+ }
106
+ ?>
107
+ <div class="media<?php echo $mclass; ?>">
108
+ <div class="thumbnail pull-left">
109
+ <img class="media-object" src="<?php echo $module_url . '/screenshot.png'; ?>" alt="<?php echo esc_attr($m['title']); ?>" width="320" height="240"/>
110
+ </div>
111
+ <div class="media-body" style="margin-left:340px;">
112
+ <h4 class="media-heading"><?php echo $m['title']; ?></h4>
113
+
114
+ <p class="version"><?php echo __('Version', 'gmLang') . ': ' . $module_info['version']; ?></p>
115
+
116
+ <div class="description"><?php echo str_replace("\n", '<br />', (string)$m['description']); ?></div>
117
+ <hr/>
118
+ <p class="buttons">
119
+ <?php if(!empty($m['demo']) && $m['demo'] != '#'){ ?>
120
+ <a class="btn btn-default" target="_blank" href="<?php echo $m['demo']; ?>"><?php _e('View Demo', 'gmLang') ?></a>
121
+ <?php } ?>
122
+ <a class="btn btn-success" href="<?php echo $gmCore->get_admin_url(array(
123
+ 'page' => 'GrandMedia_Galleries',
124
+ 'gallery_module' => $module_name
125
+ ), array(), true); ?>"><?php _e('Create Gallery', 'gmLang'); ?></a>
126
+ <?php echo $update_button; ?>
127
+ </p>
128
+ </div>
129
  </div>
130
+ <?php
131
+ }
132
  }
133
+ ?>
134
+ </div>
135
  </div>
136
+
137
+ <?php if(!empty($xml_modules)){ ?>
138
+ <div class="panel panel-default">
139
+ <div class="panel-heading clearfix">
140
+ <h3 class="panel-title"><?php _e('Not Installed Modules', 'gmLang'); ?></h3>
141
+ </div>
142
+ <div class="panel-body" id="gmedia-msg-panel"></div>
143
+ <div class="panel-body">
144
+ <?php
145
+ $xml_dirpath = dirname($gmGallery->options['modules_xml']);
146
+ foreach($xml_modules as $m){
147
+ if(empty($m)){
148
+ continue;
149
+ }
150
+ $mclass = ' module-' . $m['type'] . ' module-' . $m['status'];
151
+ ?>
152
+ <div class="media<?php echo $mclass; ?>">
153
+ <div class="thumbnail pull-left">
154
+ <img class="media-object" src="<?php echo $xml_dirpath . '/' . $m['name']; ?>.png" alt="<?php echo esc_attr($m['title']); ?>" width="320" height="240"/>
155
+ </div>
156
+ <div class="media-body" style="margin-left:340px;">
157
+ <h4 class="media-heading"><?php echo $m['title']; ?></h4>
158
+
159
+ <p class="version"><?php echo __('Version', 'gmLang') . ': ' . $m['version']; ?></p>
160
+
161
+ <div class="description"><?php echo str_replace("\n", '<br />', (string)$m['description']); ?></div>
162
+ <hr/>
163
+ <p class="buttons">
164
+ <?php if(!empty($m['demo']) && $m['demo'] != '#'){ ?>
165
+ <a class="btn btn-default" target="_blank" href="<?php echo $m['demo']; ?>"><?php _e('View Demo', 'gmLang') ?></a>
166
+ <?php } ?>
167
+ <a class="btn btn-primary <?php echo $gmCore->caps['gmedia_module_manage']? 'module_install' : 'disabled'; ?>" data-module="<?php echo $m['name']; ?>" data-loading-text="<?php _e('Loading...', 'gmLang'); ?>" href="<?php echo $m['download']; ?>"><?php _e('Install Module', 'gmLang'); ?></a>
168
+ </p>
169
+ </div>
170
+ </div>
171
+ <?php } ?>
172
+ </div>
173
+ </div>
174
+ <?php } ?>
175
  </div>
176
 
177
+ <?php if($gmCore->caps['gmedia_module_manage']){ ?>
178
+ <!-- Modal -->
179
+ <div class="modal fade gmedia-modal" id="installModuleModal" tabindex="-1" role="dialog" aria-hidden="true">
180
+ <div class="modal-dialog">
181
+ <form class="modal-content" method="post" enctype="multipart/form-data" action="<?php echo $url; ?>">
182
+ <div class="modal-header">
183
+ <button type="button" class="close" data-dismiss="modal" aria-hidden="true">&times;</button>
184
+ <h4 class="modal-title"><?php _e('Install a plugin in .zip format'); ?></h4>
 
 
 
 
 
 
 
 
 
 
185
  </div>
186
+ <div class="modal-body">
187
+ <p class="install-help"><?php _e('If you have a module in a .zip format, you may install it by uploading it here.'); ?></p>
188
+ <?php wp_nonce_field('GmediaModule'); ?>
189
+ <label class="screen-reader-text" for="modulezip"><?php _e('Module zip file'); ?></label>
190
+ <input type="file" id="modulezip" name="modulezip"/>
 
 
 
 
 
 
191
  </div>
192
+ <div class="modal-footer">
193
+ <button type="button" class="btn btn-default" data-dismiss="modal"><?php _e('Cancel', 'gmLang'); ?></button>
194
+ <button type="submit" class="btn btn-primary"><?php _e('Install', 'gmLang'); ?></button>
195
+ </div>
196
+ </form>
197
+ </div>
198
  </div>
 
199
  <?php } ?>
200
+
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
201
  <?php
202
  }
203
 
admin/processor.php CHANGED
@@ -20,7 +20,7 @@ class GmediaProcessor{
20
  global $pagenow, $gmCore;
21
  // GET variables
22
  $this->mode = $gmCore->_get('mode');
23
- $this->page = $gmCore->_get('page', 'GrandMedia');
24
 
25
  if('media.php' === $pagenow){
26
  add_filter('wp_redirect', array(&$this, 'redirect'), 10, 2);
@@ -31,22 +31,22 @@ class GmediaProcessor{
31
 
32
  }
33
 
34
- function selected_items(){
35
  global $user_ID, $gmCore;
36
  switch($this->page){
37
  case 'GrandMedia':
38
- $ckey = "gmedia_u{$user_ID}_library";
39
  break;
40
  case 'GrandMedia_Terms':
41
  $taxonomy = $gmCore->_get('term', 'gmedia_album');
42
- $ckey = "gmedia_u{$user_ID}_{$taxonomy}";
43
  break;
44
  case 'GrandMedia_Galleries':
45
  $taxonomy = $gmCore->_get('term', 'gmedia_gallery');
46
- $ckey = "gmedia_u{$user_ID}_{$taxonomy}";
47
  break;
48
  case 'GrandMedia_WordpressLibrary':
49
- $ckey = "gmedia_u{$user_ID}_wpmedia";
50
  break;
51
  default:
52
  $ckey = false;
@@ -79,16 +79,24 @@ class GmediaProcessor{
79
 
80
  // Do diff process before lib shell
81
  function processor(){
82
- global $gmCore, $gmDB, $gmGallery;
83
 
84
- // check for correct capability
85
- //if ( ! current_user_can( 'edit_posts' ) )
86
- // die( '-1' );
87
 
88
  switch($this->page){
89
  case 'GrandMedia':
 
 
 
90
  if(isset($_POST['quick_gallery'])){
 
91
  do{
 
 
 
 
92
  $gallery = $gmCore->_post('gallery');
93
  $gallery['name'] = trim($gallery['name']);
94
  if(empty($gallery['name'])){
@@ -115,10 +123,10 @@ class GmediaProcessor{
115
  }
116
 
117
  $gallery_meta = array(
118
- 'edited' => gmdate('Y-m-d H:i:s')
119
- ,'module' => $gallery['module']
120
- ,'query' => array('gmedia__in' => $gallery['query']['gmedia__in'])
121
- ,'settings' => array($gallery['module'] => array())
122
  );
123
  foreach($gallery_meta as $key => $value){
124
  $gmDB->add_metadata('gmedia_term', $term_id, $key, $value);
@@ -145,163 +153,358 @@ class GmediaProcessor{
145
  wp_redirect($location);
146
  }
147
  }
 
 
 
 
 
148
  if(!empty($this->selected_items)){
149
  if(isset($_POST['assign_category'])){
150
- $term = $gmCore->_post('cat');
151
- if(false !== $term){
152
- $count = count($this->selected_items);
153
- if('0' == $term){
154
- foreach($this->selected_items as $item){
155
- $gmDB->delete_gmedia_term_relationships($item, 'gmedia_category');
156
  }
157
- $this->msg[] = sprintf(__('%d items updated with "Uncategorized"', 'gmLang'), $count);
158
  } else{
159
- foreach($this->selected_items as $item){
160
- $result = $gmDB->set_gmedia_terms($item, $term, 'gmedia_category', $append = 0);
161
- if(is_wp_error($result)){
162
- $this->error[] = $result;
163
- $count--;
164
- } elseif(!$result){
165
- $count--;
166
  }
167
- }
168
- if(isset($gmGallery->options['taxonomies']['gmedia_category'][$term])){
169
- $cat_name = $gmGallery->options['taxonomies']['gmedia_category'][$term];
170
- $this->msg[] = sprintf(__("Category `%s` assigned to %d images.", 'gmLang'), esc_html($cat_name), $count);
171
  } else{
172
- $this->error[] = sprintf(__("Category `%s` can't be assigned.", 'gmLang'), $term);;
 
 
 
 
 
 
 
 
 
 
 
 
 
 
173
  }
174
  }
 
 
175
  }
176
  }
177
  if(isset($_POST['assign_album'])){
178
- $term = $gmCore->_post('alb');
179
- if(false !== $term){
180
- $count = count($this->selected_items);
181
- if('0' == $term){
182
- foreach($this->selected_items as $item){
183
- $gmDB->delete_gmedia_term_relationships($item, 'gmedia_album');
184
  }
185
- $this->msg[] = sprintf(__('%d items updated with "No Album"', 'gmLang'), $count);
186
  } else{
187
- foreach($this->selected_items as $item){
188
- $result = $gmDB->set_gmedia_terms($item, $term, 'gmedia_album', $append = 0);
189
- if(is_wp_error($result)){
190
- $this->error[] = $result;
191
- $count--;
192
- } elseif(!$result){
193
- $count--;
194
  }
195
- }
196
- if($gmCore->is_digit($term)){
197
- $alb_name = $gmDB->get_alb_name($term);
198
  } else{
199
- $alb_name = $term;
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
200
  }
201
- $this->msg[] = sprintf(__('Album `%s` assigned to %d items', 'gmLang'), esc_html($alb_name), $count);
202
  }
 
 
203
  }
204
-
205
  }
206
  if(isset($_POST['add_tags'])){
207
- if(($term = $gmCore->_post('tag_names'))){
 
 
 
 
 
 
 
 
 
208
  $term = explode(',', $term);
209
- $count = count($this->selected_items);
210
- foreach($this->selected_items as $item){
211
- $result = $gmDB->set_gmedia_terms($item, $term, 'gmedia_tag', $append = 1);
212
- if(is_wp_error($result)){
213
- $this->error[] = $result;
214
- $count--;
215
- } elseif(!$result){
216
- $count--;
 
217
  }
 
218
  }
219
- $this->msg[] = sprintf(__('%d tags added to %d items', 'gmLang'), count($term), $count);
 
220
  }
221
  }
222
  if(isset($_POST['delete_tags'])){
223
- if(($term = $gmCore->_post('tag_id'))){
 
 
 
 
 
 
 
 
 
224
  $term = array_map('intval', $term);
225
- $count = count($this->selected_items);
226
- foreach($this->selected_items as $item){
227
- $result = $gmDB->set_gmedia_terms($item, $term, 'gmedia_tag', $append = -1);
228
- if(is_wp_error($result)){
229
- $this->error[] = $result;
230
- $count--;
231
- } elseif(!$result){
232
- $count--;
 
233
  }
 
234
  }
235
- $this->msg[] = sprintf(__('%d tags deleted from %d items', 'gmLang'), count($term), $count);
 
236
  }
237
  }
238
- if('selected' == $gmCore->_get('delete')){
239
- global $user_ID;
240
- check_admin_referer('gmedia_delete');
241
- if(!current_user_can('delete_posts')){
242
- wp_die(__('You are not allowed to delete this post.'));
243
- }
244
- $count = count($this->selected_items);
245
- foreach($this->selected_items as $item){
246
- if(!$gmDB->delete_gmedia((int)$item)){
247
- $this->error[] = "#{$item}: " . __('Error in deleting...', 'gmLang');
248
- $count--;
249
  }
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
250
  }
251
- if($count){
252
- $this->msg[] = sprintf(__('%d items deleted successfuly', 'gmLang'), $count);
253
- }
254
- unset($_COOKIE["gmedia_u{$user_ID}_library"]);
255
- setcookie($_COOKIE["gmedia_u{$user_ID}_library"], '', time() - 3600);
256
- $this->selected_items = array();
257
  }
258
  if('selected' == $gmCore->_get('update_meta')){
259
  check_admin_referer('gmedia_update_meta');
260
- if(!current_user_can('edit_posts')){
261
- wp_die(__('You are not allowed to do this.'));
 
 
 
 
 
 
 
 
 
262
  }
263
- $count = count($this->selected_items);
264
- if($count){
265
- foreach($this->selected_items as $item){
266
- $id = (int) $item;
267
- $gmDB->update_metadata($meta_type = 'gmedia', $id, $meta_key = '_metadata', $gmDB->generate_gmedia_metadata($id));
268
- }
269
- $this->msg[] = sprintf(__('%d items updated successfuly', 'gmLang'), $count);
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
270
  }
 
 
271
  }
272
  }
 
273
  break;
274
  case 'GrandMedia_AddMedia':
 
 
 
275
  break;
276
  case 'GrandMedia_Terms':
 
 
 
277
  $taxonomy = $gmCore->_get('term', 'gmedia_album');
278
  if(!empty($this->selected_items)){
279
  if('selected' == $gmCore->_get('delete')){
280
- global $user_ID;
281
  check_admin_referer('gmedia_delete');
282
- if(!current_user_can('delete_posts')){
283
- wp_die(__('You are not allowed to delete this post.'));
284
- }
285
- $count = count($this->selected_items);
286
- foreach($this->selected_items as $item){
287
- $delete = $gmDB->delete_term($item, $taxonomy);
288
- if(is_wp_error($delete)){
289
- $this->error[] = $delete->get_error_message();
290
- $count--;
 
291
  }
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
292
  }
293
- if($count){
294
- $this->msg[] = sprintf(__('%d items deleted successfuly', 'gmLang'), $count);
295
- }
296
- unset($_COOKIE["gmedia_u{$user_ID}_{$taxonomy}"]);
297
- setcookie($_COOKIE["gmedia_u{$user_ID}_{$taxonomy}"], '', time() - 3600);
298
- $this->selected_items = array();
299
  }
300
  }
301
  if(isset($_POST['gmedia_album_save'])){
302
  check_admin_referer('GmediaTerms', 'term_save_wpnonce');
303
- $edit_term = (int) $gmCore->_get('edit_album');
304
  do{
 
 
 
 
305
  $term = $gmCore->_post('term');
306
  $term['name'] = trim($term['name']);
307
  if(empty($term['name'])){
@@ -317,7 +520,7 @@ class GmediaProcessor{
317
  $this->error[] = __('A term with the id provided do not exists', 'gmLang');
318
  $edit_term = false;
319
  }
320
- if(($term_id = $gmDB->term_exists($term['name'], $taxonomy))){
321
  if($term_id != $edit_term){
322
  $this->error[] = __('A term with the name provided already exists', 'gmLang');
323
  break;
@@ -326,7 +529,7 @@ class GmediaProcessor{
326
  if($edit_term){
327
  $term_id = $gmDB->update_term($edit_term, $term['taxonomy'], $term);
328
  } else{
329
- $term_id = $gmDB->insert_term($term['name'], $term['taxonomy'], array('description' => $term['description'], 'status' => $term['status']));
330
  }
331
  if(is_wp_error($term_id)){
332
  $this->error[] = $term_id->get_error_message();
@@ -334,8 +537,8 @@ class GmediaProcessor{
334
  }
335
 
336
  $term_meta = array(
337
- 'orderby' => $term['orderby']
338
- ,'order' => $term['order']
339
  );
340
  foreach($term_meta as $key => $value){
341
  if($edit_term){
@@ -350,31 +553,52 @@ class GmediaProcessor{
350
  } while(0);
351
  }
352
  if(isset($_POST['gmedia_tag_add'])){
353
- check_admin_referer('GmediaTerms', 'term_save_wpnonce');
354
- $term = $gmCore->_post('term');
355
- $terms = array_filter(array_map('trim', explode(',', $term['name'])));
356
- $terms_added = 0; $terms_qty = count($terms);
357
- foreach($terms as $term_name){
358
- if($gmCore->is_digit($term_name)){ continue; }
359
-
360
- if(!$gmDB->term_exists($term_name, $term['taxonomy'])){
361
- $term_id = $gmDB->insert_term($term_name, $term['taxonomy']);
362
- if(is_wp_error($term_id)){
363
- $this->error[] = $term_id->get_error_message();
 
 
 
 
 
 
 
 
364
  } else{
365
- $this->msg['tag_add'] = sprintf(__('%d of %d tags successfuly added', 'gmLang'), ++$terms_added, $terms_qty);
366
  }
367
- } else{
368
- $this->error['tag_add'] = __('Some of provided tags are already exists', 'gmLang');
369
  }
 
 
370
  }
371
  }
372
  break;
373
  case 'GrandMedia_Galleries':
 
 
 
 
 
 
 
 
374
  if(isset($_POST['gmedia_gallery_save'])){
375
- $edit_gallery = (int) $gmCore->_get('edit_gallery');
 
376
  do{
377
  $gallery = $gmCore->_post('gallery');
 
 
 
 
378
  $gallery['name'] = trim($gallery['name']);
379
  if(empty($gallery['name'])){
380
  $this->error[] = __('Gallery Name is not specified', 'gmLang');
@@ -398,16 +622,16 @@ class GmediaProcessor{
398
  $this->error[] = __('A term with the id provided do not exists', 'gmLang');
399
  $edit_gallery = false;
400
  }
401
- if(($term_id = $gmDB->term_exists($gallery['name'], $taxonomy))){
402
  if($term_id != $edit_gallery){
403
  $this->error[] = __('A term with the name provided already exists', 'gmLang');
404
  break;
405
  }
406
  }
407
  if($edit_gallery){
408
- $term_id = $gmDB->update_term($edit_gallery, $taxonomy, array('name' => $gallery['name'], 'description' => $gallery['description'], 'status' => $gallery['status']));
409
  } else{
410
- $term_id = $gmDB->insert_term($gallery['name'], $taxonomy, array('description' => $gallery['description'], 'status' => $gallery['status']));
411
  }
412
  if(is_wp_error($term_id)){
413
  $this->error[] = $term_id->get_error_message();
@@ -425,10 +649,10 @@ class GmediaProcessor{
425
  }
426
  $module_settings = $gmCore->array_replace_recursive($default_options, $module_settings);
427
  $gallery_meta = array(
428
- 'edited' => gmdate('Y-m-d H:i:s')
429
- ,'module' => $gallery['module']
430
- ,'query' => array($term => $gallery['query'][$term])
431
- ,'settings' => array($gallery['module'] => $module_settings)
432
  );
433
  foreach($gallery_meta as $key => $value){
434
  if($edit_gallery){
@@ -441,22 +665,35 @@ class GmediaProcessor{
441
  $this->msg[] = sprintf(__('Gallery #%d successfuly saved', 'gmLang'), $term_id);
442
  } else{
443
  $location = add_query_arg(array('page' => $this->page, 'edit_gallery' => $term_id, 'message' => 'save'), admin_url('admin.php'));
 
444
  wp_redirect($location);
445
  }
446
  } while(0);
447
  }
448
  if(('save' == $gmCore->_get('message')) && ($term_id = $gmCore->_get('edit_gallery'))){
449
- $this->msg[] = sprintf(__('Gallery #%d successfuly saved', 'gmLang'), $term_id);
 
 
 
 
450
  }
451
 
452
  if(isset($_POST['gmedia_gallery_reset'])){
453
- $edit_gallery = (int) $gmCore->_get('edit_gallery');
 
454
  do{
455
  $taxonomy = 'gmedia_gallery';
456
  if(!$gmDB->term_exists($edit_gallery, $taxonomy)){
457
  $this->error[] = __('A term with the id provided do not exists', 'gmLang');
458
  break;
459
  }
 
 
 
 
 
 
 
460
  $gallery_settings = $gmDB->get_metadata('gmedia_term', $edit_gallery, 'settings', true);
461
  reset($gallery_settings);
462
  $gallery_module = key($gallery_settings);
@@ -472,8 +709,8 @@ class GmediaProcessor{
472
  }
473
 
474
  $gallery_meta = array(
475
- 'edited' => gmdate('Y-m-d H:i:s')
476
- ,'settings' => array($gallery_module => $default_options)
477
  );
478
  foreach($gallery_meta as $key => $value){
479
  $gmDB->update_metadata('gmedia_term', $edit_gallery, $key, $value);
@@ -486,14 +723,22 @@ class GmediaProcessor{
486
 
487
  if(!empty($this->selected_items)){
488
  if('selected' == $gmCore->_get('delete')){
489
- global $user_ID;
490
  check_admin_referer('gmedia_delete');
491
- if(!current_user_can('delete_posts')){
492
- wp_die(__('You are not allowed to delete this post.'));
493
- }
494
  $taxonomy = 'gmedia_gallery';
495
  $count = count($this->selected_items);
496
  foreach($this->selected_items as $item){
 
 
 
 
 
 
 
 
 
 
 
 
497
  $delete = $gmDB->delete_term($item, $taxonomy);
498
  if(is_wp_error($delete)){
499
  $this->error[] = $delete->get_error_message();
@@ -503,21 +748,23 @@ class GmediaProcessor{
503
  if($count){
504
  $this->msg[] = sprintf(__('%d items deleted successfuly', 'gmLang'), $count);
505
  }
506
- unset($_COOKIE["gmedia_u{$user_ID}_{$taxonomy}"]);
507
- setcookie($_COOKIE["gmedia_u{$user_ID}_{$taxonomy}"], '', time() - 3600);
508
  $this->selected_items = array();
509
  }
510
  }
511
 
512
  break;
513
  case 'GrandMedia_Modules':
 
 
 
514
  if(isset($_FILES['modulezip']['tmp_name'])){
515
  if(!empty($_FILES['modulezip']['tmp_name'])){
516
  check_admin_referer('GmediaModule');
517
- if(!current_user_can('edit_posts')){
518
- wp_die(__('You are not allowed to install modules', 'gmLang'));
519
  }
520
-
521
  $to_folder = $gmCore->upload['path'] . '/' . $gmGallery->options['folder']['module'] . '/';
522
  $filename = wp_unique_filename($to_folder, $_FILES['modulezip']['name']);
523
 
@@ -552,9 +799,13 @@ class GmediaProcessor{
552
  }
553
  break;
554
  case 'GrandMedia_Settings':
 
 
 
555
  $lk_check = isset($_POST['license-key-activate']);
556
  if(isset($_POST['gmedia_settings_save'])){
557
  check_admin_referer('GmediaSettings');
 
558
  $set = $gmCore->_post('set', array());
559
  if(!empty($set['license_key']) && empty($set['license_key2'])){
560
  $lk_check = true;
@@ -568,6 +819,14 @@ class GmediaProcessor{
568
  foreach($set as $key => $val){
569
  $gmGallery->options[$key] = $val;
570
  }
 
 
 
 
 
 
 
 
571
  update_option('gmediaOptions', $gmGallery->options);
572
  $this->msg[] .= __('Settings saved', 'gmLang');
573
  }
@@ -581,15 +840,15 @@ class GmediaProcessor{
581
  $gmedia_ua .= 'Gmedia/' . constant('GMEDIA_VERSION');
582
 
583
  $response = wp_remote_post('http://codeasily.com/rest/gmedia-key.php', array(
584
- 'body' => array('key' => $license_key['license_key'], 'site' => site_url()),
585
- 'headers' => array(
586
- 'Content-Type' => 'application/x-www-form-urlencoded; ' . 'charset=' . get_option('blog_charset'),
587
- 'Host' => 'codeasily.com',
588
- 'User-Agent' => $gmedia_ua
589
- ),
590
- 'httpversion' => '1.0',
591
- 'timeout' => 10
592
- ));
593
 
594
  if(is_wp_error($response)){
595
  $this->error[] = $response->get_error_message();
@@ -623,10 +882,22 @@ class GmediaProcessor{
623
  $gmGallery->options['license_key2'] = $_temp_options['license_key2'];
624
  delete_metadata('user', 0, 'gm_screen_options', '', true);
625
  update_option('gmediaOptions', $gmGallery->options);
 
 
 
 
 
 
 
 
 
626
  $this->msg[] .= __('All settings set to default', 'gmLang');
627
  }
628
  break;
629
  case 'GrandMedia_WordpressLibrary':
 
 
 
630
  break;
631
  default:
632
  break;
@@ -652,6 +923,7 @@ class GmediaProcessor{
652
 
653
  /**
654
  * redirect to original referer after update
 
655
  * @param $location
656
  * @param $status
657
  *
20
  global $pagenow, $gmCore;
21
  // GET variables
22
  $this->mode = $gmCore->_get('mode');
23
+ $this->page = $gmCore->_get('page');
24
 
25
  if('media.php' === $pagenow){
26
  add_filter('wp_redirect', array(&$this, 'redirect'), 10, 2);
31
 
32
  }
33
 
34
+ function selected_items(){
35
  global $user_ID, $gmCore;
36
  switch($this->page){
37
  case 'GrandMedia':
38
+ $ckey = "gmuser_{$user_ID}_library";
39
  break;
40
  case 'GrandMedia_Terms':
41
  $taxonomy = $gmCore->_get('term', 'gmedia_album');
42
+ $ckey = "gmuser_{$user_ID}_{$taxonomy}";
43
  break;
44
  case 'GrandMedia_Galleries':
45
  $taxonomy = $gmCore->_get('term', 'gmedia_gallery');
46
+ $ckey = "gmuser_{$user_ID}_{$taxonomy}";
47
  break;
48
  case 'GrandMedia_WordpressLibrary':
49
+ $ckey = "gmuser_{$user_ID}_wpmedia";
50
  break;
51
  default:
52
  $ckey = false;
79
 
80
  // Do diff process before lib shell
81
  function processor(){
82
+ global $gmCore, $gmDB, $gmGallery, $user_ID;
83
 
84
+ if(!$this->page || strpos($this->page, 'GrandMedia') === false){
85
+ return;
86
+ }
87
 
88
  switch($this->page){
89
  case 'GrandMedia':
90
+ if(!$gmCore->caps['gmedia_library']){
91
+ wp_die(__('You are not allowed to be here', 'gmLang'));
92
+ }
93
  if(isset($_POST['quick_gallery'])){
94
+ check_admin_referer('gmedia_modal');
95
  do{
96
+ if(!$gmCore->caps['gmedia_gallery_manage']){
97
+ $this->error[] = __('You are not allowed to manage galleries', 'gmLang');
98
+ break;
99
+ }
100
  $gallery = $gmCore->_post('gallery');
101
  $gallery['name'] = trim($gallery['name']);
102
  if(empty($gallery['name'])){
123
  }
124
 
125
  $gallery_meta = array(
126
+ 'edited' => gmdate('Y-m-d H:i:s'),
127
+ 'module' => $gallery['module'],
128
+ 'query' => array('gmedia__in' => $gallery['query']['gmedia__in']),
129
+ 'settings' => array($gallery['module'] => array())
130
  );
131
  foreach($gallery_meta as $key => $value){
132
  $gmDB->add_metadata('gmedia_term', $term_id, $key, $value);
153
  wp_redirect($location);
154
  }
155
  }
156
+ if(isset($_POST['filter_authors'])){
157
+ $authors = $gmCore->_post('author_ids');
158
+ $location = add_query_arg(array('page' => $this->page, 'mode' => $this->mode, 'author' => (int)$authors), admin_url('admin.php'));
159
+ wp_redirect($location);
160
+ }
161
  if(!empty($this->selected_items)){
162
  if(isset($_POST['assign_category'])){
163
+ check_admin_referer('gmedia_modal');
164
+ if($gmCore->caps['gmedia_terms']){
165
+ if(!$gmCore->caps['gmedia_edit_others_media']){
166
+ $selected_items = $gmDB->get_gmedias(array('fields' => 'ids', 'author' => $user_ID, 'gmedia__in' => $this->selected_items));
167
+ if(count($selected_items) < count($this->selected_items)){
168
+ $this->error[] = __('You are not allowed to edit others media', 'gmLang');
169
  }
 
170
  } else{
171
+ $selected_items = $this->selected_items;
172
+ }
173
+ $term = $gmCore->_post('cat');
174
+ if((false !== $term) && ($count = count($selected_items))){
175
+ if('0' == $term){
176
+ foreach($selected_items as $item){
177
+ $gmDB->delete_gmedia_term_relationships($item, 'gmedia_category');
178
  }
179
+ $this->msg[] = sprintf(__('%d items now uncategorized', 'gmLang'), $count);
 
 
 
180
  } else{
181
+ foreach($selected_items as $item){
182
+ $result = $gmDB->set_gmedia_terms($item, $term, 'gmedia_category', $append = 0);
183
+ if(is_wp_error($result)){
184
+ $this->error[] = $result;
185
+ $count--;
186
+ } elseif(!$result){
187
+ $count--;
188
+ }
189
+ }
190
+ if(isset($gmGallery->options['taxonomies']['gmedia_category'][$term])){
191
+ $cat_name = $gmGallery->options['taxonomies']['gmedia_category'][$term];
192
+ $this->msg[] = sprintf(__("Category `%s` assigned to %d images.", 'gmLang'), esc_html($cat_name), $count);
193
+ } else{
194
+ $this->error[] = sprintf(__("Category `%s` can't be assigned.", 'gmLang'), $term);
195
+ }
196
  }
197
  }
198
+ } else{
199
+ $this->error[] = __('You are not allowed to assign terms', 'gmLang');
200
  }
201
  }
202
  if(isset($_POST['assign_album'])){
203
+ check_admin_referer('gmedia_modal');
204
+ if($gmCore->caps['gmedia_terms']){
205
+ if(!$gmCore->caps['gmedia_edit_others_media']){
206
+ $selected_items = $gmDB->get_gmedias(array('fields' => 'ids', 'author' => $user_ID, 'gmedia__in' => $this->selected_items));
207
+ if(count($selected_items) < count($this->selected_items)){
208
+ $this->error[] = __('You are not allowed to edit others media', 'gmLang');
209
  }
 
210
  } else{
211
+ $selected_items = $this->selected_items;
212
+ }
213
+ $term = $gmCore->_post('alb');
214
+ if((false !== $term) && ($count = count($selected_items))){
215
+ if(empty($term)){
216
+ foreach($selected_items as $item){
217
+ $gmDB->delete_gmedia_term_relationships($item, 'gmedia_album');
218
  }
219
+ $this->msg[] = sprintf(__('%d items updated with "No Album"', 'gmLang'), $count);
 
 
220
  } else{
221
+ $term_ids = array();
222
+ foreach($selected_items as $item){
223
+ $result = $gmDB->set_gmedia_terms($item, $term, 'gmedia_album', $append = 0);
224
+ if(is_wp_error($result)){
225
+ $this->error[] = $result;
226
+ } elseif($result){
227
+ foreach($result as $t_id) {
228
+ $term_ids[$t_id][] = $item;
229
+ }
230
+ }
231
+ }
232
+ if(!empty($term_ids)){
233
+ global $wpdb;
234
+
235
+ foreach($term_ids as $term_id => $item_ids){
236
+ $term = $gmDB->get_term($term_id, 'gmedia_album');
237
+ if(isset($_POST['status_global'])){
238
+ $values = array();
239
+ foreach ($selected_items as $item) {
240
+ $values[] = $wpdb->prepare("%d", $item);
241
+ }
242
+ if ($values) {
243
+ $status = esc_sql($term->status);
244
+ if (false === $wpdb->query("UPDATE {$wpdb->prefix}gmedia SET status = '{$status}' WHERE ID IN (" . join(',', $values) . ")")) {
245
+ $this->error[] = __('Could not update statuses for gmedia items in the database');
246
+ }
247
+ }
248
+ }
249
+ $this->msg[] = sprintf(__('Album `%s` assigned to %d items', 'gmLang'), esc_html($term->name), count($item_ids));
250
+ }
251
+ }
252
  }
 
253
  }
254
+ } else{
255
+ $this->error[] = __('You are not allowed to assign terms', 'gmLang');
256
  }
 
257
  }
258
  if(isset($_POST['add_tags'])){
259
+ check_admin_referer('gmedia_modal');
260
+ if(($term = $gmCore->_post('tag_names')) && $gmCore->caps['gmedia_terms']){
261
+ if(!$gmCore->caps['gmedia_edit_others_media']){
262
+ $selected_items = $gmDB->get_gmedias(array('fields' => 'ids', 'author' => $user_ID, 'gmedia__in' => $this->selected_items));
263
+ if(count($selected_items) < count($this->selected_items)){
264
+ $this->error[] = __('You are not allowed to edit others media', 'gmLang');
265
+ }
266
+ } else{
267
+ $selected_items = $this->selected_items;
268
+ }
269
  $term = explode(',', $term);
270
+ if(($count = count($selected_items))){
271
+ foreach($selected_items as $item){
272
+ $result = $gmDB->set_gmedia_terms($item, $term, 'gmedia_tag', $append = 1);
273
+ if(is_wp_error($result)){
274
+ $this->error[] = $result;
275
+ $count--;
276
+ } elseif(!$result){
277
+ $count--;
278
+ }
279
  }
280
+ $this->msg[] = sprintf(__('%d tags added to %d items', 'gmLang'), count($term), $count);
281
  }
282
+ } else{
283
+ $this->error[] = __('You are not allowed to assign terms', 'gmLang');
284
  }
285
  }
286
  if(isset($_POST['delete_tags'])){
287
+ check_admin_referer('gmedia_modal');
288
+ if(($term = $gmCore->_post('tag_id')) && $gmCore->caps['gmedia_terms']){
289
+ if(!$gmCore->caps['gmedia_edit_others_media']){
290
+ $selected_items = $gmDB->get_gmedias(array('fields' => 'ids', 'author' => $user_ID, 'gmedia__in' => $this->selected_items));
291
+ if(count($selected_items) < count($this->selected_items)){
292
+ $this->error[] = __('You are not allowed to edit others media', 'gmLang');
293
+ }
294
+ } else{
295
+ $selected_items = $this->selected_items;
296
+ }
297
  $term = array_map('intval', $term);
298
+ if(($count = count($selected_items))){
299
+ foreach($selected_items as $item){
300
+ $result = $gmDB->set_gmedia_terms($item, $term, 'gmedia_tag', $append = -1);
301
+ if(is_wp_error($result)){
302
+ $this->error[] = $result;
303
+ $count--;
304
+ } elseif(!$result){
305
+ $count--;
306
+ }
307
  }
308
+ $this->msg[] = sprintf(__('%d tags deleted from %d items', 'gmLang'), count($term), $count);
309
  }
310
+ } else{
311
+ $this->error[] = __('You are not allowed to assign terms', 'gmLang');
312
  }
313
  }
314
+ if(isset($_POST['batch_edit'])){
315
+ check_admin_referer('gmedia_modal');
316
+ if($gmCore->caps['gmedia_edit_media']){
317
+ if(!$gmCore->caps['gmedia_edit_others_media']){
318
+ $selected_items = $gmDB->get_gmedias(array('fields' => 'ids', 'author' => $user_ID, 'gmedia__in' => $this->selected_items));
319
+ if(count($selected_items) < count($this->selected_items)){
320
+ $this->error[] = __('You are not allowed to edit others media', 'gmLang');
321
+ }
322
+ } else{
323
+ $selected_items = $this->selected_items;
 
324
  }
325
+ if(($count = count($selected_items))){
326
+ $batch_data = array();
327
+ $batch_data['modified'] = current_time('mysql');
328
+ $b_title = $gmCore->_post('batch_title');
329
+ $b_description = $gmCore->_post('batch_description');
330
+ $b_link = $gmCore->_post('batch_link');
331
+ $b_status = $gmCore->_post('batch_status');
332
+ if($b_status){
333
+ $batch_data['status'] = $b_status;
334
+ }
335
+ $b_author = $gmCore->_post('batch_author');
336
+ if($b_author){
337
+ $batch_data['author'] = $b_author;
338
+ }
339
+ foreach($selected_items as $item){
340
+ $id = (int)$item;
341
+ $gmedia = $gmDB->get_gmedia($id, ARRAY_A);
342
+ switch($b_title){
343
+ case 'empty':
344
+ $batch_data['title'] = '';
345
+ break;
346
+ case 'filename':
347
+ $title = pathinfo($gmedia['gmuid'], PATHINFO_FILENAME);
348
+ $batch_data['title'] = ucwords(str_replace('_', ' ', $title));
349
+ break;
350
+ case 'custom':
351
+ $title_custom = $gmCore->_post('batch_title_custom');
352
+ if(false !== $title_custom){
353
+ $batch_data['title'] = $title_custom;
354
+ }
355
+ break;
356
+ }
357
+ switch($b_description){
358
+ case 'empty':
359
+ $batch_data['description'] = '';
360
+ break;
361
+ case 'custom':
362
+ $description_custom = $gmCore->_post('batch_description_custom');
363
+ if(false !== $description_custom){
364
+ $batch_data['description'] = $description_custom;
365
+ }
366
+ break;
367
+ }
368
+ switch($b_link){
369
+ case 'empty':
370
+ $batch_data['link'] = '';
371
+ break;
372
+ case 'self':
373
+ $fileinfo = $gmCore->fileinfo($gmedia['gmuid'], false);
374
+ $batch_data['link'] = $fileinfo['fileurl_original'];
375
+ break;
376
+ case 'custom':
377
+ $link_custom = $gmCore->_post('batch_title_custom');
378
+ if(false !== $link_custom){
379
+ $batch_data['link'] = $link_custom;
380
+ }
381
+ break;
382
+ }
383
+ $gmedia_data = array_replace($gmedia, $batch_data);
384
+ $gmDB->insert_gmedia($gmedia_data);
385
+ }
386
+ $this->msg[] = sprintf(__('%d items updated successfuly', 'gmLang'), $count);
387
+ }
388
+ } else{
389
+ $this->error[] = __('You are not allowed to edit media', 'gmLang');
390
  }
 
 
 
 
 
 
391
  }
392
  if('selected' == $gmCore->_get('update_meta')){
393
  check_admin_referer('gmedia_update_meta');
394
+ if($gmCore->caps['gmedia_edit_media']){
395
+ $count = count($this->selected_items);
396
+ if($count){
397
+ foreach($this->selected_items as $item){
398
+ $id = (int)$item;
399
+ $gmDB->update_metadata($meta_type = 'gmedia', $id, $meta_key = '_metadata', $gmDB->generate_gmedia_metadata($id));
400
+ }
401
+ $this->msg[] = sprintf(__('%d items updated successfuly', 'gmLang'), $count);
402
+ }
403
+ } else{
404
+ $this->error[] = __('You are not allowed to edit media', 'gmLang');
405
  }
406
+ }
407
+ }
408
+ if(($delete_gmedia = $gmCore->_get('delete'))){
409
+ check_admin_referer('gmedia_delete');
410
+ if($gmCore->caps['gmedia_delete_media']){
411
+ if('selected' == $delete_gmedia){
412
+ $selected_items = $this->selected_items;
413
+ } else{
414
+ $selected_items = wp_parse_id_list($delete_gmedia);
415
+ }
416
+ if(!empty($selected_items)){
417
+ if(!$gmCore->caps['gmedia_delete_others_media']){
418
+ $delete_items = $gmDB->get_gmedias(array('fields' => 'ids', 'author' => $user_ID, 'gmedia__in' => $selected_items));
419
+ if(count($delete_items) < count($selected_items)){
420
+ $this->error[] = __('You are not allowed to delete others media', 'gmLang');
421
+ }
422
+ $selected_items = $delete_items;
423
+ }
424
+ if(($count = count($selected_items))){
425
+ $delete_original_file = intval($gmCore->_get('save_original_file'))? false : true;
426
+ foreach($selected_items as $item){
427
+ if(!$gmDB->delete_gmedia((int)$item, $delete_original_file)){
428
+ $this->error[] = "#{$item}: " . __('Error in deleting...', 'gmLang');
429
+ $count--;
430
+ }
431
+ }
432
+ if($count){
433
+ if($delete_original_file){
434
+ $this->msg[] = sprintf(__('%d item(s) deleted successfuly', 'gmLang'), $count);
435
+ } else{
436
+ $this->msg[] = sprintf(__('%d record(s) deleted from database successfuly. Original file(s) safe', 'gmLang'), $count);
437
+ }
438
+ }
439
+ $this->selected_items = array_diff($this->selected_items, $selected_items);
440
+ if(empty($this->selected_items)){
441
+ setcookie("gmuser_{$user_ID}_library", '', time() - 3600);
442
+ unset($_COOKIE["gmuser_{$user_ID}_library"]);
443
+ $this->selected_items = array();
444
+ } else{
445
+ setcookie("gmuser_{$user_ID}_library", implode(',', $this->selected_items));
446
+ }
447
+ }
448
  }
449
+ } else{
450
+ $this->error[] = __('You are not allowed to delete files', 'gmLang');
451
  }
452
  }
453
+
454
  break;
455
  case 'GrandMedia_AddMedia':
456
+ if(!$gmCore->caps['gmedia_upload']){
457
+ wp_die(__('You are not allowed to be here', 'gmLang'));
458
+ }
459
  break;
460
  case 'GrandMedia_Terms':
461
+ if(!$gmCore->caps['gmedia_library']){
462
+ wp_die(__('You are not allowed to be here', 'gmLang'));
463
+ }
464
  $taxonomy = $gmCore->_get('term', 'gmedia_album');
465
  if(!empty($this->selected_items)){
466
  if('selected' == $gmCore->_get('delete')){
 
467
  check_admin_referer('gmedia_delete');
468
+ if($gmCore->caps['gmedia_terms_delete']){
469
+ $selected_items = $this->selected_items;
470
+ if(!$gmCore->caps['gmedia_delete_others_media']){
471
+ $selected_items = array();
472
+ if('gmedia_album' == $taxonomy){
473
+ $selected_items = $gmDB->get_terms($taxonomy, array('fields' => 'ids', 'global' => $user_ID, 'include' => $this->selected_items));
474
+ }
475
+ if(count($selected_items) < count($this->selected_items)){
476
+ $this->error[] = __('You are not allowed to delete others media', 'gmLang');
477
+ }
478
  }
479
+ if(($count = count($selected_items))){
480
+ ;
481
+ foreach($selected_items as $item){
482
+ $delete = $gmDB->delete_term($item, $taxonomy);
483
+ if(is_wp_error($delete)){
484
+ $this->error[] = $delete->get_error_message();
485
+ $count--;
486
+ }
487
+ }
488
+ if($count){
489
+ $this->msg[] = sprintf(__('%d items deleted successfuly', 'gmLang'), $count);
490
+ }
491
+ setcookie("gmuser_{$user_ID}_{$taxonomy}", '', time() - 3600);
492
+ unset($_COOKIE["gmuser_{$user_ID}_{$taxonomy}"]);
493
+ $this->selected_items = array();
494
+ }
495
+ } else{
496
+ $this->error[] = __('You are not allowed to delete terms', 'gmLang');
497
  }
 
 
 
 
 
 
498
  }
499
  }
500
  if(isset($_POST['gmedia_album_save'])){
501
  check_admin_referer('GmediaTerms', 'term_save_wpnonce');
502
+ $edit_term = (int)$gmCore->_get('edit_album');
503
  do{
504
+ if(!$gmCore->caps['gmedia_album_manage']){
505
+ $this->error[] = __('You are not allowed to manage albums', 'gmLang');
506
+ break;
507
+ }
508
  $term = $gmCore->_post('term');
509
  $term['name'] = trim($term['name']);
510
  if(empty($term['name'])){
520
  $this->error[] = __('A term with the id provided do not exists', 'gmLang');
521
  $edit_term = false;
522
  }
523
+ if(($term_id = $gmDB->term_exists($term['name'], $taxonomy, $term['global']))){
524
  if($term_id != $edit_term){
525
  $this->error[] = __('A term with the name provided already exists', 'gmLang');
526
  break;
529
  if($edit_term){
530
  $term_id = $gmDB->update_term($edit_term, $term['taxonomy'], $term);
531
  } else{
532
+ $term_id = $gmDB->insert_term($term['name'], $term['taxonomy'], $term);
533
  }
534
  if(is_wp_error($term_id)){
535
  $this->error[] = $term_id->get_error_message();
537
  }
538
 
539
  $term_meta = array(
540
+ 'orderby' => $term['orderby'],
541
+ 'order' => $term['order']
542
  );
543
  foreach($term_meta as $key => $value){
544
  if($edit_term){
553
  } while(0);
554
  }
555
  if(isset($_POST['gmedia_tag_add'])){
556
+ if($gmCore->caps['gmedia_tag_manage']){
557
+ check_admin_referer('GmediaTerms', 'term_save_wpnonce');
558
+ $term = $gmCore->_post('term');
559
+ $terms = array_filter(array_map('trim', explode(',', $term['name'])));
560
+ $terms_added = 0;
561
+ $terms_qty = count($terms);
562
+ foreach($terms as $term_name){
563
+ if($gmCore->is_digit($term_name)){
564
+ $this->error['tag_name_digit'] = __("Term Name can't be only digits", 'gmLang');
565
+ continue;
566
+ }
567
+
568
+ if(!$gmDB->term_exists($term_name, $term['taxonomy'])){
569
+ $term_id = $gmDB->insert_term($term_name, $term['taxonomy']);
570
+ if(is_wp_error($term_id)){
571
+ $this->error[] = $term_id->get_error_message();
572
+ } else{
573
+ $this->msg['tag_add'] = sprintf(__('%d of %d tags successfuly added', 'gmLang'), ++$terms_added, $terms_qty);
574
+ }
575
  } else{
576
+ $this->error['tag_add'] = __('Some of provided tags are already exists', 'gmLang');
577
  }
 
 
578
  }
579
+ } else{
580
+ $this->error[] = __('You are not allowed to manage tags', 'gmLang');
581
  }
582
  }
583
  break;
584
  case 'GrandMedia_Galleries':
585
+ if(!$gmCore->caps['gmedia_gallery_manage']){
586
+ wp_die(__('You are not allowed to manage gmedia galleries', 'gmLang'));
587
+ }
588
+ if(isset($_POST['filter_authors'])){
589
+ $authors = $gmCore->_post('author_ids');
590
+ $location = $gmCore->get_admin_url(array('author' => (int)$authors));
591
+ wp_redirect($location);
592
+ }
593
  if(isset($_POST['gmedia_gallery_save'])){
594
+ check_admin_referer('GmediaGallery');
595
+ $edit_gallery = (int)$gmCore->_get('edit_gallery');
596
  do{
597
  $gallery = $gmCore->_post('gallery');
598
+ if(((int)$gallery['global'] != $user_ID) && !$gmCore->caps['gmedia_edit_others_media']){
599
+ $this->error[] = __('You are not allowed to edit others media', 'gmLang');
600
+ break;
601
+ }
602
  $gallery['name'] = trim($gallery['name']);
603
  if(empty($gallery['name'])){
604
  $this->error[] = __('Gallery Name is not specified', 'gmLang');
622
  $this->error[] = __('A term with the id provided do not exists', 'gmLang');
623
  $edit_gallery = false;
624
  }
625
+ if(($term_id = $gmDB->term_exists($gallery['name'], $taxonomy, $gallery['global']))){
626
  if($term_id != $edit_gallery){
627
  $this->error[] = __('A term with the name provided already exists', 'gmLang');
628
  break;
629
  }
630
  }
631
  if($edit_gallery){
632
+ $term_id = $gmDB->update_term($edit_gallery, $taxonomy, $gallery);
633
  } else{
634
+ $term_id = $gmDB->insert_term($gallery['name'], $taxonomy, $gallery);
635
  }
636
  if(is_wp_error($term_id)){
637
  $this->error[] = $term_id->get_error_message();
649
  }
650
  $module_settings = $gmCore->array_replace_recursive($default_options, $module_settings);
651
  $gallery_meta = array(
652
+ 'edited' => gmdate('Y-m-d H:i:s'),
653
+ 'module' => $gallery['module'],
654
+ 'query' => array($term => $gallery['query'][$term]),
655
+ 'settings' => array($gallery['module'] => $module_settings)
656
  );
657
  foreach($gallery_meta as $key => $value){
658
  if($edit_gallery){
665
  $this->msg[] = sprintf(__('Gallery #%d successfuly saved', 'gmLang'), $term_id);
666
  } else{
667
  $location = add_query_arg(array('page' => $this->page, 'edit_gallery' => $term_id, 'message' => 'save'), admin_url('admin.php'));
668
+ set_transient('gmedia_new_gallery_id', $term_id, 60);
669
  wp_redirect($location);
670
  }
671
  } while(0);
672
  }
673
  if(('save' == $gmCore->_get('message')) && ($term_id = $gmCore->_get('edit_gallery'))){
674
+ $gmedia_new_gallery_id = get_transient('gmedia_new_gallery_id');
675
+ if($gmedia_new_gallery_id){
676
+ delete_transient('gmedia_new_gallery_id');
677
+ $this->msg[] = sprintf(__('Gallery #%d successfuly saved', 'gmLang'), $term_id);
678
+ }
679
  }
680
 
681
  if(isset($_POST['gmedia_gallery_reset'])){
682
+ check_admin_referer('GmediaGallery');
683
+ $edit_gallery = (int)$gmCore->_get('edit_gallery');
684
  do{
685
  $taxonomy = 'gmedia_gallery';
686
  if(!$gmDB->term_exists($edit_gallery, $taxonomy)){
687
  $this->error[] = __('A term with the id provided do not exists', 'gmLang');
688
  break;
689
  }
690
+ if(!$gmCore->caps['gmedia_edit_others_media']){
691
+ $gallery = $gmDB->get_term($edit_gallery, $taxonomy);
692
+ if($gallery->global != $user_ID){
693
+ $this->error[] = __('You are not allowed to edit others media', 'gmLang');
694
+ break;
695
+ }
696
+ }
697
  $gallery_settings = $gmDB->get_metadata('gmedia_term', $edit_gallery, 'settings', true);
698
  reset($gallery_settings);
699
  $gallery_module = key($gallery_settings);
709
  }
710
 
711
  $gallery_meta = array(
712
+ 'edited' => gmdate('Y-m-d H:i:s'),
713
+ 'settings' => array($gallery_module => $default_options)
714
  );
715
  foreach($gallery_meta as $key => $value){
716
  $gmDB->update_metadata('gmedia_term', $edit_gallery, $key, $value);
723
 
724
  if(!empty($this->selected_items)){
725
  if('selected' == $gmCore->_get('delete')){
 
726
  check_admin_referer('gmedia_delete');
 
 
 
727
  $taxonomy = 'gmedia_gallery';
728
  $count = count($this->selected_items);
729
  foreach($this->selected_items as $item){
730
+ if(!$gmCore->caps['gmedia_delete_others_media']){
731
+ $gallery = $gmDB->get_term($item, $taxonomy);
732
+ if(is_wp_error($gallery) || empty($gallery)){
733
+ $this->error[] = sprintf(__('Error while delete gallery #%d', 'gmLang'), $item);
734
+ $count--;
735
+ continue;
736
+ } elseif($gallery->global != $user_ID){
737
+ $this->error['others_gallery_delete'] = __('You are not allowed to delete others media', 'gmLang');
738
+ $count--;
739
+ continue;
740
+ }
741
+ }
742
  $delete = $gmDB->delete_term($item, $taxonomy);
743
  if(is_wp_error($delete)){
744
  $this->error[] = $delete->get_error_message();
748
  if($count){
749
  $this->msg[] = sprintf(__('%d items deleted successfuly', 'gmLang'), $count);
750
  }
751
+ setcookie("gmuser_{$user_ID}_{$taxonomy}", '', time() - 3600);
752
+ unset($_COOKIE["gmuser_{$user_ID}_{$taxonomy}"]);
753
  $this->selected_items = array();
754
  }
755
  }
756
 
757
  break;
758
  case 'GrandMedia_Modules':
759
+ if(!$gmCore->caps['gmedia_gallery_manage']){
760
+ wp_die(__('You are not allowed to manage gmedia galleries', 'gmLang'));
761
+ }
762
  if(isset($_FILES['modulezip']['tmp_name'])){
763
  if(!empty($_FILES['modulezip']['tmp_name'])){
764
  check_admin_referer('GmediaModule');
765
+ if(!$gmCore->caps['gmedia_module_manage']){
766
+ wp_die(__('You are not allowed to manage gmedia modules', 'gmLang'));
767
  }
 
768
  $to_folder = $gmCore->upload['path'] . '/' . $gmGallery->options['folder']['module'] . '/';
769
  $filename = wp_unique_filename($to_folder, $_FILES['modulezip']['name']);
770
 
799
  }
800
  break;
801
  case 'GrandMedia_Settings':
802
+ if(!$gmCore->caps['gmedia_settings']){
803
+ wp_die(__('You are not allowed to change gmedia settings', 'gmLang'));
804
+ }
805
  $lk_check = isset($_POST['license-key-activate']);
806
  if(isset($_POST['gmedia_settings_save'])){
807
  check_admin_referer('GmediaSettings');
808
+
809
  $set = $gmCore->_post('set', array());
810
  if(!empty($set['license_key']) && empty($set['license_key2'])){
811
  $lk_check = true;
819
  foreach($set as $key => $val){
820
  $gmGallery->options[$key] = $val;
821
  }
822
+
823
+ $capabilities = $gmCore->_post('capability', array());
824
+ if(!empty($capabilities) && current_user_can('manage_options')){
825
+ foreach($capabilities as $key => $val){
826
+ $gmDB->set_capability($val, $key);
827
+ }
828
+ }
829
+
830
  update_option('gmediaOptions', $gmGallery->options);
831
  $this->msg[] .= __('Settings saved', 'gmLang');
832
  }
840
  $gmedia_ua .= 'Gmedia/' . constant('GMEDIA_VERSION');
841
 
842
  $response = wp_remote_post('http://codeasily.com/rest/gmedia-key.php', array(
843
+ 'body' => array('key' => $license_key['license_key'], 'site' => site_url()),
844
+ 'headers' => array(
845
+ 'Content-Type' => 'application/x-www-form-urlencoded; ' . 'charset=' . get_option('blog_charset'),
846
+ 'Host' => 'codeasily.com',
847
+ 'User-Agent' => $gmedia_ua
848
+ ),
849
+ 'httpversion' => '1.0',
850
+ 'timeout' => 10
851
+ ));
852
 
853
  if(is_wp_error($response)){
854
  $this->error[] = $response->get_error_message();
882
  $gmGallery->options['license_key2'] = $_temp_options['license_key2'];
883
  delete_metadata('user', 0, 'gm_screen_options', '', true);
884
  update_option('gmediaOptions', $gmGallery->options);
885
+
886
+ if($gmCore->_post('capability') && current_user_can('manage_options')){
887
+ $capabilities = gmedia_plugin_capabilities();
888
+ $capabilities = apply_filters('gmedia_capabilities', $capabilities);
889
+ //$role = get_role('administrator');
890
+ foreach($capabilities as $cap){
891
+ $gmDB->set_capability('administrator', $cap);
892
+ }
893
+ }
894
  $this->msg[] .= __('All settings set to default', 'gmLang');
895
  }
896
  break;
897
  case 'GrandMedia_WordpressLibrary':
898
+ if(!$gmCore->caps['gmedia_import']){
899
+ wp_die(__('You are not allowed to import media in Gmedia Library', 'gmLang'));
900
+ }
901
  break;
902
  default:
903
  break;
923
 
924
  /**
925
  * redirect to original referer after update
926
+ *
927
  * @param $location
928
  * @param $status
929
  *
admin/settings.php CHANGED
@@ -1,6 +1,6 @@
1
  <?php
2
- if ( preg_match( '#' . basename( __FILE__ ) . '#', $_SERVER['PHP_SELF'] ) ) {
3
- die( 'You are not allowed to call this page directly.' );
4
  }
5
 
6
  /**
@@ -8,8 +8,8 @@ if ( preg_match( '#' . basename( __FILE__ ) . '#', $_SERVER['PHP_SELF'] ) ) {
8
  *
9
  * @return mixed content
10
  */
11
- function gmSettings() {
12
- global $gmCore, $gmGallery;
13
 
14
  ?>
15
 
@@ -30,15 +30,22 @@ function gmSettings() {
30
  <div class="tabable tabs-left">
31
  <ul class="nav nav-tabs" style="padding:10px 0;">
32
  <li class="active"><a href="#gmedia_premium" data-toggle="tab"><?php _e('Premium Settings', 'gmLang'); ?></a></li>
33
- <li><a href="#gmedia_settings1" data-toggle="tab"><?php _e('Other Settings', 'gmLang'); ?></a></li>
 
 
34
  </ul>
35
  <div class="tab-content" style="padding-top:21px;">
36
  <fieldset id="gmedia_premium" class="tab-pane active">
37
  <p><?php _e('Enter License Key to remove backlink label from premium gallery modules.') ?></p>
 
38
  <div class="row">
39
  <div class="form-group col-xs-5">
40
- <label><?php _e( 'License Key', 'gmLang' ) ?>: <?php if(isset($gmGallery->options['license_name'])){ echo '<em>'.$gmGallery->options['license_name'].'</em>'; } ?></label>
41
- <input type="text" name="set[license_key]" id="license_key" class="form-control input-sm" value="<?php if(isset($gmGallery->options['license_key'])){ echo $gmGallery->options['license_key']; } ?>"/>
 
 
 
 
42
  <input type="hidden" name="set[license_name]" id="license_name" value="<?php echo $gmGallery->options['license_name']; ?>"/>
43
  <input type="hidden" name="set[license_key2]" id="license_key2" value="<?php echo $gmGallery->options['license_key2']; ?>"/>
44
  </div>
@@ -48,23 +55,144 @@ function gmSettings() {
48
  </div>
49
  </div>
50
  </fieldset>
51
- <fieldset id="gmedia_settings1" class="tab-pane">
52
- <div class="form-group">
53
- <label><?php _e( 'Delete uploaded files when delete (uninstall) plugin?', 'gmLang' ) ?>:</label>
54
- <div class="checkbox" style="margin:0;">
55
- <input type="hidden" name="set[uninstall_dropfiles]" value="0"/>
56
- <label><input type="checkbox" name="set[uninstall_dropfiles]" value="1" <?php checked($gmGallery->options['uninstall_dropfiles'], '1'); ?> /> <?php _e('delete', 'gmLang'); ?></label>
57
- <p class="help-block"><?php _e('Note: Database tables will be deleted anyway', 'gmLang'); ?></p>
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
58
  </div>
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
59
  </div>
60
  <div class="form-group">
61
- <label><?php _e( 'Forbid theme to format Gmedia shortcode\'s content', 'gmLang' ) ?>:</label>
 
62
  <div class="checkbox" style="margin:0;">
63
  <input type="hidden" name="set[shortcode_raw]" value="0"/>
64
- <label><input type="checkbox" name="set[shortcode_raw]" value="1" <?php checked($gmGallery->options['shortcode_raw'], '1'); ?> /> <?php _e('Raw output for Gmedia Shortcode', 'gmLang'); ?></label>
 
 
65
  <p class="help-block"><?php _e('Some themes reformat shortcodes and break it functionality (mostly when you add description to images). Turning this on should solve this problem.', 'gmLang'); ?></p>
66
  </div>
67
  </div>
 
 
 
 
 
 
 
 
68
  <p><?php _e('Under constraction...') ?></p>
69
 
70
  <?php
@@ -73,9 +201,9 @@ function gmSettings() {
73
  $gmedia = $wpdb->get_results("SELECT * FROM {$wpdb->prefix}gmedia");
74
  $terms = $wpdb->get_results("SELECT * FROM {$wpdb->prefix}gmedia_term");
75
  $relation = $wpdb->get_results("SELECT * FROM {$wpdb->prefix}gmedia_term_relationships");
76
- $images['grand-media'] = glob($gmCore->upload['path'].'/*', GLOB_NOSORT);
77
- $images['images'] = glob($gmCore->upload['path'].'/image/*', GLOB_NOSORT);
78
- $images['thumbs'] = glob($gmCore->upload['path'].'/thumb/*', GLOB_NOSORT);
79
  echo '<pre style="max-height:400px; overflow:auto;">' . print_r($gmedia, true) . '</pre>';
80
  echo '<pre style="max-height:400px; overflow:auto;">' . print_r($images, true) . '</pre>';
81
  echo '<pre style="max-height:400px; overflow:auto;">' . print_r($terms, true) . '</pre>';
1
  <?php
2
+ if(preg_match('#' . basename(__FILE__) . '#', $_SERVER['PHP_SELF'])){
3
+ die('You are not allowed to call this page directly.');
4
  }
5
 
6
  /**
8
  *
9
  * @return mixed content
10
  */
11
+ function gmSettings(){
12
+ global $gmDB, $gmCore, $gmGallery;
13
 
14
  ?>
15
 
30
  <div class="tabable tabs-left">
31
  <ul class="nav nav-tabs" style="padding:10px 0;">
32
  <li class="active"><a href="#gmedia_premium" data-toggle="tab"><?php _e('Premium Settings', 'gmLang'); ?></a></li>
33
+ <?php if(current_user_can('manage_options')){ ?><li>
34
+ <a href="#gmedia_settings1" data-toggle="tab"><?php _e('Roles/Capabilities Manager', 'gmLang'); ?></a></li><?php } ?>
35
+ <li><a href="#gmedia_settings2" data-toggle="tab"><?php _e('Other Settings', 'gmLang'); ?></a></li>
36
  </ul>
37
  <div class="tab-content" style="padding-top:21px;">
38
  <fieldset id="gmedia_premium" class="tab-pane active">
39
  <p><?php _e('Enter License Key to remove backlink label from premium gallery modules.') ?></p>
40
+
41
  <div class="row">
42
  <div class="form-group col-xs-5">
43
+ <label><?php _e('License Key', 'gmLang') ?>: <?php if(isset($gmGallery->options['license_name'])){
44
+ echo '<em>' . $gmGallery->options['license_name'] . '</em>';
45
+ } ?></label>
46
+ <input type="text" name="set[license_key]" id="license_key" class="form-control input-sm" value="<?php if(isset($gmGallery->options['license_key'])){
47
+ echo $gmGallery->options['license_key'];
48
+ } ?>"/>
49
  <input type="hidden" name="set[license_name]" id="license_name" value="<?php echo $gmGallery->options['license_name']; ?>"/>
50
  <input type="hidden" name="set[license_key2]" id="license_key2" value="<?php echo $gmGallery->options['license_key2']; ?>"/>
51
  </div>
55
  </div>
56
  </div>
57
  </fieldset>
58
+ <?php if(current_user_can('manage_options')){ ?>
59
+ <fieldset id="gmedia_settings1" class="tab-pane">
60
+ <p><?php _e('Select the lowest role which should be able to access the follow capabilities. Gmedia Gallery supports the standard roles from WordPress.', 'gmLang'); ?></p>
61
+
62
+ <div class="form-group">
63
+ <label><?php _e('Gmedia Library', 'gmLang') ?>:</label>
64
+ <select name="capability[gmedia_library]" class="form-control input-sm"><?php wp_dropdown_roles($gmDB->get_role('gmedia_library')); ?></select>
65
+
66
+ <p class="help-block"><?php _e('Who can view Gmedia Gallery admin pages', 'gmLang'); ?></p>
67
+ </div>
68
+ <hr/>
69
+
70
+ <div class="form-group">
71
+ <label><?php _e('Edit Media', 'gmLang') ?>:</label>
72
+ <select name="capability[gmedia_edit_media]" class="form-control input-sm"><?php wp_dropdown_roles($gmDB->get_role('gmedia_edit_media')); ?></select>
73
+
74
+ <p class="help-block"><?php _e('Who can edit media title, description and other properties of uploaded files', 'gmLang'); ?></p>
75
+ </div>
76
+ <div class="form-group">
77
+ <label><?php _e('Delete Media', 'gmLang') ?>:</label>
78
+ <select name="capability[gmedia_delete_media]" class="form-control input-sm"><?php wp_dropdown_roles($gmDB->get_role('gmedia_delete_media')); ?></select>
79
+
80
+ <p class="help-block"><?php _e('Who can delete uploaded files from Gmedia Library', 'gmLang'); ?></p>
81
+ </div>
82
+ <div class="form-group">
83
+ <label><?php _e('Show Others Media', 'gmLang') ?>:</label>
84
+ <select name="capability[gmedia_show_others_media]" class="form-control input-sm"><?php wp_dropdown_roles($gmDB->get_role('gmedia_show_others_media')); ?></select>
85
+
86
+ <p class="help-block"><?php _e('Who can see files uploaded by other users', 'gmLang'); ?></p>
87
+ </div>
88
+ <div class="col-xs-offset-1">
89
+ <div class="form-group">
90
+ <label><?php _e('Edit Others Media', 'gmLang') ?>:</label>
91
+ <select name="capability[gmedia_edit_others_media]" class="form-control input-sm"><?php wp_dropdown_roles($gmDB->get_role('gmedia_edit_others_media')); ?></select>
92
+
93
+ <p class="help-block"><?php _e('Who can edit files, albums/tags and galleries of other users', 'gmLang'); ?></p>
94
+ </div>
95
+ <div class="form-group">
96
+ <label><?php _e('Delete Others Media', 'gmLang') ?>:</label>
97
+ <select name="capability[gmedia_delete_others_media]" class="form-control input-sm"><?php wp_dropdown_roles($gmDB->get_role('gmedia_delete_others_media')); ?></select>
98
+
99
+ <p class="help-block"><?php _e('Who can delete files, albums/tags and galleries of other users', 'gmLang'); ?></p>
100
+ </div>
101
+ </div>
102
+
103
+ <div class="form-group">
104
+ <label><?php _e('Upload Media Files', 'gmLang') ?>:</label>
105
+ <select name="capability[gmedia_upload]" class="form-control input-sm"><?php wp_dropdown_roles($gmDB->get_role('gmedia_upload')); ?></select>
106
+
107
+ <p class="help-block"><?php _e('Who can upload files to Gmedia Library', 'gmLang'); ?></p>
108
+ </div>
109
+ <div class="col-xs-offset-1">
110
+ <div class="form-group">
111
+ <label><?php _e('Import Media Files', 'gmLang') ?>:</label>
112
+ <select name="capability[gmedia_import]" class="form-control input-sm"><?php wp_dropdown_roles($gmDB->get_role('gmedia_import')); ?></select>
113
+
114
+ <p class="help-block"><?php _e('Who can import files to Gmedia Library', 'gmLang'); ?></p>
115
+ </div>
116
  </div>
117
+
118
+ <div class="form-group">
119
+ <label><?php _e('Albums, Tags...', 'gmLang') ?>:</label>
120
+ <select name="capability[gmedia_terms]" class="form-control input-sm"><?php wp_dropdown_roles($gmDB->get_role('gmedia_terms')); ?></select>
121
+
122
+ <p class="help-block"><?php _e('Who can assign available terms to media files', 'gmLang'); ?></p>
123
+ </div>
124
+ <div class="col-xs-offset-1">
125
+ <div class="form-group">
126
+ <label><?php _e('Manage Albums', 'gmLang') ?>:</label>
127
+ <select name="capability[gmedia_album_manage]" class="form-control input-sm"><?php wp_dropdown_roles($gmDB->get_role('gmedia_album_manage')); ?></select>
128
+
129
+ <p class="help-block"><?php _e('Who can add and edit own albums', 'gmLang'); ?></p>
130
+ </div>
131
+ <div class="form-group">
132
+ <label><?php _e('Manage Tags', 'gmLang') ?>:</label>
133
+ <select name="capability[gmedia_tag_manage]" class="form-control input-sm"><?php wp_dropdown_roles($gmDB->get_role('gmedia_tag_manage')); ?></select>
134
+
135
+ <p class="help-block"><?php _e('Who can add and edit tags', 'gmLang'); ?></p>
136
+ </div>
137
+ <div class="form-group">
138
+ <label><?php _e('Delete Terms', 'gmLang') ?>:</label>
139
+ <select name="capability[gmedia_terms_delete]" class="form-control input-sm"><?php wp_dropdown_roles($gmDB->get_role('gmedia_terms_delete')); ?></select>
140
+
141
+ <p class="help-block"><?php _e('Who can delete own albums or all terms if allowed "Delete Others Media"', 'gmLang'); ?></p>
142
+ </div>
143
+ </div>
144
+
145
+ <div class="form-group">
146
+ <label><?php _e('Galleries', 'gmLang') ?>:</label>
147
+ <select name="capability[gmedia_gallery_manage]" class="form-control input-sm"><?php wp_dropdown_roles($gmDB->get_role('gmedia_gallery_manage')); ?></select>
148
+
149
+ <p class="help-block"><?php _e('Who can add, edit and delete own galleries', 'gmLang'); ?></p>
150
+ </div>
151
+
152
+ <div class="form-group">
153
+ <label><?php _e('Modules', 'gmLang') ?>:</label>
154
+ <select name="capability[gmedia_module_manage]" class="form-control input-sm"><?php wp_dropdown_roles($gmDB->get_role('gmedia_module_manage')); ?></select>
155
+
156
+ <p class="help-block"><?php _e('Who can manage modules', 'gmLang'); ?></p>
157
+ </div>
158
+
159
+ <div class="form-group">
160
+ <label><?php _e('Settings', 'gmLang') ?>:</label>
161
+ <select name="capability[gmedia_settings]" class="form-control input-sm"><?php wp_dropdown_roles($gmDB->get_role('gmedia_settings')); ?></select>
162
+
163
+ <p class="help-block"><?php _e('Who can change settings. Note: Capabilites can be changed only by administrator', 'gmLang'); ?></p>
164
+ </div>
165
+
166
+ </fieldset>
167
+ <?php } ?>
168
+ <fieldset id="gmedia_settings2" class="tab-pane">
169
+ <div class="form-group">
170
+ <label><?php _e('When delete (uninstall) plugin', 'gmLang') ?>:</label>
171
+ <select name="set[uninstall_dropdata]" class="form-control input-sm">
172
+ <option value="all" <?php selected($gmGallery->options['uninstall_dropdata'], 'all'); ?>><?php _e('Delete database and all uploaded files', 'gmLang'); ?></option>
173
+ <option value="db" <?php selected($gmGallery->options['uninstall_dropdata'], 'db'); ?>><?php _e('Delete database only and leave uploaded files', 'gmLang'); ?></option>
174
+ <option value="none" <?php selected($gmGallery->options['uninstall_dropdata'], 'none'); ?>><?php _e('Do not delete database and uploaded files', 'gmLang'); ?></option>
175
+ </select>
176
  </div>
177
  <div class="form-group">
178
+ <label><?php _e('Forbid theme to format Gmedia shortcode\'s content', 'gmLang') ?>:</label>
179
+
180
  <div class="checkbox" style="margin:0;">
181
  <input type="hidden" name="set[shortcode_raw]" value="0"/>
182
+ <label><input type="checkbox" name="set[shortcode_raw]" value="1" <?php checked($gmGallery->options['shortcode_raw'], '1'); ?> /> <?php _e('Raw output for Gmedia Shortcode', 'gmLang'); ?>
183
+ </label>
184
+
185
  <p class="help-block"><?php _e('Some themes reformat shortcodes and break it functionality (mostly when you add description to images). Turning this on should solve this problem.', 'gmLang'); ?></p>
186
  </div>
187
  </div>
188
+ <?php
189
+ if ( (function_exists('memory_get_usage')) && (ini_get('memory_limit')) ) {
190
+ $memory_limit = ini_get('memory_limit');
191
+ $memory_usage = memory_get_usage();
192
+ echo '<p>' . __('Memory Limit: ', 'gmLang') . $memory_limit . '</p>';
193
+ echo '<p>' . __('Memory Used: ', 'gmLang') . $memory_usage . '</p>';
194
+ }
195
+ ?>
196
  <p><?php _e('Under constraction...') ?></p>
197
 
198
  <?php
201
  $gmedia = $wpdb->get_results("SELECT * FROM {$wpdb->prefix}gmedia");
202
  $terms = $wpdb->get_results("SELECT * FROM {$wpdb->prefix}gmedia_term");
203
  $relation = $wpdb->get_results("SELECT * FROM {$wpdb->prefix}gmedia_term_relationships");
204
+ $images['grand-media'] = glob($gmCore->upload['path'] . '/*', GLOB_NOSORT);
205
+ $images['images'] = glob($gmCore->upload['path'] . '/image/*', GLOB_NOSORT);
206
+ $images['thumbs'] = glob($gmCore->upload['path'] . '/thumb/*', GLOB_NOSORT);
207
  echo '<pre style="max-height:400px; overflow:auto;">' . print_r($gmedia, true) . '</pre>';
208
  echo '<pre style="max-height:400px; overflow:auto;">' . print_r($images, true) . '</pre>';
209
  echo '<pre style="max-height:400px; overflow:auto;">' . print_r($terms, true) . '</pre>';
admin/terms.php CHANGED
@@ -1,6 +1,6 @@
1
  <?php
2
- if(preg_match('#' . basename(__FILE__) . '#', $_SERVER['PHP_SELF'])){
3
- die('You are not allowed to call this page directly.');
4
  }
5
 
6
  /**
@@ -8,405 +8,591 @@ if(preg_match('#' . basename(__FILE__) . '#', $_SERVER['PHP_SELF'])){
8
  *
9
  * @return mixed content
10
  */
11
- function gmediaTerms(){
12
- global $user_ID, $gmDB, $gmCore, $gmGallery, $gmProcessor;
13
-
14
- $url = add_query_arg(array('page' => $gmProcessor->page), admin_url('admin.php'));
15
-
16
- /* todo: per_page options for gmedia_terms
17
- $gm_screen_options = get_user_meta($user_ID, 'gm_screen_options', true);
18
- if(!is_array($gm_screen_options)){
19
- $gm_screen_options = array();
20
- }
21
- $gm_screen_options = array_merge($gmGallery->options['gm_screen_options'], $gm_screen_options);
22
- */
23
-
24
- $filter = ('selected' == $gmCore->_req('filter'))? $gmProcessor->selected_items : null;
25
- $args = array('orderby' => $gmCore->_get('orderby', 'name'), 'order' => $gmCore->_get('order', 'ASC'),
26
- 'search' => $gmCore->_get('s', ''), 'number' => $gmCore->_get('number', 30),
27
- 'hide_empty' => $gmCore->_get('hide_empty', 0), 'page' => $gmCore->_get('pager', 1),
28
- 'include' => $filter);
29
- $args['offset'] = ($args['page'] - 1) * $args['number'];
30
-
31
- $taxonomy = $gmCore->_get('term', 'gmedia_album');
32
- if('gmedia_category' == $taxonomy){
33
- $args['number'] = '';
34
- $args['offset'] = '';
35
- $args['search'] = '';
36
- $args['include'] = null;
37
- }
38
-
39
- $gmediaTerms = $gmDB->get_terms($taxonomy, $args);
40
-
41
- ?>
42
- <div class="panel panel-default">
43
- <div class="panel-heading clearfix">
44
-
45
- <?php if('gmedia_category' != $taxonomy){ ?>
46
- <form class="form-inline gmedia-search-form" role="search" method="get">
47
- <div class="form-group">
48
- <input type="hidden" name="page" value="<?php echo $gmProcessor->page; ?>"/>
49
- <input type="hidden" name="term" value="<?php echo $taxonomy; ?>"/>
50
- <input id="gmedia-search" class="form-control input-sm" type="text" name="s" placeholder="<?php _e('Search...', 'gmLang'); ?>" value="<?php echo $gmCore->_get('s', ''); ?>"/>
51
- </div>
52
- <button type="submit" class="btn btn-default input-sm"><span class="glyphicon glyphicon-search"></span></button>
53
- </form>
54
- <?php echo $gmDB->query_pager(); ?>
55
- <?php } ?>
56
-
57
- <div class="btn-toolbar pull-left">
58
- <?php if('gmedia_category' != $taxonomy){ ?>
59
- <div class="btn-group gm-checkgroup" id="cb_global-btn">
60
- <span class="btn btn-default active"><input class="doaction" id="cb_global" data-group="cb_term-object" type="checkbox"/></span>
61
- <button type="button" class="btn btn-default dropdown-toggle" data-toggle="dropdown">
62
- <span class="caret"></span>
63
- <span class="sr-only"><?php _e('Toggle Dropdown', 'gmLang'); ?></span>
64
- </button>
65
- <ul class="dropdown-menu" role="menu">
66
- <li><a data-select="total" href="#"><?php _e('All', 'gmLang'); ?></a></li>
67
- <li><a data-select="none" href="#"><?php _e('None', 'gmLang'); ?></a></li>
68
- <li class="divider"></li>
69
- <li><a data-select="reverse" href="#" title="<?php _e('Reverse only visible items', 'gmLang'); ?>"><?php _e('Reverse', 'gmLang'); ?></a></li>
70
- </ul>
71
- </div>
72
- <?php } ?>
73
-
74
- <div class="btn-group" style="margin-right:20px;">
75
- <?php $btn_color = $gmDB->filter? 'warning' : 'primary';
76
- $btn_active_title = $gmDB->filter? '" title="'.__('Reset Filter', 'gmLang') : ''; ?>
77
- <a class="btn btn<?php echo ('gmedia_album' == $taxonomy)? "-$btn_color active".$btn_active_title : '-default'; ?>" href="<?php echo add_query_arg(array('term' => 'gmedia_album'), $url); ?>"><?php _e('Albums', 'gmLang'); ?></a>
78
- <a class="btn btn<?php echo ('gmedia_tag' == $taxonomy)? "-$btn_color active".$btn_active_title : '-default'; ?>" href="<?php echo add_query_arg(array('term' => 'gmedia_tag'), $url); ?>"><?php _e('Tags', 'gmLang'); ?></a>
79
- <a class="btn btn<?php echo ('gmedia_category' == $taxonomy)? "-primary active" : '-default'; ?>" href="<?php echo add_query_arg(array('term' => 'gmedia_category'), $url); ?>"><?php _e('Categories', 'gmLang'); ?></a>
80
- </div>
81
-
82
- <?php if('gmedia_category' != $taxonomy){ ?>
83
- <div class="btn-group">
84
- <a class="btn btn-default" href="#"><?php _e('Action', 'gmLang'); ?></a>
85
- <button type="button" class="btn btn-default dropdown-toggle" data-toggle="dropdown">
86
- <span class="caret"></span>
87
- <span class="sr-only"><?php _e('Toggle Dropdown', 'gmLang'); ?></span>
88
- </button>
89
- <?php
90
- $rel_selected_show = 'rel-selected-show';
91
- $rel_selected_hide = 'rel-selected-hide';
92
- ?>
93
- <ul class="dropdown-menu" role="menu">
94
- <li class="dropdown-header <?php echo $rel_selected_hide; ?>"><span><?php _e("Select items to see more actions", "gmLang"); ?></span></li>
95
- <li class="<?php echo $rel_selected_show; ?>"><a href="<?php echo wp_nonce_url($gmCore->get_admin_url(array('delete' => 'selected'), array('filter')), 'gmedia_delete') ?>" class="gmedia-delete" data-confirm="<?php _e("You are about to permanently delete the selected items.\n\r'Cancel' to stop, 'OK' to delete.", "gmLang"); ?>"><?php _e('Delete Selected Items', 'gmLang'); ?></a></li>
96
- <?php do_action('gmedia_term_action_list'); ?>
97
- </ul>
98
- </div>
99
-
100
- <form class="btn-group" id="gm-selected-btn" name="gm-selected-form" action="<?php echo add_query_arg(array('term' => $taxonomy, 'filter' => 'selected'), $url); ?>" method="post">
101
- <button type="submit" class="btn btn<?php echo ('selected' == $gmCore->_req('filter'))? '-success' : '-info' ?>"><?php printf(__('%s selected', 'gmLang'), '<span id="gm-selected-qty">' . count($gmProcessor->selected_items) . '</span>'); ?></button>
102
- <button type="button" class="btn btn-info dropdown-toggle" data-toggle="dropdown"><span class="caret"></span> <span class="sr-only"><?php _e('Toggle Dropdown', 'gmLang'); ?></span></button>
103
- <input type="hidden" id="gm-selected" data-userid="<?php echo $user_ID; ?>" data-key="<?php echo $taxonomy; ?>" name="selected_items" value="<?php echo implode(',', $gmProcessor->selected_items); ?>"/>
104
- <ul class="dropdown-menu" role="menu">
105
- <li><a id="gm-selected-show" href="#show"><?php _e('Show only selected items', 'gmLang'); ?></a></li>
106
- <li><a id="gm-selected-clear" href="#clear"><?php _e('Clear selected items', 'gmLang'); ?></a></li>
107
- </ul>
108
- </form>
109
- <?php } ?>
110
-
111
- </div>
112
- </div>
113
-
114
-
115
- <?php if('gmedia_album' == $taxonomy){ ?>
116
- <form method="post" id="gmedia-edit-term" name="gmAddTerms" class="panel-body" style="padding-bottom:0; border-bottom:1px solid #ddd;">
117
- <div class="row">
118
- <div class="col-xs-6">
119
- <div class="form-group">
120
- <label><?php _e('Name', 'gmLang'); ?></label>
121
- <input type="text" class="form-control input-sm" name="term[name]" placeholder="<?php _e('Album Name', 'gmLang'); ?>" required/>
122
- </div>
123
- <div class="form-group">
124
- <label><?php _e('Description', 'gmLang'); ?></label>
125
- <textarea class="form-control input-sm" style="height:53px;" rows="2" name="term[description]"></textarea>
126
- </div>
127
- </div>
128
- <div class="col-xs-6">
129
- <div class="form-group row">
130
- <div class="col-xs-6">
131
- <label><?php _e('Order gmedia', 'gmLang'); ?></label>
132
- <select name="term[orderby]" class="form-control input-sm">
133
- <option value="custom"><?php _e('user defined', 'gmLang'); ?></option>
134
- <option selected="selected" value="ID"><?php _e('by ID', 'gmLang'); ?></option>
135
- <option value="title"><?php _e('by title', 'gmLang'); ?></option>
136
- <option value="date"><?php _e('by date', 'gmLang'); ?></option>
137
- <option value="modified"><?php _e('by last modified date', 'gmLang'); ?></option>
138
- <option value="rand"><?php _e('Random', 'gmLang'); ?></option>
139
- </select>
140
- </div>
141
- <div class="col-xs-6">
142
- <label><?php _e('Sort order', 'gmLang'); ?></label>
143
- <select name="term[order]" class="form-control input-sm">
144
- <option value="ASC"><?php _e('ASC', 'gmLang'); ?></option>
145
- <option selected="selected" value="DESC"><?php _e('DESC', 'gmLang'); ?></option>
146
- </select>
147
- </div>
148
- </div>
149
- <div class="row">
150
- <div class="form-group col-xs-6">
151
- <label><?php _e('Status', 'gmLang'); ?></label>
152
- <select name="term[status]" class="form-control input-sm">
153
- <option selected="selected" value="public"><?php _e('Public', 'gmLang'); ?></option>
154
- <option value="private"><?php _e('Private', 'gmLang'); ?></option>
155
- <option value="draft"><?php _e('Draft', 'gmLang'); ?></option>
156
- </select>
157
- </div>
158
- <div class="form-group col-xs-6">
159
- <label>&nbsp;</label>
160
- <?php
161
- wp_original_referer_field(true, 'previous');
162
- wp_nonce_field('GmediaTerms', 'term_save_wpnonce');
163
- ?>
164
- <input type="hidden" name="term[taxonomy]" value="gmedia_album"/>
165
- <button style="display:block" type="submit" class="btn btn-primary btn-sm" name="gmedia_album_save"><?php _e('Add New Album', 'gmLang'); ?></button>
166
- </div>
167
- </div>
168
- </div>
169
- </div>
170
- </form>
171
- <form class="list-group" id="gm-list-table" style="margin-bottom:4px;">
172
- <?php
173
- if(count($gmediaTerms)){
174
- foreach($gmediaTerms as $item){
175
- $termItems = array();
176
- $per_page = 10;
177
- if($item->count){
178
- $args = array('no_found_rows' => true, 'per_page' => $per_page, 'album__in' => array($item->term_id));
179
- $termItems = $gmDB->get_gmedias($args);
180
- }
181
- $is_selected = in_array($item->term_id, $gmProcessor->selected_items)? true : false;
182
- ?>
183
- <div class="list-group-item term-list-item">
184
- <div class="row cb_term-object">
185
- <div class="term_id">#<?php echo $item->term_id; ?></div>
186
- <div class="col-xs-5 term-label">
187
- <div class="checkbox">
188
- <input name="doaction[]" type="checkbox"<?php echo $is_selected? ' checked="checked"' : ''; ?> value="<?php echo $item->term_id; ?>"/>
189
- <a href="<?php echo add_query_arg(array('edit_album' => $item->term_id), $url); ?>"><?php echo esc_html($item->name); ?></a>
190
- <?php if($item->count){ ?>
191
- <a href="<?php echo $gmCore->get_admin_url(array('page' => 'GrandMedia', 'alb' => $item->term_id), array(), true); ?>" class="badge pull-right"><?php echo $item->count; ?></a>
192
- <?php } else{ ?>
193
- <span class="badge pull-right"><?php echo $item->count; ?></span>
194
- <?php } ?>
195
- </div>
196
- </div>
197
- <div class="col-xs-7 term-images">
198
- <?php if(!empty($termItems)){
199
- foreach($termItems as $i){
200
- ?>
201
- <img style="z-index:<?php echo $per_page--; ?>;" src="<?php echo $gmCore->gm_get_media_image($i, 'thumb', false); ?>" alt="<?php echo $i->ID; ?>" title="<?php echo esc_attr($i->title); ?>"/>
202
- <?php
203
- }
204
- }
205
- if(count($termItems) < $item->count){
206
- echo '...';
207
- }
208
- ?>
209
- </div>
210
- </div>
211
- <?php if(!empty($item->description)){ ?>
212
- <div class="term-description"><?php echo esc_html($item->description); ?></div>
213
- <?php } ?>
214
- </div>
215
- <?php
216
- }
217
- } else{
218
- ?>
219
- <div class="list-group-item">
220
- <div class="well well-lg text-center">
221
- <h4><?php _e('No items to show.', 'gmLang'); ?></h4>
222
- </div>
223
- </div>
224
- <?php } ?>
225
- <?php
226
- wp_original_referer_field(true, 'previous');
227
- wp_nonce_field('GmediaTerms');
228
- ?>
229
- </form>
230
-
231
-
232
- <?php } elseif('gmedia_tag' == $taxonomy){ ?>
233
- <form method="post" id="gmedia-edit-term" name="gmAddTerms" class="panel-body" style="padding-bottom:0; border-bottom:1px solid #ddd;">
234
- <div class="row">
235
- <div class="form-group col-xs-9">
236
- <label><?php _e('Tags', 'gmLang'); ?> <small class="text-muted">(<?php _e('you can type multiple tags separated by comma') ?>)</small></label>
237
- <input type="text" class="form-control input-sm" name="term[name]" placeholder="<?php _e('Tag Names', 'gmLang'); ?>" required/>
238
- </div>
239
- <div class="col-xs-3" style="padding-top:24px;">
240
- <?php
241
- wp_original_referer_field(true, 'previous');
242
- wp_nonce_field('GmediaTerms', 'term_save_wpnonce');
243
- ?>
244
- <input type="hidden" name="term[taxonomy]" value="gmedia_tag"/>
245
- <button type="submit" class="btn btn-primary btn-sm" name="gmedia_tag_add"><?php _e('Add New Tags', 'gmLang'); ?></button>
246
- </div>
247
- </div>
248
- </form>
249
- <form class="list-group" id="gm-list-table" style="margin-bottom:4px;">
250
- <?php
251
- if(count($gmediaTerms)){
252
- foreach($gmediaTerms as $item){
253
- $termItems = array();
254
- $per_page = 5;
255
- if($item->count){
256
- $args = array('no_found_rows' => true, 'per_page' => $per_page, 'tag_id' => $item->term_id);
257
- $termItems = $gmDB->get_gmedias($args);
258
- }
259
- $is_selected = in_array($item->term_id, $gmProcessor->selected_items)? true : false;
260
- ?>
261
- <div class="list-group-item term-list-item">
262
- <div class="row cb_term-object" id="tag_<?php echo $item->term_id; ?>">
263
- <div class="term_id">#<?php echo $item->term_id; ?></div>
264
- <div class="col-xs-5 term-label">
265
- <div class="checkbox">
266
- <input name="doaction[]" type="checkbox"<?php echo $is_selected? ' checked="checked"' : ''; ?> value="<?php echo $item->term_id; ?>"/>
267
- <a class="edit_tag_link" href="#tag_<?php echo $item->term_id; ?>"><?php echo esc_html($item->name); ?></a>
268
- <span class="edit_tag_form" style="display:none;"><input class="edit_tag_input" type="text" data-tag_id="<?php echo $item->term_id; ?>" name="gmedia_tag_name[<?php echo $item->term_id; ?>]" value="<?php echo esc_attr($item->name); ?>" placeholder="<?php echo esc_attr($item->name); ?>"/><a href="#tag_<?php echo $item->term_id; ?>" class="edit_tag_save btn btn-link glyphicon glyphicon-pencil"></a></span>
269
- <?php if($item->count){ ?>
270
- <a href="<?php echo $gmCore->get_admin_url(array('page' => 'GrandMedia', 'tag_id' => $item->term_id), array(), true); ?>" class="badge pull-right"><?php echo $item->count; ?></a>
271
- <?php } else{ ?>
272
- <span class="badge pull-right"><?php echo $item->count; ?></span>
273
- <?php } ?>
274
- </div>
275
- </div>
276
- <div class="col-xs-7 term-images">
277
- <?php if(!empty($termItems)){
278
- foreach($termItems as $i){
279
- ?>
280
- <img style="z-index:<?php echo $per_page--; ?>;" src="<?php echo $gmCore->gm_get_media_image($i, 'thumb', false); ?>" alt="<?php echo $i->ID; ?>" title="<?php echo esc_attr($i->title); ?>"/>
281
- <?php
282
- }
283
- }
284
- if(count($termItems) < $item->count){
285
- echo '...';
286
- }
287
- ?>
288
- </div>
289
- </div>
290
- </div>
291
- <?php } ?>
292
- <script type="text/javascript">
293
- jQuery(function($){
294
- $('#gm-list-table').data('edit',false);
295
- $('input.edit_tag_input').keypress(function(e){
296
- var charCode = e.charCode || e.keyCode || e.which;
297
- if (charCode == 13) {
298
- e.preventDefault();
299
- $(this).next().click();
300
- }
301
- });
302
- $('.edit_tag_link').click(function(e){
303
- e.preventDefault();
304
- var id = $(this).attr('href');
305
- $(this).hide();
306
- $(id).find('.edit_tag_form').show().find('input').focus();
307
- $('#gm-list-table').data('edit',true);
308
- });
309
- $('.edit_tag_save').click(function(e){
310
- var id = $(this).attr('href');
311
- var inp = $(id).find('.edit_tag_form input');
312
- var new_tag_name = $.trim(inp.val());
313
- if(('' === new_tag_name) || $.isNumeric()){
314
- inp.val(inp.attr('placeholder'));
315
- $(id).find('.edit_tag_form').hide();
316
- $(id).find('.edit_tag_link').show();
317
- return;
318
- }
319
- var post_data = {
320
- action: 'gmedia_tag_edit', tag_id: inp.data('tag_id'), tag_name: new_tag_name, _wpnonce: $('#_wpnonce').val()
321
- };
322
- $.post(ajaxurl, post_data, function(data, textStatus, jqXHR){
323
- console.log(data);
324
- //new_tag_name = new_tag_name.replace(/&/g, '&amp;').replace(/"/g, '&quot;').replace(/</g, '&lt;').replace(/>/g, '&gt;');
325
- inp.attr('placeholder', new_tag_name);
326
- $(id).find('.edit_tag_form').hide();
327
- $(id).find('.edit_tag_link').text(new_tag_name).show();
328
- });
329
- });
330
- $('.edit_tag_input').blur(function(e){
331
- var t = $(this);
332
- var id = t.data('tag_id');
333
- t.val(t.attr('placeholder'));
334
- $('#tag_'+id).find('.edit_tag_form').hide();
335
- $('#tag_'+id).find('.edit_tag_link').show();
336
- });
337
- });
338
- </script>
339
- <?php } else{
340
- ?>
341
- <div class="list-group-item">
342
- <div class="well well-lg text-center">
343
- <h4><?php _e('No items to show.', 'gmLang'); ?></h4>
344
- </div>
345
- </div>
346
- <?php } ?>
347
- <?php
348
- wp_original_referer_field(true, 'previous');
349
- wp_nonce_field('GmediaTerms');
350
- ?>
351
- </form>
352
-
353
-
354
- <?php } elseif('gmedia_category' == $taxonomy){ ?>
355
- <div class="panel-body"></div>
356
- <div class="list-group" id="gm-list-table" style="margin-bottom:4px;">
357
- <?php
358
- $gmediaCategories = $gmGallery->options['taxonomies']['gmedia_category'];
359
- foreach($gmediaTerms as $item){
360
- $cat[$item->name] = $item;
361
- }
362
- unset($gmediaTerms);
363
-
364
- foreach($gmediaCategories as $name => $title){
365
- $termItems = array();
366
- $per_page = 10;
367
- if(isset($cat[$name])){
368
- $count = $cat[$name]->count;
369
- $term_id = $cat[$name]->term_id;
370
- if($count){
371
- $args = array('no_found_rows' => true, 'per_page' => $per_page, 'category__in' => array($term_id));
372
- $termItems = $gmDB->get_gmedias($args);
373
- }
374
- } else {
375
- $count = 0;
376
- $term_id = '##';
377
- }
378
- ?>
379
- <div class="list-group-item term-list-item">
380
- <div class="row cb_term-object">
381
- <div class="term_id">#<?php echo $term_id; ?></div>
382
- <div class="col-xs-5" style="padding-top:10px; padding-bottom:10px;">
383
- <?php echo esc_html($title); ?>
384
- <?php if($count){ ?>
385
- <a href="<?php echo $gmCore->get_admin_url(array('page' => 'GrandMedia', 'cat' => $term_id), array(), true); ?>" class="badge pull-right"><?php echo $count; ?></a>
386
- <?php } else{ ?>
387
- <span class="badge pull-right"><?php echo $count; ?></span>
388
- <?php } ?>
389
- </div>
390
- <div class="col-xs-7 term-images">
391
- <?php if(!empty($termItems)){
392
- foreach($termItems as $i){
393
- ?>
394
- <img style="z-index:<?php echo $per_page--; ?>;" src="<?php echo $gmCore->gm_get_media_image($i, 'thumb', false); ?>" alt="<?php echo $i->ID; ?>" title="<?php echo esc_attr($i->title); ?>"/>
395
- <?php
396
- }
397
- }
398
- if(count($termItems) < $count){
399
- echo '...';
400
- }
401
- ?>
402
- </div>
403
- </div>
404
- </div>
405
- <?php } ?>
406
- </div>
407
- <?php } ?>
408
-
409
- </div>
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
410
 
411
  <?php
412
  }
@@ -417,209 +603,283 @@ function gmediaTerms(){
417
  *
418
  * @return mixed content
419
  */
420
- function gmediaAlbumEdit(){
421
- global $gmDB, $gmCore, $gmProcessor;
422
-
423
- $url = add_query_arg(array('page' => $gmProcessor->page), admin_url('admin.php'));
424
-
425
- $taxonomy = 'gmedia_album';
426
- $term_id = $gmCore->_get('edit_album');
427
-
428
- $term = $gmDB->get_term($term_id, $taxonomy);
429
-
430
- if(!empty($term) && !is_wp_error($term)){
431
-
432
- $term_meta = $gmDB->get_metadata('gmedia_term', $term->term_id);
433
- $term_meta = array_map('reset', $term_meta);
434
- $term_meta = array_merge( array('orderby' => 'ID', 'order' => 'DESC'), $term_meta);
435
- $per_page = 30;
436
- $pager = '';
437
- $mousesort = ('drag-n-drop' === $gmCore->_get('sort'))? true : false;
438
-
439
- $termItems = array();
440
- if($term->count){
441
- $args = array('album__in' => $term->term_id, 'orderby' => $term_meta['orderby'], 'order' => $term_meta['order']);
442
- if($mousesort){
443
- $args = array_merge($args, array('nopaging' => 1));
444
- } else{
445
- $args = array_merge($args, array('per_page' => $per_page, 'page' => $gmCore->_get('pager', 1)));
446
- }
447
- $termItems = $gmDB->get_gmedias($args);
448
-
449
- if(!$mousesort){
450
- $pager = $gmDB->query_pager();
451
- }
452
- }
453
-
454
- ?>
455
- <div class="panel panel-default">
456
- <div class="panel-heading clearfix">
457
- <div class="btn-toolbar pull-left">
458
- <div class="btn-group" style="margin-right:20px;">
459
- <a class="btn btn-primary active" href="<?php echo add_query_arg(array('term' => 'gmedia_album'), $url); ?>"><?php _e('Albums', 'gmLang'); ?></a>
460
- <a class="btn btn-default" href="<?php echo add_query_arg(array('term' => 'gmedia_tag'), $url); ?>"><?php _e('Tags', 'gmLang'); ?></a>
461
- <a class="btn btn-default" href="<?php echo add_query_arg(array('term' => 'gmedia_category'), $url); ?>"><?php _e('Categories', 'gmLang'); ?></a>
462
- </div>
463
-
464
- <div class="btn-group">
465
- <a class="btn btn-default" href="#"><?php _e('Action', 'gmLang'); ?></a>
466
- <button type="button" class="btn btn-default dropdown-toggle" data-toggle="dropdown">
467
- <span class="caret"></span>
468
- <span class="sr-only"><?php _e('Toggle Dropdown', 'gmLang'); ?></span>
469
- </button>
470
- <ul class="dropdown-menu" role="menu">
471
- <?php if($mousesort){ ?>
472
- <li><a href="<?php echo $gmCore->get_admin_url(array(), array('sort')); ?>"><?php _e('Disable Drag and Drop Sorting', 'gmLang'); ?></a></li>
473
- <?php } else { ?>
474
- <li><a href="<?php echo $gmCore->get_admin_url(array('sort' => 'drag-n-drop'), array('pager')); ?>"><?php _e('Enable Drag and Drop Sorting', 'gmLang'); ?></a></li>
475
- <?php } ?>
476
- <li><a href="<?php echo add_query_arg(array('page' => 'GrandMedia', 'alb' => $term->term_id), admin_url('admin.php')); ?>"><?php _e('Show Album in Gmedia Library', 'gmLang'); ?></a></li>
477
- </ul>
478
- </div>
479
- </div>
480
-
481
- <?php echo $pager; ?>
482
-
483
- </div>
484
-
485
- <form method="post" id="gmedia-edit-term" name="gmEditTerm" class="panel-body">
486
- <h4 style="margin-top:0;"><?php _e('Edit Album'); ?>: <em><?php echo esc_html($term->name); ?></em></h4>
487
- <div class="row" style="border-bottom:1px solid #ddd; margin-bottom:15px;">
488
- <div class="col-xs-6">
489
- <div class="form-group">
490
- <label><?php _e('Name', 'gmLang'); ?></label>
491
- <input type="text" class="form-control input-sm" name="term[name]" value="<?php echo esc_attr($term->name); ?>" placeholder="<?php _e('Album Name', 'gmLang'); ?>" required/>
492
- </div>
493
- <div class="form-group">
494
- <label><?php _e('Description', 'gmLang'); ?></label>
495
- <textarea class="form-control input-sm" style="height:53px;" rows="2" name="term[description]"><?php echo $term->description; ?></textarea>
496
- </div>
497
- </div>
498
- <div class="col-xs-6">
499
- <div class="form-group row">
500
- <div class="col-xs-6">
501
- <label><?php _e('Order gmedia', 'gmLang'); ?></label>
502
- <select name="term[orderby]" class="form-control input-sm">
503
- <option value="custom"<?php selected($term_meta['orderby'], 'custom'); ?>><?php _e('user defined', 'gmLang'); ?></option>
504
- <option value="ID"<?php selected($term_meta['orderby'], 'ID'); ?>><?php _e('by ID', 'gmLang'); ?></option>
505
- <option value="title"<?php selected($term_meta['orderby'], 'title'); ?>><?php _e('by title', 'gmLang'); ?></option>
506
- <option value="date"<?php selected($term_meta['orderby'], 'date'); ?>><?php _e('by date', 'gmLang'); ?></option>
507
- <option value="modified"<?php selected($term_meta['orderby'], 'modified'); ?>><?php _e('by last modified date', 'gmLang'); ?></option>
508
- <option value="rand"<?php selected($term_meta['orderby'], 'rand'); ?>><?php _e('Random', 'gmLang'); ?></option>
509
- </select>
510
- </div>
511
- <div class="col-xs-6">
512
- <label><?php _e('Sort order', 'gmLang'); ?></label>
513
- <select name="term[order]" class="form-control input-sm">
514
- <option value="ASC"<?php selected($term_meta['order'], 'ASC'); ?>><?php _e('ASC', 'gmLang'); ?></option>
515
- <option value="DESC"<?php selected($term_meta['order'], 'DESC'); ?>><?php _e('DESC', 'gmLang'); ?></option>
516
- </select>
517
- </div>
518
- </div>
519
- <div class="row">
520
- <div class="form-group col-xs-6">
521
- <label><?php _e('Status', 'gmLang'); ?></label>
522
- <select name="term[status]" class="form-control input-sm">
523
- <option value="public"<?php selected($term->status, 'public'); ?>><?php _e('Public', 'gmLang'); ?></option>
524
- <?php /* ?>
525
- <option value="private"<?php selected($term->status, 'private'); ?>><?php _e('Private', 'gmLang'); ?></option>
526
- <option value="draft"<?php selected($term->status, 'draft'); ?>><?php _e('Draft', 'gmLang'); ?></option>
527
- <?php */ ?>
528
- </select>
529
- </div>
530
- <div class="form-group col-xs-6">
531
- <label><?php echo __('ID', 'gmLang').": {$term->term_id}"; ?></label>
532
- <?php wp_nonce_field('GmediaTerms', 'term_save_wpnonce'); ?>
533
- <input type="hidden" name="term[term_id]" value="<?php echo $term->term_id; ?>"/>
534
- <input type="hidden" name="term[taxonomy]" value="gmedia_album"/>
535
- <button style="display:block" type="submit" class="btn btn-primary btn-sm" name="gmedia_album_save"><?php _e('Update', 'gmLang'); ?></button>
536
- </div>
537
- </div>
538
- </div>
539
- </div>
540
-
541
- <div class="termItems clearfix" id="termItems">
542
- <?php if(!empty($termItems)){
543
- foreach($termItems as $item){ ?>
544
- <div class="gm-img-thumbnail" data-gmid="<?php echo $item->ID; ?>"><?php
545
- ?><img src="<?php echo $gmCore->gm_get_media_image($item, 'thumb', false); ?>" alt="<?php echo $item->ID; ?>" title="<?php echo esc_attr($item->title); ?>"/><?php
546
- ?><input type="text" name="term[gmedia_ids][<?php echo $item->ID; ?>]" value="<?php echo isset($item->gmedia_order)? $item->gmedia_order : '0'; ?>"/><?php
547
- ?><span class="label label-default">ID: <?php echo $item->ID; ?></span></div>
548
- <?php }
549
- } ?>
550
-
551
- </div>
552
- <script type="text/javascript">
553
- jQuery(function($){
554
- var inputs = $('#gmedia-edit-term').find('input, select').keypress(function(e){
555
- var charCode = e.charCode || e.keyCode || e.which;
556
- if (13 == charCode) {
557
- e.preventDefault();
558
- var nextInput = inputs.get(inputs.index(this) + 1);
559
- if (nextInput) {
560
- nextInput.focus();
561
- } else{
562
- $(this).blur();
563
- }
564
- }
565
- });
566
-
567
- var img_order_asc = <?php echo ('ASC' == $term_meta['order'])? 'true' : 'false'; ?>;
568
- var sortdiv = $('#termItems');
569
- var items = $('.gm-img-thumbnail', sortdiv);
570
-
571
- <?php if($mousesort){ ?>
572
- sortdiv.sortable({
573
- items: '.gm-img-thumbnail',
574
- handle: 'img',
575
- placeholder: 'gm-img-thumbnail ui-highlight-placeholder',
576
- forcePlaceholderSize: true,
577
- //revert: true,
578
- stop: function( event, ui ) {
579
- items = $('.gm-img-thumbnail',this);
580
- var qty = items.length - 1;
581
- items.each(function(i){
582
- var order = img_order_asc? i : (qty - i);
583
- $(this).find('input').val(order);
584
- });
585
- }
586
- });
587
-
588
- <?php } ?>
589
-
590
- $('input',items).on('change',function(){
591
- sortdiv.css({height:sortdiv.height()});
592
- var items = $('.gm-img-thumbnail', sortdiv);
593
-
594
- var new_order = $.isNumeric($(this).val()) ? parseInt($(this).val()) : -1;
595
- $(this).val(new_order).closest('.gm-img-thumbnail').css({zIndex:1000});
596
-
597
- var ipos = [];
598
- items.each(function(i,el){
599
- var pos = $(el).position();
600
- $.data(el,'pos',pos);
601
- ipos[i] = pos;
602
- });
603
-
604
- var order = img_order_asc? 'asc' : 'desc';
605
- items.tsort('input',{useVal:true, order:order}, 'span.label',{order:order}).each(function(i,el){
606
- var from = $.data(el,'pos');
607
- var to = ipos[i];
608
- $(el).css({position:'absolute',top:from.top,left:from.left}).animate({top:to.top,left:to.left},500);
609
- }).promise().done(function(){
610
- items.removeAttr('style');
611
- sortdiv.removeAttr('style');
612
- });
613
-
614
- $(this).val( ((0 > new_order)? 0 : new_order)).focus();
615
- });
616
- });
617
- </script>
618
- </form>
619
- <div class="panel-body"><?php echo $pager; ?><div class="well well-sm pull-left" style="margin:0;"><?php printf(__('Total items: %d'), $term->count); ?></div></div>
620
- </div>
621
- <?php
622
- } else{
623
-
624
- }
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
625
  }
1
  <?php
2
+ if (preg_match('#' . basename(__FILE__) . '#', $_SERVER['PHP_SELF'])) {
3
+ die('You are not allowed to call this page directly.');
4
  }
5
 
6
  /**
8
  *
9
  * @return mixed content
10
  */
11
+ function gmediaTerms()
12
+ {
13
+ global $user_ID, $gmDB, $gmCore, $gmGallery, $gmProcessor;
14
+
15
+ $url = add_query_arg(array('page' => $gmProcessor->page), admin_url('admin.php'));
16
+
17
+ /* todo: per_page options for gmedia_terms
18
+ $gm_screen_options = get_user_meta($user_ID, 'gm_screen_options', true);
19
+ if(!is_array($gm_screen_options)){
20
+ $gm_screen_options = array();
21
+ }
22
+ $gm_screen_options = array_merge($gmGallery->options['gm_screen_options'], $gm_screen_options);
23
+ */
24
+
25
+ $author = $gmCore->caps['gmedia_show_others_media'] ? 0 : $user_ID;
26
+
27
+ $filter = ('selected' == $gmCore->_req('filter')) ? $gmProcessor->selected_items : null;
28
+ $args = array(
29
+ 'orderby' => $gmCore->_get('orderby', 'name'),
30
+ 'order' => $gmCore->_get('order', 'ASC'),
31
+ 'search' => $gmCore->_get('s', ''),
32
+ 'number' => $gmCore->_get('number', 30),
33
+ 'hide_empty' => $gmCore->_get('hide_empty', 0),
34
+ 'page' => $gmCore->_get('pager', 1),
35
+ 'include' => $filter
36
+ );
37
+ $args['offset'] = ($args['page'] - 1) * $args['number'];
38
+
39
+ $taxonomy = $gmCore->_get('term', 'gmedia_album');
40
+
41
+ $allow_edit = 0;
42
+ switch ($taxonomy) {
43
+ case 'gmedia_album':
44
+ $allow_edit = $gmCore->caps['gmedia_album_manage'];
45
+ $args['global'] = $gmCore->_get('author', $gmCore->caps['gmedia_edit_others_media'] ? '' : array(0, $user_ID));
46
+ if (!$gmCore->caps['gmedia_show_others_media']) {
47
+ $args['global'] = wp_parse_id_list($args['global']);
48
+ $args['global'] = array_intersect(array(0, $user_ID), $args['global']);
49
+ if (empty($args['global'])) {
50
+ $args['global'] = array(0, $user_ID);
51
+ }
52
+ }
53
+ if (!$gmCore->caps['gmedia_edit_others_media']) {
54
+ $args['orderby'] = $gmCore->_get('orderby', 'global_desc_name');
55
+ }
56
+ break;
57
+ case 'gmedia_tag':
58
+ $allow_edit = $gmCore->caps['gmedia_tag_manage'];
59
+ break;
60
+ case 'gmedia_category':
61
+ $args['number'] = '';
62
+ $args['offset'] = '';
63
+ $args['search'] = '';
64
+ $args['include'] = null;
65
+ break;
66
+ }
67
+
68
+ $gmediaTerms = $gmDB->get_terms($taxonomy, $args);
69
+
70
+ ?>
71
+ <div class="panel panel-default" id="gmedia-panel">
72
+ <div class="panel-heading clearfix">
73
+
74
+ <?php if ('gmedia_category' != $taxonomy) { ?>
75
+ <form class="form-inline gmedia-search-form" role="search" method="get">
76
+ <div class="form-group">
77
+ <input type="hidden" name="page" value="<?php echo $gmProcessor->page; ?>"/>
78
+ <input type="hidden" name="term" value="<?php echo $taxonomy; ?>"/>
79
+ <input id="gmedia-search" class="form-control input-sm" type="text" name="s"
80
+ placeholder="<?php _e('Search...', 'gmLang'); ?>"
81
+ value="<?php echo $gmCore->_get('s', ''); ?>"/>
82
+ </div>
83
+ <button type="submit" class="btn btn-default input-sm"><span class="glyphicon glyphicon-search"></span>
84
+ </button>
85
+ </form>
86
+ <?php echo $gmDB->query_pager(); ?>
87
+ <?php } ?>
88
+
89
+ <div class="btn-toolbar pull-left">
90
+ <?php if ('gmedia_category' != $taxonomy) { ?>
91
+ <div class="btn-group gm-checkgroup" id="cb_global-btn">
92
+ <span class="btn btn-default active"><input class="doaction" id="cb_global"
93
+ data-group="cb_term-object" type="checkbox"/></span>
94
+ <button type="button" class="btn btn-default dropdown-toggle" data-toggle="dropdown">
95
+ <span class="caret"></span>
96
+ <span class="sr-only"><?php _e('Toggle Dropdown', 'gmLang'); ?></span>
97
+ </button>
98
+ <ul class="dropdown-menu" role="menu">
99
+ <li><a data-select="total" href="#"><?php _e('All', 'gmLang'); ?></a></li>
100
+ <li><a data-select="none" href="#"><?php _e('None', 'gmLang'); ?></a></li>
101
+ <li class="divider"></li>
102
+ <li><a data-select="reverse" href="#"
103
+ title="<?php _e('Reverse only visible items', 'gmLang'); ?>"><?php _e('Reverse', 'gmLang'); ?></a>
104
+ </li>
105
+ </ul>
106
+ </div>
107
+ <?php } ?>
108
+
109
+ <div class="btn-group" style="margin-right:20px;">
110
+ <a class="btn btn<?php echo ('gmedia_album' == $taxonomy) ? "-primary active" : '-default'; ?>"
111
+ href="<?php echo add_query_arg(array('term' => 'gmedia_album'), $url); ?>"><?php _e('Albums', 'gmLang'); ?></a>
112
+ <a class="btn btn<?php echo ('gmedia_tag' == $taxonomy) ? "-primary active" : '-default'; ?>"
113
+ href="<?php echo add_query_arg(array('term' => 'gmedia_tag'), $url); ?>"><?php _e('Tags', 'gmLang'); ?></a>
114
+ <a class="btn btn<?php echo ('gmedia_category' == $taxonomy) ? "-primary active" : '-default'; ?>"
115
+ href="<?php echo add_query_arg(array('term' => 'gmedia_category'), $url); ?>"><?php _e('Categories', 'gmLang'); ?></a>
116
+ </div>
117
+
118
+ <?php if (('gmedia_category' != $taxonomy)) { ?>
119
+ <div class="btn-group">
120
+ <a class="btn btn-default" href="#"><?php _e('Action', 'gmLang'); ?></a>
121
+ <button type="button" class="btn btn-default dropdown-toggle" data-toggle="dropdown">
122
+ <span class="caret"></span>
123
+ <span class="sr-only"><?php _e('Toggle Dropdown', 'gmLang'); ?></span>
124
+ </button>
125
+ <?php
126
+ $rel_selected_show = 'rel-selected-show';
127
+ $rel_selected_hide = 'rel-selected-hide';
128
+ ?>
129
+ <ul class="dropdown-menu" role="menu">
130
+ <li class="dropdown-header <?php echo $rel_selected_hide; ?>">
131
+ <span><?php _e("Select items to see more actions", "gmLang"); ?></span></li>
132
+ <li class="<?php echo $rel_selected_show;
133
+ if (!$gmCore->caps['gmedia_terms_delete']) {
134
+ echo ' disabled';
135
+ } ?>">
136
+ <a href="<?php echo wp_nonce_url($gmCore->get_admin_url(array('delete' => 'selected'), array('filter')), 'gmedia_delete') ?>"
137
+ class="gmedia-delete"
138
+ data-confirm="<?php _e("You are about to permanently delete the selected items.\n\r'Cancel' to stop, 'OK' to delete.", "gmLang"); ?>"><?php _e('Delete Selected Items', 'gmLang'); ?></a>
139
+ </li>
140
+ <?php do_action('gmedia_term_action_list'); ?>
141
+ </ul>
142
+ </div>
143
+
144
+ <form class="btn-group" id="gm-selected-btn" name="gm-selected-form"
145
+ action="<?php echo add_query_arg(array(
146
+ 'term' => $taxonomy,
147
+ 'filter' => 'selected'
148
+ ), $url); ?>" method="post">
149
+ <button type="submit"
150
+ class="btn btn<?php echo ('selected' == $gmCore->_req('filter')) ? '-success' : '-info' ?>"><?php printf(__('%s selected', 'gmLang'), '<span id="gm-selected-qty">' . count($gmProcessor->selected_items) . '</span>'); ?></button>
151
+ <button type="button" class="btn btn-info dropdown-toggle" data-toggle="dropdown"><span
152
+ class="caret"></span>
153
+ <span class="sr-only"><?php _e('Toggle Dropdown', 'gmLang'); ?></span></button>
154
+ <input type="hidden" id="gm-selected" data-userid="<?php echo $user_ID; ?>"
155
+ data-key="<?php echo $taxonomy; ?>" name="selected_items"
156
+ value="<?php echo implode(',', $gmProcessor->selected_items); ?>"/>
157
+ <ul class="dropdown-menu" role="menu">
158
+ <li><a id="gm-selected-show" href="#show"><?php _e('Show only selected items', 'gmLang'); ?></a>
159
+ </li>
160
+ <li><a id="gm-selected-clear" href="#clear"><?php _e('Clear selected items', 'gmLang'); ?></a>
161
+ </li>
162
+ </ul>
163
+ </form>
164
+ <?php } ?>
165
+
166
+ </div>
167
+ </div>
168
+
169
+
170
+ <?php if ('gmedia_album' == $taxonomy) { ?>
171
+ <?php if ($allow_edit) { ?>
172
+ <form method="post" id="gmedia-edit-term" name="gmAddTerms" class="panel-body"
173
+ style="padding-bottom:0; border-bottom:1px solid #ddd;">
174
+ <div class="row">
175
+ <div class="col-xs-6">
176
+ <div class="form-group">
177
+ <label><?php _e('Name', 'gmLang'); ?></label>
178
+ <input type="text" class="form-control input-sm" name="term[name]"
179
+ placeholder="<?php _e('Album Name', 'gmLang'); ?>" required/>
180
+ </div>
181
+ <div class="form-group">
182
+ <label><?php _e('Description', 'gmLang'); ?></label>
183
+ <textarea class="form-control input-sm" style="height:75px;" rows="2"
184
+ name="term[description]"></textarea>
185
+ </div>
186
+ </div>
187
+ <div class="col-xs-6">
188
+ <div class="form-group row">
189
+ <div class="col-xs-6">
190
+ <label><?php _e('Order gmedia', 'gmLang'); ?></label>
191
+ <select name="term[orderby]" class="form-control input-sm">
192
+ <option value="custom"><?php _e('user defined', 'gmLang'); ?></option>
193
+ <option selected="selected" value="ID"><?php _e('by ID', 'gmLang'); ?></option>
194
+ <option value="title"><?php _e('by title', 'gmLang'); ?></option>
195
+ <option value="date"><?php _e('by date', 'gmLang'); ?></option>
196
+ <option value="modified"><?php _e('by last modified date', 'gmLang'); ?></option>
197
+ <option value="rand"><?php _e('Random', 'gmLang'); ?></option>
198
+ </select>
199
+ </div>
200
+ <div class="col-xs-6">
201
+ <label><?php _e('Sort order', 'gmLang'); ?></label>
202
+ <select name="term[order]" class="form-control input-sm">
203
+ <option value="ASC"><?php _e('ASC', 'gmLang'); ?></option>
204
+ <option selected="selected" value="DESC"><?php _e('DESC', 'gmLang'); ?></option>
205
+ </select>
206
+ </div>
207
+ </div>
208
+ <div class="row">
209
+ <div class="form-group col-xs-6">
210
+ <label><?php _e('Status', 'gmLang'); ?></label>
211
+ <select name="term[status]" class="form-control input-sm">
212
+ <option selected="selected" value="public"><?php _e('Public', 'gmLang'); ?></option>
213
+ <option value="private"><?php _e('Private', 'gmLang'); ?></option>
214
+ <option value="draft"><?php _e('Draft', 'gmLang'); ?></option>
215
+ </select>
216
+ </div>
217
+ <div class="col-xs-6">
218
+ <div class="form-group">
219
+ <label><?php _e('Author', 'gmLang'); ?></label>
220
+ <?php $user_ids = $gmCore->get_editable_user_ids();
221
+ if ($user_ids && $gmCore->caps['gmedia_edit_others_media']) {
222
+ $shared_option = current_user_can('manage_options') ? __('Shared', 'gmLang') : '';
223
+ wp_dropdown_users(array(
224
+ 'include' => $user_ids,
225
+ 'include_selected' => true,
226
+ 'name' => 'term[global]',
227
+ 'selected' => $user_ID,
228
+ 'class' => 'form-control input-sm',
229
+ 'multi' => true,
230
+ 'show_option_all' => $shared_option
231
+ ));
232
+ } else {
233
+ echo '<input type="hidden" name="term[global]" value="' . $user_ID . '"/>';
234
+ echo '<div>' . get_the_author_meta('display_name', $user_ID) . '</div>';
235
+ }
236
+ ?>
237
+ </div>
238
+ <div class="form-group">
239
+ <?php
240
+ wp_original_referer_field(true, 'previous');
241
+ wp_nonce_field('GmediaTerms', 'term_save_wpnonce');
242
+ ?>
243
+ <input type="hidden" name="term[taxonomy]" value="gmedia_album"/>
244
+ <button style="display:block" type="submit" class="btn btn-primary btn-sm"
245
+ name="gmedia_album_save"><?php _e('Add New Album', 'gmLang'); ?></button>
246
+ </div>
247
+ </div>
248
+ </div>
249
+ </div>
250
+ </div>
251
+ </form>
252
+ <?php } else { ?>
253
+ <div class="alert alert-warning alert-dismissible" role="alert" style="margin-bottom:0">
254
+ <button type="button" class="close" data-dismiss="alert">
255
+ <span aria-hidden="true">&times;</span><span class="sr-only"><?php _e('Close', 'gmLang'); ?></span>
256
+ </button>
257
+ <strong><?php _e('Info:', 'gmLang'); ?></strong> <?php _e('You are not allowed to add new terms', 'gmLang'); ?>
258
+ </div>
259
+ <?php } ?>
260
+ <form class="list-group" id="gm-list-table" style="margin-bottom:4px;">
261
+ <?php
262
+ if (count($gmediaTerms)) {
263
+ foreach ($gmediaTerms as $item) {
264
+ $termItems = array();
265
+ $per_page = 10;
266
+ if ($item->count) {
267
+ $args = array('no_found_rows' => true, 'per_page' => $per_page, 'album__in' => array($item->term_id), 'author' => $author);
268
+ $termItems = $gmDB->get_gmedias($args);
269
+ }
270
+ $is_selected = in_array($item->term_id, $gmProcessor->selected_items) ? true : false;
271
+ $author_name = '';
272
+ $list_row_class = $row_class = '';
273
+ if ($item->global) {
274
+ $author_name .= sprintf(__('by %s', 'gmLang'), get_the_author_meta('display_name', $item->global));
275
+ if ($item->global == $user_ID) {
276
+ $row_class .= ' current_user';
277
+ $allow_edit = $gmCore->caps['gmedia_album_manage'];
278
+ } else {
279
+ $row_class .= ' other_user';
280
+ $allow_edit = $gmCore->caps['gmedia_edit_others_media'];
281
+ }
282
+ } else {
283
+ $author_name .= '(' . __('shared', 'gmLang') . ')';
284
+ $row_class .= ' shared';
285
+ $allow_edit = $gmCore->caps['gmedia_edit_others_media'];
286
+ }
287
+ if ('public' != $item->status) {
288
+ $author_name .= ' [' . $item->status . ']';
289
+ if('private' == $item->status){
290
+ $list_row_class = ' list-group-item-info';
291
+ } elseif('draft' == $item->status){
292
+ $list_row_class = ' list-group-item-warning';
293
+ }
294
+ }
295
+ ?>
296
+ <div class="list-group-item term-list-item<?php echo $list_row_class; ?>">
297
+ <div class="row cb_term-object<?php echo $row_class; ?>">
298
+ <div class="term_id">#<?php echo $item->term_id; ?></div>
299
+ <div class="col-xs-5 term-label">
300
+ <div class="checkbox">
301
+ <input name="doaction[]"
302
+ type="checkbox"<?php echo $is_selected ? ' checked="checked"' : ''; ?>
303
+ value="<?php echo $item->term_id; ?>"/>
304
+ <?php if ($allow_edit) { ?>
305
+ <a href="<?php echo add_query_arg(array('edit_album' => $item->term_id), $url); ?>"><?php echo esc_html($item->name); ?></a>
306
+ <?php } else { ?>
307
+ <span><?php echo esc_html($item->name); ?></span>
308
+ <?php } ?>
309
+ <span class="term_info_author"><?php echo $author_name; ?></span>
310
+ <?php if ($item->count) { ?>
311
+ <a href="<?php echo $gmCore->get_admin_url(array(
312
+ 'page' => 'GrandMedia',
313
+ 'alb' => $item->term_id
314
+ ), array(), true); ?>" class="badge pull-right"><?php echo $item->count; ?></a>
315
+ <?php } else { ?>
316
+ <span class="badge pull-right"><?php echo $item->count; ?></span>
317
+ <?php } ?>
318
+ </div>
319
+ </div>
320
+ <div class="col-xs-7">
321
+ <div class="term-images">
322
+ <?php if (!empty($termItems)) {
323
+ foreach ($termItems as $i) {
324
+ ?>
325
+ <img style="z-index:<?php echo $per_page--; ?>;"
326
+ src="<?php echo $gmCore->gm_get_media_image($i, 'thumb', false); ?>"
327
+ alt="<?php echo $i->ID; ?>"
328
+ title="<?php echo esc_attr($i->title); ?>"/>
329
+ <?php
330
+ }
331
+ }
332
+ if (count($termItems) < $item->count) {
333
+ echo '...';
334
+ }
335
+ ?>
336
+ </div>
337
+ </div>
338
+ </div>
339
+ <?php if (!empty($item->description)) { ?>
340
+ <div class="term-description"><?php echo esc_html($item->description); ?></div>
341
+ <?php } ?>
342
+ </div>
343
+ <?php
344
+ }
345
+ } else {
346
+ ?>
347
+ <div class="list-group-item">
348
+ <div class="well well-lg text-center">
349
+ <h4><?php _e('No items to show.', 'gmLang'); ?></h4>
350
+ </div>
351
+ </div>
352
+ <?php } ?>
353
+ <?php
354
+ wp_original_referer_field(true, 'previous');
355
+ wp_nonce_field('GmediaTerms');
356
+ ?>
357
+ </form>
358
+
359
+
360
+ <?php } elseif ('gmedia_tag' == $taxonomy) { ?>
361
+ <?php if ($allow_edit) { ?>
362
+ <form method="post" id="gmedia-edit-term" name="gmAddTerms" class="panel-body"
363
+ style="padding-bottom:0; border-bottom:1px solid #ddd;">
364
+ <div class="row">
365
+ <div class="form-group col-xs-9">
366
+ <label><?php _e('Tags', 'gmLang'); ?>
367
+ <small class="text-muted">(<?php _e('you can type multiple tags separated by comma') ?>)
368
+ </small>
369
+ </label>
370
+ <input type="text" class="form-control input-sm" name="term[name]"
371
+ placeholder="<?php _e('Tag Names', 'gmLang'); ?>" required/>
372
+ </div>
373
+ <div class="col-xs-3" style="padding-top:24px;">
374
+ <?php
375
+ wp_original_referer_field(true, 'previous');
376
+ wp_nonce_field('GmediaTerms', 'term_save_wpnonce');
377
+ ?>
378
+ <input type="hidden" name="term[taxonomy]" value="gmedia_tag"/>
379
+ <button type="submit" class="btn btn-primary btn-sm"
380
+ name="gmedia_tag_add"><?php _e('Add New Tags', 'gmLang'); ?></button>
381
+ </div>
382
+ </div>
383
+ </form>
384
+ <?php } else { ?>
385
+ <div class="alert alert-warning alert-dismissible" role="alert" style="margin-bottom:0">
386
+ <button type="button" class="close" data-dismiss="alert">
387
+ <span aria-hidden="true">&times;</span><span class="sr-only"><?php _e('Close', 'gmLang'); ?></span>
388
+ </button>
389
+ <strong><?php _e('Info:', 'gmLang'); ?></strong> <?php _e('You are not allowed to add new terms', 'gmLang'); ?>
390
+ </div>
391
+ <?php } ?>
392
+ <form class="list-group" id="gm-list-table" style="margin-bottom:4px;">
393
+ <?php
394
+ if (count($gmediaTerms)) {
395
+ if ($gmCore->caps['gmedia_edit_others_media']) {
396
+ $allow_edit = true;
397
+ } else {
398
+ $allow_edit = false;
399
+ }
400
+ foreach ($gmediaTerms as $item){
401
+ $termItems = array();
402
+ $per_page = 5;
403
+ if ($item->count) {
404
+ $args = array('no_found_rows' => true, 'per_page' => $per_page, 'tag_id' => $item->term_id, 'author' => $author);
405
+ $termItems = $gmDB->get_gmedias($args);
406
+ }
407
+ $is_selected = in_array($item->term_id, $gmProcessor->selected_items) ? true : false;
408
+ ?>
409
+ <div class="list-group-item term-list-item">
410
+ <div class="row cb_term-object" id="tag_<?php echo $item->term_id; ?>">
411
+ <div class="term_id">#<?php echo $item->term_id; ?></div>
412
+ <div class="col-xs-5 term-label">
413
+ <div class="checkbox">
414
+ <input name="doaction[]"
415
+ type="checkbox"<?php echo $is_selected ? ' checked="checked"' : ''; ?>
416
+ value="<?php echo $item->term_id; ?>"/>
417
+ <?php if ($allow_edit) { ?>
418
+ <a class="edit_tag_link"
419
+ href="#tag_<?php echo $item->term_id; ?>"><?php echo esc_html($item->name); ?></a>
420
+ <span class="edit_tag_form" style="display:none;"><input class="edit_tag_input"
421
+ type="text"
422
+ data-tag_id="<?php echo $item->term_id; ?>"
423
+ name="gmedia_tag_name[<?php echo $item->term_id; ?>]"
424
+ value="<?php echo esc_attr($item->name); ?>"
425
+ placeholder="<?php echo esc_attr($item->name); ?>"/><a
426
+ href="#tag_<?php echo $item->term_id; ?>"
427
+ class="edit_tag_save btn btn-link glyphicon glyphicon-pencil"></a></span>
428
+ <?php } else { ?>
429
+ <span><?php echo esc_html($item->name); ?></span>
430
+ <?php } ?>
431
+ <?php if ($item->count) { ?>
432
+ <a href="<?php echo $gmCore->get_admin_url(array(
433
+ 'page' => 'GrandMedia',
434
+ 'tag_id' => $item->term_id
435
+ ), array(), true); ?>" class="badge pull-right"><?php echo $item->count; ?></a>
436
+ <?php } else { ?>
437
+ <span class="badge pull-right"><?php echo $item->count; ?></span>
438
+ <?php } ?>
439
+ </div>
440
+ </div>
441
+ <div class="col-xs-7 term-images">
442
+ <?php if (!empty($termItems)) {
443
+ foreach ($termItems as $i) {
444
+ ?>
445
+ <img style="z-index:<?php echo $per_page--; ?>;"
446
+ src="<?php echo $gmCore->gm_get_media_image($i, 'thumb', false); ?>"
447
+ alt="<?php echo $i->ID; ?>" title="<?php echo esc_attr($i->title); ?>"/>
448
+ <?php
449
+ }
450
+ }
451
+ if (count($termItems) < $item->count) {
452
+ echo '...';
453
+ }
454
+ ?>
455
+ </div>
456
+ </div>
457
+ </div>
458
+ <?php } ?>
459
+ <?php if ($allow_edit){ ?>
460
+ <script type="text/javascript">
461
+ jQuery(function ($) {
462
+ $('#gm-list-table').data('edit', false);
463
+ $('input.edit_tag_input').keypress(function (e) {
464
+ var tagdiv = $('#tag_' + $(this).data('tag_id'));
465
+ var charCode = e.charCode || e.keyCode || e.which;
466
+ if (charCode == 13) {
467
+ e.preventDefault();
468
+ edit_tag(tagdiv);
469
+ }
470
+ }).blur(function (e) {
471
+ var tagdiv = $('#tag_' + $(this).data('tag_id'));
472
+ edit_tag(tagdiv);
473
+ });
474
+
475
+ $('.edit_tag_link').click(function (e) {
476
+ e.preventDefault();
477
+ var id = $(this).attr('href');
478
+ $(this).hide();
479
+ $(id).find('.edit_tag_form').show().find('input').focus();
480
+ $('#gm-list-table').data('edit', true);
481
+ });
482
+ $('.edit_tag_save').click(function (e) {
483
+ e.preventDefault();
484
+ });
485
+
486
+ function edit_tag(tagdiv) {
487
+ var inp = tagdiv.find('.edit_tag_form input');
488
+ var new_tag_name = $.trim(inp.val());
489
+ var old_tag_name = inp.attr('placeholder');
490
+ if ((old_tag_name == new_tag_name) || ('' === new_tag_name) || $.isNumeric()) {
491
+ inp.val(old_tag_name);
492
+ tagdiv.find('.edit_tag_form').hide();
493
+ tagdiv.find('.edit_tag_link').show();
494
+ return;
495
+ }
496
+ var post_data = {
497
+ action: 'gmedia_tag_edit',
498
+ tag_id: inp.data('tag_id'),
499
+ tag_name: new_tag_name,
500
+ _wpnonce: $('#_wpnonce').val()
501
+ };
502
+ $.post(ajaxurl, post_data, function (data, textStatus, jqXHR) {
503
+ console.log(data);
504
+ if (data.error) {
505
+ //inp.val(inp.attr('placeholder'));
506
+ $('#gmedia-panel').before(data.error);
507
+ } else {
508
+ //new_tag_name = new_tag_name.replace(/&/g, '&amp;').replace(/"/g, '&quot;').replace(/</g, '&lt;').replace(/>/g, '&gt;');
509
+ inp.attr('placeholder', new_tag_name);
510
+ tagdiv.find('.edit_tag_link').text(new_tag_name).show();
511
+ $('#gmedia-panel').before(data.msg);
512
+ tagdiv.find('.edit_tag_form').hide();
513
+ }
514
+ });
515
+ }
516
+ });
517
+ </script>
518
+ <?php } ?>
519
+ <?php
520
+ } else {
521
+ ?>
522
+ <div class="list-group-item">
523
+ <div class="well well-lg text-center">
524
+ <h4><?php _e('No items to show.', 'gmLang'); ?></h4>
525
+ </div>
526
+ </div>
527
+ <?php } ?>
528
+ <?php
529
+ wp_original_referer_field(true, 'previous');
530
+ wp_nonce_field('GmediaTerms');
531
+ ?>
532
+ </form>
533
+
534
+
535
+ <?php } elseif ('gmedia_category' == $taxonomy) { ?>
536
+ <div class="panel-body"></div>
537
+ <div class="list-group" id="gm-list-table" style="margin-bottom:4px;">
538
+ <?php
539
+ $gmediaCategories = $gmGallery->options['taxonomies']['gmedia_category'];
540
+ foreach ($gmediaTerms as $item) {
541
+ $cat[$item->name] = $item;
542
+ }
543
+ unset($gmediaTerms);
544
+
545
+ foreach ($gmediaCategories as $name => $title) {
546
+ $termItems = array();
547
+ $per_page = 10;
548
+ if (isset($cat[$name])) {
549
+ $count = $cat[$name]->count;
550
+ $term_id = $cat[$name]->term_id;
551
+ if ($count) {
552
+ $args = array('no_found_rows' => true, 'per_page' => $per_page, 'category__in' => array($term_id), 'author' => $author);
553
+ $termItems = $gmDB->get_gmedias($args);
554
+ }
555
+ } else {
556
+ $count = 0;
557
+ $term_id = '##';
558
+ }
559
+ ?>
560
+ <div class="list-group-item term-list-item">
561
+ <div class="row cb_term-object">
562
+ <div class="term_id">#<?php echo $term_id; ?></div>
563
+ <div class="col-xs-5" style="padding-top:10px; padding-bottom:10px;">
564
+ <?php echo esc_html($title); ?>
565
+ <?php if ($count) { ?>
566
+ <a href="<?php echo $gmCore->get_admin_url(array(
567
+ 'page' => 'GrandMedia',
568
+ 'cat' => $term_id
569
+ ), array(), true); ?>" class="badge pull-right"><?php echo $count; ?></a>
570
+ <?php } else { ?>
571
+ <span class="badge pull-right"><?php echo $count; ?></span>
572
+ <?php } ?>
573
+ </div>
574
+ <div class="col-xs-7 term-images">
575
+ <?php if (!empty($termItems)) {
576
+ foreach ($termItems as $i) {
577
+ ?>
578
+ <img style="z-index:<?php echo $per_page--; ?>;"
579
+ src="<?php echo $gmCore->gm_get_media_image($i, 'thumb', false); ?>"
580
+ alt="<?php echo $i->ID; ?>" title="<?php echo esc_attr($i->title); ?>"/>
581
+ <?php
582
+ }
583
+ }
584
+ if (count($termItems) < $count) {
585
+ echo '...';
586
+ }
587
+ ?>
588
+ </div>
589
+ </div>
590
+ </div>
591
+ <?php } ?>
592
+ </div>
593
+ <?php } ?>
594
+
595
+ </div>
596
 
597
  <?php
598
  }
603
  *
604
  * @return mixed content
605
  */
606
+ function gmediaAlbumEdit()
607
+ {
608
+ global $gmDB, $gmCore, $gmProcessor, $user_ID;
609
+
610
+ if (!$gmCore->caps['gmedia_album_manage']) {
611
+ die('-1');
612
+ }
613
+
614
+ $url = add_query_arg(array('page' => $gmProcessor->page), admin_url('admin.php'));
615
+
616
+ $taxonomy = 'gmedia_album';
617
+ $term_id = $gmCore->_get('edit_album');
618
+
619
+ $term = $gmDB->get_term($term_id, $taxonomy);
620
+
621
+ if (!empty($term) && !is_wp_error($term)) {
622
+
623
+ $term_meta = $gmDB->get_metadata('gmedia_term', $term->term_id);
624
+ $term_meta = array_map('reset', $term_meta);
625
+ $term_meta = array_merge(array('orderby' => 'ID', 'order' => 'DESC'), $term_meta);
626
+ $per_page = 30;
627
+ $pager = '';
628
+ $mousesort = ('drag-n-drop' === $gmCore->_get('sort')) ? true : false;
629
+
630
+ $termItems = array();
631
+ if ($term->count) {
632
+ $args = array('album__in' => $term->term_id, 'orderby' => $term_meta['orderby'], 'order' => $term_meta['order']);
633
+ if ($mousesort) {
634
+ $args = array_merge($args, array('nopaging' => 1));
635
+ } else {
636
+ $args = array_merge($args, array('per_page' => $per_page, 'page' => $gmCore->_get('pager', 1)));
637
+ }
638
+ $termItems = $gmDB->get_gmedias($args);
639
+
640
+ if (!$mousesort) {
641
+ $pager = $gmDB->query_pager();
642
+ }
643
+ }
644
+
645
+ ?>
646
+ <div class="panel panel-default">
647
+ <div class="panel-heading clearfix">
648
+ <div class="btn-toolbar pull-left">
649
+ <div class="btn-group" style="margin-right:20px;">
650
+ <a class="btn btn-primary active"
651
+ href="<?php echo add_query_arg(array('term' => 'gmedia_album'), $url); ?>"><?php _e('Albums', 'gmLang'); ?></a>
652
+ <a class="btn btn-default"
653
+ href="<?php echo add_query_arg(array('term' => 'gmedia_tag'), $url); ?>"><?php _e('Tags', 'gmLang'); ?></a>
654
+ <a class="btn btn-default"
655
+ href="<?php echo add_query_arg(array('term' => 'gmedia_category'), $url); ?>"><?php _e('Categories', 'gmLang'); ?></a>
656
+ </div>
657
+
658
+ <div class="btn-group">
659
+ <a class="btn btn-default" href="#"><?php _e('Action', 'gmLang'); ?></a>
660
+ <button type="button" class="btn btn-default dropdown-toggle" data-toggle="dropdown">
661
+ <span class="caret"></span>
662
+ <span class="sr-only"><?php _e('Toggle Dropdown', 'gmLang'); ?></span>
663
+ </button>
664
+ <ul class="dropdown-menu" role="menu">
665
+ <?php if ($mousesort) { ?>
666
+ <li>
667
+ <a href="<?php echo $gmCore->get_admin_url(array(), array('sort')); ?>"><?php _e('Disable Drag and Drop Sorting', 'gmLang'); ?></a>
668
+ </li>
669
+ <?php } else { ?>
670
+ <li>
671
+ <a href="<?php echo $gmCore->get_admin_url(array('sort' => 'drag-n-drop'), array('pager')); ?>"><?php _e('Enable Drag and Drop Sorting', 'gmLang'); ?></a>
672
+ </li>
673
+ <?php } ?>
674
+ <li><a href="<?php echo add_query_arg(array(
675
+ 'page' => 'GrandMedia',
676
+ 'alb' => $term->term_id
677
+ ), admin_url('admin.php')); ?>"><?php _e('Show Album in Gmedia Library', 'gmLang'); ?></a>
678
+ </li>
679
+ </ul>
680
+ </div>
681
+ </div>
682
+
683
+ <?php echo $pager; ?>
684
+
685
+ </div>
686
+
687
+ <form method="post" id="gmedia-edit-term" name="gmEditTerm" class="panel-body">
688
+ <h4 style="margin-top:0;">
689
+ <span class="pull-right"><?php echo __('ID', 'gmLang') . ": {$term->term_id}"; ?></span>
690
+ <?php _e('Edit Album'); ?>: <em><?php echo esc_html($term->name); ?></em>
691
+ </h4>
692
+
693
+ <div class="row" style="border-bottom:1px solid #ddd; margin-bottom:15px;">
694
+ <div class="col-xs-6">
695
+ <div class="form-group">
696
+ <label><?php _e('Name', 'gmLang'); ?></label>
697
+ <input type="text" class="form-control input-sm" name="term[name]"
698
+ value="<?php echo esc_attr($term->name); ?>"
699
+ placeholder="<?php _e('Album Name', 'gmLang'); ?>" required/>
700
+ </div>
701
+ <div class="form-group">
702
+ <label><?php _e('Description', 'gmLang'); ?></label>
703
+ <textarea class="form-control input-sm" style="height:53px;" rows="2"
704
+ name="term[description]"><?php echo $term->description; ?></textarea>
705
+ </div>
706
+ </div>
707
+ <div class="col-xs-6">
708
+ <div class="form-group row">
709
+ <div class="col-xs-6">
710
+ <label><?php _e('Order gmedia', 'gmLang'); ?></label>
711
+ <select name="term[orderby]" class="form-control input-sm">
712
+ <option
713
+ value="custom"<?php selected($term_meta['orderby'], 'custom'); ?>><?php _e('user defined', 'gmLang'); ?></option>
714
+ <option
715
+ value="ID"<?php selected($term_meta['orderby'], 'ID'); ?>><?php _e('by ID', 'gmLang'); ?></option>
716
+ <option
717
+ value="title"<?php selected($term_meta['orderby'], 'title'); ?>><?php _e('by title', 'gmLang'); ?></option>
718
+ <option
719
+ value="date"<?php selected($term_meta['orderby'], 'date'); ?>><?php _e('by date', 'gmLang'); ?></option>
720
+ <option
721
+ value="modified"<?php selected($term_meta['orderby'], 'modified'); ?>><?php _e('by last modified date', 'gmLang'); ?></option>
722
+ <option
723
+ value="rand"<?php selected($term_meta['orderby'], 'rand'); ?>><?php _e('Random', 'gmLang'); ?></option>
724
+ </select>
725
+ </div>
726
+ <div class="col-xs-6">
727
+ <label><?php _e('Sort order', 'gmLang'); ?></label>
728
+ <select name="term[order]" class="form-control input-sm">
729
+ <option
730
+ value="ASC"<?php selected($term_meta['order'], 'ASC'); ?>><?php _e('ASC', 'gmLang'); ?></option>
731
+ <option
732
+ value="DESC"<?php selected($term_meta['order'], 'DESC'); ?>><?php _e('DESC', 'gmLang'); ?></option>
733
+ </select>
734
+ </div>
735
+ </div>
736
+ <div class="row">
737
+ <div class="col-xs-6">
738
+ <div class="form-group">
739
+ <label><?php _e('Status', 'gmLang'); ?></label>
740
+ <select name="term[status]" class="form-control input-sm">
741
+ <option
742
+ value="public"<?php selected($term->status, 'public'); ?>><?php _e('Public', 'gmLang'); ?></option>
743
+ <option
744
+ value="private"<?php selected($term->status, 'private'); ?>><?php _e('Private', 'gmLang'); ?></option>
745
+ <option
746
+ value="draft"<?php selected($term->status, 'draft'); ?>><?php _e('Draft', 'gmLang'); ?></option>
747
+ </select>
748
+ </div>
749
+ <div class="form-group">
750
+ <div class="checkbox"><label><input type="checkbox" name="term[status_global]" value="1"> <?php _e('Apply Status for all items in album', 'gmLang'); ?></label></div>
751
+ </div>
752
+ </div>
753
+ <div class="col-xs-6">
754
+ <div class="form-group">
755
+ <label><?php _e('Author', 'gmLang'); ?></label>
756
+ <?php $user_ids = $gmCore->caps['gmedia_edit_others_media'] ? $gmCore->get_editable_user_ids() : false;
757
+ if ($user_ids) {
758
+ $shared_option = current_user_can('manage_options') ? __('Shared', 'gmLang') : '';
759
+ wp_dropdown_users(array(
760
+ 'include' => $user_ids,
761
+ 'include_selected' => true,
762
+ 'name' => 'term[global]',
763
+ 'selected' => $term->global,
764
+ 'class' => 'form-control input-sm',
765
+ 'multi' => true,
766
+ 'show_option_all' => $shared_option
767
+ ));
768
+ } else {
769
+ echo '<input type="hidden" name="term[global]" value="' . $user_ID . '"/>';
770
+ echo '<div>' . get_the_author_meta('display_name', $user_ID) . '</div>';
771
+ }
772
+ ?>
773
+ </div>
774
+ <div class="form-group">
775
+ <?php wp_nonce_field('GmediaTerms', 'term_save_wpnonce'); ?>
776
+ <input type="hidden" name="term[term_id]" value="<?php echo $term->term_id; ?>"/>
777
+ <input type="hidden" name="term[taxonomy]" value="gmedia_album"/>
778
+ <button style="display:block" type="submit" class="btn btn-primary btn-sm"
779
+ name="gmedia_album_save"><?php _e('Update', 'gmLang'); ?></button>
780
+ </div>
781
+ </div>
782
+ </div>
783
+ </div>
784
+ </div>
785
+
786
+ <div class="termItems clearfix" id="termItems">
787
+ <?php if (!empty($termItems)) {
788
+ foreach ($termItems as $item) {
789
+ ?>
790
+ <div class="gm-img-thumbnail" data-gmid="<?php echo $item->ID; ?>"><?php
791
+ ?>
792
+ <img src="<?php echo $gmCore->gm_get_media_image($item, 'thumb', false); ?>"
793
+ alt="<?php echo $item->ID; ?>" title="<?php echo esc_attr($item->title); ?>"/><?php
794
+ ?>
795
+ <input type="text" name="term[gmedia_ids][<?php echo $item->ID; ?>]"
796
+ value="<?php echo isset($item->gmedia_order) ? $item->gmedia_order : '0'; ?>"/><?php
797
+ ?><span class="label label-default">ID: <?php echo $item->ID; ?></span></div>
798
+ <?php
799
+ }
800
+ } ?>
801
+
802
+ </div>
803
+ <script type="text/javascript">
804
+ jQuery(function ($) {
805
+ var inputs = $('#gmedia-edit-term').find('input, select').keypress(function (e) {
806
+ var charCode = e.charCode || e.keyCode || e.which;
807
+ if (13 == charCode) {
808
+ e.preventDefault();
809
+ var nextInput = inputs.get(inputs.index(this) + 1);
810
+ if (nextInput) {
811
+ nextInput.focus();
812
+ } else {
813
+ $(this).blur();
814
+ }
815
+ }
816
+ });
817
+
818
+ var img_order_asc = <?php echo ('ASC' == $term_meta['order'])? 'true' : 'false'; ?>;
819
+ var sortdiv = $('#termItems');
820
+ var items = $('.gm-img-thumbnail', sortdiv);
821
+
822
+ <?php if($mousesort){ ?>
823
+ sortdiv.sortable({
824
+ items: '.gm-img-thumbnail',
825
+ handle: 'img',
826
+ placeholder: 'gm-img-thumbnail ui-highlight-placeholder',
827
+ forcePlaceholderSize: true,
828
+ //revert: true,
829
+ stop: function (event, ui) {
830
+ items = $('.gm-img-thumbnail', this);
831
+ var qty = items.length - 1;
832
+ items.each(function (i) {
833
+ var order = img_order_asc ? i : (qty - i);
834
+ $(this).find('input').val(order);
835
+ });
836
+ }
837
+ });
838
+
839
+ <?php } ?>
840
+
841
+ $('input', items).on('change', function () {
842
+ sortdiv.css({height: sortdiv.height()});
843
+ var items = $('.gm-img-thumbnail', sortdiv);
844
+
845
+ var new_order = $.isNumeric($(this).val()) ? parseInt($(this).val()) : -1;
846
+ $(this).val(new_order).closest('.gm-img-thumbnail').css({zIndex: 1000});
847
+
848
+ var ipos = [];
849
+ items.each(function (i, el) {
850
+ var pos = $(el).position();
851
+ $.data(el, 'pos', pos);
852
+ ipos[i] = pos;
853
+ });
854
+
855
+ var order = img_order_asc ? 'asc' : 'desc';
856
+ items.tsort('input', {
857
+ useVal: true,
858
+ order: order
859
+ }, 'span.label', {order: order}).each(function (i, el) {
860
+ var from = $.data(el, 'pos');
861
+ var to = ipos[i];
862
+ $(el).css({position: 'absolute', top: from.top, left: from.left}).animate({
863
+ top: to.top,
864
+ left: to.left
865
+ }, 500);
866
+ }).promise().done(function () {
867
+ items.removeAttr('style');
868
+ sortdiv.removeAttr('style');
869
+ });
870
+
871
+ $(this).val(((0 > new_order) ? 0 : new_order)).focus();
872
+ });
873
+ });
874
+ </script>
875
+ </form>
876
+ <div class="panel-body"><?php echo $pager; ?>
877
+ <div class="well well-sm pull-left"
878
+ style="margin:0;"><?php printf(__('Total items: %d'), $term->count); ?></div>
879
+ </div>
880
+ </div>
881
+ <?php
882
+ } else {
883
+
884
+ }
885
  }
admin/upload.php CHANGED
@@ -12,14 +12,11 @@ ini_set('error_reporting', 0);
12
 
13
  require_once(dirname(dirname(__FILE__)) . '/config.php');
14
 
15
- /** WordPress Image Administration API */
16
- require_once(ABSPATH . 'wp-admin/includes/image.php');
17
-
18
  // HTTP headers for no cache etc
19
  nocache_headers();
20
 
21
- if(!current_user_can('upload_files')){
22
- wp_die(__('You do not have permission to upload files.'));
23
  }
24
 
25
  check_admin_referer('grandMedia');
@@ -63,219 +60,12 @@ if(strpos($contentType, "multipart") !== false){
63
  $file_tmp = "php://input";
64
  }
65
 
66
- gmedia_upload_handler($file_tmp, $fileinfo, $contentType);
67
-
68
- /** Write the file
69
- *
70
- * @param string $file_tmp
71
- * @param array $fileinfo
72
- * @param string $content_type
73
- */
74
- function gmedia_upload_handler($file_tmp, $fileinfo, $content_type){
75
- global $gmGallery, $gmCore;
76
- $cleanup_dir = true; // Remove old files
77
- $file_age = 5 * 3600; // Temp file age in seconds
78
- $chunk = (int) $gmCore->_req('chunk', 0);
79
- $chunks = (int) $gmCore->_req('chunks', 0);
80
-
81
- // try to make grand-media dir if not exists
82
- if(!wp_mkdir_p($fileinfo['dirpath'])){
83
- $return = json_encode(array("error" => array("code" => 100, "message" => sprintf(__('Unable to create directory %s. Is its parent directory writable by the server?', 'gmLang'), $fileinfo['dirpath'])), "id" => $fileinfo['basename']));
84
- die($return);
85
- }
86
- // Check if grand-media dir is writable
87
- if(!is_writable($fileinfo['dirpath'])){
88
- @chmod($fileinfo['dirpath'], 0755);
89
- if(!is_writable($fileinfo['dirpath'])){
90
- $return = json_encode(array("error" => array("code" => 100, "message" => sprintf(__('Directory %s or its subfolders are not writable by the server.', 'gmLang'), dirname($fileinfo['dirpath']))), "id" => $fileinfo['basename']));
91
- die($return);
92
- }
93
- }
94
- // Remove old temp files
95
- if($cleanup_dir && is_dir($fileinfo['dirpath']) && ($_dir = opendir($fileinfo['dirpath']))){
96
- while(($_file = readdir($_dir)) !== false){
97
- $tmpfilePath = $fileinfo['dirpath'] . DIRECTORY_SEPARATOR . $_file;
98
-
99
- // Remove temp file if it is older than the max age and is not the current file
100
- if(preg_match('/\.part$/', $_file) && (filemtime($tmpfilePath) < time() - $file_age) && ($tmpfilePath != $fileinfo['filepath'] . '.part')){
101
- @unlink($tmpfilePath);
102
- }
103
- }
104
-
105
- closedir($_dir);
106
- } else{
107
- $return = json_encode(array("error" => array("code" => 100, "message" => sprintf(__('Failed to open directory: %s', 'gmLang'), $fileinfo['dirpath'])), "id" => $fileinfo['basename']));
108
- die($return);
109
- }
110
-
111
- // Open temp file
112
- $out = fopen($fileinfo['filepath'] . '.part', $chunk == 0? "wb" : "ab");
113
- if($out){
114
- // Read binary input stream and append it to temp file
115
- $in = fopen($file_tmp, "rb");
116
-
117
- if($in){
118
- while(($buff = fread($in, 4096))){
119
- fwrite($out, $buff);
120
- }
121
- } else{
122
- $return = json_encode(array("error" => array("code" => 101, "message" => __("Failed to open input stream.", 'gmLang')), "id" => $fileinfo['basename']));
123
- die($return);
124
- }
125
- fclose($in);
126
- fclose($out);
127
- if(strpos($content_type, "multipart") !== false){
128
- @unlink($file_tmp);
129
- }
130
- if(!$chunks || $chunk == ($chunks - 1)){
131
- sleep(1);
132
- // Strip the temp .part suffix off
133
- rename($fileinfo['filepath'] . '.part', $fileinfo['filepath']);
134
-
135
- $gmCore->file_chmod($fileinfo['filepath']);
136
-
137
- $size = false;
138
- $is_webimage = false;
139
- if('image' == $fileinfo['dirname']){
140
- $size = @getimagesize($fileinfo['filepath']);
141
- if($size && file_is_displayable_image($fileinfo['filepath'])){
142
- if(!wp_mkdir_p($fileinfo['dirpath_thumb'])){
143
- $return = json_encode(array("error" => array("code" => 100, "message" => sprintf(__('Unable to create directory %s. Is its parent directory writable by the server?', 'gmLang'), $fileinfo['dirpath_thumb'])), "id" => $fileinfo['basename']));
144
- die($return);
145
- }
146
- if(!is_writable($fileinfo['dirpath_thumb'])){
147
- @chmod($fileinfo['dirpath_thumb'], 0755);
148
- if(!is_writable($fileinfo['dirpath_thumb'])){
149
- @unlink($fileinfo['filepath']);
150
- $return = json_encode(array("error" => array("code" => 100, "message" => sprintf(__('Directory %s is not writable by the server.', 'gmLang'), $fileinfo['dirpath_thumb'])), "id" => $fileinfo['basename']));
151
- die($return);
152
- }
153
- }
154
- if(!wp_mkdir_p($fileinfo['dirpath_original'])){
155
- $return = json_encode(array("error" => array("code" => 100, "message" => sprintf(__('Unable to create directory %s. Is its parent directory writable by the server?', 'gmLang'), $fileinfo['dirpath_original'])), "id" => $fileinfo['basename']));
156
- die($return);
157
- }
158
- if(!is_writable($fileinfo['dirpath_original'])){
159
- @chmod($fileinfo['dirpath_original'], 0755);
160
- if(!is_writable($fileinfo['dirpath_original'])){
161
- @unlink($fileinfo['filepath']);
162
- $return = json_encode(array("error" => array("code" => 100, "message" => sprintf(__('Directory %s is not writable by the server.', 'gmLang'), $fileinfo['dirpath_original'])), "id" => $fileinfo['basename']));
163
- die($return);
164
- }
165
- }
166
-
167
- // Optimized image
168
- $webimg = $gmGallery->options['image'];
169
- $thumbimg = $gmGallery->options['thumb'];
170
-
171
- $webimg['resize'] = (($webimg['width'] < $size[0]) || ($webimg['height'] < $size[1]))? true : false;
172
- $thumbimg['resize'] = (($thumbimg['width'] < $size[0]) || ($thumbimg['height'] < $size[1]))? true : false;
173
-
174
- if($webimg['resize']){
175
- rename($fileinfo['filepath'], $fileinfo['filepath_original']);
176
- } else{
177
- copy($fileinfo['filepath'], $fileinfo['filepath_original']);
178
- }
179
-
180
- if($webimg['resize'] || $thumbimg['resize']){
181
- $editor = wp_get_image_editor($fileinfo['filepath_original']);
182
- if(is_wp_error($editor)){
183
- @unlink($fileinfo['filepath_original']);
184
- $return = json_encode(array("error" => array("code" => $editor->get_error_code(), "message" => $editor->get_error_message()), "id" => $fileinfo['basename'], "tip" => 'wp_get_image_editor'));
185
- die($return);
186
- }
187
-
188
- if($webimg['resize']){
189
- $editor->set_quality($webimg['quality']);
190
-
191
- $resized = $editor->resize($webimg['width'], $webimg['height'], $webimg['crop']);
192
- if(is_wp_error($resized)){
193
- @unlink($fileinfo['filepath_original']);
194
- $return = json_encode(array("error" => array("code" => $resized->get_error_code(), "message" => $resized->get_error_message()), "id" => $fileinfo['basename'], "tip" => "editor->resize->webimage({$webimg['width']}, {$webimg['height']}, {$webimg['crop']})"));
195
- die($return);
196
- }
197
-
198
- $saved = $editor->save($fileinfo['filepath']);
199
- if(is_wp_error($saved)){
200
- @unlink($fileinfo['filepath_original']);
201
- $return = json_encode(array("error" => array("code" => $saved->get_error_code(), "message" => $saved->get_error_message()), "id" => $fileinfo['basename'], "tip" => 'editor->save->webimage'));
202
- die($return);
203
- }
204
- }
205
-
206
- // Thumbnail
207
- $editor->set_quality($thumbimg['quality']);
208
-
209
- $resized = $editor->resize($thumbimg['width'], $thumbimg['height'], $thumbimg['crop']);
210
- if(is_wp_error($resized)){
211
- @unlink($fileinfo['filepath']);
212
- @unlink($fileinfo['filepath_original']);
213
- $return = json_encode(array("error" => array("code" => $resized->get_error_code(), "message" => $resized->get_error_message()), "id" => $fileinfo['basename'], "tip" => "editor->resize->thumb({$thumbimg['width']}, {$thumbimg['height']}, {$thumbimg['crop']})"));
214
- die($return);
215
- }
216
-
217
- $saved = $editor->save($fileinfo['filepath_thumb']);
218
- if(is_wp_error($saved)){
219
- @unlink($fileinfo['filepath']);
220
- @unlink($fileinfo['filepath_original']);
221
- $return = json_encode(array("error" => array("code" => $saved->get_error_code(), "message" => $saved->get_error_message()), "id" => $fileinfo['basename'], "tip" => 'editor->save->thumb'));
222
- die($return);
223
- }
224
- } else{
225
- copy($fileinfo['filepath'], $fileinfo['filepath_thumb']);
226
- }
227
- $is_webimage = true;
228
- } else{
229
- @unlink($fileinfo['filepath']);
230
- $return = json_encode(array("error" => array("code" => 104, "message" => __("Could not read image size. Invalid image was deleted.", 'gmLang')), "id" => $fileinfo['basename']));
231
- die($return);
232
- }
233
- }
234
-
235
- // Write media data to DB
236
- $link = '';
237
- $description = '';
238
- // TODO Option to set title empty string or from metadata or from filename or both
239
- $title = $fileinfo['title'];
240
- // use image exif/iptc data for title and caption defaults if possible
241
- if($size){
242
- $image_meta = @wp_read_image_metadata($fileinfo['filepath_original']);
243
- if(trim($image_meta['caption'])){
244
- $description = $image_meta['caption'];
245
- }
246
- if(trim($image_meta['title']) && !is_numeric(sanitize_title($image_meta['title']))){
247
- $title = $image_meta['title'];
248
- }
249
- }
250
-
251
- $post_data = array();
252
- if(isset($_REQUEST['params'])){
253
- parse_str($_REQUEST['params'], $post_data);
254
-
255
- if(!$is_webimage){
256
- unset($post_data['terms']['gmedia_category']);
257
- }
258
- }
259
-
260
- // Construct the media array
261
- $media_data = array('mime_type' => $fileinfo['mime_type'], 'gmuid' => $fileinfo['basename'], 'title' => $title, 'link' => $link, 'description' => $description);
262
- $media_data = wp_parse_args($media_data, $post_data);
263
-
264
- global $gmDB;
265
- // Save the data
266
- $id = $gmDB->insert_gmedia($media_data);
267
- $gmDB->update_metadata($meta_type = 'gmedia', $id, $meta_key = '_metadata', $gmDB->generate_gmedia_metadata($id, $fileinfo));
268
-
269
- $return = json_encode(array("success" => array("code" => 200, "message" => sprintf(__('File uploaded successful. Assigned ID: %s', 'gmLang'), $id)), "id" => $fileinfo['basename']));
270
- die($return);
271
- } else{
272
- $return = json_encode(array("success" => array("code" => 199, "message" => $chunk . '/' . $chunks), "id" => $fileinfo['basename']));
273
- die($return);
274
- }
275
- } else{
276
- $return = json_encode(array("error" => array("code" => 102, "message" => __("Failed to open output stream.", 'gmLang')), "id" => $fileinfo['basename']));
277
- die($return);
278
- }
279
  }
280
 
 
 
 
281
  die($return);
12
 
13
  require_once(dirname(dirname(__FILE__)) . '/config.php');
14
 
 
 
 
15
  // HTTP headers for no cache etc
16
  nocache_headers();
17
 
18
+ if(!current_user_can('gmedia_upload')){
19
+ wp_die(__('You do not have permission to upload files in Gmedia Library.'));
20
  }
21
 
22
  check_admin_referer('grandMedia');
60
  $file_tmp = "php://input";
61
  }
62
 
63
+ $post_data = array();
64
+ if(isset($_REQUEST['params'])){
65
+ parse_str($_REQUEST['params'], $post_data);
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
66
  }
67
 
68
+ $return = $gmCore->gmedia_upload_handler($file_tmp, $fileinfo, $contentType, $post_data);
69
+ $return = json_encode($return);
70
+
71
  die($return);
admin/wpmedia.php CHANGED
@@ -19,9 +19,14 @@ function grandWPMedia(){
19
  }
20
  $gm_screen_options = array_merge($gmGallery->options['gm_screen_options'], $gm_screen_options);
21
 
22
- $arg = array('mime_type' => $gmCore->_get('mime_type', ''), 'orderby' => $gmCore->_get('orderby', $gm_screen_options['orderby_wpmedia']),
23
- 'order' => $gmCore->_get('order', $gm_screen_options['sortorder_wpmedia']), 'limit' => $gm_screen_options['per_page_wpmedia'], 'filter' => $gmCore->_get('filter', ''),
24
- 's' => $gmCore->_get('s', ''));
 
 
 
 
 
25
  $wpMediaLib = $gmDB->get_wp_media_lib($arg);
26
 
27
  $gm_qty = array('total' => '', 'image' => '', 'audio' => '', 'video' => '', 'text' => '', 'application' => '', 'other' => '');
@@ -86,40 +91,40 @@ function grandWPMedia(){
86
  <li role="presentation" class="dropdown-header"><?php _e('TYPE', 'gmLang'); ?></li>
87
  <li class="total<?php if(in_array('total', $curr_mime)){
88
  echo ' active';
89
- } ?>"><a rel="total" href="<?php echo $gmCore->get_admin_url(array(), array('mime_type', 'pager')); ?>"><?php _e('All', 'gmLang');
90
- echo $gm_qty['total']; ?></a></li>
91
  <li class="image<?php if(in_array('image', $curr_mime)){
92
  echo ' active';
93
  }
94
  if(!$gmDbCount['image']){
95
  echo ' disabled';
96
  } ?>">
97
- <a rel="image" href="<?php echo $gmCore->get_admin_url(array('mime_type' => 'image'), array('pager')); ?>"><?php _e('Images', 'gmLang');
98
- echo $gm_qty['image']; ?></a></li>
99
  <li class="audio<?php if(in_array('audio', $curr_mime)){
100
  echo ' active';
101
  }
102
  if(!$gmDbCount['audio']){
103
  echo ' disabled';
104
  } ?>">
105
- <a rel="audio" href="<?php echo $gmCore->get_admin_url(array('mime_type' => 'audio'), array('pager')); ?>"><?php _e('Audio', 'gmLang');
106
- echo $gm_qty['audio']; ?></a></li>
107
  <li class="video<?php if(in_array('video', $curr_mime)){
108
  echo ' active';
109
  }
110
  if(!$gmDbCount['video']){
111
  echo ' disabled';
112
  } ?>">
113
- <a rel="video" href="<?php echo $gmCore->get_admin_url(array('mime_type' => 'video'), array('pager')); ?>"><?php _e('Video', 'gmLang');
114
- echo $gm_qty['video']; ?></a></li>
115
  <li class="application<?php if(in_array('application', $curr_mime) || in_array('text', $curr_mime)){
116
  echo ' active';
117
  }
118
  if(!$gmDbCount['application']){
119
  echo ' disabled';
120
  } ?>">
121
- <a rel="application" href="<?php echo $gmCore->get_admin_url(array('mime_type' => 'application,text'), array('pager')); ?>"><?php _e('Other', 'gmLang');
122
- echo $gm_qty['other']; ?></a></li>
123
  <?php do_action('gmedia_wp_filter_list'); ?>
124
  </ul>
125
  </div>
@@ -134,7 +139,12 @@ function grandWPMedia(){
134
  $rel_selected_hide = 'rel-selected-hide';
135
  ?>
136
  <ul class="dropdown-menu" role="menu">
137
- <li class="<?php echo $rel_selected_show; ?>"><a href="#importModal" data-modal="import-wpmedia" data-action="gmedia_import_modal" class="gmedia-modal"><?php _e('Import to Gmedia Library...', 'gmLang'); ?></a></li>
 
 
 
 
 
138
  <!-- <li class="divider <?php echo $rel_selected_hide; ?>"></li> -->
139
  <li class="dropdown-header <?php echo $rel_selected_hide; ?>"><span><?php _e("Select items to see more actions", "gmLang"); ?></span></li>
140
  <?php do_action('gmedia_action_list'); ?>
@@ -158,68 +168,72 @@ function grandWPMedia(){
158
  </div>
159
  <div class="panel-body"></div>
160
  <?php if(!empty($wpMediaLib)){ ?>
161
- <table class="table table-striped table-hover table-condenced" cellspacing="0">
162
- <col class="cb" style="width:40px;"/>
163
- <col class="id" style="width:80px;"/>
164
- <col class="file" style="width:100px;"/>
165
- <col class="type" style="width:80px;"/>
166
- <col class="title"/>
167
- <col class="descr hidden-xs"/>
168
- <thead>
169
- <tr>
170
- <th class="cb"><span>#</span></th>
171
- <th class="id">
172
- <?php $new_order = ('ID' == $arg['orderby'])? (('DESC' == $arg['order'])? 'ASC' : 'DESC') : 'DESC'; ?>
173
- <a href="<?php echo $gmCore->get_admin_url(array('orderby' => 'ID', 'order' => $new_order)); ?>"><?php _e('ID', 'gmLang'); ?></a>
174
- </th>
175
- <th class="file" title="<?php _e('Sort by filename', 'gmLang'); ?>">
176
- <?php $new_order = ('filename' == $arg['orderby'])? (('DESC' == $arg['order'])? 'ASC' : 'DESC') : 'DESC'; ?>
177
- <a href="<?php echo $gmCore->get_admin_url(array('orderby' => 'filename',
178
- 'order' => $new_order)); ?>"><?php _e('File', 'gmLang'); ?></a>
179
- </th>
180
- <th class="type"><span><?php _e('Type', 'gmLang'); ?></span></th>
181
- <th class="title">
182
- <?php $new_order = ('title' == $arg['orderby'])? (('DESC' == $arg['order'])? 'ASC' : 'DESC') : 'DESC'; ?>
183
- <a href="<?php echo $gmCore->get_admin_url(array('orderby' => 'title', 'order' => $new_order)); ?>"><?php _e('Title', 'gmLang'); ?></a>
184
- </th>
185
- <th class="descr hidden-xs"><span><?php _e('Description', 'gmLang'); ?></span></th>
186
- </tr>
187
- </thead>
188
- <tbody>
189
- <?php foreach($wpMediaLib as $item){
190
- $is_selected = in_array($item->ID, $gmProcessor->selected_items)? true : false;
191
- $image = wp_get_attachment_image( $item->ID, array( 50, 50 ), false );
192
- if ( ! $image ) {
193
- if ( ($src = wp_mime_type_icon( $item->ID )) ) {
194
- $src_image = $gmCore->gmedia_url . '/admin/images/' . wp_basename( $src );
195
- $image = '<img src="' . $src_image . '" width="50" height="50" alt="icon" title="' . esc_attr($item->post_title) . '"/>';
196
- }
197
- }
198
- $item_url = wp_get_attachment_url( $item->ID );
199
- $file_info = pathinfo( $item_url );
200
- $type = explode( '/', $item->post_mime_type );
201
- ?>
202
- <tr data-id="<?php echo $item->ID; ?>">
203
- <td class="cb">
204
- <span class="cb_media-object"><input name="doaction[]" type="checkbox" data-type="<?php echo $type[0]; ?>" value="<?php echo $item->ID; ?>"<?php echo $is_selected? ' checked="checked"' : ''; ?>/></span>
205
- </td>
206
- <td class="id"><span><?php echo $item->ID; ?></span></td>
207
- <td class="file"><span><a href="<?php echo admin_url( 'media.php?action=edit&amp;attachment_id=' . $item->ID ); ?>"><?php echo $image; ?></a></span></td>
208
- <td class="type"><span><?php echo $file_info['extension']; ?></span></td>
209
- <td class="title"><span><?php echo esc_html($item->post_title); ?></span></td>
210
- <td class="descr hidden-xs">
211
- <div><?php echo esc_html($item->post_content); ?></div>
212
- </td>
213
  </tr>
214
- <?php } ?>
215
- </tbody>
216
- </table>
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
217
  <?php } else{ ?>
218
- <div class="panel-body">
219
- <div class="well well-lg text-center">
220
- <h4><?php _e('No items to show.', 'gmLang'); ?></h4>
 
221
  </div>
222
- </div>
223
  <?php } ?>
224
  <?php
225
  wp_original_referer_field(true, 'previous');
19
  }
20
  $gm_screen_options = array_merge($gmGallery->options['gm_screen_options'], $gm_screen_options);
21
 
22
+ $arg = array(
23
+ 'mime_type' => $gmCore->_get('mime_type', ''),
24
+ 'orderby' => $gmCore->_get('orderby', $gm_screen_options['orderby_wpmedia']),
25
+ 'order' => $gmCore->_get('order', $gm_screen_options['sortorder_wpmedia']),
26
+ 'limit' => $gm_screen_options['per_page_wpmedia'],
27
+ 'filter' => $gmCore->_get('filter', ''),
28
+ 's' => $gmCore->_get('s', '')
29
+ );
30
  $wpMediaLib = $gmDB->get_wp_media_lib($arg);
31
 
32
  $gm_qty = array('total' => '', 'image' => '', 'audio' => '', 'video' => '', 'text' => '', 'application' => '', 'other' => '');
91
  <li role="presentation" class="dropdown-header"><?php _e('TYPE', 'gmLang'); ?></li>
92
  <li class="total<?php if(in_array('total', $curr_mime)){
93
  echo ' active';
94
+ } ?>"><a rel="total" href="<?php echo $gmCore->get_admin_url(array(), array('mime_type', 'pager')); ?>"><?php echo $gm_qty['total'];
95
+ _e('All', 'gmLang'); ?></a></li>
96
  <li class="image<?php if(in_array('image', $curr_mime)){
97
  echo ' active';
98
  }
99
  if(!$gmDbCount['image']){
100
  echo ' disabled';
101
  } ?>">
102
+ <a rel="image" href="<?php echo $gmCore->get_admin_url(array('mime_type' => 'image'), array('pager')); ?>"><?php echo $gm_qty['image'];
103
+ _e('Images', 'gmLang'); ?></a></li>
104
  <li class="audio<?php if(in_array('audio', $curr_mime)){
105
  echo ' active';
106
  }
107
  if(!$gmDbCount['audio']){
108
  echo ' disabled';
109
  } ?>">
110
+ <a rel="audio" href="<?php echo $gmCore->get_admin_url(array('mime_type' => 'audio'), array('pager')); ?>"><?php echo $gm_qty['audio'];
111
+ _e('Audio', 'gmLang'); ?></a></li>
112
  <li class="video<?php if(in_array('video', $curr_mime)){
113
  echo ' active';
114
  }
115
  if(!$gmDbCount['video']){
116
  echo ' disabled';
117
  } ?>">
118
+ <a rel="video" href="<?php echo $gmCore->get_admin_url(array('mime_type' => 'video'), array('pager')); ?>"><?php echo $gm_qty['video'];
119
+ _e('Video', 'gmLang'); ?></a></li>
120
  <li class="application<?php if(in_array('application', $curr_mime) || in_array('text', $curr_mime)){
121
  echo ' active';
122
  }
123
  if(!$gmDbCount['application']){
124
  echo ' disabled';
125
  } ?>">
126
+ <a rel="application" href="<?php echo $gmCore->get_admin_url(array('mime_type' => 'application,text'), array('pager')); ?>"><?php echo $gm_qty['other'];
127
+ _e('Other', 'gmLang'); ?></a></li>
128
  <?php do_action('gmedia_wp_filter_list'); ?>
129
  </ul>
130
  </div>
139
  $rel_selected_hide = 'rel-selected-hide';
140
  ?>
141
  <ul class="dropdown-menu" role="menu">
142
+ <li class="<?php echo $rel_selected_show;
143
+ if(!$gmCore->caps['gmedia_import']){
144
+ echo ' disabled';
145
+ } ?>">
146
+ <a href="#importModal" data-modal="import-wpmedia" data-action="gmedia_import_modal" class="gmedia-modal"><?php _e('Import to Gmedia Library...', 'gmLang'); ?></a>
147
+ </li>
148
  <!-- <li class="divider <?php echo $rel_selected_hide; ?>"></li> -->
149
  <li class="dropdown-header <?php echo $rel_selected_hide; ?>"><span><?php _e("Select items to see more actions", "gmLang"); ?></span></li>
150
  <?php do_action('gmedia_action_list'); ?>
168
  </div>
169
  <div class="panel-body"></div>
170
  <?php if(!empty($wpMediaLib)){ ?>
171
+ <table class="table table-striped table-hover table-condenced" cellspacing="0">
172
+ <col class="cb" style="width:40px;"/>
173
+ <col class="id" style="width:80px;"/>
174
+ <col class="file" style="width:100px;"/>
175
+ <col class="type" style="width:80px;"/>
176
+ <col class="title"/>
177
+ <col class="descr hidden-xs"/>
178
+ <thead>
179
+ <tr>
180
+ <th class="cb"><span>#</span></th>
181
+ <th class="id">
182
+ <?php $new_order = ('ID' == $arg['orderby'])? (('DESC' == $arg['order'])? 'ASC' : 'DESC') : 'DESC'; ?>
183
+ <a href="<?php echo $gmCore->get_admin_url(array('orderby' => 'ID', 'order' => $new_order)); ?>"><?php _e('ID', 'gmLang'); ?></a>
184
+ </th>
185
+ <th class="file" title="<?php _e('Sort by filename', 'gmLang'); ?>">
186
+ <?php $new_order = ('filename' == $arg['orderby'])? (('DESC' == $arg['order'])? 'ASC' : 'DESC') : 'DESC'; ?>
187
+ <a href="<?php echo $gmCore->get_admin_url(array(
188
+ 'orderby' => 'filename',
189
+ 'order' => $new_order
190
+ )); ?>"><?php _e('File', 'gmLang'); ?></a>
191
+ </th>
192
+ <th class="type"><span><?php _e('Type', 'gmLang'); ?></span></th>
193
+ <th class="title">
194
+ <?php $new_order = ('title' == $arg['orderby'])? (('DESC' == $arg['order'])? 'ASC' : 'DESC') : 'DESC'; ?>
195
+ <a href="<?php echo $gmCore->get_admin_url(array('orderby' => 'title', 'order' => $new_order)); ?>"><?php _e('Title', 'gmLang'); ?></a>
196
+ </th>
197
+ <th class="descr hidden-xs"><span><?php _e('Description', 'gmLang'); ?></span></th>
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
198
  </tr>
199
+ </thead>
200
+ <tbody>
201
+ <?php foreach($wpMediaLib as $item){
202
+ $is_selected = in_array($item->ID, $gmProcessor->selected_items)? true : false;
203
+ $image = wp_get_attachment_image($item->ID, array(50, 50), false);
204
+ if(!$image){
205
+ if(($src = wp_mime_type_icon($item->ID))){
206
+ $src_image = $gmCore->gmedia_url . '/admin/images/' . wp_basename($src);
207
+ $image = '<img src="' . $src_image . '" width="50" height="50" alt="icon" title="' . esc_attr($item->post_title) . '"/>';
208
+ }
209
+ }
210
+ $item_url = wp_get_attachment_url($item->ID);
211
+ $file_info = pathinfo($item_url);
212
+ $type = explode('/', $item->post_mime_type);
213
+ ?>
214
+ <tr data-id="<?php echo $item->ID; ?>">
215
+ <td class="cb">
216
+ <span class="cb_media-object"><input name="doaction[]" type="checkbox" data-type="<?php echo $type[0]; ?>" value="<?php echo $item->ID; ?>"<?php echo $is_selected? ' checked="checked"' : ''; ?>/></span>
217
+ </td>
218
+ <td class="id"><span><?php echo $item->ID; ?></span></td>
219
+ <td class="file">
220
+ <span><a href="<?php echo admin_url('media.php?action=edit&amp;attachment_id=' . $item->ID); ?>"><?php echo $image; ?></a></span>
221
+ </td>
222
+ <td class="type"><span><?php echo $file_info['extension']; ?></span></td>
223
+ <td class="title"><span><?php echo esc_html($item->post_title); ?></span></td>
224
+ <td class="descr hidden-xs">
225
+ <div><?php echo esc_html($item->post_content); ?></div>
226
+ </td>
227
+ </tr>
228
+ <?php } ?>
229
+ </tbody>
230
+ </table>
231
  <?php } else{ ?>
232
+ <div class="panel-body">
233
+ <div class="well well-lg text-center">
234
+ <h4><?php _e('No items to show.', 'gmLang'); ?></h4>
235
+ </div>
236
  </div>
 
237
  <?php } ?>
238
  <?php
239
  wp_original_referer_field(true, 'previous');
assets/bootstrap/css/bootstrap-theme.css CHANGED
@@ -1,7 +1,7 @@
1
  /*!
2
- * Bootstrap v3.0.3 (http://getbootstrap.com)
3
- * Copyright 2013 Twitter, Inc.
4
- * Licensed under http://www.apache.org/licenses/LICENSE-2.0
5
  */
6
 
7
  .btn-default,
@@ -10,11 +10,10 @@
10
  .btn-info,
11
  .btn-warning,
12
  .btn-danger {
13
- text-shadow: 0 -1px 0 rgba(0, 0, 0, 0.2);
14
- -webkit-box-shadow: inset 0 1px 0 rgba(255, 255, 255, 0.15), 0 1px 1px rgba(0, 0, 0, 0.075);
15
- box-shadow: inset 0 1px 0 rgba(255, 255, 255, 0.15), 0 1px 1px rgba(0, 0, 0, 0.075);
16
  }
17
-
18
  .btn-default:active,
19
  .btn-primary:active,
20
  .btn-success:active,
@@ -27,371 +26,417 @@
27
  .btn-info.active,
28
  .btn-warning.active,
29
  .btn-danger.active {
30
- -webkit-box-shadow: inset 0 3px 5px rgba(0, 0, 0, 0.125);
31
- box-shadow: inset 0 3px 5px rgba(0, 0, 0, 0.125);
32
  }
33
-
34
  .btn:active,
35
  .btn.active {
36
  background-image: none;
37
  }
38
-
39
  .btn-default {
40
  text-shadow: 0 1px 0 #fff;
41
- background-image: -webkit-linear-gradient(top, #ffffff 0%, #e0e0e0 100%);
42
- background-image: linear-gradient(to bottom, #ffffff 0%, #e0e0e0 100%);
 
 
 
 
43
  background-repeat: repeat-x;
44
  border-color: #dbdbdb;
45
  border-color: #ccc;
46
- filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ffffffff', endColorstr='#ffe0e0e0', GradientType=0);
47
- filter: progid:DXImageTransform.Microsoft.gradient(enabled=false);
48
  }
49
-
50
  .btn-default:hover,
51
  .btn-default:focus {
52
  background-color: #e0e0e0;
53
  background-position: 0 -15px;
54
  }
55
-
56
  .btn-default:active,
57
  .btn-default.active {
58
  background-color: #e0e0e0;
59
  border-color: #dbdbdb;
60
  }
61
-
 
 
 
 
62
  .btn-primary {
63
  background-image: -webkit-linear-gradient(top, #428bca 0%, #2d6ca2 100%);
64
- background-image: linear-gradient(to bottom, #428bca 0%, #2d6ca2 100%);
 
 
 
 
65
  background-repeat: repeat-x;
66
  border-color: #2b669a;
67
- filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff428bca', endColorstr='#ff2d6ca2', GradientType=0);
68
- filter: progid:DXImageTransform.Microsoft.gradient(enabled=false);
69
  }
70
-
71
  .btn-primary:hover,
72
  .btn-primary:focus {
73
  background-color: #2d6ca2;
74
  background-position: 0 -15px;
75
  }
76
-
77
  .btn-primary:active,
78
  .btn-primary.active {
79
  background-color: #2d6ca2;
80
  border-color: #2b669a;
81
  }
82
-
 
 
 
 
83
  .btn-success {
84
  background-image: -webkit-linear-gradient(top, #5cb85c 0%, #419641 100%);
85
- background-image: linear-gradient(to bottom, #5cb85c 0%, #419641 100%);
 
 
 
 
86
  background-repeat: repeat-x;
87
  border-color: #3e8f3e;
88
- filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff5cb85c', endColorstr='#ff419641', GradientType=0);
89
- filter: progid:DXImageTransform.Microsoft.gradient(enabled=false);
90
  }
91
-
92
  .btn-success:hover,
93
  .btn-success:focus {
94
  background-color: #419641;
95
  background-position: 0 -15px;
96
  }
97
-
98
  .btn-success:active,
99
  .btn-success.active {
100
  background-color: #419641;
101
  border-color: #3e8f3e;
102
  }
103
-
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
104
  .btn-warning {
105
  background-image: -webkit-linear-gradient(top, #f0ad4e 0%, #eb9316 100%);
106
- background-image: linear-gradient(to bottom, #f0ad4e 0%, #eb9316 100%);
 
 
 
 
107
  background-repeat: repeat-x;
108
  border-color: #e38d13;
109
- filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#fff0ad4e', endColorstr='#ffeb9316', GradientType=0);
110
- filter: progid:DXImageTransform.Microsoft.gradient(enabled=false);
111
  }
112
-
113
  .btn-warning:hover,
114
  .btn-warning:focus {
115
  background-color: #eb9316;
116
  background-position: 0 -15px;
117
  }
118
-
119
  .btn-warning:active,
120
  .btn-warning.active {
121
  background-color: #eb9316;
122
  border-color: #e38d13;
123
  }
124
-
 
 
 
 
125
  .btn-danger {
126
  background-image: -webkit-linear-gradient(top, #d9534f 0%, #c12e2a 100%);
127
- background-image: linear-gradient(to bottom, #d9534f 0%, #c12e2a 100%);
 
 
 
 
128
  background-repeat: repeat-x;
129
  border-color: #b92c28;
130
- filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ffd9534f', endColorstr='#ffc12e2a', GradientType=0);
131
- filter: progid:DXImageTransform.Microsoft.gradient(enabled=false);
132
  }
133
-
134
  .btn-danger:hover,
135
  .btn-danger:focus {
136
  background-color: #c12e2a;
137
  background-position: 0 -15px;
138
  }
139
-
140
  .btn-danger:active,
141
  .btn-danger.active {
142
  background-color: #c12e2a;
143
  border-color: #b92c28;
144
  }
145
-
146
- .btn-info {
147
- background-image: -webkit-linear-gradient(top, #5bc0de 0%, #2aabd2 100%);
148
- background-image: linear-gradient(to bottom, #5bc0de 0%, #2aabd2 100%);
149
- background-repeat: repeat-x;
150
- border-color: #28a4c9;
151
- filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff5bc0de', endColorstr='#ff2aabd2', GradientType=0);
152
- filter: progid:DXImageTransform.Microsoft.gradient(enabled=false);
153
- }
154
-
155
- .btn-info:hover,
156
- .btn-info:focus {
157
- background-color: #2aabd2;
158
- background-position: 0 -15px;
159
- }
160
-
161
- .btn-info:active,
162
- .btn-info.active {
163
- background-color: #2aabd2;
164
- border-color: #28a4c9;
165
  }
166
-
167
  .thumbnail,
168
  .img-thumbnail {
169
- -webkit-box-shadow: 0 1px 2px rgba(0, 0, 0, 0.075);
170
- box-shadow: 0 1px 2px rgba(0, 0, 0, 0.075);
171
  }
172
-
173
  .dropdown-menu > li > a:hover,
174
  .dropdown-menu > li > a:focus {
175
  background-color: #e8e8e8;
176
  background-image: -webkit-linear-gradient(top, #f5f5f5 0%, #e8e8e8 100%);
177
- background-image: linear-gradient(to bottom, #f5f5f5 0%, #e8e8e8 100%);
178
- background-repeat: repeat-x;
 
179
  filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#fff5f5f5', endColorstr='#ffe8e8e8', GradientType=0);
 
180
  }
181
-
182
  .dropdown-menu > .active > a,
183
  .dropdown-menu > .active > a:hover,
184
  .dropdown-menu > .active > a:focus {
185
  background-color: #357ebd;
186
  background-image: -webkit-linear-gradient(top, #428bca 0%, #357ebd 100%);
187
- background-image: linear-gradient(to bottom, #428bca 0%, #357ebd 100%);
188
- background-repeat: repeat-x;
 
189
  filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff428bca', endColorstr='#ff357ebd', GradientType=0);
 
190
  }
191
-
192
  .navbar-default {
193
- background-image: -webkit-linear-gradient(top, #ffffff 0%, #f8f8f8 100%);
194
- background-image: linear-gradient(to bottom, #ffffff 0%, #f8f8f8 100%);
 
 
 
 
195
  background-repeat: repeat-x;
196
  border-radius: 4px;
197
- filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ffffffff', endColorstr='#fff8f8f8', GradientType=0);
198
- filter: progid:DXImageTransform.Microsoft.gradient(enabled=false);
199
- -webkit-box-shadow: inset 0 1px 0 rgba(255, 255, 255, 0.15), 0 1px 5px rgba(0, 0, 0, 0.075);
200
- box-shadow: inset 0 1px 0 rgba(255, 255, 255, 0.15), 0 1px 5px rgba(0, 0, 0, 0.075);
201
  }
202
-
203
  .navbar-default .navbar-nav > .active > a {
204
  background-image: -webkit-linear-gradient(top, #ebebeb 0%, #f3f3f3 100%);
205
- background-image: linear-gradient(to bottom, #ebebeb 0%, #f3f3f3 100%);
206
- background-repeat: repeat-x;
 
207
  filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ffebebeb', endColorstr='#fff3f3f3', GradientType=0);
208
- -webkit-box-shadow: inset 0 3px 9px rgba(0, 0, 0, 0.075);
209
- box-shadow: inset 0 3px 9px rgba(0, 0, 0, 0.075);
 
210
  }
211
-
212
  .navbar-brand,
213
  .navbar-nav > li > a {
214
- text-shadow: 0 1px 0 rgba(255, 255, 255, 0.25);
215
  }
216
-
217
  .navbar-inverse {
218
- background-image: -webkit-linear-gradient(top, #3c3c3c 0%, #222222 100%);
219
- background-image: linear-gradient(to bottom, #3c3c3c 0%, #222222 100%);
220
- background-repeat: repeat-x;
 
221
  filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff3c3c3c', endColorstr='#ff222222', GradientType=0);
222
- filter: progid:DXImageTransform.Microsoft.gradient(enabled=false);
 
223
  }
224
-
225
  .navbar-inverse .navbar-nav > .active > a {
226
- background-image: -webkit-linear-gradient(top, #222222 0%, #282828 100%);
227
- background-image: linear-gradient(to bottom, #222222 0%, #282828 100%);
228
- background-repeat: repeat-x;
 
229
  filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff222222', endColorstr='#ff282828', GradientType=0);
230
- -webkit-box-shadow: inset 0 3px 9px rgba(0, 0, 0, 0.25);
231
- box-shadow: inset 0 3px 9px rgba(0, 0, 0, 0.25);
 
232
  }
233
-
234
  .navbar-inverse .navbar-brand,
235
  .navbar-inverse .navbar-nav > li > a {
236
- text-shadow: 0 -1px 0 rgba(0, 0, 0, 0.25);
237
  }
238
-
239
  .navbar-static-top,
240
  .navbar-fixed-top,
241
  .navbar-fixed-bottom {
242
  border-radius: 0;
243
  }
244
-
245
  .alert {
246
- text-shadow: 0 1px 0 rgba(255, 255, 255, 0.2);
247
- -webkit-box-shadow: inset 0 1px 0 rgba(255, 255, 255, 0.25), 0 1px 2px rgba(0, 0, 0, 0.05);
248
- box-shadow: inset 0 1px 0 rgba(255, 255, 255, 0.25), 0 1px 2px rgba(0, 0, 0, 0.05);
249
  }
250
-
251
  .alert-success {
252
  background-image: -webkit-linear-gradient(top, #dff0d8 0%, #c8e5bc 100%);
253
- background-image: linear-gradient(to bottom, #dff0d8 0%, #c8e5bc 100%);
 
 
 
254
  background-repeat: repeat-x;
255
  border-color: #b2dba1;
256
- filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ffdff0d8', endColorstr='#ffc8e5bc', GradientType=0);
257
  }
258
-
259
  .alert-info {
260
  background-image: -webkit-linear-gradient(top, #d9edf7 0%, #b9def0 100%);
261
- background-image: linear-gradient(to bottom, #d9edf7 0%, #b9def0 100%);
 
 
 
262
  background-repeat: repeat-x;
263
  border-color: #9acfea;
264
- filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ffd9edf7', endColorstr='#ffb9def0', GradientType=0);
265
  }
266
-
267
  .alert-warning {
268
  background-image: -webkit-linear-gradient(top, #fcf8e3 0%, #f8efc0 100%);
269
- background-image: linear-gradient(to bottom, #fcf8e3 0%, #f8efc0 100%);
 
 
 
270
  background-repeat: repeat-x;
271
  border-color: #f5e79e;
272
- filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#fffcf8e3', endColorstr='#fff8efc0', GradientType=0);
273
  }
274
-
275
  .alert-danger {
276
  background-image: -webkit-linear-gradient(top, #f2dede 0%, #e7c3c3 100%);
277
- background-image: linear-gradient(to bottom, #f2dede 0%, #e7c3c3 100%);
 
 
 
278
  background-repeat: repeat-x;
279
  border-color: #dca7a7;
280
- filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#fff2dede', endColorstr='#ffe7c3c3', GradientType=0);
281
  }
282
-
283
  .progress {
284
  background-image: -webkit-linear-gradient(top, #ebebeb 0%, #f5f5f5 100%);
285
- background-image: linear-gradient(to bottom, #ebebeb 0%, #f5f5f5 100%);
286
- background-repeat: repeat-x;
 
287
  filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ffebebeb', endColorstr='#fff5f5f5', GradientType=0);
 
288
  }
289
-
290
  .progress-bar {
291
  background-image: -webkit-linear-gradient(top, #428bca 0%, #3071a9 100%);
292
- background-image: linear-gradient(to bottom, #428bca 0%, #3071a9 100%);
293
- background-repeat: repeat-x;
 
294
  filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff428bca', endColorstr='#ff3071a9', GradientType=0);
 
295
  }
296
-
297
  .progress-bar-success {
298
  background-image: -webkit-linear-gradient(top, #5cb85c 0%, #449d44 100%);
299
- background-image: linear-gradient(to bottom, #5cb85c 0%, #449d44 100%);
300
- background-repeat: repeat-x;
 
301
  filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff5cb85c', endColorstr='#ff449d44', GradientType=0);
 
302
  }
303
-
304
  .progress-bar-info {
305
  background-image: -webkit-linear-gradient(top, #5bc0de 0%, #31b0d5 100%);
306
- background-image: linear-gradient(to bottom, #5bc0de 0%, #31b0d5 100%);
307
- background-repeat: repeat-x;
 
308
  filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff5bc0de', endColorstr='#ff31b0d5', GradientType=0);
 
309
  }
310
-
311
  .progress-bar-warning {
312
  background-image: -webkit-linear-gradient(top, #f0ad4e 0%, #ec971f 100%);
313
- background-image: linear-gradient(to bottom, #f0ad4e 0%, #ec971f 100%);
314
- background-repeat: repeat-x;
 
315
  filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#fff0ad4e', endColorstr='#ffec971f', GradientType=0);
 
316
  }
317
-
318
  .progress-bar-danger {
319
  background-image: -webkit-linear-gradient(top, #d9534f 0%, #c9302c 100%);
320
- background-image: linear-gradient(to bottom, #d9534f 0%, #c9302c 100%);
321
- background-repeat: repeat-x;
 
322
  filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ffd9534f', endColorstr='#ffc9302c', GradientType=0);
 
 
 
 
 
 
323
  }
324
-
325
  .list-group {
326
  border-radius: 4px;
327
- -webkit-box-shadow: 0 1px 2px rgba(0, 0, 0, 0.075);
328
- box-shadow: 0 1px 2px rgba(0, 0, 0, 0.075);
329
  }
330
-
331
  .list-group-item.active,
332
  .list-group-item.active:hover,
333
  .list-group-item.active:focus {
334
  text-shadow: 0 -1px 0 #3071a9;
335
  background-image: -webkit-linear-gradient(top, #428bca 0%, #3278b3 100%);
336
- background-image: linear-gradient(to bottom, #428bca 0%, #3278b3 100%);
 
 
 
337
  background-repeat: repeat-x;
338
  border-color: #3278b3;
339
- filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff428bca', endColorstr='#ff3278b3', GradientType=0);
340
  }
341
-
342
  .panel {
343
- -webkit-box-shadow: 0 1px 2px rgba(0, 0, 0, 0.05);
344
- box-shadow: 0 1px 2px rgba(0, 0, 0, 0.05);
345
  }
346
-
347
  .panel-default > .panel-heading {
348
  background-image: -webkit-linear-gradient(top, #f5f5f5 0%, #e8e8e8 100%);
349
- background-image: linear-gradient(to bottom, #f5f5f5 0%, #e8e8e8 100%);
350
- background-repeat: repeat-x;
 
351
  filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#fff5f5f5', endColorstr='#ffe8e8e8', GradientType=0);
 
352
  }
353
-
354
  .panel-primary > .panel-heading {
355
  background-image: -webkit-linear-gradient(top, #428bca 0%, #357ebd 100%);
356
- background-image: linear-gradient(to bottom, #428bca 0%, #357ebd 100%);
357
- background-repeat: repeat-x;
 
358
  filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff428bca', endColorstr='#ff357ebd', GradientType=0);
 
359
  }
360
-
361
  .panel-success > .panel-heading {
362
  background-image: -webkit-linear-gradient(top, #dff0d8 0%, #d0e9c6 100%);
363
- background-image: linear-gradient(to bottom, #dff0d8 0%, #d0e9c6 100%);
364
- background-repeat: repeat-x;
 
365
  filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ffdff0d8', endColorstr='#ffd0e9c6', GradientType=0);
 
366
  }
367
-
368
  .panel-info > .panel-heading {
369
  background-image: -webkit-linear-gradient(top, #d9edf7 0%, #c4e3f3 100%);
370
- background-image: linear-gradient(to bottom, #d9edf7 0%, #c4e3f3 100%);
371
- background-repeat: repeat-x;
 
372
  filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ffd9edf7', endColorstr='#ffc4e3f3', GradientType=0);
 
373
  }
374
-
375
  .panel-warning > .panel-heading {
376
  background-image: -webkit-linear-gradient(top, #fcf8e3 0%, #faf2cc 100%);
377
- background-image: linear-gradient(to bottom, #fcf8e3 0%, #faf2cc 100%);
378
- background-repeat: repeat-x;
 
379
  filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#fffcf8e3', endColorstr='#fffaf2cc', GradientType=0);
 
380
  }
381
-
382
  .panel-danger > .panel-heading {
383
  background-image: -webkit-linear-gradient(top, #f2dede 0%, #ebcccc 100%);
384
- background-image: linear-gradient(to bottom, #f2dede 0%, #ebcccc 100%);
385
- background-repeat: repeat-x;
 
386
  filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#fff2dede', endColorstr='#ffebcccc', GradientType=0);
 
387
  }
388
-
389
  .well {
390
  background-image: -webkit-linear-gradient(top, #e8e8e8 0%, #f5f5f5 100%);
391
- background-image: linear-gradient(to bottom, #e8e8e8 0%, #f5f5f5 100%);
 
 
 
392
  background-repeat: repeat-x;
393
  border-color: #dcdcdc;
394
- filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ffe8e8e8', endColorstr='#fff5f5f5', GradientType=0);
395
- -webkit-box-shadow: inset 0 1px 3px rgba(0, 0, 0, 0.05), 0 1px 0 rgba(255, 255, 255, 0.1);
396
- box-shadow: inset 0 1px 3px rgba(0, 0, 0, 0.05), 0 1px 0 rgba(255, 255, 255, 0.1);
397
- }
1
  /*!
2
+ * Bootstrap v3.2.0 (http://getbootstrap.com)
3
+ * Copyright 2011-2014 Twitter, Inc.
4
+ * Licensed under MIT (https://github.com/twbs/bootstrap/blob/master/LICENSE)
5
  */
6
 
7
  .btn-default,
10
  .btn-info,
11
  .btn-warning,
12
  .btn-danger {
13
+ text-shadow: 0 -1px 0 rgba(0, 0, 0, .2);
14
+ -webkit-box-shadow: inset 0 1px 0 rgba(255, 255, 255, .15), 0 1px 1px rgba(0, 0, 0, .075);
15
+ box-shadow: inset 0 1px 0 rgba(255, 255, 255, .15), 0 1px 1px rgba(0, 0, 0, .075);
16
  }
 
17
  .btn-default:active,
18
  .btn-primary:active,
19
  .btn-success:active,
26
  .btn-info.active,
27
  .btn-warning.active,
28
  .btn-danger.active {
29
+ -webkit-box-shadow: inset 0 3px 5px rgba(0, 0, 0, .125);
30
+ box-shadow: inset 0 3px 5px rgba(0, 0, 0, .125);
31
  }
 
32
  .btn:active,
33
  .btn.active {
34
  background-image: none;
35
  }
 
36
  .btn-default {
37
  text-shadow: 0 1px 0 #fff;
38
+ background-image: -webkit-linear-gradient(top, #fff 0%, #e0e0e0 100%);
39
+ background-image: -o-linear-gradient(top, #fff 0%, #e0e0e0 100%);
40
+ background-image: -webkit-gradient(linear, left top, left bottom, from(#fff), to(#e0e0e0));
41
+ background-image: linear-gradient(to bottom, #fff 0%, #e0e0e0 100%);
42
+ filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ffffffff', endColorstr='#ffe0e0e0', GradientType=0);
43
+ filter: progid:DXImageTransform.Microsoft.gradient(enabled = false);
44
  background-repeat: repeat-x;
45
  border-color: #dbdbdb;
46
  border-color: #ccc;
 
 
47
  }
 
48
  .btn-default:hover,
49
  .btn-default:focus {
50
  background-color: #e0e0e0;
51
  background-position: 0 -15px;
52
  }
 
53
  .btn-default:active,
54
  .btn-default.active {
55
  background-color: #e0e0e0;
56
  border-color: #dbdbdb;
57
  }
58
+ .btn-default:disabled,
59
+ .btn-default[disabled] {
60
+ background-color: #e0e0e0;
61
+ background-image: none;
62
+ }
63
  .btn-primary {
64
  background-image: -webkit-linear-gradient(top, #428bca 0%, #2d6ca2 100%);
65
+ background-image: -o-linear-gradient(top, #428bca 0%, #2d6ca2 100%);
66
+ background-image: -webkit-gradient(linear, left top, left bottom, from(#428bca), to(#2d6ca2));
67
+ background-image: linear-gradient(to bottom, #428bca 0%, #2d6ca2 100%);
68
+ filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff428bca', endColorstr='#ff2d6ca2', GradientType=0);
69
+ filter: progid:DXImageTransform.Microsoft.gradient(enabled = false);
70
  background-repeat: repeat-x;
71
  border-color: #2b669a;
 
 
72
  }
 
73
  .btn-primary:hover,
74
  .btn-primary:focus {
75
  background-color: #2d6ca2;
76
  background-position: 0 -15px;
77
  }
 
78
  .btn-primary:active,
79
  .btn-primary.active {
80
  background-color: #2d6ca2;
81
  border-color: #2b669a;
82
  }
83
+ .btn-primary:disabled,
84
+ .btn-primary[disabled] {
85
+ background-color: #2d6ca2;
86
+ background-image: none;
87
+ }
88
  .btn-success {
89
  background-image: -webkit-linear-gradient(top, #5cb85c 0%, #419641 100%);
90
+ background-image: -o-linear-gradient(top, #5cb85c 0%, #419641 100%);
91
+ background-image: -webkit-gradient(linear, left top, left bottom, from(#5cb85c), to(#419641));
92
+ background-image: linear-gradient(to bottom, #5cb85c 0%, #419641 100%);
93
+ filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff5cb85c', endColorstr='#ff419641', GradientType=0);
94
+ filter: progid:DXImageTransform.Microsoft.gradient(enabled = false);
95
  background-repeat: repeat-x;
96
  border-color: #3e8f3e;
 
 
97
  }
 
98
  .btn-success:hover,
99
  .btn-success:focus {
100
  background-color: #419641;
101
  background-position: 0 -15px;
102
  }
 
103
  .btn-success:active,
104
  .btn-success.active {
105
  background-color: #419641;
106
  border-color: #3e8f3e;
107
  }
108
+ .btn-success:disabled,
109
+ .btn-success[disabled] {
110
+ background-color: #419641;
111
+ background-image: none;
112
+ }
113
+ .btn-info {
114
+ background-image: -webkit-linear-gradient(top, #5bc0de 0%, #2aabd2 100%);
115
+ background-image: -o-linear-gradient(top, #5bc0de 0%, #2aabd2 100%);
116
+ background-image: -webkit-gradient(linear, left top, left bottom, from(#5bc0de), to(#2aabd2));
117
+ background-image: linear-gradient(to bottom, #5bc0de 0%, #2aabd2 100%);
118
+ filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff5bc0de', endColorstr='#ff2aabd2', GradientType=0);
119
+ filter: progid:DXImageTransform.Microsoft.gradient(enabled = false);
120
+ background-repeat: repeat-x;
121
+ border-color: #28a4c9;
122
+ }
123
+ .btn-info:hover,
124
+ .btn-info:focus {
125
+ background-color: #2aabd2;
126
+ background-position: 0 -15px;
127
+ }
128
+ .btn-info:active,
129
+ .btn-info.active {
130
+ background-color: #2aabd2;
131
+ border-color: #28a4c9;
132
+ }
133
+ .btn-info:disabled,
134
+ .btn-info[disabled] {
135
+ background-color: #2aabd2;
136
+ background-image: none;
137
+ }
138
  .btn-warning {
139
  background-image: -webkit-linear-gradient(top, #f0ad4e 0%, #eb9316 100%);
140
+ background-image: -o-linear-gradient(top, #f0ad4e 0%, #eb9316 100%);
141
+ background-image: -webkit-gradient(linear, left top, left bottom, from(#f0ad4e), to(#eb9316));
142
+ background-image: linear-gradient(to bottom, #f0ad4e 0%, #eb9316 100%);
143
+ filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#fff0ad4e', endColorstr='#ffeb9316', GradientType=0);
144
+ filter: progid:DXImageTransform.Microsoft.gradient(enabled = false);
145
  background-repeat: repeat-x;
146
  border-color: #e38d13;
 
 
147
  }
 
148
  .btn-warning:hover,
149
  .btn-warning:focus {
150
  background-color: #eb9316;
151
  background-position: 0 -15px;
152
  }
 
153
  .btn-warning:active,
154
  .btn-warning.active {
155
  background-color: #eb9316;
156
  border-color: #e38d13;
157
  }
158
+ .btn-warning:disabled,
159
+ .btn-warning[disabled] {
160
+ background-color: #eb9316;
161
+ background-image: none;
162
+ }
163
  .btn-danger {
164
  background-image: -webkit-linear-gradient(top, #d9534f 0%, #c12e2a 100%);
165
+ background-image: -o-linear-gradient(top, #d9534f 0%, #c12e2a 100%);
166
+ background-image: -webkit-gradient(linear, left top, left bottom, from(#d9534f), to(#c12e2a));
167
+ background-image: linear-gradient(to bottom, #d9534f 0%, #c12e2a 100%);
168
+ filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ffd9534f', endColorstr='#ffc12e2a', GradientType=0);
169
+ filter: progid:DXImageTransform.Microsoft.gradient(enabled = false);
170
  background-repeat: repeat-x;
171
  border-color: #b92c28;
 
 
172
  }
 
173
  .btn-danger:hover,
174
  .btn-danger:focus {
175
  background-color: #c12e2a;
176
  background-position: 0 -15px;
177
  }
 
178
  .btn-danger:active,
179
  .btn-danger.active {
180
  background-color: #c12e2a;
181
  border-color: #b92c28;
182
  }
183
+ .btn-danger:disabled,
184
+ .btn-danger[disabled] {
185
+ background-color: #c12e2a;
186
+ background-image: none;
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
187
  }
 
188
  .thumbnail,
189
  .img-thumbnail {
190
+ -webkit-box-shadow: 0 1px 2px rgba(0, 0, 0, .075);
191
+ box-shadow: 0 1px 2px rgba(0, 0, 0, .075);
192
  }
 
193
  .dropdown-menu > li > a:hover,
194
  .dropdown-menu > li > a:focus {
195
  background-color: #e8e8e8;
196
  background-image: -webkit-linear-gradient(top, #f5f5f5 0%, #e8e8e8 100%);
197
+ background-image: -o-linear-gradient(top, #f5f5f5 0%, #e8e8e8 100%);
198
+ background-image: -webkit-gradient(linear, left top, left bottom, from(#f5f5f5), to(#e8e8e8));
199
+ background-image: linear-gradient(to bottom, #f5f5f5 0%, #e8e8e8 100%);
200
  filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#fff5f5f5', endColorstr='#ffe8e8e8', GradientType=0);
201
+ background-repeat: repeat-x;
202
  }
 
203
  .dropdown-menu > .active > a,
204
  .dropdown-menu > .active > a:hover,
205
  .dropdown-menu > .active > a:focus {
206
  background-color: #357ebd;
207
  background-image: -webkit-linear-gradient(top, #428bca 0%, #357ebd 100%);
208
+ background-image: -o-linear-gradient(top, #428bca 0%, #357ebd 100%);
209
+ background-image: -webkit-gradient(linear, left top, left bottom, from(#428bca), to(#357ebd));
210
+ background-image: linear-gradient(to bottom, #428bca 0%, #357ebd 100%);
211
  filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff428bca', endColorstr='#ff357ebd', GradientType=0);
212
+ background-repeat: repeat-x;
213
  }
 
214
  .navbar-default {
215
+ background-image: -webkit-linear-gradient(top, #fff 0%, #f8f8f8 100%);
216
+ background-image: -o-linear-gradient(top, #fff 0%, #f8f8f8 100%);
217
+ background-image: -webkit-gradient(linear, left top, left bottom, from(#fff), to(#f8f8f8));
218
+ background-image: linear-gradient(to bottom, #fff 0%, #f8f8f8 100%);
219
+ filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ffffffff', endColorstr='#fff8f8f8', GradientType=0);
220
+ filter: progid:DXImageTransform.Microsoft.gradient(enabled = false);
221
  background-repeat: repeat-x;
222
  border-radius: 4px;
223
+ -webkit-box-shadow: inset 0 1px 0 rgba(255, 255, 255, .15), 0 1px 5px rgba(0, 0, 0, .075);
224
+ box-shadow: inset 0 1px 0 rgba(255, 255, 255, .15), 0 1px 5px rgba(0, 0, 0, .075);
 
 
225
  }
 
226
  .navbar-default .navbar-nav > .active > a {
227
  background-image: -webkit-linear-gradient(top, #ebebeb 0%, #f3f3f3 100%);
228
+ background-image: -o-linear-gradient(top, #ebebeb 0%, #f3f3f3 100%);
229
+ background-image: -webkit-gradient(linear, left top, left bottom, from(#ebebeb), to(#f3f3f3));
230
+ background-image: linear-gradient(to bottom, #ebebeb 0%, #f3f3f3 100%);
231
  filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ffebebeb', endColorstr='#fff3f3f3', GradientType=0);
232
+ background-repeat: repeat-x;
233
+ -webkit-box-shadow: inset 0 3px 9px rgba(0, 0, 0, .075);
234
+ box-shadow: inset 0 3px 9px rgba(0, 0, 0, .075);
235
  }
 
236
  .navbar-brand,
237
  .navbar-nav > li > a {
238
+ text-shadow: 0 1px 0 rgba(255, 255, 255, .25);
239
  }
 
240
  .navbar-inverse {
241
+ background-image: -webkit-linear-gradient(top, #3c3c3c 0%, #222 100%);
242
+ background-image: -o-linear-gradient(top, #3c3c3c 0%, #222 100%);
243
+ background-image: -webkit-gradient(linear, left top, left bottom, from(#3c3c3c), to(#222));
244
+ background-image: linear-gradient(to bottom, #3c3c3c 0%, #222 100%);
245
  filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff3c3c3c', endColorstr='#ff222222', GradientType=0);
246
+ filter: progid:DXImageTransform.Microsoft.gradient(enabled = false);
247
+ background-repeat: repeat-x;
248
  }
 
249
  .navbar-inverse .navbar-nav > .active > a {
250
+ background-image: -webkit-linear-gradient(top, #222 0%, #282828 100%);
251
+ background-image: -o-linear-gradient(top, #222 0%, #282828 100%);
252
+ background-image: -webkit-gradient(linear, left top, left bottom, from(#222), to(#282828));
253
+ background-image: linear-gradient(to bottom, #222 0%, #282828 100%);
254
  filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff222222', endColorstr='#ff282828', GradientType=0);
255
+ background-repeat: repeat-x;
256
+ -webkit-box-shadow: inset 0 3px 9px rgba(0, 0, 0, .25);
257
+ box-shadow: inset 0 3px 9px rgba(0, 0, 0, .25);
258
  }
 
259
  .navbar-inverse .navbar-brand,
260
  .navbar-inverse .navbar-nav > li > a {
261
+ text-shadow: 0 -1px 0 rgba(0, 0, 0, .25);
262
  }
 
263
  .navbar-static-top,
264
  .navbar-fixed-top,
265
  .navbar-fixed-bottom {
266
  border-radius: 0;
267
  }
 
268
  .alert {
269
+ text-shadow: 0 1px 0 rgba(255, 255, 255, .2);
270
+ -webkit-box-shadow: inset 0 1px 0 rgba(255, 255, 255, .25), 0 1px 2px rgba(0, 0, 0, .05);
271
+ box-shadow: inset 0 1px 0 rgba(255, 255, 255, .25), 0 1px 2px rgba(0, 0, 0, .05);
272
  }
 
273
  .alert-success {
274
  background-image: -webkit-linear-gradient(top, #dff0d8 0%, #c8e5bc 100%);
275
+ background-image: -o-linear-gradient(top, #dff0d8 0%, #c8e5bc 100%);
276
+ background-image: -webkit-gradient(linear, left top, left bottom, from(#dff0d8), to(#c8e5bc));
277
+ background-image: linear-gradient(to bottom, #dff0d8 0%, #c8e5bc 100%);
278
+ filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ffdff0d8', endColorstr='#ffc8e5bc', GradientType=0);
279
  background-repeat: repeat-x;
280
  border-color: #b2dba1;
 
281
  }
 
282
  .alert-info {
283
  background-image: -webkit-linear-gradient(top, #d9edf7 0%, #b9def0 100%);
284
+ background-image: -o-linear-gradient(top, #d9edf7 0%, #b9def0 100%);
285
+ background-image: -webkit-gradient(linear, left top, left bottom, from(#d9edf7), to(#b9def0));
286
+ background-image: linear-gradient(to bottom, #d9edf7 0%, #b9def0 100%);
287
+ filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ffd9edf7', endColorstr='#ffb9def0', GradientType=0);
288
  background-repeat: repeat-x;
289
  border-color: #9acfea;
 
290
  }
 
291
  .alert-warning {
292
  background-image: -webkit-linear-gradient(top, #fcf8e3 0%, #f8efc0 100%);
293
+ background-image: -o-linear-gradient(top, #fcf8e3 0%, #f8efc0 100%);
294
+ background-image: -webkit-gradient(linear, left top, left bottom, from(#fcf8e3), to(#f8efc0));
295
+ background-image: linear-gradient(to bottom, #fcf8e3 0%, #f8efc0 100%);
296
+ filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#fffcf8e3', endColorstr='#fff8efc0', GradientType=0);
297
  background-repeat: repeat-x;
298
  border-color: #f5e79e;
 
299
  }
 
300
  .alert-danger {
301
  background-image: -webkit-linear-gradient(top, #f2dede 0%, #e7c3c3 100%);
302
+ background-image: -o-linear-gradient(top, #f2dede 0%, #e7c3c3 100%);
303
+ background-image: -webkit-gradient(linear, left top, left bottom, from(#f2dede), to(#e7c3c3));
304
+ background-image: linear-gradient(to bottom, #f2dede 0%, #e7c3c3 100%);
305
+ filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#fff2dede', endColorstr='#ffe7c3c3', GradientType=0);
306
  background-repeat: repeat-x;
307
  border-color: #dca7a7;
 
308
  }
 
309
  .progress {
310
  background-image: -webkit-linear-gradient(top, #ebebeb 0%, #f5f5f5 100%);
311
+ background-image: -o-linear-gradient(top, #ebebeb 0%, #f5f5f5 100%);
312
+ background-image: -webkit-gradient(linear, left top, left bottom, from(#ebebeb), to(#f5f5f5));
313
+ background-image: linear-gradient(to bottom, #ebebeb 0%, #f5f5f5 100%);
314
  filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ffebebeb', endColorstr='#fff5f5f5', GradientType=0);
315
+ background-repeat: repeat-x;
316
  }
 
317
  .progress-bar {
318
  background-image: -webkit-linear-gradient(top, #428bca 0%, #3071a9 100%);
319
+ background-image: -o-linear-gradient(top, #428bca 0%, #3071a9 100%);
320
+ background-image: -webkit-gradient(linear, left top, left bottom, from(#428bca), to(#3071a9));
321
+ background-image: linear-gradient(to bottom, #428bca 0%, #3071a9 100%);
322
  filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff428bca', endColorstr='#ff3071a9', GradientType=0);
323
+ background-repeat: repeat-x;
324
  }
 
325
  .progress-bar-success {
326
  background-image: -webkit-linear-gradient(top, #5cb85c 0%, #449d44 100%);
327
+ background-image: -o-linear-gradient(top, #5cb85c 0%, #449d44 100%);
328
+ background-image: -webkit-gradient(linear, left top, left bottom, from(#5cb85c), to(#449d44));
329
+ background-image: linear-gradient(to bottom, #5cb85c 0%, #449d44 100%);
330
  filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff5cb85c', endColorstr='#ff449d44', GradientType=0);
331
+ background-repeat: repeat-x;
332
  }
 
333
  .progress-bar-info {
334
  background-image: -webkit-linear-gradient(top, #5bc0de 0%, #31b0d5 100%);
335
+ background-image: -o-linear-gradient(top, #5bc0de 0%, #31b0d5 100%);
336
+ background-image: -webkit-gradient(linear, left top, left bottom, from(#5bc0de), to(#31b0d5));
337
+ background-image: linear-gradient(to bottom, #5bc0de 0%, #31b0d5 100%);
338
  filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff5bc0de', endColorstr='#ff31b0d5', GradientType=0);
339
+ background-repeat: repeat-x;
340
  }
 
341
  .progress-bar-warning {
342
  background-image: -webkit-linear-gradient(top, #f0ad4e 0%, #ec971f 100%);
343
+ background-image: -o-linear-gradient(top, #f0ad4e 0%, #ec971f 100%);
344
+ background-image: -webkit-gradient(linear, left top, left bottom, from(#f0ad4e), to(#ec971f));
345
+ background-image: linear-gradient(to bottom, #f0ad4e 0%, #ec971f 100%);
346
  filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#fff0ad4e', endColorstr='#ffec971f', GradientType=0);
347
+ background-repeat: repeat-x;
348
  }
 
349
  .progress-bar-danger {
350
  background-image: -webkit-linear-gradient(top, #d9534f 0%, #c9302c 100%);
351
+ background-image: -o-linear-gradient(top, #d9534f 0%, #c9302c 100%);
352
+ background-image: -webkit-gradient(linear, left top, left bottom, from(#d9534f), to(#c9302c));
353
+ background-image: linear-gradient(to bottom, #d9534f 0%, #c9302c 100%);
354
  filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ffd9534f', endColorstr='#ffc9302c', GradientType=0);
355
+ background-repeat: repeat-x;
356
+ }
357
+ .progress-bar-striped {
358
+ background-image: -webkit-linear-gradient(45deg, rgba(255, 255, 255, .15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, .15) 50%, rgba(255, 255, 255, .15) 75%, transparent 75%, transparent);
359
+ background-image: -o-linear-gradient(45deg, rgba(255, 255, 255, .15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, .15) 50%, rgba(255, 255, 255, .15) 75%, transparent 75%, transparent);
360
+ background-image: linear-gradient(45deg, rgba(255, 255, 255, .15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, .15) 50%, rgba(255, 255, 255, .15) 75%, transparent 75%, transparent);
361
  }
 
362
  .list-group {
363
  border-radius: 4px;
364
+ -webkit-box-shadow: 0 1px 2px rgba(0, 0, 0, .075);
365
+ box-shadow: 0 1px 2px rgba(0, 0, 0, .075);
366
  }
 
367
  .list-group-item.active,
368
  .list-group-item.active:hover,
369
  .list-group-item.active:focus {
370
  text-shadow: 0 -1px 0 #3071a9;
371
  background-image: -webkit-linear-gradient(top, #428bca 0%, #3278b3 100%);
372
+ background-image: -o-linear-gradient(top, #428bca 0%, #3278b3 100%);
373
+ background-image: -webkit-gradient(linear, left top, left bottom, from(#428bca), to(#3278b3));
374
+ background-image: linear-gradient(to bottom, #428bca 0%, #3278b3 100%);
375
+ filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff428bca', endColorstr='#ff3278b3', GradientType=0);
376
  background-repeat: repeat-x;
377
  border-color: #3278b3;
 
378
  }
 
379
  .panel {
380
+ -webkit-box-shadow: 0 1px 2px rgba(0, 0, 0, .05);
381
+ box-shadow: 0 1px 2px rgba(0, 0, 0, .05);
382
  }
 
383
  .panel-default > .panel-heading {
384
  background-image: -webkit-linear-gradient(top, #f5f5f5 0%, #e8e8e8 100%);
385
+ background-image: -o-linear-gradient(top, #f5f5f5 0%, #e8e8e8 100%);
386
+ background-image: -webkit-gradient(linear, left top, left bottom, from(#f5f5f5), to(#e8e8e8));
387
+ background-image: linear-gradient(to bottom, #f5f5f5 0%, #e8e8e8 100%);
388
  filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#fff5f5f5', endColorstr='#ffe8e8e8', GradientType=0);
389
+ background-repeat: repeat-x;
390
  }
 
391
  .panel-primary > .panel-heading {
392
  background-image: -webkit-linear-gradient(top, #428bca 0%, #357ebd 100%);
393
+ background-image: -o-linear-gradient(top, #428bca 0%, #357ebd 100%);
394
+ background-image: -webkit-gradient(linear, left top, left bottom, from(#428bca), to(#357ebd));
395
+ background-image: linear-gradient(to bottom, #428bca 0%, #357ebd 100%);
396
  filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff428bca', endColorstr='#ff357ebd', GradientType=0);
397
+ background-repeat: repeat-x;
398
  }
 
399
  .panel-success > .panel-heading {
400
  background-image: -webkit-linear-gradient(top, #dff0d8 0%, #d0e9c6 100%);
401
+ background-image: -o-linear-gradient(top, #dff0d8 0%, #d0e9c6 100%);
402
+ background-image: -webkit-gradient(linear, left top, left bottom, from(#dff0d8), to(#d0e9c6));
403
+ background-image: linear-gradient(to bottom, #dff0d8 0%, #d0e9c6 100%);
404
  filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ffdff0d8', endColorstr='#ffd0e9c6', GradientType=0);
405
+ background-repeat: repeat-x;
406
  }
 
407
  .panel-info > .panel-heading {
408
  background-image: -webkit-linear-gradient(top, #d9edf7 0%, #c4e3f3 100%);
409
+ background-image: -o-linear-gradient(top, #d9edf7 0%, #c4e3f3 100%);
410
+ background-image: -webkit-gradient(linear, left top, left bottom, from(#d9edf7), to(#c4e3f3));
411
+ background-image: linear-gradient(to bottom, #d9edf7 0%, #c4e3f3 100%);
412
  filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ffd9edf7', endColorstr='#ffc4e3f3', GradientType=0);
413
+ background-repeat: repeat-x;
414
  }
 
415
  .panel-warning > .panel-heading {
416
  background-image: -webkit-linear-gradient(top, #fcf8e3 0%, #faf2cc 100%);
417
+ background-image: -o-linear-gradient(top, #fcf8e3 0%, #faf2cc 100%);
418
+ background-image: -webkit-gradient(linear, left top, left bottom, from(#fcf8e3), to(#faf2cc));
419
+ background-image: linear-gradient(to bottom, #fcf8e3 0%, #faf2cc 100%);
420
  filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#fffcf8e3', endColorstr='#fffaf2cc', GradientType=0);
421
+ background-repeat: repeat-x;
422
  }
 
423
  .panel-danger > .panel-heading {
424
  background-image: -webkit-linear-gradient(top, #f2dede 0%, #ebcccc 100%);
425
+ background-image: -o-linear-gradient(top, #f2dede 0%, #ebcccc 100%);
426
+ background-image: -webkit-gradient(linear, left top, left bottom, from(#f2dede), to(#ebcccc));
427
+ background-image: linear-gradient(to bottom, #f2dede 0%, #ebcccc 100%);
428
  filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#fff2dede', endColorstr='#ffebcccc', GradientType=0);
429
+ background-repeat: repeat-x;
430
  }
 
431
  .well {
432
  background-image: -webkit-linear-gradient(top, #e8e8e8 0%, #f5f5f5 100%);
433
+ background-image: -o-linear-gradient(top, #e8e8e8 0%, #f5f5f5 100%);
434
+ background-image: -webkit-gradient(linear, left top, left bottom, from(#e8e8e8), to(#f5f5f5));
435
+ background-image: linear-gradient(to bottom, #e8e8e8 0%, #f5f5f5 100%);
436
+ filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ffe8e8e8', endColorstr='#fff5f5f5', GradientType=0);
437
  background-repeat: repeat-x;
438
  border-color: #dcdcdc;
439
+ -webkit-box-shadow: inset 0 1px 3px rgba(0, 0, 0, .05), 0 1px 0 rgba(255, 255, 255, .1);
440
+ box-shadow: inset 0 1px 3px rgba(0, 0, 0, .05), 0 1px 0 rgba(255, 255, 255, .1);
441
+ }
442
+ /*# sourceMappingURL=bootstrap-theme.css.map */
assets/bootstrap/css/bootstrap-theme.min.css CHANGED
@@ -1,7 +1,5 @@
1
  /*!
2
- * Bootstrap v3.1.0 (http://getbootstrap.com)
3
  * Copyright 2011-2014 Twitter, Inc.
4
  * Licensed under MIT (https://github.com/twbs/bootstrap/blob/master/LICENSE)
5
- */
6
-
7
- .btn-default,.btn-primary,.btn-success,.btn-info,.btn-warning,.btn-danger{text-shadow:0 -1px 0 rgba(0,0,0,.2);-webkit-box-shadow:inset 0 1px 0 rgba(255,255,255,.15),0 1px 1px rgba(0,0,0,.075);box-shadow:inset 0 1px 0 rgba(255,255,255,.15),0 1px 1px rgba(0,0,0,.075)}.btn-default:active,.btn-primary:active,.btn-success:active,.btn-info:active,.btn-warning:active,.btn-danger:active,.btn-default.active,.btn-primary.active,.btn-success.active,.btn-info.active,.btn-warning.active,.btn-danger.active{-webkit-box-shadow:inset 0 3px 5px rgba(0,0,0,.125);box-shadow:inset 0 3px 5px rgba(0,0,0,.125)}.btn:active,.btn.active{background-image:none}.btn-default{background-image:-webkit-linear-gradient(top,#fff 0,#e0e0e0 100%);background-image:linear-gradient(to bottom,#fff 0,#e0e0e0 100%);filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#ffffffff', endColorstr='#ffe0e0e0', GradientType=0);filter:progid:DXImageTransform.Microsoft.gradient(enabled=false);background-repeat:repeat-x;border-color:#dbdbdb;text-shadow:0 1px 0 #fff;border-color:#ccc}.btn-default:hover,.btn-default:focus{background-color:#e0e0e0;background-position:0 -15px}.btn-default:active,.btn-default.active{background-color:#e0e0e0;border-color:#dbdbdb}.btn-primary{background-image:-webkit-linear-gradient(top,#428bca 0,#2d6ca2 100%);background-image:linear-gradient(to bottom,#428bca 0,#2d6ca2 100%);filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff428bca', endColorstr='#ff2d6ca2', GradientType=0);filter:progid:DXImageTransform.Microsoft.gradient(enabled=false);background-repeat:repeat-x;border-color:#2b669a}.btn-primary:hover,.btn-primary:focus{background-color:#2d6ca2;background-position:0 -15px}.btn-primary:active,.btn-primary.active{background-color:#2d6ca2;border-color:#2b669a}.btn-success{background-image:-webkit-linear-gradient(top,#5cb85c 0,#419641 100%);background-image:linear-gradient(to bottom,#5cb85c 0,#419641 100%);filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff5cb85c', endColorstr='#ff419641', GradientType=0);filter:progid:DXImageTransform.Microsoft.gradient(enabled=false);background-repeat:repeat-x;border-color:#3e8f3e}.btn-success:hover,.btn-success:focus{background-color:#419641;background-position:0 -15px}.btn-success:active,.btn-success.active{background-color:#419641;border-color:#3e8f3e}.btn-info{background-image:-webkit-linear-gradient(top,#5bc0de 0,#2aabd2 100%);background-image:linear-gradient(to bottom,#5bc0de 0,#2aabd2 100%);filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff5bc0de', endColorstr='#ff2aabd2', GradientType=0);filter:progid:DXImageTransform.Microsoft.gradient(enabled=false);background-repeat:repeat-x;border-color:#28a4c9}.btn-info:hover,.btn-info:focus{background-color:#2aabd2;background-position:0 -15px}.btn-info:active,.btn-info.active{background-color:#2aabd2;border-color:#28a4c9}.btn-warning{background-image:-webkit-linear-gradient(top,#f0ad4e 0,#eb9316 100%);background-image:linear-gradient(to bottom,#f0ad4e 0,#eb9316 100%);filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#fff0ad4e', endColorstr='#ffeb9316', GradientType=0);filter:progid:DXImageTransform.Microsoft.gradient(enabled=false);background-repeat:repeat-x;border-color:#e38d13}.btn-warning:hover,.btn-warning:focus{background-color:#eb9316;background-position:0 -15px}.btn-warning:active,.btn-warning.active{background-color:#eb9316;border-color:#e38d13}.btn-danger{background-image:-webkit-linear-gradient(top,#d9534f 0,#c12e2a 100%);background-image:linear-gradient(to bottom,#d9534f 0,#c12e2a 100%);filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#ffd9534f', endColorstr='#ffc12e2a', GradientType=0);filter:progid:DXImageTransform.Microsoft.gradient(enabled=false);background-repeat:repeat-x;border-color:#b92c28}.btn-danger:hover,.btn-danger:focus{background-color:#c12e2a;background-position:0 -15px}.btn-danger:active,.btn-danger.active{background-color:#c12e2a;border-color:#b92c28}.thumbnail,.img-thumbnail{-webkit-box-shadow:0 1px 2px rgba(0,0,0,.075);box-shadow:0 1px 2px rgba(0,0,0,.075)}.dropdown-menu>li>a:hover,.dropdown-menu>li>a:focus{background-image:-webkit-linear-gradient(top,#f5f5f5 0,#e8e8e8 100%);background-image:linear-gradient(to bottom,#f5f5f5 0,#e8e8e8 100%);background-repeat:repeat-x;filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#fff5f5f5', endColorstr='#ffe8e8e8', GradientType=0);background-color:#e8e8e8}.dropdown-menu>.active>a,.dropdown-menu>.active>a:hover,.dropdown-menu>.active>a:focus{background-image:-webkit-linear-gradient(top,#428bca 0,#357ebd 100%);background-image:linear-gradient(to bottom,#428bca 0,#357ebd 100%);background-repeat:repeat-x;filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff428bca', endColorstr='#ff357ebd', GradientType=0);background-color:#357ebd}.navbar-default{background-image:-webkit-linear-gradient(top,#fff 0,#f8f8f8 100%);background-image:linear-gradient(to bottom,#fff 0,#f8f8f8 100%);background-repeat:repeat-x;filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#ffffffff', endColorstr='#fff8f8f8', GradientType=0);filter:progid:DXImageTransform.Microsoft.gradient(enabled=false);border-radius:4px;-webkit-box-shadow:inset 0 1px 0 rgba(255,255,255,.15),0 1px 5px rgba(0,0,0,.075);box-shadow:inset 0 1px 0 rgba(255,255,255,.15),0 1px 5px rgba(0,0,0,.075)}.navbar-default .navbar-nav>.active>a{background-image:-webkit-linear-gradient(top,#ebebeb 0,#f3f3f3 100%);background-image:linear-gradient(to bottom,#ebebeb 0,#f3f3f3 100%);background-repeat:repeat-x;filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#ffebebeb', endColorstr='#fff3f3f3', GradientType=0);-webkit-box-shadow:inset 0 3px 9px rgba(0,0,0,.075);box-shadow:inset 0 3px 9px rgba(0,0,0,.075)}.navbar-brand,.navbar-nav>li>a{text-shadow:0 1px 0 rgba(255,255,255,.25)}.navbar-inverse{background-image:-webkit-linear-gradient(top,#3c3c3c 0,#222 100%);background-image:linear-gradient(to bottom,#3c3c3c 0,#222 100%);background-repeat:repeat-x;filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff3c3c3c', endColorstr='#ff222222', GradientType=0);filter:progid:DXImageTransform.Microsoft.gradient(enabled=false)}.navbar-inverse .navbar-nav>.active>a{background-image:-webkit-linear-gradient(top,#222 0,#282828 100%);background-image:linear-gradient(to bottom,#222 0,#282828 100%);background-repeat:repeat-x;filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff222222', endColorstr='#ff282828', GradientType=0);-webkit-box-shadow:inset 0 3px 9px rgba(0,0,0,.25);box-shadow:inset 0 3px 9px rgba(0,0,0,.25)}.navbar-inverse .navbar-brand,.navbar-inverse .navbar-nav>li>a{text-shadow:0 -1px 0 rgba(0,0,0,.25)}.navbar-static-top,.navbar-fixed-top,.navbar-fixed-bottom{border-radius:0}.alert{text-shadow:0 1px 0 rgba(255,255,255,.2);-webkit-box-shadow:inset 0 1px 0 rgba(255,255,255,.25),0 1px 2px rgba(0,0,0,.05);box-shadow:inset 0 1px 0 rgba(255,255,255,.25),0 1px 2px rgba(0,0,0,.05)}.alert-success{background-image:-webkit-linear-gradient(top,#dff0d8 0,#c8e5bc 100%);background-image:linear-gradient(to bottom,#dff0d8 0,#c8e5bc 100%);background-repeat:repeat-x;filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#ffdff0d8', endColorstr='#ffc8e5bc', GradientType=0);border-color:#b2dba1}.alert-info{background-image:-webkit-linear-gradient(top,#d9edf7 0,#b9def0 100%);background-image:linear-gradient(to bottom,#d9edf7 0,#b9def0 100%);background-repeat:repeat-x;filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#ffd9edf7', endColorstr='#ffb9def0', GradientType=0);border-color:#9acfea}.alert-warning{background-image:-webkit-linear-gradient(top,#fcf8e3 0,#f8efc0 100%);background-image:linear-gradient(to bottom,#fcf8e3 0,#f8efc0 100%);background-repeat:repeat-x;filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#fffcf8e3', endColorstr='#fff8efc0', GradientType=0);border-color:#f5e79e}.alert-danger{background-image:-webkit-linear-gradient(top,#f2dede 0,#e7c3c3 100%);background-image:linear-gradient(to bottom,#f2dede 0,#e7c3c3 100%);background-repeat:repeat-x;filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#fff2dede', endColorstr='#ffe7c3c3', GradientType=0);border-color:#dca7a7}.progress{background-image:-webkit-linear-gradient(top,#ebebeb 0,#f5f5f5 100%);background-image:linear-gradient(to bottom,#ebebeb 0,#f5f5f5 100%);background-repeat:repeat-x;filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#ffebebeb', endColorstr='#fff5f5f5', GradientType=0)}.progress-bar{background-image:-webkit-linear-gradient(top,#428bca 0,#3071a9 100%);background-image:linear-gradient(to bottom,#428bca 0,#3071a9 100%);background-repeat:repeat-x;filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff428bca', endColorstr='#ff3071a9', GradientType=0)}.progress-bar-success{background-image:-webkit-linear-gradient(top,#5cb85c 0,#449d44 100%);background-image:linear-gradient(to bottom,#5cb85c 0,#449d44 100%);background-repeat:repeat-x;filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff5cb85c', endColorstr='#ff449d44', GradientType=0)}.progress-bar-info{background-image:-webkit-linear-gradient(top,#5bc0de 0,#31b0d5 100%);background-image:linear-gradient(to bottom,#5bc0de 0,#31b0d5 100%);background-repeat:repeat-x;filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff5bc0de', endColorstr='#ff31b0d5', GradientType=0)}.progress-bar-warning{background-image:-webkit-linear-gradient(top,#f0ad4e 0,#ec971f 100%);background-image:linear-gradient(to bottom,#f0ad4e 0,#ec971f 100%);background-repeat:repeat-x;filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#fff0ad4e', endColorstr='#ffec971f', GradientType=0)}.progress-bar-danger{background-image:-webkit-linear-gradient(top,#d9534f 0,#c9302c 100%);background-image:linear-gradient(to bottom,#d9534f 0,#c9302c 100%);background-repeat:repeat-x;filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#ffd9534f', endColorstr='#ffc9302c', GradientType=0)}.list-group{border-radius:4px;-webkit-box-shadow:0 1px 2px rgba(0,0,0,.075);box-shadow:0 1px 2px rgba(0,0,0,.075)}.list-group-item.active,.list-group-item.active:hover,.list-group-item.active:focus{text-shadow:0 -1px 0 #3071a9;background-image:-webkit-linear-gradient(top,#428bca 0,#3278b3 100%);background-image:linear-gradient(to bottom,#428bca 0,#3278b3 100%);background-repeat:repeat-x;filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff428bca', endColorstr='#ff3278b3', GradientType=0);border-color:#3278b3}.panel{-webkit-box-shadow:0 1px 2px rgba(0,0,0,.05);box-shadow:0 1px 2px rgba(0,0,0,.05)}.panel-default>.panel-heading{background-image:-webkit-linear-gradient(top,#f5f5f5 0,#e8e8e8 100%);background-image:linear-gradient(to bottom,#f5f5f5 0,#e8e8e8 100%);background-repeat:repeat-x;filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#fff5f5f5', endColorstr='#ffe8e8e8', GradientType=0)}.panel-primary>.panel-heading{background-image:-webkit-linear-gradient(top,#428bca 0,#357ebd 100%);background-image:linear-gradient(to bottom,#428bca 0,#357ebd 100%);background-repeat:repeat-x;filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff428bca', endColorstr='#ff357ebd', GradientType=0)}.panel-success>.panel-heading{background-image:-webkit-linear-gradient(top,#dff0d8 0,#d0e9c6 100%);background-image:linear-gradient(to bottom,#dff0d8 0,#d0e9c6 100%);background-repeat:repeat-x;filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#ffdff0d8', endColorstr='#ffd0e9c6', GradientType=0)}.panel-info>.panel-heading{background-image:-webkit-linear-gradient(top,#d9edf7 0,#c4e3f3 100%);background-image:linear-gradient(to bottom,#d9edf7 0,#c4e3f3 100%);background-repeat:repeat-x;filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#ffd9edf7', endColorstr='#ffc4e3f3', GradientType=0)}.panel-warning>.panel-heading{background-image:-webkit-linear-gradient(top,#fcf8e3 0,#faf2cc 100%);background-image:linear-gradient(to bottom,#fcf8e3 0,#faf2cc 100%);background-repeat:repeat-x;filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#fffcf8e3', endColorstr='#fffaf2cc', GradientType=0)}.panel-danger>.panel-heading{background-image:-webkit-linear-gradient(top,#f2dede 0,#ebcccc 100%);background-image:linear-gradient(to bottom,#f2dede 0,#ebcccc 100%);background-repeat:repeat-x;filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#fff2dede', endColorstr='#ffebcccc', GradientType=0)}.well{background-image:-webkit-linear-gradient(top,#e8e8e8 0,#f5f5f5 100%);background-image:linear-gradient(to bottom,#e8e8e8 0,#f5f5f5 100%);background-repeat:repeat-x;filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#ffe8e8e8', endColorstr='#fff5f5f5', GradientType=0);border-color:#dcdcdc;-webkit-box-shadow:inset 0 1px 3px rgba(0,0,0,.05),0 1px 0 rgba(255,255,255,.1);box-shadow:inset 0 1px 3px rgba(0,0,0,.05),0 1px 0 rgba(255,255,255,.1)}
1
  /*!
2
+ * Bootstrap v3.2.0 (http://getbootstrap.com)
3
  * Copyright 2011-2014 Twitter, Inc.
4
  * Licensed under MIT (https://github.com/twbs/bootstrap/blob/master/LICENSE)
5
+ */.btn-default,.btn-primary,.btn-success,.btn-info,.btn-warning,.btn-danger{text-shadow:0 -1px 0 rgba(0,0,0,.2);-webkit-box-shadow:inset 0 1px 0 rgba(255,255,255,.15),0 1px 1px rgba(0,0,0,.075);box-shadow:inset 0 1px 0 rgba(255,255,255,.15),0 1px 1px rgba(0,0,0,.075)}.btn-default:active,.btn-primary:active,.btn-success:active,.btn-info:active,.btn-warning:active,.btn-danger:active,.btn-default.active,.btn-primary.active,.btn-success.active,.btn-info.active,.btn-warning.active,.btn-danger.active{-webkit-box-shadow:inset 0 3px 5px rgba(0,0,0,.125);box-shadow:inset 0 3px 5px rgba(0,0,0,.125)}.btn:active,.btn.active{background-image:none}.btn-default{text-shadow:0 1px 0 #fff;background-image:-webkit-linear-gradient(top,#fff 0,#e0e0e0 100%);background-image:-o-linear-gradient(top,#fff 0,#e0e0e0 100%);background-image:-webkit-gradient(linear,left top,left bottom,from(#fff),to(#e0e0e0));background-image:linear-gradient(to bottom,#fff 0,#e0e0e0 100%);filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#ffffffff', endColorstr='#ffe0e0e0', GradientType=0);filter:progid:DXImageTransform.Microsoft.gradient(enabled=false);background-repeat:repeat-x;border-color:#dbdbdb;border-color:#ccc}.btn-default:hover,.btn-default:focus{background-color:#e0e0e0;background-position:0 -15px}.btn-default:active,.btn-default.active{background-color:#e0e0e0;border-color:#dbdbdb}.btn-default:disabled,.btn-default[disabled]{background-color:#e0e0e0;background-image:none}.btn-primary{background-image:-webkit-linear-gradient(top,#428bca 0,#2d6ca2 100%);background-image:-o-linear-gradient(top,#428bca 0,#2d6ca2 100%);background-image:-webkit-gradient(linear,left top,left bottom,from(#428bca),to(#2d6ca2));background-image:linear-gradient(to bottom,#428bca 0,#2d6ca2 100%);filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff428bca', endColorstr='#ff2d6ca2', GradientType=0);filter:progid:DXImageTransform.Microsoft.gradient(enabled=false);background-repeat:repeat-x;border-color:#2b669a}.btn-primary:hover,.btn-primary:focus{background-color:#2d6ca2;background-position:0 -15px}.btn-primary:active,.btn-primary.active{background-color:#2d6ca2;border-color:#2b669a}.btn-primary:disabled,.btn-primary[disabled]{background-color:#2d6ca2;background-image:none}.btn-success{background-image:-webkit-linear-gradient(top,#5cb85c 0,#419641 100%);background-image:-o-linear-gradient(top,#5cb85c 0,#419641 100%);background-image:-webkit-gradient(linear,left top,left bottom,from(#5cb85c),to(#419641));background-image:linear-gradient(to bottom,#5cb85c 0,#419641 100%);filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff5cb85c', endColorstr='#ff419641', GradientType=0);filter:progid:DXImageTransform.Microsoft.gradient(enabled=false);background-repeat:repeat-x;border-color:#3e8f3e}.btn-success:hover,.btn-success:focus{background-color:#419641;background-position:0 -15px}.btn-success:active,.btn-success.active{background-color:#419641;border-color:#3e8f3e}.btn-success:disabled,.btn-success[disabled]{background-color:#419641;background-image:none}.btn-info{background-image:-webkit-linear-gradient(top,#5bc0de 0,#2aabd2 100%);background-image:-o-linear-gradient(top,#5bc0de 0,#2aabd2 100%);background-image:-webkit-gradient(linear,left top,left bottom,from(#5bc0de),to(#2aabd2));background-image:linear-gradient(to bottom,#5bc0de 0,#2aabd2 100%);filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff5bc0de', endColorstr='#ff2aabd2', GradientType=0);filter:progid:DXImageTransform.Microsoft.gradient(enabled=false);background-repeat:repeat-x;border-color:#28a4c9}.btn-info:hover,.btn-info:focus{background-color:#2aabd2;background-position:0 -15px}.btn-info:active,.btn-info.active{background-color:#2aabd2;border-color:#28a4c9}.btn-info:disabled,.btn-info[disabled]{background-color:#2aabd2;background-image:none}.btn-warning{background-image:-webkit-linear-gradient(top,#f0ad4e 0,#eb9316 100%);background-image:-o-linear-gradient(top,#f0ad4e 0,#eb9316 100%);background-image:-webkit-gradient(linear,left top,left bottom,from(#f0ad4e),to(#eb9316));background-image:linear-gradient(to bottom,#f0ad4e 0,#eb9316 100%);filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#fff0ad4e', endColorstr='#ffeb9316', GradientType=0);filter:progid:DXImageTransform.Microsoft.gradient(enabled=false);background-repeat:repeat-x;border-color:#e38d13}.btn-warning:hover,.btn-warning:focus{background-color:#eb9316;background-position:0 -15px}.btn-warning:active,.btn-warning.active{background-color:#eb9316;border-color:#e38d13}.btn-warning:disabled,.btn-warning[disabled]{background-color:#eb9316;background-image:none}.btn-danger{background-image:-webkit-linear-gradient(top,#d9534f 0,#c12e2a 100%);background-image:-o-linear-gradient(top,#d9534f 0,#c12e2a 100%);background-image:-webkit-gradient(linear,left top,left bottom,from(#d9534f),to(#c12e2a));background-image:linear-gradient(to bottom,#d9534f 0,#c12e2a 100%);filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#ffd9534f', endColorstr='#ffc12e2a', GradientType=0);filter:progid:DXImageTransform.Microsoft.gradient(enabled=false);background-repeat:repeat-x;border-color:#b92c28}.btn-danger:hover,.btn-danger:focus{background-color:#c12e2a;background-position:0 -15px}.btn-danger:active,.btn-danger.active{background-color:#c12e2a;border-color:#b92c28}.btn-danger:disabled,.btn-danger[disabled]{background-color:#c12e2a;background-image:none}.thumbnail,.img-thumbnail{-webkit-box-shadow:0 1px 2px rgba(0,0,0,.075);box-shadow:0 1px 2px rgba(0,0,0,.075)}.dropdown-menu>li>a:hover,.dropdown-menu>li>a:focus{background-color:#e8e8e8;background-image:-webkit-linear-gradient(top,#f5f5f5 0,#e8e8e8 100%);background-image:-o-linear-gradient(top,#f5f5f5 0,#e8e8e8 100%);background-image:-webkit-gradient(linear,left top,left bottom,from(#f5f5f5),to(#e8e8e8));background-image:linear-gradient(to bottom,#f5f5f5 0,#e8e8e8 100%);filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#fff5f5f5', endColorstr='#ffe8e8e8', GradientType=0);background-repeat:repeat-x}.dropdown-menu>.active>a,.dropdown-menu>.active>a:hover,.dropdown-menu>.active>a:focus{background-color:#357ebd;background-image:-webkit-linear-gradient(top,#428bca 0,#357ebd 100%);background-image:-o-linear-gradient(top,#428bca 0,#357ebd 100%);background-image:-webkit-gradient(linear,left top,left bottom,from(#428bca),to(#357ebd));background-image:linear-gradient(to bottom,#428bca 0,#357ebd 100%);filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff428bca', endColorstr='#ff357ebd', GradientType=0);background-repeat:repeat-x}.navbar-default{background-image:-webkit-linear-gradient(top,#fff 0,#f8f8f8 100%);background-image:-o-linear-gradient(top,#fff 0,#f8f8f8 100%);background-image:-webkit-gradient(linear,left top,left bottom,from(#fff),to(#f8f8f8));background-image:linear-gradient(to bottom,#fff 0,#f8f8f8 100%);filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#ffffffff', endColorstr='#fff8f8f8', GradientType=0);filter:progid:DXImageTransform.Microsoft.gradient(enabled=false);background-repeat:repeat-x;border-radius:4px;-webkit-box-shadow:inset 0 1px 0 rgba(255,255,255,.15),0 1px 5px rgba(0,0,0,.075);box-shadow:inset 0 1px 0 rgba(255,255,255,.15),0 1px 5px rgba(0,0,0,.075)}.navbar-default .navbar-nav>.active>a{background-image:-webkit-linear-gradient(top,#ebebeb 0,#f3f3f3 100%);background-image:-o-linear-gradient(top,#ebebeb 0,#f3f3f3 100%);background-image:-webkit-gradient(linear,left top,left bottom,from(#ebebeb),to(#f3f3f3));background-image:linear-gradient(to bottom,#ebebeb 0,#f3f3f3 100%);filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#ffebebeb', endColorstr='#fff3f3f3', GradientType=0);background-repeat:repeat-x;-webkit-box-shadow:inset 0 3px 9px rgba(0,0,0,.075);box-shadow:inset 0 3px 9px rgba(0,0,0,.075)}.navbar-brand,.navbar-nav>li>a{text-shadow:0 1px 0 rgba(255,255,255,.25)}.navbar-inverse{background-image:-webkit-linear-gradient(top,#3c3c3c 0,#222 100%);background-image:-o-linear-gradient(top,#3c3c3c 0,#222 100%);background-image:-webkit-gradient(linear,left top,left bottom,from(#3c3c3c),to(#222));background-image:linear-gradient(to bottom,#3c3c3c 0,#222 100%);filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff3c3c3c', endColorstr='#ff222222', GradientType=0);filter:progid:DXImageTransform.Microsoft.gradient(enabled=false);background-repeat:repeat-x}.navbar-inverse .navbar-nav>.active>a{background-image:-webkit-linear-gradient(top,#222 0,#282828 100%);background-image:-o-linear-gradient(top,#222 0,#282828 100%);background-image:-webkit-gradient(linear,left top,left bottom,from(#222),to(#282828));background-image:linear-gradient(to bottom,#222 0,#282828 100%);filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff222222', endColorstr='#ff282828', GradientType=0);background-repeat:repeat-x;-webkit-box-shadow:inset 0 3px 9px rgba(0,0,0,.25);box-shadow:inset 0 3px 9px rgba(0,0,0,.25)}.navbar-inverse .navbar-brand,.navbar-inverse .navbar-nav>li>a{text-shadow:0 -1px 0 rgba(0,0,0,.25)}.navbar-static-top,.navbar-fixed-top,.navbar-fixed-bottom{border-radius:0}.alert{text-shadow:0 1px 0 rgba(255,255,255,.2);-webkit-box-shadow:inset 0 1px 0 rgba(255,255,255,.25),0 1px 2px rgba(0,0,0,.05);box-shadow:inset 0 1px 0 rgba(255,255,255,.25),0 1px 2px rgba(0,0,0,.05)}.alert-success{background-image:-webkit-linear-gradient(top,#dff0d8 0,#c8e5bc 100%);background-image:-o-linear-gradient(top,#dff0d8 0,#c8e5bc 100%);background-image:-webkit-gradient(linear,left top,left bottom,from(#dff0d8),to(#c8e5bc));background-image:linear-gradient(to bottom,#dff0d8 0,#c8e5bc 100%);filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#ffdff0d8', endColorstr='#ffc8e5bc', GradientType=0);background-repeat:repeat-x;border-color:#b2dba1}.alert-info{background-image:-webkit-linear-gradient(top,#d9edf7 0,#b9def0 100%);background-image:-o-linear-gradient(top,#d9edf7 0,#b9def0 100%);background-image:-webkit-gradient(linear,left top,left bottom,from(#d9edf7),to(#b9def0));background-image:linear-gradient(to bottom,#d9edf7 0,#b9def0 100%);filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#ffd9edf7', endColorstr='#ffb9def0', GradientType=0);background-repeat:repeat-x;border-color:#9acfea}.alert-warning{background-image:-webkit-linear-gradient(top,#fcf8e3 0,#f8efc0 100%);background-image:-o-linear-gradient(top,#fcf8e3 0,#f8efc0 100%);background-image:-webkit-gradient(linear,left top,left bottom,from(#fcf8e3),to(#f8efc0));background-image:linear-gradient(to bottom,#fcf8e3 0,#f8efc0 100%);filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#fffcf8e3', endColorstr='#fff8efc0', GradientType=0);background-repeat:repeat-x;border-color:#f5e79e}.alert-danger{background-image:-webkit-linear-gradient(top,#f2dede 0,#e7c3c3 100%);background-image:-o-linear-gradient(top,#f2dede 0,#e7c3c3 100%);background-image:-webkit-gradient(linear,left top,left bottom,from(#f2dede),to(#e7c3c3));background-image:linear-gradient(to bottom,#f2dede 0,#e7c3c3 100%);filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#fff2dede', endColorstr='#ffe7c3c3', GradientType=0);background-repeat:repeat-x;border-color:#dca7a7}.progress{background-image:-webkit-linear-gradient(top,#ebebeb 0,#f5f5f5 100%);background-image:-o-linear-gradient(top,#ebebeb 0,#f5f5f5 100%);background-image:-webkit-gradient(linear,left top,left bottom,from(#ebebeb),to(#f5f5f5));background-image:linear-gradient(to bottom,#ebebeb 0,#f5f5f5 100%);filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#ffebebeb', endColorstr='#fff5f5f5', GradientType=0);background-repeat:repeat-x}.progress-bar{background-image:-webkit-linear-gradient(top,#428bca 0,#3071a9 100%);background-image:-o-linear-gradient(top,#428bca 0,#3071a9 100%);background-image:-webkit-gradient(linear,left top,left bottom,from(#428bca),to(#3071a9));background-image:linear-gradient(to bottom,#428bca 0,#3071a9 100%);filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff428bca', endColorstr='#ff3071a9', GradientType=0);background-repeat:repeat-x}.progress-bar-success{background-image:-webkit-linear-gradient(top,#5cb85c 0,#449d44 100%);background-image:-o-linear-gradient(top,#5cb85c 0,#449d44 100%);background-image:-webkit-gradient(linear,left top,left bottom,from(#5cb85c),to(#449d44));background-image:linear-gradient(to bottom,#5cb85c 0,#449d44 100%);filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff5cb85c', endColorstr='#ff449d44', GradientType=0);background-repeat:repeat-x}.progress-bar-info{background-image:-webkit-linear-gradient(top,#5bc0de 0,#31b0d5 100%);background-image:-o-linear-gradient(top,#5bc0de 0,#31b0d5 100%);background-image:-webkit-gradient(linear,left top,left bottom,from(#5bc0de),to(#31b0d5));background-image:linear-gradient(to bottom,#5bc0de 0,#31b0d5 100%);filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff5bc0de', endColorstr='#ff31b0d5', GradientType=0);background-repeat:repeat-x}.progress-bar-warning{background-image:-webkit-linear-gradient(top,#f0ad4e 0,#ec971f 100%);background-image:-o-linear-gradient(top,#f0ad4e 0,#ec971f 100%);background-image:-webkit-gradient(linear,left top,left bottom,from(#f0ad4e),to(#ec971f));background-image:linear-gradient(to bottom,#f0ad4e 0,#ec971f 100%);filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#fff0ad4e', endColorstr='#ffec971f', GradientType=0);background-repeat:repeat-x}.progress-bar-danger{background-image:-webkit-linear-gradient(top,#d9534f 0,#c9302c 100%);background-image:-o-linear-gradient(top,#d9534f 0,#c9302c 100%);background-image:-webkit-gradient(linear,left top,left bottom,from(#d9534f),to(#c9302c));background-image:linear-gradient(to bottom,#d9534f 0,#c9302c 100%);filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#ffd9534f', endColorstr='#ffc9302c', GradientType=0);background-repeat:repeat-x}.progress-bar-striped{background-image:-webkit-linear-gradient(45deg,rgba(255,255,255,.15) 25%,transparent 25%,transparent 50%,rgba(255,255,255,.15) 50%,rgba(255,255,255,.15) 75%,transparent 75%,transparent);background-image:-o-linear-gradient(45deg,rgba(255,255,255,.15) 25%,transparent 25%,transparent 50%,rgba(255,255,255,.15) 50%,rgba(255,255,255,.15) 75%,transparent 75%,transparent);background-image:linear-gradient(45deg,rgba(255,255,255,.15) 25%,transparent 25%,transparent 50%,rgba(255,255,255,.15) 50%,rgba(255,255,255,.15) 75%,transparent 75%,transparent)}.list-group{border-radius:4px;-webkit-box-shadow:0 1px 2px rgba(0,0,0,.075);box-shadow:0 1px 2px rgba(0,0,0,.075)}.list-group-item.active,.list-group-item.active:hover,.list-group-item.active:focus{text-shadow:0 -1px 0 #3071a9;background-image:-webkit-linear-gradient(top,#428bca 0,#3278b3 100%);background-image:-o-linear-gradient(top,#428bca 0,#3278b3 100%);background-image:-webkit-gradient(linear,left top,left bottom,from(#428bca),to(#3278b3));background-image:linear-gradient(to bottom,#428bca 0,#3278b3 100%);filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff428bca', endColorstr='#ff3278b3', GradientType=0);background-repeat:repeat-x;border-color:#3278b3}.panel{-webkit-box-shadow:0 1px 2px rgba(0,0,0,.05);box-shadow:0 1px 2px rgba(0,0,0,.05)}.panel-default>.panel-heading{background-image:-webkit-linear-gradient(top,#f5f5f5 0,#e8e8e8 100%);background-image:-o-linear-gradient(top,#f5f5f5 0,#e8e8e8 100%);background-image:-webkit-gradient(linear,left top,left bottom,from(#f5f5f5),to(#e8e8e8));background-image:linear-gradient(to bottom,#f5f5f5 0,#e8e8e8 100%);filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#fff5f5f5', endColorstr='#ffe8e8e8', GradientType=0);background-repeat:repeat-x}.panel-primary>.panel-heading{background-image:-webkit-linear-gradient(top,#428bca 0,#357ebd 100%);background-image:-o-linear-gradient(top,#428bca 0,#357ebd 100%);background-image:-webkit-gradient(linear,left top,left bottom,from(#428bca),to(#357ebd));background-image:linear-gradient(to bottom,#428bca 0,#357ebd 100%);filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff428bca', endColorstr='#ff357ebd', GradientType=0);background-repeat:repeat-x}.panel-success>.panel-heading{background-image:-webkit-linear-gradient(top,#dff0d8 0,#d0e9c6 100%);background-image:-o-linear-gradient(top,#dff0d8 0,#d0e9c6 100%);background-image:-webkit-gradient(linear,left top,left bottom,from(#dff0d8),to(#d0e9c6));background-image:linear-gradient(to bottom,#dff0d8 0,#d0e9c6 100%);filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#ffdff0d8', endColorstr='#ffd0e9c6', GradientType=0);background-repeat:repeat-x}.panel-info>.panel-heading{background-image:-webkit-linear-gradient(top,#d9edf7 0,#c4e3f3 100%);background-image:-o-linear-gradient(top,#d9edf7 0,#c4e3f3 100%);background-image:-webkit-gradient(linear,left top,left bottom,from(#d9edf7),to(#c4e3f3));background-image:linear-gradient(to bottom,#d9edf7 0,#c4e3f3 100%);filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#ffd9edf7', endColorstr='#ffc4e3f3', GradientType=0);background-repeat:repeat-x}.panel-warning>.panel-heading{background-image:-webkit-linear-gradient(top,#fcf8e3 0,#faf2cc 100%);background-image:-o-linear-gradient(top,#fcf8e3 0,#faf2cc 100%);background-image:-webkit-gradient(linear,left top,left bottom,from(#fcf8e3),to(#faf2cc));background-image:linear-gradient(to bottom,#fcf8e3 0,#faf2cc 100%);filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#fffcf8e3', endColorstr='#fffaf2cc', GradientType=0);background-repeat:repeat-x}.panel-danger>.panel-heading{background-image:-webkit-linear-gradient(top,#f2dede 0,#ebcccc 100%);background-image:-o-linear-gradient(top,#f2dede 0,#ebcccc 100%);background-image:-webkit-gradient(linear,left top,left bottom,from(#f2dede),to(#ebcccc));background-image:linear-gradient(to bottom,#f2dede 0,#ebcccc 100%);filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#fff2dede', endColorstr='#ffebcccc', GradientType=0);background-repeat:repeat-x}.well{background-image:-webkit-linear-gradient(top,#e8e8e8 0,#f5f5f5 100%);background-image:-o-linear-gradient(top,#e8e8e8 0,#f5f5f5 100%);background-image:-webkit-gradient(linear,left top,left bottom,from(#e8e8e8),to(#f5f5f5));background-image:linear-gradient(to bottom,#e8e8e8 0,#f5f5f5 100%);filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#ffe8e8e8', endColorstr='#fff5f5f5', GradientType=0);background-repeat:repeat-x;border-color:#dcdcdc;-webkit-box-shadow:inset 0 1px 3px rgba(0,0,0,.05),0 1px 0 rgba(255,255,255,.1);box-shadow:inset 0 1px 3px rgba(0,0,0,.05),0 1px 0 rgba(255,255,255,.1)}
 
 
assets/bootstrap/css/bootstrap.css CHANGED
@@ -1,10 +1,10 @@
1
  /*!
2
- * Bootstrap v3.1.0 (http://getbootstrap.com)
3
  * Copyright 2011-2014 Twitter, Inc.
4
  * Licensed under MIT (https://github.com/twbs/bootstrap/blob/master/LICENSE)
5
  */
6
 
7
- /*! normalize.css v3.0.0 | MIT License | git.io/normalize */
8
  html {
9
  font-family: sans-serif;
10
  -webkit-text-size-adjust: 100%;
@@ -94,8 +94,9 @@ figure {
94
  }
95
  hr {
96
  height: 0;
97
- -moz-box-sizing: content-box;
98
- box-sizing: content-box;
 
99
  }
100
  pre {
101
  overflow: auto;
@@ -144,7 +145,9 @@ input {
144
  }
145
  input[type="checkbox"],
146
  input[type="radio"] {
147
- box-sizing: border-box;
 
 
148
  padding: 0;
149
  }
150
  input[type="number"]::-webkit-inner-spin-button,
@@ -189,7 +192,8 @@ th {
189
  color: #000 !important;
190
  text-shadow: none !important;
191
  background: transparent !important;
192
- box-shadow: none !important;
 
193
  }
194
  a,
195
  a:visited {
@@ -256,2731 +260,2854 @@ th {
256
  border: 1px solid #ddd !important;
257
  }
258
  }
259
- * {
260
- -webkit-box-sizing: border-box;
261
- -moz-box-sizing: border-box;
262
- box-sizing: border-box;
263
- }
264
- *:before,
265
- *:after {
266
- -webkit-box-sizing: border-box;
267
- -moz-box-sizing: border-box;
268
- box-sizing: border-box;
269
  }
270
- html {
271
- font-size: 62.5%;
 
 
 
 
 
 
272
 
273
- -webkit-tap-highlight-color: rgba(0, 0, 0, 0);
 
274
  }
275
- body {
276
- font-family: "Helvetica Neue", Helvetica, Arial, sans-serif;
277
- font-size: 14px;
278
- line-height: 1.428571429;
279
- color: #333;
280
- background-color: #fff;
281
  }
282
- input,
283
- button,
284
- select,
285
- textarea {
286
- font-family: inherit;
287
- font-size: inherit;
288
- line-height: inherit;
289
  }
290
- a {
291
- color: #428bca;
292
- text-decoration: none;
293
  }
294
- a:hover,
295
- a:focus {
296
- color: #2a6496;
297
- text-decoration: underline;
298
  }
299
- a:focus {
300
- outline: thin dotted;
301
- outline: 5px auto -webkit-focus-ring-color;
302
- outline-offset: -2px;
303
  }
304
- figure {
305
- margin: 0;
306
  }
307
- img {
308
- vertical-align: middle;
309
  }
310
- .img-responsive {
311
- display: block;
312
- max-width: 100%;
313
- height: auto;
314
  }
315
- .img-rounded {
316
- border-radius: 6px;
317
  }
318
- .img-thumbnail {
319
- display: inline-block;
320
- max-width: 100%;
321
- height: auto;
322
- padding: 4px;
323
- line-height: 1.428571429;
324
- background-color: #fff;
325
- border: 1px solid #ddd;
326
- border-radius: 4px;
327
- -webkit-transition: all .2s ease-in-out;
328
- transition: all .2s ease-in-out;
329
  }
330
- .img-circle {
331
- border-radius: 50%;
332
  }
333
- hr {
334
- margin-top: 20px;
335
- margin-bottom: 20px;
336
- border: 0;
337
- border-top: 1px solid #eee;
338
  }
339
- .sr-only {
340
- position: absolute;
341
- width: 1px;
342
- height: 1px;
343
- padding: 0;
344
- margin: -1px;
345
- overflow: hidden;
346
- clip: rect(0, 0, 0, 0);
347
- border: 0;
348
  }
349
- h1,
350
- h2,
351
- h3,
352
- h4,
353
- h5,
354
- h6,
355
- .h1,
356
- .h2,
357
- .h3,
358
- .h4,
359
- .h5,
360
- .h6 {
361
- font-family: inherit;
362
- font-weight: 500;
363
- line-height: 1.1;
364
- color: inherit;
365
  }
366
- h1 small,
367
- h2 small,
368
- h3 small,
369
- h4 small,
370
- h5 small,
371
- h6 small,
372
- .h1 small,
373
- .h2 small,
374
- .h3 small,
375
- .h4 small,
376
- .h5 small,
377
- .h6 small,
378
- h1 .small,
379
- h2 .small,
380
- h3 .small,
381
- h4 .small,
382
- h5 .small,
383
- h6 .small,
384
- .h1 .small,
385
- .h2 .small,
386
- .h3 .small,
387
- .h4 .small,
388
- .h5 .small,
389
- .h6 .small {
390
- font-weight: normal;
391
- line-height: 1;
392
- color: #999;
393
  }
394
- h1,
395
- .h1,
396
- h2,
397
- .h2,
398
- h3,
399
- .h3 {
400
- margin-top: 20px;
401
- margin-bottom: 10px;
402
  }
403
- h1 small,
404
- .h1 small,
405
- h2 small,
406
- .h2 small,
407
- h3 small,
408
- .h3 small,
409
- h1 .small,
410
- .h1 .small,
411
- h2 .small,
412
- .h2 .small,
413
- h3 .small,
414
- .h3 .small {
415
- font-size: 65%;
416
  }
417
- h4,
418
- .h4,
419
- h5,
420
- .h5,
421
- h6,
422
- .h6 {
423
- margin-top: 10px;
424
- margin-bottom: 10px;
425
  }
426
- h4 small,
427
- .h4 small,
428
- h5 small,
429
- .h5 small,
430
- h6 small,
431
- .h6 small,
432
- h4 .small,
433
- .h4 .small,
434
- h5 .small,
435
- .h5 .small,
436
- h6 .small,
437
- .h6 .small {
438
- font-size: 75%;
439
  }
440
- h1,
441
- .h1 {
442
- font-size: 36px;
443
  }
444
- h2,
445
- .h2 {
446
- font-size: 30px;
447
  }
448
- h3,
449
- .h3 {
450
- font-size: 24px;
451
  }
452
- h4,
453
- .h4 {
454
- font-size: 18px;
455
  }
456
- h5,
457
- .h5 {
458
- font-size: 14px;
459
  }
460
- h6,
461
- .h6 {
462
- font-size: 12px;
463
  }
464
- p {
465
- margin: 0 0 10px;
466
  }
467
- .lead {
468
- margin-bottom: 20px;
469
- font-size: 16px;
470
- font-weight: 200;
471
- line-height: 1.4;
472
  }
473
- @media (min-width: 768px) {
474
- .lead {
475
- font-size: 21px;
476
- }
477
  }
478
- small,
479
- .small {
480
- font-size: 85%;
481
  }
482
- cite {
483
- font-style: normal;
484
  }
485
- .text-left {
486
- text-align: left;
487
  }
488
- .text-right {
489
- text-align: right;
490
  }
491
- .text-center {
492
- text-align: center;
493
  }
494
- .text-justify {
495
- text-align: justify;
496
  }
497
- .text-muted {
498
- color: #999;
499
  }
500
- .text-primary {
501
- color: #428bca;
502
  }
503
- a.text-primary:hover {
504
- color: #3071a9;
505
  }
506
- .text-success {
507
- color: #3c763d;
508
  }
509
- a.text-success:hover {
510
- color: #2b542c;
511
  }
512
- .text-info {
513
- color: #31708f;
514
  }
515
- a.text-info:hover {
516
- color: #245269;
517
  }
518
- .text-warning {
519
- color: #8a6d3b;
520
  }
521
- a.text-warning:hover {
522
- color: #66512c;
523
  }
524
- .text-danger {
525
- color: #a94442;
526
  }
527
- a.text-danger:hover {
528
- color: #843534;
529
  }
530
- .bg-primary {
531
- color: #fff;
532
- background-color: #428bca;
533
  }
534
- a.bg-primary:hover {
535
- background-color: #3071a9;
536
  }
537
- .bg-success {
538
- background-color: #dff0d8;
539
  }
540
- a.bg-success:hover {
541
- background-color: #c1e2b3;
542
  }
543
- .bg-info {
544
- background-color: #d9edf7;
545
  }
546
- a.bg-info:hover {
547
- background-color: #afd9ee;
548
  }
549
- .bg-warning {
550
- background-color: #fcf8e3;
551
  }
552
- a.bg-warning:hover {
553
- background-color: #f7ecb5;
554
  }
555
- .bg-danger {
556
- background-color: #f2dede;
557
  }
558
- a.bg-danger:hover {
559
- background-color: #e4b9b9;
560
  }
561
- .page-header {
562
- padding-bottom: 9px;
563
- margin: 40px 0 20px;
564
- border-bottom: 1px solid #eee;
565
  }
566
- ul,
567
- ol {
568
- margin-top: 0;
569
- margin-bottom: 10px;
570
  }
571
- ul ul,
572
- ol ul,
573
- ul ol,
574
- ol ol {
575
- margin-bottom: 0;
576
  }
577
- .list-unstyled {
578
- padding-left: 0;
579
- list-style: none;
580
  }
581
- .list-inline {
582
- padding-left: 0;
583
- list-style: none;
584
  }
585
- .list-inline > li {
586
- display: inline-block;
587
- padding-right: 5px;
588
- padding-left: 5px;
589
  }
590
- .list-inline > li:first-child {
591
- padding-left: 0;
592
  }
593
- dl {
594
- margin-top: 0;
595
- margin-bottom: 20px;
596
  }
597
- dt,
598
- dd {
599
- line-height: 1.428571429;
600
  }
601
- dt {
602
- font-weight: bold;
603
  }
604
- dd {
605
- margin-left: 0;
606
  }
607
- @media (min-width: 768px) {
608
- .dl-horizontal dt {
609
- float: left;
610
- width: 160px;
611
- overflow: hidden;
612
- clear: left;
613
- text-align: right;
614
- text-overflow: ellipsis;
615
- white-space: nowrap;
616
- }
617
- .dl-horizontal dd {
618
- margin-left: 180px;
619
- }
620
  }
621
- abbr[title],
622
- abbr[data-original-title] {
623
- cursor: help;
624
- border-bottom: 1px dotted #999;
625
  }
626
- .initialism {
627
- font-size: 90%;
628
- text-transform: uppercase;
629
  }
630
- blockquote {
631
- padding: 10px 20px;
632
- margin: 0 0 20px;
633
- font-size: 17.5px;
634
- border-left: 5px solid #eee;
635
  }
636
- blockquote p:last-child,
637
- blockquote ul:last-child,
638
- blockquote ol:last-child {
639
- margin-bottom: 0;
640
  }
641
- blockquote footer,
642
- blockquote small,
643
- blockquote .small {
644
- display: block;
645
- font-size: 80%;
646
- line-height: 1.428571429;
647
- color: #999;
648
  }
649
- blockquote footer:before,
650
- blockquote small:before,
651
- blockquote .small:before {
652
- content: '\2014 \00A0';
653
  }
654
- .blockquote-reverse,
655
- blockquote.pull-right {
656
- padding-right: 15px;
657
- padding-left: 0;
658
- text-align: right;
659
- border-right: 5px solid #eee;
660
- border-left: 0;
661
  }
662
- .blockquote-reverse footer:before,
663
- blockquote.pull-right footer:before,
664
- .blockquote-reverse small:before,
665
- blockquote.pull-right small:before,
666
- .blockquote-reverse .small:before,
667
- blockquote.pull-right .small:before {
668
- content: '';
669
  }
670
- .blockquote-reverse footer:after,
671
- blockquote.pull-right footer:after,
672
- .blockquote-reverse small:after,
673
- blockquote.pull-right small:after,
674
- .blockquote-reverse .small:after,
675
- blockquote.pull-right .small:after {
676
- content: '\00A0 \2014';
677
  }
678
- blockquote:before,
679
- blockquote:after {
680
- content: "";
681
  }
682
- address {
683
- margin-bottom: 20px;
684
- font-style: normal;
685
- line-height: 1.428571429;
686
  }
687
- code,
688
- kbd,
689
- pre,
690
- samp {
691
- font-family: Menlo, Monaco, Consolas, "Courier New", monospace;
692
- }
693
- code {
694
- padding: 2px 4px;
695
- font-size: 90%;
696
- color: #c7254e;
697
- white-space: nowrap;
698
- background-color: #f9f2f4;
699
- border-radius: 4px;
700
  }
701
- kbd {
702
- padding: 2px 4px;
703
- font-size: 90%;
704
- color: #fff;
705
- background-color: #333;
706
- border-radius: 3px;
707
- box-shadow: inset 0 -1px 0 rgba(0, 0, 0, .25);
708
  }
709
- pre {
710
- display: block;
711
- padding: 9.5px;
712
- margin: 0 0 10px;
713
- font-size: 13px;
714
- line-height: 1.428571429;
715
- color: #333;
716
- word-break: break-all;
717
- word-wrap: break-word;
718
- background-color: #f5f5f5;
719
- border: 1px solid #ccc;
720
- border-radius: 4px;
721
  }
722
- pre code {
723
- padding: 0;
724
- font-size: inherit;
725
- color: inherit;
726
- white-space: pre-wrap;
727
- background-color: transparent;
728
- border-radius: 0;
729
  }
730
- .pre-scrollable {
731
- max-height: 340px;
732
- overflow-y: scroll;
733
  }
734
- .container {
735
- padding-right: 15px;
736
- padding-left: 15px;
737
- margin-right: auto;
738
- margin-left: auto;
739
  }
740
- @media (min-width: 768px) {
741
- .container {
742
- width: 750px;
743
- }
744
  }
745
- @media (min-width: 992px) {
746
- .container {
747
- width: 970px;
748
- }
749
  }
750
- @media (min-width: 1200px) {
751
- .container {
752
- width: 1170px;
753
- }
754
  }
755
- .container-fluid {
756
- padding-right: 15px;
757
- padding-left: 15px;
758
- margin-right: auto;
759
- margin-left: auto;
760
  }
761
- .row {
762
- margin-right: -15px;
763
- margin-left: -15px;
764
  }
765
- .col-xs-1, .col-sm-1, .col-md-1, .col-lg-1, .col-xs-2, .col-sm-2, .col-md-2, .col-lg-2, .col-xs-3, .col-sm-3, .col-md-3, .col-lg-3, .col-xs-4, .col-sm-4, .col-md-4, .col-lg-4, .col-xs-5, .col-sm-5, .col-md-5, .col-lg-5, .col-xs-6, .col-sm-6, .col-md-6, .col-lg-6, .col-xs-7, .col-sm-7, .col-md-7, .col-lg-7, .col-xs-8, .col-sm-8, .col-md-8, .col-lg-8, .col-xs-9, .col-sm-9, .col-md-9, .col-lg-9, .col-xs-10, .col-sm-10, .col-md-10, .col-lg-10, .col-xs-11, .col-sm-11, .col-md-11, .col-lg-11, .col-xs-12, .col-sm-12, .col-md-12, .col-lg-12 {
766
- position: relative;
767
- min-height: 1px;
768
- padding-right: 15px;
769
- padding-left: 15px;
770
  }
771
- .col-xs-1, .col-xs-2, .col-xs-3, .col-xs-4, .col-xs-5, .col-xs-6, .col-xs-7, .col-xs-8, .col-xs-9, .col-xs-10, .col-xs-11, .col-xs-12 {
772
- float: left;
773
  }
774
- .col-xs-12 {
775
- width: 100%;
776
  }
777
- .col-xs-11 {
778
- width: 91.66666666666666%;
779
  }
780
- .col-xs-10 {
781
- width: 83.33333333333334%;
782
  }
783
- .col-xs-9 {
784
- width: 75%;
785
  }
786
- .col-xs-8 {
787
- width: 66.66666666666666%;
788
  }
789
- .col-xs-7 {
790
- width: 58.333333333333336%;
791
  }
792
- .col-xs-6 {
793
- width: 50%;
794
  }
795
- .col-xs-5 {
796
- width: 41.66666666666667%;
797
  }
798
- .col-xs-4 {
799
- width: 33.33333333333333%;
800
  }
801
- .col-xs-3 {
802
- width: 25%;
803
  }
804
- .col-xs-2 {
805
- width: 16.666666666666664%;
806
  }
807
- .col-xs-1 {
808
- width: 8.333333333333332%;
809
  }
810
- .col-xs-pull-12 {
811
- right: 100%;
812
  }
813
- .col-xs-pull-11 {
814
- right: 91.66666666666666%;
815
  }
816
- .col-xs-pull-10 {
817
- right: 83.33333333333334%;
818
  }
819
- .col-xs-pull-9 {
820
- right: 75%;
821
  }
822
- .col-xs-pull-8 {
823
- right: 66.66666666666666%;
824
  }
825
- .col-xs-pull-7 {
826
- right: 58.333333333333336%;
827
  }
828
- .col-xs-pull-6 {
829
- right: 50%;
830
  }
831
- .col-xs-pull-5 {
832
- right: 41.66666666666667%;
833
  }
834
- .col-xs-pull-4 {
835
- right: 33.33333333333333%;
836
  }
837
- .col-xs-pull-3 {
838
- right: 25%;
839
  }
840
- .col-xs-pull-2 {
841
- right: 16.666666666666664%;
842
  }
843
- .col-xs-pull-1 {
844
- right: 8.333333333333332%;
845
  }
846
- .col-xs-pull-0 {
847
- right: 0;
848
  }
849
- .col-xs-push-12 {
850
- left: 100%;
851
  }
852
- .col-xs-push-11 {
853
- left: 91.66666666666666%;
854
  }
855
- .col-xs-push-10 {
856
- left: 83.33333333333334%;
857
  }
858
- .col-xs-push-9 {
859
- left: 75%;
860
  }
861
- .col-xs-push-8 {
862
- left: 66.66666666666666%;
863
  }
864
- .col-xs-push-7 {
865
- left: 58.333333333333336%;
866
  }
867
- .col-xs-push-6 {
868
- left: 50%;
869
  }
870
- .col-xs-push-5 {
871
- left: 41.66666666666667%;
872
  }
873
- .col-xs-push-4 {
874
- left: 33.33333333333333%;
875
  }
876
- .col-xs-push-3 {
877
- left: 25%;
878
  }
879
- .col-xs-push-2 {
880
- left: 16.666666666666664%;
881
  }
882
- .col-xs-push-1 {
883
- left: 8.333333333333332%;
884
  }
885
- .col-xs-push-0 {
886
- left: 0;
887
  }
888
- .col-xs-offset-12 {
889
- margin-left: 100%;
890
  }
891
- .col-xs-offset-11 {
892
- margin-left: 91.66666666666666%;
893
  }
894
- .col-xs-offset-10 {
895
- margin-left: 83.33333333333334%;
896
  }
897
- .col-xs-offset-9 {
898
- margin-left: 75%;
899
  }
900
- .col-xs-offset-8 {
901
- margin-left: 66.66666666666666%;
902
  }
903
- .col-xs-offset-7 {
904
- margin-left: 58.333333333333336%;
905
  }
906
- .col-xs-offset-6 {
907
- margin-left: 50%;
908
  }
909
- .col-xs-offset-5 {
910
- margin-left: 41.66666666666667%;
911
  }
912
- .col-xs-offset-4 {
913
- margin-left: 33.33333333333333%;
914
  }
915
- .col-xs-offset-3 {
916
- margin-left: 25%;
917
  }
918
- .col-xs-offset-2 {
919
- margin-left: 16.666666666666664%;
920
  }
921
- .col-xs-offset-1 {
922
- margin-left: 8.333333333333332%;
923
  }
924
- .col-xs-offset-0 {
925
- margin-left: 0;
926
  }
927
- @media (min-width: 768px) {
928
- .col-sm-1, .col-sm-2, .col-sm-3, .col-sm-4, .col-sm-5, .col-sm-6, .col-sm-7, .col-sm-8, .col-sm-9, .col-sm-10, .col-sm-11, .col-sm-12 {
929
- float: left;
930
- }
931
- .col-sm-12 {
932
- width: 100%;
933
- }
934
- .col-sm-11 {
935
- width: 91.66666666666666%;
936
- }
937
- .col-sm-10 {
938
- width: 83.33333333333334%;
939
- }
940
- .col-sm-9 {
941
- width: 75%;
942
- }
943
- .col-sm-8 {
944
- width: 66.66666666666666%;
945
- }
946
- .col-sm-7 {
947
- width: 58.333333333333336%;
948
- }
949
- .col-sm-6 {
950
- width: 50%;
951
- }
952
- .col-sm-5 {
953
- width: 41.66666666666667%;
954
- }
955
- .col-sm-4 {
956
- width: 33.33333333333333%;
957
- }
958
- .col-sm-3 {
959
- width: 25%;
960
- }
961
- .col-sm-2 {
962
- width: 16.666666666666664%;
963
- }
964
- .col-sm-1 {
965
- width: 8.333333333333332%;
966
- }
967
- .col-sm-pull-12 {
968
- right: 100%;
969
- }
970
- .col-sm-pull-11 {
971
- right: 91.66666666666666%;
972
- }
973
- .col-sm-pull-10 {
974
- right: 83.33333333333334%;
975
- }
976
- .col-sm-pull-9 {
977
- right: 75%;
978
- }
979
- .col-sm-pull-8 {
980
- right: 66.66666666666666%;
981
- }
982
- .col-sm-pull-7 {
983
- right: 58.333333333333336%;
984
- }
985
- .col-sm-pull-6 {
986
- right: 50%;
987
- }
988
- .col-sm-pull-5 {
989
- right: 41.66666666666667%;
990
- }
991
- .col-sm-pull-4 {
992
- right: 33.33333333333333%;
993
- }
994
- .col-sm-pull-3 {
995
- right: 25%;
996
- }
997
- .col-sm-pull-2 {
998
- right: 16.666666666666664%;
999
- }
1000
- .col-sm-pull-1 {
1001
- right: 8.333333333333332%;
1002
- }
1003
- .col-sm-pull-0 {
1004
- right: 0;
1005
- }
1006
- .col-sm-push-12 {
1007
- left: 100%;
1008
- }
1009
- .col-sm-push-11 {
1010
- left: 91.66666666666666%;
1011
- }
1012
- .col-sm-push-10 {
1013
- left: 83.33333333333334%;
1014
- }
1015
- .col-sm-push-9 {
1016
- left: 75%;
1017
- }
1018
- .col-sm-push-8 {
1019
- left: 66.66666666666666%;
1020
- }
1021
- .col-sm-push-7 {
1022
- left: 58.333333333333336%;
1023
- }
1024
- .col-sm-push-6 {
1025
- left: 50%;
1026
- }
1027
- .col-sm-push-5 {
1028
- left: 41.66666666666667%;
1029
- }
1030
- .col-sm-push-4 {
1031
- left: 33.33333333333333%;
1032
- }
1033
- .col-sm-push-3 {
1034
- left: 25%;
1035
- }
1036
- .col-sm-push-2 {
1037
- left: 16.666666666666664%;
1038
- }
1039
- .col-sm-push-1 {
1040
- left: 8.333333333333332%;
1041
- }
1042
- .col-sm-push-0 {
1043
- left: 0;
1044
- }
1045
- .col-sm-offset-12 {
1046
- margin-left: 100%;
1047
- }
1048
- .col-sm-offset-11 {
1049
- margin-left: 91.66666666666666%;
1050
- }
1051
- .col-sm-offset-10 {
1052
- margin-left: 83.33333333333334%;
1053
- }
1054
- .col-sm-offset-9 {
1055
- margin-left: 75%;
1056
- }
1057
- .col-sm-offset-8 {
1058
- margin-left: 66.66666666666666%;
1059
- }
1060
- .col-sm-offset-7 {
1061
- margin-left: 58.333333333333336%;
1062
- }
1063
- .col-sm-offset-6 {
1064
- margin-left: 50%;
1065
- }
1066
- .col-sm-offset-5 {
1067
- margin-left: 41.66666666666667%;
1068
- }
1069
- .col-sm-offset-4 {
1070
- margin-left: 33.33333333333333%;
1071
- }
1072
- .col-sm-offset-3 {
1073
- margin-left: 25%;
1074
- }
1075
- .col-sm-offset-2 {
1076
- margin-left: 16.666666666666664%;
1077
- }
1078
- .col-sm-offset-1 {
1079
- margin-left: 8.333333333333332%;
1080
- }
1081
- .col-sm-offset-0 {
1082
- margin-left: 0;
1083
- }
1084
  }
1085
- @media (min-width: 992px) {
1086
- .col-md-1, .col-md-2, .col-md-3, .col-md-4, .col-md-5, .col-md-6, .col-md-7, .col-md-8, .col-md-9, .col-md-10, .col-md-11, .col-md-12 {
1087
- float: left;
1088
- }
1089
- .col-md-12 {
1090
- width: 100%;
1091
- }
1092
- .col-md-11 {
1093
- width: 91.66666666666666%;
1094
- }
1095
- .col-md-10 {
1096
- width: 83.33333333333334%;
1097
- }
1098
- .col-md-9 {
1099
- width: 75%;
1100
- }
1101
- .col-md-8 {
1102
- width: 66.66666666666666%;
1103
- }
1104
- .col-md-7 {
1105
- width: 58.333333333333336%;
1106
- }
1107
- .col-md-6 {
1108
- width: 50%;
1109
- }
1110
- .col-md-5 {
1111
- width: 41.66666666666667%;
1112
- }
1113
- .col-md-4 {
1114
- width: 33.33333333333333%;
1115
- }
1116
- .col-md-3 {
1117
- width: 25%;
1118
- }
1119
- .col-md-2 {
1120
- width: 16.666666666666664%;
1121
- }
1122
- .col-md-1 {
1123
- width: 8.333333333333332%;
1124
- }
1125
- .col-md-pull-12 {
1126
- right: 100%;
1127
- }
1128
- .col-md-pull-11 {
1129
- right: 91.66666666666666%;
1130
- }
1131
- .col-md-pull-10 {
1132
- right: 83.33333333333334%;
1133
- }
1134
- .col-md-pull-9 {
1135
- right: 75%;
1136
- }
1137
- .col-md-pull-8 {
1138
- right: 66.66666666666666%;
1139
- }
1140
- .col-md-pull-7 {
1141
- right: 58.333333333333336%;
1142
- }
1143
- .col-md-pull-6 {
1144
- right: 50%;
1145
- }
1146
- .col-md-pull-5 {
1147
- right: 41.66666666666667%;
1148
- }
1149
- .col-md-pull-4 {
1150
- right: 33.33333333333333%;
1151
- }
1152
- .col-md-pull-3 {
1153
- right: 25%;
1154
- }
1155
- .col-md-pull-2 {
1156
- right: 16.666666666666664%;
1157
- }
1158
- .col-md-pull-1 {
1159
- right: 8.333333333333332%;
1160
- }
1161
- .col-md-pull-0 {
1162
- right: 0;
1163
- }
1164
- .col-md-push-12 {
1165
- left: 100%;
1166
- }
1167
- .col-md-push-11 {
1168
- left: 91.66666666666666%;
1169
- }
1170
- .col-md-push-10 {
1171
- left: 83.33333333333334%;
1172
- }
1173
- .col-md-push-9 {
1174
- left: 75%;
1175
- }
1176
- .col-md-push-8 {
1177
- left: 66.66666666666666%;
1178
- }
1179
- .col-md-push-7 {
1180
- left: 58.333333333333336%;
1181
- }
1182
- .col-md-push-6 {
1183
- left: 50%;
1184
- }
1185
- .col-md-push-5 {
1186
- left: 41.66666666666667%;
1187
- }
1188
- .col-md-push-4 {
1189
- left: 33.33333333333333%;
1190
- }
1191
- .col-md-push-3 {
1192
- left: 25%;
1193
- }
1194
- .col-md-push-2 {
1195
- left: 16.666666666666664%;
1196
- }
1197
- .col-md-push-1 {
1198
- left: 8.333333333333332%;
1199
- }
1200
- .col-md-push-0 {
1201
- left: 0;
1202
- }
1203
- .col-md-offset-12 {
1204
- margin-left: 100%;
1205
- }
1206
- .col-md-offset-11 {
1207
- margin-left: 91.66666666666666%;
1208
- }
1209
- .col-md-offset-10 {
1210
- margin-left: 83.33333333333334%;
1211
- }
1212
- .col-md-offset-9 {
1213
- margin-left: 75%;
1214
- }
1215
- .col-md-offset-8 {
1216
- margin-left: 66.66666666666666%;
1217
- }
1218
- .col-md-offset-7 {
1219
- margin-left: 58.333333333333336%;
1220
- }
1221
- .col-md-offset-6 {
1222
- margin-left: 50%;
1223
- }
1224
- .col-md-offset-5 {
1225
- margin-left: 41.66666666666667%;
1226
- }
1227
- .col-md-offset-4 {
1228
- margin-left: 33.33333333333333%;
1229
- }
1230
- .col-md-offset-3 {
1231
- margin-left: 25%;
1232
- }
1233
- .col-md-offset-2 {
1234
- margin-left: 16.666666666666664%;
1235
- }
1236
- .col-md-offset-1 {
1237
- margin-left: 8.333333333333332%;
1238
- }
1239
- .col-md-offset-0 {
1240
- margin-left: 0;
1241
- }
1242
  }
1243
- @media (min-width: 1200px) {
1244
- .col-lg-1, .col-lg-2, .col-lg-3, .col-lg-4, .col-lg-5, .col-lg-6, .col-lg-7, .col-lg-8, .col-lg-9, .col-lg-10, .col-lg-11, .col-lg-12 {
1245
- float: left;
1246
- }
1247
- .col-lg-12 {
1248
- width: 100%;
1249
- }
1250
- .col-lg-11 {
1251
- width: 91.66666666666666%;
1252
- }
1253
- .col-lg-10 {
1254
- width: 83.33333333333334%;
1255
- }
1256
- .col-lg-9 {
1257
- width: 75%;
1258
- }
1259
- .col-lg-8 {
1260
- width: 66.66666666666666%;
1261
- }
1262
- .col-lg-7 {
1263
- width: 58.333333333333336%;
1264
- }
1265
- .col-lg-6 {
1266
- width: 50%;
1267
- }
1268
- .col-lg-5 {
1269
- width: 41.66666666666667%;
1270
- }
1271
- .col-lg-4 {
1272
- width: 33.33333333333333%;
1273
- }
1274
- .col-lg-3 {
1275
- width: 25%;
1276
- }
1277
- .col-lg-2 {
1278
- width: 16.666666666666664%;
1279
- }
1280
- .col-lg-1 {
1281
- width: 8.333333333333332%;
1282
- }
1283
- .col-lg-pull-12 {
1284
- right: 100%;
1285
- }
1286
- .col-lg-pull-11 {
1287
- right: 91.66666666666666%;
1288
- }
1289
- .col-lg-pull-10 {
1290
- right: 83.33333333333334%;
1291
- }
1292
- .col-lg-pull-9 {
1293
- right: 75%;
1294
- }
1295
- .col-lg-pull-8 {
1296
- right: 66.66666666666666%;
1297
- }
1298
- .col-lg-pull-7 {
1299
- right: 58.333333333333336%;
1300
- }
1301
- .col-lg-pull-6 {
1302
- right: 50%;
1303
- }
1304
- .col-lg-pull-5 {
1305
- right: 41.66666666666667%;
1306
- }
1307
- .col-lg-pull-4 {
1308
- right: 33.33333333333333%;
1309
- }
1310
- .col-lg-pull-3 {
1311
- right: 25%;
1312
- }
1313
- .col-lg-pull-2 {
1314
- right: 16.666666666666664%;
1315
- }
1316
- .col-lg-pull-1 {
1317
- right: 8.333333333333332%;
1318
- }
1319
- .col-lg-pull-0 {
1320
- right: 0;
1321
- }
1322
- .col-lg-push-12 {
1323
- left: 100%;
1324
- }
1325
- .col-lg-push-11 {
1326
- left: 91.66666666666666%;
1327
- }
1328
- .col-lg-push-10 {
1329
- left: 83.33333333333334%;
1330
- }
1331
- .col-lg-push-9 {
1332
- left: 75%;
1333
- }
1334
- .col-lg-push-8 {
1335
- left: 66.66666666666666%;
1336
- }
1337
- .col-lg-push-7 {
1338
- left: 58.333333333333336%;
1339
- }
1340
- .col-lg-push-6 {
1341
- left: 50%;
1342
- }
1343
- .col-lg-push-5 {
1344
- left: 41.66666666666667%;
1345
- }
1346
- .col-lg-push-4 {
1347
- left: 33.33333333333333%;
1348
- }
1349
- .col-lg-push-3 {
1350
- left: 25%;
1351
- }
1352
- .col-lg-push-2 {
1353
- left: 16.666666666666664%;
1354
- }
1355
- .col-lg-push-1 {
1356
- left: 8.333333333333332%;
1357
- }
1358
- .col-lg-push-0 {
1359
- left: 0;
1360
- }
1361
- .col-lg-offset-12 {
1362
- margin-left: 100%;
1363
- }
1364
- .col-lg-offset-11 {
1365
- margin-left: 91.66666666666666%;
1366
- }
1367
- .col-lg-offset-10 {
1368
- margin-left: 83.33333333333334%;
1369
- }
1370
- .col-lg-offset-9 {
1371
- margin-left: 75%;
1372
- }
1373
- .col-lg-offset-8 {
1374
- margin-left: 66.66666666666666%;
1375
- }
1376
- .col-lg-offset-7 {
1377
- margin-left: 58.333333333333336%;
1378
- }
1379
- .col-lg-offset-6 {
1380
- margin-left: 50%;
1381
- }
1382
- .col-lg-offset-5 {
1383
- margin-left: 41.66666666666667%;
1384
- }
1385
- .col-lg-offset-4 {
1386
- margin-left: 33.33333333333333%;
1387
- }
1388
- .col-lg-offset-3 {
1389
- margin-left: 25%;
1390
- }
1391
- .col-lg-offset-2 {
1392
- margin-left: 16.666666666666664%;
1393
- }
1394
- .col-lg-offset-1 {
1395
- margin-left: 8.333333333333332%;
1396
- }
1397
- .col-lg-offset-0 {
1398
- margin-left: 0;
1399
- }
1400
  }
1401
- table {
1402
- max-width: 100%;
1403
- background-color: transparent;
1404
  }
1405
- th {
1406
- text-align: left;
1407
  }
1408
- .table {
1409
- width: 100%;
1410
- margin-bottom: 20px;
1411
  }
1412
- .table > thead > tr > th,
1413
- .table > tbody > tr > th,
1414
- .table > tfoot > tr > th,
1415
- .table > thead > tr > td,
1416
- .table > tbody > tr > td,
1417
- .table > tfoot > tr > td {
1418
- padding: 8px;
1419
- line-height: 1.428571429;
1420
- vertical-align: top;
1421
- border-top: 1px solid #ddd;
1422
  }
1423
- .table > thead > tr > th {
1424
- vertical-align: bottom;
1425
- border-bottom: 2px solid #ddd;
1426
  }
1427
- .table > caption + thead > tr:first-child > th,
1428
- .table > colgroup + thead > tr:first-child > th,
1429
- .table > thead:first-child > tr:first-child > th,
1430
- .table > caption + thead > tr:first-child > td,
1431
- .table > colgroup + thead > tr:first-child > td,
1432
- .table > thead:first-child > tr:first-child > td {
1433
- border-top: 0;
1434
  }
1435
- .table > tbody + tbody {
1436
- border-top: 2px solid #ddd;
1437
  }
1438
- .table .table {
1439
- background-color: #fff;
1440
  }
1441
- .table-condensed > thead > tr > th,
1442
- .table-condensed > tbody > tr > th,
1443
- .table-condensed > tfoot > tr > th,
1444
- .table-condensed > thead > tr > td,
1445
- .table-condensed > tbody > tr > td,
1446
- .table-condensed > tfoot > tr > td {
1447
- padding: 5px;
1448
  }
1449
- .table-bordered {
1450
- border: 1px solid #ddd;
1451
  }
1452
- .table-bordered > thead > tr > th,
1453
- .table-bordered > tbody > tr > th,
1454
- .table-bordered > tfoot > tr > th,
1455
- .table-bordered > thead > tr > td,
1456
- .table-bordered > tbody > tr > td,
1457
- .table-bordered > tfoot > tr > td {
1458
- border: 1px solid #ddd;
1459
  }
1460
- .table-bordered > thead > tr > th,
1461
- .table-bordered > thead > tr > td {
1462
- border-bottom-width: 2px;
1463
  }
1464
- .table-striped > tbody > tr:nth-child(odd) > td,
1465
- .table-striped > tbody > tr:nth-child(odd) > th {
1466
- background-color: #f9f9f9;
1467
  }
1468
- .table-hover > tbody > tr:hover > td,
1469
- .table-hover > tbody > tr:hover > th {
1470
- background-color: #f5f5f5;
1471
  }
1472
- table col[class*="col-"] {
1473
- position: static;
1474
- display: table-column;
1475
- float: none;
1476
  }
1477
- table td[class*="col-"],
1478
- table th[class*="col-"] {
1479
- position: static;
1480
- display: table-cell;
1481
- float: none;
1482
  }
1483
- .table > thead > tr > td.active,
1484
- .table > tbody > tr > td.active,
1485
- .table > tfoot > tr > td.active,
1486
- .table > thead > tr > th.active,
1487
- .table > tbody > tr > th.active,
1488
- .table > tfoot > tr > th.active,
1489
- .table > thead > tr.active > td,
1490
- .table > tbody > tr.active > td,
1491
- .table > tfoot > tr.active > td,
1492
- .table > thead > tr.active > th,
1493
- .table > tbody > tr.active > th,
1494
- .table > tfoot > tr.active > th {
1495
- background-color: #f5f5f5;
1496
  }
1497
- .table-hover > tbody > tr > td.active:hover,
1498
- .table-hover > tbody > tr > th.active:hover,
1499
- .table-hover > tbody > tr.active:hover > td,
1500
- .table-hover > tbody > tr.active:hover > th {
1501
- background-color: #e8e8e8;
1502
  }
1503
- .table > thead > tr > td.success,
1504
- .table > tbody > tr > td.success,
1505
- .table > tfoot > tr > td.success,
1506
- .table > thead > tr > th.success,
1507
- .table > tbody > tr > th.success,
1508
- .table > tfoot > tr > th.success,
1509
- .table > thead > tr.success > td,
1510
- .table > tbody > tr.success > td,
1511
- .table > tfoot > tr.success > td,
1512
- .table > thead > tr.success > th,
1513
- .table > tbody > tr.success > th,
1514
- .table > tfoot > tr.success > th {
1515
- background-color: #dff0d8;
1516
  }
1517
- .table-hover > tbody > tr > td.success:hover,
1518
- .table-hover > tbody > tr > th.success:hover,
1519
- .table-hover > tbody > tr.success:hover > td,
1520
- .table-hover > tbody > tr.success:hover > th {
1521
- background-color: #d0e9c6;
1522
  }
1523
- .table > thead > tr > td.info,
1524
- .table > tbody > tr > td.info,
1525
- .table > tfoot > tr > td.info,
1526
- .table > thead > tr > th.info,
1527
- .table > tbody > tr > th.info,
1528
- .table > tfoot > tr > th.info,
1529
- .table > thead > tr.info > td,
1530
- .table > tbody > tr.info > td,
1531
- .table > tfoot > tr.info > td,
1532
- .table > thead > tr.info > th,
1533
- .table > tbody > tr.info > th,
1534
- .table > tfoot > tr.info > th {
1535
- background-color: #d9edf7;
1536
  }
1537
- .table-hover > tbody > tr > td.info:hover,
1538
- .table-hover > tbody > tr > th.info:hover,
1539
- .table-hover > tbody > tr.info:hover > td,
1540
- .table-hover > tbody > tr.info:hover > th {
1541
- background-color: #c4e3f3;
1542
  }
1543
- .table > thead > tr > td.warning,
1544
- .table > tbody > tr > td.warning,
1545
- .table > tfoot > tr > td.warning,
1546
- .table > thead > tr > th.warning,
1547
- .table > tbody > tr > th.warning,
1548
- .table > tfoot > tr > th.warning,
1549
- .table > thead > tr.warning > td,
1550
- .table > tbody > tr.warning > td,
1551
- .table > tfoot > tr.warning > td,
1552
- .table > thead > tr.warning > th,
1553
- .table > tbody > tr.warning > th,
1554
- .table > tfoot > tr.warning > th {
1555
- background-color: #fcf8e3;
1556
  }
1557
- .table-hover > tbody > tr > td.warning:hover,
1558
- .table-hover > tbody > tr > th.warning:hover,
1559
- .table-hover > tbody > tr.warning:hover > td,
1560
- .table-hover > tbody > tr.warning:hover > th {
1561
- background-color: #faf2cc;
1562
  }
1563
- .table > thead > tr > td.danger,
1564
- .table > tbody > tr > td.danger,
1565
- .table > tfoot > tr > td.danger,
1566
- .table > thead > tr > th.danger,
1567
- .table > tbody > tr > th.danger,
1568
- .table > tfoot > tr > th.danger,
1569
- .table > thead > tr.danger > td,
1570
- .table > tbody > tr.danger > td,
1571
- .table > tfoot > tr.danger > td,
1572
- .table > thead > tr.danger > th,
1573
- .table > tbody > tr.danger > th,
1574
- .table > tfoot > tr.danger > th {
1575
- background-color: #f2dede;
1576
  }
1577
- .table-hover > tbody > tr > td.danger:hover,
1578
- .table-hover > tbody > tr > th.danger:hover,
1579
- .table-hover > tbody > tr.danger:hover > td,
1580
- .table-hover > tbody > tr.danger:hover > th {
1581
- background-color: #ebcccc;
1582
  }
1583
- @media (max-width: 767px) {
1584
- .table-responsive {
1585
- width: 100%;
1586
- margin-bottom: 15px;
1587
- overflow-x: scroll;
1588
- overflow-y: hidden;
1589
- -webkit-overflow-scrolling: touch;
1590
- -ms-overflow-style: -ms-autohiding-scrollbar;
1591
- border: 1px solid #ddd;
1592
- }
1593
- .table-responsive > .table {
1594
- margin-bottom: 0;
1595
- }
1596
- .table-responsive > .table > thead > tr > th,
1597
- .table-responsive > .table > tbody > tr > th,
1598
- .table-responsive > .table > tfoot > tr > th,
1599
- .table-responsive > .table > thead > tr > td,
1600
- .table-responsive > .table > tbody > tr > td,
1601
- .table-responsive > .table > tfoot > tr > td {
1602
- white-space: nowrap;
1603
- }
1604
- .table-responsive > .table-bordered {
1605
- border: 0;
1606
- }
1607
- .table-responsive > .table-bordered > thead > tr > th:first-child,
1608
- .table-responsive > .table-bordered > tbody > tr > th:first-child,
1609
- .table-responsive > .table-bordered > tfoot > tr > th:first-child,
1610
- .table-responsive > .table-bordered > thead > tr > td:first-child,
1611
- .table-responsive > .table-bordered > tbody > tr > td:first-child,
1612
- .table-responsive > .table-bordered > tfoot > tr > td:first-child {
1613
- border-left: 0;
1614
- }
1615
- .table-responsive > .table-bordered > thead > tr > th:last-child,
1616
- .table-responsive > .table-bordered > tbody > tr > th:last-child,
1617
- .table-responsive > .table-bordered > tfoot > tr > th:last-child,
1618
- .table-responsive > .table-bordered > thead > tr > td:last-child,
1619
- .table-responsive > .table-bordered > tbody > tr > td:last-child,
1620
- .table-responsive > .table-bordered > tfoot > tr > td:last-child {
1621
- border-right: 0;
1622
- }
1623
- .table-responsive > .table-bordered > tbody > tr:last-child > th,
1624
- .table-responsive > .table-bordered > tfoot > tr:last-child > th,
1625
- .table-responsive > .table-bordered > tbody > tr:last-child > td,
1626
- .table-responsive > .table-bordered > tfoot > tr:last-child > td {
1627
- border-bottom: 0;
1628
- }
1629
  }
1630
- fieldset {
1631
- min-width: 0;
1632
- padding: 0;
1633
- margin: 0;
1634
- border: 0;
1635
  }
1636
- legend {
1637
- display: block;
1638
- width: 100%;
1639
- padding: 0;
1640
- margin-bottom: 20px;
1641
- font-size: 21px;
1642
- line-height: inherit;
1643
- color: #333;
1644
- border: 0;
1645
- border-bottom: 1px solid #e5e5e5;
1646
  }
1647
- label {
1648
- display: inline-block;
1649
- margin-bottom: 5px;
1650
- font-weight: bold;
1651
  }
1652
- input[type="search"] {
1653
- -webkit-box-sizing: border-box;
1654
- -moz-box-sizing: border-box;
1655
- box-sizing: border-box;
1656
  }
1657
- input[type="radio"],
1658
- input[type="checkbox"] {
1659
- margin: 4px 0 0;
1660
- margin-top: 1px \9;
1661
- /* IE8-9 */
1662
- line-height: normal;
1663
  }
1664
- input[type="file"] {
1665
- display: block;
1666
  }
1667
- input[type="range"] {
1668
- display: block;
1669
- width: 100%;
1670
  }
1671
- select[multiple],
1672
- select[size] {
1673
- height: auto;
1674
  }
1675
- input[type="file"]:focus,
1676
- input[type="radio"]:focus,
1677
- input[type="checkbox"]:focus {
1678
- outline: thin dotted;
1679
- outline: 5px auto -webkit-focus-ring-color;
1680
- outline-offset: -2px;
1681
  }
1682
- output {
1683
- display: block;
1684
- padding-top: 7px;
1685
- font-size: 14px;
1686
- line-height: 1.428571429;
1687
- color: #555;
1688
  }
1689
- .form-control {
1690
- display: block;
1691
- width: 100%;
1692
- height: 34px;
1693
- padding: 6px 12px;
1694
- font-size: 14px;
1695
- line-height: 1.428571429;
1696
- color: #555;
1697
- background-color: #fff;
1698
- background-image: none;
1699
- border: 1px solid #ccc;
1700
- border-radius: 4px;
1701
- -webkit-box-shadow: inset 0 1px 1px rgba(0, 0, 0, .075);
1702
- box-shadow: inset 0 1px 1px rgba(0, 0, 0, .075);
1703
- -webkit-transition: border-color ease-in-out .15s, box-shadow ease-in-out .15s;
1704
- transition: border-color ease-in-out .15s, box-shadow ease-in-out .15s;
1705
  }
1706
- .form-control:focus {
1707
- border-color: #66afe9;
1708
- outline: 0;
1709
- -webkit-box-shadow: inset 0 1px 1px rgba(0,0,0,.075), 0 0 8px rgba(102, 175, 233, .6);
1710
- box-shadow: inset 0 1px 1px rgba(0,0,0,.075), 0 0 8px rgba(102, 175, 233, .6);
1711
  }
1712
- .form-control:-moz-placeholder {
1713
- color: #999;
1714
  }
1715
- .form-control::-moz-placeholder {
1716
- color: #999;
1717
- opacity: 1;
1718
  }
1719
- .form-control:-ms-input-placeholder {
1720
- color: #999;
1721
  }
1722
- .form-control::-webkit-input-placeholder {
1723
- color: #999;
1724
  }
1725
- .form-control[disabled],
1726
- .form-control[readonly],
1727
- fieldset[disabled] .form-control {
1728
- cursor: not-allowed;
1729
- background-color: #eee;
1730
- opacity: 1;
1731
  }
1732
- textarea.form-control {
1733
- height: auto;
1734
  }
1735
- input[type="date"] {
1736
- line-height: 34px;
1737
  }
1738
- .form-group {
1739
- margin-bottom: 15px;
1740
- }
1741
- .radio,
1742
- .checkbox {
1743
- display: block;
1744
- min-height: 20px;
1745
- padding-left: 20px;
1746
- margin-top: 10px;
1747
- margin-bottom: 10px;
1748
- }
1749
- .radio label,
1750
- .checkbox label {
1751
- display: inline;
1752
- font-weight: normal;
1753
- cursor: pointer;
1754
- }
1755
- .radio input[type="radio"],
1756
- .radio-inline input[type="radio"],
1757
- .checkbox input[type="checkbox"],
1758
- .checkbox-inline input[type="checkbox"] {
1759
- float: left;
1760
- margin-left: -20px;
1761
- }
1762
- .radio + .radio,
1763
- .checkbox + .checkbox {
1764
- margin-top: -5px;
1765
- }
1766
- .radio-inline,
1767
- .checkbox-inline {
1768
- display: inline-block;
1769
- padding-left: 20px;
1770
- margin-bottom: 0;
1771
- font-weight: normal;
1772
- vertical-align: middle;
1773
- cursor: pointer;
1774
- }
1775
- .radio-inline + .radio-inline,
1776
- .checkbox-inline + .checkbox-inline {
1777
- margin-top: 0;
1778
- margin-left: 10px;
1779
  }
1780
- input[type="radio"][disabled],
1781
- input[type="checkbox"][disabled],
1782
- .radio[disabled],
1783
- .radio-inline[disabled],
1784
- .checkbox[disabled],
1785
- .checkbox-inline[disabled],
1786
- fieldset[disabled] input[type="radio"],
1787
- fieldset[disabled] input[type="checkbox"],
1788
- fieldset[disabled] .radio,
1789
- fieldset[disabled] .radio-inline,
1790
- fieldset[disabled] .checkbox,
1791
- fieldset[disabled] .checkbox-inline {
1792
- cursor: not-allowed;
1793
  }
1794
- .input-sm {
1795
- height: 30px;
1796
- padding: 5px 10px;
1797
- font-size: 12px;
1798
- line-height: 1.5;
1799
- border-radius: 3px;
1800
  }
1801
- select.input-sm {
1802
- height: 30px;
1803
- line-height: 30px;
1804
  }
1805
- textarea.input-sm,
1806
- select[multiple].input-sm {
1807
- height: auto;
1808
  }
1809
- .input-lg {
1810
- height: 46px;
1811
- padding: 10px 16px;
1812
- font-size: 18px;
1813
- line-height: 1.33;
1814
- border-radius: 6px;
1815
  }
1816
- select.input-lg {
1817
- height: 46px;
1818
- line-height: 46px;
1819
  }
1820
- textarea.input-lg,
1821
- select[multiple].input-lg {
1822
- height: auto;
1823
  }
1824
- .has-feedback {
1825
- position: relative;
1826
  }
1827
- .has-feedback .form-control {
1828
- padding-right: 42.5px;
 
 
1829
  }
1830
- .has-feedback .form-control-feedback {
1831
- position: absolute;
1832
- top: 25px;
1833
- right: 0;
1834
- display: block;
1835
- width: 34px;
1836
- height: 34px;
1837
- line-height: 34px;
1838
- text-align: center;
1839
  }
1840
- .has-success .help-block,
1841
- .has-success .control-label,
1842
- .has-success .radio,
1843
- .has-success .checkbox,
1844
- .has-success .radio-inline,
1845
- .has-success .checkbox-inline {
1846
- color: #3c763d;
1847
  }
1848
- .has-success .form-control {
1849
- border-color: #3c763d;
1850
- -webkit-box-shadow: inset 0 1px 1px rgba(0, 0, 0, .075);
1851
- box-shadow: inset 0 1px 1px rgba(0, 0, 0, .075);
 
 
1852
  }
1853
- .has-success .form-control:focus {
1854
- border-color: #2b542c;
1855
- -webkit-box-shadow: inset 0 1px 1px rgba(0, 0, 0, .075), 0 0 6px #67b168;
1856
- box-shadow: inset 0 1px 1px rgba(0, 0, 0, .075), 0 0 6px #67b168;
 
 
 
1857
  }
1858
- .has-success .input-group-addon {
1859
- color: #3c763d;
1860
- background-color: #dff0d8;
1861
- border-color: #3c763d;
1862
  }
1863
- .has-success .form-control-feedback {
1864
- color: #3c763d;
 
 
1865
  }
1866
- .has-warning .help-block,
1867
- .has-warning .control-label,
1868
- .has-warning .radio,
1869
- .has-warning .checkbox,
1870
- .has-warning .radio-inline,
1871
- .has-warning .checkbox-inline {
1872
- color: #8a6d3b;
1873
  }
1874
- .has-warning .form-control {
1875
- border-color: #8a6d3b;
1876
- -webkit-box-shadow: inset 0 1px 1px rgba(0, 0, 0, .075);
1877
- box-shadow: inset 0 1px 1px rgba(0, 0, 0, .075);
1878
  }
1879
- .has-warning .form-control:focus {
1880
- border-color: #66512c;
1881
- -webkit-box-shadow: inset 0 1px 1px rgba(0, 0, 0, .075), 0 0 6px #c0a16b;
1882
- box-shadow: inset 0 1px 1px rgba(0, 0, 0, .075), 0 0 6px #c0a16b;
1883
  }
1884
- .has-warning .input-group-addon {
1885
- color: #8a6d3b;
1886
- background-color: #fcf8e3;
1887
- border-color: #8a6d3b;
 
 
 
 
 
1888
  }
1889
- .has-warning .form-control-feedback {
1890
- color: #8a6d3b;
1891
  }
1892
- .has-error .help-block,
1893
- .has-error .control-label,
1894
- .has-error .radio,
1895
- .has-error .checkbox,
1896
- .has-error .radio-inline,
1897
- .has-error .checkbox-inline {
1898
- color: #a94442;
 
 
 
 
 
 
1899
  }
1900
- .has-error .form-control {
1901
- border-color: #a94442;
1902
- -webkit-box-shadow: inset 0 1px 1px rgba(0, 0, 0, .075);
1903
- box-shadow: inset 0 1px 1px rgba(0, 0, 0, .075);
1904
  }
1905
- .has-error .form-control:focus {
1906
- border-color: #843534;
1907
- -webkit-box-shadow: inset 0 1px 1px rgba(0, 0, 0, .075), 0 0 6px #ce8483;
1908
- box-shadow: inset 0 1px 1px rgba(0, 0, 0, .075), 0 0 6px #ce8483;
 
1909
  }
1910
- .has-error .input-group-addon {
1911
- color: #a94442;
1912
- background-color: #f2dede;
1913
- border-color: #a94442;
 
 
 
 
 
1914
  }
1915
- .has-error .form-control-feedback {
1916
- color: #a94442;
 
 
 
 
 
 
1917
  }
1918
- .form-control-static {
1919
- margin-bottom: 0;
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1920
  }
1921
- .help-block {
1922
- display: block;
1923
- margin-top: 5px;
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1924
  margin-bottom: 10px;
1925
- color: #737373;
1926
  }
1927
- @media (min-width: 768px) {
1928
- .form-inline .form-group {
1929
- display: inline-block;
1930
- margin-bottom: 0;
1931
- vertical-align: middle;
1932
- }
1933
- .form-inline .form-control {
1934
- display: inline-block;
1935
- width: auto;
1936
- vertical-align: middle;
1937
- }
1938
- .form-inline .control-label {
1939
- margin-bottom: 0;
1940
- vertical-align: middle;
1941
- }
1942
- .form-inline .radio,
1943
- .form-inline .checkbox {
1944
- display: inline-block;
1945
- padding-left: 0;
1946
- margin-top: 0;
1947
- margin-bottom: 0;
1948
- vertical-align: middle;
1949
- }
1950
- .form-inline .radio input[type="radio"],
1951
- .form-inline .checkbox input[type="checkbox"] {
1952
- float: none;
1953
- margin-left: 0;
1954
- }
1955
- .form-inline .has-feedback .form-control-feedback {
1956
- top: 0;
1957
- }
1958
  }
1959
- .form-horizontal .control-label,
1960
- .form-horizontal .radio,
1961
- .form-horizontal .checkbox,
1962
- .form-horizontal .radio-inline,
1963
- .form-horizontal .checkbox-inline {
1964
- padding-top: 7px;
1965
- margin-top: 0;
1966
- margin-bottom: 0;
1967
  }
1968
- .form-horizontal .radio,
1969
- .form-horizontal .checkbox {
1970
- min-height: 27px;
 
 
 
 
 
 
 
 
 
 
1971
  }
1972
- .form-horizontal .form-group {
1973
- margin-right: -15px;
1974
- margin-left: -15px;
1975
  }
1976
- .form-horizontal .form-control-static {
1977
- padding-top: 7px;
 
1978
  }
1979
- @media (min-width: 768px) {
1980
- .form-horizontal .control-label {
1981
- text-align: right;
1982
- }
1983
  }
1984
- .form-horizontal .has-feedback .form-control-feedback {
1985
- top: 0;
1986
- right: 15px;
1987
  }
1988
- .btn {
1989
- display: inline-block;
1990
- padding: 6px 12px;
1991
- margin-bottom: 0;
1992
  font-size: 14px;
1993
- font-weight: normal;
1994
- line-height: 1.428571429;
1995
- text-align: center;
1996
- white-space: nowrap;
1997
- vertical-align: middle;
1998
- cursor: pointer;
1999
- -webkit-user-select: none;
2000
- -moz-user-select: none;
2001
- -ms-user-select: none;
2002
- -o-user-select: none;
2003
- user-select: none;
2004
- background-image: none;
2005
- border: 1px solid transparent;
2006
- border-radius: 4px;
2007
  }
2008
- .btn:focus {
2009
- outline: thin dotted;
2010
- outline: 5px auto -webkit-focus-ring-color;
2011
- outline-offset: -2px;
2012
  }
2013
- .btn:hover,
2014
- .btn:focus {
2015
- color: #333;
2016
- text-decoration: none;
2017
  }
2018
- .btn:active,
2019
- .btn.active {
2020
- background-image: none;
2021
- outline: 0;
2022
- -webkit-box-shadow: inset 0 3px 5px rgba(0, 0, 0, .125);
2023
- box-shadow: inset 0 3px 5px rgba(0, 0, 0, .125);
2024
  }
2025
- .btn.disabled,
2026
- .btn[disabled],
2027
- fieldset[disabled] .btn {
2028
- pointer-events: none;
2029
- cursor: not-allowed;
2030
- filter: alpha(opacity=65);
2031
- -webkit-box-shadow: none;
2032
- box-shadow: none;
2033
- opacity: .65;
2034
  }
2035
- .btn-default {
2036
- color: #333;
2037
- background-color: #fff;
2038
- border-color: #ccc;
2039
  }
2040
- .btn-default:hover,
2041
- .btn-default:focus,
2042
- .btn-default:active,
2043
- .btn-default.active,
2044
- .open .dropdown-toggle.btn-default {
2045
- color: #333;
2046
- background-color: #ebebeb;
2047
- border-color: #adadad;
2048
  }
2049
- .btn-default:active,
2050
- .btn-default.active,
2051
- .open .dropdown-toggle.btn-default {
2052
- background-image: none;
2053
  }
2054
- .btn-default.disabled,
2055
- .btn-default[disabled],
2056
- fieldset[disabled] .btn-default,
2057
- .btn-default.disabled:hover,
2058
- .btn-default[disabled]:hover,
2059
- fieldset[disabled] .btn-default:hover,
2060
- .btn-default.disabled:focus,
2061
- .btn-default[disabled]:focus,
2062
- fieldset[disabled] .btn-default:focus,
2063
- .btn-default.disabled:active,
2064
- .btn-default[disabled]:active,
2065
- fieldset[disabled] .btn-default:active,
2066
- .btn-default.disabled.active,
2067
- .btn-default[disabled].active,
2068
- fieldset[disabled] .btn-default.active {
2069
- background-color: #fff;
2070
- border-color: #ccc;
2071
  }
2072
- .btn-default .badge {
2073
- color: #fff;
2074
- background-color: #333;
2075
  }
2076
- .btn-primary {
2077
- color: #fff;
2078
- background-color: #428bca;
2079
- border-color: #357ebd;
2080
  }
2081
- .btn-primary:hover,
2082
- .btn-primary:focus,
2083
- .btn-primary:active,
2084
- .btn-primary.active,
2085
- .open .dropdown-toggle.btn-primary {
2086
- color: #fff;
2087
- background-color: #3276b1;
2088
- border-color: #285e8e;
2089
  }
2090
- .btn-primary:active,
2091
- .btn-primary.active,
2092
- .open .dropdown-toggle.btn-primary {
2093
- background-image: none;
2094
  }
2095
- .btn-primary.disabled,
2096
- .btn-primary[disabled],
2097
- fieldset[disabled] .btn-primary,
2098
- .btn-primary.disabled:hover,
2099
- .btn-primary[disabled]:hover,
2100
- fieldset[disabled] .btn-primary:hover,
2101
- .btn-primary.disabled:focus,
2102
- .btn-primary[disabled]:focus,
2103
- fieldset[disabled] .btn-primary:focus,
2104
- .btn-primary.disabled:active,
2105
- .btn-primary[disabled]:active,
2106
- fieldset[disabled] .btn-primary:active,
2107
- .btn-primary.disabled.active,
2108
- .btn-primary[disabled].active,
2109
- fieldset[disabled] .btn-primary.active {
2110
- background-color: #428bca;
2111
- border-color: #357ebd;
2112
- }
2113
- .btn-primary .badge {
2114
- color: #428bca;
2115
- background-color: #fff;
2116
- }
2117
- .btn-success {
2118
- color: #fff;
2119
- background-color: #5cb85c;
2120
- border-color: #4cae4c;
2121
- }
2122
- .btn-success:hover,
2123
- .btn-success:focus,
2124
- .btn-success:active,
2125
- .btn-success.active,
2126
- .open .dropdown-toggle.btn-success {
2127
- color: #fff;
2128
- background-color: #47a447;
2129
- border-color: #398439;
2130
  }
2131
- .btn-success:active,
2132
- .btn-success.active,
2133
- .open .dropdown-toggle.btn-success {
2134
- background-image: none;
2135
  }
2136
- .btn-success.disabled,
2137
- .btn-success[disabled],
2138
- fieldset[disabled] .btn-success,
2139
- .btn-success.disabled:hover,
2140
- .btn-success[disabled]:hover,
2141
- fieldset[disabled] .btn-success:hover,
2142
- .btn-success.disabled:focus,
2143
- .btn-success[disabled]:focus,
2144
- fieldset[disabled] .btn-success:focus,
2145
- .btn-success.disabled:active,
2146
- .btn-success[disabled]:active,
2147
- fieldset[disabled] .btn-success:active,
2148
- .btn-success.disabled.active,
2149
- .btn-success[disabled].active,
2150
- fieldset[disabled] .btn-success.active {
2151
- background-color: #5cb85c;
2152
- border-color: #4cae4c;
2153
  }
2154
- .btn-success .badge {
2155
- color: #5cb85c;
2156
- background-color: #fff;
2157
  }
2158
- .btn-info {
2159
- color: #fff;
2160
- background-color: #5bc0de;
2161
- border-color: #46b8da;
2162
  }
2163
- .btn-info:hover,
2164
- .btn-info:focus,
2165
- .btn-info:active,
2166
- .btn-info.active,
2167
- .open .dropdown-toggle.btn-info {
2168
- color: #fff;
2169
- background-color: #39b3d7;
2170
- border-color: #269abc;
2171
  }
2172
- .btn-info:active,
2173
- .btn-info.active,
2174
- .open .dropdown-toggle.btn-info {
2175
- background-image: none;
2176
  }
2177
- .btn-info.disabled,
2178
- .btn-info[disabled],
2179
- fieldset[disabled] .btn-info,
2180
- .btn-info.disabled:hover,
2181
- .btn-info[disabled]:hover,
2182
- fieldset[disabled] .btn-info:hover,
2183
- .btn-info.disabled:focus,
2184
- .btn-info[disabled]:focus,
2185
- fieldset[disabled] .btn-info:focus,
2186
- .btn-info.disabled:active,
2187
- .btn-info[disabled]:active,
2188
- fieldset[disabled] .btn-info:active,
2189
- .btn-info.disabled.active,
2190
- .btn-info[disabled].active,
2191
- fieldset[disabled] .btn-info.active {
2192
- background-color: #5bc0de;
2193
- border-color: #46b8da;
2194
  }
2195
- .btn-info .badge {
2196
- color: #5bc0de;
2197
- background-color: #fff;
2198
  }
2199
- .btn-warning {
2200
- color: #fff;
2201
- background-color: #f0ad4e;
2202
- border-color: #eea236;
2203
  }
2204
- .btn-warning:hover,
2205
- .btn-warning:focus,
2206
- .btn-warning:active,
2207
- .btn-warning.active,
2208
- .open .dropdown-toggle.btn-warning {
2209
- color: #fff;
2210
- background-color: #ed9c28;
2211
- border-color: #d58512;
2212
  }
2213
- .btn-warning:active,
2214
- .btn-warning.active,
2215
- .open .dropdown-toggle.btn-warning {
2216
- background-image: none;
2217
  }
2218
- .btn-warning.disabled,
2219
- .btn-warning[disabled],
2220
- fieldset[disabled] .btn-warning,
2221
- .btn-warning.disabled:hover,
2222
- .btn-warning[disabled]:hover,
2223
- fieldset[disabled] .btn-warning:hover,
2224
- .btn-warning.disabled:focus,
2225
- .btn-warning[disabled]:focus,
2226
- fieldset[disabled] .btn-warning:focus,
2227
- .btn-warning.disabled:active,
2228
- .btn-warning[disabled]:active,
2229
- fieldset[disabled] .btn-warning:active,
2230
- .btn-warning.disabled.active,
2231
- .btn-warning[disabled].active,
2232
- fieldset[disabled] .btn-warning.active {
2233
- background-color: #f0ad4e;
2234
- border-color: #eea236;
2235
  }
2236
- .btn-warning .badge {
2237
- color: #f0ad4e;
2238
- background-color: #fff;
2239
  }
2240
- .btn-danger {
2241
  color: #fff;
2242
- background-color: #d9534f;
2243
- border-color: #d43f3a;
2244
  }
2245
- .btn-danger:hover,
2246
- .btn-danger:focus,
2247
- .btn-danger:active,
2248
- .btn-danger.active,
2249
- .open .dropdown-toggle.btn-danger {
2250
- color: #fff;
2251
- background-color: #d2322d;
2252
- border-color: #ac2925;
2253
  }
2254
- .btn-danger:active,
2255
- .btn-danger.active,
2256
- .open .dropdown-toggle.btn-danger {
2257
- background-image: none;
2258
  }
2259
- .btn-danger.disabled,
2260
- .btn-danger[disabled],
2261
- fieldset[disabled] .btn-danger,
2262
- .btn-danger.disabled:hover,
2263
- .btn-danger[disabled]:hover,
2264
- fieldset[disabled] .btn-danger:hover,
2265
- .btn-danger.disabled:focus,
2266
- .btn-danger[disabled]:focus,
2267
- fieldset[disabled] .btn-danger:focus,
2268
- .btn-danger.disabled:active,
2269
- .btn-danger[disabled]:active,
2270
- fieldset[disabled] .btn-danger:active,
2271
- .btn-danger.disabled.active,
2272
- .btn-danger[disabled].active,
2273
- fieldset[disabled] .btn-danger.active {
2274
- background-color: #d9534f;
2275
- border-color: #d43f3a;
2276
  }
2277
- .btn-danger .badge {
2278
- color: #d9534f;
2279
- background-color: #fff;
2280
  }
2281
- .btn-link {
2282
- font-weight: normal;
2283
- color: #428bca;
2284
- cursor: pointer;
2285
- border-radius: 0;
2286
  }
2287
- .btn-link,
2288
- .btn-link:active,
2289
- .btn-link[disabled],
2290
- fieldset[disabled] .btn-link {
2291
- background-color: transparent;
2292
- -webkit-box-shadow: none;
2293
- box-shadow: none;
2294
  }
2295
- .btn-link,
2296
- .btn-link:hover,
2297
- .btn-link:focus,
2298
- .btn-link:active {
2299
- border-color: transparent;
2300
  }
2301
- .btn-link:hover,
2302
- .btn-link:focus {
2303
- color: #2a6496;
2304
- text-decoration: underline;
2305
- background-color: transparent;
2306
  }
2307
- .btn-link[disabled]:hover,
2308
- fieldset[disabled] .btn-link:hover,
2309
- .btn-link[disabled]:focus,
2310
- fieldset[disabled] .btn-link:focus {
2311
- color: #999;
2312
- text-decoration: none;
2313
  }
2314
- .btn-lg {
2315
- padding: 10px 16px;
2316
- font-size: 18px;
2317
- line-height: 1.33;
2318
- border-radius: 6px;
2319
  }
2320
- .btn-sm {
2321
- padding: 5px 10px;
2322
- font-size: 12px;
2323
- line-height: 1.5;
2324
- border-radius: 3px;
2325
  }
2326
- .btn-xs {
2327
- padding: 1px 5px;
2328
- font-size: 12px;
2329
- line-height: 1.5;
2330
- border-radius: 3px;
2331
  }
2332
- .btn-block {
2333
- display: block;
2334
- width: 100%;
2335
- padding-right: 0;
2336
  padding-left: 0;
 
2337
  }
2338
- .btn-block + .btn-block {
2339
- margin-top: 5px;
2340
- }
2341
- input[type="submit"].btn-block,
2342
- input[type="reset"].btn-block,
2343
- input[type="button"].btn-block {
2344
- width: 100%;
2345
  }
2346
- .fade {
2347
- opacity: 0;
2348
- -webkit-transition: opacity .15s linear;
2349
- transition: opacity .15s linear;
2350
  }
2351
- .fade.in {
2352
- opacity: 1;
 
2353
  }
2354
- .collapse {
2355
- display: none;
 
2356
  }
2357
- .collapse.in {
2358
- display: block;
2359
  }
2360
- .collapsing {
2361
- position: relative;
2362
- height: 0;
2363
- overflow: hidden;
2364
- -webkit-transition: height .35s ease;
2365
- transition: height .35s ease;
2366
  }
2367
- @font-face {
2368
- font-family: 'Glyphicons Halflings';
2369
-
2370
- src: url('../fonts/glyphicons-halflings-regular.eot');
2371
- src: url('../fonts/glyphicons-halflings-regular.eot?#iefix') format('embedded-opentype'), url('../fonts/glyphicons-halflings-regular.woff') format('woff'), url('../fonts/glyphicons-halflings-regular.ttf') format('truetype'), url('../fonts/glyphicons-halflings-regular.svg#glyphicons_halflingsregular') format('svg');
 
 
 
 
 
 
 
 
2372
  }
2373
- .glyphicon {
2374
- position: relative;
2375
- top: 1px;
2376
- display: inline-block;
2377
- font-family: 'Glyphicons Halflings';
2378
- font-style: normal;
2379
- font-weight: normal;
2380
- line-height: 1;
2381
-
2382
- -webkit-font-smoothing: antialiased;
2383
- -moz-osx-font-smoothing: grayscale;
2384
  }
2385
- .glyphicon-asterisk:before {
2386
- content: "\2a";
 
2387
  }
2388
- .glyphicon-plus:before {
2389
- content: "\2b";
 
 
 
2390
  }
2391
- .glyphicon-euro:before {
2392
- content: "\20ac";
 
 
2393
  }
2394
- .glyphicon-minus:before {
2395
- content: "\2212";
 
 
 
 
 
2396
  }
2397
- .glyphicon-cloud:before {
2398
- content: "\2601";
 
 
2399
  }
2400
- .glyphicon-envelope:before {
2401
- content: "\2709";
 
 
 
 
 
2402
  }
2403
- .glyphicon-pencil:before {
2404
- content: "\270f";
 
 
 
 
 
2405
  }
2406
- .glyphicon-glass:before {
2407
- content: "\e001";
 
 
 
 
 
2408
  }
2409
- .glyphicon-music:before {
2410
- content: "\e002";
 
2411
  }
2412
- .glyphicon-search:before {
2413
- content: "\e003";
 
 
2414
  }
2415
- .glyphicon-heart:before {
2416
- content: "\e005";
 
 
 
2417
  }
2418
- .glyphicon-star:before {
2419
- content: "\e006";
 
 
 
 
2420
  }
2421
- .glyphicon-star-empty:before {
2422
- content: "\e007";
 
 
 
 
 
 
2423
  }
2424
- .glyphicon-user:before {
2425
- content: "\e008";
 
 
 
2426
  }
2427
- .glyphicon-film:before {
2428
- content: "\e009";
 
 
 
 
 
 
 
 
 
 
2429
  }
2430
- .glyphicon-th-large:before {
2431
- content: "\e010";
 
 
 
 
 
2432
  }
2433
- .glyphicon-th:before {
2434
- content: "\e011";
 
2435
  }
2436
- .glyphicon-th-list:before {
2437
- content: "\e012";
 
 
 
2438
  }
2439
- .glyphicon-ok:before {
2440
- content: "\e013";
 
 
2441
  }
2442
- .glyphicon-remove:before {
2443
- content: "\e014";
 
 
2444
  }
2445
- .glyphicon-zoom-in:before {
2446
- content: "\e015";
 
 
2447
  }
2448
- .glyphicon-zoom-out:before {
2449
- content: "\e016";
 
 
 
2450
  }
2451
- .glyphicon-off:before {
2452
- content: "\e017";
 
2453
  }
2454
- .glyphicon-signal:before {
2455
- content: "\e018";
 
 
 
2456
  }
2457
- .glyphicon-cog:before {
2458
- content: "\e019";
2459
  }
2460
- .glyphicon-trash:before {
2461
- content: "\e020";
2462
  }
2463
- .glyphicon-home:before {
2464
- content: "\e021";
2465
  }
2466
- .glyphicon-file:before {
2467
- content: "\e022";
2468
  }
2469
- .glyphicon-time:before {
2470
- content: "\e023";
2471
  }
2472
- .glyphicon-road:before {
2473
- content: "\e024";
2474
  }
2475
- .glyphicon-download-alt:before {
2476
- content: "\e025";
2477
  }
2478
- .glyphicon-download:before {
2479
- content: "\e026";
2480
  }
2481
- .glyphicon-upload:before {
2482
- content: "\e027";
2483
  }
2484
- .glyphicon-inbox:before {
2485
- content: "\e028";
2486
  }
2487
- .glyphicon-play-circle:before {
2488
- content: "\e029";
2489
  }
2490
- .glyphicon-repeat:before {
2491
- content: "\e030";
2492
  }
2493
- .glyphicon-refresh:before {
2494
- content: "\e031";
2495
  }
2496
- .glyphicon-list-alt:before {
2497
- content: "\e032";
2498
  }
2499
- .glyphicon-lock:before {
2500
- content: "\e033";
2501
  }
2502
- .glyphicon-flag:before {
2503
- content: "\e034";
2504
  }
2505
- .glyphicon-headphones:before {
2506
- content: "\e035";
2507
  }
2508
- .glyphicon-volume-off:before {
2509
- content: "\e036";
2510
  }
2511
- .glyphicon-volume-down:before {
2512
- content: "\e037";
2513
  }
2514
- .glyphicon-volume-up:before {
2515
- content: "\e038";
2516
  }
2517
- .glyphicon-qrcode:before {
2518
- content: "\e039";
2519
  }
2520
- .glyphicon-barcode:before {
2521
- content: "\e040";
2522
  }
2523
- .glyphicon-tag:before {
2524
- content: "\e041";
2525
  }
2526
- .glyphicon-tags:before {
2527
- content: "\e042";
2528
  }
2529
- .glyphicon-book:before {
2530
- content: "\e043";
2531
  }
2532
- .glyphicon-bookmark:before {
2533
- content: "\e044";
2534
  }
2535
- .glyphicon-print:before {
2536
- content: "\e045";
2537
  }
2538
- .glyphicon-camera:before {
2539
- content: "\e046";
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
2540
  }
2541
- .glyphicon-font:before {
2542
- content: "\e047";
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
2543
  }
2544
- .glyphicon-bold:before {
2545
- content: "\e048";
2546
  }
2547
- .glyphicon-italic:before {
2548
- content: "\e049";
2549
  }
2550
- .glyphicon-text-height:before {
2551
- content: "\e050";
 
 
2552
  }
2553
- .glyphicon-text-width:before {
2554
- content: "\e051";
 
 
 
 
 
 
 
 
2555
  }
2556
- .glyphicon-align-left:before {
2557
- content: "\e052";
 
2558
  }
2559
- .glyphicon-align-center:before {
2560
- content: "\e053";
 
 
 
 
 
2561
  }
2562
- .glyphicon-align-right:before {
2563
- content: "\e054";
2564
  }
2565
- .glyphicon-align-justify:before {
2566
- content: "\e055";
2567
  }
2568
- .glyphicon-list:before {
2569
- content: "\e056";
 
 
 
 
 
2570
  }
2571
- .glyphicon-indent-left:before {
2572
- content: "\e057";
2573
  }
2574
- .glyphicon-indent-right:before {
2575
- content: "\e058";
 
 
 
 
 
2576
  }
2577
- .glyphicon-facetime-video:before {
2578
- content: "\e059";
 
2579
  }
2580
- .glyphicon-picture:before {
2581
- content: "\e060";
 
2582
  }
2583
- .glyphicon-map-marker:before {
2584
- content: "\e062";
 
2585
  }
2586
- .glyphicon-adjust:before {
2587
- content: "\e063";
 
 
2588
  }
2589
- .glyphicon-tint:before {
2590
- content: "\e064";
 
 
 
2591
  }
2592
- .glyphicon-edit:before {
2593
- content: "\e065";
 
 
 
 
 
 
 
 
 
 
 
2594
  }
2595
- .glyphicon-share:before {
2596
- content: "\e066";
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
2597
  }
2598
- .glyphicon-check:before {
2599
- content: "\e067";
 
 
 
 
2600
  }
2601
- .glyphicon-move:before {
2602
- content: "\e068";
 
 
 
 
 
 
 
 
 
 
 
2603
  }
2604
- .glyphicon-step-backward:before {
2605
- content: "\e069";
 
 
 
 
2606
  }
2607
- .glyphicon-fast-backward:before {
2608
- content: "\e070";
 
 
 
 
 
 
 
 
 
 
 
2609
  }
2610
- .glyphicon-backward:before {
2611
- content: "\e071";
 
 
 
 
2612
  }
2613
- .glyphicon-play:before {
2614
- content: "\e072";
 
 
 
 
 
 
 
 
 
 
 
2615
  }
2616
- .glyphicon-pause:before {
2617
- content: "\e073";
 
 
 
 
2618
  }
2619
- .glyphicon-stop:before {
2620
- content: "\e074";
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
2621
  }
2622
- .glyphicon-forward:before {
2623
- content: "\e075";
 
 
 
2624
  }
2625
- .glyphicon-fast-forward:before {
2626
- content: "\e076";
 
 
 
 
 
 
 
 
2627
  }
2628
- .glyphicon-step-forward:before {
2629
- content: "\e077";
 
 
 
2630
  }
2631
- .glyphicon-eject:before {
2632
- content: "\e078";
 
 
2633
  }
2634
- .glyphicon-chevron-left:before {
2635
- content: "\e079";
 
 
 
2636
  }
2637
- .glyphicon-chevron-right:before {
2638
- content: "\e080";
2639
  }
2640
- .glyphicon-plus-sign:before {
2641
- content: "\e081";
 
2642
  }
2643
- .glyphicon-minus-sign:before {
2644
- content: "\e082";
 
2645
  }
2646
- .glyphicon-remove-sign:before {
2647
- content: "\e083";
 
 
 
 
2648
  }
2649
- .glyphicon-ok-sign:before {
2650
- content: "\e084";
 
 
 
 
2651
  }
2652
- .glyphicon-question-sign:before {
2653
- content: "\e085";
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
2654
  }
2655
- .glyphicon-info-sign:before {
2656
- content: "\e086";
 
 
 
2657
  }
2658
- .glyphicon-screenshot:before {
2659
- content: "\e087";
 
2660
  }
2661
- .glyphicon-remove-circle:before {
2662
- content: "\e088";
2663
  }
2664
- .glyphicon-ok-circle:before {
2665
- content: "\e089";
2666
  }
2667
- .glyphicon-ban-circle:before {
2668
- content: "\e090";
 
 
 
 
2669
  }
2670
- .glyphicon-arrow-left:before {
2671
- content: "\e091";
2672
  }
2673
- .glyphicon-arrow-right:before {
2674
- content: "\e092";
2675
  }
2676
- .glyphicon-arrow-up:before {
2677
- content: "\e093";
 
 
 
 
2678
  }
2679
- .glyphicon-arrow-down:before {
2680
- content: "\e094";
 
 
 
2681
  }
2682
- .glyphicon-share-alt:before {
2683
- content: "\e095";
 
 
 
2684
  }
2685
- .glyphicon-resize-full:before {
2686
- content: "\e096";
2687
  }
2688
- .glyphicon-resize-small:before {
2689
- content: "\e097";
 
 
 
 
 
2690
  }
2691
- .glyphicon-exclamation-sign:before {
2692
- content: "\e101";
 
 
 
 
2693
  }
2694
- .glyphicon-gift:before {
2695
- content: "\e102";
 
 
 
 
 
2696
  }
2697
- .glyphicon-leaf:before {
2698
- content: "\e103";
 
2699
  }
2700
- .glyphicon-fire:before {
2701
- content: "\e104";
 
 
 
 
 
 
2702
  }
2703
- .glyphicon-eye-open:before {
2704
- content: "\e105";
 
 
2705
  }
2706
- .glyphicon-eye-close:before {
2707
- content: "\e106";
 
 
 
 
 
2708
  }
2709
- .glyphicon-warning-sign:before {
2710
- content: "\e107";
 
 
 
2711
  }
2712
- .glyphicon-plane:before {
2713
- content: "\e108";
 
 
 
2714
  }
2715
- .glyphicon-calendar:before {
2716
- content: "\e109";
 
 
2717
  }
2718
- .glyphicon-random:before {
2719
- content: "\e110";
 
 
2720
  }
2721
- .glyphicon-comment:before {
2722
- content: "\e111";
 
 
 
 
 
2723
  }
2724
- .glyphicon-magnet:before {
2725
- content: "\e112";
 
2726
  }
2727
- .glyphicon-chevron-up:before {
2728
- content: "\e113";
 
2729
  }
2730
- .glyphicon-chevron-down:before {
2731
- content: "\e114";
 
 
 
 
 
2732
  }
2733
- .glyphicon-retweet:before {
2734
- content: "\e115";
 
2735
  }
2736
- .glyphicon-shopping-cart:before {
2737
- content: "\e116";
 
2738
  }
2739
- .glyphicon-folder-close:before {
2740
- content: "\e117";
2741
  }
2742
- .glyphicon-folder-open:before {
2743
- content: "\e118";
2744
  }
2745
- .glyphicon-resize-vertical:before {
2746
- content: "\e119";
 
 
 
 
 
 
 
 
2747
  }
2748
- .glyphicon-resize-horizontal:before {
2749
- content: "\e120";
 
 
2750
  }
2751
- .glyphicon-hdd:before {
2752
- content: "\e121";
 
 
2753
  }
2754
- .glyphicon-bullhorn:before {
2755
- content: "\e122";
 
 
 
 
 
2756
  }
2757
- .glyphicon-bell:before {
2758
- content: "\e123";
 
 
2759
  }
2760
- .glyphicon-certificate:before {
2761
- content: "\e124";
 
 
2762
  }
2763
- .glyphicon-thumbs-up:before {
2764
- content: "\e125";
 
 
2765
  }
2766
- .glyphicon-thumbs-down:before {
2767
- content: "\e126";
2768
  }
2769
- .glyphicon-hand-right:before {
2770
- content: "\e127";
 
 
 
 
 
2771
  }
2772
- .glyphicon-hand-left:before {
2773
- content: "\e128";
 
 
2774
  }
2775
- .glyphicon-hand-up:before {
2776
- content: "\e129";
 
 
2777
  }
2778
- .glyphicon-hand-down:before {
2779
- content: "\e130";
 
 
2780
  }
2781
- .glyphicon-circle-arrow-right:before {
2782
- content: "\e131";
2783
  }
2784
- .glyphicon-circle-arrow-left:before {
2785
- content: "\e132";
 
 
 
 
 
2786
  }
2787
- .glyphicon-circle-arrow-up:before {
2788
- content: "\e133";
 
 
2789
  }
2790
- .glyphicon-circle-arrow-down:before {
2791
- content: "\e134";
 
 
2792
  }
2793
- .glyphicon-globe:before {
2794
- content: "\e135";
 
 
2795
  }
2796
- .glyphicon-wrench:before {
2797
- content: "\e136";
2798
  }
2799
- .glyphicon-tasks:before {
2800
- content: "\e137";
2801
  }
2802
- .glyphicon-filter:before {
2803
- content: "\e138";
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
2804
  }
2805
- .glyphicon-briefcase:before {
2806
- content: "\e139";
 
 
 
 
 
2807
  }
2808
- .glyphicon-fullscreen:before {
2809
- content: "\e140";
 
2810
  }
2811
- .glyphicon-dashboard:before {
2812
- content: "\e141";
 
2813
  }
2814
- .glyphicon-paperclip:before {
2815
- content: "\e142";
 
 
 
 
2816
  }
2817
- .glyphicon-heart-empty:before {
2818
- content: "\e143";
 
2819
  }
2820
- .glyphicon-link:before {
2821
- content: "\e144";
 
 
2822
  }
2823
- .glyphicon-phone:before {
2824
- content: "\e145";
 
 
2825
  }
2826
- .glyphicon-pushpin:before {
2827
- content: "\e146";
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
2828
  }
2829
- .glyphicon-usd:before {
2830
- content: "\e148";
 
 
 
 
2831
  }
2832
- .glyphicon-gbp:before {
2833
- content: "\e149";
 
 
2834
  }
2835
- .glyphicon-sort:before {
2836
- content: "\e150";
 
 
 
 
2837
  }
2838
- .glyphicon-sort-by-alphabet:before {
2839
- content: "\e151";
 
 
 
 
 
 
 
2840
  }
2841
- .glyphicon-sort-by-alphabet-alt:before {
2842
- content: "\e152";
 
 
2843
  }
2844
- .glyphicon-sort-by-order:before {
2845
- content: "\e153";
 
 
 
 
 
 
2846
  }
2847
- .glyphicon-sort-by-order-alt:before {
2848
- content: "\e154";
 
 
2849
  }
2850
- .glyphicon-sort-by-attributes:before {
2851
- content: "\e155";
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
2852
  }
2853
- .glyphicon-sort-by-attributes-alt:before {
2854
- content: "\e156";
 
2855
  }
2856
- .glyphicon-unchecked:before {
2857
- content: "\e157";
 
 
2858
  }
2859
- .glyphicon-expand:before {
2860
- content: "\e158";
 
 
 
 
 
 
2861
  }
2862
- .glyphicon-collapse-down:before {
2863
- content: "\e159";
 
 
2864
  }
2865
- .glyphicon-collapse-up:before {
2866
- content: "\e160";
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
2867
  }
2868
- .glyphicon-log-in:before {
2869
- content: "\e161";
 
2870
  }
2871
- .glyphicon-flash:before {
2872
- content: "\e162";
 
 
2873
  }
2874
- .glyphicon-log-out:before {
2875
- content: "\e163";
 
 
 
 
 
 
2876
  }
2877
- .glyphicon-new-window:before {
2878
- content: "\e164";
 
 
2879
  }
2880
- .glyphicon-record:before {
2881
- content: "\e165";
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
2882
  }
2883
- .glyphicon-save:before {
2884
- content: "\e166";
 
2885
  }
2886
- .glyphicon-open:before {
2887
- content: "\e167";
 
 
2888
  }
2889
- .glyphicon-saved:before {
2890
- content: "\e168";
 
 
 
 
 
 
2891
  }
2892
- .glyphicon-import:before {
2893
- content: "\e169";
 
 
2894
  }
2895
- .glyphicon-export:before {
2896
- content: "\e170";
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
2897
  }
2898
- .glyphicon-send:before {
2899
- content: "\e171";
 
2900
  }
2901
- .glyphicon-floppy-disk:before {
2902
- content: "\e172";
 
 
2903
  }
2904
- .glyphicon-floppy-saved:before {
2905
- content: "\e173";
 
 
 
 
 
 
2906
  }
2907
- .glyphicon-floppy-remove:before {
2908
- content: "\e174";
 
 
2909
  }
2910
- .glyphicon-floppy-save:before {
2911
- content: "\e175";
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
2912
  }
2913
- .glyphicon-floppy-open:before {
2914
- content: "\e176";
 
2915
  }
2916
- .glyphicon-credit-card:before {
2917
- content: "\e177";
 
 
2918
  }
2919
- .glyphicon-transfer:before {
2920
- content: "\e178";
 
 
 
 
 
 
2921
  }
2922
- .glyphicon-cutlery:before {
2923
- content: "\e179";
 
 
2924
  }
2925
- .glyphicon-header:before {
2926
- content: "\e180";
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
2927
  }
2928
- .glyphicon-compressed:before {
2929
- content: "\e181";
 
2930
  }
2931
- .glyphicon-earphone:before {
2932
- content: "\e182";
 
 
 
2933
  }
2934
- .glyphicon-phone-alt:before {
2935
- content: "\e183";
 
 
 
 
 
2936
  }
2937
- .glyphicon-tower:before {
2938
- content: "\e184";
 
 
 
2939
  }
2940
- .glyphicon-stats:before {
2941
- content: "\e185";
 
 
 
2942
  }
2943
- .glyphicon-sd-video:before {
2944
- content: "\e186";
 
 
 
 
2945
  }
2946
- .glyphicon-hd-video:before {
2947
- content: "\e187";
 
 
 
 
2948
  }
2949
- .glyphicon-subtitles:before {
2950
- content: "\e188";
 
 
 
 
2951
  }
2952
- .glyphicon-sound-stereo:before {
2953
- content: "\e189";
 
 
 
 
2954
  }
2955
- .glyphicon-sound-dolby:before {
2956
- content: "\e190";
 
2957
  }
2958
- .glyphicon-sound-5-1:before {
2959
- content: "\e191";
2960
  }
2961
- .glyphicon-sound-6-1:before {
2962
- content: "\e192";
 
 
2963
  }
2964
- .glyphicon-sound-7-1:before {
2965
- content: "\e193";
 
 
 
2966
  }
2967
- .glyphicon-copyright-mark:before {
2968
- content: "\e194";
2969
  }
2970
- .glyphicon-registration-mark:before {
2971
- content: "\e195";
2972
  }
2973
- .glyphicon-cloud-download:before {
2974
- content: "\e197";
2975
  }
2976
- .glyphicon-cloud-upload:before {
2977
- content: "\e198";
2978
  }
2979
- .glyphicon-tree-conifer:before {
2980
- content: "\e199";
2981
  }
2982
- .glyphicon-tree-deciduous:before {
2983
- content: "\e200";
 
 
 
 
 
2984
  }
2985
  .caret {
2986
  display: inline-block;
@@ -3009,9 +3136,11 @@ input[type="button"].btn-block {
3009
  padding: 5px 0;
3010
  margin: 2px 0 0;
3011
  font-size: 14px;
 
3012
  list-style: none;
3013
  background-color: #fff;
3014
- background-clip: padding-box;
 
3015
  border: 1px solid #ccc;
3016
  border: 1px solid rgba(0, 0, 0, .15);
3017
  border-radius: 4px;
@@ -3033,7 +3162,7 @@ input[type="button"].btn-block {
3033
  padding: 3px 20px;
3034
  clear: both;
3035
  font-weight: normal;
3036
- line-height: 1.428571429;
3037
  color: #333;
3038
  white-space: nowrap;
3039
  }
@@ -3054,7 +3183,7 @@ input[type="button"].btn-block {
3054
  .dropdown-menu > .disabled > a,
3055
  .dropdown-menu > .disabled > a:hover,
3056
  .dropdown-menu > .disabled > a:focus {
3057
- color: #999;
3058
  }
3059
  .dropdown-menu > .disabled > a:hover,
3060
  .dropdown-menu > .disabled > a:focus {
@@ -3082,8 +3211,9 @@ input[type="button"].btn-block {
3082
  display: block;
3083
  padding: 3px 20px;
3084
  font-size: 12px;
3085
- line-height: 1.428571429;
3086
- color: #999;
 
3087
  }
3088
  .dropdown-backdrop {
3089
  position: fixed;
@@ -3142,7 +3272,7 @@ input[type="button"].btn-block {
3142
  }
3143
  .btn-group > .btn:focus,
3144
  .btn-group-vertical > .btn:focus {
3145
- outline: none;
3146
  }
3147
  .btn-group .btn + .btn,
3148
  .btn-group .btn + .btn-group,
@@ -3196,24 +3326,6 @@ input[type="button"].btn-block {
3196
  .btn-group.open .dropdown-toggle {
3197
  outline: 0;
3198
  }
3199
- .btn-group-xs > .btn {
3200
- padding: 1px 5px;
3201
- font-size: 12px;
3202
- line-height: 1.5;
3203
- border-radius: 3px;
3204
- }
3205
- .btn-group-sm > .btn {
3206
- padding: 5px 10px;
3207
- font-size: 12px;
3208
- line-height: 1.5;
3209
- border-radius: 3px;
3210
- }
3211
- .btn-group-lg > .btn {
3212
- padding: 10px 16px;
3213
- font-size: 18px;
3214
- line-height: 1.33;
3215
- border-radius: 6px;
3216
- }
3217
  .btn-group > .btn + .dropdown-toggle {
3218
  padding-right: 8px;
3219
  padding-left: 8px;
@@ -3298,9 +3410,15 @@ input[type="button"].btn-block {
3298
  .btn-group-justified > .btn-group .btn {
3299
  width: 100%;
3300
  }
 
 
 
3301
  [data-toggle="buttons"] > .btn > input[type="radio"],
3302
  [data-toggle="buttons"] > .btn > input[type="checkbox"] {
3303
- display: none;
 
 
 
3304
  }
3305
  .input-group {
3306
  position: relative;
@@ -3313,6 +3431,8 @@ input[type="button"].btn-block {
3313
  padding-left: 0;
3314
  }
3315
  .input-group .form-control {
 
 
3316
  float: left;
3317
  width: 100%;
3318
  margin-bottom: 0;
@@ -3474,11 +3594,11 @@ select[multiple].input-group-sm > .input-group-btn > .btn {
3474
  background-color: #eee;
3475
  }
3476
  .nav > li.disabled > a {
3477
- color: #999;
3478
  }
3479
  .nav > li.disabled > a:hover,
3480
  .nav > li.disabled > a:focus {
3481
- color: #999;
3482
  text-decoration: none;
3483
  cursor: not-allowed;
3484
  background-color: transparent;
@@ -3507,7 +3627,7 @@ select[multiple].input-group-sm > .input-group-btn > .btn {
3507
  }
3508
  .nav-tabs > li > a {
3509
  margin-right: 2px;
3510
- line-height: 1.428571429;
3511
  border: 1px solid transparent;
3512
  border-radius: 4px 4px 0 0;
3513
  }
@@ -3663,13 +3783,13 @@ select[multiple].input-group-sm > .input-group-btn > .btn {
3663
  }
3664
  }
3665
  .navbar-collapse {
3666
- max-height: 340px;
3667
  padding-right: 15px;
3668
  padding-left: 15px;
3669
  overflow-x: visible;
3670
  -webkit-overflow-scrolling: touch;
3671
  border-top: 1px solid transparent;
3672
- box-shadow: inset 0 1px 0 rgba(255, 255, 255, .1);
 
3673
  }
3674
  .navbar-collapse.in {
3675
  overflow-y: auto;
@@ -3678,7 +3798,8 @@ select[multiple].input-group-sm > .input-group-btn > .btn {
3678
  .navbar-collapse {
3679
  width: auto;
3680
  border-top: 0;
3681
- box-shadow: none;
 
3682
  }
3683
  .navbar-collapse.collapse {
3684
  display: block !important;
@@ -3696,6 +3817,16 @@ select[multiple].input-group-sm > .input-group-btn > .btn {
3696
  padding-left: 0;
3697
  }
3698
  }
 
 
 
 
 
 
 
 
 
 
3699
  .container > .navbar-header,
3700
  .container-fluid > .navbar-header,
3701
  .container > .navbar-collapse,
@@ -3727,6 +3858,9 @@ select[multiple].input-group-sm > .input-group-btn > .btn {
3727
  right: 0;
3728
  left: 0;
3729
  z-index: 1030;
 
 
 
3730
  }
3731
  @media (min-width: 768px) {
3732
  .navbar-fixed-top,
@@ -3745,7 +3879,7 @@ select[multiple].input-group-sm > .input-group-btn > .btn {
3745
  }
3746
  .navbar-brand {
3747
  float: left;
3748
- height: 20px;
3749
  padding: 15px 15px;
3750
  font-size: 18px;
3751
  line-height: 20px;
@@ -3773,7 +3907,7 @@ select[multiple].input-group-sm > .input-group-btn > .btn {
3773
  border-radius: 4px;
3774
  }
3775
  .navbar-toggle:focus {
3776
- outline: none;
3777
  }
3778
  .navbar-toggle .icon-bar {
3779
  display: block;
@@ -3805,7 +3939,8 @@ select[multiple].input-group-sm > .input-group-btn > .btn {
3805
  margin-top: 0;
3806
  background-color: transparent;
3807
  border: 0;
3808
- box-shadow: none;
 
3809
  }
3810
  .navbar-nav .open .dropdown-menu > li > a,
3811
  .navbar-nav .open .dropdown-menu .dropdown-header {
@@ -3865,6 +4000,18 @@ select[multiple].input-group-sm > .input-group-btn > .btn {
3865
  width: auto;
3866
  vertical-align: middle;
3867
  }
 
 
 
 
 
 
 
 
 
 
 
 
3868
  .navbar-form .control-label {
3869
  margin-bottom: 0;
3870
  vertical-align: middle;
@@ -3872,14 +4019,17 @@ select[multiple].input-group-sm > .input-group-btn > .btn {
3872
  .navbar-form .radio,
3873
  .navbar-form .checkbox {
3874
  display: inline-block;
3875
- padding-left: 0;
3876
  margin-top: 0;
3877
  margin-bottom: 0;
3878
  vertical-align: middle;
3879
  }
 
 
 
 
3880
  .navbar-form .radio input[type="radio"],
3881
  .navbar-form .checkbox input[type="checkbox"] {
3882
- float: none;
3883
  margin-left: 0;
3884
  }
3885
  .navbar-form .has-feedback .form-control-feedback {
@@ -4024,12 +4174,25 @@ select[multiple].input-group-sm > .input-group-btn > .btn {
4024
  .navbar-default .navbar-link:hover {
4025
  color: #333;
4026
  }
 
 
 
 
 
 
 
 
 
 
 
 
 
4027
  .navbar-inverse {
4028
  background-color: #222;
4029
  border-color: #080808;
4030
  }
4031
  .navbar-inverse .navbar-brand {
4032
- color: #999;
4033
  }
4034
  .navbar-inverse .navbar-brand:hover,
4035
  .navbar-inverse .navbar-brand:focus {
@@ -4037,10 +4200,10 @@ select[multiple].input-group-sm > .input-group-btn > .btn {
4037
  background-color: transparent;
4038
  }
4039
  .navbar-inverse .navbar-text {
4040
- color: #999;
4041
  }
4042
  .navbar-inverse .navbar-nav > li > a {
4043
- color: #999;
4044
  }
4045
  .navbar-inverse .navbar-nav > li > a:hover,
4046
  .navbar-inverse .navbar-nav > li > a:focus {
@@ -4087,7 +4250,7 @@ select[multiple].input-group-sm > .input-group-btn > .btn {
4087
  background-color: #080808;
4088
  }
4089
  .navbar-inverse .navbar-nav .open .dropdown-menu > li > a {
4090
- color: #999;
4091
  }
4092
  .navbar-inverse .navbar-nav .open .dropdown-menu > li > a:hover,
4093
  .navbar-inverse .navbar-nav .open .dropdown-menu > li > a:focus {
@@ -4108,11 +4271,24 @@ select[multiple].input-group-sm > .input-group-btn > .btn {
4108
  }
4109
  }
4110
  .navbar-inverse .navbar-link {
4111
- color: #999;
4112
  }
4113
  .navbar-inverse .navbar-link:hover {
4114
  color: #fff;
4115
  }
 
 
 
 
 
 
 
 
 
 
 
 
 
4116
  .breadcrumb {
4117
  padding: 8px 15px;
4118
  margin-bottom: 20px;
@@ -4129,7 +4305,7 @@ select[multiple].input-group-sm > .input-group-btn > .btn {
4129
  content: "/\00a0";
4130
  }
4131
  .breadcrumb > .active {
4132
- color: #999;
4133
  }
4134
  .pagination {
4135
  display: inline-block;
@@ -4146,7 +4322,7 @@ select[multiple].input-group-sm > .input-group-btn > .btn {
4146
  float: left;
4147
  padding: 6px 12px;
4148
  margin-left: -1px;
4149
- line-height: 1.428571429;
4150
  color: #428bca;
4151
  text-decoration: none;
4152
  background-color: #fff;
@@ -4189,7 +4365,7 @@ select[multiple].input-group-sm > .input-group-btn > .btn {
4189
  .pagination > .disabled > a,
4190
  .pagination > .disabled > a:hover,
4191
  .pagination > .disabled > a:focus {
4192
- color: #999;
4193
  cursor: not-allowed;
4194
  background-color: #fff;
4195
  border-color: #ddd;
@@ -4258,7 +4434,7 @@ select[multiple].input-group-sm > .input-group-btn > .btn {
4258
  .pager .disabled > a:hover,
4259
  .pager .disabled > a:focus,
4260
  .pager .disabled > span {
4261
- color: #999;
4262
  cursor: not-allowed;
4263
  background-color: #fff;
4264
  }
@@ -4274,8 +4450,8 @@ select[multiple].input-group-sm > .input-group-btn > .btn {
4274
  vertical-align: baseline;
4275
  border-radius: .25em;
4276
  }
4277
- .label[href]:hover,
4278
- .label[href]:focus {
4279
  color: #fff;
4280
  text-decoration: none;
4281
  cursor: pointer;
@@ -4288,11 +4464,11 @@ select[multiple].input-group-sm > .input-group-btn > .btn {
4288
  top: -1px;
4289
  }
4290
  .label-default {
4291
- background-color: #999;
4292
  }
4293
  .label-default[href]:hover,
4294
  .label-default[href]:focus {
4295
- background-color: #808080;
4296
  }
4297
  .label-primary {
4298
  background-color: #428bca;
@@ -4340,7 +4516,7 @@ select[multiple].input-group-sm > .input-group-btn > .btn {
4340
  text-align: center;
4341
  white-space: nowrap;
4342
  vertical-align: baseline;
4343
- background-color: #999;
4344
  border-radius: 10px;
4345
  }
4346
  .badge:empty {
@@ -4383,6 +4559,9 @@ a.list-group-item.active > .badge,
4383
  font-size: 21px;
4384
  font-weight: 200;
4385
  }
 
 
 
4386
  .container .jumbotron {
4387
  border-radius: 6px;
4388
  }
@@ -4407,18 +4586,16 @@ a.list-group-item.active > .badge,
4407
  display: block;
4408
  padding: 4px;
4409
  margin-bottom: 20px;
4410
- line-height: 1.428571429;
4411
  background-color: #fff;
4412
  border: 1px solid #ddd;
4413
  border-radius: 4px;
4414
  -webkit-transition: all .2s ease-in-out;
 
4415
  transition: all .2s ease-in-out;
4416
  }
4417
  .thumbnail > img,
4418
  .thumbnail a > img {
4419
- display: block;
4420
- max-width: 100%;
4421
- height: auto;
4422
  margin-right: auto;
4423
  margin-left: auto;
4424
  }
@@ -4451,10 +4628,12 @@ a.thumbnail.active {
4451
  .alert > p + p {
4452
  margin-top: 5px;
4453
  }
4454
- .alert-dismissable {
 
4455
  padding-right: 35px;
4456
  }
4457
- .alert-dismissable .close {
 
4458
  position: relative;
4459
  top: -2px;
4460
  right: -21px;
@@ -4512,6 +4691,14 @@ a.thumbnail.active {
4512
  background-position: 0 0;
4513
  }
4514
  }
 
 
 
 
 
 
 
 
4515
  @keyframes progress-bar-stripes {
4516
  from {
4517
  background-position: 40px 0;
@@ -4541,22 +4728,41 @@ a.thumbnail.active {
4541
  -webkit-box-shadow: inset 0 -1px 0 rgba(0, 0, 0, .15);
4542
  box-shadow: inset 0 -1px 0 rgba(0, 0, 0, .15);
4543
  -webkit-transition: width .6s ease;
 
4544
  transition: width .6s ease;
4545
  }
4546
- .progress-striped .progress-bar {
 
4547
  background-image: -webkit-linear-gradient(45deg, rgba(255, 255, 255, .15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, .15) 50%, rgba(255, 255, 255, .15) 75%, transparent 75%, transparent);
 
4548
  background-image: linear-gradient(45deg, rgba(255, 255, 255, .15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, .15) 50%, rgba(255, 255, 255, .15) 75%, transparent 75%, transparent);
4549
- background-size: 40px 40px;
 
4550
  }
4551
- .progress.active .progress-bar {
 
4552
  -webkit-animation: progress-bar-stripes 2s linear infinite;
 
4553
  animation: progress-bar-stripes 2s linear infinite;
4554
  }
 
 
 
 
 
 
 
 
 
 
 
 
4555
  .progress-bar-success {
4556
  background-color: #5cb85c;
4557
  }
4558
  .progress-striped .progress-bar-success {
4559
  background-image: -webkit-linear-gradient(45deg, rgba(255, 255, 255, .15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, .15) 50%, rgba(255, 255, 255, .15) 75%, transparent 75%, transparent);
 
4560
  background-image: linear-gradient(45deg, rgba(255, 255, 255, .15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, .15) 50%, rgba(255, 255, 255, .15) 75%, transparent 75%, transparent);
4561
  }
4562
  .progress-bar-info {
@@ -4564,6 +4770,7 @@ a.thumbnail.active {
4564
  }
4565
  .progress-striped .progress-bar-info {
4566
  background-image: -webkit-linear-gradient(45deg, rgba(255, 255, 255, .15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, .15) 50%, rgba(255, 255, 255, .15) 75%, transparent 75%, transparent);
 
4567
  background-image: linear-gradient(45deg, rgba(255, 255, 255, .15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, .15) 50%, rgba(255, 255, 255, .15) 75%, transparent 75%, transparent);
4568
  }
4569
  .progress-bar-warning {
@@ -4571,6 +4778,7 @@ a.thumbnail.active {
4571
  }
4572
  .progress-striped .progress-bar-warning {
4573
  background-image: -webkit-linear-gradient(45deg, rgba(255, 255, 255, .15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, .15) 50%, rgba(255, 255, 255, .15) 75%, transparent 75%, transparent);
 
4574
  background-image: linear-gradient(45deg, rgba(255, 255, 255, .15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, .15) 50%, rgba(255, 255, 255, .15) 75%, transparent 75%, transparent);
4575
  }
4576
  .progress-bar-danger {
@@ -4578,6 +4786,7 @@ a.thumbnail.active {
4578
  }
4579
  .progress-striped .progress-bar-danger {
4580
  background-image: -webkit-linear-gradient(45deg, rgba(255, 255, 255, .15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, .15) 50%, rgba(255, 255, 255, .15) 75%, transparent 75%, transparent);
 
4581
  background-image: linear-gradient(45deg, rgba(255, 255, 255, .15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, .15) 50%, rgba(255, 255, 255, .15) 75%, transparent 75%, transparent);
4582
  }
4583
  .media,
@@ -4643,25 +4852,48 @@ a.list-group-item .list-group-item-heading {
4643
  }
4644
  a.list-group-item:hover,
4645
  a.list-group-item:focus {
 
4646
  text-decoration: none;
4647
  background-color: #f5f5f5;
4648
  }
4649
- a.list-group-item.active,
4650
- a.list-group-item.active:hover,
4651
- a.list-group-item.active:focus {
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
4652
  z-index: 2;
4653
  color: #fff;
4654
  background-color: #428bca;
4655
  border-color: #428bca;
4656
  }
4657
- a.list-group-item.active .list-group-item-heading,
4658
- a.list-group-item.active:hover .list-group-item-heading,
4659
- a.list-group-item.active:focus .list-group-item-heading {
 
 
 
 
 
 
4660
  color: inherit;
4661
  }
4662
- a.list-group-item.active .list-group-item-text,
4663
- a.list-group-item.active:hover .list-group-item-text,
4664
- a.list-group-item.active:focus .list-group-item-text {
4665
  color: #e1edf7;
4666
  }
4667
  .list-group-item-success {
@@ -4771,6 +5003,31 @@ a.list-group-item-danger.active:focus {
4771
  .panel-body {
4772
  padding: 15px;
4773
  }
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
4774
  .panel > .list-group {
4775
  margin-bottom: 0;
4776
  }
@@ -4778,27 +5035,32 @@ a.list-group-item-danger.active:focus {
4778
  border-width: 1px 0;
4779
  border-radius: 0;
4780
  }
4781
- .panel > .list-group .list-group-item:first-child {
4782
- border-top: 0;
4783
- }
4784
- .panel > .list-group .list-group-item:last-child {
4785
- border-bottom: 0;
4786
- }
4787
  .panel > .list-group:first-child .list-group-item:first-child {
 
4788
  border-top-left-radius: 3px;
4789
  border-top-right-radius: 3px;
4790
  }
4791
  .panel > .list-group:last-child .list-group-item:last-child {
 
4792
  border-bottom-right-radius: 3px;
4793
  border-bottom-left-radius: 3px;
4794
  }
4795
  .panel-heading + .list-group .list-group-item:first-child {
4796
  border-top-width: 0;
4797
  }
 
 
 
4798
  .panel > .table,
4799
- .panel > .table-responsive > .table {
 
4800
  margin-bottom: 0;
4801
  }
 
 
 
 
 
4802
  .panel > .table:first-child > thead:first-child > tr:first-child td:first-child,
4803
  .panel > .table-responsive:first-child > .table:first-child > thead:first-child > tr:first-child td:first-child,
4804
  .panel > .table:first-child > tbody:first-child > tr:first-child td:first-child,
@@ -4819,6 +5081,11 @@ a.list-group-item-danger.active:focus {
4819
  .panel > .table-responsive:first-child > .table:first-child > tbody:first-child > tr:first-child th:last-child {
4820
  border-top-right-radius: 3px;
4821
  }
 
 
 
 
 
4822
  .panel > .table:last-child > tbody:last-child > tr:last-child td:first-child,
4823
  .panel > .table-responsive:last-child > .table:last-child > tbody:last-child > tr:last-child td:first-child,
4824
  .panel > .table:last-child > tfoot:last-child > tr:last-child td:first-child,
@@ -4879,69 +5146,35 @@ a.list-group-item-danger.active:focus {
4879
  .panel > .table-responsive > .table-bordered > tfoot > tr > td:last-child {
4880
  border-right: 0;
4881
  }
4882
- .panel > .table-bordered > thead > tr:first-child > th,
4883
- .panel > .table-responsive > .table-bordered > thead > tr:first-child > th,
4884
- .panel > .table-bordered > tbody > tr:first-child > th,
4885
- .panel > .table-responsive > .table-bordered > tbody > tr:first-child > th,
4886
- .panel > .table-bordered > tfoot > tr:first-child > th,
4887
- .panel > .table-responsive > .table-bordered > tfoot > tr:first-child > th,
4888
  .panel > .table-bordered > thead > tr:first-child > td,
4889
  .panel > .table-responsive > .table-bordered > thead > tr:first-child > td,
4890
  .panel > .table-bordered > tbody > tr:first-child > td,
4891
  .panel > .table-responsive > .table-bordered > tbody > tr:first-child > td,
4892
- .panel > .table-bordered > tfoot > tr:first-child > td,
4893
- .panel > .table-responsive > .table-bordered > tfoot > tr:first-child > td {
4894
- border-top: 0;
 
 
4895
  }
4896
- .panel > .table-bordered > thead > tr:last-child > th,
4897
- .panel > .table-responsive > .table-bordered > thead > tr:last-child > th,
4898
- .panel > .table-bordered > tbody > tr:last-child > th,
4899
- .panel > .table-responsive > .table-bordered > tbody > tr:last-child > th,
4900
- .panel > .table-bordered > tfoot > tr:last-child > th,
4901
- .panel > .table-responsive > .table-bordered > tfoot > tr:last-child > th,
4902
- .panel > .table-bordered > thead > tr:last-child > td,
4903
- .panel > .table-responsive > .table-bordered > thead > tr:last-child > td,
4904
  .panel > .table-bordered > tbody > tr:last-child > td,
4905
  .panel > .table-responsive > .table-bordered > tbody > tr:last-child > td,
4906
  .panel > .table-bordered > tfoot > tr:last-child > td,
4907
- .panel > .table-responsive > .table-bordered > tfoot > tr:last-child > td {
 
 
 
 
4908
  border-bottom: 0;
4909
  }
4910
  .panel > .table-responsive {
4911
  margin-bottom: 0;
4912
  border: 0;
4913
  }
4914
- .panel-heading {
4915
- padding: 10px 15px;
4916
- border-bottom: 1px solid transparent;
4917
- border-top-left-radius: 3px;
4918
- border-top-right-radius: 3px;
4919
- }
4920
- .panel-heading > .dropdown .dropdown-toggle {
4921
- color: inherit;
4922
- }
4923
- .panel-title {
4924
- margin-top: 0;
4925
- margin-bottom: 0;
4926
- font-size: 16px;
4927
- color: inherit;
4928
- }
4929
- .panel-title > a {
4930
- color: inherit;
4931
- }
4932
- .panel-footer {
4933
- padding: 10px 15px;
4934
- background-color: #f5f5f5;
4935
- border-top: 1px solid #ddd;
4936
- border-bottom-right-radius: 3px;
4937
- border-bottom-left-radius: 3px;
4938
- }
4939
  .panel-group {
4940
  margin-bottom: 20px;
4941
  }
4942
  .panel-group .panel {
4943
  margin-bottom: 0;
4944
- overflow: hidden;
4945
  border-radius: 4px;
4946
  }
4947
  .panel-group .panel + .panel {
@@ -4950,7 +5183,7 @@ a.list-group-item-danger.active:focus {
4950
  .panel-group .panel-heading {
4951
  border-bottom: 0;
4952
  }
4953
- .panel-group .panel-heading + .panel-collapse .panel-body {
4954
  border-top: 1px solid #ddd;
4955
  }
4956
  .panel-group .panel-footer {
@@ -4967,10 +5200,14 @@ a.list-group-item-danger.active:focus {
4967
  background-color: #f5f5f5;
4968
  border-color: #ddd;
4969
  }
4970
- .panel-default > .panel-heading + .panel-collapse .panel-body {
4971
  border-top-color: #ddd;
4972
  }
4973
- .panel-default > .panel-footer + .panel-collapse .panel-body {
 
 
 
 
4974
  border-bottom-color: #ddd;
4975
  }
4976
  .panel-primary {
@@ -4981,10 +5218,14 @@ a.list-group-item-danger.active:focus {
4981
  background-color: #428bca;
4982
  border-color: #428bca;
4983
  }
4984
- .panel-primary > .panel-heading + .panel-collapse .panel-body {
4985
  border-top-color: #428bca;
4986
  }
4987
- .panel-primary > .panel-footer + .panel-collapse .panel-body {
 
 
 
 
4988
  border-bottom-color: #428bca;
4989
  }
4990
  .panel-success {
@@ -4995,10 +5236,14 @@ a.list-group-item-danger.active:focus {
4995
  background-color: #dff0d8;
4996
  border-color: #d6e9c6;
4997
  }
4998
- .panel-success > .panel-heading + .panel-collapse .panel-body {
4999
  border-top-color: #d6e9c6;
5000
  }
5001
- .panel-success > .panel-footer + .panel-collapse .panel-body {
 
 
 
 
5002
  border-bottom-color: #d6e9c6;
5003
  }
5004
  .panel-info {
@@ -5009,10 +5254,14 @@ a.list-group-item-danger.active:focus {
5009
  background-color: #d9edf7;
5010
  border-color: #bce8f1;
5011
  }
5012
- .panel-info > .panel-heading + .panel-collapse .panel-body {
5013
  border-top-color: #bce8f1;
5014
  }
5015
- .panel-info > .panel-footer + .panel-collapse .panel-body {
 
 
 
 
5016
  border-bottom-color: #bce8f1;
5017
  }
5018
  .panel-warning {
@@ -5023,10 +5272,14 @@ a.list-group-item-danger.active:focus {
5023
  background-color: #fcf8e3;
5024
  border-color: #faebcc;
5025
  }
5026
- .panel-warning > .panel-heading + .panel-collapse .panel-body {
5027
  border-top-color: #faebcc;
5028
  }
5029
- .panel-warning > .panel-footer + .panel-collapse .panel-body {
 
 
 
 
5030
  border-bottom-color: #faebcc;
5031
  }
5032
  .panel-danger {
@@ -5037,12 +5290,41 @@ a.list-group-item-danger.active:focus {
5037
  background-color: #f2dede;
5038
  border-color: #ebccd1;
5039
  }
5040
- .panel-danger > .panel-heading + .panel-collapse .panel-body {
5041
  border-top-color: #ebccd1;
5042
  }
5043
- .panel-danger > .panel-footer + .panel-collapse .panel-body {
 
 
 
 
5044
  border-bottom-color: #ebccd1;
5045
  }
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
5046
  .well {
5047
  min-height: 20px;
5048
  padding: 19px;
@@ -5101,24 +5383,26 @@ button.close {
5101
  left: 0;
5102
  z-index: 1050;
5103
  display: none;
5104
- overflow: auto;
5105
- overflow-y: scroll;
5106
  -webkit-overflow-scrolling: touch;
5107
  outline: 0;
5108
  }
5109
  .modal.fade .modal-dialog {
5110
  -webkit-transition: -webkit-transform .3s ease-out;
5111
- -moz-transition: -moz-transform .3s ease-out;
5112
  -o-transition: -o-transform .3s ease-out;
5113
  transition: transform .3s ease-out;
5114
- -webkit-transform: translate(0, -25%);
5115
- -ms-transform: translate(0, -25%);
5116
- transform: translate(0, -25%);
5117
  }
5118
  .modal.in .modal-dialog {
5119
- -webkit-transform: translate(0, 0);
5120
- -ms-transform: translate(0, 0);
5121
- transform: translate(0, 0);
 
 
 
 
5122
  }
5123
  .modal-dialog {
5124
  position: relative;
@@ -5128,11 +5412,12 @@ button.close {
5128
  .modal-content {
5129
  position: relative;
5130
  background-color: #fff;
5131
- background-clip: padding-box;
 
5132
  border: 1px solid #999;
5133
  border: 1px solid rgba(0, 0, 0, .2);
5134
  border-radius: 6px;
5135
- outline: none;
5136
  -webkit-box-shadow: 0 3px 9px rgba(0, 0, 0, .5);
5137
  box-shadow: 0 3px 9px rgba(0, 0, 0, .5);
5138
  }
@@ -5154,7 +5439,7 @@ button.close {
5154
  opacity: .5;
5155
  }
5156
  .modal-header {
5157
- min-height: 16.428571429px;
5158
  padding: 15px;
5159
  border-bottom: 1px solid #e5e5e5;
5160
  }
@@ -5163,15 +5448,14 @@ button.close {
5163
  }
5164
  .modal-title {
5165
  margin: 0;
5166
- line-height: 1.428571429;
5167
  }
5168
  .modal-body {
5169
  position: relative;
5170
- padding: 20px;
5171
  }
5172
  .modal-footer {
5173
- padding: 19px 20px 20px;
5174
- margin-top: 15px;
5175
  text-align: right;
5176
  border-top: 1px solid #e5e5e5;
5177
  }
@@ -5185,6 +5469,13 @@ button.close {
5185
  .modal-footer .btn-block + .btn-block {
5186
  margin-left: 0;
5187
  }
 
 
 
 
 
 
 
5188
  @media (min-width: 768px) {
5189
  .modal-dialog {
5190
  width: 600px;
@@ -5197,13 +5488,15 @@ button.close {
5197
  .modal-sm {
5198
  width: 300px;
5199
  }
 
 
5200
  .modal-lg {
5201
  width: 900px;
5202
  }
5203
  }
5204
  .tooltip {
5205
  position: absolute;
5206
- z-index: 1030;
5207
  display: block;
5208
  font-size: 12px;
5209
  line-height: 1.4;
@@ -5303,14 +5596,15 @@ button.close {
5303
  position: absolute;
5304
  top: 0;
5305
  left: 0;
5306
- z-index: 1010;
5307
  display: none;
5308
  max-width: 276px;
5309
  padding: 1px;
5310
  text-align: left;
5311
  white-space: normal;
5312
  background-color: #fff;
5313
- background-clip: padding-box;
 
5314
  border: 1px solid #ccc;
5315
  border: 1px solid rgba(0, 0, 0, .2);
5316
  border-radius: 6px;
@@ -5342,8 +5636,8 @@ button.close {
5342
  .popover-content {
5343
  padding: 9px 14px;
5344
  }
5345
- .popover .arrow,
5346
- .popover .arrow:after {
5347
  position: absolute;
5348
  display: block;
5349
  width: 0;
@@ -5351,14 +5645,14 @@ button.close {
5351
  border-color: transparent;
5352
  border-style: solid;
5353
  }
5354
- .popover .arrow {
5355
  border-width: 11px;
5356
  }
5357
- .popover .arrow:after {
5358
  content: "";
5359
  border-width: 10px;
5360
  }
5361
- .popover.top .arrow {
5362
  bottom: -11px;
5363
  left: 50%;
5364
  margin-left: -11px;
@@ -5366,14 +5660,14 @@ button.close {
5366
  border-top-color: rgba(0, 0, 0, .25);
5367
  border-bottom-width: 0;
5368
  }
5369
- .popover.top .arrow:after {
5370
  bottom: 1px;
5371
  margin-left: -10px;
5372
  content: " ";
5373
  border-top-color: #fff;
5374
  border-bottom-width: 0;
5375
  }
5376
- .popover.right .arrow {
5377
  top: 50%;
5378
  left: -11px;
5379
  margin-top: -11px;
@@ -5381,14 +5675,14 @@ button.close {
5381
  border-right-color: rgba(0, 0, 0, .25);
5382
  border-left-width: 0;
5383
  }
5384
- .popover.right .arrow:after {
5385
  bottom: -10px;
5386
  left: 1px;
5387
  content: " ";
5388
  border-right-color: #fff;
5389
  border-left-width: 0;
5390
  }
5391
- .popover.bottom .arrow {
5392
  top: -11px;
5393
  left: 50%;
5394
  margin-left: -11px;
@@ -5396,14 +5690,14 @@ button.close {
5396
  border-bottom-color: #999;
5397
  border-bottom-color: rgba(0, 0, 0, .25);
5398
  }
5399
- .popover.bottom .arrow:after {
5400
  top: 1px;
5401
  margin-left: -10px;
5402
  content: " ";
5403
  border-top-width: 0;
5404
  border-bottom-color: #fff;
5405
  }
5406
- .popover.left .arrow {
5407
  top: 50%;
5408
  right: -11px;
5409
  margin-top: -11px;
@@ -5411,7 +5705,7 @@ button.close {
5411
  border-left-color: #999;
5412
  border-left-color: rgba(0, 0, 0, .25);
5413
  }
5414
- .popover.left .arrow:after {
5415
  right: 1px;
5416
  bottom: -10px;
5417
  content: " ";
@@ -5430,13 +5724,11 @@ button.close {
5430
  position: relative;
5431
  display: none;
5432
  -webkit-transition: .6s ease-in-out left;
 
5433
  transition: .6s ease-in-out left;
5434
  }
5435
  .carousel-inner > .item > img,
5436
  .carousel-inner > .item > a > img {
5437
- display: block;
5438
- max-width: 100%;
5439
- height: auto;
5440
  line-height: 1;
5441
  }
5442
  .carousel-inner > .active,
@@ -5483,7 +5775,9 @@ button.close {
5483
  opacity: .5;
5484
  }
5485
  .carousel-control.left {
5486
- background-image: -webkit-linear-gradient(left, color-stop(rgba(0, 0, 0, .5) 0%), color-stop(rgba(0, 0, 0, .0001) 100%));
 
 
5487
  background-image: linear-gradient(to right, rgba(0, 0, 0, .5) 0%, rgba(0, 0, 0, .0001) 100%);
5488
  filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#80000000', endColorstr='#00000000', GradientType=1);
5489
  background-repeat: repeat-x;
@@ -5491,7 +5785,9 @@ button.close {
5491
  .carousel-control.right {
5492
  right: 0;
5493
  left: auto;
5494
- background-image: -webkit-linear-gradient(left, color-stop(rgba(0, 0, 0, .0001) 0%), color-stop(rgba(0, 0, 0, .5) 100%));
 
 
5495
  background-image: linear-gradient(to right, rgba(0, 0, 0, .0001) 0%, rgba(0, 0, 0, .5) 100%);
5496
  filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#00000000', endColorstr='#80000000', GradientType=1);
5497
  background-repeat: repeat-x;
@@ -5501,7 +5797,7 @@ button.close {
5501
  color: #fff;
5502
  text-decoration: none;
5503
  filter: alpha(opacity=90);
5504
- outline: none;
5505
  opacity: .9;
5506
  }
5507
  .carousel-control .icon-prev,
@@ -5516,17 +5812,18 @@ button.close {
5516
  .carousel-control .icon-prev,
5517
  .carousel-control .glyphicon-chevron-left {
5518
  left: 50%;
 
5519
  }
5520
  .carousel-control .icon-next,
5521
  .carousel-control .glyphicon-chevron-right {
5522
  right: 50%;
 
5523
  }
5524
  .carousel-control .icon-prev,
5525
  .carousel-control .icon-next {
5526
  width: 20px;
5527
  height: 20px;
5528
  margin-top: -10px;
5529
- margin-left: -10px;
5530
  font-family: serif;
5531
  }
5532
  .carousel-control .icon-prev:before {
@@ -5580,16 +5877,23 @@ button.close {
5580
  text-shadow: none;
5581
  }
5582
  @media screen and (min-width: 768px) {
5583
- .carousel-control .glyphicons-chevron-left,
5584
- .carousel-control .glyphicons-chevron-right,
5585
  .carousel-control .icon-prev,
5586
  .carousel-control .icon-next {
5587
  width: 30px;
5588
  height: 30px;
5589
  margin-top: -15px;
5590
- margin-left: -15px;
5591
  font-size: 30px;
5592
  }
 
 
 
 
 
 
 
 
5593
  .carousel-caption {
5594
  right: 20%;
5595
  left: 20%;
@@ -5601,6 +5905,8 @@ button.close {
5601
  }
5602
  .clearfix:before,
5603
  .clearfix:after,
 
 
5604
  .container:before,
5605
  .container:after,
5606
  .container-fluid:before,
@@ -5631,6 +5937,7 @@ button.close {
5631
  content: " ";
5632
  }
5633
  .clearfix:after,
 
5634
  .container:after,
5635
  .container-fluid:after,
5636
  .row:after,
@@ -5679,14 +5986,31 @@ button.close {
5679
  }
5680
  .affix {
5681
  position: fixed;
 
 
 
5682
  }
5683
  @-ms-viewport {
5684
  width: device-width;
5685
  }
5686
  .visible-xs,
5687
- tr.visible-xs,
5688
- th.visible-xs,
5689
- td.visible-xs {
 
 
 
 
 
 
 
 
 
 
 
 
 
 
5690
  display: none !important;
5691
  }
5692
  @media (max-width: 767px) {
@@ -5704,11 +6028,20 @@ td.visible-xs {
5704
  display: table-cell !important;
5705
  }
5706
  }
5707
- .visible-sm,
5708
- tr.visible-sm,
5709
- th.visible-sm,
5710
- td.visible-sm {
5711
- display: none !important;
 
 
 
 
 
 
 
 
 
5712
  }
5713
  @media (min-width: 768px) and (max-width: 991px) {
5714
  .visible-sm {
@@ -5725,11 +6058,20 @@ td.visible-sm {
5725
  display: table-cell !important;
5726
  }
5727
  }
5728
- .visible-md,
5729
- tr.visible-md,
5730
- th.visible-md,
5731
- td.visible-md {
5732
- display: none !important;
 
 
 
 
 
 
 
 
 
5733
  }
5734
  @media (min-width: 992px) and (max-width: 1199px) {
5735
  .visible-md {
@@ -5746,11 +6088,20 @@ td.visible-md {
5746
  display: table-cell !important;
5747
  }
5748
  }
5749
- .visible-lg,
5750
- tr.visible-lg,
5751
- th.visible-lg,
5752
- td.visible-lg {
5753
- display: none !important;
 
 
 
 
 
 
 
 
 
5754
  }
5755
  @media (min-width: 1200px) {
5756
  .visible-lg {
@@ -5767,42 +6118,42 @@ td.visible-lg {
5767
  display: table-cell !important;
5768
  }
5769
  }
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
5770
  @media (max-width: 767px) {
5771
- .hidden-xs,
5772
- tr.hidden-xs,
5773
- th.hidden-xs,
5774
- td.hidden-xs {
5775
  display: none !important;
5776
  }
5777
  }
5778
  @media (min-width: 768px) and (max-width: 991px) {
5779
- .hidden-sm,
5780
- tr.hidden-sm,
5781
- th.hidden-sm,
5782
- td.hidden-sm {
5783
  display: none !important;
5784
  }
5785
  }
5786
  @media (min-width: 992px) and (max-width: 1199px) {
5787
- .hidden-md,
5788
- tr.hidden-md,
5789
- th.hidden-md,
5790
- td.hidden-md {
5791
  display: none !important;
5792
  }
5793
  }
5794
  @media (min-width: 1200px) {
5795
- .hidden-lg,
5796
- tr.hidden-lg,
5797
- th.hidden-lg,
5798
- td.hidden-lg {
5799
  display: none !important;
5800
  }
5801
  }
5802
- .visible-print,
5803
- tr.visible-print,
5804
- th.visible-print,
5805
- td.visible-print {
5806
  display: none !important;
5807
  }
5808
  @media print {
@@ -5820,11 +6171,32 @@ td.visible-print {
5820
  display: table-cell !important;
5821
  }
5822
  }
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
5823
  @media print {
5824
- .hidden-print,
5825
- tr.hidden-print,
5826
- th.hidden-print,
5827
- td.hidden-print {
5828
  display: none !important;
5829
  }
5830
  }
1
  /*!
2
+ * Bootstrap v3.2.0 (http://getbootstrap.com)
3
  * Copyright 2011-2014 Twitter, Inc.
4
  * Licensed under MIT (https://github.com/twbs/bootstrap/blob/master/LICENSE)
5
  */
6
 
7
+ /*! normalize.css v3.0.1 | MIT License | git.io/normalize */
8
  html {
9
  font-family: sans-serif;
10
  -webkit-text-size-adjust: 100%;
94
  }
95
  hr {
96
  height: 0;
97
+ -webkit-box-sizing: content-box;
98
+ -moz-box-sizing: content-box;
99
+ box-sizing: content-box;
100
  }
101
  pre {
102
  overflow: auto;
145
  }
146
  input[type="checkbox"],
147
  input[type="radio"] {
148
+ -webkit-box-sizing: border-box;
149
+ -moz-box-sizing: border-box;
150
+ box-sizing: border-box;
151
  padding: 0;
152
  }
153
  input[type="number"]::-webkit-inner-spin-button,
192
  color: #000 !important;
193
  text-shadow: none !important;
194
  background: transparent !important;
195
+ -webkit-box-shadow: none !important;
196
+ box-shadow: none !important;
197
  }
198
  a,
199
  a:visited {
260
  border: 1px solid #ddd !important;
261
  }
262
  }
263
+ @font-face {
264
+ font-family: 'Glyphicons Halflings';
265
+
266
+ src: url('../fonts/glyphicons-halflings-regular.eot');
267
+ src: url('../fonts/glyphicons-halflings-regular.eot?#iefix') format('embedded-opentype'), url('../fonts/glyphicons-halflings-regular.woff') format('woff'), url('../fonts/glyphicons-halflings-regular.ttf') format('truetype'), url('../fonts/glyphicons-halflings-regular.svg#glyphicons_halflingsregular') format('svg');
 
 
 
 
 
268
  }
269
+ .glyphicon {
270
+ position: relative;
271
+ top: 1px;
272
+ display: inline-block;
273
+ font-family: 'Glyphicons Halflings';
274
+ font-style: normal;
275
+ font-weight: normal;
276
+ line-height: 1;
277
 
278
+ -webkit-font-smoothing: antialiased;
279
+ -moz-osx-font-smoothing: grayscale;
280
  }
281
+ .glyphicon-asterisk:before {
282
+ content: "\2a";
 
 
 
 
283
  }
284
+ .glyphicon-plus:before {
285
+ content: "\2b";
 
 
 
 
 
286
  }
287
+ .glyphicon-euro:before {
288
+ content: "\20ac";
 
289
  }
290
+ .glyphicon-minus:before {
291
+ content: "\2212";
 
 
292
  }
293
+ .glyphicon-cloud:before {
294
+ content: "\2601";
 
 
295
  }
296
+ .glyphicon-envelope:before {
297
+ content: "\2709";
298
  }
299
+ .glyphicon-pencil:before {
300
+ content: "\270f";
301
  }
302
+ .glyphicon-glass:before {
303
+ content: "\e001";
 
 
304
  }
305
+ .glyphicon-music:before {
306
+ content: "\e002";
307
  }
308
+ .glyphicon-search:before {
309
+ content: "\e003";
 
 
 
 
 
 
 
 
 
310
  }
311
+ .glyphicon-heart:before {
312
+ content: "\e005";
313
  }
314
+ .glyphicon-star:before {
315
+ content: "\e006";
 
 
 
316
  }
317
+ .glyphicon-star-empty:before {
318
+ content: "\e007";
 
 
 
 
 
 
 
319
  }
320
+ .glyphicon-user:before {
321
+ content: "\e008";
 
 
 
 
 
 
 
 
 
 
 
 
 
 
322
  }
323
+ .glyphicon-film:before {
324
+ content: "\e009";
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
325
  }
326
+ .glyphicon-th-large:before {
327
+ content: "\e010";
 
 
 
 
 
 
328
  }
329
+ .glyphicon-th:before {
330
+ content: "\e011";
 
 
 
 
 
 
 
 
 
 
 
331
  }
332
+ .glyphicon-th-list:before {
333
+ content: "\e012";
 
 
 
 
 
 
334
  }
335
+ .glyphicon-ok:before {
336
+ content: "\e013";
 
 
 
 
 
 
 
 
 
 
 
337
  }
338
+ .glyphicon-remove:before {
339
+ content: "\e014";
 
340
  }
341
+ .glyphicon-zoom-in:before {
342
+ content: "\e015";
 
343
  }
344
+ .glyphicon-zoom-out:before {
345
+ content: "\e016";
 
346
  }
347
+ .glyphicon-off:before {
348
+ content: "\e017";
 
349
  }
350
+ .glyphicon-signal:before {
351
+ content: "\e018";
 
352
  }
353
+ .glyphicon-cog:before {
354
+ content: "\e019";
 
355
  }
356
+ .glyphicon-trash:before {
357
+ content: "\e020";
358
  }
359
+ .glyphicon-home:before {
360
+ content: "\e021";
 
 
 
361
  }
362
+ .glyphicon-file:before {
363
+ content: "\e022";
 
 
364
  }
365
+ .glyphicon-time:before {
366
+ content: "\e023";
 
367
  }
368
+ .glyphicon-road:before {
369
+ content: "\e024";
370
  }
371
+ .glyphicon-download-alt:before {
372
+ content: "\e025";
373
  }
374
+ .glyphicon-download:before {
375
+ content: "\e026";
376
  }
377
+ .glyphicon-upload:before {
378
+ content: "\e027";
379
  }
380
+ .glyphicon-inbox:before {
381
+ content: "\e028";
382
  }
383
+ .glyphicon-play-circle:before {
384
+ content: "\e029";
385
  }
386
+ .glyphicon-repeat:before {
387
+ content: "\e030";
388
  }
389
+ .glyphicon-refresh:before {
390
+ content: "\e031";
391
  }
392
+ .glyphicon-list-alt:before {
393
+ content: "\e032";
394
  }
395
+ .glyphicon-lock:before {
396
+ content: "\e033";
397
  }
398
+ .glyphicon-flag:before {
399
+ content: "\e034";
400
  }
401
+ .glyphicon-headphones:before {
402
+ content: "\e035";
403
  }
404
+ .glyphicon-volume-off:before {
405
+ content: "\e036";
406
  }
407
+ .glyphicon-volume-down:before {
408
+ content: "\e037";
409
  }
410
+ .glyphicon-volume-up:before {
411
+ content: "\e038";
412
  }
413
+ .glyphicon-qrcode:before {
414
+ content: "\e039";
415
  }
416
+ .glyphicon-barcode:before {
417
+ content: "\e040";
 
418
  }
419
+ .glyphicon-tag:before {
420
+ content: "\e041";
421
  }
422
+ .glyphicon-tags:before {
423
+ content: "\e042";
424
  }
425
+ .glyphicon-book:before {
426
+ content: "\e043";
427
  }
428
+ .glyphicon-bookmark:before {
429
+ content: "\e044";
430
  }
431
+ .glyphicon-print:before {
432
+ content: "\e045";
433
  }
434
+ .glyphicon-camera:before {
435
+ content: "\e046";
436
  }
437
+ .glyphicon-font:before {
438
+ content: "\e047";
439
  }
440
+ .glyphicon-bold:before {
441
+ content: "\e048";
442
  }
443
+ .glyphicon-italic:before {
444
+ content: "\e049";
445
  }
446
+ .glyphicon-text-height:before {
447
+ content: "\e050";
 
 
448
  }
449
+ .glyphicon-text-width:before {
450
+ content: "\e051";
 
 
451
  }
452
+ .glyphicon-align-left:before {
453
+ content: "\e052";
 
 
 
454
  }
455
+ .glyphicon-align-center:before {
456
+ content: "\e053";
 
457
  }
458
+ .glyphicon-align-right:before {
459
+ content: "\e054";
 
460
  }
461
+ .glyphicon-align-justify:before {
462
+ content: "\e055";
 
 
463
  }
464
+ .glyphicon-list:before {
465
+ content: "\e056";
466
  }
467
+ .glyphicon-indent-left:before {
468
+ content: "\e057";
 
469
  }
470
+ .glyphicon-indent-right:before {
471
+ content: "\e058";
 
472
  }
473
+ .glyphicon-facetime-video:before {
474
+ content: "\e059";
475
  }
476
+ .glyphicon-picture:before {
477
+ content: "\e060";
478
  }
479
+ .glyphicon-map-marker:before {
480
+ content: "\e062";
 
 
 
 
 
 
 
 
 
 
 
481
  }
482
+ .glyphicon-adjust:before {
483
+ content: "\e063";
 
 
484
  }
485
+ .glyphicon-tint:before {
486
+ content: "\e064";
 
487
  }
488
+ .glyphicon-edit:before {
489
+ content: "\e065";
 
 
 
490
  }
491
+ .glyphicon-share:before {
492
+ content: "\e066";
 
 
493
  }
494
+ .glyphicon-check:before {
495
+ content: "\e067";
 
 
 
 
 
496
  }
497
+ .glyphicon-move:before {
498
+ content: "\e068";
 
 
499
  }
500
+ .glyphicon-step-backward:before {
501
+ content: "\e069";
 
 
 
 
 
502
  }
503
+ .glyphicon-fast-backward:before {
504
+ content: "\e070";
 
 
 
 
 
505
  }
506
+ .glyphicon-backward:before {
507
+ content: "\e071";
 
 
 
 
 
508
  }
509
+ .glyphicon-play:before {
510
+ content: "\e072";
 
511
  }
512
+ .glyphicon-pause:before {
513
+ content: "\e073";
 
 
514
  }
515
+ .glyphicon-stop:before {
516
+ content: "\e074";
 
 
 
 
 
 
 
 
 
 
 
517
  }
518
+ .glyphicon-forward:before {
519
+ content: "\e075";
 
 
 
 
 
520
  }
521
+ .glyphicon-fast-forward:before {
522
+ content: "\e076";
 
 
 
 
 
 
 
 
 
 
523
  }
524
+ .glyphicon-step-forward:before {
525
+ content: "\e077";
 
 
 
 
 
526
  }
527
+ .glyphicon-eject:before {
528
+ content: "\e078";
 
529
  }
530
+ .glyphicon-chevron-left:before {
531
+ content: "\e079";
 
 
 
532
  }
533
+ .glyphicon-chevron-right:before {
534
+ content: "\e080";
 
 
535
  }
536
+ .glyphicon-plus-sign:before {
537
+ content: "\e081";
 
 
538
  }
539
+ .glyphicon-minus-sign:before {
540
+ content: "\e082";
 
 
541
  }
542
+ .glyphicon-remove-sign:before {
543
+ content: "\e083";
 
 
 
544
  }
545
+ .glyphicon-ok-sign:before {
546
+ content: "\e084";
 
547
  }
548
+ .glyphicon-question-sign:before {
549
+ content: "\e085";
 
 
 
550
  }
551
+ .glyphicon-info-sign:before {
552
+ content: "\e086";
553
  }
554
+ .glyphicon-screenshot:before {
555
+ content: "\e087";
556
  }
557
+ .glyphicon-remove-circle:before {
558
+ content: "\e088";
559
  }
560
+ .glyphicon-ok-circle:before {
561
+ content: "\e089";
562
  }
563
+ .glyphicon-ban-circle:before {
564
+ content: "\e090";
565
  }
566
+ .glyphicon-arrow-left:before {
567
+ content: "\e091";
568
  }
569
+ .glyphicon-arrow-right:before {
570
+ content: "\e092";
571
  }
572
+ .glyphicon-arrow-up:before {
573
+ content: "\e093";
574
  }
575
+ .glyphicon-arrow-down:before {
576
+ content: "\e094";
577
  }
578
+ .glyphicon-share-alt:before {
579
+ content: "\e095";
580
  }
581
+ .glyphicon-resize-full:before {
582
+ content: "\e096";
583
  }
584
+ .glyphicon-resize-small:before {
585
+ content: "\e097";
586
  }
587
+ .glyphicon-exclamation-sign:before {
588
+ content: "\e101";
589
  }
590
+ .glyphicon-gift:before {
591
+ content: "\e102";
592
  }
593
+ .glyphicon-leaf:before {
594
+ content: "\e103";
595
  }
596
+ .glyphicon-fire:before {
597
+ content: "\e104";
598
  }
599
+ .glyphicon-eye-open:before {
600
+ content: "\e105";
601
  }
602
+ .glyphicon-eye-close:before {
603
+ content: "\e106";
604
  }
605
+ .glyphicon-warning-sign:before {
606
+ content: "\e107";
607
  }
608
+ .glyphicon-plane:before {
609
+ content: "\e108";
610
  }
611
+ .glyphicon-calendar:before {
612
+ content: "\e109";
613
  }
614
+ .glyphicon-random:before {
615
+ content: "\e110";
616
  }
617
+ .glyphicon-comment:before {
618
+ content: "\e111";
619
  }
620
+ .glyphicon-magnet:before {
621
+ content: "\e112";
622
  }
623
+ .glyphicon-chevron-up:before {
624
+ content: "\e113";
625
  }
626
+ .glyphicon-chevron-down:before {
627
+ content: "\e114";
628
  }
629
+ .glyphicon-retweet:before {
630
+ content: "\e115";
631
  }
632
+ .glyphicon-shopping-cart:before {
633
+ content: "\e116";
634
  }
635
+ .glyphicon-folder-close:before {
636
+ content: "\e117";
637
  }
638
+ .glyphicon-folder-open:before {
639
+ content: "\e118";
640
  }
641
+ .glyphicon-resize-vertical:before {
642
+ content: "\e119";
643
  }
644
+ .glyphicon-resize-horizontal:before {
645
+ content: "\e120";
646
  }
647
+ .glyphicon-hdd:before {
648
+ content: "\e121";
649
  }
650
+ .glyphicon-bullhorn:before {
651
+ content: "\e122";
652
  }
653
+ .glyphicon-bell:before {
654
+ content: "\e123";
655
  }
656
+ .glyphicon-certificate:before {
657
+ content: "\e124";
658
  }
659
+ .glyphicon-thumbs-up:before {
660
+ content: "\e125";
661
  }
662
+ .glyphicon-thumbs-down:before {
663
+ content: "\e126";
664
  }
665
+ .glyphicon-hand-right:before {
666
+ content: "\e127";
667
  }
668
+ .glyphicon-hand-left:before {
669
+ content: "\e128";
670
  }
671
+ .glyphicon-hand-up:before {
672
+ content: "\e129";
673
  }
674
+ .glyphicon-hand-down:before {
675
+ content: "\e130";
676
  }
677
+ .glyphicon-circle-arrow-right:before {
678
+ content: "\e131";
679
  }
680
+ .glyphicon-circle-arrow-left:before {
681
+ content: "\e132";
682
  }
683
+ .glyphicon-circle-arrow-up:before {
684
+ content: "\e133";
685
  }
686
+ .glyphicon-circle-arrow-down:before {
687
+ content: "\e134";
688
  }
689
+ .glyphicon-globe:before {
690
+ content: "\e135";
691
  }
692
+ .glyphicon-wrench:before {
693
+ content: "\e136";
694
  }
695
+ .glyphicon-tasks:before {
696
+ content: "\e137";
697
  }
698
+ .glyphicon-filter:before {
699
+ content: "\e138";
700
  }
701
+ .glyphicon-briefcase:before {
702
+ content: "\e139";
703
  }
704
+ .glyphicon-fullscreen:before {
705
+ content: "\e140";
706
  }
707
+ .glyphicon-dashboard:before {
708
+ content: "\e141";
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
709
  }
710
+ .glyphicon-paperclip:before {
711
+ content: "\e142";
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
712
  }
713
+ .glyphicon-heart-empty:before {
714
+ content: "\e143";
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
715
  }
716
+ .glyphicon-link:before {
717
+ content: "\e144";
 
718
  }
719
+ .glyphicon-phone:before {
720
+ content: "\e145";
721
  }
722
+ .glyphicon-pushpin:before {
723
+ content: "\e146";
 
724
  }
725
+ .glyphicon-usd:before {
726
+ content: "\e148";
 
 
 
 
 
 
 
 
727
  }
728
+ .glyphicon-gbp:before {
729
+ content: "\e149";
 
730
  }
731
+ .glyphicon-sort:before {
732
+ content: "\e150";
 
 
 
 
 
733
  }
734
+ .glyphicon-sort-by-alphabet:before {
735
+ content: "\e151";
736
  }
737
+ .glyphicon-sort-by-alphabet-alt:before {
738
+ content: "\e152";
739
  }
740
+ .glyphicon-sort-by-order:before {
741
+ content: "\e153";
 
 
 
 
 
742
  }
743
+ .glyphicon-sort-by-order-alt:before {
744
+ content: "\e154";
745
  }
746
+ .glyphicon-sort-by-attributes:before {
747
+ content: "\e155";
 
 
 
 
 
748
  }
749
+ .glyphicon-sort-by-attributes-alt:before {
750
+ content: "\e156";
 
751
  }
752
+ .glyphicon-unchecked:before {
753
+ content: "\e157";
 
754
  }
755
+ .glyphicon-expand:before {
756
+ content: "\e158";
 
757
  }
758
+ .glyphicon-collapse-down:before {
759
+ content: "\e159";
 
 
760
  }
761
+ .glyphicon-collapse-up:before {
762
+ content: "\e160";
 
 
 
763
  }
764
+ .glyphicon-log-in:before {
765
+ content: "\e161";
 
 
 
 
 
 
 
 
 
 
 
766
  }
767
+ .glyphicon-flash:before {
768
+ content: "\e162";
 
 
 
769
  }
770
+ .glyphicon-log-out:before {
771
+ content: "\e163";
 
 
 
 
 
 
 
 
 
 
 
772
  }
773
+ .glyphicon-new-window:before {
774
+ content: "\e164";
 
 
 
775
  }
776
+ .glyphicon-record:before {
777
+ content: "\e165";
 
 
 
 
 
 
 
 
 
 
 
778
  }
779
+ .glyphicon-save:before {
780
+ content: "\e166";
 
 
 
781
  }
782
+ .glyphicon-open:before {
783
+ content: "\e167";
 
 
 
 
 
 
 
 
 
 
 
784
  }
785
+ .glyphicon-saved:before {
786
+ content: "\e168";
 
 
 
787
  }
788
+ .glyphicon-import:before {
789
+ content: "\e169";
 
 
 
 
 
 
 
 
 
 
 
790
  }
791
+ .glyphicon-export:before {
792
+ content: "\e170";
 
 
 
793
  }
794
+ .glyphicon-send:before {
795
+ content: "\e171";
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
796
  }
797
+ .glyphicon-floppy-disk:before {
798
+ content: "\e172";
 
 
 
799
  }
800
+ .glyphicon-floppy-saved:before {
801
+ content: "\e173";
 
 
 
 
 
 
 
 
802
  }
803
+ .glyphicon-floppy-remove:before {
804
+ content: "\e174";
 
 
805
  }
806
+ .glyphicon-floppy-save:before {
807
+ content: "\e175";
 
 
808
  }
809
+ .glyphicon-floppy-open:before {
810
+ content: "\e176";
 
 
 
 
811
  }
812
+ .glyphicon-credit-card:before {
813
+ content: "\e177";
814
  }
815
+ .glyphicon-transfer:before {
816
+ content: "\e178";
 
817
  }
818
+ .glyphicon-cutlery:before {
819
+ content: "\e179";
 
820
  }
821
+ .glyphicon-header:before {
822
+ content: "\e180";
 
 
 
 
823
  }
824
+ .glyphicon-compressed:before {
825
+ content: "\e181";
 
 
 
 
826
  }
827
+ .glyphicon-earphone:before {
828
+ content: "\e182";
 
 
 
 
 
 
 
 
 
 
 
 
 
 
829
  }
830
+ .glyphicon-phone-alt:before {
831
+ content: "\e183";
 
 
 
832
  }
833
+ .glyphicon-tower:before {
834
+ content: "\e184";
835
  }
836
+ .glyphicon-stats:before {
837
+ content: "\e185";
 
838
  }
839
+ .glyphicon-sd-video:before {
840
+ content: "\e186";
841
  }
842
+ .glyphicon-hd-video:before {
843
+ content: "\e187";
844
  }
845
+ .glyphicon-subtitles:before {
846
+ content: "\e188";
 
 
 
 
847
  }
848
+ .glyphicon-sound-stereo:before {
849
+ content: "\e189";
850
  }
851
+ .glyphicon-sound-dolby:before {
852
+ content: "\e190";
853
  }
854
+ .glyphicon-sound-5-1:before {
855
+ content: "\e191";
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
856
  }
857
+ .glyphicon-sound-6-1:before {
858
+ content: "\e192";
 
 
 
 
 
 
 
 
 
 
 
859
  }
860
+ .glyphicon-sound-7-1:before {
861
+ content: "\e193";
 
 
 
 
862
  }
863
+ .glyphicon-copyright-mark:before {
864
+ content: "\e194";
 
865
  }
866
+ .glyphicon-registration-mark:before {
867
+ content: "\e195";
 
868
  }
869
+ .glyphicon-cloud-download:before {
870
+ content: "\e197";
 
 
 
 
871
  }
872
+ .glyphicon-cloud-upload:before {
873
+ content: "\e198";
 
874
  }
875
+ .glyphicon-tree-conifer:before {
876
+ content: "\e199";
 
877
  }
878
+ .glyphicon-tree-deciduous:before {
879
+ content: "\e200";
880
  }
881
+ * {
882
+ -webkit-box-sizing: border-box;
883
+ -moz-box-sizing: border-box;
884
+ box-sizing: border-box;
885
  }
886
+ *:before,
887
+ *:after {
888
+ -webkit-box-sizing: border-box;
889
+ -moz-box-sizing: border-box;
890
+ box-sizing: border-box;
 
 
 
 
891
  }
892
+ html {
893
+ font-size: 10px;
894
+
895
+ -webkit-tap-highlight-color: rgba(0, 0, 0, 0);
 
 
 
896
  }
897
+ body {
898
+ font-family: "Helvetica Neue", Helvetica, Arial, sans-serif;
899
+ font-size: 14px;
900
+ line-height: 1.42857143;
901
+ color: #333;
902
+ background-color: #fff;
903
  }
904
+ input,
905
+ button,
906
+ select,
907
+ textarea {
908
+ font-family: inherit;
909
+ font-size: inherit;
910
+ line-height: inherit;
911
  }
912
+ a {
913
+ color: #428bca;
914
+ text-decoration: none;
 
915
  }
916
+ a:hover,
917
+ a:focus {
918
+ color: #2a6496;
919
+ text-decoration: underline;
920
  }
921
+ a:focus {
922
+ outline: thin dotted;
923
+ outline: 5px auto -webkit-focus-ring-color;
924
+ outline-offset: -2px;
 
 
 
925
  }
926
+ figure {
927
+ margin: 0;
 
 
928
  }
929
+ img {
930
+ vertical-align: middle;
 
 
931
  }
932
+ .img-responsive,
933
+ .thumbnail > img,
934
+ .thumbnail a > img,
935
+ .carousel-inner > .item > img,
936
+ .carousel-inner > .item > a > img {
937
+ display: block;
938
+ width: 100% \9;
939
+ max-width: 100%;
940
+ height: auto;
941
  }
942
+ .img-rounded {
943
+ border-radius: 6px;
944
  }
945
+ .img-thumbnail {
946
+ display: inline-block;
947
+ width: 100% \9;
948
+ max-width: 100%;
949
+ height: auto;
950
+ padding: 4px;
951
+ line-height: 1.42857143;
952
+ background-color: #fff;
953
+ border: 1px solid #ddd;
954
+ border-radius: 4px;
955
+ -webkit-transition: all .2s ease-in-out;
956
+ -o-transition: all .2s ease-in-out;
957
+ transition: all .2s ease-in-out;
958
  }
959
+ .img-circle {
960
+ border-radius: 50%;
 
 
961
  }
962
+ hr {
963
+ margin-top: 20px;
964
+ margin-bottom: 20px;
965
+ border: 0;
966
+ border-top: 1px solid #eee;
967
  }
968
+ .sr-only {
969
+ position: absolute;
970
+ width: 1px;
971
+ height: 1px;
972
+ padding: 0;
973
+ margin: -1px;
974
+ overflow: hidden;
975
+ clip: rect(0, 0, 0, 0);
976
+ border: 0;
977
  }
978
+ .sr-only-focusable:active,
979
+ .sr-only-focusable:focus {
980
+ position: static;
981
+ width: auto;
982
+ height: auto;
983
+ margin: 0;
984
+ overflow: visible;
985
+ clip: auto;
986
  }
987
+ h1,
988
+ h2,
989
+ h3,
990
+ h4,
991
+ h5,
992
+ h6,
993
+ .h1,
994
+ .h2,
995
+ .h3,
996
+ .h4,
997
+ .h5,
998
+ .h6 {
999
+ font-family: inherit;
1000
+ font-weight: 500;
1001
+ line-height: 1.1;
1002
+ color: inherit;
1003
  }
1004
+ h1 small,
1005
+ h2 small,
1006
+ h3 small,
1007
+ h4 small,
1008
+ h5 small,
1009
+ h6 small,
1010
+ .h1 small,
1011
+ .h2 small,
1012
+ .h3 small,
1013
+ .h4 small,
1014
+ .h5 small,
1015
+ .h6 small,
1016
+ h1 .small,
1017
+ h2 .small,
1018
+ h3 .small,
1019
+ h4 .small,
1020
+ h5 .small,
1021
+ h6 .small,
1022
+ .h1 .small,
1023
+ .h2 .small,
1024
+ .h3 .small,
1025
+ .h4 .small,
1026
+ .h5 .small,
1027
+ .h6 .small {
1028
+ font-weight: normal;
1029
+ line-height: 1;
1030
+ color: #777;
1031
+ }
1032
+ h1,
1033
+ .h1,
1034
+ h2,
1035
+ .h2,
1036
+ h3,
1037
+ .h3 {
1038
+ margin-top: 20px;
1039
  margin-bottom: 10px;
 
1040
  }
1041
+ h1 small,
1042
+ .h1 small,
1043
+ h2 small,
1044
+ .h2 small,
1045
+ h3 small,
1046
+ .h3 small,
1047
+ h1 .small,
1048
+ .h1 .small,
1049
+ h2 .small,
1050
+ .h2 .small,
1051
+ h3 .small,
1052
+ .h3 .small {
1053
+ font-size: 65%;
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1054
  }
1055
+ h4,
1056
+ .h4,
1057
+ h5,
1058
+ .h5,
1059
+ h6,
1060
+ .h6 {
1061
+ margin-top: 10px;
1062
+ margin-bottom: 10px;
1063
  }
1064
+ h4 small,
1065
+ .h4 small,
1066
+ h5 small,
1067
+ .h5 small,
1068
+ h6 small,
1069
+ .h6 small,
1070
+ h4 .small,
1071
+ .h4 .small,
1072
+ h5 .small,
1073
+ .h5 .small,
1074
+ h6 .small,
1075
+ .h6 .small {
1076
+ font-size: 75%;
1077
  }
1078
+ h1,
1079
+ .h1 {
1080
+ font-size: 36px;
1081
  }
1082
+ h2,
1083
+ .h2 {
1084
+ font-size: 30px;
1085
  }
1086
+ h3,
1087
+ .h3 {
1088
+ font-size: 24px;
 
1089
  }
1090
+ h4,
1091
+ .h4 {
1092
+ font-size: 18px;
1093
  }
1094
+ h5,
1095
+ .h5 {
 
 
1096
  font-size: 14px;
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1097
  }
1098
+ h6,
1099
+ .h6 {
1100
+ font-size: 12px;
 
1101
  }
1102
+ p {
1103
+ margin: 0 0 10px;
 
 
1104
  }
1105
+ .lead {
1106
+ margin-bottom: 20px;
1107
+ font-size: 16px;
1108
+ font-weight: 300;
1109
+ line-height: 1.4;
 
1110
  }
1111
+ @media (min-width: 768px) {
1112
+ .lead {
1113
+ font-size: 21px;
1114
+ }
 
 
 
 
 
1115
  }
1116
+ small,
1117
+ .small {
1118
+ font-size: 85%;
 
1119
  }
1120
+ cite {
1121
+ font-style: normal;
 
 
 
 
 
 
1122
  }
1123
+ mark,
1124
+ .mark {
1125
+ padding: .2em;
1126
+ background-color: #fcf8e3;
1127
  }
1128
+ .text-left {
1129
+ text-align: left;
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1130
  }
1131
+ .text-right {
1132
+ text-align: right;
 
1133
  }
1134
+ .text-center {
1135
+ text-align: center;
 
 
1136
  }
1137
+ .text-justify {
1138
+ text-align: justify;
 
 
 
 
 
 
1139
  }
1140
+ .text-nowrap {
1141
+ white-space: nowrap;
 
 
1142
  }
1143
+ .text-lowercase {
1144
+ text-transform: lowercase;
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1145
  }
1146
+ .text-uppercase {
1147
+ text-transform: uppercase;
 
 
1148
  }
1149
+ .text-capitalize {
1150
+ text-transform: capitalize;
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1151
  }
1152
+ .text-muted {
1153
+ color: #777;
 
1154
  }
1155
+ .text-primary {
1156
+ color: #428bca;
 
 
1157
  }
1158
+ a.text-primary:hover {
1159
+ color: #3071a9;
 
 
 
 
 
 
1160
  }
1161
+ .text-success {
1162
+ color: #3c763d;
 
 
1163
  }
1164
+ a.text-success:hover {
1165
+ color: #2b542c;
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1166
  }
1167
+ .text-info {
1168
+ color: #31708f;
 
1169
  }
1170
+ a.text-info:hover {
1171
+ color: #245269;
 
 
1172
  }
1173
+ .text-warning {
1174
+ color: #8a6d3b;
 
 
 
 
 
 
1175
  }
1176
+ a.text-warning:hover {
1177
+ color: #66512c;
 
 
1178
  }
1179
+ .text-danger {
1180
+ color: #a94442;
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1181
  }
1182
+ a.text-danger:hover {
1183
+ color: #843534;
 
1184
  }
1185
+ .bg-primary {
1186
  color: #fff;
1187
+ background-color: #428bca;
 
1188
  }
1189
+ a.bg-primary:hover {
1190
+ background-color: #3071a9;
 
 
 
 
 
 
1191
  }
1192
+ .bg-success {
1193
+ background-color: #dff0d8;
 
 
1194
  }
1195
+ a.bg-success:hover {
1196
+ background-color: #c1e2b3;
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1197
  }
1198
+ .bg-info {
1199
+ background-color: #d9edf7;
 
1200
  }
1201
+ a.bg-info:hover {
1202
+ background-color: #afd9ee;
 
 
 
1203
  }
1204
+ .bg-warning {
1205
+ background-color: #fcf8e3;
 
 
 
 
 
1206
  }
1207
+ a.bg-warning:hover {
1208
+ background-color: #f7ecb5;
 
 
 
1209
  }
1210
+ .bg-danger {
1211
+ background-color: #f2dede;
 
 
 
1212
  }
1213
+ a.bg-danger:hover {
1214
+ background-color: #e4b9b9;
 
 
 
 
1215
  }
1216
+ .page-header {
1217
+ padding-bottom: 9px;
1218
+ margin: 40px 0 20px;
1219
+ border-bottom: 1px solid #eee;
 
1220
  }
1221
+ ul,
1222
+ ol {
1223
+ margin-top: 0;
1224
+ margin-bottom: 10px;
 
1225
  }
1226
+ ul ul,
1227
+ ol ul,
1228
+ ul ol,
1229
+ ol ol {
1230
+ margin-bottom: 0;
1231
  }
1232
+ .list-unstyled {
 
 
 
1233
  padding-left: 0;
1234
+ list-style: none;
1235
  }
1236
+ .list-inline {
1237
+ padding-left: 0;
1238
+ margin-left: -5px;
1239
+ list-style: none;
 
 
 
1240
  }
1241
+ .list-inline > li {
1242
+ display: inline-block;
1243
+ padding-right: 5px;
1244
+ padding-left: 5px;
1245
  }
1246
+ dl {
1247
+ margin-top: 0;
1248
+ margin-bottom: 20px;
1249
  }
1250
+ dt,
1251
+ dd {
1252
+ line-height: 1.42857143;
1253
  }
1254
+ dt {
1255
+ font-weight: bold;
1256
  }
1257
+ dd {
1258
+ margin-left: 0;
 
 
 
 
1259
  }
1260
+ @media (min-width: 768px) {
1261
+ .dl-horizontal dt {
1262
+ float: left;
1263
+ width: 160px;
1264
+ overflow: hidden;
1265
+ clear: left;
1266
+ text-align: right;
1267
+ text-overflow: ellipsis;
1268
+ white-space: nowrap;
1269
+ }
1270
+ .dl-horizontal dd {
1271
+ margin-left: 180px;
1272
+ }
1273
  }
1274
+ abbr[title],
1275
+ abbr[data-original-title] {
1276
+ cursor: help;
1277
+ border-bottom: 1px dotted #777;
 
 
 
 
 
 
 
1278
  }
1279
+ .initialism {
1280
+ font-size: 90%;
1281
+ text-transform: uppercase;
1282
  }
1283
+ blockquote {
1284
+ padding: 10px 20px;
1285
+ margin: 0 0 20px;
1286
+ font-size: 17.5px;
1287
+ border-left: 5px solid #eee;
1288
  }
1289
+ blockquote p:last-child,
1290
+ blockquote ul:last-child,
1291
+ blockquote ol:last-child {
1292
+ margin-bottom: 0;
1293
  }
1294
+ blockquote footer,
1295
+ blockquote small,
1296
+ blockquote .small {
1297
+ display: block;
1298
+ font-size: 80%;
1299
+ line-height: 1.42857143;
1300
+ color: #777;
1301
  }
1302
+ blockquote footer:before,
1303
+ blockquote small:before,
1304
+ blockquote .small:before {
1305
+ content: '\2014 \00A0';
1306
  }
1307
+ .blockquote-reverse,
1308
+ blockquote.pull-right {
1309
+ padding-right: 15px;
1310
+ padding-left: 0;
1311
+ text-align: right;
1312
+ border-right: 5px solid #eee;
1313
+ border-left: 0;
1314
  }
1315
+ .blockquote-reverse footer:before,
1316
+ blockquote.pull-right footer:before,
1317
+ .blockquote-reverse small:before,
1318
+ blockquote.pull-right small:before,
1319
+ .blockquote-reverse .small:before,
1320
+ blockquote.pull-right .small:before {
1321
+ content: '';
1322
  }
1323
+ .blockquote-reverse footer:after,
1324
+ blockquote.pull-right footer:after,
1325
+ .blockquote-reverse small:after,
1326
+ blockquote.pull-right small:after,
1327
+ .blockquote-reverse .small:after,
1328
+ blockquote.pull-right .small:after {
1329
+ content: '\00A0 \2014';
1330
  }
1331
+ blockquote:before,
1332
+ blockquote:after {
1333
+ content: "";
1334
  }
1335
+ address {
1336
+ margin-bottom: 20px;
1337
+ font-style: normal;
1338
+ line-height: 1.42857143;
1339
  }
1340
+ code,
1341
+ kbd,
1342
+ pre,
1343
+ samp {
1344
+ font-family: Menlo, Monaco, Consolas, "Courier New", monospace;
1345
  }
1346
+ code {
1347
+ padding: 2px 4px;
1348
+ font-size: 90%;
1349
+ color: #c7254e;
1350
+ background-color: #f9f2f4;
1351
+ border-radius: 4px;
1352
  }
1353
+ kbd {
1354
+ padding: 2px 4px;
1355
+ font-size: 90%;
1356
+ color: #fff;
1357
+ background-color: #333;
1358
+ border-radius: 3px;
1359
+ -webkit-box-shadow: inset 0 -1px 0 rgba(0, 0, 0, .25);
1360
+ box-shadow: inset 0 -1px 0 rgba(0, 0, 0, .25);
1361
  }
1362
+ kbd kbd {
1363
+ padding: 0;
1364
+ font-size: 100%;
1365
+ -webkit-box-shadow: none;
1366
+ box-shadow: none;
1367
  }
1368
+ pre {
1369
+ display: block;
1370
+ padding: 9.5px;
1371
+ margin: 0 0 10px;
1372
+ font-size: 13px;
1373
+ line-height: 1.42857143;
1374
+ color: #333;
1375
+ word-break: break-all;
1376
+ word-wrap: break-word;
1377
+ background-color: #f5f5f5;
1378
+ border: 1px solid #ccc;
1379
+ border-radius: 4px;
1380
  }
1381
+ pre code {
1382
+ padding: 0;
1383
+ font-size: inherit;
1384
+ color: inherit;
1385
+ white-space: pre-wrap;
1386
+ background-color: transparent;
1387
+ border-radius: 0;
1388
  }
1389
+ .pre-scrollable {
1390
+ max-height: 340px;
1391
+ overflow-y: scroll;
1392
  }
1393
+ .container {
1394
+ padding-right: 15px;
1395
+ padding-left: 15px;
1396
+ margin-right: auto;
1397
+ margin-left: auto;
1398
  }
1399
+ @media (min-width: 768px) {
1400
+ .container {
1401
+ width: 750px;
1402
+ }
1403
  }
1404
+ @media (min-width: 992px) {
1405
+ .container {
1406
+ width: 970px;
1407
+ }
1408
  }
1409
+ @media (min-width: 1200px) {
1410
+ .container {
1411
+ width: 1170px;
1412
+ }
1413
  }
1414
+ .container-fluid {
1415
+ padding-right: 15px;
1416
+ padding-left: 15px;
1417
+ margin-right: auto;
1418
+ margin-left: auto;
1419
  }
1420
+ .row {
1421
+ margin-right: -15px;
1422
+ margin-left: -15px;
1423
  }
1424
+ .col-xs-1, .col-sm-1, .col-md-1, .col-lg-1, .col-xs-2, .col-sm-2, .col-md-2, .col-lg-2, .col-xs-3, .col-sm-3, .col-md-3, .col-lg-3, .col-xs-4, .col-sm-4, .col-md-4, .col-lg-4, .col-xs-5, .col-sm-5, .col-md-5, .col-lg-5, .col-xs-6, .col-sm-6, .col-md-6, .col-lg-6, .col-xs-7, .col-sm-7, .col-md-7, .col-lg-7, .col-xs-8, .col-sm-8, .col-md-8, .col-lg-8, .col-xs-9, .col-sm-9, .col-md-9, .col-lg-9, .col-xs-10, .col-sm-10, .col-md-10, .col-lg-10, .col-xs-11, .col-sm-11, .col-md-11, .col-lg-11, .col-xs-12, .col-sm-12, .col-md-12, .col-lg-12 {
1425
+ position: relative;
1426
+ min-height: 1px;
1427
+ padding-right: 15px;
1428
+ padding-left: 15px;
1429
  }
1430
+ .col-xs-1, .col-xs-2, .col-xs-3, .col-xs-4, .col-xs-5, .col-xs-6, .col-xs-7, .col-xs-8, .col-xs-9, .col-xs-10, .col-xs-11, .col-xs-12 {
1431
+ float: left;
1432
  }
1433
+ .col-xs-12 {
1434
+ width: 100%;
1435
  }
1436
+ .col-xs-11 {
1437
+ width: 91.66666667%;
1438
  }
1439
+ .col-xs-10 {
1440
+ width: 83.33333333%;
1441
  }
1442
+ .col-xs-9 {
1443
+ width: 75%;
1444
  }
1445
+ .col-xs-8 {
1446
+ width: 66.66666667%;
1447
  }
1448
+ .col-xs-7 {
1449
+ width: 58.33333333%;
1450
  }
1451
+ .col-xs-6 {
1452
+ width: 50%;
1453
  }
1454
+ .col-xs-5 {
1455
+ width: 41.66666667%;
1456
  }
1457
+ .col-xs-4 {
1458
+ width: 33.33333333%;
1459
  }
1460
+ .col-xs-3 {
1461
+ width: 25%;
1462
  }
1463
+ .col-xs-2 {
1464
+ width: 16.66666667%;
1465
  }
1466
+ .col-xs-1 {
1467
+ width: 8.33333333%;
1468
  }
1469
+ .col-xs-pull-12 {
1470
+ right: 100%;
1471
  }
1472
+ .col-xs-pull-11 {
1473
+ right: 91.66666667%;
1474
  }
1475
+ .col-xs-pull-10 {
1476
+ right: 83.33333333%;
1477
  }
1478
+ .col-xs-pull-9 {
1479
+ right: 75%;
1480
  }
1481
+ .col-xs-pull-8 {
1482
+ right: 66.66666667%;
1483
  }
1484
+ .col-xs-pull-7 {
1485
+ right: 58.33333333%;
1486
  }
1487
+ .col-xs-pull-6 {
1488
+ right: 50%;
1489
  }
1490
+ .col-xs-pull-5 {
1491
+ right: 41.66666667%;
1492
  }
1493
+ .col-xs-pull-4 {
1494
+ right: 33.33333333%;
1495
  }
1496
+ .col-xs-pull-3 {
1497
+ right: 25%;
1498
  }
1499
+ .col-xs-pull-2 {
1500
+ right: 16.66666667%;
1501
  }
1502
+ .col-xs-pull-1 {
1503
+ right: 8.33333333%;
1504
  }
1505
+ .col-xs-pull-0 {
1506
+ right: auto;
1507
  }
1508
+ .col-xs-push-12 {
1509
+ left: 100%;
1510
  }
1511
+ .col-xs-push-11 {
1512
+ left: 91.66666667%;
1513
+ }
1514
+ .col-xs-push-10 {
1515
+ left: 83.33333333%;
1516
+ }
1517
+ .col-xs-push-9 {
1518
+ left: 75%;
1519
+ }
1520
+ .col-xs-push-8 {
1521
+ left: 66.66666667%;
1522
+ }
1523
+ .col-xs-push-7 {
1524
+ left: 58.33333333%;
1525
+ }
1526
+ .col-xs-push-6 {
1527
+ left: 50%;
1528
+ }
1529
+ .col-xs-push-5 {
1530
+ left: 41.66666667%;
1531
+ }
1532
+ .col-xs-push-4 {
1533
+ left: 33.33333333%;
1534
+ }
1535
+ .col-xs-push-3 {
1536
+ left: 25%;
1537
+ }
1538
+ .col-xs-push-2 {
1539
+ left: 16.66666667%;
1540
+ }
1541
+ .col-xs-push-1 {
1542
+ left: 8.33333333%;
1543
+ }
1544
+ .col-xs-push-0 {
1545
+ left: auto;
1546
+ }
1547
+ .col-xs-offset-12 {
1548
+ margin-left: 100%;
1549
+ }
1550
+ .col-xs-offset-11 {
1551
+ margin-left: 91.66666667%;
1552
+ }
1553
+ .col-xs-offset-10 {
1554
+ margin-left: 83.33333333%;
1555
+ }
1556
+ .col-xs-offset-9 {
1557
+ margin-left: 75%;
1558
+ }
1559
+ .col-xs-offset-8 {
1560
+ margin-left: 66.66666667%;
1561
+ }
1562
+ .col-xs-offset-7 {
1563
+ margin-left: 58.33333333%;
1564
+ }
1565
+ .col-xs-offset-6 {
1566
+ margin-left: 50%;
1567
+ }
1568
+ .col-xs-offset-5 {
1569
+ margin-left: 41.66666667%;
1570
+ }
1571
+ .col-xs-offset-4 {
1572
+ margin-left: 33.33333333%;
1573
+ }
1574
+ .col-xs-offset-3 {
1575
+ margin-left: 25%;
1576
+ }
1577
+ .col-xs-offset-2 {
1578
+ margin-left: 16.66666667%;
1579
+ }
1580
+ .col-xs-offset-1 {
1581
+ margin-left: 8.33333333%;
1582
+ }
1583
+ .col-xs-offset-0 {
1584
+ margin-left: 0;
1585
+ }
1586
+ @media (min-width: 768px) {
1587
+ .col-sm-1, .col-sm-2, .col-sm-3, .col-sm-4, .col-sm-5, .col-sm-6, .col-sm-7, .col-sm-8, .col-sm-9, .col-sm-10, .col-sm-11, .col-sm-12 {
1588
+ float: left;
1589
+ }
1590
+ .col-sm-12 {
1591
+ width: 100%;
1592
+ }
1593
+ .col-sm-11 {
1594
+ width: 91.66666667%;
1595
+ }
1596
+ .col-sm-10 {
1597
+ width: 83.33333333%;
1598
+ }
1599
+ .col-sm-9 {
1600
+ width: 75%;
1601
+ }
1602
+ .col-sm-8 {
1603
+ width: 66.66666667%;
1604
+ }
1605
+ .col-sm-7 {
1606
+ width: 58.33333333%;
1607
+ }
1608
+ .col-sm-6 {
1609
+ width: 50%;
1610
+ }
1611
+ .col-sm-5 {
1612
+ width: 41.66666667%;
1613
+ }
1614
+ .col-sm-4 {
1615
+ width: 33.33333333%;
1616
+ }
1617
+ .col-sm-3 {
1618
+ width: 25%;
1619
+ }
1620
+ .col-sm-2 {
1621
+ width: 16.66666667%;
1622
+ }
1623
+ .col-sm-1 {
1624
+ width: 8.33333333%;
1625
+ }
1626
+ .col-sm-pull-12 {
1627
+ right: 100%;
1628
+ }
1629
+ .col-sm-pull-11 {
1630
+ right: 91.66666667%;
1631
+ }
1632
+ .col-sm-pull-10 {
1633
+ right: 83.33333333%;
1634
+ }
1635
+ .col-sm-pull-9 {
1636
+ right: 75%;
1637
+ }
1638
+ .col-sm-pull-8 {
1639
+ right: 66.66666667%;
1640
+ }
1641
+ .col-sm-pull-7 {
1642
+ right: 58.33333333%;
1643
+ }
1644
+ .col-sm-pull-6 {
1645
+ right: 50%;
1646
+ }
1647
+ .col-sm-pull-5 {
1648
+ right: 41.66666667%;
1649
+ }
1650
+ .col-sm-pull-4 {
1651
+ right: 33.33333333%;
1652
+ }
1653
+ .col-sm-pull-3 {
1654
+ right: 25%;
1655
+ }
1656
+ .col-sm-pull-2 {
1657
+ right: 16.66666667%;
1658
+ }
1659
+ .col-sm-pull-1 {
1660
+ right: 8.33333333%;
1661
+ }
1662
+ .col-sm-pull-0 {
1663
+ right: auto;
1664
+ }
1665
+ .col-sm-push-12 {
1666
+ left: 100%;
1667
+ }
1668
+ .col-sm-push-11 {
1669
+ left: 91.66666667%;
1670
+ }
1671
+ .col-sm-push-10 {
1672
+ left: 83.33333333%;
1673
+ }
1674
+ .col-sm-push-9 {
1675
+ left: 75%;
1676
+ }
1677
+ .col-sm-push-8 {
1678
+ left: 66.66666667%;
1679
+ }
1680
+ .col-sm-push-7 {
1681
+ left: 58.33333333%;
1682
+ }
1683
+ .col-sm-push-6 {
1684
+ left: 50%;
1685
+ }
1686
+ .col-sm-push-5 {
1687
+ left: 41.66666667%;
1688
+ }
1689
+ .col-sm-push-4 {
1690
+ left: 33.33333333%;
1691
+ }
1692
+ .col-sm-push-3 {
1693
+ left: 25%;
1694
+ }
1695
+ .col-sm-push-2 {
1696
+ left: 16.66666667%;
1697
+ }
1698
+ .col-sm-push-1 {
1699
+ left: 8.33333333%;
1700
+ }
1701
+ .col-sm-push-0 {
1702
+ left: auto;
1703
+ }
1704
+ .col-sm-offset-12 {
1705
+ margin-left: 100%;
1706
+ }
1707
+ .col-sm-offset-11 {
1708
+ margin-left: 91.66666667%;
1709
+ }
1710
+ .col-sm-offset-10 {
1711
+ margin-left: 83.33333333%;
1712
+ }
1713
+ .col-sm-offset-9 {
1714
+ margin-left: 75%;
1715
+ }
1716
+ .col-sm-offset-8 {
1717
+ margin-left: 66.66666667%;
1718
+ }
1719
+ .col-sm-offset-7 {
1720
+ margin-left: 58.33333333%;
1721
+ }
1722
+ .col-sm-offset-6 {
1723
+ margin-left: 50%;
1724
+ }
1725
+ .col-sm-offset-5 {
1726
+ margin-left: 41.66666667%;
1727
+ }
1728
+ .col-sm-offset-4 {
1729
+ margin-left: 33.33333333%;
1730
+ }
1731
+ .col-sm-offset-3 {
1732
+ margin-left: 25%;
1733
+ }
1734
+ .col-sm-offset-2 {
1735
+ margin-left: 16.66666667%;
1736
+ }
1737
+ .col-sm-offset-1 {
1738
+ margin-left: 8.33333333%;
1739
+ }
1740
+ .col-sm-offset-0 {
1741
+ margin-left: 0;
1742
+ }
1743
+ }
1744
+ @media (min-width: 992px) {
1745
+ .col-md-1, .col-md-2, .col-md-3, .col-md-4, .col-md-5, .col-md-6, .col-md-7, .col-md-8, .col-md-9, .col-md-10, .col-md-11, .col-md-12 {
1746
+ float: left;
1747
+ }
1748
+ .col-md-12 {
1749
+ width: 100%;
1750
+ }
1751
+ .col-md-11 {
1752
+ width: 91.66666667%;
1753
+ }
1754
+ .col-md-10 {
1755
+ width: 83.33333333%;
1756
+ }
1757
+ .col-md-9 {
1758
+ width: 75%;
1759
+ }
1760
+ .col-md-8 {
1761
+ width: 66.66666667%;
1762
+ }
1763
+ .col-md-7 {
1764
+ width: 58.33333333%;
1765
+ }
1766
+ .col-md-6 {
1767
+ width: 50%;
1768
+ }
1769
+ .col-md-5 {
1770
+ width: 41.66666667%;
1771
+ }
1772
+ .col-md-4 {
1773
+ width: 33.33333333%;
1774
+ }
1775
+ .col-md-3 {
1776
+ width: 25%;
1777
+ }
1778
+ .col-md-2 {
1779
+ width: 16.66666667%;
1780
+ }
1781
+ .col-md-1 {
1782
+ width: 8.33333333%;
1783
+ }
1784
+ .col-md-pull-12 {
1785
+ right: 100%;
1786
+ }
1787
+ .col-md-pull-11 {
1788
+ right: 91.66666667%;
1789
+ }
1790
+ .col-md-pull-10 {
1791
+ right: 83.33333333%;
1792
+ }
1793
+ .col-md-pull-9 {
1794
+ right: 75%;
1795
+ }
1796
+ .col-md-pull-8 {
1797
+ right: 66.66666667%;
1798
+ }
1799
+ .col-md-pull-7 {
1800
+ right: 58.33333333%;
1801
+ }
1802
+ .col-md-pull-6 {
1803
+ right: 50%;
1804
+ }
1805
+ .col-md-pull-5 {
1806
+ right: 41.66666667%;
1807
+ }
1808
+ .col-md-pull-4 {
1809
+ right: 33.33333333%;
1810
+ }
1811
+ .col-md-pull-3 {
1812
+ right: 25%;
1813
+ }
1814
+ .col-md-pull-2 {
1815
+ right: 16.66666667%;
1816
+ }
1817
+ .col-md-pull-1 {
1818
+ right: 8.33333333%;
1819
+ }
1820
+ .col-md-pull-0 {
1821
+ right: auto;
1822
+ }
1823
+ .col-md-push-12 {
1824
+ left: 100%;
1825
+ }
1826
+ .col-md-push-11 {
1827
+ left: 91.66666667%;
1828
+ }
1829
+ .col-md-push-10 {
1830
+ left: 83.33333333%;
1831
+ }
1832
+ .col-md-push-9 {
1833
+ left: 75%;
1834
+ }
1835
+ .col-md-push-8 {
1836
+ left: 66.66666667%;
1837
+ }
1838
+ .col-md-push-7 {
1839
+ left: 58.33333333%;
1840
+ }
1841
+ .col-md-push-6 {
1842
+ left: 50%;
1843
+ }
1844
+ .col-md-push-5 {
1845
+ left: 41.66666667%;
1846
+ }
1847
+ .col-md-push-4 {
1848
+ left: 33.33333333%;
1849
+ }
1850
+ .col-md-push-3 {
1851
+ left: 25%;
1852
+ }
1853
+ .col-md-push-2 {
1854
+ left: 16.66666667%;
1855
+ }
1856
+ .col-md-push-1 {
1857
+ left: 8.33333333%;
1858
+ }
1859
+ .col-md-push-0 {
1860
+ left: auto;
1861
+ }
1862
+ .col-md-offset-12 {
1863
+ margin-left: 100%;
1864
+ }
1865
+ .col-md-offset-11 {
1866
+ margin-left: 91.66666667%;
1867
+ }
1868
+ .col-md-offset-10 {
1869
+ margin-left: 83.33333333%;
1870
+ }
1871
+ .col-md-offset-9 {
1872
+ margin-left: 75%;
1873
+ }
1874
+ .col-md-offset-8 {
1875
+ margin-left: 66.66666667%;
1876
+ }
1877
+ .col-md-offset-7 {
1878
+ margin-left: 58.33333333%;
1879
+ }
1880
+ .col-md-offset-6 {
1881
+ margin-left: 50%;
1882
+ }
1883
+ .col-md-offset-5 {
1884
+ margin-left: 41.66666667%;
1885
+ }
1886
+ .col-md-offset-4 {
1887
+ margin-left: 33.33333333%;
1888
+ }
1889
+ .col-md-offset-3 {
1890
+ margin-left: 25%;
1891
+ }
1892
+ .col-md-offset-2 {
1893
+ margin-left: 16.66666667%;
1894
+ }
1895
+ .col-md-offset-1 {
1896
+ margin-left: 8.33333333%;
1897
+ }
1898
+ .col-md-offset-0 {
1899
+ margin-left: 0;
1900
+ }
1901
  }
1902
+ @media (min-width: 1200px) {
1903
+ .col-lg-1, .col-lg-2, .col-lg-3, .col-lg-4, .col-lg-5, .col-lg-6, .col-lg-7, .col-lg-8, .col-lg-9, .col-lg-10, .col-lg-11, .col-lg-12 {
1904
+ float: left;
1905
+ }
1906
+ .col-lg-12 {
1907
+ width: 100%;
1908
+ }
1909
+ .col-lg-11 {
1910
+ width: 91.66666667%;
1911
+ }
1912
+ .col-lg-10 {
1913
+ width: 83.33333333%;
1914
+ }
1915
+ .col-lg-9 {
1916
+ width: 75%;
1917
+ }
1918
+ .col-lg-8 {
1919
+ width: 66.66666667%;
1920
+ }
1921
+ .col-lg-7 {
1922
+ width: 58.33333333%;
1923
+ }
1924
+ .col-lg-6 {
1925
+ width: 50%;
1926
+ }
1927
+ .col-lg-5 {
1928
+ width: 41.66666667%;
1929
+ }
1930
+ .col-lg-4 {
1931
+ width: 33.33333333%;
1932
+ }
1933
+ .col-lg-3 {
1934
+ width: 25%;
1935
+ }
1936
+ .col-lg-2 {
1937
+ width: 16.66666667%;
1938
+ }
1939
+ .col-lg-1 {
1940
+ width: 8.33333333%;
1941
+ }
1942
+ .col-lg-pull-12 {
1943
+ right: 100%;
1944
+ }
1945
+ .col-lg-pull-11 {
1946
+ right: 91.66666667%;
1947
+ }
1948
+ .col-lg-pull-10 {
1949
+ right: 83.33333333%;
1950
+ }
1951
+ .col-lg-pull-9 {
1952
+ right: 75%;
1953
+ }
1954
+ .col-lg-pull-8 {
1955
+ right: 66.66666667%;
1956
+ }
1957
+ .col-lg-pull-7 {
1958
+ right: 58.33333333%;
1959
+ }
1960
+ .col-lg-pull-6 {
1961
+ right: 50%;
1962
+ }
1963
+ .col-lg-pull-5 {
1964
+ right: 41.66666667%;
1965
+ }
1966
+ .col-lg-pull-4 {
1967
+ right: 33.33333333%;
1968
+ }
1969
+ .col-lg-pull-3 {
1970
+ right: 25%;
1971
+ }
1972
+ .col-lg-pull-2 {
1973
+ right: 16.66666667%;
1974
+ }
1975
+ .col-lg-pull-1 {
1976
+ right: 8.33333333%;
1977
+ }
1978
+ .col-lg-pull-0 {
1979
+ right: auto;
1980
+ }
1981
+ .col-lg-push-12 {
1982
+ left: 100%;
1983
+ }
1984
+ .col-lg-push-11 {
1985
+ left: 91.66666667%;
1986
+ }
1987
+ .col-lg-push-10 {
1988
+ left: 83.33333333%;
1989
+ }
1990
+ .col-lg-push-9 {
1991
+ left: 75%;
1992
+ }
1993
+ .col-lg-push-8 {
1994
+ left: 66.66666667%;
1995
+ }
1996
+ .col-lg-push-7 {
1997
+ left: 58.33333333%;
1998
+ }
1999
+ .col-lg-push-6 {
2000
+ left: 50%;
2001
+ }
2002
+ .col-lg-push-5 {
2003
+ left: 41.66666667%;
2004
+ }
2005
+ .col-lg-push-4 {
2006
+ left: 33.33333333%;
2007
+ }
2008
+ .col-lg-push-3 {
2009
+ left: 25%;
2010
+ }
2011
+ .col-lg-push-2 {
2012
+ left: 16.66666667%;
2013
+ }
2014
+ .col-lg-push-1 {
2015
+ left: 8.33333333%;
2016
+ }
2017
+ .col-lg-push-0 {
2018
+ left: auto;
2019
+ }
2020
+ .col-lg-offset-12 {
2021
+ margin-left: 100%;
2022
+ }
2023
+ .col-lg-offset-11 {
2024
+ margin-left: 91.66666667%;
2025
+ }
2026
+ .col-lg-offset-10 {
2027
+ margin-left: 83.33333333%;
2028
+ }
2029
+ .col-lg-offset-9 {
2030
+ margin-left: 75%;
2031
+ }
2032
+ .col-lg-offset-8 {
2033
+ margin-left: 66.66666667%;
2034
+ }
2035
+ .col-lg-offset-7 {
2036
+ margin-left: 58.33333333%;
2037
+ }
2038
+ .col-lg-offset-6 {
2039
+ margin-left: 50%;
2040
+ }
2041
+ .col-lg-offset-5 {
2042
+ margin-left: 41.66666667%;
2043
+ }
2044
+ .col-lg-offset-4 {
2045
+ margin-left: 33.33333333%;
2046
+ }
2047
+ .col-lg-offset-3 {
2048
+ margin-left: 25%;
2049
+ }
2050
+ .col-lg-offset-2 {
2051
+ margin-left: 16.66666667%;
2052
+ }
2053
+ .col-lg-offset-1 {
2054
+ margin-left: 8.33333333%;
2055
+ }
2056
+ .col-lg-offset-0 {
2057
+ margin-left: 0;
2058
+ }
2059
  }
2060
+ table {
2061
+ background-color: transparent;
2062
  }
2063
+ th {
2064
+ text-align: left;
2065
  }
2066
+ .table {
2067
+ width: 100%;
2068
+ max-width: 100%;
2069
+ margin-bottom: 20px;
2070
  }
2071
+ .table > thead > tr > th,
2072
+ .table > tbody > tr > th,
2073
+ .table > tfoot > tr > th,
2074
+ .table > thead > tr > td,
2075
+ .table > tbody > tr > td,
2076
+ .table > tfoot > tr > td {
2077
+ padding: 8px;
2078
+ line-height: 1.42857143;
2079
+ vertical-align: top;
2080
+ border-top: 1px solid #ddd;
2081
  }
2082
+ .table > thead > tr > th {
2083
+ vertical-align: bottom;
2084
+ border-bottom: 2px solid #ddd;
2085
  }
2086
+ .table > caption + thead > tr:first-child > th,
2087
+ .table > colgroup + thead > tr:first-child > th,
2088
+ .table > thead:first-child > tr:first-child > th,
2089
+ .table > caption + thead > tr:first-child > td,
2090
+ .table > colgroup + thead > tr:first-child > td,
2091
+ .table > thead:first-child > tr:first-child > td {
2092
+ border-top: 0;
2093
  }
2094
+ .table > tbody + tbody {
2095
+ border-top: 2px solid #ddd;
2096
  }
2097
+ .table .table {
2098
+ background-color: #fff;
2099
  }
2100
+ .table-condensed > thead > tr > th,
2101
+ .table-condensed > tbody > tr > th,
2102
+ .table-condensed > tfoot > tr > th,
2103
+ .table-condensed > thead > tr > td,
2104
+ .table-condensed > tbody > tr > td,
2105
+ .table-condensed > tfoot > tr > td {
2106
+ padding: 5px;
2107
  }
2108
+ .table-bordered {
2109
+ border: 1px solid #ddd;
2110
  }
2111
+ .table-bordered > thead > tr > th,
2112
+ .table-bordered > tbody > tr > th,
2113
+ .table-bordered > tfoot > tr > th,
2114
+ .table-bordered > thead > tr > td,
2115
+ .table-bordered > tbody > tr > td,
2116
+ .table-bordered > tfoot > tr > td {
2117
+ border: 1px solid #ddd;
2118
  }
2119
+ .table-bordered > thead > tr > th,
2120
+ .table-bordered > thead > tr > td {
2121
+ border-bottom-width: 2px;
2122
  }
2123
+ .table-striped > tbody > tr:nth-child(odd) > td,
2124
+ .table-striped > tbody > tr:nth-child(odd) > th {
2125
+ background-color: #f9f9f9;
2126
  }
2127
+ .table-hover > tbody > tr:hover > td,
2128
+ .table-hover > tbody > tr:hover > th {
2129
+ background-color: #f5f5f5;
2130
  }
2131
+ table col[class*="col-"] {
2132
+ position: static;
2133
+ display: table-column;
2134
+ float: none;
2135
  }
2136
+ table td[class*="col-"],
2137
+ table th[class*="col-"] {
2138
+ position: static;
2139
+ display: table-cell;
2140
+ float: none;
2141
  }
2142
+ .table > thead > tr > td.active,
2143
+ .table > tbody > tr > td.active,
2144
+ .table > tfoot > tr > td.active,
2145
+ .table > thead > tr > th.active,
2146
+ .table > tbody > tr > th.active,
2147
+ .table > tfoot > tr > th.active,
2148
+ .table > thead > tr.active > td,
2149
+ .table > tbody > tr.active > td,
2150
+ .table > tfoot > tr.active > td,
2151
+ .table > thead > tr.active > th,
2152
+ .table > tbody > tr.active > th,
2153
+ .table > tfoot > tr.active > th {
2154
+ background-color: #f5f5f5;
2155
  }
2156
+ .table-hover > tbody > tr > td.active:hover,
2157
+ .table-hover > tbody > tr > th.active:hover,
2158
+ .table-hover > tbody > tr.active:hover > td,
2159
+ .table-hover > tbody > tr:hover > .active,
2160
+ .table-hover > tbody > tr.active:hover > th {
2161
+ background-color: #e8e8e8;
2162
+ }
2163
+ .table > thead > tr > td.success,
2164
+ .table > tbody > tr > td.success,
2165
+ .table > tfoot > tr > td.success,
2166
+ .table > thead > tr > th.success,
2167
+ .table > tbody > tr > th.success,
2168
+ .table > tfoot > tr > th.success,
2169
+ .table > thead > tr.success > td,
2170
+ .table > tbody > tr.success > td,
2171
+ .table > tfoot > tr.success > td,
2172
+ .table > thead > tr.success > th,
2173
+ .table > tbody > tr.success > th,
2174
+ .table > tfoot > tr.success > th {
2175
+ background-color: #dff0d8;
2176
  }
2177
+ .table-hover > tbody > tr > td.success:hover,
2178
+ .table-hover > tbody > tr > th.success:hover,
2179
+ .table-hover > tbody > tr.success:hover > td,
2180
+ .table-hover > tbody > tr:hover > .success,
2181
+ .table-hover > tbody > tr.success:hover > th {
2182
+ background-color: #d0e9c6;
2183
  }
2184
+ .table > thead > tr > td.info,
2185
+ .table > tbody > tr > td.info,
2186
+ .table > tfoot > tr > td.info,
2187
+ .table > thead > tr > th.info,
2188
+ .table > tbody > tr > th.info,
2189
+ .table > tfoot > tr > th.info,
2190
+ .table > thead > tr.info > td,
2191
+ .table > tbody > tr.info > td,
2192
+ .table > tfoot > tr.info > td,
2193
+ .table > thead > tr.info > th,
2194
+ .table > tbody > tr.info > th,
2195
+ .table > tfoot > tr.info > th {
2196
+ background-color: #d9edf7;
2197
  }
2198
+ .table-hover > tbody > tr > td.info:hover,
2199
+ .table-hover > tbody > tr > th.info:hover,
2200
+ .table-hover > tbody > tr.info:hover > td,
2201
+ .table-hover > tbody > tr:hover > .info,
2202
+ .table-hover > tbody > tr.info:hover > th {
2203
+ background-color: #c4e3f3;
2204
  }
2205
+ .table > thead > tr > td.warning,
2206
+ .table > tbody > tr > td.warning,
2207
+ .table > tfoot > tr > td.warning,
2208
+ .table > thead > tr > th.warning,
2209
+ .table > tbody > tr > th.warning,
2210
+ .table > tfoot > tr > th.warning,
2211
+ .table > thead > tr.warning > td,
2212
+ .table > tbody > tr.warning > td,
2213
+ .table > tfoot > tr.warning > td,
2214
+ .table > thead > tr.warning > th,
2215
+ .table > tbody > tr.warning > th,
2216
+ .table > tfoot > tr.warning > th {
2217
+ background-color: #fcf8e3;
2218
  }
2219
+ .table-hover > tbody > tr > td.warning:hover,
2220
+ .table-hover > tbody > tr > th.warning:hover,
2221
+ .table-hover > tbody > tr.warning:hover > td,
2222
+ .table-hover > tbody > tr:hover > .warning,
2223
+ .table-hover > tbody > tr.warning:hover > th {
2224
+ background-color: #faf2cc;
2225
  }
2226
+ .table > thead > tr > td.danger,
2227
+ .table > tbody > tr > td.danger,
2228
+ .table > tfoot > tr > td.danger,
2229
+ .table > thead > tr > th.danger,
2230
+ .table > tbody > tr > th.danger,
2231
+ .table > tfoot > tr > th.danger,
2232
+ .table > thead > tr.danger > td,
2233
+ .table > tbody > tr.danger > td,
2234
+ .table > tfoot > tr.danger > td,
2235
+ .table > thead > tr.danger > th,
2236
+ .table > tbody > tr.danger > th,
2237
+ .table > tfoot > tr.danger > th {
2238
+ background-color: #f2dede;
2239
  }
2240
+ .table-hover > tbody > tr > td.danger:hover,
2241
+ .table-hover > tbody > tr > th.danger:hover,
2242
+ .table-hover > tbody > tr.danger:hover > td,
2243
+ .table-hover > tbody > tr:hover > .danger,
2244
+ .table-hover > tbody > tr.danger:hover > th {
2245
+ background-color: #ebcccc;
2246
  }
2247
+ @media screen and (max-width: 767px) {
2248
+ .table-responsive {
2249
+ width: 100%;
2250
+ margin-bottom: 15px;
2251
+ overflow-x: auto;
2252
+ overflow-y: hidden;
2253
+ -webkit-overflow-scrolling: touch;
2254
+ -ms-overflow-style: -ms-autohiding-scrollbar;
2255
+ border: 1px solid #ddd;
2256
+ }
2257
+ .table-responsive > .table {
2258
+ margin-bottom: 0;
2259
+ }
2260
+ .table-responsive > .table > thead > tr > th,
2261
+ .table-responsive > .table > tbody > tr > th,
2262
+ .table-responsive > .table > tfoot > tr > th,
2263
+ .table-responsive > .table > thead > tr > td,
2264
+ .table-responsive > .table > tbody > tr > td,
2265
+ .table-responsive > .table > tfoot > tr > td {
2266
+ white-space: nowrap;
2267
+ }
2268
+ .table-responsive > .table-bordered {
2269
+ border: 0;
2270
+ }
2271
+ .table-responsive > .table-bordered > thead > tr > th:first-child,
2272
+ .table-responsive > .table-bordered > tbody > tr > th:first-child,
2273
+ .table-responsive > .table-bordered > tfoot > tr > th:first-child,
2274
+ .table-responsive > .table-bordered > thead > tr > td:first-child,
2275
+ .table-responsive > .table-bordered > tbody > tr > td:first-child,
2276
+ .table-responsive > .table-bordered > tfoot > tr > td:first-child {
2277
+ border-left: 0;
2278
+ }
2279
+ .table-responsive > .table-bordered > thead > tr > th:last-child,
2280
+ .table-responsive > .table-bordered > tbody > tr > th:last-child,
2281
+ .table-responsive > .table-bordered > tfoot > tr > th:last-child,
2282
+ .table-responsive > .table-bordered > thead > tr > td:last-child,
2283
+ .table-responsive > .table-bordered > tbody > tr > td:last-child,
2284
+ .table-responsive > .table-bordered > tfoot > tr > td:last-child {
2285
+ border-right: 0;
2286
+ }
2287
+ .table-responsive > .table-bordered > tbody > tr:last-child > th,
2288
+ .table-responsive > .table-bordered > tfoot > tr:last-child > th,
2289
+ .table-responsive > .table-bordered > tbody > tr:last-child > td,
2290
+ .table-responsive > .table-bordered > tfoot > tr:last-child > td {
2291
+ border-bottom: 0;
2292
+ }
2293
  }
2294
+ fieldset {
2295
+ min-width: 0;
2296
+ padding: 0;
2297
+ margin: 0;
2298
+ border: 0;
2299
  }
2300
+ legend {
2301
+ display: block;
2302
+ width: 100%;
2303
+ padding: 0;
2304
+ margin-bottom: 20px;
2305
+ font-size: 21px;
2306
+ line-height: inherit;
2307
+ color: #333;
2308
+ border: 0;
2309
+ border-bottom: 1px solid #e5e5e5;
2310
  }
2311
+ label {
2312
+ display: inline-block;
2313
+ max-width: 100%;
2314
+ margin-bottom: 5px;
2315
+ font-weight: bold;
2316
  }
2317
+ input[type="search"] {
2318
+ -webkit-box-sizing: border-box;
2319
+ -moz-box-sizing: border-box;
2320
+ box-sizing: border-box;
2321
  }
2322
+ input[type="radio"],
2323
+ input[type="checkbox"] {
2324
+ margin: 4px 0 0;
2325
+ margin-top: 1px \9;
2326
+ line-height: normal;
2327
  }
2328
+ input[type="file"] {
2329
+ display: block;
2330
  }
2331
+ input[type="range"] {
2332
+ display: block;
2333
+ width: 100%;
2334
  }
2335
+ select[multiple],
2336
+ select[size] {
2337
+ height: auto;
2338
  }
2339
+ input[type="file"]:focus,
2340
+ input[type="radio"]:focus,
2341
+ input[type="checkbox"]:focus {
2342
+ outline: thin dotted;
2343
+ outline: 5px auto -webkit-focus-ring-color;
2344
+ outline-offset: -2px;
2345
  }
2346
+ output {
2347
+ display: block;
2348
+ padding-top: 7px;
2349
+ font-size: 14px;
2350
+ line-height: 1.42857143;
2351
+ color: #555;
2352
  }
2353
+ .form-control {
2354
+ display: block;
2355
+ width: 100%;
2356
+ height: 34px;
2357
+ padding: 6px 12px;
2358
+ font-size: 14px;
2359
+ line-height: 1.42857143;
2360
+ color: #555;
2361
+ background-color: #fff;
2362
+ background-image: none;
2363
+ border: 1px solid #ccc;
2364
+ border-radius: 4px;
2365
+ -webkit-box-shadow: inset 0 1px 1px rgba(0, 0, 0, .075);
2366
+ box-shadow: inset 0 1px 1px rgba(0, 0, 0, .075);
2367
+ -webkit-transition: border-color ease-in-out .15s, -webkit-box-shadow ease-in-out .15s;
2368
+ -o-transition: border-color ease-in-out .15s, box-shadow ease-in-out .15s;
2369
+ transition: border-color ease-in-out .15s, box-shadow ease-in-out .15s;
2370
  }
2371
+ .form-control:focus {
2372
+ border-color: #66afe9;
2373
+ outline: 0;
2374
+ -webkit-box-shadow: inset 0 1px 1px rgba(0,0,0,.075), 0 0 8px rgba(102, 175, 233, .6);
2375
+ box-shadow: inset 0 1px 1px rgba(0,0,0,.075), 0 0 8px rgba(102, 175, 233, .6);
2376
  }
2377
+ .form-control::-moz-placeholder {
2378
+ color: #777;
2379
+ opacity: 1;
2380
  }
2381
+ .form-control:-ms-input-placeholder {
2382
+ color: #777;
2383
  }
2384
+ .form-control::-webkit-input-placeholder {
2385
+ color: #777;
2386
  }
2387
+ .form-control[disabled],
2388
+ .form-control[readonly],
2389
+ fieldset[disabled] .form-control {
2390
+ cursor: not-allowed;
2391
+ background-color: #eee;
2392
+ opacity: 1;
2393
  }
2394
+ textarea.form-control {
2395
+ height: auto;
2396
  }
2397
+ input[type="search"] {
2398
+ -webkit-appearance: none;
2399
  }
2400
+ input[type="date"],
2401
+ input[type="time"],
2402
+ input[type="datetime-local"],
2403
+ input[type="month"] {
2404
+ line-height: 34px;
2405
+ line-height: 1.42857143 \0;
2406
  }
2407
+ input[type="date"].input-sm,
2408
+ input[type="time"].input-sm,
2409
+ input[type="datetime-local"].input-sm,
2410
+ input[type="month"].input-sm {
2411
+ line-height: 30px;
2412
  }
2413
+ input[type="date"].input-lg,
2414
+ input[type="time"].input-lg,
2415
+ input[type="datetime-local"].input-lg,
2416
+ input[type="month"].input-lg {
2417
+ line-height: 46px;
2418
  }
2419
+ .form-group {
2420
+ margin-bottom: 15px;
2421
  }
2422
+ .radio,
2423
+ .checkbox {
2424
+ position: relative;
2425
+ display: block;
2426
+ min-height: 20px;
2427
+ margin-top: 10px;
2428
+ margin-bottom: 10px;
2429
  }
2430
+ .radio label,
2431
+ .checkbox label {
2432
+ padding-left: 20px;
2433
+ margin-bottom: 0;
2434
+ font-weight: normal;
2435
+ cursor: pointer;
2436
  }
2437
+ .radio input[type="radio"],
2438
+ .radio-inline input[type="radio"],
2439
+ .checkbox input[type="checkbox"],
2440
+ .checkbox-inline input[type="checkbox"] {
2441
+ position: absolute;
2442
+ margin-top: 4px \9;
2443
+ margin-left: -20px;
2444
  }
2445
+ .radio + .radio,
2446
+ .checkbox + .checkbox {
2447
+ margin-top: -5px;
2448
  }
2449
+ .radio-inline,
2450
+ .checkbox-inline {
2451
+ display: inline-block;
2452
+ padding-left: 20px;
2453
+ margin-bottom: 0;
2454
+ font-weight: normal;
2455
+ vertical-align: middle;
2456
+ cursor: pointer;
2457
  }
2458
+ .radio-inline + .radio-inline,
2459
+ .checkbox-inline + .checkbox-inline {
2460
+ margin-top: 0;
2461
+ margin-left: 10px;
2462
  }
2463
+ input[type="radio"][disabled],
2464
+ input[type="checkbox"][disabled],
2465
+ input[type="radio"].disabled,
2466
+ input[type="checkbox"].disabled,
2467
+ fieldset[disabled] input[type="radio"],
2468
+ fieldset[disabled] input[type="checkbox"] {
2469
+ cursor: not-allowed;
2470
  }
2471
+ .radio-inline.disabled,
2472
+ .checkbox-inline.disabled,
2473
+ fieldset[disabled] .radio-inline,
2474
+ fieldset[disabled] .checkbox-inline {
2475
+ cursor: not-allowed;
2476
  }
2477
+ .radio.disabled label,
2478
+ .checkbox.disabled label,
2479
+ fieldset[disabled] .radio label,
2480
+ fieldset[disabled] .checkbox label {
2481
+ cursor: not-allowed;
2482
  }
2483
+ .form-control-static {
2484
+ padding-top: 7px;
2485
+ padding-bottom: 7px;
2486
+ margin-bottom: 0;
2487
  }
2488
+ .form-control-static.input-lg,
2489
+ .form-control-static.input-sm {
2490
+ padding-right: 0;
2491
+ padding-left: 0;
2492
  }
2493
+ .input-sm,
2494
+ .form-horizontal .form-group-sm .form-control {
2495
+ height: 30px;
2496
+ padding: 5px 10px;
2497
+ font-size: 12px;
2498
+ line-height: 1.5;
2499
+ border-radius: 3px;
2500
  }
2501
+ select.input-sm {
2502
+ height: 30px;
2503
+ line-height: 30px;
2504
  }
2505
+ textarea.input-sm,
2506
+ select[multiple].input-sm {
2507
+ height: auto;
2508
  }
2509
+ .input-lg,
2510
+ .form-horizontal .form-group-lg .form-control {
2511
+ height: 46px;
2512
+ padding: 10px 16px;
2513
+ font-size: 18px;
2514
+ line-height: 1.33;
2515
+ border-radius: 6px;
2516
  }
2517
+ select.input-lg {
2518
+ height: 46px;
2519
+ line-height: 46px;
2520
  }
2521
+ textarea.input-lg,
2522
+ select[multiple].input-lg {
2523
+ height: auto;
2524
  }
2525
+ .has-feedback {
2526
+ position: relative;
2527
  }
2528
+ .has-feedback .form-control {
2529
+ padding-right: 42.5px;
2530
  }
2531
+ .form-control-feedback {
2532
+ position: absolute;
2533
+ top: 25px;
2534
+ right: 0;
2535
+ z-index: 2;
2536
+ display: block;
2537
+ width: 34px;
2538
+ height: 34px;
2539
+ line-height: 34px;
2540
+ text-align: center;
2541
  }
2542
+ .input-lg + .form-control-feedback {
2543
+ width: 46px;
2544
+ height: 46px;
2545
+ line-height: 46px;
2546
  }
2547
+ .input-sm + .form-control-feedback {
2548
+ width: 30px;
2549
+ height: 30px;
2550
+ line-height: 30px;
2551
  }
2552
+ .has-success .help-block,
2553
+ .has-success .control-label,
2554
+ .has-success .radio,
2555
+ .has-success .checkbox,
2556
+ .has-success .radio-inline,
2557
+ .has-success .checkbox-inline {
2558
+ color: #3c763d;
2559
  }
2560
+ .has-success .form-control {
2561
+ border-color: #3c763d;
2562
+ -webkit-box-shadow: inset 0 1px 1px rgba(0, 0, 0, .075);
2563
+ box-shadow: inset 0 1px 1px rgba(0, 0, 0, .075);
2564
  }
2565
+ .has-success .form-control:focus {
2566
+ border-color: #2b542c;
2567
+ -webkit-box-shadow: inset 0 1px 1px rgba(0, 0, 0, .075), 0 0 6px #67b168;
2568
+ box-shadow: inset 0 1px 1px rgba(0, 0, 0, .075), 0 0 6px #67b168;
2569
  }
2570
+ .has-success .input-group-addon {
2571
+ color: #3c763d;
2572
+ background-color: #dff0d8;
2573
+ border-color: #3c763d;
2574
  }
2575
+ .has-success .form-control-feedback {
2576
+ color: #3c763d;
2577
  }
2578
+ .has-warning .help-block,
2579
+ .has-warning .control-label,
2580
+ .has-warning .radio,
2581
+ .has-warning .checkbox,
2582
+ .has-warning .radio-inline,
2583
+ .has-warning .checkbox-inline {
2584
+ color: #8a6d3b;
2585
  }
2586
+ .has-warning .form-control {
2587
+ border-color: #8a6d3b;
2588
+ -webkit-box-shadow: inset 0 1px 1px rgba(0, 0, 0, .075);
2589
+ box-shadow: inset 0 1px 1px rgba(0, 0, 0, .075);
2590
  }
2591
+ .has-warning .form-control:focus {
2592
+ border-color: #66512c;
2593
+ -webkit-box-shadow: inset 0 1px 1px rgba(0, 0, 0, .075), 0 0 6px #c0a16b;
2594
+ box-shadow: inset 0 1px 1px rgba(0, 0, 0, .075), 0 0 6px #c0a16b;
2595
  }
2596
+ .has-warning .input-group-addon {
2597
+ color: #8a6d3b;
2598
+ background-color: #fcf8e3;
2599
+ border-color: #8a6d3b;
2600
  }
2601
+ .has-warning .form-control-feedback {
2602
+ color: #8a6d3b;
2603
  }
2604
+ .has-error .help-block,
2605
+ .has-error .control-label,
2606
+ .has-error .radio,
2607
+ .has-error .checkbox,
2608
+ .has-error .radio-inline,
2609
+ .has-error .checkbox-inline {
2610
+ color: #a94442;
2611
  }
2612
+ .has-error .form-control {
2613
+ border-color: #a94442;
2614
+ -webkit-box-shadow: inset 0 1px 1px rgba(0, 0, 0, .075);
2615
+ box-shadow: inset 0 1px 1px rgba(0, 0, 0, .075);
2616
  }
2617
+ .has-error .form-control:focus {
2618
+ border-color: #843534;
2619
+ -webkit-box-shadow: inset 0 1px 1px rgba(0, 0, 0, .075), 0 0 6px #ce8483;
2620
+ box-shadow: inset 0 1px 1px rgba(0, 0, 0, .075), 0 0 6px #ce8483;
2621
  }
2622
+ .has-error .input-group-addon {
2623
+ color: #a94442;
2624
+ background-color: #f2dede;
2625
+ border-color: #a94442;
2626
  }
2627
+ .has-error .form-control-feedback {
2628
+ color: #a94442;
2629
  }
2630
+ .has-feedback label.sr-only ~ .form-control-feedback {
2631
+ top: 0;
2632
  }
2633
+ .help-block {
2634
+ display: block;
2635
+ margin-top: 5px;
2636
+ margin-bottom: 10px;
2637
+ color: #737373;
2638
+ }
2639
+ @media (min-width: 768px) {
2640
+ .form-inline .form-group {
2641
+ display: inline-block;
2642
+ margin-bottom: 0;
2643
+ vertical-align: middle;
2644
+ }
2645
+ .form-inline .form-control {
2646
+ display: inline-block;
2647
+ width: auto;
2648
+ vertical-align: middle;
2649
+ }
2650
+ .form-inline .input-group {
2651
+ display: inline-table;
2652
+ vertical-align: middle;
2653
+ }
2654
+ .form-inline .input-group .input-group-addon,
2655
+ .form-inline .input-group .input-group-btn,
2656
+ .form-inline .input-group .form-control {
2657
+ width: auto;
2658
+ }
2659
+ .form-inline .input-group > .form-control {
2660
+ width: 100%;
2661
+ }
2662
+ .form-inline .control-label {
2663
+ margin-bottom: 0;
2664
+ vertical-align: middle;
2665
+ }
2666
+ .form-inline .radio,
2667
+ .form-inline .checkbox {
2668
+ display: inline-block;
2669
+ margin-top: 0;
2670
+ margin-bottom: 0;
2671
+ vertical-align: middle;
2672
+ }
2673
+ .form-inline .radio label,
2674
+ .form-inline .checkbox label {
2675
+ padding-left: 0;
2676
+ }
2677
+ .form-inline .radio input[type="radio"],
2678
+ .form-inline .checkbox input[type="checkbox"] {
2679
+ position: relative;
2680
+ margin-left: 0;
2681
+ }
2682
+ .form-inline .has-feedback .form-control-feedback {
2683
+ top: 0;
2684
+ }
2685
  }
2686
+ .form-horizontal .radio,
2687
+ .form-horizontal .checkbox,
2688
+ .form-horizontal .radio-inline,
2689
+ .form-horizontal .checkbox-inline {
2690
+ padding-top: 7px;
2691
+ margin-top: 0;
2692
+ margin-bottom: 0;
2693
  }
2694
+ .form-horizontal .radio,
2695
+ .form-horizontal .checkbox {
2696
+ min-height: 27px;
2697
  }
2698
+ .form-horizontal .form-group {
2699
+ margin-right: -15px;
2700
+ margin-left: -15px;
2701
  }
2702
+ @media (min-width: 768px) {
2703
+ .form-horizontal .control-label {
2704
+ padding-top: 7px;
2705
+ margin-bottom: 0;
2706
+ text-align: right;
2707
+ }
2708
  }
2709
+ .form-horizontal .has-feedback .form-control-feedback {
2710
+ top: 0;
2711
+ right: 15px;
2712
  }
2713
+ @media (min-width: 768px) {
2714
+ .form-horizontal .form-group-lg .control-label {
2715
+ padding-top: 14.3px;
2716
+ }
2717
  }
2718
+ @media (min-width: 768px) {
2719
+ .form-horizontal .form-group-sm .control-label {
2720
+ padding-top: 6px;
2721
+ }
2722
  }
2723
+ .btn {
2724
+ display: inline-block;
2725
+ padding: 6px 12px;
2726
+ margin-bottom: 0;
2727
+ font-size: 14px;
2728
+ font-weight: normal;
2729
+ line-height: 1.42857143;
2730
+ text-align: center;
2731
+ white-space: nowrap;
2732
+ vertical-align: middle;
2733
+ cursor: pointer;
2734
+ -webkit-user-select: none;
2735
+ -moz-user-select: none;
2736
+ -ms-user-select: none;
2737
+ user-select: none;
2738
+ background-image: none;
2739
+ border: 1px solid transparent;
2740
+ border-radius: 4px;
2741
  }
2742
+ .btn:focus,
2743
+ .btn:active:focus,
2744
+ .btn.active:focus {
2745
+ outline: thin dotted;
2746
+ outline: 5px auto -webkit-focus-ring-color;
2747
+ outline-offset: -2px;
2748
  }
2749
+ .btn:hover,
2750
+ .btn:focus {
2751
+ color: #333;
2752
+ text-decoration: none;
2753
  }
2754
+ .btn:active,
2755
+ .btn.active {
2756
+ background-image: none;
2757
+ outline: 0;
2758
+ -webkit-box-shadow: inset 0 3px 5px rgba(0, 0, 0, .125);
2759
+ box-shadow: inset 0 3px 5px rgba(0, 0, 0, .125);
2760
  }
2761
+ .btn.disabled,
2762
+ .btn[disabled],
2763
+ fieldset[disabled] .btn {
2764
+ pointer-events: none;
2765
+ cursor: not-allowed;
2766
+ filter: alpha(opacity=65);
2767
+ -webkit-box-shadow: none;
2768
+ box-shadow: none;
2769
+ opacity: .65;
2770
  }
2771
+ .btn-default {
2772
+ color: #333;
2773
+ background-color: #fff;
2774
+ border-color: #ccc;
2775
  }
2776
+ .btn-default:hover,
2777
+ .btn-default:focus,
2778
+ .btn-default:active,
2779
+ .btn-default.active,
2780
+ .open > .dropdown-toggle.btn-default {
2781
+ color: #333;
2782
+ background-color: #e6e6e6;
2783
+ border-color: #adadad;
2784
  }
2785
+ .btn-default:active,
2786
+ .btn-default.active,
2787
+ .open > .dropdown-toggle.btn-default {
2788
+ background-image: none;
2789
  }
2790
+ .btn-default.disabled,
2791
+ .btn-default[disabled],
2792
+ fieldset[disabled] .btn-default,
2793
+ .btn-default.disabled:hover,
2794
+ .btn-default[disabled]:hover,
2795
+ fieldset[disabled] .btn-default:hover,
2796
+ .btn-default.disabled:focus,
2797
+ .btn-default[disabled]:focus,
2798
+ fieldset[disabled] .btn-default:focus,
2799
+ .btn-default.disabled:active,
2800
+ .btn-default[disabled]:active,
2801
+ fieldset[disabled] .btn-default:active,
2802
+ .btn-default.disabled.active,
2803
+ .btn-default[disabled].active,
2804
+ fieldset[disabled] .btn-default.active {
2805
+ background-color: #fff;
2806
+ border-color: #ccc;
2807
  }
2808
+ .btn-default .badge {
2809
+ color: #fff;
2810
+ background-color: #333;
2811
  }
2812
+ .btn-primary {
2813
+ color: #fff;
2814
+ background-color: #428bca;
2815
+ border-color: #357ebd;
2816
  }
2817
+ .btn-primary:hover,
2818
+ .btn-primary:focus,
2819
+ .btn-primary:active,
2820
+ .btn-primary.active,
2821
+ .open > .dropdown-toggle.btn-primary {
2822
+ color: #fff;
2823
+ background-color: #3071a9;
2824
+ border-color: #285e8e;
2825
  }
2826
+ .btn-primary:active,
2827
+ .btn-primary.active,
2828
+ .open > .dropdown-toggle.btn-primary {
2829
+ background-image: none;
2830
  }
2831
+ .btn-primary.disabled,
2832
+ .btn-primary[disabled],
2833
+ fieldset[disabled] .btn-primary,
2834
+ .btn-primary.disabled:hover,
2835
+ .btn-primary[disabled]:hover,
2836
+ fieldset[disabled] .btn-primary:hover,
2837
+ .btn-primary.disabled:focus,
2838
+ .btn-primary[disabled]:focus,
2839
+ fieldset[disabled] .btn-primary:focus,
2840
+ .btn-primary.disabled:active,
2841
+ .btn-primary[disabled]:active,
2842
+ fieldset[disabled] .btn-primary:active,
2843
+ .btn-primary.disabled.active,
2844
+ .btn-primary[disabled].active,
2845
+ fieldset[disabled] .btn-primary.active {
2846
+ background-color: #428bca;
2847
+ border-color: #357ebd;
2848
  }
2849
+ .btn-primary .badge {
2850
+ color: #428bca;
2851
+ background-color: #fff;
2852
  }
2853
+ .btn-success {
2854
+ color: #fff;
2855
+ background-color: #5cb85c;
2856
+ border-color: #4cae4c;
2857
  }
2858
+ .btn-success:hover,
2859
+ .btn-success:focus,
2860
+ .btn-success:active,
2861
+ .btn-success.active,
2862
+ .open > .dropdown-toggle.btn-success {
2863
+ color: #fff;
2864
+ background-color: #449d44;
2865
+ border-color: #398439;
2866
  }
2867
+ .btn-success:active,
2868
+ .btn-success.active,
2869
+ .open > .dropdown-toggle.btn-success {
2870
+ background-image: none;
2871
  }
2872
+ .btn-success.disabled,
2873
+ .btn-success[disabled],
2874
+ fieldset[disabled] .btn-success,
2875
+ .btn-success.disabled:hover,
2876
+ .btn-success[disabled]:hover,
2877
+ fieldset[disabled] .btn-success:hover,
2878
+ .btn-success.disabled:focus,
2879
+ .btn-success[disabled]:focus,
2880
+ fieldset[disabled] .btn-success:focus,
2881
+ .btn-success.disabled:active,
2882
+ .btn-success[disabled]:active,
2883
+ fieldset[disabled] .btn-success:active,
2884
+ .btn-success.disabled.active,
2885
+ .btn-success[disabled].active,
2886
+ fieldset[disabled] .btn-success.active {
2887
+ background-color: #5cb85c;
2888
+ border-color: #4cae4c;
2889
  }
2890
+ .btn-success .badge {
2891
+ color: #5cb85c;
2892
+ background-color: #fff;
2893
  }
2894
+ .btn-info {
2895
+ color: #fff;
2896
+ background-color: #5bc0de;
2897
+ border-color: #46b8da;
2898
  }
2899
+ .btn-info:hover,
2900
+ .btn-info:focus,
2901
+ .btn-info:active,
2902
+ .btn-info.active,
2903
+ .open > .dropdown-toggle.btn-info {
2904
+ color: #fff;
2905
+ background-color: #31b0d5;
2906
+ border-color: #269abc;
2907
  }
2908
+ .btn-info:active,
2909
+ .btn-info.active,
2910
+ .open > .dropdown-toggle.btn-info {
2911
+ background-image: none;
2912
  }
2913
+ .btn-info.disabled,
2914
+ .btn-info[disabled],
2915
+ fieldset[disabled] .btn-info,
2916
+ .btn-info.disabled:hover,
2917
+ .btn-info[disabled]:hover,
2918
+ fieldset[disabled] .btn-info:hover,
2919
+ .btn-info.disabled:focus,
2920
+ .btn-info[disabled]:focus,
2921
+ fieldset[disabled] .btn-info:focus,
2922
+ .btn-info.disabled:active,
2923
+ .btn-info[disabled]:active,
2924
+ fieldset[disabled] .btn-info:active,
2925
+ .btn-info.disabled.active,
2926
+ .btn-info[disabled].active,
2927
+ fieldset[disabled] .btn-info.active {
2928
+ background-color: #5bc0de;
2929
+ border-color: #46b8da;
2930
  }
2931
+ .btn-info .badge {
2932
+ color: #5bc0de;
2933
+ background-color: #fff;
2934
  }
2935
+ .btn-warning {
2936
+ color: #fff;
2937
+ background-color: #f0ad4e;
2938
+ border-color: #eea236;
2939
  }
2940
+ .btn-warning:hover,
2941
+ .btn-warning:focus,
2942
+ .btn-warning:active,
2943
+ .btn-warning.active,
2944
+ .open > .dropdown-toggle.btn-warning {
2945
+ color: #fff;
2946
+ background-color: #ec971f;
2947
+ border-color: #d58512;
2948
  }
2949
+ .btn-warning:active,
2950
+ .btn-warning.active,
2951
+ .open > .dropdown-toggle.btn-warning {
2952
+ background-image: none;
2953
  }
2954
+ .btn-warning.disabled,
2955
+ .btn-warning[disabled],
2956
+ fieldset[disabled] .btn-warning,
2957
+ .btn-warning.disabled:hover,
2958
+ .btn-warning[disabled]:hover,
2959
+ fieldset[disabled] .btn-warning:hover,
2960
+ .btn-warning.disabled:focus,
2961
+ .btn-warning[disabled]:focus,
2962
+ fieldset[disabled] .btn-warning:focus,
2963
+ .btn-warning.disabled:active,
2964
+ .btn-warning[disabled]:active,
2965
+ fieldset[disabled] .btn-warning:active,
2966
+ .btn-warning.disabled.active,
2967
+ .btn-warning[disabled].active,
2968
+ fieldset[disabled] .btn-warning.active {
2969
+ background-color: #f0ad4e;
2970
+ border-color: #eea236;
2971
  }
2972
+ .btn-warning .badge {
2973
+ color: #f0ad4e;
2974
+ background-color: #fff;
2975
  }
2976
+ .btn-danger {
2977
+ color: #fff;
2978
+ background-color: #d9534f;
2979
+ border-color: #d43f3a;
2980
  }
2981
+ .btn-danger:hover,
2982
+ .btn-danger:focus,
2983
+ .btn-danger:active,
2984
+ .btn-danger.active,
2985
+ .open > .dropdown-toggle.btn-danger {
2986
+ color: #fff;
2987
+ background-color: #c9302c;
2988
+ border-color: #ac2925;
2989
  }
2990
+ .btn-danger:active,
2991
+ .btn-danger.active,
2992
+ .open > .dropdown-toggle.btn-danger {
2993
+ background-image: none;
2994
  }
2995
+ .btn-danger.disabled,
2996
+ .btn-danger[disabled],
2997
+ fieldset[disabled] .btn-danger,
2998
+ .btn-danger.disabled:hover,
2999
+ .btn-danger[disabled]:hover,
3000
+ fieldset[disabled] .btn-danger:hover,
3001
+ .btn-danger.disabled:focus,
3002
+ .btn-danger[disabled]:focus,
3003
+ fieldset[disabled] .btn-danger:focus,
3004
+ .btn-danger.disabled:active,
3005
+ .btn-danger[disabled]:active,
3006
+ fieldset[disabled] .btn-danger:active,
3007
+ .btn-danger.disabled.active,
3008
+ .btn-danger[disabled].active,
3009
+ fieldset[disabled] .btn-danger.active {
3010
+ background-color: #d9534f;
3011
+ border-color: #d43f3a;
3012
  }
3013
+ .btn-danger .badge {
3014
+ color: #d9534f;
3015
+ background-color: #fff;
3016
  }
3017
+ .btn-link {
3018
+ font-weight: normal;
3019
+ color: #428bca;
3020
+ cursor: pointer;
3021
+ border-radius: 0;
3022
  }
3023
+ .btn-link,
3024
+ .btn-link:active,
3025
+ .btn-link[disabled],
3026
+ fieldset[disabled] .btn-link {
3027
+ background-color: transparent;
3028
+ -webkit-box-shadow: none;
3029
+ box-shadow: none;
3030
  }
3031
+ .btn-link,
3032
+ .btn-link:hover,
3033
+ .btn-link:focus,
3034
+ .btn-link:active {
3035
+ border-color: transparent;
3036
  }
3037
+ .btn-link:hover,
3038
+ .btn-link:focus {
3039
+ color: #2a6496;
3040
+ text-decoration: underline;
3041
+ background-color: transparent;
3042
  }
3043
+ .btn-link[disabled]:hover,
3044
+ fieldset[disabled] .btn-link:hover,
3045
+ .btn-link[disabled]:focus,
3046
+ fieldset[disabled] .btn-link:focus {
3047
+ color: #777;
3048
+ text-decoration: none;
3049
  }
3050
+ .btn-lg,
3051
+ .btn-group-lg > .btn {
3052
+ padding: 10px 16px;
3053
+ font-size: 18px;
3054
+ line-height: 1.33;
3055
+ border-radius: 6px;
3056
  }
3057
+ .btn-sm,
3058
+ .btn-group-sm > .btn {
3059
+ padding: 5px 10px;
3060
+ font-size: 12px;
3061
+ line-height: 1.5;
3062
+ border-radius: 3px;
3063
  }
3064
+ .btn-xs,
3065
+ .btn-group-xs > .btn {
3066
+ padding: 1px 5px;
3067
+ font-size: 12px;
3068
+ line-height: 1.5;
3069
+ border-radius: 3px;
3070
  }
3071
+ .btn-block {
3072
+ display: block;
3073
+ width: 100%;
3074
  }
3075
+ .btn-block + .btn-block {
3076
+ margin-top: 5px;
3077
  }
3078
+ input[type="submit"].btn-block,
3079
+ input[type="reset"].btn-block,
3080
+ input[type="button"].btn-block {
3081
+ width: 100%;
3082
  }
3083
+ .fade {
3084
+ opacity: 0;
3085
+ -webkit-transition: opacity .15s linear;
3086
+ -o-transition: opacity .15s linear;
3087
+ transition: opacity .15s linear;
3088
  }
3089
+ .fade.in {
3090
+ opacity: 1;
3091
  }
3092
+ .collapse {
3093
+ display: none;
3094
  }
3095
+ .collapse.in {
3096
+ display: block;
3097
  }
3098
+ tr.collapse.in {
3099
+ display: table-row;
3100
  }
3101
+ tbody.collapse.in {
3102
+ display: table-row-group;
3103
  }
3104
+ .collapsing {
3105
+ position: relative;
3106
+ height: 0;
3107
+ overflow: hidden;
3108
+ -webkit-transition: height .35s ease;
3109
+ -o-transition: height .35s ease;
3110
+ transition: height .35s ease;
3111
  }
3112
  .caret {
3113
  display: inline-block;
3136
  padding: 5px 0;
3137
  margin: 2px 0 0;
3138
  font-size: 14px;
3139
+ text-align: left;
3140
  list-style: none;
3141
  background-color: #fff;
3142
+ -webkit-background-clip: padding-box;
3143
+ background-clip: padding-box;
3144
  border: 1px solid #ccc;
3145
  border: 1px solid rgba(0, 0, 0, .15);
3146
  border-radius: 4px;
3162
  padding: 3px 20px;
3163
  clear: both;
3164
  font-weight: normal;
3165
+ line-height: 1.42857143;
3166
  color: #333;
3167
  white-space: nowrap;
3168
  }
3183
  .dropdown-menu > .disabled > a,
3184
  .dropdown-menu > .disabled > a:hover,
3185
  .dropdown-menu > .disabled > a:focus {
3186
+ color: #777;
3187
  }
3188
  .dropdown-menu > .disabled > a:hover,
3189
  .dropdown-menu > .disabled > a:focus {
3211
  display: block;
3212
  padding: 3px 20px;
3213
  font-size: 12px;
3214
+ line-height: 1.42857143;
3215
+ color: #777;
3216
+ white-space: nowrap;
3217
  }
3218
  .dropdown-backdrop {
3219
  position: fixed;
3272
  }
3273
  .btn-group > .btn:focus,
3274
  .btn-group-vertical > .btn:focus {
3275
+ outline: 0;
3276
  }
3277
  .btn-group .btn + .btn,
3278
  .btn-group .btn + .btn-group,
3326
  .btn-group.open .dropdown-toggle {
3327
  outline: 0;
3328
  }
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
3329
  .btn-group > .btn + .dropdown-toggle {
3330
  padding-right: 8px;
3331
  padding-left: 8px;
3410
  .btn-group-justified > .btn-group .btn {
3411
  width: 100%;
3412
  }
3413
+ .btn-group-justified > .btn-group .dropdown-menu {
3414
+ left: auto;
3415
+ }
3416
  [data-toggle="buttons"] > .btn > input[type="radio"],
3417
  [data-toggle="buttons"] > .btn > input[type="checkbox"] {
3418
+ position: absolute;
3419
+ z-index: -1;
3420
+ filter: alpha(opacity=0);
3421
+ opacity: 0;
3422
  }
3423
  .input-group {
3424
  position: relative;
3431
  padding-left: 0;
3432
  }
3433
  .input-group .form-control {
3434
+ position: relative;
3435
+ z-index: 2;
3436
  float: left;
3437
  width: 100%;
3438
  margin-bottom: 0;
3594
  background-color: #eee;
3595
  }
3596
  .nav > li.disabled > a {
3597
+ color: #777;
3598
  }
3599
  .nav > li.disabled > a:hover,
3600
  .nav > li.disabled > a:focus {
3601
+ color: #777;
3602
  text-decoration: none;
3603
  cursor: not-allowed;
3604
  background-color: transparent;
3627
  }
3628
  .nav-tabs > li > a {
3629
  margin-right: 2px;
3630
+ line-height: 1.42857143;
3631
  border: 1px solid transparent;
3632
  border-radius: 4px 4px 0 0;
3633
  }
3783
  }
3784
  }
3785
  .navbar-collapse {
 
3786
  padding-right: 15px;
3787
  padding-left: 15px;
3788
  overflow-x: visible;
3789
  -webkit-overflow-scrolling: touch;
3790
  border-top: 1px solid transparent;
3791
+ -webkit-box-shadow: inset 0 1px 0 rgba(255, 255, 255, .1);
3792
+ box-shadow: inset 0 1px 0 rgba(255, 255, 255, .1);
3793
  }
3794
  .navbar-collapse.in {
3795
  overflow-y: auto;
3798
  .navbar-collapse {
3799
  width: auto;
3800
  border-top: 0;
3801
+ -webkit-box-shadow: none;
3802
+ box-shadow: none;
3803
  }
3804
  .navbar-collapse.collapse {
3805
  display: block !important;
3817
  padding-left: 0;
3818
  }
3819
  }
3820
+ .navbar-fixed-top .navbar-collapse,
3821
+ .navbar-fixed-bottom .navbar-collapse {
3822
+ max-height: 340px;
3823
+ }
3824
+ @media (max-width: 480px) and (orientation: landscape) {
3825
+ .navbar-fixed-top .navbar-collapse,
3826
+ .navbar-fixed-bottom .navbar-collapse {
3827
+ max-height: 200px;
3828
+ }
3829
+ }
3830
  .container > .navbar-header,
3831
  .container-fluid > .navbar-header,
3832
  .container > .navbar-collapse,
3858
  right: 0;
3859
  left: 0;
3860
  z-index: 1030;
3861
+ -webkit-transform: translate3d(0, 0, 0);
3862
+ -o-transform: translate3d(0, 0, 0);
3863
+ transform: translate3d(0, 0, 0);
3864
  }
3865
  @media (min-width: 768px) {
3866
  .navbar-fixed-top,
3879
  }
3880
  .navbar-brand {
3881
  float: left;
3882
+ height: 50px;
3883
  padding: 15px 15px;
3884
  font-size: 18px;
3885
  line-height: 20px;
3907
  border-radius: 4px;
3908
  }
3909
  .navbar-toggle:focus {
3910
+ outline: 0;
3911
  }
3912
  .navbar-toggle .icon-bar {
3913
  display: block;
3939
  margin-top: 0;
3940
  background-color: transparent;
3941
  border: 0;
3942
+ -webkit-box-shadow: none;
3943
+ box-shadow: none;
3944
  }
3945
  .navbar-nav .open .dropdown-menu > li > a,
3946
  .navbar-nav .open .dropdown-menu .dropdown-header {
4000
  width: auto;
4001
  vertical-align: middle;
4002
  }
4003
+ .navbar-form .input-group {
4004
+ display: inline-table;
4005
+ vertical-align: middle;
4006
+ }
4007
+ .navbar-form .input-group .input-group-addon,
4008
+ .navbar-form .input-group .input-group-btn,
4009
+ .navbar-form .input-group .form-control {
4010
+ width: auto;
4011
+ }
4012
+ .navbar-form .input-group > .form-control {
4013
+ width: 100%;
4014
+ }
4015
  .navbar-form .control-label {
4016
  margin-bottom: 0;
4017
  vertical-align: middle;
4019
  .navbar-form .radio,
4020
  .navbar-form .checkbox {
4021
  display: inline-block;
 
4022
  margin-top: 0;
4023
  margin-bottom: 0;
4024
  vertical-align: middle;
4025
  }
4026
+ .navbar-form .radio label,
4027
+ .navbar-form .checkbox label {
4028
+ padding-left: 0;
4029
+ }
4030
  .navbar-form .radio input[type="radio"],
4031
  .navbar-form .checkbox input[type="checkbox"] {
4032
+ position: relative;
4033
  margin-left: 0;
4034
  }
4035
  .navbar-form .has-feedback .form-control-feedback {
4174
  .navbar-default .navbar-link:hover {
4175
  color: #333;
4176
  }
4177
+ .navbar-default .btn-link {
4178
+ color: #777;
4179
+ }
4180
+ .navbar-default .btn-link:hover,
4181
+ .navbar-default .btn-link:focus {
4182
+ color: #333;
4183
+ }
4184
+ .navbar-default .btn-link[disabled]:hover,
4185
+ fieldset[disabled] .navbar-default .btn-link:hover,
4186
+ .navbar-default .btn-link[disabled]:focus,
4187
+ fieldset[disabled] .navbar-default .btn-link:focus {
4188
+ color: #ccc;
4189
+ }
4190
  .navbar-inverse {
4191
  background-color: #222;
4192
  border-color: #080808;
4193
  }
4194
  .navbar-inverse .navbar-brand {
4195
+ color: #777;
4196
  }
4197
  .navbar-inverse .navbar-brand:hover,
4198
  .navbar-inverse .navbar-brand:focus {
4200
  background-color: transparent;
4201
  }
4202
  .navbar-inverse .navbar-text {
4203
+ color: #777;
4204
  }
4205
  .navbar-inverse .navbar-nav > li > a {
4206
+ color: #777;
4207
  }
4208
  .navbar-inverse .navbar-nav > li > a:hover,
4209
  .navbar-inverse .navbar-nav > li > a:focus {
4250
  background-color: #080808;
4251
  }
4252
  .navbar-inverse .navbar-nav .open .dropdown-menu > li > a {
4253
+ color: #777;
4254
  }
4255
  .navbar-inverse .navbar-nav .open .dropdown-menu > li > a:hover,
4256
  .navbar-inverse .navbar-nav .open .dropdown-menu > li > a:focus {
4271
  }
4272
  }
4273
  .navbar-inverse .navbar-link {
4274
+ color: #777;
4275
  }
4276
  .navbar-inverse .navbar-link:hover {
4277
  color: #fff;
4278
  }
4279
+ .navbar-inverse .btn-link {
4280
+ color: #777;
4281
+ }
4282
+ .navbar-inverse .btn-link:hover,
4283
+ .navbar-inverse .btn-link:focus {
4284
+ color: #fff;
4285
+ }
4286
+ .navbar-inverse .btn-link[disabled]:hover,
4287
+ fieldset[disabled] .navbar-inverse .btn-link:hover,
4288
+ .navbar-inverse .btn-link[disabled]:focus,
4289
+ fieldset[disabled] .navbar-inverse .btn-link:focus {
4290
+ color: #444;
4291
+ }
4292
  .breadcrumb {
4293
  padding: 8px 15px;
4294
  margin-bottom: 20px;
4305
  content: "/\00a0";
4306
  }
4307
  .breadcrumb > .active {
4308
+ color: #777;
4309
  }
4310
  .pagination {
4311
  display: inline-block;
4322
  float: left;
4323
  padding: 6px 12px;
4324
  margin-left: -1px;
4325
+ line-height: 1.42857143;
4326
  color: #428bca;
4327
  text-decoration: none;
4328
  background-color: #fff;
4365
  .pagination > .disabled > a,
4366
  .pagination > .disabled > a:hover,
4367
  .pagination > .disabled > a:focus {
4368
+ color: #777;
4369
  cursor: not-allowed;
4370
  background-color: #fff;
4371
  border-color: #ddd;
4434
  .pager .disabled > a:hover,
4435
  .pager .disabled > a:focus,
4436
  .pager .disabled > span {
4437
+ color: #777;
4438
  cursor: not-allowed;
4439
  background-color: #fff;
4440
  }
4450
  vertical-align: baseline;
4451
  border-radius: .25em;
4452
  }
4453
+ a.label:hover,
4454
+ a.label:focus {
4455
  color: #fff;
4456
  text-decoration: none;
4457
  cursor: pointer;
4464
  top: -1px;
4465
  }
4466
  .label-default {
4467
+ background-color: #777;
4468
  }
4469
  .label-default[href]:hover,
4470
  .label-default[href]:focus {
4471
+ background-color: #5e5e5e;
4472
  }
4473
  .label-primary {
4474
  background-color: #428bca;
4516
  text-align: center;
4517
  white-space: nowrap;
4518
  vertical-align: baseline;
4519
+ background-color: #777;
4520
  border-radius: 10px;
4521
  }
4522
  .badge:empty {
4559
  font-size: 21px;
4560
  font-weight: 200;
4561
  }
4562
+ .jumbotron > hr {
4563
+ border-top-color: #d5d5d5;
4564
+ }
4565
  .container .jumbotron {
4566
  border-radius: 6px;
4567
  }
4586
  display: block;
4587
  padding: 4px;
4588
  margin-bottom: 20px;
4589
+ line-height: 1.42857143;
4590
  background-color: #fff;
4591
  border: 1px solid #ddd;
4592
  border-radius: 4px;
4593
  -webkit-transition: all .2s ease-in-out;
4594
+ -o-transition: all .2s ease-in-out;
4595
  transition: all .2s ease-in-out;
4596
  }
4597
  .thumbnail > img,
4598
  .thumbnail a > img {
 
 
 
4599
  margin-right: auto;
4600
  margin-left: auto;
4601
  }
4628
  .alert > p + p {
4629
  margin-top: 5px;
4630
  }
4631
+ .alert-dismissable,
4632
+ .alert-dismissible {
4633
  padding-right: 35px;
4634
  }
4635
+ .alert-dismissable .close,
4636
+ .alert-dismissible .close {
4637
  position: relative;
4638
  top: -2px;
4639
  right: -21px;
4691
  background-position: 0 0;
4692
  }
4693
  }
4694
+ @-o-keyframes progress-bar-stripes {
4695
+ from {
4696
+ background-position: 40px 0;
4697
+ }
4698
+ to {
4699
+ background-position: 0 0;
4700
+ }
4701
+ }
4702
  @keyframes progress-bar-stripes {
4703
  from {
4704
  background-position: 40px 0;
4728
  -webkit-box-shadow: inset 0 -1px 0 rgba(0, 0, 0, .15);
4729
  box-shadow: inset 0 -1px 0 rgba(0, 0, 0, .15);
4730
  -webkit-transition: width .6s ease;
4731
+ -o-transition: width .6s ease;
4732
  transition: width .6s ease;
4733
  }
4734
+ .progress-striped .progress-bar,
4735
+ .progress-bar-striped {
4736
  background-image: -webkit-linear-gradient(45deg, rgba(255, 255, 255, .15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, .15) 50%, rgba(255, 255, 255, .15) 75%, transparent 75%, transparent);
4737
+ background-image: -o-linear-gradient(45deg, rgba(255, 255, 255, .15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, .15) 50%, rgba(255, 255, 255, .15) 75%, transparent 75%, transparent);
4738
  background-image: linear-gradient(45deg, rgba(255, 255, 255, .15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, .15) 50%, rgba(255, 255, 255, .15) 75%, transparent 75%, transparent);
4739
+ -webkit-background-size: 40px 40px;
4740
+ background-size: 40px 40px;
4741
  }
4742
+ .progress.active .progress-bar,
4743
+ .progress-bar.active {
4744
  -webkit-animation: progress-bar-stripes 2s linear infinite;
4745
+ -o-animation: progress-bar-stripes 2s linear infinite;
4746
  animation: progress-bar-stripes 2s linear infinite;
4747
  }
4748
+ .progress-bar[aria-valuenow="1"],
4749
+ .progress-bar[aria-valuenow="2"] {
4750
+ min-width: 30px;
4751
+ }
4752
+ .progress-bar[aria-valuenow="0"] {
4753
+ min-width: 30px;
4754
+ color: #777;
4755
+ background-color: transparent;
4756
+ background-image: none;
4757
+ -webkit-box-shadow: none;
4758
+ box-shadow: none;
4759
+ }
4760
  .progress-bar-success {
4761
  background-color: #5cb85c;
4762
  }
4763
  .progress-striped .progress-bar-success {
4764
  background-image: -webkit-linear-gradient(45deg, rgba(255, 255, 255, .15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, .15) 50%, rgba(255, 255, 255, .15) 75%, transparent 75%, transparent);
4765
+ background-image: -o-linear-gradient(45deg, rgba(255, 255, 255, .15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, .15) 50%, rgba(255, 255, 255, .15) 75%, transparent 75%, transparent);
4766
  background-image: linear-gradient(45deg, rgba(255, 255, 255, .15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, .15) 50%, rgba(255, 255, 255, .15) 75%, transparent 75%, transparent);
4767
  }
4768
  .progress-bar-info {
4770
  }
4771
  .progress-striped .progress-bar-info {
4772
  background-image: -webkit-linear-gradient(45deg, rgba(255, 255, 255, .15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, .15) 50%, rgba(255, 255, 255, .15) 75%, transparent 75%, transparent);
4773
+ background-image: -o-linear-gradient(45deg, rgba(255, 255, 255, .15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, .15) 50%, rgba(255, 255, 255, .15) 75%, transparent 75%, transparent);
4774
  background-image: linear-gradient(45deg, rgba(255, 255, 255, .15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, .15) 50%, rgba(255, 255, 255, .15) 75%, transparent 75%, transparent);
4775
  }
4776
  .progress-bar-warning {
4778
  }
4779
  .progress-striped .progress-bar-warning {
4780
  background-image: -webkit-linear-gradient(45deg, rgba(255, 255, 255, .15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, .15) 50%, rgba(255, 255, 255, .15) 75%, transparent 75%, transparent);
4781
+ background-image: -o-linear-gradient(45deg, rgba(255, 255, 255, .15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, .15) 50%, rgba(255, 255, 255, .15) 75%, transparent 75%, transparent);
4782
  background-image: linear-gradient(45deg, rgba(255, 255, 255, .15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, .15) 50%, rgba(255, 255, 255, .15) 75%, transparent 75%, transparent);
4783
  }
4784
  .progress-bar-danger {
4786
  }
4787
  .progress-striped .progress-bar-danger {
4788
  background-image: -webkit-linear-gradient(45deg, rgba(255, 255, 255, .15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, .15) 50%, rgba(255, 255, 255, .15) 75%, transparent 75%, transparent);
4789
+ background-image: -o-linear-gradient(45deg, rgba(255, 255, 255, .15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, .15) 50%, rgba(255, 255, 255, .15) 75%, transparent 75%, transparent);
4790
  background-image: linear-gradient(45deg, rgba(255, 255, 255, .15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, .15) 50%, rgba(255, 255, 255, .15) 75%, transparent 75%, transparent);
4791
  }
4792
  .media,
4852
  }
4853
  a.list-group-item:hover,
4854
  a.list-group-item:focus {
4855
+ color: #555;
4856
  text-decoration: none;
4857
  background-color: #f5f5f5;
4858
  }
4859
+ .list-group-item.disabled,
4860
+ .list-group-item.disabled:hover,
4861
+ .list-group-item.disabled:focus {
4862
+ color: #777;
4863
+ background-color: #eee;
4864
+ }
4865
+ .list-group-item.disabled .list-group-item-heading,
4866
+ .list-group-item.disabled:hover .list-group-item-heading,
4867
+ .list-group-item.disabled:focus .list-group-item-heading {
4868
+ color: inherit;
4869
+ }
4870
+ .list-group-item.disabled .list-group-item-text,
4871
+ .list-group-item.disabled:hover .list-group-item-text,
4872
+ .list-group-item.disabled:focus .list-group-item-text {
4873
+ color: #777;
4874
+ }
4875
+ .list-group-item.active,
4876
+ .list-group-item.active:hover,
4877
+ .list-group-item.active:focus {
4878
  z-index: 2;
4879
  color: #fff;
4880
  background-color: #428bca;
4881
  border-color: #428bca;
4882
  }
4883
+ .list-group-item.active .list-group-item-heading,
4884
+ .list-group-item.active:hover .list-group-item-heading,
4885
+ .list-group-item.active:focus .list-group-item-heading,
4886
+ .list-group-item.active .list-group-item-heading > small,
4887
+ .list-group-item.active:hover .list-group-item-heading > small,
4888
+ .list-group-item.active:focus .list-group-item-heading > small,
4889
+ .list-group-item.active .list-group-item-heading > .small,
4890
+ .list-group-item.active:hover .list-group-item-heading > .small,
4891
+ .list-group-item.active:focus .list-group-item-heading > .small {
4892
  color: inherit;
4893
  }
4894
+ .list-group-item.active .list-group-item-text,
4895
+ .list-group-item.active:hover .list-group-item-text,
4896
+ .list-group-item.active:focus .list-group-item-text {
4897
  color: #e1edf7;
4898
  }
4899
  .list-group-item-success {
5003
  .panel-body {
5004
  padding: 15px;
5005
  }
5006
+ .panel-heading {
5007
+ padding: 10px 15px;
5008
+ border-bottom: 1px solid transparent;
5009
+ border-top-left-radius: 3px;
5010
+ border-top-right-radius: 3px;
5011
+ }
5012
+ .panel-heading > .dropdown .dropdown-toggle {
5013
+ color: inherit;
5014
+ }
5015
+ .panel-title {
5016
+ margin-top: 0;
5017
+ margin-bottom: 0;
5018
+ font-size: 16px;
5019
+ color: inherit;
5020
+ }
5021
+ .panel-title > a {
5022
+ color: inherit;
5023
+ }
5024
+ .panel-footer {
5025
+ padding: 10px 15px;
5026
+ background-color: #f5f5f5;
5027
+ border-top: 1px solid #ddd;
5028
+ border-bottom-right-radius: 3px;
5029
+ border-bottom-left-radius: 3px;
5030
+ }
5031
  .panel > .list-group {
5032
  margin-bottom: 0;
5033
  }
5035
  border-width: 1px 0;
5036
  border-radius: 0;
5037
  }
 
 
 
 
 
 
5038
  .panel > .list-group:first-child .list-group-item:first-child {
5039
+ border-top: 0;
5040
  border-top-left-radius: 3px;
5041
  border-top-right-radius: 3px;
5042
  }
5043
  .panel > .list-group:last-child .list-group-item:last-child {
5044
+ border-bottom: 0;
5045
  border-bottom-right-radius: 3px;
5046
  border-bottom-left-radius: 3px;
5047
  }
5048
  .panel-heading + .list-group .list-group-item:first-child {
5049
  border-top-width: 0;
5050
  }
5051
+ .list-group + .panel-footer {
5052
+ border-top-width: 0;
5053
+ }
5054
  .panel > .table,
5055
+ .panel > .table-responsive > .table,
5056
+ .panel > .panel-collapse > .table {
5057
  margin-bottom: 0;
5058
  }
5059
+ .panel > .table:first-child,
5060
+ .panel > .table-responsive:first-child > .table:first-child {
5061
+ border-top-left-radius: 3px;
5062
+ border-top-right-radius: 3px;
5063
+ }
5064
  .panel > .table:first-child > thead:first-child > tr:first-child td:first-child,
5065
  .panel > .table-responsive:first-child > .table:first-child > thead:first-child > tr:first-child td:first-child,
5066
  .panel > .table:first-child > tbody:first-child > tr:first-child td:first-child,
5081
  .panel > .table-responsive:first-child > .table:first-child > tbody:first-child > tr:first-child th:last-child {
5082
  border-top-right-radius: 3px;
5083
  }
5084
+ .panel > .table:last-child,
5085
+ .panel > .table-responsive:last-child > .table:last-child {
5086
+ border-bottom-right-radius: 3px;
5087
+ border-bottom-left-radius: 3px;
5088
+ }
5089
  .panel > .table:last-child > tbody:last-child > tr:last-child td:first-child,
5090
  .panel > .table-responsive:last-child > .table:last-child > tbody:last-child > tr:last-child td:first-child,
5091
  .panel > .table:last-child > tfoot:last-child > tr:last-child td:first-child,
5146
  .panel > .table-responsive > .table-bordered > tfoot > tr > td:last-child {
5147
  border-right: 0;
5148
  }
 
 
 
 
 
 
5149
  .panel > .table-bordered > thead > tr:first-child > td,
5150
  .panel > .table-responsive > .table-bordered > thead > tr:first-child > td,
5151
  .panel > .table-bordered > tbody > tr:first-child > td,
5152
  .panel > .table-responsive > .table-bordered > tbody > tr:first-child > td,
5153
+ .panel > .table-bordered > thead > tr:first-child > th,
5154
+ .panel > .table-responsive > .table-bordered > thead > tr:first-child > th,
5155
+ .panel > .table-bordered > tbody > tr:first-child > th,
5156
+ .panel > .table-responsive > .table-bordered > tbody > tr:first-child > th {
5157
+ border-bottom: 0;
5158
  }
 
 
 
 
 
 
 
 
5159
  .panel > .table-bordered > tbody > tr:last-child > td,
5160
  .panel > .table-responsive > .table-bordered > tbody > tr:last-child > td,
5161
  .panel > .table-bordered > tfoot > tr:last-child > td,
5162
+ .panel > .table-responsive > .table-bordered > tfoot > tr:last-child > td,
5163
+ .panel > .table-bordered > tbody > tr:last-child > th,
5164
+ .panel > .table-responsive > .table-bordered > tbody > tr:last-child > th,
5165
+ .panel > .table-bordered > tfoot > tr:last-child > th,
5166
+ .panel > .table-responsive > .table-bordered > tfoot > tr:last-child > th {
5167
  border-bottom: 0;
5168
  }
5169
  .panel > .table-responsive {
5170
  margin-bottom: 0;
5171
  border: 0;
5172
  }
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
5173
  .panel-group {
5174
  margin-bottom: 20px;
5175
  }
5176
  .panel-group .panel {
5177
  margin-bottom: 0;
 
5178
  border-radius: 4px;
5179
  }
5180
  .panel-group .panel + .panel {
5183
  .panel-group .panel-heading {
5184
  border-bottom: 0;
5185
  }
5186
+ .panel-group .panel-heading + .panel-collapse > .panel-body {
5187
  border-top: 1px solid #ddd;
5188
  }
5189
  .panel-group .panel-footer {
5200
  background-color: #f5f5f5;
5201
  border-color: #ddd;
5202
  }
5203
+ .panel-default > .panel-heading + .panel-collapse > .panel-body {
5204
  border-top-color: #ddd;
5205
  }
5206
+ .panel-default > .panel-heading .badge {
5207
+ color: #f5f5f5;
5208
+ background-color: #333;
5209
+ }
5210
+ .panel-default > .panel-footer + .panel-collapse > .panel-body {
5211
  border-bottom-color: #ddd;
5212
  }
5213
  .panel-primary {
5218
  background-color: #428bca;
5219
  border-color: #428bca;
5220
  }
5221
+ .panel-primary > .panel-heading + .panel-collapse > .panel-body {
5222
  border-top-color: #428bca;
5223
  }
5224
+ .panel-primary > .panel-heading .badge {
5225
+ color: #428bca;
5226
+ background-color: #fff;
5227
+ }
5228
+ .panel-primary > .panel-footer + .panel-collapse > .panel-body {
5229
  border-bottom-color: #428bca;
5230
  }
5231
  .panel-success {
5236
  background-color: #dff0d8;
5237
  border-color: #d6e9c6;
5238
  }
5239
+ .panel-success > .panel-heading + .panel-collapse > .panel-body {
5240
  border-top-color: #d6e9c6;
5241
  }
5242
+ .panel-success > .panel-heading .badge {
5243
+ color: #dff0d8;
5244
+ background-color: #3c763d;
5245
+ }
5246
+ .panel-success > .panel-footer + .panel-collapse > .panel-body {
5247
  border-bottom-color: #d6e9c6;
5248
  }
5249
  .panel-info {
5254
  background-color: #d9edf7;
5255
  border-color: #bce8f1;
5256
  }
5257
+ .panel-info > .panel-heading + .panel-collapse > .panel-body {
5258
  border-top-color: #bce8f1;
5259
  }
5260
+ .panel-info > .panel-heading .badge {
5261
+ color: #d9edf7;
5262
+ background-color: #31708f;
5263
+ }
5264
+ .panel-info > .panel-footer + .panel-collapse > .panel-body {
5265
  border-bottom-color: #bce8f1;
5266
  }
5267
  .panel-warning {
5272
  background-color: #fcf8e3;
5273
  border-color: #faebcc;
5274
  }
5275
+ .panel-warning > .panel-heading + .panel-collapse > .panel-body {
5276
  border-top-color: #faebcc;
5277
  }
5278
+ .panel-warning > .panel-heading .badge {
5279
+ color: #fcf8e3;
5280
+ background-color: #8a6d3b;
5281
+ }
5282
+ .panel-warning > .panel-footer + .panel-collapse > .panel-body {
5283
  border-bottom-color: #faebcc;
5284
  }
5285
  .panel-danger {
5290
  background-color: #f2dede;
5291
  border-color: #ebccd1;
5292
  }
5293
+ .panel-danger > .panel-heading + .panel-collapse > .panel-body {
5294
  border-top-color: #ebccd1;
5295
  }
5296
+ .panel-danger > .panel-heading .badge {
5297
+ color: #f2dede;
5298
+ background-color: #a94442;
5299
+ }
5300
+ .panel-danger > .panel-footer + .panel-collapse > .panel-body {
5301
  border-bottom-color: #ebccd1;
5302
  }
5303
+ .embed-responsive {
5304
+ position: relative;
5305
+ display: block;
5306
+ height: 0;
5307
+ padding: 0;
5308
+ overflow: hidden;
5309
+ }
5310
+ .embed-responsive .embed-responsive-item,
5311
+ .embed-responsive iframe,
5312
+ .embed-responsive embed,
5313
+ .embed-responsive object {
5314
+ position: absolute;
5315
+ top: 0;
5316
+ bottom: 0;
5317
+ left: 0;
5318
+ width: 100%;
5319
+ height: 100%;
5320
+ border: 0;
5321
+ }
5322
+ .embed-responsive.embed-responsive-16by9 {
5323
+ padding-bottom: 56.25%;
5324
+ }
5325
+ .embed-responsive.embed-responsive-4by3 {
5326
+ padding-bottom: 75%;
5327
+ }
5328
  .well {
5329
  min-height: 20px;
5330
  padding: 19px;
5383
  left: 0;
5384
  z-index: 1050;
5385
  display: none;
5386
+ overflow: hidden;
 
5387
  -webkit-overflow-scrolling: touch;
5388
  outline: 0;
5389
  }
5390
  .modal.fade .modal-dialog {
5391
  -webkit-transition: -webkit-transform .3s ease-out;
 
5392
  -o-transition: -o-transform .3s ease-out;
5393
  transition: transform .3s ease-out;
5394
+ -webkit-transform: translate3d(0, -25%, 0);
5395
+ -o-transform: translate3d(0, -25%, 0);
5396
+ transform: translate3d(0, -25%, 0);
5397
  }
5398
  .modal.in .modal-dialog {
5399
+ -webkit-transform: translate3d(0, 0, 0);
5400
+ -o-transform: translate3d(0, 0, 0);
5401
+ transform: translate3d(0, 0, 0);
5402
+ }
5403
+ .modal-open .modal {
5404
+ overflow-x: hidden;
5405
+ overflow-y: auto;
5406
  }
5407
  .modal-dialog {
5408
  position: relative;
5412
  .modal-content {
5413
  position: relative;
5414
  background-color: #fff;
5415
+ -webkit-background-clip: padding-box;
5416
+ background-clip: padding-box;
5417
  border: 1px solid #999;
5418
  border: 1px solid rgba(0, 0, 0, .2);
5419
  border-radius: 6px;
5420
+ outline: 0;
5421
  -webkit-box-shadow: 0 3px 9px rgba(0, 0, 0, .5);
5422
  box-shadow: 0 3px 9px rgba(0, 0, 0, .5);
5423
  }
5439
  opacity: .5;
5440
  }
5441
  .modal-header {
5442
+ min-height: 16.42857143px;
5443
  padding: 15px;
5444
  border-bottom: 1px solid #e5e5e5;
5445
  }
5448
  }
5449
  .modal-title {
5450
  margin: 0;
5451
+ line-height: 1.42857143;
5452
  }
5453
  .modal-body {
5454
  position: relative;
5455
+ padding: 15px;
5456
  }
5457
  .modal-footer {
5458
+ padding: 15px;
 
5459
  text-align: right;
5460
  border-top: 1px solid #e5e5e5;
5461
  }
5469
  .modal-footer .btn-block + .btn-block {
5470
  margin-left: 0;
5471
  }
5472
+ .modal-scrollbar-measure {
5473
+ position: absolute;
5474
+ top: -9999px;
5475
+ width: 50px;
5476
+ height: 50px;
5477
+ overflow: scroll;
5478
+ }
5479
  @media (min-width: 768px) {
5480
  .modal-dialog {
5481
  width: 600px;
5488
  .modal-sm {
5489
  width: 300px;
5490
  }
5491
+ }
5492
+ @media (min-width: 992px) {
5493
  .modal-lg {
5494
  width: 900px;
5495
  }
5496
  }
5497
  .tooltip {
5498
  position: absolute;
5499
+ z-index: 1070;
5500
  display: block;
5501
  font-size: 12px;
5502
  line-height: 1.4;
5596
  position: absolute;
5597
  top: 0;
5598
  left: 0;
5599
+ z-index: 1060;
5600
  display: none;
5601
  max-width: 276px;
5602
  padding: 1px;
5603
  text-align: left;
5604
  white-space: normal;
5605
  background-color: #fff;
5606
+ -webkit-background-clip: padding-box;
5607
+ background-clip: padding-box;
5608
  border: 1px solid #ccc;
5609
  border: 1px solid rgba(0, 0, 0, .2);
5610
  border-radius: 6px;
5636
  .popover-content {
5637
  padding: 9px 14px;
5638
  }
5639
+ .popover > .arrow,
5640
+ .popover > .arrow:after {
5641
  position: absolute;
5642
  display: block;
5643
  width: 0;
5645
  border-color: transparent;
5646
  border-style: solid;
5647
  }
5648
+ .popover > .arrow {
5649
  border-width: 11px;
5650
  }
5651
+ .popover > .arrow:after {
5652
  content: "";
5653
  border-width: 10px;
5654
  }
5655
+ .popover.top > .arrow {
5656
  bottom: -11px;
5657
  left: 50%;
5658
  margin-left: -11px;
5660
  border-top-color: rgba(0, 0, 0, .25);
5661
  border-bottom-width: 0;
5662
  }
5663
+ .popover.top > .arrow:after {
5664
  bottom: 1px;
5665
  margin-left: -10px;
5666
  content: " ";
5667
  border-top-color: #fff;
5668
  border-bottom-width: 0;
5669
  }
5670
+ .popover.right > .arrow {
5671
  top: 50%;
5672
  left: -11px;
5673
  margin-top: -11px;
5675
  border-right-color: rgba(0, 0, 0, .25);
5676
  border-left-width: 0;
5677
  }
5678
+ .popover.right > .arrow:after {
5679
  bottom: -10px;
5680
  left: 1px;
5681
  content: " ";
5682
  border-right-color: #fff;
5683
  border-left-width: 0;
5684
  }
5685
+ .popover.bottom > .arrow {
5686
  top: -11px;
5687
  left: 50%;
5688
  margin-left: -11px;
5690
  border-bottom-color: #999;
5691
  border-bottom-color: rgba(0, 0, 0, .25);
5692
  }
5693
+ .popover.bottom > .arrow:after {
5694
  top: 1px;
5695
  margin-left: -10px;
5696
  content: " ";
5697
  border-top-width: 0;
5698
  border-bottom-color: #fff;
5699
  }
5700
+ .popover.left > .arrow {
5701
  top: 50%;
5702
  right: -11px;
5703
  margin-top: -11px;
5705
  border-left-color: #999;
5706
  border-left-color: rgba(0, 0, 0, .25);
5707
  }
5708
+ .popover.left > .arrow:after {
5709
  right: 1px;
5710
  bottom: -10px;
5711
  content: " ";
5724
  position: relative;
5725
  display: none;
5726
  -webkit-transition: .6s ease-in-out left;
5727
+ -o-transition: .6s ease-in-out left;
5728
  transition: .6s ease-in-out left;
5729
  }
5730
  .carousel-inner > .item > img,
5731
  .carousel-inner > .item > a > img {
 
 
 
5732
  line-height: 1;
5733
  }
5734
  .carousel-inner > .active,
5775
  opacity: .5;
5776
  }
5777
  .carousel-control.left {
5778
+ background-image: -webkit-linear-gradient(left, rgba(0, 0, 0, .5) 0%, rgba(0, 0, 0, .0001) 100%);
5779
+ background-image: -o-linear-gradient(left, rgba(0, 0, 0, .5) 0%, rgba(0, 0, 0, .0001) 100%);
5780
+ background-image: -webkit-gradient(linear, left top, right top, from(rgba(0, 0, 0, .5)), to(rgba(0, 0, 0, .0001)));
5781
  background-image: linear-gradient(to right, rgba(0, 0, 0, .5) 0%, rgba(0, 0, 0, .0001) 100%);
5782
  filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#80000000', endColorstr='#00000000', GradientType=1);
5783
  background-repeat: repeat-x;
5785
  .carousel-control.right {
5786
  right: 0;
5787
  left: auto;
5788
+ background-image: -webkit-linear-gradient(left, rgba(0, 0, 0, .0001) 0%, rgba(0, 0, 0, .5) 100%);
5789
+ background-image: -o-linear-gradient(left, rgba(0, 0, 0, .0001) 0%, rgba(0, 0, 0, .5) 100%);
5790
+ background-image: -webkit-gradient(linear, left top, right top, from(rgba(0, 0, 0, .0001)), to(rgba(0, 0, 0, .5)));
5791
  background-image: linear-gradient(to right, rgba(0, 0, 0, .0001) 0%, rgba(0, 0, 0, .5) 100%);
5792
  filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#00000000', endColorstr='#80000000', GradientType=1);
5793
  background-repeat: repeat-x;
5797
  color: #fff;
5798
  text-decoration: none;
5799
  filter: alpha(opacity=90);
5800
+ outline: 0;
5801
  opacity: .9;
5802
  }
5803
  .carousel-control .icon-prev,
5812
  .carousel-control .icon-prev,
5813
  .carousel-control .glyphicon-chevron-left {
5814
  left: 50%;
5815
+ margin-left: -10px;
5816
  }
5817
  .carousel-control .icon-next,
5818
  .carousel-control .glyphicon-chevron-right {
5819
  right: 50%;
5820
+ margin-right: -10px;
5821
  }
5822
  .carousel-control .icon-prev,
5823
  .carousel-control .icon-next {
5824
  width: 20px;
5825
  height: 20px;
5826
  margin-top: -10px;
 
5827
  font-family: serif;
5828
  }
5829
  .carousel-control .icon-prev:before {
5877
  text-shadow: none;
5878
  }
5879
  @media screen and (min-width: 768px) {
5880
+ .carousel-control .glyphicon-chevron-left,
5881
+ .carousel-control .glyphicon-chevron-right,
5882
  .carousel-control .icon-prev,
5883
  .carousel-control .icon-next {
5884
  width: 30px;
5885
  height: 30px;
5886
  margin-top: -15px;
 
5887
  font-size: 30px;
5888
  }
5889
+ .carousel-control .glyphicon-chevron-left,
5890
+ .carousel-control .icon-prev {
5891
+ margin-left: -15px;
5892
+ }
5893
+ .carousel-control .glyphicon-chevron-right,
5894
+ .carousel-control .icon-next {
5895
+ margin-right: -15px;
5896
+ }
5897
  .carousel-caption {
5898
  right: 20%;
5899
  left: 20%;
5905
  }
5906
  .clearfix:before,
5907
  .clearfix:after,
5908
+ .dl-horizontal dd:before,
5909
+ .dl-horizontal dd:after,
5910
  .container:before,
5911
  .container:after,
5912
  .container-fluid:before,
5937
  content: " ";
5938
  }
5939
  .clearfix:after,
5940
+ .dl-horizontal dd:after,
5941
  .container:after,
5942
  .container-fluid:after,
5943
  .row:after,
5986
  }
5987
  .affix {
5988
  position: fixed;
5989
+ -webkit-transform: translate3d(0, 0, 0);
5990
+ -o-transform: translate3d(0, 0, 0);
5991
+ transform: translate3d(0, 0, 0);
5992
  }
5993
  @-ms-viewport {
5994
  width: device-width;
5995
  }
5996
  .visible-xs,
5997
+ .visible-sm,
5998
+ .visible-md,
5999
+ .visible-lg {
6000
+ display: none !important;
6001
+ }
6002
+ .visible-xs-block,
6003
+ .visible-xs-inline,
6004
+ .visible-xs-inline-block,
6005
+ .visible-sm-block,
6006
+ .visible-sm-inline,
6007
+ .visible-sm-inline-block,
6008
+ .visible-md-block,
6009
+ .visible-md-inline,
6010
+ .visible-md-inline-block,
6011
+ .visible-lg-block,
6012
+ .visible-lg-inline,
6013
+ .visible-lg-inline-block {
6014
  display: none !important;
6015
  }
6016
  @media (max-width: 767px) {
6028
  display: table-cell !important;
6029
  }
6030
  }
6031
+ @media (max-width: 767px) {
6032
+ .visible-xs-block {
6033
+ display: block !important;
6034
+ }
6035
+ }
6036
+ @media (max-width: 767px) {
6037
+ .visible-xs-inline {
6038
+ display: inline !important;
6039
+ }
6040
+ }
6041
+ @media (max-width: 767px) {
6042
+ .visible-xs-inline-block {
6043
+ display: inline-block !important;
6044
+ }
6045
  }
6046
  @media (min-width: 768px) and (max-width: 991px) {
6047
  .visible-sm {
6058
  display: table-cell !important;
6059
  }
6060
  }
6061
+ @media (min-width: 768px) and (max-width: 991px) {
6062
+ .visible-sm-block {
6063
+ display: block !important;
6064
+ }
6065
+ }
6066
+ @media (min-width: 768px) and (max-width: 991px) {
6067
+ .visible-sm-inline {
6068
+ display: inline !important;
6069
+ }
6070
+ }
6071
+ @media (min-width: 768px) and (max-width: 991px) {
6072
+ .visible-sm-inline-block {
6073
+ display: inline-block !important;
6074
+ }
6075
  }
6076
  @media (min-width: 992px) and (max-width: 1199px) {
6077
  .visible-md {
6088
  display: table-cell !important;
6089
  }
6090
  }
6091
+ @media (min-width: 992px) and (max-width: 1199px) {
6092
+ .visible-md-block {
6093
+ display: block !important;
6094
+ }
6095
+ }
6096
+ @media (min-width: 992px) and (max-width: 1199px) {
6097
+ .visible-md-inline {
6098
+ display: inline !important;
6099
+ }
6100
+ }
6101
+ @media (min-width: 992px) and (max-width: 1199px) {
6102
+ .visible-md-inline-block {
6103
+ display: inline-block !important;
6104
+ }
6105
  }
6106
  @media (min-width: 1200px) {
6107
  .visible-lg {
6118
  display: table-cell !important;
6119
  }
6120
  }
6121
+ @media (min-width: 1200px) {
6122
+ .visible-lg-block {
6123
+ display: block !important;
6124
+ }
6125
+ }
6126
+ @media (min-width: 1200px) {
6127
+ .visible-lg-inline {
6128
+ display: inline !important;
6129
+ }
6130
+ }
6131
+ @media (min-width: 1200px) {
6132
+ .visible-lg-inline-block {
6133
+ display: inline-block !important;
6134
+ }
6135
+ }
6136
  @media (max-width: 767px) {
6137
+ .hidden-xs {
 
 
 
6138
  display: none !important;
6139
  }
6140
  }
6141
  @media (min-width: 768px) and (max-width: 991px) {
6142
+ .hidden-sm {
 
 
 
6143
  display: none !important;
6144
  }
6145
  }
6146
  @media (min-width: 992px) and (max-width: 1199px) {
6147
+ .hidden-md {
 
 
 
6148
  display: none !important;
6149
  }
6150
  }
6151
  @media (min-width: 1200px) {
6152
+ .hidden-lg {
 
 
 
6153
  display: none !important;
6154
  }
6155
  }
6156
+ .visible-print {
 
 
 
6157
  display: none !important;
6158
  }
6159
  @media print {
6171
  display: table-cell !important;
6172
  }
6173
  }
6174
+ .visible-print-block {
6175
+ display: none !important;
6176
+ }
6177
+ @media print {
6178
+ .visible-print-block {
6179
+ display: block !important;
6180
+ }
6181
+ }
6182
+ .visible-print-inline {
6183
+ display: none !important;
6184
+ }
6185
+ @media print {
6186
+ .visible-print-inline {
6187
+ display: inline !important;
6188
+ }
6189
+ }
6190
+ .visible-print-inline-block {
6191
+ display: none !important;
6192
+ }
6193
+ @media print {
6194
+ .visible-print-inline-block {
6195
+ display: inline-block !important;
6196
+ }
6197
+ }
6198
  @media print {
6199
+ .hidden-print {
 
 
 
6200
  display: none !important;
6201
  }
6202
  }
assets/bootstrap/css/bootstrap.min.css CHANGED
@@ -1,7 +1,7 @@
1
  /*!
2
- * Bootstrap v3.1.0 (http://getbootstrap.com)
3
  * Copyright 2011-2014 Twitter, Inc.
4
  * Licensed under MIT (https://github.com/twbs/bootstrap/blob/master/LICENSE)
5
- */
6
-
7
- /*! normalize.css v3.0.0 | MIT License | git.io/normalize */article,aside,details,figcaption,figure,footer,header,hgroup,main,nav,section,summary{display:block}audio,canvas,progress,video{display:inline-block;vertical-align:baseline}audio:not([controls]){display:none;height:0}[hidden],template{display:none}a{background:0 0}a:active,a:hover{outline:0}abbr[title]{border-bottom:1px dotted}b,strong{font-weight:700}dfn{font-style:italic}h1{font-size:2em;margin:.67em 0}mark{background:#ff0;color:#000}small{font-size:80%}sub,sup{font-size:75%;line-height:0;position:relative;vertical-align:baseline}sup{top:-.5em}sub{bottom:-.25em}img{border:0}svg:not(:root){overflow:hidden}figure{margin:1em 40px}hr{-moz-box-sizing:content-box;box-sizing:content-box;height:0}pre{overflow:auto}code,kbd,pre,samp{font-family:monospace,monospace;font-size:1em}button,input,optgroup,select,textarea{color:inherit;font:inherit;margin:0}button{overflow:visible}button,select{text-transform:none}button,html input[type=button],input[type=reset],input[type=submit]{-webkit-appearance:button;cursor:pointer}button[disabled],html input[disabled]{cursor:default}button::-moz-focus-inner,input::-moz-focus-inner{border:0;padding:0}input{line-height:normal}input[type=checkbox],input[type=radio]{box-sizing:border-box;padding:0}input[type=number]::-webkit-inner-spin-button,input[type=number]::-webkit-outer-spin-button{height:auto}input[type=search]{-webkit-appearance:textfield;-moz-box-sizing:content-box;-webkit-box-sizing:content-box;box-sizing:content-box}input[type=search]::-webkit-search-cancel-button,input[type=search]::-webkit-search-decoration{-webkit-appearance:none}fieldset{border:1px solid silver;margin:0 2px;padding:.35em .625em .75em}legend{border:0;padding:0}textarea{overflow:auto}optgroup{font-weight:700}table{border-collapse:collapse;border-spacing:0}td,th{padding:0}@media print{*{text-shadow:none!important;color:#000!important;background:transparent!important;box-shadow:none!important}a,a:visited{text-decoration:underline}a[href]:after{content:" (" attr(href) ")"}abbr[title]:after{content:" (" attr(title) ")"}a[href^="javascript:"]:after,a[href^="#"]:after{content:""}pre,blockquote{border:1px solid #999;page-break-inside:avoid}thead{display:table-header-group}tr,img{page-break-inside:avoid}img{max-width:100%!important}p,h2,h3{orphans:3;widows:3}h2,h3{page-break-after:avoid}select{background:#fff!important}.navbar{display:none}.table td,.table th{background-color:#fff!important}.btn>.caret,.dropup>.btn>.caret{border-top-color:#000!important}.label{border:1px solid #000}.table{border-collapse:collapse!important}.table-bordered th,.table-bordered td{border:1px solid #ddd!important}}*{-webkit-box-sizing:border-box;-moz-box-sizing:border-box;box-sizing:border-box}:before,:after{-webkit-box-sizing:border-box;-moz-box-sizing:border-box;box-sizing:border-box}input,button,select,textarea{font-family:inherit;font-size:inherit;line-height:inherit}a{color:#428bca;text-decoration:none}a:hover,a:focus{color:#2a6496;text-decoration:underline}a:focus{outline:thin dotted;outline:5px auto -webkit-focus-ring-color;outline-offset:-2px}figure{margin:0}img{vertical-align:middle}.img-responsive{display:block;max-width:100%;height:auto}.img-rounded{border-radius:6px}.img-thumbnail{padding:4px;line-height:1.428571429;background-color:#fff;border:1px solid #ddd;border-radius:4px;-webkit-transition:all .2s ease-in-out;transition:all .2s ease-in-out;display:inline-block;max-width:100%;height:auto}.img-circle{border-radius:50%}hr{margin-top:20px;margin-bottom:20px;border:0;border-top:1px solid #eee}.sr-only{position:absolute;width:1px;height:1px;margin:-1px;padding:0;overflow:hidden;clip:rect(0,0,0,0);border:0}h1,h2,h3,h4,h5,h6,.h1,.h2,.h3,.h4,.h5,.h6{font-family:inherit;font-weight:500;line-height:1.1;color:inherit}h1 small,h2 small,h3 small,h4 small,h5 small,h6 small,.h1 small,.h2 small,.h3 small,.h4 small,.h5 small,.h6 small,h1 .small,h2 .small,h3 .small,h4 .small,h5 .small,h6 .small,.h1 .small,.h2 .small,.h3 .small,.h4 .small,.h5 .small,.h6 .small{font-weight:400;line-height:1;color:#999}h1,.h1,h2,.h2,h3,.h3{margin-top:20px;margin-bottom:10px}h1 small,.h1 small,h2 small,.h2 small,h3 small,.h3 small,h1 .small,.h1 .small,h2 .small,.h2 .small,h3 .small,.h3 .small{font-size:65%}h4,.h4,h5,.h5,h6,.h6{margin-top:10px;margin-bottom:10px}h4 small,.h4 small,h5 small,.h5 small,h6 small,.h6 small,h4 .small,.h4 .small,h5 .small,.h5 .small,h6 .small,.h6 .small{font-size:75%}h1,.h1{font-size:36px}h2,.h2{font-size:30px}h3,.h3{font-size:24px}h4,.h4{font-size:18px}h5,.h5{font-size:14px}h6,.h6{font-size:12px}p{margin:0 0 10px}.lead{margin-bottom:20px;font-size:16px;font-weight:200;line-height:1.4}@media (min-width:768px){.lead{font-size:21px}}small,.small{font-size:85%}cite{font-style:normal}.text-left{text-align:left}.text-right{text-align:right}.text-center{text-align:center}.text-justify{text-align:justify}.text-muted{color:#999}.text-primary{color:#428bca}a.text-primary:hover{color:#3071a9}.text-success{color:#3c763d}a.text-success:hover{color:#2b542c}.text-info{color:#31708f}a.text-info:hover{color:#245269}.text-warning{color:#8a6d3b}a.text-warning:hover{color:#66512c}.text-danger{color:#a94442}a.text-danger:hover{color:#843534}.bg-primary{color:#fff;background-color:#428bca}a.bg-primary:hover{background-color:#3071a9}.bg-success{background-color:#dff0d8}a.bg-success:hover{background-color:#c1e2b3}.bg-info{background-color:#d9edf7}a.bg-info:hover{background-color:#afd9ee}.bg-warning{background-color:#fcf8e3}a.bg-warning:hover{background-color:#f7ecb5}.bg-danger{background-color:#f2dede}a.bg-danger:hover{background-color:#e4b9b9}.page-header{padding-bottom:9px;margin:40px 0 20px;border-bottom:1px solid #eee}ul,ol{margin-top:0;margin-bottom:10px}ul ul,ol ul,ul ol,ol ol{margin-bottom:0}.list-unstyled{padding-left:0;list-style:none}.list-inline{padding-left:0;list-style:none}.list-inline>li{display:inline-block;padding-left:5px;padding-right:5px}.list-inline>li:first-child{padding-left:0}dl{margin-top:0;margin-bottom:20px}dt,dd{line-height:1.428571429}dt{font-weight:700}dd{margin-left:0}@media (min-width:768px){.dl-horizontal dt{float:left;width:160px;clear:left;text-align:right;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.dl-horizontal dd{margin-left:180px}}abbr[title],abbr[data-original-title]{cursor:help;border-bottom:1px dotted #999}.initialism{font-size:90%;text-transform:uppercase}blockquote{padding:10px 20px;margin:0 0 20px;font-size:17.5px;border-left:5px solid #eee}blockquote p:last-child,blockquote ul:last-child,blockquote ol:last-child{margin-bottom:0}blockquote footer,blockquote small,blockquote .small{display:block;font-size:80%;line-height:1.428571429;color:#999}blockquote footer:before,blockquote small:before,blockquote .small:before{content:'\2014 \00A0'}.blockquote-reverse,blockquote.pull-right{padding-right:15px;padding-left:0;border-right:5px solid #eee;border-left:0;text-align:right}.blockquote-reverse footer:before,blockquote.pull-right footer:before,.blockquote-reverse small:before,blockquote.pull-right small:before,.blockquote-reverse .small:before,blockquote.pull-right .small:before{content:''}.blockquote-reverse footer:after,blockquote.pull-right footer:after,.blockquote-reverse small:after,blockquote.pull-right small:after,.blockquote-reverse .small:after,blockquote.pull-right .small:after{content:'\00A0 \2014'}blockquote:before,blockquote:after{content:""}address{margin-bottom:20px;font-style:normal;line-height:1.428571429}code,kbd,pre,samp{font-family:Menlo,Monaco,Consolas,"Courier New",monospace}code{padding:2px 4px;font-size:90%;color:#c7254e;background-color:#f9f2f4;white-space:nowrap;border-radius:4px}kbd{padding:2px 4px;font-size:90%;color:#fff;background-color:#333;border-radius:3px;box-shadow:inset 0 -1px 0 rgba(0,0,0,.25)}pre{display:block;padding:9.5px;margin:0 0 10px;font-size:13px;line-height:1.428571429;word-break:break-all;word-wrap:break-word;color:#333;background-color:#f5f5f5;border:1px solid #ccc;border-radius:4px}pre code{padding:0;font-size:inherit;color:inherit;white-space:pre-wrap;background-color:transparent;border-radius:0}.pre-scrollable{max-height:340px;overflow-y:scroll}.container{margin-right:auto;margin-left:auto;padding-left:15px;padding-right:15px}@media (min-width:768px){.container{width:750px}}@media (min-width:992px){.container{width:970px}}@media (min-width:1200px){.container{width:1170px}}.container-fluid{margin-right:auto;margin-left:auto;padding-left:15px;padding-right:15px}.row{margin-left:-15px;margin-right:-15px}.col-xs-1,.col-sm-1,.col-md-1,.col-lg-1,.col-xs-2,.col-sm-2,.col-md-2,.col-lg-2,.col-xs-3,.col-sm-3,.col-md-3,.col-lg-3,.col-xs-4,.col-sm-4,.col-md-4,.col-lg-4,.col-xs-5,.col-sm-5,.col-md-5,.col-lg-5,.col-xs-6,.col-sm-6,.col-md-6,.col-lg-6,.col-xs-7,.col-sm-7,.col-md-7,.col-lg-7,.col-xs-8,.col-sm-8,.col-md-8,.col-lg-8,.col-xs-9,.col-sm-9,.col-md-9,.col-lg-9,.col-xs-10,.col-sm-10,.col-md-10,.col-lg-10,.col-xs-11,.col-sm-11,.col-md-11,.col-lg-11,.col-xs-12,.col-sm-12,.col-md-12,.col-lg-12{position:relative;min-height:1px;padding-left:15px;padding-right:15px}.col-xs-1,.col-xs-2,.col-xs-3,.col-xs-4,.col-xs-5,.col-xs-6,.col-xs-7,.col-xs-8,.col-xs-9,.col-xs-10,.col-xs-11,.col-xs-12{float:left}.col-xs-12{width:100%}.col-xs-11{width:91.66666666666666%}.col-xs-10{width:83.33333333333334%}.col-xs-9{width:75%}.col-xs-8{width:66.66666666666666%}.col-xs-7{width:58.333333333333336%}.col-xs-6{width:50%}.col-xs-5{width:41.66666666666667%}.col-xs-4{width:33.33333333333333%}.col-xs-3{width:25%}.col-xs-2{width:16.666666666666664%}.col-xs-1{width:8.333333333333332%}.col-xs-pull-12{right:100%}.col-xs-pull-11{right:91.66666666666666%}.col-xs-pull-10{right:83.33333333333334%}.col-xs-pull-9{right:75%}.col-xs-pull-8{right:66.66666666666666%}.col-xs-pull-7{right:58.333333333333336%}.col-xs-pull-6{right:50%}.col-xs-pull-5{right:41.66666666666667%}.col-xs-pull-4{right:33.33333333333333%}.col-xs-pull-3{right:25%}.col-xs-pull-2{right:16.666666666666664%}.col-xs-pull-1{right:8.333333333333332%}.col-xs-pull-0{right:0}.col-xs-push-12{left:100%}.col-xs-push-11{left:91.66666666666666%}.col-xs-push-10{left:83.33333333333334%}.col-xs-push-9{left:75%}.col-xs-push-8{left:66.66666666666666%}.col-xs-push-7{left:58.333333333333336%}.col-xs-push-6{left:50%}.col-xs-push-5{left:41.66666666666667%}.col-xs-push-4{left:33.33333333333333%}.col-xs-push-3{left:25%}.col-xs-push-2{left:16.666666666666664%}.col-xs-push-1{left:8.333333333333332%}.col-xs-push-0{left:0}.col-xs-offset-12{margin-left:100%}.col-xs-offset-11{margin-left:91.66666666666666%}.col-xs-offset-10{margin-left:83.33333333333334%}.col-xs-offset-9{margin-left:75%}.col-xs-offset-8{margin-left:66.66666666666666%}.col-xs-offset-7{margin-left:58.333333333333336%}.col-xs-offset-6{margin-left:50%}.col-xs-offset-5{margin-left:41.66666666666667%}.col-xs-offset-4{margin-left:33.33333333333333%}.col-xs-offset-3{margin-left:25%}.col-xs-offset-2{margin-left:16.666666666666664%}.col-xs-offset-1{margin-left:8.333333333333332%}.col-xs-offset-0{margin-left:0}@media (min-width:768px){.col-sm-1,.col-sm-2,.col-sm-3,.col-sm-4,.col-sm-5,.col-sm-6,.col-sm-7,.col-sm-8,.col-sm-9,.col-sm-10,.col-sm-11,.col-sm-12{float:left}.col-sm-12{width:100%}.col-sm-11{width:91.66666666666666%}.col-sm-10{width:83.33333333333334%}.col-sm-9{width:75%}.col-sm-8{width:66.66666666666666%}.col-sm-7{width:58.333333333333336%}.col-sm-6{width:50%}.col-sm-5{width:41.66666666666667%}.col-sm-4{width:33.33333333333333%}.col-sm-3{width:25%}.col-sm-2{width:16.666666666666664%}.col-sm-1{width:8.333333333333332%}.col-sm-pull-12{right:100%}.col-sm-pull-11{right:91.66666666666666%}.col-sm-pull-10{right:83.33333333333334%}.col-sm-pull-9{right:75%}.col-sm-pull-8{right:66.66666666666666%}.col-sm-pull-7{right:58.333333333333336%}.col-sm-pull-6{right:50%}.col-sm-pull-5{right:41.66666666666667%}.col-sm-pull-4{right:33.33333333333333%}.col-sm-pull-3{right:25%}.col-sm-pull-2{right:16.666666666666664%}.col-sm-pull-1{right:8.333333333333332%}.col-sm-pull-0{right:0}.col-sm-push-12{left:100%}.col-sm-push-11{left:91.66666666666666%}.col-sm-push-10{left:83.33333333333334%}.col-sm-push-9{left:75%}.col-sm-push-8{left:66.66666666666666%}.col-sm-push-7{left:58.333333333333336%}.col-sm-push-6{left:50%}.col-sm-push-5{left:41.66666666666667%}.col-sm-push-4{left:33.33333333333333%}.col-sm-push-3{left:25%}.col-sm-push-2{left:16.666666666666664%}.col-sm-push-1{left:8.333333333333332%}.col-sm-push-0{left:0}.col-sm-offset-12{margin-left:100%}.col-sm-offset-11{margin-left:91.66666666666666%}.col-sm-offset-10{margin-left:83.33333333333334%}.col-sm-offset-9{margin-left:75%}.col-sm-offset-8{margin-left:66.66666666666666%}.col-sm-offset-7{margin-left:58.333333333333336%}.col-sm-offset-6{margin-left:50%}.col-sm-offset-5{margin-left:41.66666666666667%}.col-sm-offset-4{margin-left:33.33333333333333%}.col-sm-offset-3{margin-left:25%}.col-sm-offset-2{margin-left:16.666666666666664%}.col-sm-offset-1{margin-left:8.333333333333332%}.col-sm-offset-0{margin-left:0}}@media (min-width:992px){.col-md-1,.col-md-2,.col-md-3,.col-md-4,.col-md-5,.col-md-6,.col-md-7,.col-md-8,.col-md-9,.col-md-10,.col-md-11,.col-md-12{float:left}.col-md-12{width:100%}.col-md-11{width:91.66666666666666%}.col-md-10{width:83.33333333333334%}.col-md-9{width:75%}.col-md-8{width:66.66666666666666%}.col-md-7{width:58.333333333333336%}.col-md-6{width:50%}.col-md-5{width:41.66666666666667%}.col-md-4{width:33.33333333333333%}.col-md-3{width:25%}.col-md-2{width:16.666666666666664%}.col-md-1{width:8.333333333333332%}.col-md-pull-12{right:100%}.col-md-pull-11{right:91.66666666666666%}.col-md-pull-10{right:83.33333333333334%}.col-md-pull-9{right:75%}.col-md-pull-8{right:66.66666666666666%}.col-md-pull-7{right:58.333333333333336%}.col-md-pull-6{right:50%}.col-md-pull-5{right:41.66666666666667%}.col-md-pull-4{right:33.33333333333333%}.col-md-pull-3{right:25%}.col-md-pull-2{right:16.666666666666664%}.col-md-pull-1{right:8.333333333333332%}.col-md-pull-0{right:0}.col-md-push-12{left:100%}.col-md-push-11{left:91.66666666666666%}.col-md-push-10{left:83.33333333333334%}.col-md-push-9{left:75%}.col-md-push-8{left:66.66666666666666%}.col-md-push-7{left:58.333333333333336%}.col-md-push-6{left:50%}.col-md-push-5{left:41.66666666666667%}.col-md-push-4{left:33.33333333333333%}.col-md-push-3{left:25%}.col-md-push-2{left:16.666666666666664%}.col-md-push-1{left:8.333333333333332%}.col-md-push-0{left:0}.col-md-offset-12{margin-left:100%}.col-md-offset-11{margin-left:91.66666666666666%}.col-md-offset-10{margin-left:83.33333333333334%}.col-md-offset-9{margin-left:75%}.col-md-offset-8{margin-left:66.66666666666666%}.col-md-offset-7{margin-left:58.333333333333336%}.col-md-offset-6{margin-left:50%}.col-md-offset-5{margin-left:41.66666666666667%}.col-md-offset-4{margin-left:33.33333333333333%}.col-md-offset-3{margin-left:25%}.col-md-offset-2{margin-left:16.666666666666664%}.col-md-offset-1{margin-left:8.333333333333332%}.col-md-offset-0{margin-left:0}}@media (min-width:1200px){.col-lg-1,.col-lg-2,.col-lg-3,.col-lg-4,.col-lg-5,.col-lg-6,.col-lg-7,.col-lg-8,.col-lg-9,.col-lg-10,.col-lg-11,.col-lg-12{float:left}.col-lg-12{width:100%}.col-lg-11{width:91.66666666666666%}.col-lg-10{width:83.33333333333334%}.col-lg-9{width:75%}.col-lg-8{width:66.66666666666666%}.col-lg-7{width:58.333333333333336%}.col-lg-6{width:50%}.col-lg-5{width:41.66666666666667%}.col-lg-4{width:33.33333333333333%}.col-lg-3{width:25%}.col-lg-2{width:16.666666666666664%}.col-lg-1{width:8.333333333333332%}.col-lg-pull-12{right:100%}.col-lg-pull-11{right:91.66666666666666%}.col-lg-pull-10{right:83.33333333333334%}.col-lg-pull-9{right:75%}.col-lg-pull-8{right:66.66666666666666%}.col-lg-pull-7{right:58.333333333333336%}.col-lg-pull-6{right:50%}.col-lg-pull-5{right:41.66666666666667%}.col-lg-pull-4{right:33.33333333333333%}.col-lg-pull-3{right:25%}.col-lg-pull-2{right:16.666666666666664%}.col-lg-pull-1{right:8.333333333333332%}.col-lg-pull-0{right:0}.col-lg-push-12{left:100%}.col-lg-push-11{left:91.66666666666666%}.col-lg-push-10{left:83.33333333333334%}.col-lg-push-9{left:75%}.col-lg-push-8{left:66.66666666666666%}.col-lg-push-7{left:58.333333333333336%}.col-lg-push-6{left:50%}.col-lg-push-5{left:41.66666666666667%}.col-lg-push-4{left:33.33333333333333%}.col-lg-push-3{left:25%}.col-lg-push-2{left:16.666666666666664%}.col-lg-push-1{left:8.333333333333332%}.col-lg-push-0{left:0}.col-lg-offset-12{margin-left:100%}.col-lg-offset-11{margin-left:91.66666666666666%}.col-lg-offset-10{margin-left:83.33333333333334%}.col-lg-offset-9{margin-left:75%}.col-lg-offset-8{margin-left:66.66666666666666%}.col-lg-offset-7{margin-left:58.333333333333336%}.col-lg-offset-6{margin-left:50%}.col-lg-offset-5{margin-left:41.66666666666667%}.col-lg-offset-4{margin-left:33.33333333333333%}.col-lg-offset-3{margin-left:25%}.col-lg-offset-2{margin-left:16.666666666666664%}.col-lg-offset-1{margin-left:8.333333333333332%}.col-lg-offset-0{margin-left:0}}table{max-width:100%;background-color:transparent}th{text-align:left}.table{width:100%;margin-bottom:20px}.table>thead>tr>th,.table>tbody>tr>th,.table>tfoot>tr>th,.table>thead>tr>td,.table>tbody>tr>td,.table>tfoot>tr>td{padding:8px;line-height:1.428571429;vertical-align:top;border-top:1px solid #ddd}.table>thead>tr>th{vertical-align:bottom;border-bottom:2px solid #ddd}.table>caption+thead>tr:first-child>th,.table>colgroup+thead>tr:first-child>th,.table>thead:first-child>tr:first-child>th,.table>caption+thead>tr:first-child>td,.table>colgroup+thead>tr:first-child>td,.table>thead:first-child>tr:first-child>td{border-top:0}.table>tbody+tbody{border-top:2px solid #ddd}.table .table{background-color:#fff}.table-condensed>thead>tr>th,.table-condensed>tbody>tr>th,.table-condensed>tfoot>tr>th,.table-condensed>thead>tr>td,.table-condensed>tbody>tr>td,.table-condensed>tfoot>tr>td{padding:5px}.table-bordered{border:1px solid #ddd}.table-bordered>thead>tr>th,.table-bordered>tbody>tr>th,.table-bordered>tfoot>tr>th,.table-bordered>thead>tr>td,.table-bordered>tbody>tr>td,.table-bordered>tfoot>tr>td{border:1px solid #ddd}.table-bordered>thead>tr>th,.table-bordered>thead>tr>td{border-bottom-width:2px}.table-striped>tbody>tr:nth-child(odd)>td,.table-striped>tbody>tr:nth-child(odd)>th{background-color:#f9f9f9}.table-hover>tbody>tr:hover>td,.table-hover>tbody>tr:hover>th{background-color:#f5f5f5}table col[class*=col-]{position:static;float:none;display:table-column}table td[class*=col-],table th[class*=col-]{position:static;float:none;display:table-cell}.table>thead>tr>td.active,.table>tbody>tr>td.active,.table>tfoot>tr>td.active,.table>thead>tr>th.active,.table>tbody>tr>th.active,.table>tfoot>tr>th.active,.table>thead>tr.active>td,.table>tbody>tr.active>td,.table>tfoot>tr.active>td,.table>thead>tr.active>th,.table>tbody>tr.active>th,.table>tfoot>tr.active>th{background-color:#f5f5f5}.table-hover>tbody>tr>td.active:hover,.table-hover>tbody>tr>th.active:hover,.table-hover>tbody>tr.active:hover>td,.table-hover>tbody>tr.active:hover>th{background-color:#e8e8e8}.table>thead>tr>td.success,.table>tbody>tr>td.success,.table>tfoot>tr>td.success,.table>thead>tr>th.success,.table>tbody>tr>th.success,.table>tfoot>tr>th.success,.table>thead>tr.success>td,.table>tbody>tr.success>td,.table>tfoot>tr.success>td,.table>thead>tr.success>th,.table>tbody>tr.success>th,.table>tfoot>tr.success>th{background-color:#dff0d8}.table-hover>tbody>tr>td.success:hover,.table-hover>tbody>tr>th.success:hover,.table-hover>tbody>tr.success:hover>td,.table-hover>tbody>tr.success:hover>th{background-color:#d0e9c6}.table>thead>tr>td.info,.table>tbody>tr>td.info,.table>tfoot>tr>td.info,.table>thead>tr>th.info,.table>tbody>tr>th.info,.table>tfoot>tr>th.info,.table>thead>tr.info>td,.table>tbody>tr.info>td,.table>tfoot>tr.info>td,.table>thead>tr.info>th,.table>tbody>tr.info>th,.table>tfoot>tr.info>th{background-color:#d9edf7}.table-hover>tbody>tr>td.info:hover,.table-hover>tbody>tr>th.info:hover,.table-hover>tbody>tr.info:hover>td,.table-hover>tbody>tr.info:hover>th{background-color:#c4e3f3}.table>thead>tr>td.warning,.table>tbody>tr>td.warning,.table>tfoot>tr>td.warning,.table>thead>tr>th.warning,.table>tbody>tr>th.warning,.table>tfoot>tr>th.warning,.table>thead>tr.warning>td,.table>tbody>tr.warning>td,.table>tfoot>tr.warning>td,.table>thead>tr.warning>th,.table>tbody>tr.warning>th,.table>tfoot>tr.warning>th{background-color:#fcf8e3}.table-hover>tbody>tr>td.warning:hover,.table-hover>tbody>tr>th.warning:hover,.table-hover>tbody>tr.warning:hover>td,.table-hover>tbody>tr.warning:hover>th{background-color:#faf2cc}.table>thead>tr>td.danger,.table>tbody>tr>td.danger,.table>tfoot>tr>td.danger,.table>thead>tr>th.danger,.table>tbody>tr>th.danger,.table>tfoot>tr>th.danger,.table>thead>tr.danger>td,.table>tbody>tr.danger>td,.table>tfoot>tr.danger>td,.table>thead>tr.danger>th,.table>tbody>tr.danger>th,.table>tfoot>tr.danger>th{background-color:#f2dede}.table-hover>tbody>tr>td.danger:hover,.table-hover>tbody>tr>th.danger:hover,.table-hover>tbody>tr.danger:hover>td,.table-hover>tbody>tr.danger:hover>th{background-color:#ebcccc}@media (max-width:767px){.table-responsive{width:100%;margin-bottom:15px;overflow-y:hidden;overflow-x:scroll;-ms-overflow-style:-ms-autohiding-scrollbar;border:1px solid #ddd;-webkit-overflow-scrolling:touch}.table-responsive>.table{margin-bottom:0}.table-responsive>.table>thead>tr>th,.table-responsive>.table>tbody>tr>th,.table-responsive>.table>tfoot>tr>th,.table-responsive>.table>thead>tr>td,.table-responsive>.table>tbody>tr>td,.table-responsive>.table>tfoot>tr>td{white-space:nowrap}.table-responsive>.table-bordered{border:0}.table-responsive>.table-bordered>thead>tr>th:first-child,.table-responsive>.table-bordered>tbody>tr>th:first-child,.table-responsive>.table-bordered>tfoot>tr>th:first-child,.table-responsive>.table-bordered>thead>tr>td:first-child,.table-responsive>.table-bordered>tbody>tr>td:first-child,.table-responsive>.table-bordered>tfoot>tr>td:first-child{border-left:0}.table-responsive>.table-bordered>thead>tr>th:last-child,.table-responsive>.table-bordered>tbody>tr>th:last-child,.table-responsive>.table-bordered>tfoot>tr>th:last-child,.table-responsive>.table-bordered>thead>tr>td:last-child,.table-responsive>.table-bordered>tbody>tr>td:last-child,.table-responsive>.table-bordered>tfoot>tr>td:last-child{border-right:0}.table-responsive>.table-bordered>tbody>tr:last-child>th,.table-responsive>.table-bordered>tfoot>tr:last-child>th,.table-responsive>.table-bordered>tbody>tr:last-child>td,.table-responsive>.table-bordered>tfoot>tr:last-child>td{border-bottom:0}}fieldset{padding:0;margin:0;border:0;min-width:0}legend{display:block;width:100%;padding:0;margin-bottom:20px;font-size:21px;line-height:inherit;color:#333;border:0;border-bottom:1px solid #e5e5e5}label{display:inline-block;margin-bottom:5px;font-weight:700}input[type=search]{-webkit-box-sizing:border-box;-moz-box-sizing:border-box;box-sizing:border-box}input[type=radio],input[type=checkbox]{margin:4px 0 0;margin-top:1px \9;line-height:normal}input[type=file]{display:block}input[type=range]{display:block;width:100%}select[multiple],select[size]{height:auto}input[type=file]:focus,input[type=radio]:focus,input[type=checkbox]:focus{outline:thin dotted;outline:5px auto -webkit-focus-ring-color;outline-offset:-2px}output{display:block;padding-top:7px;font-size:14px;line-height:1.428571429;color:#555}.form-control{display:block;width:100%;height:34px;padding:6px 12px;font-size:14px;line-height:1.428571429;color:#555;background-color:#fff;background-image:none;border:1px solid #ccc;border-radius:4px;-webkit-box-shadow:inset 0 1px 1px rgba(0,0,0,.075);box-shadow:inset 0 1px 1px rgba(0,0,0,.075);-webkit-transition:border-color ease-in-out .15s,box-shadow ease-in-out .15s;transition:border-color ease-in-out .15s,box-shadow ease-in-out .15s}.form-control:focus{border-color:#66afe9;outline:0;-webkit-box-shadow:inset 0 1px 1px rgba(0,0,0,.075),0 0 8px rgba(102,175,233,.6);box-shadow:inset 0 1px 1px rgba(0,0,0,.075),0 0 8px rgba(102,175,233,.6)}.form-control:-moz-placeholder{color:#999}.form-control::-moz-placeholder{color:#999;opacity:1}.form-control:-ms-input-placeholder{color:#999}.form-control::-webkit-input-placeholder{color:#999}.form-control[disabled],.form-control[readonly],fieldset[disabled] .form-control{cursor:not-allowed;background-color:#eee;opacity:1}textarea.form-control{height:auto}input[type=date]{line-height:34px}.form-group{margin-bottom:15px}.radio,.checkbox{display:block;min-height:20px;margin-top:10px;margin-bottom:10px;padding-left:20px}.radio label,.checkbox label{display:inline;font-weight:400;cursor:pointer}.radio input[type=radio],.radio-inline input[type=radio],.checkbox input[type=checkbox],.checkbox-inline input[type=checkbox]{float:left;margin-left:-20px}.radio+.radio,.checkbox+.checkbox{margin-top:-5px}.radio-inline,.checkbox-inline{display:inline-block;padding-left:20px;margin-bottom:0;vertical-align:middle;font-weight:400;cursor:pointer}.radio-inline+.radio-inline,.checkbox-inline+.checkbox-inline{margin-top:0;margin-left:10px}input[type=radio][disabled],input[type=checkbox][disabled],.radio[disabled],.radio-inline[disabled],.checkbox[disabled],.checkbox-inline[disabled],fieldset[disabled] input[type=radio],fieldset[disabled] input[type=checkbox],fieldset[disabled] .radio,fieldset[disabled] .radio-inline,fieldset[disabled] .checkbox,fieldset[disabled] .checkbox-inline{cursor:not-allowed}.input-sm{height:30px;padding:5px 10px;font-size:12px;line-height:1.5;border-radius:3px}select.input-sm{height:30px;line-height:30px}textarea.input-sm,select[multiple].input-sm{height:auto}.input-lg{height:46px;padding:10px 16px;font-size:18px;line-height:1.33;border-radius:6px}select.input-lg{height:46px;line-height:46px}textarea.input-lg,select[multiple].input-lg{height:auto}.has-feedback{position:relative}.has-feedback .form-control{padding-right:42.5px}.has-feedback .form-control-feedback{position:absolute;top:25px;right:0;display:block;width:34px;height:34px;line-height:34px;text-align:center}.has-success .help-block,.has-success .control-label,.has-success .radio,.has-success .checkbox,.has-success .radio-inline,.has-success .checkbox-inline{color:#3c763d}.has-success .form-control{border-color:#3c763d;-webkit-box-shadow:inset 0 1px 1px rgba(0,0,0,.075);box-shadow:inset 0 1px 1px rgba(0,0,0,.075)}.has-success .form-control:focus{border-color:#2b542c;-webkit-box-shadow:inset 0 1px 1px rgba(0,0,0,.075),0 0 6px #67b168;box-shadow:inset 0 1px 1px rgba(0,0,0,.075),0 0 6px #67b168}.has-success .input-group-addon{color:#3c763d;border-color:#3c763d;background-color:#dff0d8}.has-success .form-control-feedback{color:#3c763d}.has-warning .help-block,.has-warning .control-label,.has-warning .radio,.has-warning .checkbox,.has-warning .radio-inline,.has-warning .checkbox-inline{color:#8a6d3b}.has-warning .form-control{border-color:#8a6d3b;-webkit-box-shadow:inset 0 1px 1px rgba(0,0,0,.075);box-shadow:inset 0 1px 1px rgba(0,0,0,.075)}.has-warning .form-control:focus{border-color:#66512c;-webkit-box-shadow:inset 0 1px 1px rgba(0,0,0,.075),0 0 6px #c0a16b;box-shadow:inset 0 1px 1px rgba(0,0,0,.075),0 0 6px #c0a16b}.has-warning .input-group-addon{color:#8a6d3b;border-color:#8a6d3b;background-color:#fcf8e3}.has-warning .form-control-feedback{color:#8a6d3b}.has-error .help-block,.has-error .control-label,.has-error .radio,.has-error .checkbox,.has-error .radio-inline,.has-error .checkbox-inline{color:#a94442}.has-error .form-control{border-color:#a94442;-webkit-box-shadow:inset 0 1px 1px rgba(0,0,0,.075);box-shadow:inset 0 1px 1px rgba(0,0,0,.075)}.has-error .form-control:focus{border-color:#843534;-webkit-box-shadow:inset 0 1px 1px rgba(0,0,0,.075),0 0 6px #ce8483;box-shadow:inset 0 1px 1px rgba(0,0,0,.075),0 0 6px #ce8483}.has-error .input-group-addon{color:#a94442;border-color:#a94442;background-color:#f2dede}.has-error .form-control-feedback{color:#a94442}.form-control-static{margin-bottom:0}.help-block{display:block;margin-top:5px;margin-bottom:10px;color:#737373}@media (min-width:768px){.form-inline .form-group{display:inline-block;margin-bottom:0;vertical-align:middle}.form-inline .form-control{display:inline-block;width:auto;vertical-align:middle}.form-inline .control-label{margin-bottom:0;vertical-align:middle}.form-inline .radio,.form-inline .checkbox{display:inline-block;margin-top:0;margin-bottom:0;padding-left:0;vertical-align:middle}.form-inline .radio input[type=radio],.form-inline .checkbox input[type=checkbox]{float:none;margin-left:0}.form-inline .has-feedback .form-control-feedback{top:0}}.form-horizontal .control-label,.form-horizontal .radio,.form-horizontal .checkbox,.form-horizontal .radio-inline,.form-horizontal .checkbox-inline{margin-top:0;margin-bottom:0;padding-top:7px}.form-horizontal .radio,.form-horizontal .checkbox{min-height:27px}.form-horizontal .form-group{margin-left:-15px;margin-right:-15px}.form-horizontal .form-control-static{padding-top:7px}@media (min-width:768px){.form-horizontal .control-label{text-align:right}}.form-horizontal .has-feedback .form-control-feedback{top:0;right:15px}.btn{display:inline-block;margin-bottom:0;font-weight:400;text-align:center;vertical-align:middle;cursor:pointer;background-image:none;border:1px solid transparent;white-space:nowrap;padding:6px 12px;font-size:14px;line-height:1.428571429;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:thin dotted;outline:5px auto -webkit-focus-ring-color;outline-offset:-2px}.btn:hover,.btn:focus{color:#333;text-decoration:none}.btn:active,.btn.active{outline:0;background-image:none;-webkit-box-shadow:inset 0 3px 5px rgba(0,0,0,.125);box-shadow:inset 0 3px 5px rgba(0,0,0,.125)}.btn.disabled,.btn[disabled],fieldset[disabled] .btn{cursor:not-allowed;pointer-events:none;opacity:.65;filter:alpha(opacity=65);-webkit-box-shadow:none;box-shadow:none}.btn-default{color:#333;background-color:#fff;border-color:#ccc}.btn-default:hover,.btn-default:focus,.btn-default:active,.btn-default.active,.open .dropdown-toggle.btn-default{color:#333;background-color:#ebebeb;border-color:#adadad}.btn-default:active,.btn-default.active,.open .dropdown-toggle.btn-default{background-image:none}.btn-default.disabled,.btn-default[disabled],fieldset[disabled] .btn-default,.btn-default.disabled:hover,.btn-default[disabled]:hover,fieldset[disabled] .btn-default:hover,.btn-default.disabled:focus,.btn-default[disabled]:focus,fieldset[disabled] .btn-default:focus,.btn-default.disabled:active,.btn-default[disabled]:active,fieldset[disabled] .btn-default:active,.btn-default.disabled.active,.btn-default[disabled].active,fieldset[disabled] .btn-default.active{background-color:#fff;border-color:#ccc}.btn-default .badge{color:#fff;background-color:#333}.btn-primary{color:#fff;background-color:#428bca;border-color:#357ebd}.btn-primary:hover,.btn-primary:focus,.btn-primary:active,.btn-primary.active,.open .dropdown-toggle.btn-primary{color:#fff;background-color:#3276b1;border-color:#285e8e}.btn-primary:active,.btn-primary.active,.open .dropdown-toggle.btn-primary{background-image:none}.btn-primary.disabled,.btn-primary[disabled],fieldset[disabled] .btn-primary,.btn-primary.disabled:hover,.btn-primary[disabled]:hover,fieldset[disabled] .btn-primary:hover,.btn-primary.disabled:focus,.btn-primary[disabled]:focus,fieldset[disabled] .btn-primary:focus,.btn-primary.disabled:active,.btn-primary[disabled]:active,fieldset[disabled] .btn-primary:active,.btn-primary.disabled.active,.btn-primary[disabled].active,fieldset[disabled] .btn-primary.active{background-color:#428bca;border-color:#357ebd}.btn-primary .badge{color:#428bca;background-color:#fff}.btn-success{color:#fff;background-color:#5cb85c;border-color:#4cae4c}.btn-success:hover,.btn-success:focus,.btn-success:active,.btn-success.active,.open .dropdown-toggle.btn-success{color:#fff;background-color:#47a447;border-color:#398439}.btn-success:active,.btn-success.active,.open .dropdown-toggle.btn-success{background-image:none}.btn-success.disabled,.btn-success[disabled],fieldset[disabled] .btn-success,.btn-success.disabled:hover,.btn-success[disabled]:hover,fieldset[disabled] .btn-success:hover,.btn-success.disabled:focus,.btn-success[disabled]:focus,fieldset[disabled] .btn-success:focus,.btn-success.disabled:active,.btn-success[disabled]:active,fieldset[disabled] .btn-success:active,.btn-success.disabled.active,.btn-success[disabled].active,fieldset[disabled] .btn-success.active{background-color:#5cb85c;border-color:#4cae4c}.btn-success .badge{color:#5cb85c;background-color:#fff}.btn-info{color:#fff;background-color:#5bc0de;border-color:#46b8da}.btn-info:hover,.btn-info:focus,.btn-info:active,.btn-info.active,.open .dropdown-toggle.btn-info{color:#fff;background-color:#39b3d7;border-color:#269abc}.btn-info:active,.btn-info.active,.open .dropdown-toggle.btn-info{background-image:none}.btn-info.disabled,.btn-info[disabled],fieldset[disabled] .btn-info,.btn-info.disabled:hover,.btn-info[disabled]:hover,fieldset[disabled] .btn-info:hover,.btn-info.disabled:focus,.btn-info[disabled]:focus,fieldset[disabled] .btn-info:focus,.btn-info.disabled:active,.btn-info[disabled]:active,fieldset[disabled] .btn-info:active,.btn-info.disabled.active,.btn-info[disabled].active,fieldset[disabled] .btn-info.active{background-color:#5bc0de;border-color:#46b8da}.btn-info .badge{color:#5bc0de;background-color:#fff}.btn-warning{color:#fff;background-color:#f0ad4e;border-color:#eea236}.btn-warning:hover,.btn-warning:focus,.btn-warning:active,.btn-warning.active,.open .dropdown-toggle.btn-warning{color:#fff;background-color:#ed9c28;border-color:#d58512}.btn-warning:active,.btn-warning.active,.open .dropdown-toggle.btn-warning{background-image:none}.btn-warning.disabled,.btn-warning[disabled],fieldset[disabled] .btn-warning,.btn-warning.disabled:hover,.btn-warning[disabled]:hover,fieldset[disabled] .btn-warning:hover,.btn-warning.disabled:focus,.btn-warning[disabled]:focus,fieldset[disabled] .btn-warning:focus,.btn-warning.disabled:active,.btn-warning[disabled]:active,fieldset[disabled] .btn-warning:active,.btn-warning.disabled.active,.btn-warning[disabled].active,fieldset[disabled] .btn-warning.active{background-color:#f0ad4e;border-color:#eea236}.btn-warning .badge{color:#f0ad4e;background-color:#fff}.btn-danger{color:#fff;background-color:#d9534f;border-color:#d43f3a}.btn-danger:hover,.btn-danger:focus,.btn-danger:active,.btn-danger.active,.open .dropdown-toggle.btn-danger{color:#fff;background-color:#d2322d;border-color:#ac2925}.btn-danger:active,.btn-danger.active,.open .dropdown-toggle.btn-danger{background-image:none}.btn-danger.disabled,.btn-danger[disabled],fieldset[disabled] .btn-danger,.btn-danger.disabled:hover,.btn-danger[disabled]:hover,fieldset[disabled] .btn-danger:hover,.btn-danger.disabled:focus,.btn-danger[disabled]:focus,fieldset[disabled] .btn-danger:focus,.btn-danger.disabled:active,.btn-danger[disabled]:active,fieldset[disabled] .btn-danger:active,.btn-danger.disabled.active,.btn-danger[disabled].active,fieldset[disabled] .btn-danger.active{background-color:#d9534f;border-color:#d43f3a}.btn-danger .badge{color:#d9534f;background-color:#fff}.btn-link{color:#428bca;font-weight:400;cursor:pointer;border-radius:0}.btn-link,.btn-link:active,.btn-link[disabled],fieldset[disabled] .btn-link{background-color:transparent;-webkit-box-shadow:none;box-shadow:none}.btn-link,.btn-link:hover,.btn-link:focus,.btn-link:active{border-color:transparent}.btn-link:hover,.btn-link:focus{color:#2a6496;text-decoration:underline;background-color:transparent}.btn-link[disabled]:hover,fieldset[disabled] .btn-link:hover,.btn-link[disabled]:focus,fieldset[disabled] .btn-link:focus{color:#999;text-decoration:none}.btn-lg{padding:10px 16px;font-size:18px;line-height:1.33;border-radius:6px}.btn-sm{padding:5px 10px;font-size:12px;line-height:1.5;border-radius:3px}.btn-xs{padding:1px 5px;font-size:12px;line-height:1.5;border-radius:3px}.btn-block{display:block;width:100%;padding-left:0;padding-right:0}.btn-block+.btn-block{margin-top:5px}input[type=submit].btn-block,input[type=reset].btn-block,input[type=button].btn-block{width:100%}.fade{opacity:0;-webkit-transition:opacity .15s linear;transition:opacity .15s linear}.fade.in{opacity:1}.collapse{display:none}.collapse.in{display:block}.collapsing{position:relative;height:0;overflow:hidden;-webkit-transition:height .35s ease;transition:height .35s ease}@font-face{font-family:'Glyphicons Halflings';src:url(../fonts/glyphicons-halflings-regular.eot);src:url(../fonts/glyphicons-halflings-regular.eot?#iefix) format('embedded-opentype'),url(../fonts/glyphicons-halflings-regular.woff) format('woff'),url(../fonts/glyphicons-halflings-regular.ttf) format('truetype'),url(../fonts/glyphicons-halflings-regular.svg#glyphicons_halflingsregular) format('svg')}.glyphicon{position:relative;top:1px;display:inline-block;font-family:'Glyphicons Halflings';font-style:normal;font-weight:400;line-height:1;-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale}.glyphicon-asterisk:before{content:"\2a"}.glyphicon-plus:before{content:"\2b"}.glyphicon-euro:before{content:"\20ac"}.glyphicon-minus:before{content:"\2212"}.glyphicon-cloud:before{content:"\2601"}.glyphicon-envelope:before{content:"\2709"}.glyphicon-pencil:before{content:"\270f"}.glyphicon-glass:before{content:"\e001"}.glyphicon-music:before{content:"\e002"}.glyphicon-search:before{content:"\e003"}.glyphicon-heart:before{content:"\e005"}.glyphicon-star:before{content:"\e006"}.glyphicon-star-empty:before{content:"\e007"}.glyphicon-user:before{content:"\e008"}.glyphicon-film:before{content:"\e009"}.glyphicon-th-large:before{content:"\e010"}.glyphicon-th:before{content:"\e011"}.glyphicon-th-list:before{content:"\e012"}.glyphicon-ok:before{content:"\e013"}.glyphicon-remove:before{content:"\e014"}.glyphicon-zoom-in:before{content:"\e015"}.glyphicon-zoom-out:before{content:"\e016"}.glyphicon-off:before{content:"\e017"}.glyphicon-signal:before{content:"\e018"}.glyphicon-cog:before{content:"\e019"}.glyphicon-trash:before{content:"\e020"}.glyphicon-home:before{content:"\e021"}.glyphicon-file:before{content:"\e022"}.glyphicon-time:before{content:"\e023"}.glyphicon-road:before{content:"\e024"}.glyphicon-download-alt:before{content:"\e025"}.glyphicon-download:before{content:"\e026"}.glyphicon-upload:before{content:"\e027"}.glyphicon-inbox:before{content:"\e028"}.glyphicon-play-circle:before{content:"\e029"}.glyphicon-repeat:before{content:"\e030"}.glyphicon-refresh:before{content:"\e031"}.glyphicon-list-alt:before{content:"\e032"}.glyphicon-lock:before{content:"\e033"}.glyphicon-flag:before{content:"\e034"}.glyphicon-headphones:before{content:"\e035"}.glyphicon-volume-off:before{content:"\e036"}.glyphicon-volume-down:before{content:"\e037"}.glyphicon-volume-up:before{content:"\e038"}.glyphicon-qrcode:before{content:"\e039"}.glyphicon-barcode:before{content:"\e040"}.glyphicon-tag:before{content:"\e041"}.glyphicon-tags:before{content:"\e042"}.glyphicon-book:before{content:"\e043"}.glyphicon-bookmark:before{content:"\e044"}.glyphicon-print:before{content:"\e045"}.glyphicon-camera:before{content:"\e046"}.glyphicon-font:before{content:"\e047"}.glyphicon-bold:before{content:"\e048"}.glyphicon-italic:before{content:"\e049"}.glyphicon-text-height:before{content:"\e050"}.glyphicon-text-width:before{content:"\e051"}.glyphicon-align-left:before{content:"\e052"}.glyphicon-align-center:before{content:"\e053"}.glyphicon-align-right:before{content:"\e054"}.glyphicon-align-justify:before{content:"\e055"}.glyphicon-list:before{content:"\e056"}.glyphicon-indent-left:before{content:"\e057"}.glyphicon-indent-right:before{content:"\e058"}.glyphicon-facetime-video:before{content:"\e059"}.glyphicon-picture:before{content:"\e060"}.glyphicon-map-marker:before{content:"\e062"}.glyphicon-adjust:before{content:"\e063"}.glyphicon-tint:before{content:"\e064"}.glyphicon-edit:before{content:"\e065"}.glyphicon-share:before{content:"\e066"}.glyphicon-check:before{content:"\e067"}.glyphicon-move:before{content:"\e068"}.glyphicon-step-backward:before{content:"\e069"}.glyphicon-fast-backward:before{content:"\e070"}.glyphicon-backward:before{content:"\e071"}.glyphicon-play:before{content:"\e072"}.glyphicon-pause:before{content:"\e073"}.glyphicon-stop:before{content:"\e074"}.glyphicon-forward:before{content:"\e075"}.glyphicon-fast-forward:before{content:"\e076"}.glyphicon-step-forward:before{content:"\e077"}.glyphicon-eject:before{content:"\e078"}.glyphicon-chevron-left:before{content:"\e079"}.glyphicon-chevron-right:before{content:"\e080"}.glyphicon-plus-sign:before{content:"\e081"}.glyphicon-minus-sign:before{content:"\e082"}.glyphicon-remove-sign:before{content:"\e083"}.glyphicon-ok-sign:before{content:"\e084"}.glyphicon-question-sign:before{content:"\e085"}.glyphicon-info-sign:before{content:"\e086"}.glyphicon-screenshot:before{content:"\e087"}.glyphicon-remove-circle:before{content:"\e088"}.glyphicon-ok-circle:before{content:"\e089"}.glyphicon-ban-circle:before{content:"\e090"}.glyphicon-arrow-left:before{content:"\e091"}.glyphicon-arrow-right:before{content:"\e092"}.glyphicon-arrow-up:before{content:"\e093"}.glyphicon-arrow-down:before{content:"\e094"}.glyphicon-share-alt:before{content:"\e095"}.glyphicon-resize-full:before{content:"\e096"}.glyphicon-resize-small:before{content:"\e097"}.glyphicon-exclamation-sign:before{content:"\e101"}.glyphicon-gift:before{content:"\e102"}.glyphicon-leaf:before{content:"\e103"}.glyphicon-fire:before{content:"\e104"}.glyphicon-eye-open:before{content:"\e105"}.glyphicon-eye-close:before{content:"\e106"}.glyphicon-warning-sign:before{content:"\e107"}.glyphicon-plane:before{content:"\e108"}.glyphicon-calendar:before{content:"\e109"}.glyphicon-random:before{content:"\e110"}.glyphicon-comment:before{content:"\e111"}.glyphicon-magnet:before{content:"\e112"}.glyphicon-chevron-up:before{content:"\e113"}.glyphicon-chevron-down:before{content:"\e114"}.glyphicon-retweet:before{content:"\e115"}.glyphicon-shopping-cart:before{content:"\e116"}.glyphicon-folder-close:before{content:"\e117"}.glyphicon-folder-open:before{content:"\e118"}.glyphicon-resize-vertical:before{content:"\e119"}.glyphicon-resize-horizontal:before{content:"\e120"}.glyphicon-hdd:before{content:"\e121"}.glyphicon-bullhorn:before{content:"\e122"}.glyphicon-bell:before{content:"\e123"}.glyphicon-certificate:before{content:"\e124"}.glyphicon-thumbs-up:before{content:"\e125"}.glyphicon-thumbs-down:before{content:"\e126"}.glyphicon-hand-right:before{content:"\e127"}.glyphicon-hand-left:before{content:"\e128"}.glyphicon-hand-up:before{content:"\e129"}.glyphicon-hand-down:before{content:"\e130"}.glyphicon-circle-arrow-right:before{content:"\e131"}.glyphicon-circle-arrow-left:before{content:"\e132"}.glyphicon-circle-arrow-up:before{content:"\e133"}.glyphicon-circle-arrow-down:before{content:"\e134"}.glyphicon-globe:before{content:"\e135"}.glyphicon-wrench:before{content:"\e136"}.glyphicon-tasks:before{content:"\e137"}.glyphicon-filter:before{content:"\e138"}.glyphicon-briefcase:before{content:"\e139"}.glyphicon-fullscreen:before{content:"\e140"}.glyphicon-dashboard:before{content:"\e141"}.glyphicon-paperclip:before{content:"\e142"}.glyphicon-heart-empty:before{content:"\e143"}.glyphicon-link:before{content:"\e144"}.glyphicon-phone:before{content:"\e145"}.glyphicon-pushpin:before{content:"\e146"}.glyphicon-usd:before{content:"\e148"}.glyphicon-gbp:before{content:"\e149"}.glyphicon-sort:before{content:"\e150"}.glyphicon-sort-by-alphabet:before{content:"\e151"}.glyphicon-sort-by-alphabet-alt:before{content:"\e152"}.glyphicon-sort-by-order:before{content:"\e153"}.glyphicon-sort-by-order-alt:before{content:"\e154"}.glyphicon-sort-by-attributes:before{content:"\e155"}.glyphicon-sort-by-attributes-alt:before{content:"\e156"}.glyphicon-unchecked:before{content:"\e157"}.glyphicon-expand:before{content:"\e158"}.glyphicon-collapse-down:before{content:"\e159"}.glyphicon-collapse-up:before{content:"\e160"}.glyphicon-log-in:before{content:"\e161"}.glyphicon-flash:before{content:"\e162"}.glyphicon-log-out:before{content:"\e163"}.glyphicon-new-window:before{content:"\e164"}.glyphicon-record:before{content:"\e165"}.glyphicon-save:before{content:"\e166"}.glyphicon-open:before{content:"\e167"}.glyphicon-saved:before{content:"\e168"}.glyphicon-import:before{content:"\e169"}.glyphicon-export:before{content:"\e170"}.glyphicon-send:before{content:"\e171"}.glyphicon-floppy-disk:before{content:"\e172"}.glyphicon-floppy-saved:before{content:"\e173"}.glyphicon-floppy-remove:before{content:"\e174"}.glyphicon-floppy-save:before{content:"\e175"}.glyphicon-floppy-open:before{content:"\e176"}.glyphicon-credit-card:before{content:"\e177"}.glyphicon-transfer:before{content:"\e178"}.glyphicon-cutlery:before{content:"\e179"}.glyphicon-header:before{content:"\e180"}.glyphicon-compressed:before{content:"\e181"}.glyphicon-earphone:before{content:"\e182"}.glyphicon-phone-alt:before{content:"\e183"}.glyphicon-tower:before{content:"\e184"}.glyphicon-stats:before{content:"\e185"}.glyphicon-sd-video:before{content:"\e186"}.glyphicon-hd-video:before{content:"\e187"}.glyphicon-subtitles:before{content:"\e188"}.glyphicon-sound-stereo:before{content:"\e189"}.glyphicon-sound-dolby:before{content:"\e190"}.glyphicon-sound-5-1:before{content:"\e191"}.glyphicon-sound-6-1:before{content:"\e192"}.glyphicon-sound-7-1:before{content:"\e193"}.glyphicon-copyright-mark:before{content:"\e194"}.glyphicon-registration-mark:before{content:"\e195"}.glyphicon-cloud-download:before{content:"\e197"}.glyphicon-cloud-upload:before{content:"\e198"}.glyphicon-tree-conifer:before{content:"\e199"}.glyphicon-tree-deciduous:before{content:"\e200"}.caret{display:inline-block;width:0;height:0;margin-left:2px;vertical-align:middle;border-top:4px solid;border-right:4px solid transparent;border-left:4px solid transparent}.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;list-style:none;font-size:14px;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:hover,.dropdown-menu>li>a:focus{text-decoration:none;color:#262626;background-color:#f5f5f5}.dropdown-menu>.active>a,.dropdown-menu>.active>a:hover,.dropdown-menu>.active>a:focus{color:#fff;text-decoration:none;outline:0;background-color:#428bca}.dropdown-menu>.disabled>a,.dropdown-menu>.disabled>a:hover,.dropdown-menu>.disabled>a:focus{color:#999}.dropdown-menu>.disabled>a:hover,.dropdown-menu>.disabled>a:focus{text-decoration:none;background-color:transparent;background-image:none;filter:progid:DXImageTransform.Microsoft.gradient(enabled=false);cursor:not-allowed}.open>.dropdown-menu{display:block}.open>a{outline:0}.dropdown-menu-right{left:auto;right:0}.dropdown-menu-left{left:0;right:auto}.dropdown-header{display:block;padding:3px 20px;font-size:12px;line-height:1.428571429;color:#999}.dropdown-backdrop{position:fixed;left:0;right:0;bottom:0;top:0;z-index:990}.pull-right>.dropdown-menu{right:0;left:auto}.dropup .caret,.navbar-fixed-bottom .dropdown .caret{border-top:0;border-bottom:4px solid;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{left:auto;right:0}.navbar-right .dropdown-menu-left{left:0;right:auto}}.btn-group,.btn-group-vertical{position:relative;display:inline-block;vertical-align:middle}.btn-group>.btn,.btn-group-vertical>.btn{position:relative;float:left}.btn-group>.btn:hover,.btn-group-vertical>.btn:hover,.btn-group>.btn:focus,.btn-group-vertical>.btn:focus,.btn-group>.btn:active,.btn-group-vertical>.btn:active,.btn-group>.btn.active,.btn-group-vertical>.btn.active{z-index:2}.btn-group>.btn:focus,.btn-group-vertical>.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{margin-left:-5px}.btn-toolbar .btn-group,.btn-toolbar .input-group{float:left}.btn-toolbar>.btn,.btn-toolbar>.btn-group,.btn-toolbar>.input-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-bottom-right-radius:0;border-top-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-bottom-right-radius:0;border-top-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-left:8px;padding-right:8px}.btn-group>.btn-lg+.dropdown-toggle{padding-left:12px;padding-right: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-group.open .dropdown-toggle.btn-link{-webkit-box-shadow:none;box-shadow:none}.btn .caret{margin-left:0}.btn-lg .caret{border-width:5px 5px 0;border-bottom-width:0}.dropup .btn-lg .caret{border-width:0 5px 5px}.btn-group-vertical>.btn,.btn-group-vertical>.btn-group,.btn-group-vertical>.btn-group>.btn{display:block;float:none;width:100%;max-width:100%}.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-bottom-left-radius:4px;border-top-right-radius:0;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:not(:last-child)>.btn:last-child,.btn-group-vertical>.btn-group:first-child:not(:last-child)>.dropdown-toggle{border-bottom-right-radius:0;border-bottom-left-radius:0}.btn-group-vertical>.btn-group:last-child:not(:first-child)>.btn:first-child{border-top-right-radius:0;border-top-left-radius:0}.btn-group-justified{display:table;width:100%;table-layout:fixed;border-collapse:separate}.btn-group-justified>.btn,.btn-group-justified>.btn-group{float:none;display:table-cell;width:1%}.btn-group-justified>.btn-group .btn{width:100%}[data-toggle=buttons]>.btn>input[type=radio],[data-toggle=buttons]>.btn>input[type=checkbox]{display:none}.input-group{position:relative;display:table;border-collapse:separate}.input-group[class*=col-]{float:none;padding-left:0;padding-right:0}.input-group .form-control{float:left;width:100%;margin-bottom:0}.input-group-lg>.form-control,.input-group-lg>.input-group-addon,.input-group-lg>.input-group-btn>.btn{height:46px;padding:10px 16px;font-size:18px;line-height:1.33;border-radius:6px}select.input-group-lg>.form-control,select.input-group-lg>.input-group-addon,select.input-group-lg>.input-group-btn>.btn{height:46px;line-height:46px}textarea.input-group-lg>.form-control,textarea.input-group-lg>.input-group-addon,textarea.input-group-lg>.input-group-btn>.btn,select[multiple].input-group-lg>.form-control,select[multiple].input-group-lg>.input-group-addon,select[multiple].input-group-lg>.input-group-btn>.btn{height:auto}.input-group-sm>.form-control,.input-group-sm>.input-group-addon,.input-group-sm>.input-group-btn>.btn{height:30px;padding:5px 10px;font-size:12px;line-height:1.5;border-radius:3px}select.input-group-sm>.form-control,select.input-group-sm>.input-group-addon,select.input-group-sm>.input-group-btn>.btn{height:30px;line-height:30px}textarea.input-group-sm>.form-control,textarea.input-group-sm>.input-group-addon,textarea.input-group-sm>.input-group-btn>.btn,select[multiple].input-group-sm>.form-control,select[multiple].input-group-sm>.input-group-addon,select[multiple].input-group-sm>.input-group-btn>.btn{height:auto}.input-group-addon,.input-group-btn,.input-group .form-control{display:table-cell}.input-group-addon:not(:first-child):not(:last-child),.input-group-btn:not(:first-child):not(:last-child),.input-group .form-control:not(:first-child):not(:last-child){border-radius:0}.input-group-addon,.input-group-btn{width:1%;white-space:nowrap;vertical-align:middle}.input-group-addon{padding:6px 12px;font-size:14px;font-weight:400;line-height:1;color:#555;text-align:center;background-color:#eee;border:1px solid #ccc;border-radius:4px}.input-group-addon.input-sm{padding:5px 10px;font-size:12px;border-radius:3px}.input-group-addon.input-lg{padding:10px 16px;font-size:18px;border-radius:6px}.input-group-addon input[type=radio],.input-group-addon input[type=checkbox]{margin-top:0}.input-group .form-control:first-child,.input-group-addon:first-child,.input-group-btn:first-child>.btn,.input-group-btn:first-child>.btn-group>.btn,.input-group-btn:first-child>.dropdown-toggle,.input-group-btn:last-child>.btn:not(:last-child):not(.dropdown-toggle),.input-group-btn:last-child>.btn-group:not(:last-child)>.btn{border-bottom-right-radius:0;border-top-right-radius:0}.input-group-addon:first-child{border-right:0}.input-group .form-control:last-child,.input-group-addon:last-child,.input-group-btn:last-child>.btn,.input-group-btn:last-child>.btn-group>.btn,.input-group-btn:last-child>.dropdown-toggle,.input-group-btn:first-child>.btn:not(:first-child),.input-group-btn:first-child>.btn-group:not(:first-child)>.btn{border-bottom-left-radius:0;border-top-left-radius:0}.input-group-addon:last-child{border-left:0}.input-group-btn{position:relative;font-size:0;white-space:nowrap}.input-group-btn>.btn{position:relative}.input-group-btn>.btn+.btn{margin-left:-1px}.input-group-btn>.btn:hover,.input-group-btn>.btn:focus,.input-group-btn>.btn:active{z-index:2}.input-group-btn:first-child>.btn,.input-group-btn:first-child>.btn-group{margin-right:-1px}.input-group-btn:last-child>.btn,.input-group-btn:last-child>.btn-group{margin-left:-1px}.nav{margin-bottom:0;padding-left:0;list-style:none}.nav>li{position:relative;display:block}.nav>li>a{position:relative;display:block;padding:10px 15px}.nav>li>a:hover,.nav>li>a:focus{text-decoration:none;background-color:#eee}.nav>li.disabled>a{color:#999}.nav>li.disabled>a:hover,.nav>li.disabled>a:focus{color:#999;text-decoration:none;background-color:transparent;cursor:not-allowed}.nav .open>a,.nav .open>a:hover,.nav .open>a:focus{background-color:#eee;border-color:#428bca}.nav .nav-divider{height:1px;margin:9px 0;overflow:hidden;background-color:#e5e5e5}.nav>li>a>img{max-width:none}.nav-tabs{border-bottom:1px solid #ddd}.nav-tabs>li{float:left;margin-bottom:-1px}.nav-tabs>li>a{margin-right:2px;line-height:1.428571429;border:1px solid transparent;border-radius:4px 4px 0 0}.nav-tabs>li>a:hover{border-color:#eee #eee #ddd}.nav-tabs>li.active>a,.nav-tabs>li.active>a:hover,.nav-tabs>li.active>a:focus{color:#555;background-color:#fff;border:1px solid #ddd;border-bottom-color:transparent;cursor:default}.nav-tabs.nav-justified{width:100%;border-bottom:0}.nav-tabs.nav-justified>li{float:none}.nav-tabs.nav-justified>li>a{text-align:center;margin-bottom:5px}.nav-tabs.nav-justified>.dropdown .dropdown-menu{top:auto;left:auto}@media (min-width:768px){.nav-tabs.nav-justified>li{display:table-cell;width:1%}.nav-tabs.nav-justified>li>a{margin-bottom:0}}.nav-tabs.nav-justified>li>a{margin-right:0;border-radius:4px}.nav-tabs.nav-justified>.active>a,.nav-tabs.nav-justified>.active>a:hover,.nav-tabs.nav-justified>.active>a:focus{border:1px solid #ddd}@media (min-width:768px){.nav-tabs.nav-justified>li>a{border-bottom:1px solid #ddd;border-radius:4px 4px 0 0}.nav-tabs.nav-justified>.active>a,.nav-tabs.nav-justified>.active>a:hover,.nav-tabs.nav-justified>.active>a:focus{border-bottom-color:#fff}}.nav-pills>li{float:left}.nav-pills>li>a{border-radius:4px}.nav-pills>li+li{margin-left:2px}.nav-pills>li.active>a,.nav-pills>li.active>a:hover,.nav-pills>li.active>a:focus{color:#fff;background-color:#428bca}.nav-stacked>li{float:none}.nav-stacked>li+li{margin-top:2px;margin-left:0}.nav-justified{width:100%}.nav-justified>li{float:none}.nav-justified>li>a{text-align:center;margin-bottom:5px}.nav-justified>.dropdown .dropdown-menu{top:auto;left:auto}@media (min-width:768px){.nav-justified>li{display:table-cell;width:1%}.nav-justified>li>a{margin-bottom:0}}.nav-tabs-justified{border-bottom:0}.nav-tabs-justified>li>a{margin-right:0;border-radius:4px}.nav-tabs-justified>.active>a,.nav-tabs-justified>.active>a:hover,.nav-tabs-justified>.active>a:focus{border:1px solid #ddd}@media (min-width:768px){.nav-tabs-justified>li>a{border-bottom:1px solid #ddd;border-radius:4px 4px 0 0}.nav-tabs-justified>.active>a,.nav-tabs-justified>.active>a:hover,.nav-tabs-justified>.active>a:focus{border-bottom-color:#fff}}.tab-content>.tab-pane{display:none}.tab-content>.active{display:block}.nav-tabs .dropdown-menu{margin-top:-1px;border-top-right-radius:0;border-top-left-radius:0}.navbar{position:relative;min-height:50px;margin-bottom:20px;border:1px solid transparent}@media (min-width:768px){.navbar{border-radius:4px}}@media (min-width:768px){.navbar-header{float:left}}.navbar-collapse{max-height:340px;overflow-x:visible;padding-right:15px;padding-left:15px;border-top:1px solid transparent;box-shadow:inset 0 1px 0 rgba(255,255,255,.1);-webkit-overflow-scrolling:touch}.navbar-collapse.in{overflow-y:auto}@media (min-width:768px){.navbar-collapse{width:auto;border-top:0;box-shadow:none}.navbar-collapse.collapse{display:block!important;height:auto!important;padding-bottom:0;overflow:visible!important}.navbar-collapse.in{overflow-y:visible}.navbar-fixed-top .navbar-collapse,.navbar-static-top .navbar-collapse,.navbar-fixed-bottom .navbar-collapse{padding-left:0;padding-right:0}}.container>.navbar-header,.container-fluid>.navbar-header,.container>.navbar-collapse,.container-fluid>.navbar-collapse{margin-right:-15px;margin-left:-15px}@media (min-width:768px){.container>.navbar-header,.container-fluid>.navbar-header,.container>.navbar-collapse,.container-fluid>.navbar-collapse{margin-right:0;margin-left:0}}.navbar-static-top{z-index:1000;border-width:0 0 1px}@media (min-width:768px){.navbar-static-top{border-radius:0}}.navbar-fixed-top,.navbar-fixed-bottom{position:fixed;right:0;left:0;z-index:1030}@media (min-width:768px){.navbar-fixed-top,.navbar-fixed-bottom{border-radius:0}}.navbar-fixed-top{top:0;border-width:0 0 1px}.navbar-fixed-bottom{bottom:0;margin-bottom:0;border-width:1px 0 0}.navbar-brand{float:left;padding:15px;font-size:18px;line-height:20px;height:20px}.navbar-brand:hover,.navbar-brand:focus{text-decoration:none}@media (min-width:768px){.navbar>.container .navbar-brand,.navbar>.container-fluid .navbar-brand{margin-left:-15px}}.navbar-toggle{position:relative;float:right;margin-right:15px;padding:9px 10px;margin-top:8px;margin-bottom:8px;background-color:transparent;background-image:none;border:1px solid transparent;border-radius:4px}.navbar-toggle:focus{outline:0}.navbar-toggle .icon-bar{display:block;width:22px;height:2px;border-radius:1px}.navbar-toggle .icon-bar+.icon-bar{margin-top:4px}@media (min-width:768px){.navbar-toggle{display:none}}.navbar-nav{margin:7.5px -15px}.navbar-nav>li>a{padding-top:10px;padding-bottom:10px;line-height:20px}@media (max-width:767px){.navbar-nav .open .dropdown-menu{position:static;float:none;width:auto;margin-top:0;background-color:transparent;border:0;box-shadow:none}.navbar-nav .open .dropdown-menu>li>a,.navbar-nav .open .dropdown-menu .dropdown-header{padding:5px 15px 5px 25px}.navbar-nav .open .dropdown-menu>li>a{line-height:20px}.navbar-nav .open .dropdown-menu>li>a:hover,.navbar-nav .open .dropdown-menu>li>a:focus{background-image:none}}@media (min-width:768px){.navbar-nav{float:left;margin:0}.navbar-nav>li{float:left}.navbar-nav>li>a{padding-top:15px;padding-bottom:15px}.navbar-nav.navbar-right:last-child{margin-right:-15px}}@media (min-width:768px){.navbar-left{float:left!important}.navbar-right{float:right!important}}.navbar-form{margin-left:-15px;margin-right:-15px;padding:10px 15px;border-top:1px solid transparent;border-bottom:1px solid transparent;-webkit-box-shadow:inset 0 1px 0 rgba(255,255,255,.1),0 1px 0 rgba(255,255,255,.1);box-shadow:inset 0 1px 0 rgba(255,255,255,.1),0 1px 0 rgba(255,255,255,.1);margin-top:8px;margin-bottom:8px}@media (min-width:768px){.navbar-form .form-group{display:inline-block;margin-bottom:0;vertical-align:middle}.navbar-form .form-control{display:inline-block;width:auto;vertical-align:middle}.navbar-form .control-label{margin-bottom:0;vertical-align:middle}.navbar-form .radio,.navbar-form .checkbox{display:inline-block;margin-top:0;margin-bottom:0;padding-left:0;vertical-align:middle}.navbar-form .radio input[type=radio],.navbar-form .checkbox input[type=checkbox]{float:none;margin-left:0}.navbar-form .has-feedback .form-control-feedback{top:0}}@media (max-width:767px){.navbar-form .form-group{margin-bottom:5px}}@media (min-width:768px){.navbar-form{width:auto;border:0;margin-left:0;margin-right:0;padding-top:0;padding-bottom:0;-webkit-box-shadow:none;box-shadow:none}.navbar-form.navbar-right:last-child{margin-right:-15px}}.navbar-nav>li>.dropdown-menu{margin-top:0;border-top-right-radius:0;border-top-left-radius:0}.navbar-fixed-bottom .navbar-nav>li>.dropdown-menu{border-bottom-right-radius:0;border-bottom-left-radius:0}.navbar-btn{margin-top:8px;margin-bottom:8px}.navbar-btn.btn-sm{margin-top:10px;margin-bottom:10px}.navbar-btn.btn-xs{margin-top:14px;margin-bottom:14px}.navbar-text{margin-top:15px;margin-bottom:15px}@media (min-width:768px){.navbar-text{float:left;margin-left:15px;margin-right:15px}.navbar-text.navbar-right:last-child{margin-right:0}}.navbar-default{background-color:#f8f8f8;border-color:#e7e7e7}.navbar-default .navbar-brand{color:#777}.navbar-default .navbar-brand:hover,.navbar-default .navbar-brand:focus{color:#5e5e5e;background-color:transparent}.navbar-default .navbar-text{color:#777}.navbar-default .navbar-nav>li>a{color:#777}.navbar-default .navbar-nav>li>a:hover,.navbar-default .navbar-nav>li>a:focus{color:#333;background-color:transparent}.navbar-default .navbar-nav>.active>a,.navbar-default .navbar-nav>.active>a:hover,.navbar-default .navbar-nav>.active>a:focus{color:#555;background-color:#e7e7e7}.navbar-default .navbar-nav>.disabled>a,.navbar-default .navbar-nav>.disabled>a:hover,.navbar-default .navbar-nav>.disabled>a:focus{color:#ccc;background-color:transparent}.navbar-default .navbar-toggle{border-color:#ddd}.navbar-default .navbar-toggle:hover,.navbar-default .navbar-toggle:focus{background-color:#ddd}.navbar-default .navbar-toggle .icon-bar{background-color:#888}.navbar-default .navbar-collapse,.navbar-default .navbar-form{border-color:#e7e7e7}.navbar-default .navbar-nav>.open>a,.navbar-default .navbar-nav>.open>a:hover,.navbar-default .navbar-nav>.open>a:focus{background-color:#e7e7e7;color:#555}@media (max-width:767px){.navbar-default .navbar-nav .open .dropdown-menu>li>a{color:#777}.navbar-default .navbar-nav .open .dropdown-menu>li>a:hover,.navbar-default .navbar-nav .open .dropdown-menu>li>a:focus{color:#333;background-color:transparent}.navbar-default .navbar-nav .open .dropdown-menu>.active>a,.navbar-default .navbar-nav .open .dropdown-menu>.active>a:hover,.navbar-default .navbar-nav .open .dropdown-menu>.active>a:focus{color:#555;background-color:#e7e7e7}.navbar-default .navbar-nav .open .dropdown-menu>.disabled>a,.navbar-default .navbar-nav .open .dropdown-menu>.disabled>a:hover,.navbar-default .navbar-nav .open .dropdown-menu>.disabled>a:focus{color:#ccc;background-color:transparent}}.navbar-default .navbar-link{color:#777}.navbar-default .navbar-link:hover{color:#333}.navbar-inverse{background-color:#222;border-color:#080808}.navbar-inverse .navbar-brand{color:#999}.navbar-inverse .navbar-brand:hover,.navbar-inverse .navbar-brand:focus{color:#fff;background-color:transparent}.navbar-inverse .navbar-text{color:#999}.navbar-inverse .navbar-nav>li>a{color:#999}.navbar-inverse .navbar-nav>li>a:hover,.navbar-inverse .navbar-nav>li>a:focus{color:#fff;background-color:transparent}.navbar-inverse .navbar-nav>.active>a,.navbar-inverse .navbar-nav>.active>a:hover,.navbar-inverse .navbar-nav>.active>a:focus{color:#fff;background-color:#080808}.navbar-inverse .navbar-nav>.disabled>a,.navbar-inverse .navbar-nav>.disabled>a:hover,.navbar-inverse .navbar-nav>.disabled>a:focus{color:#444;background-color:transparent}.navbar-inverse .navbar-toggle{border-color:#333}.navbar-inverse .navbar-toggle:hover,.navbar-inverse .navbar-toggle:focus{background-color:#333}.navbar-inverse .navbar-toggle .icon-bar{background-color:#fff}.navbar-inverse .navbar-collapse,.navbar-inverse .navbar-form{border-color:#101010}.navbar-inverse .navbar-nav>.open>a,.navbar-inverse .navbar-nav>.open>a:hover,.navbar-inverse .navbar-nav>.open>a:focus{background-color:#080808;color:#fff}@media (max-width:767px){.navbar-inverse .navbar-nav .open .dropdown-menu>.dropdown-header{border-color:#080808}.navbar-inverse .navbar-nav .open .dropdown-menu .divider{background-color:#080808}.navbar-inverse .navbar-nav .open .dropdown-menu>li>a{color:#999}.navbar-inverse .navbar-nav .open .dropdown-menu>li>a:hover,.navbar-inverse .navbar-nav .open .dropdown-menu>li>a:focus{color:#fff;background-color:transparent}.navbar-inverse .navbar-nav .open .dropdown-menu>.active>a,.navbar-inverse .navbar-nav .open .dropdown-menu>.active>a:hover,.navbar-inverse .navbar-nav .open .dropdown-menu>.active>a:focus{color:#fff;background-color:#080808}.navbar-inverse .navbar-nav .open .dropdown-menu>.disabled>a,.navbar-inverse .navbar-nav .open .dropdown-menu>.disabled>a:hover,.navbar-inverse .navbar-nav .open .dropdown-menu>.disabled>a:focus{color:#444;background-color:transparent}}.navbar-inverse .navbar-link{color:#999}.navbar-inverse .navbar-link:hover{color:#fff}.breadcrumb{padding:8px 15px;margin-bottom:20px;list-style:none;background-color:#f5f5f5;border-radius:4px}.breadcrumb>li{display:inline-block}.breadcrumb>li+li:before{content:"/\00a0";padding:0 5px;color:#ccc}.breadcrumb>.active{color:#999}.pagination{display:inline-block;padding-left:0;margin:20px 0;border-radius:4px}.pagination>li{display:inline}.pagination>li>a,.pagination>li>span{position:relative;float:left;padding:6px 12px;line-height:1.428571429;text-decoration:none;color:#428bca;background-color:#fff;border:1px solid #ddd;margin-left:-1px}.pagination>li:first-child>a,.pagination>li:first-child>span{margin-left:0;border-bottom-left-radius:4px;border-top-left-radius:4px}.pagination>li:last-child>a,.pagination>li:last-child>span{border-bottom-right-radius:4px;border-top-right-radius:4px}.pagination>li>a:hover,.pagination>li>span:hover,.pagination>li>a:focus,.pagination>li>span:focus{color:#2a6496;background-color:#eee;border-color:#ddd}.pagination>.active>a,.pagination>.active>span,.pagination>.active>a:hover,.pagination>.active>span:hover,.pagination>.active>a:focus,.pagination>.active>span:focus{z-index:2;color:#fff;background-color:#428bca;border-color:#428bca;cursor:default}.pagination>.disabled>span,.pagination>.disabled>span:hover,.pagination>.disabled>span:focus,.pagination>.disabled>a,.pagination>.disabled>a:hover,.pagination>.disabled>a:focus{color:#999;background-color:#fff;border-color:#ddd;cursor:not-allowed}.pagination-lg>li>a,.pagination-lg>li>span{padding:10px 16px;font-size:18px}.pagination-lg>li:first-child>a,.pagination-lg>li:first-child>span{border-bottom-left-radius:6px;border-top-left-radius:6px}.pagination-lg>li:last-child>a,.pagination-lg>li:last-child>span{border-bottom-right-radius:6px;border-top-right-radius:6px}.pagination-sm>li>a,.pagination-sm>li>span{padding:5px 10px;font-size:12px}.pagination-sm>li:first-child>a,.pagination-sm>li:first-child>span{border-bottom-left-radius:3px;border-top-left-radius:3px}.pagination-sm>li:last-child>a,.pagination-sm>li:last-child>span{border-bottom-right-radius:3px;border-top-right-radius:3px}.pager{padding-left:0;margin:20px 0;list-style:none;text-align:center}.pager li{display:inline}.pager li>a,.pager li>span{display:inline-block;padding:5px 14px;background-color:#fff;border:1px solid #ddd;border-radius:15px}.pager li>a:hover,.pager li>a:focus{text-decoration:none;background-color:#eee}.pager .next>a,.pager .next>span{float:right}.pager .previous>a,.pager .previous>span{float:left}.pager .disabled>a,.pager .disabled>a:hover,.pager .disabled>a:focus,.pager .disabled>span{color:#999;background-color:#fff;cursor:not-allowed}.label{display:inline;padding:.2em .6em .3em;font-size:75%;font-weight:700;line-height:1;color:#fff;text-align:center;white-space:nowrap;vertical-align:baseline;border-radius:.25em}.label[href]:hover,.label[href]:focus{color:#fff;text-decoration:none;cursor:pointer}.label:empty{display:none}.btn .label{position:relative;top:-1px}.label-default{background-color:#999}.label-default[href]:hover,.label-default[href]:focus{background-color:gray}.label-primary{background-color:#428bca}.label-primary[href]:hover,.label-primary[href]:focus{background-color:#3071a9}.label-success{background-color:#5cb85c}.label-success[href]:hover,.label-success[href]:focus{background-color:#449d44}.label-info{background-color:#5bc0de}.label-info[href]:hover,.label-info[href]:focus{background-color:#31b0d5}.label-warning{background-color:#f0ad4e}.label-warning[href]:hover,.label-warning[href]:focus{background-color:#ec971f}.label-danger{background-color:#d9534f}.label-danger[href]:hover,.label-danger[href]:focus{background-color:#c9302c}.badge{display:inline-block;min-width:10px;padding:3px 7px;font-size:12px;font-weight:700;color:#fff;line-height:1;vertical-align:baseline;white-space:nowrap;text-align:center;background-color:#999;border-radius:10px}.badge:empty{display:none}.btn .badge{position:relative;top:-1px}.btn-xs .badge{top:0;padding:1px 5px}a.badge:hover,a.badge:focus{color:#fff;text-decoration:none;cursor:pointer}a.list-group-item.active>.badge,.nav-pills>.active>a>.badge{color:#428bca;background-color:#fff}.nav-pills>li>a>.badge{margin-left:3px}.jumbotron{padding:30px;margin-bottom:30px;color:inherit;background-color:#eee}.jumbotron h1,.jumbotron .h1{color:inherit}.jumbotron p{margin-bottom:15px;font-size:21px;font-weight:200}.container .jumbotron{border-radius:6px}.jumbotron .container{max-width:100%}@media screen and (min-width:768px){.jumbotron{padding-top:48px;padding-bottom:48px}.container .jumbotron{padding-left:60px;padding-right:60px}.jumbotron h1,.jumbotron .h1{font-size:63px}}.thumbnail{display:block;padding:4px;margin-bottom:20px;line-height:1.428571429;background-color:#fff;border:1px solid #ddd;border-radius:4px;-webkit-transition:all .2s ease-in-out;transition:all .2s ease-in-out}.thumbnail>img,.thumbnail a>img{display:block;max-width:100%;height:auto;margin-left:auto;margin-right:auto}a.thumbnail:hover,a.thumbnail:focus,a.thumbnail.active{border-color:#428bca}.thumbnail .caption{padding:9px;color:#333}.alert{padding:15px;margin-bottom:20px;border:1px solid transparent;border-radius:4px}.alert h4{margin-top:0;color:inherit}.alert .alert-link{font-weight:700}.alert>p,.alert>ul{margin-bottom:0}.alert>p+p{margin-top:5px}.alert-dismissable{padding-right:35px}.alert-dismissable .close{position:relative;top:-2px;right:-21px;color:inherit}.alert-success{background-color:#dff0d8;border-color:#d6e9c6;color:#3c763d}.alert-success hr{border-top-color:#c9e2b3}.alert-success .alert-link{color:#2b542c}.alert-info{background-color:#d9edf7;border-color:#bce8f1;color:#31708f}.alert-info hr{border-top-color:#a6e1ec}.alert-info .alert-link{color:#245269}.alert-warning{background-color:#fcf8e3;border-color:#faebcc;color:#8a6d3b}.alert-warning hr{border-top-color:#f7e1b5}.alert-warning .alert-link{color:#66512c}.alert-danger{background-color:#f2dede;border-color:#ebccd1;color:#a94442}.alert-danger hr{border-top-color:#e4b9c0}.alert-danger .alert-link{color:#843534}@-webkit-keyframes progress-bar-stripes{from{background-position:40px 0}to{background-position:0 0}}@keyframes progress-bar-stripes{from{background-position:40px 0}to{background-position:0 0}}.progress{overflow:hidden;height:20px;margin-bottom:20px;background-color:#f5f5f5;border-radius:4px;-webkit-box-shadow:inset 0 1px 2px rgba(0,0,0,.1);box-shadow:inset 0 1px 2px rgba(0,0,0,.1)}.progress-bar{float:left;width:0;height:100%;font-size:12px;line-height:20px;color:#fff;text-align:center;background-color:#428bca;-webkit-box-shadow:inset 0 -1px 0 rgba(0,0,0,.15);box-shadow:inset 0 -1px 0 rgba(0,0,0,.15);-webkit-transition:width .6s ease;transition:width .6s ease}.progress-striped .progress-bar{background-image:-webkit-linear-gradient(45deg,rgba(255,255,255,.15) 25%,transparent 25%,transparent 50%,rgba(255,255,255,.15) 50%,rgba(255,255,255,.15) 75%,transparent 75%,transparent);background-image:linear-gradient(45deg,rgba(255,255,255,.15) 25%,transparent 25%,transparent 50%,rgba(255,255,255,.15) 50%,rgba(255,255,255,.15) 75%,transparent 75%,transparent);background-size:40px 40px}.progress.active .progress-bar{-webkit-animation:progress-bar-stripes 2s linear infinite;animation:progress-bar-stripes 2s linear infinite}.progress-bar-success{background-color:#5cb85c}.progress-striped .progress-bar-success{background-image:-webkit-linear-gradient(45deg,rgba(255,255,255,.15) 25%,transparent 25%,transparent 50%,rgba(255,255,255,.15) 50%,rgba(255,255,255,.15) 75%,transparent 75%,transparent);background-image:linear-gradient(45deg,rgba(255,255,255,.15) 25%,transparent 25%,transparent 50%,rgba(255,255,255,.15) 50%,rgba(255,255,255,.15) 75%,transparent 75%,transparent)}.progress-bar-info{background-color:#5bc0de}.progress-striped .progress-bar-info{background-image:-webkit-linear-gradient(45deg,rgba(255,255,255,.15) 25%,transparent 25%,transparent 50%,rgba(255,255,255,.15) 50%,rgba(255,255,255,.15) 75%,transparent 75%,transparent);background-image:linear-gradient(45deg,rgba(255,255,255,.15) 25%,transparent 25%,transparent 50%,rgba(255,255,255,.15) 50%,rgba(255,255,255,.15) 75%,transparent 75%,transparent)}.progress-bar-warning{background-color:#f0ad4e}.progress-striped .progress-bar-warning{background-image:-webkit-linear-gradient(45deg,rgba(255,255,255,.15) 25%,transparent 25%,transparent 50%,rgba(255,255,255,.15) 50%,rgba(255,255,255,.15) 75%,transparent 75%,transparent);background-image:linear-gradient(45deg,rgba(255,255,255,.15) 25%,transparent 25%,transparent 50%,rgba(255,255,255,.15) 50%,rgba(255,255,255,.15) 75%,transparent 75%,transparent)}.progress-bar-danger{background-color:#d9534f}.progress-striped .progress-bar-danger{background-image:-webkit-linear-gradient(45deg,rgba(255,255,255,.15) 25%,transparent 25%,transparent 50%,rgba(255,255,255,.15) 50%,rgba(255,255,255,.15) 75%,transparent 75%,transparent);background-image:linear-gradient(45deg,rgba(255,255,255,.15) 25%,transparent 25%,transparent 50%,rgba(255,255,255,.15) 50%,rgba(255,255,255,.15) 75%,transparent 75%,transparent)}.media,.media-body{overflow:hidden;zoom:1}.media,.media .media{margin-top:15px}.media:first-child{margin-top:0}.media-object{display:block}.media-heading{margin:0 0 5px}.media>.pull-left{margin-right:10px}.media>.pull-right{margin-left:10px}.media-list{padding-left:0;list-style:none}.list-group{margin-bottom:20px;padding-left:0}.list-group-item{position:relative;display:block;padding:10px 15px;margin-bottom:-1px;background-color:#fff;border:1px solid #ddd}.list-group-item:first-child{border-top-right-radius:4px;border-top-left-radius:4px}.list-group-item:last-child{margin-bottom:0;border-bottom-right-radius:4px;border-bottom-left-radius:4px}.list-group-item>.badge{float:right}.list-group-item>.badge+.badge{margin-right:5px}a.list-group-item{color:#555}a.list-group-item .list-group-item-heading{color:#333}a.list-group-item:hover,a.list-group-item:focus{text-decoration:none;background-color:#f5f5f5}a.list-group-item.active,a.list-group-item.active:hover,a.list-group-item.active:focus{z-index:2;color:#fff;background-color:#428bca;border-color:#428bca}a.list-group-item.active .list-group-item-heading,a.list-group-item.active:hover .list-group-item-heading,a.list-group-item.active:focus .list-group-item-heading{color:inherit}a.list-group-item.active .list-group-item-text,a.list-group-item.active:hover .list-group-item-text,a.list-group-item.active:focus .list-group-item-text{color:#e1edf7}.list-group-item-success{color:#3c763d;background-color:#dff0d8}a.list-group-item-success{color:#3c763d}a.list-group-item-success .list-group-item-heading{color:inherit}a.list-group-item-success:hover,a.list-group-item-success:focus{color:#3c763d;background-color:#d0e9c6}a.list-group-item-success.active,a.list-group-item-success.active:hover,a.list-group-item-success.active:focus{color:#fff;background-color:#3c763d;border-color:#3c763d}.list-group-item-info{color:#31708f;background-color:#d9edf7}a.list-group-item-info{color:#31708f}a.list-group-item-info .list-group-item-heading{color:inherit}a.list-group-item-info:hover,a.list-group-item-info:focus{color:#31708f;background-color:#c4e3f3}a.list-group-item-info.active,a.list-group-item-info.active:hover,a.list-group-item-info.active:focus{color:#fff;background-color:#31708f;border-color:#31708f}.list-group-item-warning{color:#8a6d3b;background-color:#fcf8e3}a.list-group-item-warning{color:#8a6d3b}a.list-group-item-warning .list-group-item-heading{color:inherit}a.list-group-item-warning:hover,a.list-group-item-warning:focus{color:#8a6d3b;background-color:#faf2cc}a.list-group-item-warning.active,a.list-group-item-warning.active:hover,a.list-group-item-warning.active:focus{color:#fff;background-color:#8a6d3b;border-color:#8a6d3b}.list-group-item-danger{color:#a94442;background-color:#f2dede}a.list-group-item-danger{color:#a94442}a.list-group-item-danger .list-group-item-heading{color:inherit}a.list-group-item-danger:hover,a.list-group-item-danger:focus{color:#a94442;background-color:#ebcccc}a.list-group-item-danger.active,a.list-group-item-danger.active:hover,a.list-group-item-danger.active:focus{color:#fff;background-color:#a94442;border-color:#a94442}.list-group-item-heading{margin-top:0;margin-bottom:5px}.list-group-item-text{margin-bottom:0;line-height:1.3}.panel{margin-bottom:20px;background-color:#fff;border:1px solid transparent;border-radius:4px;-webkit-box-shadow:0 1px 1px rgba(0,0,0,.05);box-shadow:0 1px 1px rgba(0,0,0,.05)}.panel-body{padding:15px}.panel>.list-group{margin-bottom:0}.panel>.list-group .list-group-item{border-width:1px 0;border-radius:0}.panel>.list-group .list-group-item:first-child{border-top:0}.panel>.list-group .list-group-item:last-child{border-bottom:0}.panel>.list-group:first-child .list-group-item:first-child{border-top-right-radius:3px;border-top-left-radius:3px}.panel>.list-group:last-child .list-group-item:last-child{border-bottom-right-radius:3px;border-bottom-left-radius:3px}.panel-heading+.list-group .list-group-item:first-child{border-top-width:0}.panel>.table,.panel>.table-responsive>.table{margin-bottom:0}.panel>.table:first-child>thead:first-child>tr:first-child td:first-child,.panel>.table-responsive:first-child>.table:first-child>thead:first-child>tr:first-child td:first-child,.panel>.table:first-child>tbody:first-child>tr:first-child td:first-child,.panel>.table-responsive:first-child>.table:first-child>tbody:first-child>tr:first-child td:first-child,.panel>.table:first-child>thead:first-child>tr:first-child th:first-child,.panel>.table-responsive:first-child>.table:first-child>thead:first-child>tr:first-child th:first-child,.panel>.table:first-child>tbody:first-child>tr:first-child th:first-child,.panel>.table-responsive:first-child>.table:first-child>tbody:first-child>tr:first-child th:first-child{border-top-left-radius:3px}.panel>.table:first-child>thead:first-child>tr:first-child td:last-child,.panel>.table-responsive:first-child>.table:first-child>thead:first-child>tr:first-child td:last-child,.panel>.table:first-child>tbody:first-child>tr:first-child td:last-child,.panel>.table-responsive:first-child>.table:first-child>tbody:first-child>tr:first-child td:last-child,.panel>.table:first-child>thead:first-child>tr:first-child th:last-child,.panel>.table-responsive:first-child>.table:first-child>thead:first-child>tr:first-child th:last-child,.panel>.table:first-child>tbody:first-child>tr:first-child th:last-child,.panel>.table-responsive:first-child>.table:first-child>tbody:first-child>tr:first-child th:last-child{border-top-right-radius:3px}.panel>.table:last-child>tbody:last-child>tr:last-child td:first-child,.panel>.table-responsive:last-child>.table:last-child>tbody:last-child>tr:last-child td:first-child,.panel>.table:last-child>tfoot:last-child>tr:last-child td:first-child,.panel>.table-responsive:last-child>.table:last-child>tfoot:last-child>tr:last-child td:first-child,.panel>.table:last-child>tbody:last-child>tr:last-child th:first-child,.panel>.table-responsive:last-child>.table:last-child>tbody:last-child>tr:last-child th:first-child,.panel>.table:last-child>tfoot:last-child>tr:last-child th:first-child,.panel>.table-responsive:last-child>.table:last-child>tfoot:last-child>tr:last-child th:first-child{border-bottom-left-radius:3px}.panel>.table:last-child>tbody:last-child>tr:last-child td:last-child,.panel>.table-responsive:last-child>.table:last-child>tbody:last-child>tr:last-child td:last-child,.panel>.table:last-child>tfoot:last-child>tr:last-child td:last-child,.panel>.table-responsive:last-child>.table:last-child>tfoot:last-child>tr:last-child td:last-child,.panel>.table:last-child>tbody:last-child>tr:last-child th:last-child,.panel>.table-responsive:last-child>.table:last-child>tbody:last-child>tr:last-child th:last-child,.panel>.table:last-child>tfoot:last-child>tr:last-child th:last-child,.panel>.table-responsive:last-child>.table:last-child>tfoot:last-child>tr:last-child th:last-child{border-bottom-right-radius:3px}.panel>.panel-body+.table,.panel>.panel-body+.table-responsive{border-top:1px solid #ddd}.panel>.table>tbody:first-child>tr:first-child th,.panel>.table>tbody:first-child>tr:first-child td{border-top:0}.panel>.table-bordered,.panel>.table-responsive>.table-bordered{border:0}.panel>.table-bordered>thead>tr>th:first-child,.panel>.table-responsive>.table-bordered>thead>tr>th:first-child,.panel>.table-bordered>tbody>tr>th:first-child,.panel>.table-responsive>.table-bordered>tbody>tr>th:first-child,.panel>.table-bordered>tfoot>tr>th:first-child,.panel>.table-responsive>.table-bordered>tfoot>tr>th:first-child,.panel>.table-bordered>thead>tr>td:first-child,.panel>.table-responsive>.table-bordered>thead>tr>td:first-child,.panel>.table-bordered>tbody>tr>td:first-child,.panel>.table-responsive>.table-bordered>tbody>tr>td:first-child,.panel>.table-bordered>tfoot>tr>td:first-child,.panel>.table-responsive>.table-bordered>tfoot>tr>td:first-child{border-left:0}.panel>.table-bordered>thead>tr>th:last-child,.panel>.table-responsive>.table-bordered>thead>tr>th:last-child,.panel>.table-bordered>tbody>tr>th:last-child,.panel>.table-responsive>.table-bordered>tbody>tr>th:last-child,.panel>.table-bordered>tfoot>tr>th:last-child,.panel>.table-responsive>.table-bordered>tfoot>tr>th:last-child,.panel>.table-bordered>thead>tr>td:last-child,.panel>.table-responsive>.table-bordered>thead>tr>td:last-child,.panel>.table-bordered>tbody>tr>td:last-child,.panel>.table-responsive>.table-bordered>tbody>tr>td:last-child,.panel>.table-bordered>tfoot>tr>td:last-child,.panel>.table-responsive>.table-bordered>tfoot>tr>td:last-child{border-right:0}.panel>.table-bordered>thead>tr:first-child>th,.panel>.table-responsive>.table-bordered>thead>tr:first-child>th,.panel>.table-bordered>tbody>tr:first-child>th,.panel>.table-responsive>.table-bordered>tbody>tr:first-child>th,.panel>.table-bordered>tfoot>tr:first-child>th,.panel>.table-responsive>.table-bordered>tfoot>tr:first-child>th,.panel>.table-bordered>thead>tr:first-child>td,.panel>.table-responsive>.table-bordered>thead>tr:first-child>td,.panel>.table-bordered>tbody>tr:first-child>td,.panel>.table-responsive>.table-bordered>tbody>tr:first-child>td,.panel>.table-bordered>tfoot>tr:first-child>td,.panel>.table-responsive>.table-bordered>tfoot>tr:first-child>td{border-top:0}.panel>.table-bordered>thead>tr:last-child>th,.panel>.table-responsive>.table-bordered>thead>tr:last-child>th,.panel>.table-bordered>tbody>tr:last-child>th,.panel>.table-responsive>.table-bordered>tbody>tr:last-child>th,.panel>.table-bordered>tfoot>tr:last-child>th,.panel>.table-responsive>.table-bordered>tfoot>tr:last-child>th,.panel>.table-bordered>thead>tr:last-child>td,.panel>.table-responsive>.table-bordered>thead>tr:last-child>td,.panel>.table-bordered>tbody>tr:last-child>td,.panel>.table-responsive>.table-bordered>tbody>tr:last-child>td,.panel>.table-bordered>tfoot>tr:last-child>td,.panel>.table-responsive>.table-bordered>tfoot>tr:last-child>td{border-bottom:0}.panel>.table-responsive{border:0;margin-bottom:0}.panel-heading{padding:10px 15px;border-bottom:1px solid transparent;border-top-right-radius:3px;border-top-left-radius:3px}.panel-heading>.dropdown .dropdown-toggle{color:inherit}.panel-title{margin-top:0;margin-bottom:0;font-size:16px;color:inherit}.panel-title>a{color:inherit}.panel-footer{padding:10px 15px;background-color:#f5f5f5;border-top:1px solid #ddd;border-bottom-right-radius:3px;border-bottom-left-radius:3px}.panel-group{margin-bottom:20px}.panel-group .panel{margin-bottom:0;border-radius:4px;overflow:hidden}.panel-group .panel+.panel{margin-top:5px}.panel-group .panel-heading{border-bottom:0}.panel-group .panel-heading+.panel-collapse .panel-body{border-top:1px solid #ddd}.panel-group .panel-footer{border-top:0}.panel-group .panel-footer+.panel-collapse .panel-body{border-bottom:1px solid #ddd}.panel-default{border-color:#ddd}.panel-default>.panel-heading{color:#333;background-color:#f5f5f5;border-color:#ddd}.panel-default>.panel-heading+.panel-collapse .panel-body{border-top-color:#ddd}.panel-default>.panel-footer+.panel-collapse .panel-body{border-bottom-color:#ddd}.panel-primary{border-color:#428bca}.panel-primary>.panel-heading{color:#fff;background-color:#428bca;border-color:#428bca}.panel-primary>.panel-heading+.panel-collapse .panel-body{border-top-color:#428bca}.panel-primary>.panel-footer+.panel-collapse .panel-body{border-bottom-color:#428bca}.panel-success{border-color:#d6e9c6}.panel-success>.panel-heading{color:#3c763d;background-color:#dff0d8;border-color:#d6e9c6}.panel-success>.panel-heading+.panel-collapse .panel-body{border-top-color:#d6e9c6}.panel-success>.panel-footer+.panel-collapse .panel-body{border-bottom-color:#d6e9c6}.panel-info{border-color:#bce8f1}.panel-info>.panel-heading{color:#31708f;background-color:#d9edf7;border-color:#bce8f1}.panel-info>.panel-heading+.panel-collapse .panel-body{border-top-color:#bce8f1}.panel-info>.panel-footer+.panel-collapse .panel-body{border-bottom-color:#bce8f1}.panel-warning{border-color:#faebcc}.panel-warning>.panel-heading{color:#8a6d3b;background-color:#fcf8e3;border-color:#faebcc}.panel-warning>.panel-heading+.panel-collapse .panel-body{border-top-color:#faebcc}.panel-warning>.panel-footer+.panel-collapse .panel-body{border-bottom-color:#faebcc}.panel-danger{border-color:#ebccd1}.panel-danger>.panel-heading{color:#a94442;background-color:#f2dede;border-color:#ebccd1}.panel-danger>.panel-heading+.panel-collapse .panel-body{border-top-color:#ebccd1}.panel-danger>.panel-footer+.panel-collapse .panel-body{border-bottom-color:#ebccd1}.well{min-height:20px;padding:19px;margin-bottom:20px;background-color:#f5f5f5;border:1px solid #e3e3e3;border-radius:4px;-webkit-box-shadow:inset 0 1px 1px rgba(0,0,0,.05);box-shadow:inset 0 1px 1px rgba(0,0,0,.05)}.well blockquote{border-color:#ddd;border-color:rgba(0,0,0,.15)}.well-lg{padding:24px;border-radius:6px}.well-sm{padding:9px;border-radius:3px}.close{float:right;font-size:21px;font-weight:700;line-height:1;color:#000;text-shadow:0 1px 0 #fff;opacity:.2;filter:alpha(opacity=20)}.close:hover,.close:focus{color:#000;text-decoration:none;cursor:pointer;opacity:.5;filter:alpha(opacity=50)}button.close{padding:0;cursor:pointer;background:0 0;border:0;-webkit-appearance:none}.modal-open{overflow:hidden}.modal{display:none;overflow:auto;overflow-y:scroll;position:fixed;top:0;right:0;bottom:0;left:0;z-index:1050;-webkit-overflow-scrolling:touch;outline:0}.modal.fade .modal-dialog{-webkit-transform:translate(0,-25%);-ms-transform:translate(0,-25%);transform:translate(0,-25%);-webkit-transition:-webkit-transform .3s ease-out;-moz-transition:-moz-transform .3s ease-out;-o-transition:-o-transform .3s ease-out;transition:transform .3s ease-out}.modal.in .modal-dialog{-webkit-transform:translate(0,0);-ms-transform:translate(0,0);transform:translate(0,0)}.modal-dialog{position:relative;width:auto;margin:10px}.modal-content{position:relative;background-color:#fff;border:1px solid #999;border:1px solid rgba(0,0,0,.2);border-radius:6px;-webkit-box-shadow:0 3px 9px rgba(0,0,0,.5);box-shadow:0 3px 9px rgba(0,0,0,.5);background-clip:padding-box;outline:0}.modal-backdrop{position:fixed;top:0;right:0;bottom:0;left:0;z-index:1040;background-color:#000}.modal-backdrop.fade{opacity:0;filter:alpha(opacity=0)}.modal-backdrop.in{opacity:.5;filter:alpha(opacity=50)}.modal-header{padding:15px;border-bottom:1px solid #e5e5e5;min-height:16.428571429px}.modal-header .close{margin-top:-2px}.modal-title{margin:0;line-height:1.428571429}.modal-body{position:relative;padding:20px}.modal-footer{margin-top:15px;padding:19px 20px 20px;text-align:right;border-top:1px solid #e5e5e5}.modal-footer .btn+.btn{margin-left:5px;margin-bottom:0}.modal-footer .btn-group .btn+.btn{margin-left:-1px}.modal-footer .btn-block+.btn-block{margin-left:0}@media (min-width:768px){.modal-dialog{width:600px;margin:30px auto}.modal-content{-webkit-box-shadow:0 5px 15px rgba(0,0,0,.5);box-shadow:0 5px 15px rgba(0,0,0,.5)}.modal-sm{width:300px}.modal-lg{width:900px}}.tooltip{position:absolute;z-index:1030;display:block;visibility:visible;font-size:12px;line-height:1.4;opacity:0;filter:alpha(opacity=0)}.tooltip.in{opacity:.9;filter:alpha(opacity=90)}.tooltip.top{margin-top:-3px;padding:5px 0}.tooltip.right{margin-left:3px;padding:0 5px}.tooltip.bottom{margin-top:3px;padding:5px 0}.tooltip.left{margin-left:-3px;padding:0 5px}.tooltip-inner{max-width:200px;padding:3px 8px;color:#fff;text-align:center;text-decoration:none;background-color:#000;border-radius:4px}.tooltip-arrow{position:absolute;width:0;height:0;border-color:transparent;border-style:solid}.tooltip.top .tooltip-arrow{bottom:0;left:50%;margin-left:-5px;border-width:5px 5px 0;border-top-color:#000}.tooltip.top-left .tooltip-arrow{bottom:0;left:5px;border-width:5px 5px 0;border-top-color:#000}.tooltip.top-right .tooltip-arrow{bottom:0;right:5px;border-width:5px 5px 0;border-top-color:#000}.tooltip.right .tooltip-arrow{top:50%;left:0;margin-top:-5px;border-width:5px 5px 5px 0;border-right-color:#000}.tooltip.left .tooltip-arrow{top:50%;right:0;margin-top:-5px;border-width:5px 0 5px 5px;border-left-color:#000}.tooltip.bottom .tooltip-arrow{top:0;left:50%;margin-left:-5px;border-width:0 5px 5px;border-bottom-color:#000}.tooltip.bottom-left .tooltip-arrow{top:0;left:5px;border-width:0 5px 5px;border-bottom-color:#000}.tooltip.bottom-right .tooltip-arrow{top:0;right:5px;border-width:0 5px 5px;border-bottom-color:#000}.popover{position:absolute;top:0;left:0;z-index:1010;display:none;max-width:276px;padding:1px;text-align:left;background-color:#fff;background-clip:padding-box;border:1px solid #ccc;border:1px solid rgba(0,0,0,.2);border-radius:6px;-webkit-box-shadow:0 5px 10px rgba(0,0,0,.2);box-shadow:0 5px 10px rgba(0,0,0,.2);white-space:normal}.popover.top{margin-top:-10px}.popover.right{margin-left:10px}.popover.bottom{margin-top:10px}.popover.left{margin-left:-10px}.popover-title{margin:0;padding:8px 14px;font-size:14px;font-weight:400;line-height:18px;background-color:#f7f7f7;border-bottom:1px solid #ebebeb;border-radius:5px 5px 0 0}.popover-content{padding:9px 14px}.popover .arrow,.popover .arrow:after{position:absolute;display:block;width:0;height:0;border-color:transparent;border-style:solid}.popover .arrow{border-width:11px}.popover .arrow:after{border-width:10px;content:""}.popover.top .arrow{left:50%;margin-left:-11px;border-bottom-width:0;border-top-color:#999;border-top-color:rgba(0,0,0,.25);bottom:-11px}.popover.top .arrow:after{content:" ";bottom:1px;margin-left:-10px;border-bottom-width:0;border-top-color:#fff}.popover.right .arrow{top:50%;left:-11px;margin-top:-11px;border-left-width:0;border-right-color:#999;border-right-color:rgba(0,0,0,.25)}.popover.right .arrow:after{content:" ";left:1px;bottom:-10px;border-left-width:0;border-right-color:#fff}.popover.bottom .arrow{left:50%;margin-left:-11px;border-top-width:0;border-bottom-color:#999;border-bottom-color:rgba(0,0,0,.25);top:-11px}.popover.bottom .arrow:after{content:" ";top:1px;margin-left:-10px;border-top-width:0;border-bottom-color:#fff}.popover.left .arrow{top:50%;right:-11px;margin-top:-11px;border-right-width:0;border-left-color:#999;border-left-color:rgba(0,0,0,.25)}.popover.left .arrow:after{content:" ";right:1px;border-right-width:0;border-left-color:#fff;bottom:-10px}.carousel{position:relative}.carousel-inner{position:relative;overflow:hidden;width:100%}.carousel-inner>.item{display:none;position:relative;-webkit-transition:.6s ease-in-out left;transition:.6s ease-in-out left}.carousel-inner>.item>img,.carousel-inner>.item>a>img{display:block;max-width:100%;height:auto;line-height:1}.carousel-inner>.active,.carousel-inner>.next,.carousel-inner>.prev{display:block}.carousel-inner>.active{left:0}.carousel-inner>.next,.carousel-inner>.prev{position:absolute;top:0;width:100%}.carousel-inner>.next{left:100%}.carousel-inner>.prev{left:-100%}.carousel-inner>.next.left,.carousel-inner>.prev.right{left:0}.carousel-inner>.active.left{left:-100%}.carousel-inner>.active.right{left:100%}.carousel-control{position:absolute;top:0;left:0;bottom:0;width:15%;opacity:.5;filter:alpha(opacity=50);font-size:20px;color:#fff;text-align:center;text-shadow:0 1px 2px rgba(0,0,0,.6)}.carousel-control.left{background-image:-webkit-linear-gradient(left,color-stop(rgba(0,0,0,.5) 0),color-stop(rgba(0,0,0,.0001) 100%));background-image:linear-gradient(to right,rgba(0,0,0,.5) 0,rgba(0,0,0,.0001) 100%);background-repeat:repeat-x;filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#80000000', endColorstr='#00000000', GradientType=1)}.carousel-control.right{left:auto;right:0;background-image:-webkit-linear-gradient(left,color-stop(rgba(0,0,0,.0001) 0),color-stop(rgba(0,0,0,.5) 100%));background-image:linear-gradient(to right,rgba(0,0,0,.0001) 0,rgba(0,0,0,.5) 100%);background-repeat:repeat-x;filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#00000000', endColorstr='#80000000', GradientType=1)}.carousel-control:hover,.carousel-control:focus{outline:0;color:#fff;text-decoration:none;opacity:.9;filter:alpha(opacity=90)}.carousel-control .icon-prev,.carousel-control .icon-next,.carousel-control .glyphicon-chevron-left,.carousel-control .glyphicon-chevron-right{position:absolute;top:50%;z-index:5;display:inline-block}.carousel-control .icon-prev,.carousel-control .glyphicon-chevron-left{left:50%}.carousel-control .icon-next,.carousel-control .glyphicon-chevron-right{right:50%}.carousel-control .icon-prev,.carousel-control .icon-next{width:20px;height:20px;margin-top:-10px;margin-left:-10px;font-family:serif}.carousel-control .icon-prev:before{content:'\2039'}.carousel-control .icon-next:before{content:'\203a'}.carousel-indicators{position:absolute;bottom:10px;left:50%;z-index:15;width:60%;margin-left:-30%;padding-left:0;list-style:none;text-align:center}.carousel-indicators li{display:inline-block;width:10px;height:10px;margin:1px;text-indent:-999px;border:1px solid #fff;border-radius:10px;cursor:pointer;background-color:#000 \9;background-color:rgba(0,0,0,0)}.carousel-indicators .active{margin:0;width:12px;height:12px;background-color:#fff}.carousel-caption{position:absolute;left:15%;right:15%;bottom:20px;z-index:10;padding-top:20px;padding-bottom:20px;color:#fff;text-align:center;text-shadow:0 1px 2px rgba(0,0,0,.6)}.carousel-caption .btn{text-shadow:none}@media screen and (min-width:768px){.carousel-control .glyphicons-chevron-left,.carousel-control .glyphicons-chevron-right,.carousel-control .icon-prev,.carousel-control .icon-next{width:30px;height:30px;margin-top:-15px;margin-left:-15px;font-size:30px}.carousel-caption{left:20%;right:20%;padding-bottom:30px}.carousel-indicators{bottom:20px}}.clearfix:before,.clearfix:after,.container:before,.container:after,.container-fluid:before,.container-fluid:after,.row:before,.row:after,.form-horizontal .form-group:before,.form-horizontal .form-group:after,.btn-toolbar:before,.btn-toolbar:after,.btn-group-vertical>.btn-group:before,.btn-group-vertical>.btn-group:after,.nav:before,.nav:after,.navbar:before,.navbar:after,.navbar-header:before,.navbar-header:after,.navbar-collapse:before,.navbar-collapse:after,.pager:before,.pager:after,.panel-body:before,.panel-body:after,.modal-footer:before,.modal-footer:after{content:" ";display:table}.clearfix:after,.container:after,.container-fluid:after,.row:after,.form-horizontal .form-group:after,.btn-toolbar:after,.btn-group-vertical>.btn-group:after,.nav:after,.navbar:after,.navbar-header:after,.navbar-collapse:after,.pager:after,.panel-body:after,.modal-footer:after{clear:both}.center-block{display:block;margin-left:auto;margin-right:auto}.pull-right{float:right!important}.pull-left{float:left!important}.hide{display:none!important}.show{display:block!important}.invisible{visibility:hidden}.text-hide{font:0/0 a;color:transparent;text-shadow:none;background-color:transparent;border:0}.hidden{display:none}.affix{position:fixed}@-ms-viewport{width:device-width}.visible-xs,tr.visible-xs,th.visible-xs,td.visible-xs{display:none!important}@media (max-width:767px){.visible-xs{display:block!important}table.visible-xs{display:table}tr.visible-xs{display:table-row!important}th.visible-xs,td.visible-xs{display:table-cell!important}}.visible-sm,tr.visible-sm,th.visible-sm,td.visible-sm{display:none!important}@media (min-width:768px) and (max-width:991px){.visible-sm{display:block!important}table.visible-sm{display:table}tr.visible-sm{display:table-row!important}th.visible-sm,td.visible-sm{display:table-cell!important}}.visible-md,tr.visible-md,th.visible-md,td.visible-md{display:none!important}@media (min-width:992px) and (max-width:1199px){.visible-md{display:block!important}table.visible-md{display:table}tr.visible-md{display:table-row!important}th.visible-md,td.visible-md{display:table-cell!important}}.visible-lg,tr.visible-lg,th.visible-lg,td.visible-lg{display:none!important}@media (min-width:1200px){.visible-lg{display:block!important}table.visible-lg{display:table}tr.visible-lg{display:table-row!important}th.visible-lg,td.visible-lg{display:table-cell!important}}@media (max-width:767px){.hidden-xs,tr.hidden-xs,th.hidden-xs,td.hidden-xs{display:none!important}}@media (min-width:768px) and (max-width:991px){.hidden-sm,tr.hidden-sm,th.hidden-sm,td.hidden-sm{display:none!important}}@media (min-width:992px) and (max-width:1199px){.hidden-md,tr.hidden-md,th.hidden-md,td.hidden-md{display:none!important}}@media (min-width:1200px){.hidden-lg,tr.hidden-lg,th.hidden-lg,td.hidden-lg{display:none!important}}.visible-print,tr.visible-print,th.visible-print,td.visible-print{display:none!important}@media print{.visible-print{display:block!important}table.visible-print{display:table}tr.visible-print{display:table-row!important}th.visible-print,td.visible-print{display:table-cell!important}}@media print{.hidden-print,tr.hidden-print,th.hidden-print,td.hidden-print{display:none!important}}
1
  /*!
2
+ * Bootstrap v3.2.0 (http://getbootstrap.com)
3
  * Copyright 2011-2014 Twitter, Inc.
4
  * Licensed under MIT (https://github.com/twbs/bootstrap/blob/master/LICENSE)
5
+ *!!!!! deleted: html,body
6
+ *!!!!! modified: .hidden
7
+ *//*! normalize.css v3.0.1 | MIT License | git.io/normalize */article,aside,details,figcaption,figure,footer,header,hgroup,main,nav,section,summary{display:block}audio,canvas,progress,video{display:inline-block;vertical-align:baseline}audio:not([controls]){display:none;height:0}[hidden],template{display:none}a{background:0 0}a:active,a:hover{outline:0}abbr[title]{border-bottom:1px dotted}b,strong{font-weight:700}dfn{font-style:italic}h1{margin:.67em 0;font-size:2em}mark{color:#000;background:#ff0}small{font-size:80%}sub,sup{position:relative;font-size:75%;line-height:0;vertical-align:baseline}sup{top:-.5em}sub{bottom:-.25em}img{border:0}svg:not(:root){overflow:hidden}figure{margin:1em 40px}hr{height:0;-webkit-box-sizing:content-box;-moz-box-sizing:content-box;box-sizing:content-box}pre{overflow:auto}code,kbd,pre,samp{font-family:monospace,monospace;font-size:1em}button,input,optgroup,select,textarea{margin:0;font:inherit;color:inherit}button{overflow:visible}button,select{text-transform:none}button,html input[type=button],input[type=reset],input[type=submit]{-webkit-appearance:button;cursor:pointer}button[disabled],html input[disabled]{cursor:default}button::-moz-focus-inner,input::-moz-focus-inner{padding:0;border:0}input{line-height:normal}input[type=checkbox],input[type=radio]{-webkit-box-sizing:border-box;-moz-box-sizing:border-box;box-sizing:border-box;padding:0}input[type=number]::-webkit-inner-spin-button,input[type=number]::-webkit-outer-spin-button{height:auto}input[type=search]{-webkit-box-sizing:content-box;-moz-box-sizing:content-box;box-sizing:content-box;-webkit-appearance:textfield}input[type=search]::-webkit-search-cancel-button,input[type=search]::-webkit-search-decoration{-webkit-appearance:none}fieldset{padding:.35em .625em .75em;margin:0 2px;border:1px solid silver}legend{padding:0;border:0}textarea{overflow:auto}optgroup{font-weight:700}table{border-spacing:0;border-collapse:collapse}td,th{padding:0}@media print{*{color:#000!important;text-shadow:none!important;background:transparent!important;-webkit-box-shadow:none!important;box-shadow:none!important}a,a:visited{text-decoration:underline}a[href]:after{content:" (" attr(href) ")"}abbr[title]:after{content:" (" attr(title) ")"}a[href^="javascript:"]:after,a[href^="#"]:after{content:""}pre,blockquote{border:1px solid #999;page-break-inside:avoid}thead{display:table-header-group}tr,img{page-break-inside:avoid}img{max-width:100%!important}p,h2,h3{orphans:3;widows:3}h2,h3{page-break-after:avoid}select{background:#fff!important}.navbar{display:none}.table td,.table th{background-color:#fff!important}.btn>.caret,.dropup>.btn>.caret{border-top-color:#000!important}.label{border:1px solid #000}.table{border-collapse:collapse!important}.table-bordered th,.table-bordered td{border:1px solid #ddd!important}}@font-face{font-family:'Glyphicons Halflings';src:url(../fonts/glyphicons-halflings-regular.eot);src:url(../fonts/glyphicons-halflings-regular.eot?#iefix) format('embedded-opentype'),url(../fonts/glyphicons-halflings-regular.woff) format('woff'),url(../fonts/glyphicons-halflings-regular.ttf) format('truetype'),url(../fonts/glyphicons-halflings-regular.svg#glyphicons_halflingsregular) format('svg')}.glyphicon{position:relative;top:1px;display:inline-block;font-family:'Glyphicons Halflings';font-style:normal;font-weight:400;line-height:1;-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale}.glyphicon-asterisk:before{content:"\2a"}.glyphicon-plus:before{content:"\2b"}.glyphicon-euro:before{content:"\20ac"}.glyphicon-minus:before{content:"\2212"}.glyphicon-cloud:before{content:"\2601"}.glyphicon-envelope:before{content:"\2709"}.glyphicon-pencil:before{content:"\270f"}.glyphicon-glass:before{content:"\e001"}.glyphicon-music:before{content:"\e002"}.glyphicon-search:before{content:"\e003"}.glyphicon-heart:before{content:"\e005"}.glyphicon-star:before{content:"\e006"}.glyphicon-star-empty:before{content:"\e007"}.glyphicon-user:before{content:"\e008"}.glyphicon-film:before{content:"\e009"}.glyphicon-th-large:before{content:"\e010"}.glyphicon-th:before{content:"\e011"}.glyphicon-th-list:before{content:"\e012"}.glyphicon-ok:before{content:"\e013"}.glyphicon-remove:before{content:"\e014"}.glyphicon-zoom-in:before{content:"\e015"}.glyphicon-zoom-out:before{content:"\e016"}.glyphicon-off:before{content:"\e017"}.glyphicon-signal:before{content:"\e018"}.glyphicon-cog:before{content:"\e019"}.glyphicon-trash:before{content:"\e020"}.glyphicon-home:before{content:"\e021"}.glyphicon-file:before{content:"\e022"}.glyphicon-time:before{content:"\e023"}.glyphicon-road:before{content:"\e024"}.glyphicon-download-alt:before{content:"\e025"}.glyphicon-download:before{content:"\e026"}.glyphicon-upload:before{content:"\e027"}.glyphicon-inbox:before{content:"\e028"}.glyphicon-play-circle:before{content:"\e029"}.glyphicon-repeat:before{content:"\e030"}.glyphicon-refresh:before{content:"\e031"}.glyphicon-list-alt:before{content:"\e032"}.glyphicon-lock:before{content:"\e033"}.glyphicon-flag:before{content:"\e034"}.glyphicon-headphones:before{content:"\e035"}.glyphicon-volume-off:before{content:"\e036"}.glyphicon-volume-down:before{content:"\e037"}.glyphicon-volume-up:before{content:"\e038"}.glyphicon-qrcode:before{content:"\e039"}.glyphicon-barcode:before{content:"\e040"}.glyphicon-tag:before{content:"\e041"}.glyphicon-tags:before{content:"\e042"}.glyphicon-book:before{content:"\e043"}.glyphicon-bookmark:before{content:"\e044"}.glyphicon-print:before{content:"\e045"}.glyphicon-camera:before{content:"\e046"}.glyphicon-font:before{content:"\e047"}.glyphicon-bold:before{content:"\e048"}.glyphicon-italic:before{content:"\e049"}.glyphicon-text-height:before{content:"\e050"}.glyphicon-text-width:before{content:"\e051"}.glyphicon-align-left:before{content:"\e052"}.glyphicon-align-center:before{content:"\e053"}.glyphicon-align-right:before{content:"\e054"}.glyphicon-align-justify:before{content:"\e055"}.glyphicon-list:before{content:"\e056"}.glyphicon-indent-left:before{content:"\e057"}.glyphicon-indent-right:before{content:"\e058"}.glyphicon-facetime-video:before{content:"\e059"}.glyphicon-picture:before{content:"\e060"}.glyphicon-map-marker:before{content:"\e062"}.glyphicon-adjust:before{content:"\e063"}.glyphicon-tint:before{content:"\e064"}.glyphicon-edit:before{content:"\e065"}.glyphicon-share:before{content:"\e066"}.glyphicon-check:before{content:"\e067"}.glyphicon-move:before{content:"\e068"}.glyphicon-step-backward:before{content:"\e069"}.glyphicon-fast-backward:before{content:"\e070"}.glyphicon-backward:before{content:"\e071"}.glyphicon-play:before{content:"\e072"}.glyphicon-pause:before{content:"\e073"}.glyphicon-stop:before{content:"\e074"}.glyphicon-forward:before{content:"\e075"}.glyphicon-fast-forward:before{content:"\e076"}.glyphicon-step-forward:before{content:"\e077"}.glyphicon-eject:before{content:"\e078"}.glyphicon-chevron-left:before{content:"\e079"}.glyphicon-chevron-right:before{content:"\e080"}.glyphicon-plus-sign:before{content:"\e081"}.glyphicon-minus-sign:before{content:"\e082"}.glyphicon-remove-sign:before{content:"\e083"}.glyphicon-ok-sign:before{content:"\e084"}.glyphicon-question-sign:before{content:"\e085"}.glyphicon-info-sign:before{content:"\e086"}.glyphicon-screenshot:before{content:"\e087"}.glyphicon-remove-circle:before{content:"\e088"}.glyphicon-ok-circle:before{content:"\e089"}.glyphicon-ban-circle:before{content:"\e090"}.glyphicon-arrow-left:before{content:"\e091"}.glyphicon-arrow-right:before{content:"\e092"}.glyphicon-arrow-up:before{content:"\e093"}.glyphicon-arrow-down:before{content:"\e094"}.glyphicon-share-alt:before{content:"\e095"}.glyphicon-resize-full:before{content:"\e096"}.glyphicon-resize-small:before{content:"\e097"}.glyphicon-exclamation-sign:before{content:"\e101"}.glyphicon-gift:before{content:"\e102"}.glyphicon-leaf:before{content:"\e103"}.glyphicon-fire:before{content:"\e104"}.glyphicon-eye-open:before{content:"\e105"}.glyphicon-eye-close:before{content:"\e106"}.glyphicon-warning-sign:before{content:"\e107"}.glyphicon-plane:before{content:"\e108"}.glyphicon-calendar:before{content:"\e109"}.glyphicon-random:before{content:"\e110"}.glyphicon-comment:before{content:"\e111"}.glyphicon-magnet:before{content:"\e112"}.glyphicon-chevron-up:before{content:"\e113"}.glyphicon-chevron-down:before{content:"\e114"}.glyphicon-retweet:before{content:"\e115"}.glyphicon-shopping-cart:before{content:"\e116"}.glyphicon-folder-close:before{content:"\e117"}.glyphicon-folder-open:before{content:"\e118"}.glyphicon-resize-vertical:before{content:"\e119"}.glyphicon-resize-horizontal:before{content:"\e120"}.glyphicon-hdd:before{content:"\e121"}.glyphicon-bullhorn:before{content:"\e122"}.glyphicon-bell:before{content:"\e123"}.glyphicon-certificate:before{content:"\e124"}.glyphicon-thumbs-up:before{content:"\e125"}.glyphicon-thumbs-down:before{content:"\e126"}.glyphicon-hand-right:before{content:"\e127"}.glyphicon-hand-left:before{content:"\e128"}.glyphicon-hand-up:before{content:"\e129"}.glyphicon-hand-down:before{content:"\e130"}.glyphicon-circle-arrow-right:before{content:"\e131"}.glyphicon-circle-arrow-left:before{content:"\e132"}.glyphicon-circle-arrow-up:before{content:"\e133"}.glyphicon-circle-arrow-down:before{content:"\e134"}.glyphicon-globe:before{content:"\e135"}.glyphicon-wrench:before{content:"\e136"}.glyphicon-tasks:before{content:"\e137"}.glyphicon-filter:before{content:"\e138"}.glyphicon-briefcase:before{content:"\e139"}.glyphicon-fullscreen:before{content:"\e140"}.glyphicon-dashboard:before{content:"\e141"}.glyphicon-paperclip:before{content:"\e142"}.glyphicon-heart-empty:before{content:"\e143"}.glyphicon-link:before{content:"\e144"}.glyphicon-phone:before{content:"\e145"}.glyphicon-pushpin:before{content:"\e146"}.glyphicon-usd:before{content:"\e148"}.glyphicon-gbp:before{content:"\e149"}.glyphicon-sort:before{content:"\e150"}.glyphicon-sort-by-alphabet:before{content:"\e151"}.glyphicon-sort-by-alphabet-alt:before{content:"\e152"}.glyphicon-sort-by-order:before{content:"\e153"}.glyphicon-sort-by-order-alt:before{content:"\e154"}.glyphicon-sort-by-attributes:before{content:"\e155"}.glyphicon-sort-by-attributes-alt:before{content:"\e156"}.glyphicon-unchecked:before{content:"\e157"}.glyphicon-expand:before{content:"\e158"}.glyphicon-collapse-down:before{content:"\e159"}.glyphicon-collapse-up:before{content:"\e160"}.glyphicon-log-in:before{content:"\e161"}.glyphicon-flash:before{content:"\e162"}.glyphicon-log-out:before{content:"\e163"}.glyphicon-new-window:before{content:"\e164"}.glyphicon-record:before{content:"\e165"}.glyphicon-save:before{content:"\e166"}.glyphicon-open:before{content:"\e167"}.glyphicon-saved:before{content:"\e168"}.glyphicon-import:before{content:"\e169"}.glyphicon-export:before{content:"\e170"}.glyphicon-send:before{content:"\e171"}.glyphicon-floppy-disk:before{content:"\e172"}.glyphicon-floppy-saved:before{content:"\e173"}.glyphicon-floppy-remove:before{content:"\e174"}.glyphicon-floppy-save:before{content:"\e175"}.glyphicon-floppy-open:before{content:"\e176"}.glyphicon-credit-card:before{content:"\e177"}.glyphicon-transfer:before{content:"\e178"}.glyphicon-cutlery:before{content:"\e179"}.glyphicon-header:before{content:"\e180"}.glyphicon-compressed:before{content:"\e181"}.glyphicon-earphone:before{content:"\e182"}.glyphicon-phone-alt:before{content:"\e183"}.glyphicon-tower:before{content:"\e184"}.glyphicon-stats:before{content:"\e185"}.glyphicon-sd-video:before{content:"\e186"}.glyphicon-hd-video:before{content:"\e187"}.glyphicon-subtitles:before{content:"\e188"}.glyphicon-sound-stereo:before{content:"\e189"}.glyphicon-sound-dolby:before{content:"\e190"}.glyphicon-sound-5-1:before{content:"\e191"}.glyphicon-sound-6-1:before{content:"\e192"}.glyphicon-sound-7-1:before{content:"\e193"}.glyphicon-copyright-mark:before{content:"\e194"}.glyphicon-registration-mark:before{content:"\e195"}.glyphicon-cloud-download:before{content:"\e197"}.glyphicon-cloud-upload:before{content:"\e198"}.glyphicon-tree-conifer:before{content:"\e199"}.glyphicon-tree-deciduous:before{content:"\e200"}*{-webkit-box-sizing:border-box;-moz-box-sizing:border-box;box-sizing:border-box}:before,:after{-webkit-box-sizing:border-box;-moz-box-sizing:border-box;box-sizing:border-box}input,button,select,textarea{font-family:inherit;font-size:inherit;line-height:inherit}a{color:#428bca;text-decoration:none}a:hover,a:focus{color:#2a6496;text-decoration:underline}a:focus{outline:thin dotted;outline:5px auto -webkit-focus-ring-color;outline-offset:-2px}figure{margin:0}img{vertical-align:middle}.img-responsive,.thumbnail>img,.thumbnail a>img,.carousel-inner>.item>img,.carousel-inner>.item>a>img{display:block;width:100% \9;max-width:100%;height:auto}.img-rounded{border-radius:6px}.img-thumbnail{display:inline-block;width:100% \9;max-width:100%;height:auto;padding:4px;line-height:1.42857143;background-color:#fff;border:1px solid #ddd;border-radius:4px;-webkit-transition:all .2s ease-in-out;-o-transition:all .2s ease-in-out;transition:all .2s ease-in-out}.img-circle{border-radius:50%}hr{margin-top:20px;margin-bottom:20px;border:0;border-top:1px solid #eee}.sr-only{position:absolute;width:1px;height:1px;padding:0;margin:-1px;overflow:hidden;clip:rect(0,0,0,0);border:0}.sr-only-focusable:active,.sr-only-focusable:focus{position:static;width:auto;height:auto;margin:0;overflow:visible;clip:auto}h1,h2,h3,h4,h5,h6,.h1,.h2,.h3,.h4,.h5,.h6{font-family:inherit;font-weight:500;line-height:1.1;color:inherit}h1 small,h2 small,h3 small,h4 small,h5 small,h6 small,.h1 small,.h2 small,.h3 small,.h4 small,.h5 small,.h6 small,h1 .small,h2 .small,h3 .small,h4 .small,h5 .small,h6 .small,.h1 .small,.h2 .small,.h3 .small,.h4 .small,.h5 .small,.h6 .small{font-weight:400;line-height:1;color:#777}h1,.h1,h2,.h2,h3,.h3{margin-top:20px;margin-bottom:10px}h1 small,.h1 small,h2 small,.h2 small,h3 small,.h3 small,h1 .small,.h1 .small,h2 .small,.h2 .small,h3 .small,.h3 .small{font-size:65%}h4,.h4,h5,.h5,h6,.h6{margin-top:10px;margin-bottom:10px}h4 small,.h4 small,h5 small,.h5 small,h6 small,.h6 small,h4 .small,.h4 .small,h5 .small,.h5 .small,h6 .small,.h6 .small{font-size:75%}h1,.h1{font-size:36px}h2,.h2{font-size:30px}h3,.h3{font-size:24px}h4,.h4{font-size:18px}h5,.h5{font-size:14px}h6,.h6{font-size:12px}p{margin:0 0 10px}.lead{margin-bottom:20px;font-size:16px;font-weight:300;line-height:1.4}@media (min-width:768px){.lead{font-size:21px}}small,.small{font-size:85%}cite{font-style:normal}mark,.mark{padding:.2em;background-color:#fcf8e3}.text-left{text-align:left}.text-right{text-align:right}.text-center{text-align:center}.text-justify{text-align:justify}.text-nowrap{white-space:nowrap}.text-lowercase{text-transform:lowercase}.text-uppercase{text-transform:uppercase}.text-capitalize{text-transform:capitalize}.text-muted{color:#777}.text-primary{color:#428bca}a.text-primary:hover{color:#3071a9}.text-success{color:#3c763d}a.text-success:hover{color:#2b542c}.text-info{color:#31708f}a.text-info:hover{color:#245269}.text-warning{color:#8a6d3b}a.text-warning:hover{color:#66512c}.text-danger{color:#a94442}a.text-danger:hover{color:#843534}.bg-primary{color:#fff;background-color:#428bca}a.bg-primary:hover{background-color:#3071a9}.bg-success{background-color:#dff0d8}a.bg-success:hover{background-color:#c1e2b3}.bg-info{background-color:#d9edf7}a.bg-info:hover{background-color:#afd9ee}.bg-warning{background-color:#fcf8e3}a.bg-warning:hover{background-color:#f7ecb5}.bg-danger{background-color:#f2dede}a.bg-danger:hover{background-color:#e4b9b9}.page-header{padding-bottom:9px;margin:40px 0 20px;border-bottom:1px solid #eee}ul,ol{margin-top:0;margin-bottom:10px}ul ul,ol ul,ul ol,ol ol{margin-bottom:0}.list-unstyled{padding-left:0;list-style:none}.list-inline{padding-left:0;margin-left:-5px;list-style:none}.list-inline>li{display:inline-block;padding-right:5px;padding-left:5px}dl{margin-top:0;margin-bottom:20px}dt,dd{line-height:1.42857143}dt{font-weight:700}dd{margin-left:0}@media (min-width:768px){.dl-horizontal dt{float:left;width:160px;overflow:hidden;clear:left;text-align:right;text-overflow:ellipsis;white-space:nowrap}.dl-horizontal dd{margin-left:180px}}abbr[title],abbr[data-original-title]{cursor:help;border-bottom:1px dotted #777}.initialism{font-size:90%;text-transform:uppercase}blockquote{padding:10px 20px;margin:0 0 20px;font-size:17.5px;border-left:5px solid #eee}blockquote p:last-child,blockquote ul:last-child,blockquote ol:last-child{margin-bottom:0}blockquote footer,blockquote small,blockquote .small{display:block;font-size:80%;line-height:1.42857143;color:#777}blockquote footer:before,blockquote small:before,blockquote .small:before{content:'\2014 \00A0'}.blockquote-reverse,blockquote.pull-right{padding-right:15px;padding-left:0;text-align:right;border-right:5px solid #eee;border-left:0}.blockquote-reverse footer:before,blockquote.pull-right footer:before,.blockquote-reverse small:before,blockquote.pull-right small:before,.blockquote-reverse .small:before,blockquote.pull-right .small:before{content:''}.blockquote-reverse footer:after,blockquote.pull-right footer:after,.blockquote-reverse small:after,blockquote.pull-right small:after,.blockquote-reverse .small:after,blockquote.pull-right .small:after{content:'\00A0 \2014'}blockquote:before,blockquote:after{content:""}address{margin-bottom:20px;font-style:normal;line-height:1.42857143}code,kbd,pre,samp{font-family:Menlo,Monaco,Consolas,"Courier New",monospace}code{padding:2px 4px;font-size:90%;color:#c7254e;background-color:#f9f2f4;border-radius:4px}kbd{padding:2px 4px;font-size:90%;color:#fff;background-color:#333;border-radius:3px;-webkit-box-shadow:inset 0 -1px 0 rgba(0,0,0,.25);box-shadow:inset 0 -1px 0 rgba(0,0,0,.25)}kbd kbd{padding:0;font-size:100%;-webkit-box-shadow:none;box-shadow:none}pre{display:block;padding:9.5px;margin:0 0 10px;font-size:13px;line-height:1.42857143;color:#333;word-break:break-all;word-wrap:break-word;background-color:#f5f5f5;border:1px solid #ccc;border-radius:4px}pre code{padding:0;font-size:inherit;color:inherit;white-space:pre-wrap;background-color:transparent;border-radius:0}.pre-scrollable{max-height:340px;overflow-y:scroll}.container{padding-right:15px;padding-left:15px;margin-right:auto;margin-left:auto}@media (min-width:768px){.container{width:750px}}@media (min-width:992px){.container{width:970px}}@media (min-width:1200px){.container{width:1170px}}.container-fluid{padding-right:15px;padding-left:15px;margin-right:auto;margin-left:auto}.row{margin-right:-15px;margin-left:-15px}.col-xs-1,.col-sm-1,.col-md-1,.col-lg-1,.col-xs-2,.col-sm-2,.col-md-2,.col-lg-2,.col-xs-3,.col-sm-3,.col-md-3,.col-lg-3,.col-xs-4,.col-sm-4,.col-md-4,.col-lg-4,.col-xs-5,.col-sm-5,.col-md-5,.col-lg-5,.col-xs-6,.col-sm-6,.col-md-6,.col-lg-6,.col-xs-7,.col-sm-7,.col-md-7,.col-lg-7,.col-xs-8,.col-sm-8,.col-md-8,.col-lg-8,.col-xs-9,.col-sm-9,.col-md-9,.col-lg-9,.col-xs-10,.col-sm-10,.col-md-10,.col-lg-10,.col-xs-11,.col-sm-11,.col-md-11,.col-lg-11,.col-xs-12,.col-sm-12,.col-md-12,.col-lg-12{position:relative;min-height:1px;padding-right:15px;padding-left:15px}.col-xs-1,.col-xs-2,.col-xs-3,.col-xs-4,.col-xs-5,.col-xs-6,.col-xs-7,.col-xs-8,.col-xs-9,.col-xs-10,.col-xs-11,.col-xs-12{float:left}.col-xs-12{width:100%}.col-xs-11{width:91.66666667%}.col-xs-10{width:83.33333333%}.col-xs-9{width:75%}.col-xs-8{width:66.66666667%}.col-xs-7{width:58.33333333%}.col-xs-6{width:50%}.col-xs-5{width:41.66666667%}.col-xs-4{width:33.33333333%}.col-xs-3{width:25%}.col-xs-2{width:16.66666667%}.col-xs-1{width:8.33333333%}.col-xs-pull-12{right:100%}.col-xs-pull-11{right:91.66666667%}.col-xs-pull-10{right:83.33333333%}.col-xs-pull-9{right:75%}.col-xs-pull-8{right:66.66666667%}.col-xs-pull-7{right:58.33333333%}.col-xs-pull-6{right:50%}.col-xs-pull-5{right:41.66666667%}.col-xs-pull-4{right:33.33333333%}.col-xs-pull-3{right:25%}.col-xs-pull-2{right:16.66666667%}.col-xs-pull-1{right:8.33333333%}.col-xs-pull-0{right:auto}.col-xs-push-12{left:100%}.col-xs-push-11{left:91.66666667%}.col-xs-push-10{left:83.33333333%}.col-xs-push-9{left:75%}.col-xs-push-8{left:66.66666667%}.col-xs-push-7{left:58.33333333%}.col-xs-push-6{left:50%}.col-xs-push-5{left:41.66666667%}.col-xs-push-4{left:33.33333333%}.col-xs-push-3{left:25%}.col-xs-push-2{left:16.66666667%}.col-xs-push-1{left:8.33333333%}.col-xs-push-0{left:auto}.col-xs-offset-12{margin-left:100%}.col-xs-offset-11{margin-left:91.66666667%}.col-xs-offset-10{margin-left:83.33333333%}.col-xs-offset-9{margin-left:75%}.col-xs-offset-8{margin-left:66.66666667%}.col-xs-offset-7{margin-left:58.33333333%}.col-xs-offset-6{margin-left:50%}.col-xs-offset-5{margin-left:41.66666667%}.col-xs-offset-4{margin-left:33.33333333%}.col-xs-offset-3{margin-left:25%}.col-xs-offset-2{margin-left:16.66666667%}.col-xs-offset-1{margin-left:8.33333333%}.col-xs-offset-0{margin-left:0}@media (min-width:768px){.col-sm-1,.col-sm-2,.col-sm-3,.col-sm-4,.col-sm-5,.col-sm-6,.col-sm-7,.col-sm-8,.col-sm-9,.col-sm-10,.col-sm-11,.col-sm-12{float:left}.col-sm-12{width:100%}.col-sm-11{width:91.66666667%}.col-sm-10{width:83.33333333%}.col-sm-9{width:75%}.col-sm-8{width:66.66666667%}.col-sm-7{width:58.33333333%}.col-sm-6{width:50%}.col-sm-5{width:41.66666667%}.col-sm-4{width:33.33333333%}.col-sm-3{width:25%}.col-sm-2{width:16.66666667%}.col-sm-1{width:8.33333333%}.col-sm-pull-12{right:100%}.col-sm-pull-11{right:91.66666667%}.col-sm-pull-10{right:83.33333333%}.col-sm-pull-9{right:75%}.col-sm-pull-8{right:66.66666667%}.col-sm-pull-7{right:58.33333333%}.col-sm-pull-6{right:50%}.col-sm-pull-5{right:41.66666667%}.col-sm-pull-4{right:33.33333333%}.col-sm-pull-3{right:25%}.col-sm-pull-2{right:16.66666667%}.col-sm-pull-1{right:8.33333333%}.col-sm-pull-0{right:auto}.col-sm-push-12{left:100%}.col-sm-push-11{left:91.66666667%}.col-sm-push-10{left:83.33333333%}.col-sm-push-9{left:75%}.col-sm-push-8{left:66.66666667%}.col-sm-push-7{left:58.33333333%}.col-sm-push-6{left:50%}.col-sm-push-5{left:41.66666667%}.col-sm-push-4{left:33.33333333%}.col-sm-push-3{left:25%}.col-sm-push-2{left:16.66666667%}.col-sm-push-1{left:8.33333333%}.col-sm-push-0{left:auto}.col-sm-offset-12{margin-left:100%}.col-sm-offset-11{margin-left:91.66666667%}.col-sm-offset-10{margin-left:83.33333333%}.col-sm-offset-9{margin-left:75%}.col-sm-offset-8{margin-left:66.66666667%}.col-sm-offset-7{margin-left:58.33333333%}.col-sm-offset-6{margin-left:50%}.col-sm-offset-5{margin-left:41.66666667%}.col-sm-offset-4{margin-left:33.33333333%}.col-sm-offset-3{margin-left:25%}.col-sm-offset-2{margin-left:16.66666667%}.col-sm-offset-1{margin-left:8.33333333%}.col-sm-offset-0{margin-left:0}}@media (min-width:992px){.col-md-1,.col-md-2,.col-md-3,.col-md-4,.col-md-5,.col-md-6,.col-md-7,.col-md-8,.col-md-9,.col-md-10,.col-md-11,.col-md-12{float:left}.col-md-12{width:100%}.col-md-11{width:91.66666667%}.col-md-10{width:83.33333333%}.col-md-9{width:75%}.col-md-8{width:66.66666667%}.col-md-7{width:58.33333333%}.col-md-6{width:50%}.col-md-5{width:41.66666667%}.col-md-4{width:33.33333333%}.col-md-3{width:25%}.col-md-2{width:16.66666667%}.col-md-1{width:8.33333333%}.col-md-pull-12{right:100%}.col-md-pull-11{right:91.66666667%}.col-md-pull-10{right:83.33333333%}.col-md-pull-9{right:75%}.col-md-pull-8{right:66.66666667%}.col-md-pull-7{right:58.33333333%}.col-md-pull-6{right:50%}.col-md-pull-5{right:41.66666667%}.col-md-pull-4{right:33.33333333%}.col-md-pull-3{right:25%}.col-md-pull-2{right:16.66666667%}.col-md-pull-1{right:8.33333333%}.col-md-pull-0{right:auto}.col-md-push-12{left:100%}.col-md-push-11{left:91.66666667%}.col-md-push-10{left:83.33333333%}.col-md-push-9{left:75%}.col-md-push-8{left:66.66666667%}.col-md-push-7{left:58.33333333%}.col-md-push-6{left:50%}.col-md-push-5{left:41.66666667%}.col-md-push-4{left:33.33333333%}.col-md-push-3{left:25%}.col-md-push-2{left:16.66666667%}.col-md-push-1{left:8.33333333%}.col-md-push-0{left:auto}.col-md-offset-12{margin-left:100%}.col-md-offset-11{margin-left:91.66666667%}.col-md-offset-10{margin-left:83.33333333%}.col-md-offset-9{margin-left:75%}.col-md-offset-8{margin-left:66.66666667%}.col-md-offset-7{margin-left:58.33333333%}.col-md-offset-6{margin-left:50%}.col-md-offset-5{margin-left:41.66666667%}.col-md-offset-4{margin-left:33.33333333%}.col-md-offset-3{margin-left:25%}.col-md-offset-2{margin-left:16.66666667%}.col-md-offset-1{margin-left:8.33333333%}.col-md-offset-0{margin-left:0}}@media (min-width:1200px){.col-lg-1,.col-lg-2,.col-lg-3,.col-lg-4,.col-lg-5,.col-lg-6,.col-lg-7,.col-lg-8,.col-lg-9,.col-lg-10,.col-lg-11,.col-lg-12{float:left}.col-lg-12{width:100%}.col-lg-11{width:91.66666667%}.col-lg-10{width:83.33333333%}.col-lg-9{width:75%}.col-lg-8{width:66.66666667%}.col-lg-7{width:58.33333333%}.col-lg-6{width:50%}.col-lg-5{width:41.66666667%}.col-lg-4{width:33.33333333%}.col-lg-3{width:25%}.col-lg-2{width:16.66666667%}.col-lg-1{width:8.33333333%}.col-lg-pull-12{right:100%}.col-lg-pull-11{right:91.66666667%}.col-lg-pull-10{right:83.33333333%}.col-lg-pull-9{right:75%}.col-lg-pull-8{right:66.66666667%}.col-lg-pull-7{right:58.33333333%}.col-lg-pull-6{right:50%}.col-lg-pull-5{right:41.66666667%}.col-lg-pull-4{right:33.33333333%}.col-lg-pull-3{right:25%}.col-lg-pull-2{right:16.66666667%}.col-lg-pull-1{right:8.33333333%}.col-lg-pull-0{right:auto}.col-lg-push-12{left:100%}.col-lg-push-11{left:91.66666667%}.col-lg-push-10{left:83.33333333%}.col-lg-push-9{left:75%}.col-lg-push-8{left:66.66666667%}.col-lg-push-7{left:58.33333333%}.col-lg-push-6{left:50%}.col-lg-push-5{left:41.66666667%}.col-lg-push-4{left:33.33333333%}.col-lg-push-3{left:25%}.col-lg-push-2{left:16.66666667%}.col-lg-push-1{left:8.33333333%}.col-lg-push-0{left:auto}.col-lg-offset-12{margin-left:100%}.col-lg-offset-11{margin-left:91.66666667%}.col-lg-offset-10{margin-left:83.33333333%}.col-lg-offset-9{margin-left:75%}.col-lg-offset-8{margin-left:66.66666667%}.col-lg-offset-7{margin-left:58.33333333%}.col-lg-offset-6{margin-left:50%}.col-lg-offset-5{margin-left:41.66666667%}.col-lg-offset-4{margin-left:33.33333333%}.col-lg-offset-3{margin-left:25%}.col-lg-offset-2{margin-left:16.66666667%}.col-lg-offset-1{margin-left:8.33333333%}.col-lg-offset-0{margin-left:0}}table{background-color:transparent}th{text-align:left}.table{width:100%;max-width:100%;margin-bottom:20px}.table>thead>tr>th,.table>tbody>tr>th,.table>tfoot>tr>th,.table>thead>tr>td,.table>tbody>tr>td,.table>tfoot>tr>td{padding:8px;line-height:1.42857143;vertical-align:top;border-top:1px solid #ddd}.table>thead>tr>th{vertical-align:bottom;border-bottom:2px solid #ddd}.table>caption+thead>tr:first-child>th,.table>colgroup+thead>tr:first-child>th,.table>thead:first-child>tr:first-child>th,.table>caption+thead>tr:first-child>td,.table>colgroup+thead>tr:first-child>td,.table>thead:first-child>tr:first-child>td{border-top:0}.table>tbody+tbody{border-top:2px solid #ddd}.table .table{background-color:#fff}.table-condensed>thead>tr>th,.table-condensed>tbody>tr>th,.table-condensed>tfoot>tr>th,.table-condensed>thead>tr>td,.table-condensed>tbody>tr>td,.table-condensed>tfoot>tr>td{padding:5px}.table-bordered{border:1px solid #ddd}.table-bordered>thead>tr>th,.table-bordered>tbody>tr>th,.table-bordered>tfoot>tr>th,.table-bordered>thead>tr>td,.table-bordered>tbody>tr>td,.table-bordered>tfoot>tr>td{border:1px solid #ddd}.table-bordered>thead>tr>th,.table-bordered>thead>tr>td{border-bottom-width:2px}.table-striped>tbody>tr:nth-child(odd)>td,.table-striped>tbody>tr:nth-child(odd)>th{background-color:#f9f9f9}.table-hover>tbody>tr:hover>td,.table-hover>tbody>tr:hover>th{background-color:#f5f5f5}table col[class*=col-]{position:static;display:table-column;float:none}table td[class*=col-],table th[class*=col-]{position:static;display:table-cell;float:none}.table>thead>tr>td.active,.table>tbody>tr>td.active,.table>tfoot>tr>td.active,.table>thead>tr>th.active,.table>tbody>tr>th.active,.table>tfoot>tr>th.active,.table>thead>tr.active>td,.table>tbody>tr.active>td,.table>tfoot>tr.active>td,.table>thead>tr.active>th,.table>tbody>tr.active>th,.table>tfoot>tr.active>th{background-color:#f5f5f5}.table-hover>tbody>tr>td.active:hover,.table-hover>tbody>tr>th.active:hover,.table-hover>tbody>tr.active:hover>td,.table-hover>tbody>tr:hover>.active,.table-hover>tbody>tr.active:hover>th{background-color:#e8e8e8}.table>thead>tr>td.success,.table>tbody>tr>td.success,.table>tfoot>tr>td.success,.table>thead>tr>th.success,.table>tbody>tr>th.success,.table>tfoot>tr>th.success,.table>thead>tr.success>td,.table>tbody>tr.success>td,.table>tfoot>tr.success>td,.table>thead>tr.success>th,.table>tbody>tr.success>th,.table>tfoot>tr.success>th{background-color:#dff0d8}.table-hover>tbody>tr>td.success:hover,.table-hover>tbody>tr>th.success:hover,.table-hover>tbody>tr.success:hover>td,.table-hover>tbody>tr:hover>.success,.table-hover>tbody>tr.success:hover>th{background-color:#d0e9c6}.table>thead>tr>td.info,.table>tbody>tr>td.info,.table>tfoot>tr>td.info,.table>thead>tr>th.info,.table>tbody>tr>th.info,.table>tfoot>tr>th.info,.table>thead>tr.info>td,.table>tbody>tr.info>td,.table>tfoot>tr.info>td,.table>thead>tr.info>th,.table>tbody>tr.info>th,.table>tfoot>tr.info>th{background-color:#d9edf7}.table-hover>tbody>tr>td.info:hover,.table-hover>tbody>tr>th.info:hover,.table-hover>tbody>tr.info:hover>td,.table-hover>tbody>tr:hover>.info,.table-hover>tbody>tr.info:hover>th{background-color:#c4e3f3}.table>thead>tr>td.warning,.table>tbody>tr>td.warning,.table>tfoot>tr>td.warning,.table>thead>tr>th.warning,.table>tbody>tr>th.warning,.table>tfoot>tr>th.warning,.table>thead>tr.warning>td,.table>tbody>tr.warning>td,.table>tfoot>tr.warning>td,.table>thead>tr.warning>th,.table>tbody>tr.warning>th,.table>tfoot>tr.warning>th{background-color:#fcf8e3}.table-hover>tbody>tr>td.warning:hover,.table-hover>tbody>tr>th.warning:hover,.table-hover>tbody>tr.warning:hover>td,.table-hover>tbody>tr:hover>.warning,.table-hover>tbody>tr.warning:hover>th{background-color:#faf2cc}.table>thead>tr>td.danger,.table>tbody>tr>td.danger,.table>tfoot>tr>td.danger,.table>thead>tr>th.danger,.table>tbody>tr>th.danger,.table>tfoot>tr>th.danger,.table>thead>tr.danger>td,.table>tbody>tr.danger>td,.table>tfoot>tr.danger>td,.table>thead>tr.danger>th,.table>tbody>tr.danger>th,.table>tfoot>tr.danger>th{background-color:#f2dede}.table-hover>tbody>tr>td.danger:hover,.table-hover>tbody>tr>th.danger:hover,.table-hover>tbody>tr.danger:hover>td,.table-hover>tbody>tr:hover>.danger,.table-hover>tbody>tr.danger:hover>th{background-color:#ebcccc}@media screen and (max-width:767px){.table-responsive{width:100%;margin-bottom:15px;overflow-x:auto;overflow-y:hidden;-webkit-overflow-scrolling:touch;-ms-overflow-style:-ms-autohiding-scrollbar;border:1px solid #ddd}.table-responsive>.table{margin-bottom:0}.table-responsive>.table>thead>tr>th,.table-responsive>.table>tbody>tr>th,.table-responsive>.table>tfoot>tr>th,.table-responsive>.table>thead>tr>td,.table-responsive>.table>tbody>tr>td,.table-responsive>.table>tfoot>tr>td{white-space:nowrap}.table-responsive>.table-bordered{border:0}.table-responsive>.table-bordered>thead>tr>th:first-child,.table-responsive>.table-bordered>tbody>tr>th:first-child,.table-responsive>.table-bordered>tfoot>tr>th:first-child,.table-responsive>.table-bordered>thead>tr>td:first-child,.table-responsive>.table-bordered>tbody>tr>td:first-child,.table-responsive>.table-bordered>tfoot>tr>td:first-child{border-left:0}.table-responsive>.table-bordered>thead>tr>th:last-child,.table-responsive>.table-bordered>tbody>tr>th:last-child,.table-responsive>.table-bordered>tfoot>tr>th:last-child,.table-responsive>.table-bordered>thead>tr>td:last-child,.table-responsive>.table-bordered>tbody>tr>td:last-child,.table-responsive>.table-bordered>tfoot>tr>td:last-child{border-right:0}.table-responsive>.table-bordered>tbody>tr:last-child>th,.table-responsive>.table-bordered>tfoot>tr:last-child>th,.table-responsive>.table-bordered>tbody>tr:last-child>td,.table-responsive>.table-bordered>tfoot>tr:last-child>td{border-bottom:0}}fieldset{min-width:0;padding:0;margin:0;border:0}legend{display:block;width:100%;padding:0;margin-bottom:20px;font-size:21px;line-height:inherit;color:#333;border:0;border-bottom:1px solid #e5e5e5}label{display:inline-block;max-width:100%;margin-bottom:5px;font-weight:700}input[type=search]{-webkit-box-sizing:border-box;-moz-box-sizing:border-box;box-sizing:border-box}input[type=radio],input[type=checkbox]{margin:4px 0 0;margin-top:1px \9;line-height:normal}input[type=file]{display:block}input[type=range]{display:block;width:100%}select[multiple],select[size]{height:auto}input[type=file]:focus,input[type=radio]:focus,input[type=checkbox]:focus{outline:thin dotted;outline:5px auto -webkit-focus-ring-color;outline-offset:-2px}output{display:block;padding-top:7px;font-size:14px;line-height:1.42857143;color:#555}.form-control{display:block;width:100%;height:34px;padding:6px 12px;font-size:14px;line-height:1.42857143;color:#555;background-color:#fff;background-image:none;border:1px solid #ccc;border-radius:4px;-webkit-box-shadow:inset 0 1px 1px rgba(0,0,0,.075);box-shadow:inset 0 1px 1px rgba(0,0,0,.075);-webkit-transition:border-color ease-in-out .15s,-webkit-box-shadow ease-in-out .15s;-o-transition:border-color ease-in-out .15s,box-shadow ease-in-out .15s;transition:border-color ease-in-out .15s,box-shadow ease-in-out .15s}.form-control:focus{border-color:#66afe9;outline:0;-webkit-box-shadow:inset 0 1px 1px rgba(0,0,0,.075),0 0 8px rgba(102,175,233,.6);box-shadow:inset 0 1px 1px rgba(0,0,0,.075),0 0 8px rgba(102,175,233,.6)}.form-control::-moz-placeholder{color:#777;opacity:1}.form-control:-ms-input-placeholder{color:#777}.form-control::-webkit-input-placeholder{color:#777}.form-control[disabled],.form-control[readonly],fieldset[disabled] .form-control{cursor:not-allowed;background-color:#eee;opacity:1}textarea.form-control{height:auto}input[type=search]{-webkit-appearance:none}input[type=date],input[type=time],input[type=datetime-local],input[type=month]{line-height:34px;line-height:1.42857143 \0}input[type=date].input-sm,input[type=time].input-sm,input[type=datetime-local].input-sm,input[type=month].input-sm{line-height:30px}input[type=date].input-lg,input[type=time].input-lg,input[type=datetime-local].input-lg,input[type=month].input-lg{line-height:46px}.form-group{margin-bottom:15px}.radio,.checkbox{position:relative;display:block;min-height:20px;margin-top:10px;margin-bottom:10px}.radio label,.checkbox label{padding-left:20px;margin-bottom:0;font-weight:400;cursor:pointer}.radio input[type=radio],.radio-inline input[type=radio],.checkbox input[type=checkbox],.checkbox-inline input[type=checkbox]{position:absolute;margin-top:4px \9;margin-left:-20px}.radio+.radio,.checkbox+.checkbox{margin-top:-5px}.radio-inline,.checkbox-inline{display:inline-block;padding-left:20px;margin-bottom:0;font-weight:400;vertical-align:middle;cursor:pointer}.radio-inline+.radio-inline,.checkbox-inline+.checkbox-inline{margin-top:0;margin-left:10px}input[type=radio][disabled],input[type=checkbox][disabled],input[type=radio].disabled,input[type=checkbox].disabled,fieldset[disabled] input[type=radio],fieldset[disabled] input[type=checkbox]{cursor:not-allowed}.radio-inline.disabled,.checkbox-inline.disabled,fieldset[disabled] .radio-inline,fieldset[disabled] .checkbox-inline{cursor:not-allowed}.radio.disabled label,.checkbox.disabled label,fieldset[disabled] .radio label,fieldset[disabled] .checkbox label{cursor:not-allowed}.form-control-static{padding-top:7px;padding-bottom:7px;margin-bottom:0}.form-control-static.input-lg,.form-control-static.input-sm{padding-right:0;padding-left:0}.input-sm,.form-horizontal .form-group-sm .form-control{height:30px;padding:5px 10px;font-size:12px;line-height:1.5;border-radius:3px}select.input-sm{height:30px;line-height:30px}textarea.input-sm,select[multiple].input-sm{height:auto}.input-lg,.form-horizontal .form-group-lg .form-control{height:46px;padding:10px 16px;font-size:18px;line-height:1.33;border-radius:6px}select.input-lg{height:46px;line-height:46px}textarea.input-lg,select[multiple].input-lg{height:auto}.has-feedback{position:relative}.has-feedback .form-control{padding-right:42.5px}.form-control-feedback{position:absolute;top:25px;right:0;z-index:2;display:block;width:34px;height:34px;line-height:34px;text-align:center}.input-lg+.form-control-feedback{width:46px;height:46px;line-height:46px}.input-sm+.form-control-feedback{width:30px;height:30px;line-height:30px}.has-success .help-block,.has-success .control-label,.has-success .radio,.has-success .checkbox,.has-success .radio-inline,.has-success .checkbox-inline{color:#3c763d}.has-success .form-control{border-color:#3c763d;-webkit-box-shadow:inset 0 1px 1px rgba(0,0,0,.075);box-shadow:inset 0 1px 1px rgba(0,0,0,.075)}.has-success .form-control:focus{border-color:#2b542c;-webkit-box-shadow:inset 0 1px 1px rgba(0,0,0,.075),0 0 6px #67b168;box-shadow:inset 0 1px 1px rgba(0,0,0,.075),0 0 6px #67b168}.has-success .input-group-addon{color:#3c763d;background-color:#dff0d8;border-color:#3c763d}.has-success .form-control-feedback{color:#3c763d}.has-warning .help-block,.has-warning .control-label,.has-warning .radio,.has-warning .checkbox,.has-warning .radio-inline,.has-warning .checkbox-inline{color:#8a6d3b}.has-warning .form-control{border-color:#8a6d3b;-webkit-box-shadow:inset 0 1px 1px rgba(0,0,0,.075);box-shadow:inset 0 1px 1px rgba(0,0,0,.075)}.has-warning .form-control:focus{border-color:#66512c;-webkit-box-shadow:inset 0 1px 1px rgba(0,0,0,.075),0 0 6px #c0a16b;box-shadow:inset 0 1px 1px rgba(0,0,0,.075),0 0 6px #c0a16b}.has-warning .input-group-addon{color:#8a6d3b;background-color:#fcf8e3;border-color:#8a6d3b}.has-warning .form-control-feedback{color:#8a6d3b}.has-error .help-block,.has-error .control-label,.has-error .radio,.has-error .checkbox,.has-error .radio-inline,.has-error .checkbox-inline{color:#a94442}.has-error .form-control{border-color:#a94442;-webkit-box-shadow:inset 0 1px 1px rgba(0,0,0,.075);box-shadow:inset 0 1px 1px rgba(0,0,0,.075)}.has-error .form-control:focus{border-color:#843534;-webkit-box-shadow:inset 0 1px 1px rgba(0,0,0,.075),0 0 6px #ce8483;box-shadow:inset 0 1px 1px rgba(0,0,0,.075),0 0 6px #ce8483}.has-error .input-group-addon{color:#a94442;background-color:#f2dede;border-color:#a94442}.has-error .form-control-feedback{color:#a94442}.has-feedback label.sr-only~.form-control-feedback{top:0}.help-block{display:block;margin-top:5px;margin-bottom:10px;color:#737373}@media (min-width:768px){.form-inline .form-group{display:inline-block;margin-bottom:0;vertical-align:middle}.form-inline .form-control{display:inline-block;width:auto;vertical-align:middle}.form-inline .input-group{display:inline-table;vertical-align:middle}.form-inline .input-group .input-group-addon,.form-inline .input-group .input-group-btn,.form-inline .input-group .form-control{width:auto}.form-inline .input-group>.form-control{width:100%}.form-inline .control-label{margin-bottom:0;vertical-align:middle}.form-inline .radio,.form-inline .checkbox{display:inline-block;margin-top:0;margin-bottom:0;vertical-align:middle}.form-inline .radio label,.form-inline .checkbox label{padding-left:0}.form-inline .radio input[type=radio],.form-inline .checkbox input[type=checkbox]{position:relative;margin-left:0}.form-inline .has-feedback .form-control-feedback{top:0}}.form-horizontal .radio,.form-horizontal .checkbox,.form-horizontal .radio-inline,.form-horizontal .checkbox-inline{padding-top:7px;margin-top:0;margin-bottom:0}.form-horizontal .radio,.form-horizontal .checkbox{min-height:27px}.form-horizontal .form-group{margin-right:-15px;margin-left:-15px}@media (min-width:768px){.form-horizontal .control-label{padding-top:7px;margin-bottom:0;text-align:right}}.form-horizontal .has-feedback .form-control-feedback{top:0;right:15px}@media (min-width:768px){.form-horizontal .form-group-lg .control-label{padding-top:14.3px}}@media (min-width:768px){.form-horizontal .form-group-sm .control-label{padding-top:6px}}.btn{display:inline-block;padding:6px 12px;margin-bottom:0;font-size:14px;font-weight:400;line-height:1.42857143;text-align:center;white-space:nowrap;vertical-align:middle;cursor:pointer;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none;background-image:none;border:1px solid transparent;border-radius:4px}.btn:focus,.btn:active:focus,.btn.active:focus{outline:thin dotted;outline:5px auto -webkit-focus-ring-color;outline-offset:-2px}.btn:hover,.btn:focus{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.disabled,.btn[disabled],fieldset[disabled] .btn{pointer-events:none;cursor:not-allowed;filter:alpha(opacity=65);-webkit-box-shadow:none;box-shadow:none;opacity:.65}.btn-default{color:#333;background-color:#fff;border-color:#ccc}.btn-default:hover,.btn-default:focus,.btn-default:active,.btn-default.active,.open>.dropdown-toggle.btn-default{color:#333;background-color:#e6e6e6;border-color:#adadad}.btn-default:active,.btn-default.active,.open>.dropdown-toggle.btn-default{background-image:none}.btn-default.disabled,.btn-default[disabled],fieldset[disabled] .btn-default,.btn-default.disabled:hover,.btn-default[disabled]:hover,fieldset[disabled] .btn-default:hover,.btn-default.disabled:focus,.btn-default[disabled]:focus,fieldset[disabled] .btn-default:focus,.btn-default.disabled:active,.btn-default[disabled]:active,fieldset[disabled] .btn-default:active,.btn-default.disabled.active,.btn-default[disabled].active,fieldset[disabled] .btn-default.active{background-color:#fff;border-color:#ccc}.btn-default .badge{color:#fff;background-color:#333}.btn-primary{color:#fff;background-color:#428bca;border-color:#357ebd}.btn-primary:hover,.btn-primary:focus,.btn-primary:active,.btn-primary.active,.open>.dropdown-toggle.btn-primary{color:#fff;background-color:#3071a9;border-color:#285e8e}.btn-primary:active,.btn-primary.active,.open>.dropdown-toggle.btn-primary{background-image:none}.btn-primary.disabled,.btn-primary[disabled],fieldset[disabled] .btn-primary,.btn-primary.disabled:hover,.btn-primary[disabled]:hover,fieldset[disabled] .btn-primary:hover,.btn-primary.disabled:focus,.btn-primary[disabled]:focus,fieldset[disabled] .btn-primary:focus,.btn-primary.disabled:active,.btn-primary[disabled]:active,fieldset[disabled] .btn-primary:active,.btn-primary.disabled.active,.btn-primary[disabled].active,fieldset[disabled] .btn-primary.active{background-color:#428bca;border-color:#357ebd}.btn-primary .badge{color:#428bca;background-color:#fff}.btn-success{color:#fff;background-color:#5cb85c;border-color:#4cae4c}.btn-success:hover,.btn-success:focus,.btn-success:active,.btn-success.active,.open>.dropdown-toggle.btn-success{color:#fff;background-color:#449d44;border-color:#398439}.btn-success:active,.btn-success.active,.open>.dropdown-toggle.btn-success{background-image:none}.btn-success.disabled,.btn-success[disabled],fieldset[disabled] .btn-success,.btn-success.disabled:hover,.btn-success[disabled]:hover,fieldset[disabled] .btn-success:hover,.btn-success.disabled:focus,.btn-success[disabled]:focus,fieldset[disabled] .btn-success:focus,.btn-success.disabled:active,.btn-success[disabled]:active,fieldset[disabled] .btn-success:active,.btn-success.disabled.active,.btn-success[disabled].active,fieldset[disabled] .btn-success.active{background-color:#5cb85c;border-color:#4cae4c}.btn-success .badge{color:#5cb85c;background-color:#fff}.btn-info{color:#fff;background-color:#5bc0de;border-color:#46b8da}.btn-info:hover,.btn-info:focus,.btn-info:active,.btn-info.active,.open>.dropdown-toggle.btn-info{color:#fff;background-color:#31b0d5;border-color:#269abc}.btn-info:active,.btn-info.active,.open>.dropdown-toggle.btn-info{background-image:none}.btn-info.disabled,.btn-info[disabled],fieldset[disabled] .btn-info,.btn-info.disabled:hover,.btn-info[disabled]:hover,fieldset[disabled] .btn-info:hover,.btn-info.disabled:focus,.btn-info[disabled]:focus,fieldset[disabled] .btn-info:focus,.btn-info.disabled:active,.btn-info[disabled]:active,fieldset[disabled] .btn-info:active,.btn-info.disabled.active,.btn-info[disabled].active,fieldset[disabled] .btn-info.active{background-color:#5bc0de;border-color:#46b8da}.btn-info .badge{color:#5bc0de;background-color:#fff}.btn-warning{color:#fff;background-color:#f0ad4e;border-color:#eea236}.btn-warning:hover,.btn-warning:focus,.btn-warning:active,.btn-warning.active,.open>.dropdown-toggle.btn-warning{color:#fff;background-color:#ec971f;border-color:#d58512}.btn-warning:active,.btn-warning.active,.open>.dropdown-toggle.btn-warning{background-image:none}.btn-warning.disabled,.btn-warning[disabled],fieldset[disabled] .btn-warning,.btn-warning.disabled:hover,.btn-warning[disabled]:hover,fieldset[disabled] .btn-warning:hover,.btn-warning.disabled:focus,.btn-warning[disabled]:focus,fieldset[disabled] .btn-warning:focus,.btn-warning.disabled:active,.btn-warning[disabled]:active,fieldset[disabled] .btn-warning:active,.btn-warning.disabled.active,.btn-warning[disabled].active,fieldset[disabled] .btn-warning.active{background-color:#f0ad4e;border-color:#eea236}.btn-warning .badge{color:#f0ad4e;background-color:#fff}.btn-danger{color:#fff;background-color:#d9534f;border-color:#d43f3a}.btn-danger:hover,.btn-danger:focus,.btn-danger:active,.btn-danger.active,.open>.dropdown-toggle.btn-danger{color:#fff;background-color:#c9302c;border-color:#ac2925}.btn-danger:active,.btn-danger.active,.open>.dropdown-toggle.btn-danger{background-image:none}.btn-danger.disabled,.btn-danger[disabled],fieldset[disabled] .btn-danger,.btn-danger.disabled:hover,.btn-danger[disabled]:hover,fieldset[disabled] .btn-danger:hover,.btn-danger.disabled:focus,.btn-danger[disabled]:focus,fieldset[disabled] .btn-danger:focus,.btn-danger.disabled:active,.btn-danger[disabled]:active,fieldset[disabled] .btn-danger:active,.btn-danger.disabled.active,.btn-danger[disabled].active,fieldset[disabled] .btn-danger.active{background-color:#d9534f;border-color:#d43f3a}.btn-danger .badge{color:#d9534f;background-color:#fff}.btn-link{font-weight:400;color:#428bca;cursor:pointer;border-radius:0}.btn-link,.btn-link:active,.btn-link[disabled],fieldset[disabled] .btn-link{background-color:transparent;-webkit-box-shadow:none;box-shadow:none}.btn-link,.btn-link:hover,.btn-link:focus,.btn-link:active{border-color:transparent}.btn-link:hover,.btn-link:focus{color:#2a6496;text-decoration:underline;background-color:transparent}.btn-link[disabled]:hover,fieldset[disabled] .btn-link:hover,.btn-link[disabled]:focus,fieldset[disabled] .btn-link:focus{color:#777;text-decoration:none}.btn-lg,.btn-group-lg>.btn{padding:10px 16px;font-size:18px;line-height:1.33;border-radius:6px}.btn-sm,.btn-group-sm>.btn{padding:5px 10px;font-size:12px;line-height:1.5;border-radius:3px}.btn-xs,.btn-group-xs>.btn{padding:1px 5px;font-size:12px;line-height:1.5;border-radius:3px}.btn-block{display:block;width:100%}.btn-block+.btn-block{margin-top:5px}input[type=submit].btn-block,input[type=reset].btn-block,input[type=button].btn-block{width:100%}.fade{opacity:0;-webkit-transition:opacity .15s linear;-o-transition:opacity .15s linear;transition:opacity .15s linear}.fade.in{opacity:1}.collapse{display:none}.collapse.in{display:block}tr.collapse.in{display:table-row}tbody.collapse.in{display:table-row-group}.collapsing{position:relative;height:0;overflow:hidden;-webkit-transition:height .35s ease;-o-transition:height .35s ease;transition:height .35s ease}.caret{display:inline-block;width:0;height:0;margin-left:2px;vertical-align:middle;border-top:4px solid;border-right:4px solid transparent;border-left:4px solid transparent}.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;text-align:left;list-style:none;background-color:#fff;-webkit-background-clip:padding-box;background-clip:padding-box;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)}.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.42857143;color:#333;white-space:nowrap}.dropdown-menu>li>a:hover,.dropdown-menu>li>a:focus{color:#262626;text-decoration:none;background-color:#f5f5f5}.dropdown-menu>.active>a,.dropdown-menu>.active>a:hover,.dropdown-menu>.active>a:focus{color:#fff;text-decoration:none;background-color:#428bca;outline:0}.dropdown-menu>.disabled>a,.dropdown-menu>.disabled>a:hover,.dropdown-menu>.disabled>a:focus{color:#777}.dropdown-menu>.disabled>a:hover,.dropdown-menu>.disabled>a:focus{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-menu-right{right:0;left:auto}.dropdown-menu-left{right:auto;left:0}.dropdown-header{display:block;padding:3px 20px;font-size:12px;line-height:1.42857143;color:#777;white-space:nowrap}.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{content:"";border-top:0;border-bottom:4px solid}.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}.navbar-right .dropdown-menu-left{right:auto;left:0}}.btn-group,.btn-group-vertical{position:relative;display:inline-block;vertical-align:middle}.btn-group>.btn,.btn-group-vertical>.btn{position:relative;float:left}.btn-group>.btn:hover,.btn-group-vertical>.btn:hover,.btn-group>.btn:focus,.btn-group-vertical>.btn:focus,.btn-group>.btn:active,.btn-group-vertical>.btn:active,.btn-group>.btn.active,.btn-group-vertical>.btn.active{z-index:2}.btn-group>.btn:focus,.btn-group-vertical>.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{margin-left:-5px}.btn-toolbar .btn-group,.btn-toolbar .input-group{float:left}.btn-toolbar>.btn,.btn-toolbar>.btn-group,.btn-toolbar>.input-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-top-left-radius:0;border-bottom-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-top-left-radius:0;border-bottom-left-radius:0}.btn-group .dropdown-toggle:active,.btn-group.open .dropdown-toggle{outline:0}.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-group.open .dropdown-toggle.btn-link{-webkit-box-shadow:none;box-shadow:none}.btn .caret{margin-left:0}.btn-lg .caret{border-width:5px 5px 0;border-bottom-width:0}.dropup .btn-lg .caret{border-width:0 5px 5px}.btn-group-vertical>.btn,.btn-group-vertical>.btn-group,.btn-group-vertical>.btn-group>.btn{display:block;float:none;width:100%;max-width:100%}.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-left-radius:0;border-top-right-radius:0;border-bottom-left-radius:4px}.btn-group-vertical>.btn-group:not(:first-child):not(:last-child)>.btn{border-radius:0}.btn-group-vertical>.btn-group:first-child:not(:last-child)>.btn:last-child,.btn-group-vertical>.btn-group:first-child:not(:last-child)>.dropdown-toggle{border-bottom-right-radius:0;border-bottom-left-radius:0}.btn-group-vertical>.btn-group:last-child:not(:first-child)>.btn:first-child{border-top-left-radius:0;border-top-right-radius:0}.btn-group-justified{display:table;width:100%;table-layout:fixed;border-collapse:separate}.btn-group-justified>.btn,.btn-group-justified>.btn-group{display:table-cell;float:none;width:1%}.btn-group-justified>.btn-group .btn{width:100%}.btn-group-justified>.btn-group .dropdown-menu{left:auto}[data-toggle=buttons]>.btn>input[type=radio],[data-toggle=buttons]>.btn>input[type=checkbox]{position:absolute;z-index:-1;filter:alpha(opacity=0);opacity:0}.input-group{position:relative;display:table;border-collapse:separate}.input-group[class*=col-]{float:none;padding-right:0;padding-left:0}.input-group .form-control{position:relative;z-index:2;float:left;width:100%;margin-bottom:0}.input-group-lg>.form-control,.input-group-lg>.input-group-addon,.input-group-lg>.input-group-btn>.btn{height:46px;padding:10px 16px;font-size:18px;line-height:1.33;border-radius:6px}select.input-group-lg>.form-control,select.input-group-lg>.input-group-addon,select.input-group-lg>.input-group-btn>.btn{height:46px;line-height:46px}textarea.input-group-lg>.form-control,textarea.input-group-lg>.input-group-addon,textarea.input-group-lg>.input-group-btn>.btn,select[multiple].input-group-lg>.form-control,select[multiple].input-group-lg>.input-group-addon,select[multiple].input-group-lg>.input-group-btn>.btn{height:auto}.input-group-sm>.form-control,.input-group-sm>.input-group-addon,.input-group-sm>.input-group-btn>.btn{height:30px;padding:5px 10px;font-size:12px;line-height:1.5;border-radius:3px}select.input-group-sm>.form-control,select.input-group-sm>.input-group-addon,select.input-group-sm>.input-group-btn>.btn{height:30px;line-height:30px}textarea.input-group-sm>.form-control,textarea.input-group-sm>.input-group-addon,textarea.input-group-sm>.input-group-btn>.btn,select[multiple].input-group-sm>.form-control,select[multiple].input-group-sm>.input-group-addon,select[multiple].input-group-sm>.input-group-btn>.btn{height:auto}.input-group-addon,.input-group-btn,.input-group .form-control{display:table-cell}.input-group-addon:not(:first-child):not(:last-child),.input-group-btn:not(:first-child):not(:last-child),.input-group .form-control:not(:first-child):not(:last-child){border-radius:0}.input-group-addon,.input-group-btn{width:1%;white-space:nowrap;vertical-align:middle}.input-group-addon{padding:6px 12px;font-size:14px;font-weight:400;line-height:1;color:#555;text-align:center;background-color:#eee;border:1px solid #ccc;border-radius:4px}.input-group-addon.input-sm{padding:5px 10px;font-size:12px;border-radius:3px}.input-group-addon.input-lg{padding:10px 16px;font-size:18px;border-radius:6px}.input-group-addon input[type=radio],.input-group-addon input[type=checkbox]{margin-top:0}.input-group .form-control:first-child,.input-group-addon:first-child,.input-group-btn:first-child>.btn,.input-group-btn:first-child>.btn-group>.btn,.input-group-btn:first-child>.dropdown-toggle,.input-group-btn:last-child>.btn:not(:last-child):not(.dropdown-toggle),.input-group-btn:last-child>.btn-group:not(:last-child)>.btn{border-top-right-radius:0;border-bottom-right-radius:0}.input-group-addon:first-child{border-right:0}.input-group .form-control:last-child,.input-group-addon:last-child,.input-group-btn:last-child>.btn,.input-group-btn:last-child>.btn-group>.btn,.input-group-btn:last-child>.dropdown-toggle,.input-group-btn:first-child>.btn:not(:first-child),.input-group-btn:first-child>.btn-group:not(:first-child)>.btn{border-top-left-radius:0;border-bottom-left-radius:0}.input-group-addon:last-child{border-left:0}.input-group-btn{position:relative;font-size:0;white-space:nowrap}.input-group-btn>.btn{position:relative}.input-group-btn>.btn+.btn{margin-left:-1px}.input-group-btn>.btn:hover,.input-group-btn>.btn:focus,.input-group-btn>.btn:active{z-index:2}.input-group-btn:first-child>.btn,.input-group-btn:first-child>.btn-group{margin-right:-1px}.input-group-btn:last-child>.btn,.input-group-btn:last-child>.btn-group{margin-left:-1px}.nav{padding-left:0;margin-bottom:0;list-style:none}.nav>li{position:relative;display:block}.nav>li>a{position:relative;display:block;padding:10px 15px}.nav>li>a:hover,.nav>li>a:focus{text-decoration:none;background-color:#eee}.nav>li.disabled>a{color:#777}.nav>li.disabled>a:hover,.nav>li.disabled>a:focus{color:#777;text-decoration:none;cursor:not-allowed;background-color:transparent}.nav .open>a,.nav .open>a:hover,.nav .open>a:focus{background-color:#eee;border-color:#428bca}.nav .nav-divider{height:1px;margin:9px 0;overflow:hidden;background-color:#e5e5e5}.nav>li>a>img{max-width:none}.nav-tabs{border-bottom:1px solid #ddd}.nav-tabs>li{float:left;margin-bottom:-1px}.nav-tabs>li>a{margin-right:2px;line-height:1.42857143;border:1px solid transparent;border-radius:4px 4px 0 0}.nav-tabs>li>a:hover{border-color:#eee #eee #ddd}.nav-tabs>li.active>a,.nav-tabs>li.active>a:hover,.nav-tabs>li.active>a:focus{color:#555;cursor:default;background-color:#fff;border:1px solid #ddd;border-bottom-color:transparent}.nav-tabs.nav-justified{width:100%;border-bottom:0}.nav-tabs.nav-justified>li{float:none}.nav-tabs.nav-justified>li>a{margin-bottom:5px;text-align:center}.nav-tabs.nav-justified>.dropdown .dropdown-menu{top:auto;left:auto}@media (min-width:768px){.nav-tabs.nav-justified>li{display:table-cell;width:1%}.nav-tabs.nav-justified>li>a{margin-bottom:0}}.nav-tabs.nav-justified>li>a{margin-right:0;border-radius:4px}.nav-tabs.nav-justified>.active>a,.nav-tabs.nav-justified>.active>a:hover,.nav-tabs.nav-justified>.active>a:focus{border:1px solid #ddd}@media (min-width:768px){.nav-tabs.nav-justified>li>a{border-bottom:1px solid #ddd;border-radius:4px 4px 0 0}.nav-tabs.nav-justified>.active>a,.nav-tabs.nav-justified>.active>a:hover,.nav-tabs.nav-justified>.active>a:focus{border-bottom-color:#fff}}.nav-pills>li{float:left}.nav-pills>li>a{border-radius:4px}.nav-pills>li+li{margin-left:2px}.nav-pills>li.active>a,.nav-pills>li.active>a:hover,.nav-pills>li.active>a:focus{color:#fff;background-color:#428bca}.nav-stacked>li{float:none}.nav-stacked>li+li{margin-top:2px;margin-left:0}.nav-justified{width:100%}.nav-justified>li{float:none}.nav-justified>li>a{margin-bottom:5px;text-align:center}.nav-justified>.dropdown .dropdown-menu{top:auto;left:auto}@media (min-width:768px){.nav-justified>li{display:table-cell;width:1%}.nav-justified>li>a{margin-bottom:0}}.nav-tabs-justified{border-bottom:0}.nav-tabs-justified>li>a{margin-right:0;border-radius:4px}.nav-tabs-justified>.active>a,.nav-tabs-justified>.active>a:hover,.nav-tabs-justified>.active>a:focus{border:1px solid #ddd}@media (min-width:768px){.nav-tabs-justified>li>a{border-bottom:1px solid #ddd;border-radius:4px 4px 0 0}.nav-tabs-justified>.active>a,.nav-tabs-justified>.active>a:hover,.nav-tabs-justified>.active>a:focus{border-bottom-color:#fff}}.tab-content>.tab-pane{display:none}.tab-content>.active{display:block}.nav-tabs .dropdown-menu{margin-top:-1px;border-top-left-radius:0;border-top-right-radius:0}.navbar{position:relative;min-height:50px;margin-bottom:20px;border:1px solid transparent}@media (min-width:768px){.navbar{border-radius:4px}}@media (min-width:768px){.navbar-header{float:left}}.navbar-collapse{padding-right:15px;padding-left:15px;overflow-x:visible;-webkit-overflow-scrolling:touch;border-top:1px solid transparent;-webkit-box-shadow:inset 0 1px 0 rgba(255,255,255,.1);box-shadow:inset 0 1px 0 rgba(255,255,255,.1)}.navbar-collapse.in{overflow-y:auto}@media (min-width:768px){.navbar-collapse{width:auto;border-top:0;-webkit-box-shadow:none;box-shadow:none}.navbar-collapse.collapse{display:block!important;height:auto!important;padding-bottom:0;overflow:visible!important}.navbar-collapse.in{overflow-y:visible}.navbar-fixed-top .navbar-collapse,.navbar-static-top .navbar-collapse,.navbar-fixed-bottom .navbar-collapse{padding-right:0;padding-left:0}}.navbar-fixed-top .navbar-collapse,.navbar-fixed-bottom .navbar-collapse{max-height:340px}@media (max-width:480px) and (orientation:landscape){.navbar-fixed-top .navbar-collapse,.navbar-fixed-bottom .navbar-collapse{max-height:200px}}.container>.navbar-header,.container-fluid>.navbar-header,.container>.navbar-collapse,.container-fluid>.navbar-collapse{margin-right:-15px;margin-left:-15px}@media (min-width:768px){.container>.navbar-header,.container-fluid>.navbar-header,.container>.navbar-collapse,.container-fluid>.navbar-collapse{margin-right:0;margin-left:0}}.navbar-static-top{z-index:1000;border-width:0 0 1px}@media (min-width:768px){.navbar-static-top{border-radius:0}}.navbar-fixed-top,.navbar-fixed-bottom{position:fixed;right:0;left:0;z-index:1030;-webkit-transform:translate3d(0,0,0);-o-transform:translate3d(0,0,0);transform:translate3d(0,0,0)}@media (min-width:768px){.navbar-fixed-top,.navbar-fixed-bottom{border-radius:0}}.navbar-fixed-top{top:0;border-width:0 0 1px}.navbar-fixed-bottom{bottom:0;margin-bottom:0;border-width:1px 0 0}.navbar-brand{float:left;height:50px;padding:15px 15px;font-size:18px;line-height:20px}.navbar-brand:hover,.navbar-brand:focus{text-decoration:none}@media (min-width:768px){.navbar>.container .navbar-brand,.navbar>.container-fluid .navbar-brand{margin-left:-15px}}.navbar-toggle{position:relative;float:right;padding:9px 10px;margin-top:8px;margin-right:15px;margin-bottom:8px;background-color:transparent;background-image:none;border:1px solid transparent;border-radius:4px}.navbar-toggle:focus{outline:0}.navbar-toggle .icon-bar{display:block;width:22px;height:2px;border-radius:1px}.navbar-toggle .icon-bar+.icon-bar{margin-top:4px}@media (min-width:768px){.navbar-toggle{display:none}}.navbar-nav{margin:7.5px -15px}.navbar-nav>li>a{padding-top:10px;padding-bottom:10px;line-height:20px}@media (max-width:767px){.navbar-nav .open .dropdown-menu{position:static;float:none;width:auto;margin-top:0;background-color:transparent;border:0;-webkit-box-shadow:none;box-shadow:none}.navbar-nav .open .dropdown-menu>li>a,.navbar-nav .open .dropdown-menu .dropdown-header{padding:5px 15px 5px 25px}.navbar-nav .open .dropdown-menu>li>a{line-height:20px}.navbar-nav .open .dropdown-menu>li>a:hover,.navbar-nav .open .dropdown-menu>li>a:focus{background-image:none}}@media (min-width:768px){.navbar-nav{float:left;margin:0}.navbar-nav>li{float:left}.navbar-nav>li>a{padding-top:15px;padding-bottom:15px}.navbar-nav.navbar-right:last-child{margin-right:-15px}}@media (min-width:768px){.navbar-left{float:left!important}.navbar-right{float:right!important}}.navbar-form{padding:10px 15px;margin-top:8px;margin-right:-15px;margin-bottom:8px;margin-left:-15px;border-top:1px solid transparent;border-bottom:1px solid transparent;-webkit-box-shadow:inset 0 1px 0 rgba(255,255,255,.1),0 1px 0 rgba(255,255,255,.1);box-shadow:inset 0 1px 0 rgba(255,255,255,.1),0 1px 0 rgba(255,255,255,.1)}@media (min-width:768px){.navbar-form .form-group{display:inline-block;margin-bottom:0;vertical-align:middle}.navbar-form .form-control{display:inline-block;width:auto;vertical-align:middle}.navbar-form .input-group{display:inline-table;vertical-align:middle}.navbar-form .input-group .input-group-addon,.navbar-form .input-group .input-group-btn,.navbar-form .input-group .form-control{width:auto}.navbar-form .input-group>.form-control{width:100%}.navbar-form .control-label{margin-bottom:0;vertical-align:middle}.navbar-form .radio,.navbar-form .checkbox{display:inline-block;margin-top:0;margin-bottom:0;vertical-align:middle}.navbar-form .radio label,.navbar-form .checkbox label{padding-left:0}.navbar-form .radio input[type=radio],.navbar-form .checkbox input[type=checkbox]{position:relative;margin-left:0}.navbar-form .has-feedback .form-control-feedback{top:0}}@media (max-width:767px){.navbar-form .form-group{margin-bottom:5px}}@media (min-width:768px){.navbar-form{width:auto;padding-top:0;padding-bottom:0;margin-right:0;margin-left:0;border:0;-webkit-box-shadow:none;box-shadow:none}.navbar-form.navbar-right:last-child{margin-right:-15px}}.navbar-nav>li>.dropdown-menu{margin-top:0;border-top-left-radius:0;border-top-right-radius:0}.navbar-fixed-bottom .navbar-nav>li>.dropdown-menu{border-bottom-right-radius:0;border-bottom-left-radius:0}.navbar-btn{margin-top:8px;margin-bottom:8px}.navbar-btn.btn-sm{margin-top:10px;margin-bottom:10px}.navbar-btn.btn-xs{margin-top:14px;margin-bottom:14px}.navbar-text{margin-top:15px;margin-bottom:15px}@media (min-width:768px){.navbar-text{float:left;margin-right:15px;margin-left:15px}.navbar-text.navbar-right:last-child{margin-right:0}}.navbar-default{background-color:#f8f8f8;border-color:#e7e7e7}.navbar-default .navbar-brand{color:#777}.navbar-default .navbar-brand:hover,.navbar-default .navbar-brand:focus{color:#5e5e5e;background-color:transparent}.navbar-default .navbar-text{color:#777}.navbar-default .navbar-nav>li>a{color:#777}.navbar-default .navbar-nav>li>a:hover,.navbar-default .navbar-nav>li>a:focus{color:#333;background-color:transparent}.navbar-default .navbar-nav>.active>a,.navbar-default .navbar-nav>.active>a:hover,.navbar-default .navbar-nav>.active>a:focus{color:#555;background-color:#e7e7e7}.navbar-default .navbar-nav>.disabled>a,.navbar-default .navbar-nav>.disabled>a:hover,.navbar-default .navbar-nav>.disabled>a:focus{color:#ccc;background-color:transparent}.navbar-default .navbar-toggle{border-color:#ddd}.navbar-default .navbar-toggle:hover,.navbar-default .navbar-toggle:focus{background-color:#ddd}.navbar-default .navbar-toggle .icon-bar{background-color:#888}.navbar-default .navbar-collapse,.navbar-default .navbar-form{border-color:#e7e7e7}.navbar-default .navbar-nav>.open>a,.navbar-default .navbar-nav>.open>a:hover,.navbar-default .navbar-nav>.open>a:focus{color:#555;background-color:#e7e7e7}@media (max-width:767px){.navbar-default .navbar-nav .open .dropdown-menu>li>a{color:#777}.navbar-default .navbar-nav .open .dropdown-menu>li>a:hover,.navbar-default .navbar-nav .open .dropdown-menu>li>a:focus{color:#333;background-color:transparent}.navbar-default .navbar-nav .open .dropdown-menu>.active>a,.navbar-default .navbar-nav .open .dropdown-menu>.active>a:hover,.navbar-default .navbar-nav .open .dropdown-menu>.active>a:focus{color:#555;background-color:#e7e7e7}.navbar-default .navbar-nav .open .dropdown-menu>.disabled>a,.navbar-default .navbar-nav .open .dropdown-menu>.disabled>a:hover,.navbar-default .navbar-nav .open .dropdown-menu>.disabled>a:focus{color:#ccc;background-color:transparent}}.navbar-default .navbar-link{color:#777}.navbar-default .navbar-link:hover{color:#333}.navbar-default .btn-link{color:#777}.navbar-default .btn-link:hover,.navbar-default .btn-link:focus{color:#333}.navbar-default .btn-link[disabled]:hover,fieldset[disabled] .navbar-default .btn-link:hover,.navbar-default .btn-link[disabled]:focus,fieldset[disabled] .navbar-default .btn-link:focus{color:#ccc}.navbar-inverse{background-color:#222;border-color:#080808}.navbar-inverse .navbar-brand{color:#777}.navbar-inverse .navbar-brand:hover,.navbar-inverse .navbar-brand:focus{color:#fff;background-color:transparent}.navbar-inverse .navbar-text{color:#777}.navbar-inverse .navbar-nav>li>a{color:#777}.navbar-inverse .navbar-nav>li>a:hover,.navbar-inverse .navbar-nav>li>a:focus{color:#fff;background-color:transparent}.navbar-inverse .navbar-nav>.active>a,.navbar-inverse .navbar-nav>.active>a:hover,.navbar-inverse .navbar-nav>.active>a:focus{color:#fff;background-color:#080808}.navbar-inverse .navbar-nav>.disabled>a,.navbar-inverse .navbar-nav>.disabled>a:hover,.navbar-inverse .navbar-nav>.disabled>a:focus{color:#444;background-color:transparent}.navbar-inverse .navbar-toggle{border-color:#333}.navbar-inverse .navbar-toggle:hover,.navbar-inverse .navbar-toggle:focus{background-color:#333}.navbar-inverse .navbar-toggle .icon-bar{background-color:#fff}.navbar-inverse .navbar-collapse,.navbar-inverse .navbar-form{border-color:#101010}.navbar-inverse .navbar-nav>.open>a,.navbar-inverse .navbar-nav>.open>a:hover,.navbar-inverse .navbar-nav>.open>a:focus{color:#fff;background-color:#080808}@media (max-width:767px){.navbar-inverse .navbar-nav .open .dropdown-menu>.dropdown-header{border-color:#080808}.navbar-inverse .navbar-nav .open .dropdown-menu .divider{background-color:#080808}.navbar-inverse .navbar-nav .open .dropdown-menu>li>a{color:#777}.navbar-inverse .navbar-nav .open .dropdown-menu>li>a:hover,.navbar-inverse .navbar-nav .open .dropdown-menu>li>a:focus{color:#fff;background-color:transparent}.navbar-inverse .navbar-nav .open .dropdown-menu>.active>a,.navbar-inverse .navbar-nav .open .dropdown-menu>.active>a:hover,.navbar-inverse .navbar-nav .open .dropdown-menu>.active>a:focus{color:#fff;background-color:#080808}.navbar-inverse .navbar-nav .open .dropdown-menu>.disabled>a,.navbar-inverse .navbar-nav .open .dropdown-menu>.disabled>a:hover,.navbar-inverse .navbar-nav .open .dropdown-menu>.disabled>a:focus{color:#444;background-color:transparent}}.navbar-inverse .navbar-link{color:#777}.navbar-inverse .navbar-link:hover{color:#fff}.navbar-inverse .btn-link{color:#777}.navbar-inverse .btn-link:hover,.navbar-inverse .btn-link:focus{color:#fff}.navbar-inverse .btn-link[disabled]:hover,fieldset[disabled] .navbar-inverse .btn-link:hover,.navbar-inverse .btn-link[disabled]:focus,fieldset[disabled] .navbar-inverse .btn-link:focus{color:#444}.breadcrumb{padding:8px 15px;margin-bottom:20px;list-style:none;background-color:#f5f5f5;border-radius:4px}.breadcrumb>li{display:inline-block}.breadcrumb>li+li:before{padding:0 5px;color:#ccc;content:"/\00a0"}.breadcrumb>.active{color:#777}.pagination{display:inline-block;padding-left:0;margin:20px 0;border-radius:4px}.pagination>li{display:inline}.pagination>li>a,.pagination>li>span{position:relative;float:left;padding:6px 12px;margin-left:-1px;line-height:1.42857143;color:#428bca;text-decoration:none;background-color:#fff;border:1px solid #ddd}.pagination>li:first-child>a,.pagination>li:first-child>span{margin-left:0;border-top-left-radius:4px;border-bottom-left-radius:4px}.pagination>li:last-child>a,.pagination>li:last-child>span{border-top-right-radius:4px;border-bottom-right-radius:4px}.pagination>li>a:hover,.pagination>li>span:hover,.pagination>li>a:focus,.pagination>li>span:focus{color:#2a6496;background-color:#eee;border-color:#ddd}.pagination>.active>a,.pagination>.active>span,.pagination>.active>a:hover,.pagination>.active>span:hover,.pagination>.active>a:focus,.pagination>.active>span:focus{z-index:2;color:#fff;cursor:default;background-color:#428bca;border-color:#428bca}.pagination>.disabled>span,.pagination>.disabled>span:hover,.pagination>.disabled>span:focus,.pagination>.disabled>a,.pagination>.disabled>a:hover,.pagination>.disabled>a:focus{color:#777;cursor:not-allowed;background-color:#fff;border-color:#ddd}.pagination-lg>li>a,.pagination-lg>li>span{padding:10px 16px;font-size:18px}.pagination-lg>li:first-child>a,.pagination-lg>li:first-child>span{border-top-left-radius:6px;border-bottom-left-radius:6px}.pagination-lg>li:last-child>a,.pagination-lg>li:last-child>span{border-top-right-radius:6px;border-bottom-right-radius:6px}.pagination-sm>li>a,.pagination-sm>li>span{padding:5px 10px;font-size:12px}.pagination-sm>li:first-child>a,.pagination-sm>li:first-child>span{border-top-left-radius:3px;border-bottom-left-radius:3px}.pagination-sm>li:last-child>a,.pagination-sm>li:last-child>span{border-top-right-radius:3px;border-bottom-right-radius:3px}.pager{padding-left:0;margin:20px 0;text-align:center;list-style:none}.pager li{display:inline}.pager li>a,.pager li>span{display:inline-block;padding:5px 14px;background-color:#fff;border:1px solid #ddd;border-radius:15px}.pager li>a:hover,.pager li>a:focus{text-decoration:none;background-color:#eee}.pager .next>a,.pager .next>span{float:right}.pager .previous>a,.pager .previous>span{float:left}.pager .disabled>a,.pager .disabled>a:hover,.pager .disabled>a:focus,.pager .disabled>span{color:#777;cursor:not-allowed;background-color:#fff}.label{display:inline;padding:.2em .6em .3em;font-size:75%;font-weight:700;line-height:1;color:#fff;text-align:center;white-space:nowrap;vertical-align:baseline;border-radius:.25em}a.label:hover,a.label:focus{color:#fff;text-decoration:none;cursor:pointer}.label:empty{display:none}.btn .label{position:relative;top:-1px}.label-default{background-color:#777}.label-default[href]:hover,.label-default[href]:focus{background-color:#5e5e5e}.label-primary{background-color:#428bca}.label-primary[href]:hover,.label-primary[href]:focus{background-color:#3071a9}.label-success{background-color:#5cb85c}.label-success[href]:hover,.label-success[href]:focus{background-color:#449d44}.label-info{background-color:#5bc0de}.label-info[href]:hover,.label-info[href]:focus{background-color:#31b0d5}.label-warning{background-color:#f0ad4e}.label-warning[href]:hover,.label-warning[href]:focus{background-color:#ec971f}.label-danger{background-color:#d9534f}.label-danger[href]:hover,.label-danger[href]:focus{background-color:#c9302c}.badge{display:inline-block;min-width:10px;padding:3px 7px;font-size:12px;font-weight:700;line-height:1;color:#fff;text-align:center;white-space:nowrap;vertical-align:baseline;background-color:#777;border-radius:10px}.badge:empty{display:none}.btn .badge{position:relative;top:-1px}.btn-xs .badge{top:0;padding:1px 5px}a.badge:hover,a.badge:focus{color:#fff;text-decoration:none;cursor:pointer}a.list-group-item.active>.badge,.nav-pills>.active>a>.badge{color:#428bca;background-color:#fff}.nav-pills>li>a>.badge{margin-left:3px}.jumbotron{padding:30px;margin-bottom:30px;color:inherit;background-color:#eee}.jumbotron h1,.jumbotron .h1{color:inherit}.jumbotron p{margin-bottom:15px;font-size:21px;font-weight:200}.jumbotron>hr{border-top-color:#d5d5d5}.container .jumbotron{border-radius:6px}.jumbotron .container{max-width:100%}@media screen and (min-width:768px){.jumbotron{padding-top:48px;padding-bottom:48px}.container .jumbotron{padding-right:60px;padding-left:60px}.jumbotron h1,.jumbotron .h1{font-size:63px}}.thumbnail{display:block;padding:4px;margin-bottom:20px;line-height:1.42857143;background-color:#fff;border:1px solid #ddd;border-radius:4px;-webkit-transition:all .2s ease-in-out;-o-transition:all .2s ease-in-out;transition:all .2s ease-in-out}.thumbnail>img,.thumbnail a>img{margin-right:auto;margin-left:auto}a.thumbnail:hover,a.thumbnail:focus,a.thumbnail.active{border-color:#428bca}.thumbnail .caption{padding:9px;color:#333}.alert{padding:15px;margin-bottom:20px;border:1px solid transparent;border-radius:4px}.alert h4{margin-top:0;color:inherit}.alert .alert-link{font-weight:700}.alert>p,.alert>ul{margin-bottom:0}.alert>p+p{margin-top:5px}.alert-dismissable,.alert-dismissible{padding-right:35px}.alert-dismissable .close,.alert-dismissible .close{position:relative;top:-2px;right:-21px;color:inherit}.alert-success{color:#3c763d;background-color:#dff0d8;border-color:#d6e9c6}.alert-success hr{border-top-color:#c9e2b3}.alert-success .alert-link{color:#2b542c}.alert-info{color:#31708f;background-color:#d9edf7;border-color:#bce8f1}.alert-info hr{border-top-color:#a6e1ec}.alert-info .alert-link{color:#245269}.alert-warning{color:#8a6d3b;background-color:#fcf8e3;border-color:#faebcc}.alert-warning hr{border-top-color:#f7e1b5}.alert-warning .alert-link{color:#66512c}.alert-danger{color:#a94442;background-color:#f2dede;border-color:#ebccd1}.alert-danger hr{border-top-color:#e4b9c0}.alert-danger .alert-link{color:#843534}@-webkit-keyframes progress-bar-stripes{from{background-position:40px 0}to{background-position:0 0}}@-o-keyframes progress-bar-stripes{from{background-position:40px 0}to{background-position:0 0}}@keyframes progress-bar-stripes{from{background-position:40px 0}to{background-position:0 0}}.progress{height:20px;margin-bottom:20px;overflow:hidden;background-color:#f5f5f5;border-radius:4px;-webkit-box-shadow:inset 0 1px 2px rgba(0,0,0,.1);box-shadow:inset 0 1px 2px rgba(0,0,0,.1)}.progress-bar{float:left;width:0;height:100%;font-size:12px;line-height:20px;color:#fff;text-align:center;background-color:#428bca;-webkit-box-shadow:inset 0 -1px 0 rgba(0,0,0,.15);box-shadow:inset 0 -1px 0 rgba(0,0,0,.15);-webkit-transition:width .6s ease;-o-transition:width .6s ease;transition:width .6s ease}.progress-striped .progress-bar,.progress-bar-striped{background-image:-webkit-linear-gradient(45deg,rgba(255,255,255,.15) 25%,transparent 25%,transparent 50%,rgba(255,255,255,.15) 50%,rgba(255,255,255,.15) 75%,transparent 75%,transparent);background-image:-o-linear-gradient(45deg,rgba(255,255,255,.15) 25%,transparent 25%,transparent 50%,rgba(255,255,255,.15) 50%,rgba(255,255,255,.15) 75%,transparent 75%,transparent);background-image:linear-gradient(45deg,rgba(255,255,255,.15) 25%,transparent 25%,transparent 50%,rgba(255,255,255,.15) 50%,rgba(255,255,255,.15) 75%,transparent 75%,transparent);-webkit-background-size:40px 40px;background-size:40px 40px}.progress.active .progress-bar,.progress-bar.active{-webkit-animation:progress-bar-stripes 2s linear infinite;-o-animation:progress-bar-stripes 2s linear infinite;animation:progress-bar-stripes 2s linear infinite}.progress-bar[aria-valuenow="1"],.progress-bar[aria-valuenow="2"]{min-width:30px}.progress-bar[aria-valuenow="0"]{min-width:30px;color:#777;background-color:transparent;background-image:none;-webkit-box-shadow:none;box-shadow:none}.progress-bar-success{background-color:#5cb85c}.progress-striped .progress-bar-success{background-image:-webkit-linear-gradient(45deg,rgba(255,255,255,.15) 25%,transparent 25%,transparent 50%,rgba(255,255,255,.15) 50%,rgba(255,255,255,.15) 75%,transparent 75%,transparent);background-image:-o-linear-gradient(45deg,rgba(255,255,255,.15) 25%,transparent 25%,transparent 50%,rgba(255,255,255,.15) 50%,rgba(255,255,255,.15) 75%,transparent 75%,transparent);background-image:linear-gradient(45deg,rgba(255,255,255,.15) 25%,transparent 25%,transparent 50%,rgba(255,255,255,.15) 50%,rgba(255,255,255,.15) 75%,transparent 75%,transparent)}.progress-bar-info{background-color:#5bc0de}.progress-striped .progress-bar-info{background-image:-webkit-linear-gradient(45deg,rgba(255,255,255,.15) 25%,transparent 25%,transparent 50%,rgba(255,255,255,.15) 50%,rgba(255,255,255,.15) 75%,transparent 75%,transparent);background-image:-o-linear-gradient(45deg,rgba(255,255,255,.15) 25%,transparent 25%,transparent 50%,rgba(255,255,255,.15) 50%,rgba(255,255,255,.15) 75%,transparent 75%,transparent);background-image:linear-gradient(45deg,rgba(255,255,255,.15) 25%,transparent 25%,transparent 50%,rgba(255,255,255,.15) 50%,rgba(255,255,255,.15) 75%,transparent 75%,transparent)}.progress-bar-warning{background-color:#f0ad4e}.progress-striped .progress-bar-warning{background-image:-webkit-linear-gradient(45deg,rgba(255,255,255,.15) 25%,transparent 25%,transparent 50%,rgba(255,255,255,.15) 50%,rgba(255,255,255,.15) 75%,transparent 75%,transparent);background-image:-o-linear-gradient(45deg,rgba(255,255,255,.15) 25%,transparent 25%,transparent 50%,rgba(255,255,255,.15) 50%,rgba(255,255,255,.15) 75%,transparent 75%,transparent);background-image:linear-gradient(45deg,rgba(255,255,255,.15) 25%,transparent 25%,transparent 50%,rgba(255,255,255,.15) 50%,rgba(255,255,255,.15) 75%,transparent 75%,transparent)}.progress-bar-danger{background-color:#d9534f}.progress-striped .progress-bar-danger{background-image:-webkit-linear-gradient(45deg,rgba(255,255,255,.15) 25%,transparent 25%,transparent 50%,rgba(255,255,255,.15) 50%,rgba(255,255,255,.15) 75%,transparent 75%,transparent);background-image:-o-linear-gradient(45deg,rgba(255,255,255,.15) 25%,transparent 25%,transparent 50%,rgba(255,255,255,.15) 50%,rgba(255,255,255,.15) 75%,transparent 75%,transparent);background-image:linear-gradient(45deg,rgba(255,255,255,.15) 25%,transparent 25%,transparent 50%,rgba(255,255,255,.15) 50%,rgba(255,255,255,.15) 75%,transparent 75%,transparent)}.media,.media-body{overflow:hidden;zoom:1}.media,.media .media{margin-top:15px}.media:first-child{margin-top:0}.media-object{display:block}.media-heading{margin:0 0 5px}.media>.pull-left{margin-right:10px}.media>.pull-right{margin-left:10px}.media-list{padding-left:0;list-style:none}.list-group{padding-left:0;margin-bottom:20px}.list-group-item{position:relative;display:block;padding:10px 15px;margin-bottom:-1px;background-color:#fff;border:1px solid #ddd}.list-group-item:first-child{border-top-left-radius:4px;border-top-right-radius:4px}.list-group-item:last-child{margin-bottom:0;border-bottom-right-radius:4px;border-bottom-left-radius:4px}.list-group-item>.badge{float:right}.list-group-item>.badge+.badge{margin-right:5px}a.list-group-item{color:#555}a.list-group-item .list-group-item-heading{color:#333}a.list-group-item:hover,a.list-group-item:focus{color:#555;text-decoration:none;background-color:#f5f5f5}.list-group-item.disabled,.list-group-item.disabled:hover,.list-group-item.disabled:focus{color:#777;background-color:#eee}.list-group-item.disabled .list-group-item-heading,.list-group-item.disabled:hover .list-group-item-heading,.list-group-item.disabled:focus .list-group-item-heading{color:inherit}.list-group-item.disabled .list-group-item-text,.list-group-item.disabled:hover .list-group-item-text,.list-group-item.disabled:focus .list-group-item-text{color:#777}.list-group-item.active,.list-group-item.active:hover,.list-group-item.active:focus{z-index:2;color:#fff;background-color:#428bca;border-color:#428bca}.list-group-item.active .list-group-item-heading,.list-group-item.active:hover .list-group-item-heading,.list-group-item.active:focus .list-group-item-heading,.list-group-item.active .list-group-item-heading>small,.list-group-item.active:hover .list-group-item-heading>small,.list-group-item.active:focus .list-group-item-heading>small,.list-group-item.active .list-group-item-heading>.small,.list-group-item.active:hover .list-group-item-heading>.small,.list-group-item.active:focus .list-group-item-heading>.small{color:inherit}.list-group-item.active .list-group-item-text,.list-group-item.active:hover .list-group-item-text,.list-group-item.active:focus .list-group-item-text{color:#e1edf7}.list-group-item-success{color:#3c763d;background-color:#dff0d8}a.list-group-item-success{color:#3c763d}a.list-group-item-success .list-group-item-heading{color:inherit}a.list-group-item-success:hover,a.list-group-item-success:focus{color:#3c763d;background-color:#d0e9c6}a.list-group-item-success.active,a.list-group-item-success.active:hover,a.list-group-item-success.active:focus{color:#fff;background-color:#3c763d;border-color:#3c763d}.list-group-item-info{color:#31708f;background-color:#d9edf7}a.list-group-item-info{color:#31708f}a.list-group-item-info .list-group-item-heading{color:inherit}a.list-group-item-info:hover,a.list-group-item-info:focus{color:#31708f;background-color:#c4e3f3}a.list-group-item-info.active,a.list-group-item-info.active:hover,a.list-group-item-info.active:focus{color:#fff;background-color:#31708f;border-color:#31708f}.list-group-item-warning{color:#8a6d3b;background-color:#fcf8e3}a.list-group-item-warning{color:#8a6d3b}a.list-group-item-warning .list-group-item-heading{color:inherit}a.list-group-item-warning:hover,a.list-group-item-warning:focus{color:#8a6d3b;background-color:#faf2cc}a.list-group-item-warning.active,a.list-group-item-warning.active:hover,a.list-group-item-warning.active:focus{color:#fff;background-color:#8a6d3b;border-color:#8a6d3b}.list-group-item-danger{color:#a94442;background-color:#f2dede}a.list-group-item-danger{color:#a94442}a.list-group-item-danger .list-group-item-heading{color:inherit}a.list-group-item-danger:hover,a.list-group-item-danger:focus{color:#a94442;background-color:#ebcccc}a.list-group-item-danger.active,a.list-group-item-danger.active:hover,a.list-group-item-danger.active:focus{color:#fff;background-color:#a94442;border-color:#a94442}.list-group-item-heading{margin-top:0;margin-bottom:5px}.list-group-item-text{margin-bottom:0;line-height:1.3}.panel{margin-bottom:20px;background-color:#fff;border:1px solid transparent;border-radius:4px;-webkit-box-shadow:0 1px 1px rgba(0,0,0,.05);box-shadow:0 1px 1px rgba(0,0,0,.05)}.panel-body{padding:15px}.panel-heading{padding:10px 15px;border-bottom:1px solid transparent;border-top-left-radius:3px;border-top-right-radius:3px}.panel-heading>.dropdown .dropdown-toggle{color:inherit}.panel-title{margin-top:0;margin-bottom:0;font-size:16px;color:inherit}.panel-title>a{color:inherit}.panel-footer{padding:10px 15px;background-color:#f5f5f5;border-top:1px solid #ddd;border-bottom-right-radius:3px;border-bottom-left-radius:3px}.panel>.list-group{margin-bottom:0}.panel>.list-group .list-group-item{border-width:1px 0;border-radius:0}.panel>.list-group:first-child .list-group-item:first-child{border-top:0;border-top-left-radius:3px;border-top-right-radius:3px}.panel>.list-group:last-child .list-group-item:last-child{border-bottom:0;border-bottom-right-radius:3px;border-bottom-left-radius:3px}.panel-heading+.list-group .list-group-item:first-child{border-top-width:0}.list-group+.panel-footer{border-top-width:0}.panel>.table,.panel>.table-responsive>.table,.panel>.panel-collapse>.table{margin-bottom:0}.panel>.table:first-child,.panel>.table-responsive:first-child>.table:first-child{border-top-left-radius:3px;border-top-right-radius:3px}.panel>.table:first-child>thead:first-child>tr:first-child td:first-child,.panel>.table-responsive:first-child>.table:first-child>thead:first-child>tr:first-child td:first-child,.panel>.table:first-child>tbody:first-child>tr:first-child td:first-child,.panel>.table-responsive:first-child>.table:first-child>tbody:first-child>tr:first-child td:first-child,.panel>.table:first-child>thead:first-child>tr:first-child th:first-child,.panel>.table-responsive:first-child>.table:first-child>thead:first-child>tr:first-child th:first-child,.panel>.table:first-child>tbody:first-child>tr:first-child th:first-child,.panel>.table-responsive:first-child>.table:first-child>tbody:first-child>tr:first-child th:first-child{border-top-left-radius:3px}.panel>.table:first-child>thead:first-child>tr:first-child td:last-child,.panel>.table-responsive:first-child>.table:first-child>thead:first-child>tr:first-child td:last-child,.panel>.table:first-child>tbody:first-child>tr:first-child td:last-child,.panel>.table-responsive:first-child>.table:first-child>tbody:first-child>tr:first-child td:last-child,.panel>.table:first-child>thead:first-child>tr:first-child th:last-child,.panel>.table-responsive:first-child>.table:first-child>thead:first-child>tr:first-child th:last-child,.panel>.table:first-child>tbody:first-child>tr:first-child th:last-child,.panel>.table-responsive:first-child>.table:first-child>tbody:first-child>tr:first-child th:last-child{border-top-right-radius:3px}.panel>.table:last-child,.panel>.table-responsive:last-child>.table:last-child{border-bottom-right-radius:3px;border-bottom-left-radius:3px}.panel>.table:last-child>tbody:last-child>tr:last-child td:first-child,.panel>.table-responsive:last-child>.table:last-child>tbody:last-child>tr:last-child td:first-child,.panel>.table:last-child>tfoot:last-child>tr:last-child td:first-child,.panel>.table-responsive:last-child>.table:last-child>tfoot:last-child>tr:last-child td:first-child,.panel>.table:last-child>tbody:last-child>tr:last-child th:first-child,.panel>.table-responsive:last-child>.table:last-child>tbody:last-child>tr:last-child th:first-child,.panel>.table:last-child>tfoot:last-child>tr:last-child th:first-child,.panel>.table-responsive:last-child>.table:last-child>tfoot:last-child>tr:last-child th:first-child{border-bottom-left-radius:3px}.panel>.table:last-child>tbody:last-child>tr:last-child td:last-child,.panel>.table-responsive:last-child>.table:last-child>tbody:last-child>tr:last-child td:last-child,.panel>.table:last-child>tfoot:last-child>tr:last-child td:last-child,.panel>.table-responsive:last-child>.table:last-child>tfoot:last-child>tr:last-child td:last-child,.panel>.table:last-child>tbody:last-child>tr:last-child th:last-child,.panel>.table-responsive:last-child>.table:last-child>tbody:last-child>tr:last-child th:last-child,.panel>.table:last-child>tfoot:last-child>tr:last-child th:last-child,.panel>.table-responsive:last-child>.table:last-child>tfoot:last-child>tr:last-child th:last-child{border-bottom-right-radius:3px}.panel>.panel-body+.table,.panel>.panel-body+.table-responsive{border-top:1px solid #ddd}.panel>.table>tbody:first-child>tr:first-child th,.panel>.table>tbody:first-child>tr:first-child td{border-top:0}.panel>.table-bordered,.panel>.table-responsive>.table-bordered{border:0}.panel>.table-bordered>thead>tr>th:first-child,.panel>.table-responsive>.table-bordered>thead>tr>th:first-child,.panel>.table-bordered>tbody>tr>th:first-child,.panel>.table-responsive>.table-bordered>tbody>tr>th:first-child,.panel>.table-bordered>tfoot>tr>th:first-child,.panel>.table-responsive>.table-bordered>tfoot>tr>th:first-child,.panel>.table-bordered>thead>tr>td:first-child,.panel>.table-responsive>.table-bordered>thead>tr>td:first-child,.panel>.table-bordered>tbody>tr>td:first-child,.panel>.table-responsive>.table-bordered>tbody>tr>td:first-child,.panel>.table-bordered>tfoot>tr>td:first-child,.panel>.table-responsive>.table-bordered>tfoot>tr>td:first-child{border-left:0}.panel>.table-bordered>thead>tr>th:last-child,.panel>.table-responsive>.table-bordered>thead>tr>th:last-child,.panel>.table-bordered>tbody>tr>th:last-child,.panel>.table-responsive>.table-bordered>tbody>tr>th:last-child,.panel>.table-bordered>tfoot>tr>th:last-child,.panel>.table-responsive>.table-bordered>tfoot>tr>th:last-child,.panel>.table-bordered>thead>tr>td:last-child,.panel>.table-responsive>.table-bordered>thead>tr>td:last-child,.panel>.table-bordered>tbody>tr>td:last-child,.panel>.table-responsive>.table-bordered>tbody>tr>td:last-child,.panel>.table-bordered>tfoot>tr>td:last-child,.panel>.table-responsive>.table-bordered>tfoot>tr>td:last-child{border-right:0}.panel>.table-bordered>thead>tr:first-child>td,.panel>.table-responsive>.table-bordered>thead>tr:first-child>td,.panel>.table-bordered>tbody>tr:first-child>td,.panel>.table-responsive>.table-bordered>tbody>tr:first-child>td,.panel>.table-bordered>thead>tr:first-child>th,.panel>.table-responsive>.table-bordered>thead>tr:first-child>th,.panel>.table-bordered>tbody>tr:first-child>th,.panel>.table-responsive>.table-bordered>tbody>tr:first-child>th{border-bottom:0}.panel>.table-bordered>tbody>tr:last-child>td,.panel>.table-responsive>.table-bordered>tbody>tr:last-child>td,.panel>.table-bordered>tfoot>tr:last-child>td,.panel>.table-responsive>.table-bordered>tfoot>tr:last-child>td,.panel>.table-bordered>tbody>tr:last-child>th,.panel>.table-responsive>.table-bordered>tbody>tr:last-child>th,.panel>.table-bordered>tfoot>tr:last-child>th,.panel>.table-responsive>.table-bordered>tfoot>tr:last-child>th{border-bottom:0}.panel>.table-responsive{margin-bottom:0;border:0}.panel-group{margin-bottom:20px}.panel-group .panel{margin-bottom:0;border-radius:4px}.panel-group .panel+.panel{margin-top:5px}.panel-group .panel-heading{border-bottom:0}.panel-group .panel-heading+.panel-collapse>.panel-body{border-top:1px solid #ddd}.panel-group .panel-footer{border-top:0}.panel-group .panel-footer+.panel-collapse .panel-body{border-bottom:1px solid #ddd}.panel-default{border-color:#ddd}.panel-default>.panel-heading{color:#333;background-color:#f5f5f5;border-color:#ddd}.panel-default>.panel-heading+.panel-collapse>.panel-body{border-top-color:#ddd}.panel-default>.panel-heading .badge{color:#f5f5f5;background-color:#333}.panel-default>.panel-footer+.panel-collapse>.panel-body{border-bottom-color:#ddd}.panel-primary{border-color:#428bca}.panel-primary>.panel-heading{color:#fff;background-color:#428bca;border-color:#428bca}.panel-primary>.panel-heading+.panel-collapse>.panel-body{border-top-color:#428bca}.panel-primary>.panel-heading .badge{color:#428bca;background-color:#fff}.panel-primary>.panel-footer+.panel-collapse>.panel-body{border-bottom-color:#428bca}.panel-success{border-color:#d6e9c6}.panel-success>.panel-heading{color:#3c763d;background-color:#dff0d8;border-color:#d6e9c6}.panel-success>.panel-heading+.panel-collapse>.panel-body{border-top-color:#d6e9c6}.panel-success>.panel-heading .badge{color:#dff0d8;background-color:#3c763d}.panel-success>.panel-footer+.panel-collapse>.panel-body{border-bottom-color:#d6e9c6}.panel-info{border-color:#bce8f1}.panel-info>.panel-heading{color:#31708f;background-color:#d9edf7;border-color:#bce8f1}.panel-info>.panel-heading+.panel-collapse>.panel-body{border-top-color:#bce8f1}.panel-info>.panel-heading .badge{color:#d9edf7;background-color:#31708f}.panel-info>.panel-footer+.panel-collapse>.panel-body{border-bottom-color:#bce8f1}.panel-warning{border-color:#faebcc}.panel-warning>.panel-heading{color:#8a6d3b;background-color:#fcf8e3;border-color:#faebcc}.panel-warning>.panel-heading+.panel-collapse>.panel-body{border-top-color:#faebcc}.panel-warning>.panel-heading .badge{color:#fcf8e3;background-color:#8a6d3b}.panel-warning>.panel-footer+.panel-collapse>.panel-body{border-bottom-color:#faebcc}.panel-danger{border-color:#ebccd1}.panel-danger>.panel-heading{color:#a94442;background-color:#f2dede;border-color:#ebccd1}.panel-danger>.panel-heading+.panel-collapse>.panel-body{border-top-color:#ebccd1}.panel-danger>.panel-heading .badge{color:#f2dede;background-color:#a94442}.panel-danger>.panel-footer+.panel-collapse>.panel-body{border-bottom-color:#ebccd1}.embed-responsive{position:relative;display:block;height:0;padding:0;overflow:hidden}.embed-responsive .embed-responsive-item,.embed-responsive iframe,.embed-responsive embed,.embed-responsive object{position:absolute;top:0;bottom:0;left:0;width:100%;height:100%;border:0}.embed-responsive.embed-responsive-16by9{padding-bottom:56.25%}.embed-responsive.embed-responsive-4by3{padding-bottom:75%}.well{min-height:20px;padding:19px;margin-bottom:20px;background-color:#f5f5f5;border:1px solid #e3e3e3;border-radius:4px;-webkit-box-shadow:inset 0 1px 1px rgba(0,0,0,.05);box-shadow:inset 0 1px 1px rgba(0,0,0,.05)}.well blockquote{border-color:#ddd;border-color:rgba(0,0,0,.15)}.well-lg{padding:24px;border-radius:6px}.well-sm{padding:9px;border-radius:3px}.close{float:right;font-size:21px;font-weight:700;line-height:1;color:#000;text-shadow:0 1px 0 #fff;filter:alpha(opacity=20);opacity:.2}.close:hover,.close:focus{color:#000;text-decoration:none;cursor:pointer;filter:alpha(opacity=50);opacity:.5}button.close{-webkit-appearance:none;padding:0;cursor:pointer;background:0 0;border:0}.modal-open{overflow:hidden}.modal{position:fixed;top:0;right:0;bottom:0;left:0;z-index:1050;display:none;overflow:hidden;-webkit-overflow-scrolling:touch;outline:0}.modal.fade .modal-dialog{-webkit-transition:-webkit-transform .3s ease-out;-o-transition:-o-transform .3s ease-out;transition:transform .3s ease-out;-webkit-transform:translate3d(0,-25%,0);-o-transform:translate3d(0,-25%,0);transform:translate3d(0,-25%,0)}.modal.in .modal-dialog{-webkit-transform:translate3d(0,0,0);-o-transform:translate3d(0,0,0);transform:translate3d(0,0,0)}.modal-open .modal{overflow-x:hidden;overflow-y:auto}.modal-dialog{position:relative;width:auto;margin:10px}.modal-content{position:relative;background-color:#fff;-webkit-background-clip:padding-box;background-clip:padding-box;border:1px solid #999;border:1px solid rgba(0,0,0,.2);border-radius:6px;outline:0;-webkit-box-shadow:0 3px 9px rgba(0,0,0,.5);box-shadow:0 3px 9px rgba(0,0,0,.5)}.modal-backdrop{position:fixed;top:0;right:0;bottom:0;left:0;z-index:1040;background-color:#000}.modal-backdrop.fade{filter:alpha(opacity=0);opacity:0}.modal-backdrop.in{filter:alpha(opacity=50);opacity:.5}.modal-header{min-height:16.43px;padding:15px;border-bottom:1px solid #e5e5e5}.modal-header .close{margin-top:-2px}.modal-title{margin:0;line-height:1.42857143}.modal-body{position:relative;padding:15px}.modal-footer{padding:15px;text-align:right;border-top:1px solid #e5e5e5}.modal-footer .btn+.btn{margin-bottom:0;margin-left:5px}.modal-footer .btn-group .btn+.btn{margin-left:-1px}.modal-footer .btn-block+.btn-block{margin-left:0}.modal-scrollbar-measure{position:absolute;top:-9999px;width:50px;height:50px;overflow:scroll}@media (min-width:768px){.modal-dialog{width:600px;margin:30px auto}.modal-content{-webkit-box-shadow:0 5px 15px rgba(0,0,0,.5);box-shadow:0 5px 15px rgba(0,0,0,.5)}.modal-sm{width:300px}}@media (min-width:992px){.modal-lg{width:900px}}.tooltip{position:absolute;z-index:1070;display:block;font-size:12px;line-height:1.4;visibility:visible;filter:alpha(opacity=0);opacity:0}.tooltip.in{filter:alpha(opacity=90);opacity:.9}.tooltip.top{padding:5px 0;margin-top:-3px}.tooltip.right{padding:0 5px;margin-left:3px}.tooltip.bottom{padding:5px 0;margin-top:3px}.tooltip.left{padding:0 5px;margin-left:-3px}.tooltip-inner{max-width:200px;padding:3px 8px;color:#fff;text-align:center;text-decoration:none;background-color:#000;border-radius:4px}.tooltip-arrow{position:absolute;width:0;height:0;border-color:transparent;border-style:solid}.tooltip.top .tooltip-arrow{bottom:0;left:50%;margin-left:-5px;border-width:5px 5px 0;border-top-color:#000}.tooltip.top-left .tooltip-arrow{bottom:0;left:5px;border-width:5px 5px 0;border-top-color:#000}.tooltip.top-right .tooltip-arrow{right:5px;bottom:0;border-width:5px 5px 0;border-top-color:#000}.tooltip.right .tooltip-arrow{top:50%;left:0;margin-top:-5px;border-width:5px 5px 5px 0;border-right-color:#000}.tooltip.left .tooltip-arrow{top:50%;right:0;margin-top:-5px;border-width:5px 0 5px 5px;border-left-color:#000}.tooltip.bottom .tooltip-arrow{top:0;left:50%;margin-left:-5px;border-width:0 5px 5px;border-bottom-color:#000}.tooltip.bottom-left .tooltip-arrow{top:0;left:5px;border-width:0 5px 5px;border-bottom-color:#000}.tooltip.bottom-right .tooltip-arrow{top:0;right:5px;border-width:0 5px 5px;border-bottom-color:#000}.popover{position:absolute;top:0;left:0;z-index:1060;display:none;max-width:276px;padding:1px;text-align:left;white-space:normal;background-color:#fff;-webkit-background-clip:padding-box;background-clip:padding-box;border:1px solid #ccc;border:1px solid rgba(0,0,0,.2);border-radius:6px;-webkit-box-shadow:0 5px 10px rgba(0,0,0,.2);box-shadow:0 5px 10px rgba(0,0,0,.2)}.popover.top{margin-top:-10px}.popover.right{margin-left:10px}.popover.bottom{margin-top:10px}.popover.left{margin-left:-10px}.popover-title{padding:8px 14px;margin:0;font-size:14px;font-weight:400;line-height:18px;background-color:#f7f7f7;border-bottom:1px solid #ebebeb;border-radius:5px 5px 0 0}.popover-content{padding:9px 14px}.popover>.arrow,.popover>.arrow:after{position:absolute;display:block;width:0;height:0;border-color:transparent;border-style:solid}.popover>.arrow{border-width:11px}.popover>.arrow:after{content:"";border-width:10px}.popover.top>.arrow{bottom:-11px;left:50%;margin-left:-11px;border-top-color:#999;border-top-color:rgba(0,0,0,.25);border-bottom-width:0}.popover.top>.arrow:after{bottom:1px;margin-left:-10px;content:" ";border-top-color:#fff;border-bottom-width:0}.popover.right>.arrow{top:50%;left:-11px;margin-top:-11px;border-right-color:#999;border-right-color:rgba(0,0,0,.25);border-left-width:0}.popover.right>.arrow:after{bottom:-10px;left:1px;content:" ";border-right-color:#fff;border-left-width:0}.popover.bottom>.arrow{top:-11px;left:50%;margin-left:-11px;border-top-width:0;border-bottom-color:#999;border-bottom-color:rgba(0,0,0,.25)}.popover.bottom>.arrow:after{top:1px;margin-left:-10px;content:" ";border-top-width:0;border-bottom-color:#fff}.popover.left>.arrow{top:50%;right:-11px;margin-top:-11px;border-right-width:0;border-left-color:#999;border-left-color:rgba(0,0,0,.25)}.popover.left>.arrow:after{right:1px;bottom:-10px;content:" ";border-right-width:0;border-left-color:#fff}.carousel{position:relative}.carousel-inner{position:relative;width:100%;overflow:hidden}.carousel-inner>.item{position:relative;display:none;-webkit-transition:.6s ease-in-out left;-o-transition:.6s ease-in-out left;transition:.6s ease-in-out left}.carousel-inner>.item>img,.carousel-inner>.item>a>img{line-height:1}.carousel-inner>.active,.carousel-inner>.next,.carousel-inner>.prev{display:block}.carousel-inner>.active{left:0}.carousel-inner>.next,.carousel-inner>.prev{position:absolute;top:0;width:100%}.carousel-inner>.next{left:100%}.carousel-inner>.prev{left:-100%}.carousel-inner>.next.left,.carousel-inner>.prev.right{left:0}.carousel-inner>.active.left{left:-100%}.carousel-inner>.active.right{left:100%}.carousel-control{position:absolute;top:0;bottom:0;left:0;width:15%;font-size:20px;color:#fff;text-align:center;text-shadow:0 1px 2px rgba(0,0,0,.6);filter:alpha(opacity=50);opacity:.5}.carousel-control.left{background-image:-webkit-linear-gradient(left,rgba(0,0,0,.5) 0,rgba(0,0,0,.0001) 100%);background-image:-o-linear-gradient(left,rgba(0,0,0,.5) 0,rgba(0,0,0,.0001) 100%);background-image:-webkit-gradient(linear,left top,right top,from(rgba(0,0,0,.5)),to(rgba(0,0,0,.0001)));background-image:linear-gradient(to right,rgba(0,0,0,.5) 0,rgba(0,0,0,.0001) 100%);filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#80000000', endColorstr='#00000000', GradientType=1);background-repeat:repeat-x}.carousel-control.right{right:0;left:auto;background-image:-webkit-linear-gradient(left,rgba(0,0,0,.0001) 0,rgba(0,0,0,.5) 100%);background-image:-o-linear-gradient(left,rgba(0,0,0,.0001) 0,rgba(0,0,0,.5) 100%);background-image:-webkit-gradient(linear,left top,right top,from(rgba(0,0,0,.0001)),to(rgba(0,0,0,.5)));background-image:linear-gradient(to right,rgba(0,0,0,.0001) 0,rgba(0,0,0,.5) 100%);filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#00000000', endColorstr='#80000000', GradientType=1);background-repeat:repeat-x}.carousel-control:hover,.carousel-control:focus{color:#fff;text-decoration:none;filter:alpha(opacity=90);outline:0;opacity:.9}.carousel-control .icon-prev,.carousel-control .icon-next,.carousel-control .glyphicon-chevron-left,.carousel-control .glyphicon-chevron-right{position:absolute;top:50%;z-index:5;display:inline-block}.carousel-control .icon-prev,.carousel-control .glyphicon-chevron-left{left:50%;margin-left:-10px}.carousel-control .icon-next,.carousel-control .glyphicon-chevron-right{right:50%;margin-right:-10px}.carousel-control .icon-prev,.carousel-control .icon-next{width:20px;height:20px;margin-top:-10px;font-family:serif}.carousel-control .icon-prev:before{content:'\2039'}.carousel-control .icon-next:before{content:'\203a'}.carousel-indicators{position:absolute;bottom:10px;left:50%;z-index:15;width:60%;padding-left:0;margin-left:-30%;text-align:center;list-style:none}.carousel-indicators li{display:inline-block;width:10px;height:10px;margin:1px;text-indent:-999px;cursor:pointer;background-color:#000 \9;background-color:rgba(0,0,0,0);border:1px solid #fff;border-radius:10px}.carousel-indicators .active{width:12px;height:12px;margin:0;background-color:#fff}.carousel-caption{position:absolute;right:15%;bottom:20px;left:15%;z-index:10;padding-top:20px;padding-bottom:20px;color:#fff;text-align:center;text-shadow:0 1px 2px rgba(0,0,0,.6)}.carousel-caption .btn{text-shadow:none}@media screen and (min-width:768px){.carousel-control .glyphicon-chevron-left,.carousel-control .glyphicon-chevron-right,.carousel-control .icon-prev,.carousel-control .icon-next{width:30px;height:30px;margin-top:-15px;font-size:30px}.carousel-control .glyphicon-chevron-left,.carousel-control .icon-prev{margin-left:-15px}.carousel-control .glyphicon-chevron-right,.carousel-control .icon-next{margin-right:-15px}.carousel-caption{right:20%;left:20%;padding-bottom:30px}.carousel-indicators{bottom:20px}}.clearfix:before,.clearfix:after,.dl-horizontal dd:before,.dl-horizontal dd:after,.container:before,.container:after,.container-fluid:before,.container-fluid:after,.row:before,.row:after,.form-horizontal .form-group:before,.form-horizontal .form-group:after,.btn-toolbar:before,.btn-toolbar:after,.btn-group-vertical>.btn-group:before,.btn-group-vertical>.btn-group:after,.nav:before,.nav:after,.navbar:before,.navbar:after,.navbar-header:before,.navbar-header:after,.navbar-collapse:before,.navbar-collapse:after,.pager:before,.pager:after,.panel-body:before,.panel-body:after,.modal-footer:before,.modal-footer:after{display:table;content:" "}.clearfix:after,.dl-horizontal dd:after,.container:after,.container-fluid:after,.row:after,.form-horizontal .form-group:after,.btn-toolbar:after,.btn-group-vertical>.btn-group:after,.nav:after,.navbar:after,.navbar-header:after,.navbar-collapse:after,.pager:after,.panel-body:after,.modal-footer:after{clear:both}.center-block{display:block;margin-right:auto;margin-left:auto}.pull-right{float:right!important}.pull-left{float:left!important}.hide{display:none!important}.show{display:block!important}.invisible{visibility:hidden}.text-hide{font:0/0 a;color:transparent;text-shadow:none;background-color:transparent;border:0}.hidden{display:none}.affix{position:fixed;-webkit-transform:translate3d(0,0,0);-o-transform:translate3d(0,0,0);transform:translate3d(0,0,0)}@-ms-viewport{width:device-width}.visible-xs,.visible-sm,.visible-md,.visible-lg{display:none!important}.visible-xs-block,.visible-xs-inline,.visible-xs-inline-block,.visible-sm-block,.visible-sm-inline,.visible-sm-inline-block,.visible-md-block,.visible-md-inline,.visible-md-inline-block,.visible-lg-block,.visible-lg-inline,.visible-lg-inline-block{display:none!important}@media (max-width:767px){.visible-xs{display:block!important}table.visible-xs{display:table}tr.visible-xs{display:table-row!important}th.visible-xs,td.visible-xs{display:table-cell!important}}@media (max-width:767px){.visible-xs-block{display:block!important}}@media (max-width:767px){.visible-xs-inline{display:inline!important}}@media (max-width:767px){.visible-xs-inline-block{display:inline-block!important}}@media (min-width:768px) and (max-width:991px){.visible-sm{display:block!important}table.visible-sm{display:table}tr.visible-sm{display:table-row!important}th.visible-sm,td.visible-sm{display:table-cell!important}}@media (min-width:768px) and (max-width:991px){.visible-sm-block{display:block!important}}@media (min-width:768px) and (max-width:991px){.visible-sm-inline{display:inline!important}}@media (min-width:768px) and (max-width:991px){.visible-sm-inline-block{display:inline-block!important}}@media (min-width:992px) and (max-width:1199px){.visible-md{display:block!important}table.visible-md{display:table}tr.visible-md{display:table-row!important}th.visible-md,td.visible-md{display:table-cell!important}}@media (min-width:992px) and (max-width:1199px){.visible-md-block{display:block!important}}@media (min-width:992px) and (max-width:1199px){.visible-md-inline{display:inline!important}}@media (min-width:992px) and (max-width:1199px){.visible-md-inline-block{display:inline-block!important}}@media (min-width:1200px){.visible-lg{display:block!important}table.visible-lg{display:table}tr.visible-lg{display:table-row!important}th.visible-lg,td.visible-lg{display:table-cell!important}}@media (min-width:1200px){.visible-lg-block{display:block!important}}@media (min-width:1200px){.visible-lg-inline{display:inline!important}}@media (min-width:1200px){.visible-lg-inline-block{display:inline-block!important}}@media (max-width:767px){.hidden-xs{display:none!important}}@media (min-width:768px) and (max-width:991px){.hidden-sm{display:none!important}}@media (min-width:992px) and (max-width:1199px){.hidden-md{display:none!important}}@media (min-width:1200px){.hidden-lg{display:none!important}}.visible-print{display:none!important}@media print{.visible-print{display:block!important}table.visible-print{display:table}tr.visible-print{display:table-row!important}th.visible-print,td.visible-print{display:table-cell!important}}.visible-print-block{display:none!important}@media print{.visible-print-block{display:block!important}}.visible-print-inline{display:none!important}@media print{.visible-print-inline{display:inline!important}}.visible-print-inline-block{display:none!important}@media print{.visible-print-inline-block{display:inline-block!important}}@media print{.hidden-print{display:none!important}}
assets/bootstrap/fonts/glyphicons-halflings-regular.eot CHANGED
Binary file
assets/bootstrap/fonts/glyphicons-halflings-regular.svg CHANGED
@@ -28,12 +28,12 @@
28
  <glyph unicode="&#x205f;" horiz-adv-x="326" />
29
  <glyph unicode="&#x20ac;" d="M100 500l100 100h113q0 47 5 100h-218l100 100h135q37 167 112 257q117 141 297 141q242 0 354 -189q60 -103 66 -209h-181q0 55 -25.5 99t-63.5 68t-75 36.5t-67 12.5q-24 0 -52.5 -10t-62.5 -32t-65.5 -67t-50.5 -107h379l-100 -100h-300q-6 -46 -6 -100h406l-100 -100 h-300q9 -74 33 -132t52.5 -91t62 -54.5t59 -29t46.5 -7.5q29 0 66 13t75 37t63.5 67.5t25.5 96.5h174q-31 -172 -128 -278q-107 -117 -274 -117q-205 0 -324 158q-36 46 -69 131.5t-45 205.5h-217z" />
30
  <glyph unicode="&#x2212;" d="M200 400h900v300h-900v-300z" />
31
- <glyph unicode="&#x2601;" d="M-14 494q0 -80 56.5 -137t135.5 -57h750q120 0 205 86t85 208q0 120 -85 206.5t-205 86.5q-46 0 -90 -14q-44 97 -134.5 156.5t-200.5 59.5q-152 0 -260 -107.5t-108 -260.5q0 -25 2 -37q-66 -14 -108.5 -67.5t-42.5 -122.5z" />
 
32
  <glyph unicode="&#x2709;" d="M0 100l400 400l200 -200l200 200l400 -400h-1200zM0 300v600l300 -300zM0 1100l600 -603l600 603h-1200zM900 600l300 300v-600z" />
33
  <glyph unicode="&#x270f;" d="M-13 -13l333 112l-223 223zM187 403l214 -214l614 614l-214 214zM887 1103l214 -214l99 92q13 13 13 32.5t-13 33.5l-153 153q-15 13 -33 13t-33 -13z" />
34
- <glyph unicode="&#xe000;" horiz-adv-x="500" d="M0 0z" />
35
  <glyph unicode="&#xe001;" d="M0 1200h1200l-500 -550v-550h300v-100h-800v100h300v550z" />
36
- <glyph unicode="&#xe002;" d="M14 84q18 -55 86 -75.5t147 5.5q65 21 109 69t44 90v606l600 155v-521q-64 16 -138 -7q-79 -26 -122.5 -83t-25.5 -111q17 -55 85.5 -75.5t147.5 4.5q70 23 111.5 63.5t41.5 95.5v881q0 10 -7 15.5t-17 2.5l-752 -193q-10 -3 -17 -12.5t-7 -19.5v-689q-64 17 -138 -7 q-79 -25 -122.5 -82t-25.5 -112z" />
37
  <glyph unicode="&#xe003;" d="M23 693q0 200 142 342t342 142t342 -142t142 -342q0 -142 -78 -261l300 -300q7 -8 7 -18t-7 -18l-109 -109q-8 -7 -18 -7t-18 7l-300 300q-119 -78 -261 -78q-200 0 -342 142t-142 342zM176 693q0 -136 97 -233t234 -97t233.5 96.5t96.5 233.5t-96.5 233.5t-233.5 96.5 t-234 -97t-97 -233z" />
38
  <glyph unicode="&#xe005;" d="M100 784q0 64 28 123t73 100.5t104.5 64t119 20.5t120 -38.5t104.5 -104.5q48 69 109.5 105t121.5 38t118.5 -20.5t102.5 -64t71 -100.5t27 -123q0 -57 -33.5 -117.5t-94 -124.5t-126.5 -127.5t-150 -152.5t-146 -174q-62 85 -145.5 174t-149.5 152.5t-126.5 127.5 t-94 124.5t-33.5 117.5z" />
39
  <glyph unicode="&#xe006;" d="M-72 800h479l146 400h2l146 -400h472l-382 -278l145 -449l-384 275l-382 -275l146 447zM168 71l2 1z" />
@@ -46,7 +46,7 @@
46
  <glyph unicode="&#xe013;" d="M29 454l419 -420l818 820l-212 212l-607 -607l-206 207z" />
47
  <glyph unicode="&#xe014;" d="M106 318l282 282l-282 282l212 212l282 -282l282 282l212 -212l-282 -282l282 -282l-212 -212l-282 282l-282 -282z" />
48
  <glyph unicode="&#xe015;" d="M23 693q0 200 142 342t342 142t342 -142t142 -342q0 -142 -78 -261l300 -300q7 -8 7 -18t-7 -18l-109 -109q-8 -7 -18 -7t-18 7l-300 300q-119 -78 -261 -78q-200 0 -342 142t-142 342zM176 693q0 -136 97 -233t234 -97t233.5 96.5t96.5 233.5t-96.5 233.5t-233.5 96.5 t-234 -97t-97 -233zM300 600v200h100v100h200v-100h100v-200h-100v-100h-200v100h-100z" />
49
- <glyph unicode="&#xe016;" d="M23 694q0 200 142 342t342 142t342 -142t142 -342q0 -141 -78 -262l300 -299q7 -7 7 -18t-7 -18l-109 -109q-8 -8 -18 -8t-18 8l-300 299q-120 -77 -261 -77q-200 0 -342 142t-142 342zM176 694q0 -136 97 -233t234 -97t233.5 97t96.5 233t-96.5 233t-233.5 97t-234 -97 t-97 -233zM300 601h400v200h-400v-200z" />
50
  <glyph unicode="&#xe017;" d="M23 600q0 183 105 331t272 210v-166q-103 -55 -165 -155t-62 -220q0 -177 125 -302t302 -125t302 125t125 302q0 120 -62 220t-165 155v166q167 -62 272 -210t105 -331q0 -118 -45.5 -224.5t-123 -184t-184 -123t-224.5 -45.5t-224.5 45.5t-184 123t-123 184t-45.5 224.5 zM500 750q0 -21 14.5 -35.5t35.5 -14.5h100q21 0 35.5 14.5t14.5 35.5v400q0 21 -14.5 35.5t-35.5 14.5h-100q-21 0 -35.5 -14.5t-14.5 -35.5v-400z" />
51
  <glyph unicode="&#xe018;" d="M100 1h200v300h-200v-300zM400 1v500h200v-500h-200zM700 1v800h200v-800h-200zM1000 1v1200h200v-1200h-200z" />
52
  <glyph unicode="&#xe019;" d="M26 601q0 -33 6 -74l151 -38l2 -6q14 -49 38 -93l3 -5l-80 -134q45 -59 105 -105l133 81l5 -3q45 -26 94 -39l5 -2l38 -151q40 -5 74 -5q27 0 74 5l38 151l6 2q46 13 93 39l5 3l134 -81q56 44 104 105l-80 134l3 5q24 44 39 93l1 6l152 38q5 40 5 74q0 28 -5 73l-152 38 l-1 6q-16 51 -39 93l-3 5l80 134q-44 58 -104 105l-134 -81l-5 3q-45 25 -93 39l-6 1l-38 152q-40 5 -74 5q-27 0 -74 -5l-38 -152l-5 -1q-50 -14 -94 -39l-5 -3l-133 81q-59 -47 -105 -105l80 -134l-3 -5q-25 -47 -38 -93l-2 -6l-151 -38q-6 -48 -6 -73zM385 601 q0 88 63 151t152 63t152 -63t63 -151q0 -89 -63 -152t-152 -63t-152 63t-63 152z" />
@@ -58,7 +58,7 @@
58
  <glyph unicode="&#xe025;" d="M0 0v400h490l-290 300h200v500h300v-500h200l-290 -300h490v-400h-1100zM813 200h175v100h-175v-100z" />
59
  <glyph unicode="&#xe026;" d="M1 600q0 122 47.5 233t127.5 191t191 127.5t233 47.5t233 -47.5t191 -127.5t127.5 -191t47.5 -233t-47.5 -233t-127.5 -191t-191 -127.5t-233 -47.5t-233 47.5t-191 127.5t-127.5 191t-47.5 233zM188 600q0 -170 121 -291t291 -121t291 121t121 291t-121 291t-291 121 t-291 -121t-121 -291zM350 600h150v300h200v-300h150l-250 -300z" />
60
  <glyph unicode="&#xe027;" d="M4 600q0 162 80 299t217 217t299 80t299 -80t217 -217t80 -299t-80 -299t-217 -217t-299 -80t-299 80t-217 217t-80 299zM186 600q0 -171 121.5 -292.5t292.5 -121.5t292.5 121.5t121.5 292.5t-121.5 292.5t-292.5 121.5t-292.5 -121.5t-121.5 -292.5zM350 600l250 300 l250 -300h-150v-300h-200v300h-150z" />
61
- <glyph unicode="&#xe028;" d="M0 25v475l200 700h800q199 -700 200 -700v-475q0 -11 -7 -18t-18 -7h-1150q-11 0 -18 7t-7 18zM200 500h200l50 -200h300l50 200h200l-97 500h-606z" />
62
  <glyph unicode="&#xe029;" d="M4 600q0 162 80 299t217 217t299 80t299 -80t217 -217t80 -299t-80 -299t-217 -217t-299 -80t-299 80t-217 217t-80 299zM186 600q0 -172 121.5 -293t292.5 -121t292.5 121t121.5 293q0 171 -121.5 292.5t-292.5 121.5t-292.5 -121.5t-121.5 -292.5zM500 397v401 l297 -200z" />
63
  <glyph unicode="&#xe030;" d="M23 600q0 -118 45.5 -224.5t123 -184t184 -123t224.5 -45.5t224.5 45.5t184 123t123 184t45.5 224.5h-150q0 -177 -125 -302t-302 -125t-302 125t-125 302t125 302t302 125q136 0 246 -81l-146 -146h400v400l-145 -145q-157 122 -355 122q-118 0 -224.5 -45.5t-184 -123 t-123 -184t-45.5 -224.5z" />
64
  <glyph unicode="&#xe031;" d="M23 600q0 118 45.5 224.5t123 184t184 123t224.5 45.5q198 0 355 -122l145 145v-400h-400l147 147q-112 80 -247 80q-177 0 -302 -125t-125 -302h-150zM100 0v400h400l-147 -147q112 -80 247 -80q177 0 302 125t125 302h150q0 -118 -45.5 -224.5t-123 -184t-184 -123 t-224.5 -45.5q-198 0 -355 122z" />
@@ -71,14 +71,14 @@
71
  <glyph unicode="&#xe038;" d="M0 401v400h300l300 200v-800l-300 200h-300zM702 858l69 53q111 -135 111 -310q0 -170 -106 -303l-67 55q86 110 86 248q0 145 -93 257zM889 951l7 -8q123 -151 123 -344q0 -189 -119 -339l-7 -8l81 -66l6 8q142 178 142 405q0 230 -144 408l-6 8z" />
72
  <glyph unicode="&#xe039;" d="M0 0h500v500h-200v100h-100v-100h-200v-500zM0 600h100v100h400v100h100v100h-100v300h-500v-600zM100 100v300h300v-300h-300zM100 800v300h300v-300h-300zM200 200v100h100v-100h-100zM200 900h100v100h-100v-100zM500 500v100h300v-300h200v-100h-100v-100h-200v100 h-100v100h100v200h-200zM600 0v100h100v-100h-100zM600 1000h100v-300h200v-300h300v200h-200v100h200v500h-600v-200zM800 800v300h300v-300h-300zM900 0v100h300v-100h-300zM900 900v100h100v-100h-100zM1100 200v100h100v-100h-100z" />
73
  <glyph unicode="&#xe040;" d="M0 200h100v1000h-100v-1000zM100 0v100h300v-100h-300zM200 200v1000h100v-1000h-100zM500 0v91h100v-91h-100zM500 200v1000h200v-1000h-200zM700 0v91h100v-91h-100zM800 200v1000h100v-1000h-100zM900 0v91h200v-91h-200zM1000 200v1000h200v-1000h-200z" />
74
- <glyph unicode="&#xe041;" d="M1 700v475q0 10 7.5 17.5t17.5 7.5h474l700 -700l-500 -500zM148 953q0 -42 29 -71q30 -30 71.5 -30t71.5 30q29 29 29 71t-29 71q-30 30 -71.5 30t-71.5 -30q-29 -29 -29 -71z" />
75
- <glyph unicode="&#xe042;" d="M2 700v475q0 11 7 18t18 7h474l700 -700l-500 -500zM148 953q0 -42 30 -71q29 -30 71 -30t71 30q30 29 30 71t-30 71q-29 30 -71 30t-71 -30q-30 -29 -30 -71zM701 1200h100l700 -700l-500 -500l-50 50l450 450z" />
76
  <glyph unicode="&#xe043;" d="M100 0v1025l175 175h925v-1000l-100 -100v1000h-750l-100 -100h750v-1000h-900z" />
77
  <glyph unicode="&#xe044;" d="M200 0l450 444l450 -443v1150q0 20 -14.5 35t-35.5 15h-800q-21 0 -35.5 -15t-14.5 -35v-1151z" />
78
  <glyph unicode="&#xe045;" d="M0 100v700h200l100 -200h600l100 200h200v-700h-200v200h-800v-200h-200zM253 829l40 -124h592l62 124l-94 346q-2 11 -10 18t-18 7h-450q-10 0 -18 -7t-10 -18zM281 24l38 152q2 10 11.5 17t19.5 7h500q10 0 19.5 -7t11.5 -17l38 -152q2 -10 -3.5 -17t-15.5 -7h-600 q-10 0 -15.5 7t-3.5 17z" />
79
  <glyph unicode="&#xe046;" d="M0 200q0 -41 29.5 -70.5t70.5 -29.5h1000q41 0 70.5 29.5t29.5 70.5v600q0 41 -29.5 70.5t-70.5 29.5h-150q-4 8 -11.5 21.5t-33 48t-53 61t-69 48t-83.5 21.5h-200q-41 0 -82 -20.5t-70 -50t-52 -59t-34 -50.5l-12 -20h-150q-41 0 -70.5 -29.5t-29.5 -70.5v-600z M356 500q0 100 72 172t172 72t172 -72t72 -172t-72 -172t-172 -72t-172 72t-72 172zM494 500q0 -44 31 -75t75 -31t75 31t31 75t-31 75t-75 31t-75 -31t-31 -75zM900 700v100h100v-100h-100z" />
80
  <glyph unicode="&#xe047;" d="M53 0h365v66q-41 0 -72 11t-49 38t1 71l92 234h391l82 -222q16 -45 -5.5 -88.5t-74.5 -43.5v-66h417v66q-34 1 -74 43q-18 19 -33 42t-21 37l-6 13l-385 998h-93l-399 -1006q-24 -48 -52 -75q-12 -12 -33 -25t-36 -20l-15 -7v-66zM416 521l178 457l46 -140l116 -317h-340 z" />
81
- <glyph unicode="&#xe048;" d="M100 0v89q41 7 70.5 32.5t29.5 65.5v827q0 28 -1 39.5t-5.5 26t-15.5 21t-29 14t-49 14.5v70h471q120 0 213 -88t93 -228q0 -55 -11.5 -101.5t-28 -74t-33.5 -47.5t-28 -28l-12 -7q8 -3 21.5 -9t48 -31.5t60.5 -58t47.5 -91.5t21.5 -129q0 -84 -59 -156.5t-142 -111 t-162 -38.5h-500zM400 200h161q89 0 153 48.5t64 132.5q0 90 -62.5 154.5t-156.5 64.5h-159v-400zM400 700h139q76 0 130 61.5t54 138.5q0 82 -84 130.5t-239 48.5v-379z" />
82
  <glyph unicode="&#xe049;" d="M200 0v57q77 7 134.5 40.5t65.5 80.5l173 849q10 56 -10 74t-91 37q-6 1 -10.5 2.5t-9.5 2.5v57h425l2 -57q-33 -8 -62 -25.5t-46 -37t-29.5 -38t-17.5 -30.5l-5 -12l-128 -825q-10 -52 14 -82t95 -36v-57h-500z" />
83
  <glyph unicode="&#xe050;" d="M-75 200h75v800h-75l125 167l125 -167h-75v-800h75l-125 -167zM300 900v300h150h700h150v-300h-50q0 29 -8 48.5t-18.5 30t-33.5 15t-39.5 5.5t-50.5 1h-200v-850l100 -50v-100h-400v100l100 50v850h-200q-34 0 -50.5 -1t-40 -5.5t-33.5 -15t-18.5 -30t-8.5 -48.5h-49z " />
84
  <glyph unicode="&#xe051;" d="M33 51l167 125v-75h800v75l167 -125l-167 -125v75h-800v-75zM100 901v300h150h700h150v-300h-50q0 29 -8 48.5t-18 30t-33.5 15t-40 5.5t-50.5 1h-200v-650l100 -50v-100h-400v100l100 50v650h-200q-34 0 -50.5 -1t-39.5 -5.5t-33.5 -15t-18.5 -30t-8 -48.5h-50z" />
@@ -93,10 +93,10 @@
93
  <glyph unicode="&#xe060;" d="M0 44v1012q0 18 13 31t31 13h1112q19 0 31.5 -13t12.5 -31v-1012q0 -18 -12.5 -31t-31.5 -13h-1112q-18 0 -31 13t-13 31zM100 263l247 182l298 -131l-74 156l293 318l236 -288v500h-1000v-737zM208 750q0 56 39 95t95 39t95 -39t39 -95t-39 -95t-95 -39t-95 39t-39 95z " />
94
  <glyph unicode="&#xe062;" d="M148 745q0 124 60.5 231.5t165 172t226.5 64.5q123 0 227 -63t164.5 -169.5t60.5 -229.5t-73 -272q-73 -114 -166.5 -237t-150.5 -189l-57 -66q-10 9 -27 26t-66.5 70.5t-96 109t-104 135.5t-100.5 155q-63 139 -63 262zM342 772q0 -107 75.5 -182.5t181.5 -75.5 q107 0 182.5 75.5t75.5 182.5t-75.5 182t-182.5 75t-182 -75.5t-75 -181.5z" />
95
  <glyph unicode="&#xe063;" d="M1 600q0 122 47.5 233t127.5 191t191 127.5t233 47.5t233 -47.5t191 -127.5t127.5 -191t47.5 -233t-47.5 -233t-127.5 -191t-191 -127.5t-233 -47.5t-233 47.5t-191 127.5t-127.5 191t-47.5 233zM173 600q0 -177 125.5 -302t301.5 -125v854q-176 0 -301.5 -125 t-125.5 -302z" />
96
- <glyph unicode="&#xe064;" d="M117 406q0 94 34 186t88.5 172.5t112 159t115 177t87.5 194.5q21 -71 57.5 -142.5t76 -130.5t83 -118.5t82 -117t70 -116t50 -125.5t18.5 -136q0 -89 -39 -165.5t-102 -126.5t-140 -79.5t-156 -33.5q-114 6 -211.5 53t-161.5 138.5t-64 210.5zM243 414q14 -82 59.5 -136 t136.5 -80l16 98q-7 6 -18 17t-34 48t-33 77q-15 73 -14 143.5t10 122.5l9 51q-92 -110 -119.5 -185t-12.5 -156z" />
97
  <glyph unicode="&#xe065;" d="M0 400v300q0 165 117.5 282.5t282.5 117.5q366 -6 397 -14l-186 -186h-311q-41 0 -70.5 -29.5t-29.5 -70.5v-500q0 -41 29.5 -70.5t70.5 -29.5h500q41 0 70.5 29.5t29.5 70.5v125l200 200v-225q0 -165 -117.5 -282.5t-282.5 -117.5h-300q-165 0 -282.5 117.5 t-117.5 282.5zM436 341l161 50l412 412l-114 113l-405 -405zM995 1015l113 -113l113 113l-21 85l-92 28z" />
98
  <glyph unicode="&#xe066;" d="M0 400v300q0 165 117.5 282.5t282.5 117.5h261l2 -80q-133 -32 -218 -120h-145q-41 0 -70.5 -29.5t-29.5 -70.5v-500q0 -41 29.5 -70.5t70.5 -29.5h500q41 0 70.5 29.5t29.5 70.5l200 153v-53q0 -165 -117.5 -282.5t-282.5 -117.5h-300q-165 0 -282.5 117.5t-117.5 282.5 zM423 524q30 38 81.5 64t103 35.5t99 14t77.5 3.5l29 -1v-209l360 324l-359 318v-216q-7 0 -19 -1t-48 -8t-69.5 -18.5t-76.5 -37t-76.5 -59t-62 -88t-39.5 -121.5z" />
99
- <glyph unicode="&#xe067;" d="M0 400v300q0 165 117.5 282.5t282.5 117.5h300q60 0 127 -23l-178 -177h-349q-41 0 -70.5 -29.5t-29.5 -70.5v-500q0 -41 29.5 -70.5t70.5 -29.5h500q41 0 70.5 29.5t29.5 70.5v69l200 200v-169q0 -165 -117.5 -282.5t-282.5 -117.5h-300q-165 0 -282.5 117.5 t-117.5 282.5zM342 632l283 -284l566 567l-136 137l-430 -431l-147 147z" />
100
  <glyph unicode="&#xe068;" d="M0 603l300 296v-198h200v200h-200l300 300l295 -300h-195v-200h200v198l300 -296l-300 -300v198h-200v-200h195l-295 -300l-300 300h200v200h-200v-198z" />
101
  <glyph unicode="&#xe069;" d="M200 50v1000q0 21 14.5 35.5t35.5 14.5h100q21 0 35.5 -14.5t14.5 -35.5v-437l500 487v-1100l-500 488v-438q0 -21 -14.5 -35.5t-35.5 -14.5h-100q-21 0 -35.5 14.5t-14.5 35.5z" />
102
  <glyph unicode="&#xe070;" d="M0 50v1000q0 21 14.5 35.5t35.5 14.5h100q21 0 35.5 -14.5t14.5 -35.5v-437l500 487v-487l500 487v-1100l-500 488v-488l-500 488v-438q0 -21 -14.5 -35.5t-35.5 -14.5h-100q-21 0 -35.5 14.5t-14.5 35.5z" />
@@ -110,13 +110,13 @@
110
  <glyph unicode="&#xe078;" d="M100 250v100q0 21 14.5 35.5t35.5 14.5h1000q21 0 35.5 -14.5t14.5 -35.5v-100q0 -21 -14.5 -35.5t-35.5 -14.5h-1000q-21 0 -35.5 14.5t-14.5 35.5zM100 500h1100l-550 564z" />
111
  <glyph unicode="&#xe079;" d="M185 599l592 -592l240 240l-353 353l353 353l-240 240z" />
112
  <glyph unicode="&#xe080;" d="M272 194l353 353l-353 353l241 240l572 -571l21 -22l-1 -1v-1l-592 -591z" />
113
- <glyph unicode="&#xe081;" d="M3 600q0 162 80 299.5t217.5 217.5t299.5 80t299.5 -80t217.5 -217.5t80 -299.5t-80 -300t-217.5 -218t-299.5 -80t-299.5 80t-217.5 218t-80 300zM300 500h200v-200h200v200h200v200h-200v200h-200v-200h-200v-200z" />
114
- <glyph unicode="&#xe082;" d="M3 600q0 162 80 299.5t217.5 217.5t299.5 80t299.5 -80t217.5 -217.5t80 -299.5t-80 -300t-217.5 -218t-299.5 -80t-299.5 80t-217.5 218t-80 300zM300 500h600v200h-600v-200z" />
115
- <glyph unicode="&#xe083;" d="M3 600q0 162 80 299.5t217.5 217.5t299.5 80t299.5 -80t217.5 -217.5t80 -299.5t-80 -300t-217.5 -218t-299.5 -80t-299.5 80t-217.5 218t-80 300zM246 459l213 -213l141 142l141 -142l213 213l-142 141l142 141l-213 212l-141 -141l-141 142l-212 -213l141 -141z" />
116
  <glyph unicode="&#xe084;" d="M3 600q0 162 80 299.5t217.5 217.5t299.5 80t299.5 -80t217.5 -217.5t80 -299.5t-80 -299.5t-217.5 -217.5t-299.5 -80t-299.5 80t-217.5 217.5t-80 299.5zM270 551l276 -277l411 411l-175 174l-236 -236l-102 102z" />
117
- <glyph unicode="&#xe085;" d="M3 600q0 162 80 299.5t217.5 217.5t299.5 80t299.5 -80t217.5 -217.5t80 -299.5t-80 -300t-217.5 -218t-299.5 -80t-299.5 80t-217.5 218t-80 300zM363 700h144q4 0 11.5 -1t11 -1t6.5 3t3 9t1 11t3.5 8.5t3.5 6t5.5 4t6.5 2.5t9 1.5t9 0.5h11.5h12.5q19 0 30 -10t11 -26 q0 -22 -4 -28t-27 -22q-5 -1 -12.5 -3t-27 -13.5t-34 -27t-26.5 -46t-11 -68.5h200q5 3 14 8t31.5 25.5t39.5 45.5t31 69t14 94q0 51 -17.5 89t-42 58t-58.5 32t-58.5 15t-51.5 3q-105 0 -172 -56t-67 -183zM500 300h200v100h-200v-100z" />
118
- <glyph unicode="&#xe086;" d="M3 600q0 162 80 299.5t217.5 217.5t299.5 80t299.5 -80t217.5 -217.5t80 -299.5t-80 -300t-217.5 -218t-299.5 -80t-299.5 80t-217.5 218t-80 300zM400 300h400v100h-100v300h-300v-100h100v-200h-100v-100zM500 800h200v100h-200v-100z" />
119
- <glyph unicode="&#xe087;" d="M0 500v200h194q15 60 36 104.5t55.5 86t88 69t126.5 40.5v200h200v-200q54 -20 113 -60t112.5 -105.5t71.5 -134.5h203v-200h-203q-25 -102 -116.5 -186t-180.5 -117v-197h-200v197q-140 27 -208 102.5t-98 200.5h-194zM290 500q24 -73 79.5 -127.5t130.5 -78.5v206h200 v-206q149 48 201 206h-201v200h200q-25 74 -76 127.5t-124 76.5v-204h-200v203q-75 -24 -130 -77.5t-79 -125.5h209v-200h-210z" />
120
  <glyph unicode="&#xe088;" d="M4 600q0 162 80 299t217 217t299 80t299 -80t217 -217t80 -299t-80 -299t-217 -217t-299 -80t-299 80t-217 217t-80 299zM186 600q0 -171 121.5 -292.5t292.5 -121.5t292.5 121.5t121.5 292.5t-121.5 292.5t-292.5 121.5t-292.5 -121.5t-121.5 -292.5zM356 465l135 135 l-135 135l109 109l135 -135l135 135l109 -109l-135 -135l135 -135l-109 -109l-135 135l-135 -135z" />
121
  <glyph unicode="&#xe089;" d="M4 600q0 162 80 299t217 217t299 80t299 -80t217 -217t80 -299t-80 -299t-217 -217t-299 -80t-299 80t-217 217t-80 299zM186 600q0 -171 121.5 -292.5t292.5 -121.5t292.5 121.5t121.5 292.5t-121.5 292.5t-292.5 121.5t-292.5 -121.5t-121.5 -292.5zM322 537l141 141 l87 -87l204 205l142 -142l-346 -345z" />
122
  <glyph unicode="&#xe090;" d="M4 600q0 162 80 299t217 217t299 80t299 -80t217 -217t80 -299t-80 -299t-217 -217t-299 -80t-299 80t-217 217t-80 299zM186 600q0 -115 62 -215l568 567q-100 62 -216 62q-171 0 -292.5 -121.5t-121.5 -292.5zM391 245q97 -59 209 -59q171 0 292.5 121.5t121.5 292.5 q0 112 -59 209z" />
@@ -127,14 +127,14 @@
127
  <glyph unicode="&#xe095;" d="M0 200q6 132 41 238.5t103.5 193t184 138t271.5 59.5v271l600 -453l-600 -448v301q-95 -2 -183 -20t-170 -52t-147 -92.5t-100 -135.5z" />
128
  <glyph unicode="&#xe096;" d="M0 0v400l129 -129l294 294l142 -142l-294 -294l129 -129h-400zM635 777l142 -142l294 294l129 -129v400h-400l129 -129z" />
129
  <glyph unicode="&#xe097;" d="M34 176l295 295l-129 129h400v-400l-129 130l-295 -295zM600 600v400l129 -129l295 295l142 -141l-295 -295l129 -130h-400z" />
130
- <glyph unicode="&#xe101;" d="M23 600q0 118 45.5 224.5t123 184t184 123t224.5 45.5t224.5 -45.5t184 -123t123 -184t45.5 -224.5t-45.5 -224.5t-123 -184t-184 -123t-224.5 -45.5t-224.5 45.5t-184 123t-123 184t-45.5 224.5zM456 851l58 -302q4 -20 21.5 -34.5t37.5 -14.5h54q20 0 37.5 14.5 t21.5 34.5l58 302q4 20 -8 34.5t-33 14.5h-207q-20 0 -32 -14.5t-8 -34.5zM500 300h200v100h-200v-100z" />
131
- <glyph unicode="&#xe102;" d="M0 800h100v-200h400v300h200v-300h400v200h100v100h-111v6t-1 15t-3 18l-34 172q-11 39 -41.5 63t-69.5 24q-32 0 -61 -17l-239 -144q-22 -13 -40 -35q-19 24 -40 36l-238 144q-33 18 -62 18q-39 0 -69.5 -23t-40.5 -61l-35 -177q-2 -8 -3 -18t-1 -15v-6h-111v-100z M100 0h400v400h-400v-400zM200 900q-3 0 14 48t35 96l18 47l214 -191h-281zM700 0v400h400v-400h-400zM731 900l202 197q5 -12 12 -32.5t23 -64t25 -72t7 -28.5h-269z" />
132
  <glyph unicode="&#xe103;" d="M0 -22v143l216 193q-9 53 -13 83t-5.5 94t9 113t38.5 114t74 124q47 60 99.5 102.5t103 68t127.5 48t145.5 37.5t184.5 43.5t220 58.5q0 -189 -22 -343t-59 -258t-89 -181.5t-108.5 -120t-122 -68t-125.5 -30t-121.5 -1.5t-107.5 12.5t-87.5 17t-56.5 7.5l-99 -55z M238.5 300.5q19.5 -6.5 86.5 76.5q55 66 367 234q70 38 118.5 69.5t102 79t99 111.5t86.5 148q22 50 24 60t-6 19q-7 5 -17 5t-26.5 -14.5t-33.5 -39.5q-35 -51 -113.5 -108.5t-139.5 -89.5l-61 -32q-369 -197 -458 -401q-48 -111 -28.5 -117.5z" />
133
  <glyph unicode="&#xe104;" d="M111 408q0 -33 5 -63q9 -56 44 -119.5t105 -108.5q31 -21 64 -16t62 23.5t57 49.5t48 61.5t35 60.5q32 66 39 184.5t-13 157.5q79 -80 122 -164t26 -184q-5 -33 -20.5 -69.5t-37.5 -80.5q-10 -19 -14.5 -29t-12 -26t-9 -23.5t-3 -19t2.5 -15.5t11 -9.5t19.5 -5t30.5 2.5 t42 8q57 20 91 34t87.5 44.5t87 64t65.5 88.5t47 122q38 172 -44.5 341.5t-246.5 278.5q22 -44 43 -129q39 -159 -32 -154q-15 2 -33 9q-79 33 -120.5 100t-44 175.5t48.5 257.5q-13 -8 -34 -23.5t-72.5 -66.5t-88.5 -105.5t-60 -138t-8 -166.5q2 -12 8 -41.5t8 -43t6 -39.5 t3.5 -39.5t-1 -33.5t-6 -31.5t-13.5 -24t-21 -20.5t-31 -12q-38 -10 -67 13t-40.5 61.5t-15 81.5t10.5 75q-52 -46 -83.5 -101t-39 -107t-7.5 -85z" />
134
  <glyph unicode="&#xe105;" d="M-61 600l26 40q6 10 20 30t49 63.5t74.5 85.5t97 90t116.5 83.5t132.5 59t145.5 23.5t145.5 -23.5t132.5 -59t116.5 -83.5t97 -90t74.5 -85.5t49 -63.5t20 -30l26 -40l-26 -40q-6 -10 -20 -30t-49 -63.5t-74.5 -85.5t-97 -90t-116.5 -83.5t-132.5 -59t-145.5 -23.5 t-145.5 23.5t-132.5 59t-116.5 83.5t-97 90t-74.5 85.5t-49 63.5t-20 30zM120 600q7 -10 40.5 -58t56 -78.5t68 -77.5t87.5 -75t103 -49.5t125 -21.5t123.5 20t100.5 45.5t85.5 71.5t66.5 75.5t58 81.5t47 66q-1 1 -28.5 37.5t-42 55t-43.5 53t-57.5 63.5t-58.5 54 q49 -74 49 -163q0 -124 -88 -212t-212 -88t-212 88t-88 212q0 85 46 158q-102 -87 -226 -258zM377 656q49 -124 154 -191l105 105q-37 24 -75 72t-57 84l-20 36z" />
135
  <glyph unicode="&#xe106;" d="M-61 600l26 40q6 10 20 30t49 63.5t74.5 85.5t97 90t116.5 83.5t132.5 59t145.5 23.5q61 0 121 -17l37 142h148l-314 -1200h-148l37 143q-82 21 -165 71.5t-140 102t-109.5 112t-72 88.5t-29.5 43zM120 600q210 -282 393 -336l37 141q-107 18 -178.5 101.5t-71.5 193.5 q0 85 46 158q-102 -87 -226 -258zM377 656q49 -124 154 -191l47 47l23 87q-30 28 -59 69t-44 68l-14 26zM780 161l38 145q22 15 44.5 34t46 44t40.5 44t41 50.5t33.5 43.5t33 44t24.5 34q-97 127 -140 175l39 146q67 -54 131.5 -125.5t87.5 -103.5t36 -52l26 -40l-26 -40 q-7 -12 -25.5 -38t-63.5 -79.5t-95.5 -102.5t-124 -100t-146.5 -79z" />
136
- <glyph unicode="&#xe107;" d="M-97.5 34q13.5 -34 50.5 -34h1294q37 0 50.5 35.5t-7.5 67.5l-642 1056q-20 33 -48 36t-48 -29l-642 -1066q-21 -32 -7.5 -66zM155 200l445 723l445 -723h-345v100h-200v-100h-345zM500 600l100 -300l100 300v100h-200v-100z" />
137
- <glyph unicode="&#xe108;" d="M100 262v41q0 20 11 44.5t26 38.5l363 325v339q0 62 44 106t106 44t106 -44t44 -106v-339l363 -325q15 -14 26 -38.5t11 -44.5v-41q0 -20 -12 -26.5t-29 5.5l-359 249v-263q100 -91 100 -113v-64q0 -21 -13 -29t-32 1l-94 78h-222l-94 -78q-19 -9 -32 -1t-13 29v64 q0 22 100 113v263l-359 -249q-17 -12 -29 -5.5t-12 26.5z" />
138
  <glyph unicode="&#xe109;" d="M0 50q0 -20 14.5 -35t35.5 -15h1000q21 0 35.5 15t14.5 35v750h-1100v-750zM0 900h1100v150q0 21 -14.5 35.5t-35.5 14.5h-150v100h-100v-100h-500v100h-100v-100h-150q-21 0 -35.5 -14.5t-14.5 -35.5v-150zM100 100v100h100v-100h-100zM100 300v100h100v-100h-100z M100 500v100h100v-100h-100zM300 100v100h100v-100h-100zM300 300v100h100v-100h-100zM300 500v100h100v-100h-100zM500 100v100h100v-100h-100zM500 300v100h100v-100h-100zM500 500v100h100v-100h-100zM700 100v100h100v-100h-100zM700 300v100h100v-100h-100zM700 500 v100h100v-100h-100zM900 100v100h100v-100h-100zM900 300v100h100v-100h-100zM900 500v100h100v-100h-100z" />
139
  <glyph unicode="&#xe110;" d="M0 200v200h259l600 600h241v198l300 -295l-300 -300v197h-159l-600 -600h-341zM0 800h259l122 -122l141 142l-181 180h-341v-200zM678 381l141 142l122 -123h159v198l300 -295l-300 -300v197h-241z" />
140
  <glyph unicode="&#xe111;" d="M0 400v600q0 41 29.5 70.5t70.5 29.5h1000q41 0 70.5 -29.5t29.5 -70.5v-600q0 -41 -29.5 -70.5t-70.5 -29.5h-596l-304 -300v300h-100q-41 0 -70.5 29.5t-29.5 70.5z" />
@@ -148,33 +148,33 @@
148
  <glyph unicode="&#xe119;" d="M302 300h198v600h-198l298 300l298 -300h-198v-600h198l-298 -300z" />
149
  <glyph unicode="&#xe120;" d="M0 600l300 298v-198h600v198l300 -298l-300 -297v197h-600v-197z" />
150
  <glyph unicode="&#xe121;" d="M0 100v100q0 41 29.5 70.5t70.5 29.5h1000q41 0 70.5 -29.5t29.5 -70.5v-100q0 -41 -29.5 -70.5t-70.5 -29.5h-1000q-41 0 -70.5 29.5t-29.5 70.5zM31 400l172 739q5 22 23 41.5t38 19.5h672q19 0 37.5 -22.5t23.5 -45.5l172 -732h-1138zM800 100h100v100h-100v-100z M1000 100h100v100h-100v-100z" />
151
- <glyph unicode="&#xe122;" d="M-101 600v50q0 24 25 49t50 38l25 13v-250l-11 5.5t-24 14t-30 21.5t-24 27.5t-11 31.5zM99 500v250v5q0 13 0.5 18.5t2.5 13t8 10.5t15 3h200l675 250v-850l-675 200h-38l47 -276q2 -12 -3 -17.5t-11 -6t-21 -0.5h-8h-83q-20 0 -34.5 14t-18.5 35q-56 337 -56 351z M1100 200v850q0 21 14.5 35.5t35.5 14.5q20 0 35 -14.5t15 -35.5v-850q0 -20 -15 -35t-35 -15q-21 0 -35.5 15t-14.5 35z" />
152
- <glyph unicode="&#xe123;" d="M74 350q0 21 13.5 35.5t33.5 14.5h17l118 173l63 327q15 77 76 140t144 83l-18 32q-6 19 3 32t29 13h94q20 0 29 -10.5t3 -29.5l-18 -37q83 -19 144 -82.5t76 -140.5l63 -327l118 -173h17q20 0 33.5 -14.5t13.5 -35.5q0 -20 -13 -40t-31 -27q-22 -9 -63 -23t-167.5 -37 t-251.5 -23t-245.5 20.5t-178.5 41.5l-58 20q-18 7 -31 27.5t-13 40.5zM497 110q12 -49 40 -79.5t63 -30.5t63 30.5t39 79.5q-48 -6 -102 -6t-103 6z" />
153
  <glyph unicode="&#xe124;" d="M21 445l233 -45l-78 -224l224 78l45 -233l155 179l155 -179l45 233l224 -78l-78 224l234 45l-180 155l180 156l-234 44l78 225l-224 -78l-45 233l-155 -180l-155 180l-45 -233l-224 78l78 -225l-233 -44l179 -156z" />
154
- <glyph unicode="&#xe125;" d="M0 200h200v600h-200v-600zM300 275q0 -75 100 -75h61q123 -100 139 -100h250q46 0 83 57l238 344q29 31 29 74v100q0 44 -30.5 84.5t-69.5 40.5h-328q28 118 28 125v150q0 44 -30.5 84.5t-69.5 40.5h-50q-27 0 -51 -20t-38 -48l-96 -198l-145 -196q-20 -26 -20 -63v-400z M400 300v375l150 212l100 213h50v-175l-50 -225h450v-125l-250 -375h-214l-136 100h-100z" />
155
- <glyph unicode="&#xe126;" d="M0 400v600h200v-600h-200zM300 525v400q0 75 100 75h61q123 100 139 100h250q46 0 83 -57l238 -344q29 -31 29 -74v-100q0 -44 -30.5 -84.5t-69.5 -40.5h-328q28 -118 28 -125v-150q0 -44 -30.5 -84.5t-69.5 -40.5h-50q-27 0 -51 20t-38 48l-96 198l-145 196 q-20 26 -20 63zM400 525l150 -212l100 -213h50v175l-50 225h450v125l-250 375h-214l-136 -100h-100v-375z" />
156
  <glyph unicode="&#xe127;" d="M8 200v600h200v-600h-200zM308 275v525q0 17 14 35.5t28 28.5l14 9l362 230q14 6 25 6q17 0 29 -12l109 -112q14 -14 14 -34q0 -18 -11 -32l-85 -121h302q85 0 138.5 -38t53.5 -110t-54.5 -111t-138.5 -39h-107l-130 -339q-7 -22 -20.5 -41.5t-28.5 -19.5h-341 q-7 0 -90 81t-83 94zM408 289l100 -89h293l131 339q6 21 19.5 41t28.5 20h203q16 0 25 15t9 36q0 20 -9 34.5t-25 14.5h-457h-6.5h-7.5t-6.5 0.5t-6 1t-5 1.5t-5.5 2.5t-4 4t-4 5.5q-5 12 -5 20q0 14 10 27l147 183l-86 83l-339 -236v-503z" />
157
- <glyph unicode="&#xe128;" d="M-101 651q0 72 54 110t139 37h302l-85 121q-11 16 -11 32q0 21 14 34l109 113q13 12 29 12q11 0 25 -6l365 -230q7 -4 16.5 -10.5t26 -26t16.5 -36.5v-526q0 -13 -85.5 -93.5t-93.5 -80.5h-342q-15 0 -28.5 20t-19.5 41l-131 339h-106q-84 0 -139 39t-55 111zM-1 601h222 q15 0 28.5 -20.5t19.5 -40.5l131 -339h293l106 89v502l-342 237l-87 -83l145 -184q10 -11 10 -26q0 -11 -5 -20q-1 -3 -3.5 -5.5l-4 -4t-5 -2.5t-5.5 -1.5t-6.5 -1t-6.5 -0.5h-7.5h-6.5h-476v-100zM999 201v600h200v-600h-200z" />
158
- <glyph unicode="&#xe129;" d="M97 719l230 -363q4 -6 10.5 -15.5t26 -25t36.5 -15.5h525q13 0 94 83t81 90v342q0 15 -20 28.5t-41 19.5l-339 131v106q0 84 -39 139t-111 55t-110 -53.5t-38 -138.5v-302l-121 84q-15 12 -33.5 11.5t-32.5 -13.5l-112 -110q-22 -22 -6 -53zM172 739l83 86l183 -146 q22 -18 47 -5q3 1 5.5 3.5l4 4t2.5 5t1.5 5.5t1 6.5t0.5 6v7.5v7v456q0 22 25 31t50 -0.5t25 -30.5v-202q0 -16 20 -29.5t41 -19.5l339 -130v-294l-89 -100h-503zM400 0v200h600v-200h-600z" />
159
- <glyph unicode="&#xe130;" d="M1 585q-15 -31 7 -53l112 -110q13 -13 32 -13.5t34 10.5l121 85l-1 -302q0 -84 38.5 -138t110.5 -54t111 55t39 139v106l339 131q20 6 40.5 19.5t20.5 28.5v342q0 7 -81 90t-94 83h-525q-17 0 -35.5 -14t-28.5 -28l-10 -15zM76 565l237 339h503l89 -100v-294l-340 -130 q-20 -6 -40 -20t-20 -29v-202q0 -22 -25 -31t-50 0t-25 31v456v14.5t-1.5 11.5t-5 12t-9.5 7q-24 13 -46 -5l-184 -146zM305 1104v200h600v-200h-600z" />
160
- <glyph unicode="&#xe131;" d="M5 597q0 122 47.5 232.5t127.5 190.5t190.5 127.5t232.5 47.5q162 0 299.5 -80t217.5 -218t80 -300t-80 -299.5t-217.5 -217.5t-299.5 -80t-300 80t-218 217.5t-80 299.5zM300 500h300l-2 -194l402 294l-402 298v-197h-298v-201z" />
161
- <glyph unicode="&#xe132;" d="M0 597q0 122 47.5 232.5t127.5 190.5t190.5 127.5t231.5 47.5q122 0 232.5 -47.5t190.5 -127.5t127.5 -190.5t47.5 -232.5q0 -162 -80 -299.5t-218 -217.5t-300 -80t-299.5 80t-217.5 217.5t-80 299.5zM200 600l400 -294v194h302v201h-300v197z" />
162
- <glyph unicode="&#xe133;" d="M5 597q0 122 47.5 232.5t127.5 190.5t190.5 127.5t232.5 47.5q121 0 231.5 -47.5t190.5 -127.5t127.5 -190.5t47.5 -232.5q0 -162 -80 -299.5t-217.5 -217.5t-299.5 -80t-300 80t-218 217.5t-80 299.5zM300 600h200v-300h200v300h200l-300 400z" />
163
- <glyph unicode="&#xe134;" d="M5 597q0 122 47.5 232.5t127.5 190.5t190.5 127.5t232.5 47.5q121 0 231.5 -47.5t190.5 -127.5t127.5 -190.5t47.5 -232.5q0 -162 -80 -299.5t-217.5 -217.5t-299.5 -80t-300 80t-218 217.5t-80 299.5zM300 600l300 -400l300 400h-200v300h-200v-300h-200z" />
164
- <glyph unicode="&#xe135;" d="M5 597q0 122 47.5 232.5t127.5 190.5t190.5 127.5t232.5 47.5q121 0 231.5 -47.5t190.5 -127.5t127.5 -190.5t47.5 -232.5q0 -162 -80 -299.5t-217.5 -217.5t-299.5 -80t-300 80t-218 217.5t-80 299.5zM254 780q-8 -34 5.5 -93t7.5 -87q0 -9 17 -44t16 -60q12 0 23 -5.5 t23 -15t20 -13.5q20 -10 108 -42q22 -8 53 -31.5t59.5 -38.5t57.5 -11q8 -18 -15 -55.5t-20 -57.5q12 -21 22.5 -34.5t28 -27t36.5 -17.5q0 -6 -3 -15.5t-3.5 -14.5t4.5 -17q101 -2 221 111q31 30 47 48t34 49t21 62q-14 9 -37.5 9.5t-35.5 7.5q-14 7 -49 15t-52 19 q-9 0 -39.5 -0.5t-46.5 -1.5t-39 -6.5t-39 -16.5q-50 -35 -66 -12q-4 2 -3.5 25.5t0.5 25.5q-6 13 -26.5 17t-24.5 7q2 22 -2 41t-16.5 28t-38.5 -20q-23 -25 -42 4q-19 28 -8 58q8 16 22 22q6 -1 26 -1.5t33.5 -4.5t19.5 -13q12 -19 32 -37.5t34 -27.5l14 -8q0 3 9.5 39.5 t5.5 57.5q-4 23 14.5 44.5t22.5 31.5q5 14 10 35t8.5 31t15.5 22.5t34 21.5q-6 18 10 37q8 0 23.5 -1.5t24.5 -1.5t20.5 4.5t20.5 15.5q-10 23 -30.5 42.5t-38 30t-49 26.5t-43.5 23q11 41 1 44q31 -13 58.5 -14.5t39.5 3.5l11 4q6 36 -17 53.5t-64 28.5t-56 23 q-19 -3 -37 0q-15 -12 -36.5 -21t-34.5 -12t-44 -8t-39 -6q-15 -3 -46 0t-45 -3q-20 -6 -51.5 -25.5t-34.5 -34.5q-3 -11 6.5 -22.5t8.5 -18.5q-3 -34 -27.5 -91t-29.5 -79zM518 915q3 12 16 30.5t16 25.5q10 -10 18.5 -10t14 6t14.5 14.5t16 12.5q0 -18 8 -42.5t16.5 -44 t9.5 -23.5q-6 1 -39 5t-53.5 10t-36.5 16z" />
165
  <glyph unicode="&#xe136;" d="M0 164.5q0 21.5 15 37.5l600 599q-33 101 6 201.5t135 154.5q164 92 306 -9l-259 -138l145 -232l251 126q13 -175 -151 -267q-123 -70 -253 -23l-596 -596q-15 -16 -36.5 -16t-36.5 16l-111 110q-15 15 -15 36.5z" />
166
  <glyph unicode="&#xe137;" horiz-adv-x="1220" d="M0 196v100q0 41 29.5 70.5t70.5 29.5h1000q41 0 70.5 -29.5t29.5 -70.5v-100q0 -41 -29.5 -70.5t-70.5 -29.5h-1000q-41 0 -70.5 29.5t-29.5 70.5zM0 596v100q0 41 29.5 70.5t70.5 29.5h1000q41 0 70.5 -29.5t29.5 -70.5v-100q0 -41 -29.5 -70.5t-70.5 -29.5h-1000 q-41 0 -70.5 29.5t-29.5 70.5zM0 996v100q0 41 29.5 70.5t70.5 29.5h1000q41 0 70.5 -29.5t29.5 -70.5v-100q0 -41 -29.5 -70.5t-70.5 -29.5h-1000q-41 0 -70.5 29.5t-29.5 70.5zM600 596h500v100h-500v-100zM800 196h300v100h-300v-100zM900 996h200v100h-200v-100z" />
167
  <glyph unicode="&#xe138;" d="M100 1100v100h1000v-100h-1000zM150 1000h900l-350 -500v-300l-200 -200v500z" />
168
  <glyph unicode="&#xe139;" d="M0 200v200h1200v-200q0 -41 -29.5 -70.5t-70.5 -29.5h-1000q-41 0 -70.5 29.5t-29.5 70.5zM0 500v400q0 41 29.5 70.5t70.5 29.5h300v100q0 41 29.5 70.5t70.5 29.5h200q41 0 70.5 -29.5t29.5 -70.5v-100h300q41 0 70.5 -29.5t29.5 -70.5v-400h-500v100h-200v-100h-500z M500 1000h200v100h-200v-100z" />
169
  <glyph unicode="&#xe140;" d="M0 0v400l129 -129l200 200l142 -142l-200 -200l129 -129h-400zM0 800l129 129l200 -200l142 142l-200 200l129 129h-400v-400zM729 329l142 142l200 -200l129 129v-400h-400l129 129zM729 871l200 200l-129 129h400v-400l-129 129l-200 -200z" />
170
- <glyph unicode="&#xe141;" d="M0 596q0 162 80 299t217 217t299 80t299 -80t217 -217t80 -299t-80 -299t-217 -217t-299 -80t-299 80t-217 217t-80 299zM182 596q0 -172 121.5 -293t292.5 -121t292.5 121t121.5 293q0 171 -121.5 292.5t-292.5 121.5t-292.5 -121.5t-121.5 -292.5zM291 655 q0 23 15.5 38.5t38.5 15.5t39 -16t16 -38q0 -23 -16 -39t-39 -16q-22 0 -38 16t-16 39zM400 850q0 22 16 38.5t39 16.5q22 0 38 -16t16 -39t-16 -39t-38 -16q-23 0 -39 16.5t-16 38.5zM513 609q0 32 21 56.5t52 29.5l122 126l1 1q-9 14 -9 28q0 22 16 38.5t39 16.5 q22 0 38 -16t16 -39t-16 -39t-38 -16q-16 0 -29 10l-55 -145q17 -22 17 -51q0 -36 -25.5 -61.5t-61.5 -25.5q-37 0 -62.5 25.5t-25.5 61.5zM800 655q0 22 16 38t39 16t38.5 -15.5t15.5 -38.5t-16 -39t-38 -16q-23 0 -39 16t-16 39z" />
171
- <glyph unicode="&#xe142;" d="M-40 375q-13 -95 35 -173q35 -57 94 -89t129 -32q63 0 119 28q33 16 65 40.5t52.5 45.5t59.5 64q40 44 57 61l394 394q35 35 47 84t-3 96q-27 87 -117 104q-20 2 -29 2q-46 0 -79.5 -17t-67.5 -51l-388 -396l-7 -7l69 -67l377 373q20 22 39 38q23 23 50 23q38 0 53 -36 q16 -39 -20 -75l-547 -547q-52 -52 -125 -52q-55 0 -100 33t-54 96q-5 35 2.5 66t31.5 63t42 50t56 54q24 21 44 41l348 348q52 52 82.5 79.5t84 54t107.5 26.5q25 0 48 -4q95 -17 154 -94.5t51 -175.5q-7 -101 -98 -192l-252 -249l-253 -256l7 -7l69 -60l517 511 q67 67 95 157t11 183q-16 87 -67 154t-130 103q-69 33 -152 33q-107 0 -197 -55q-40 -24 -111 -95l-512 -512q-68 -68 -81 -163z" />
172
- <glyph unicode="&#xe143;" d="M79 784q0 131 99 229.5t230 98.5q144 0 242 -129q103 129 245 129q130 0 227 -98.5t97 -229.5q0 -46 -17.5 -91t-61 -99t-77 -89.5t-104.5 -105.5q-197 -191 -293 -322l-17 -23l-16 23q-43 58 -100 122.5t-92 99.5t-101 100l-84.5 84.5t-68 74t-60 78t-33.5 70.5t-15 78z M250 784q0 -27 30.5 -70t61.5 -75.5t95 -94.5l22 -22q93 -90 190 -201q82 92 195 203l12 12q64 62 97.5 97t64.5 79t31 72q0 71 -48 119.5t-106 48.5q-73 0 -131 -83l-118 -171l-114 174q-51 80 -124 80q-59 0 -108.5 -49.5t-49.5 -118.5z" />
173
- <glyph unicode="&#xe144;" d="M57 353q0 -94 66 -160l141 -141q66 -66 159 -66q95 0 159 66l283 283q66 66 66 159t-66 159l-141 141q-12 12 -19 17l-105 -105l212 -212l-389 -389l-247 248l95 95l-18 18q-46 45 -75 101l-55 -55q-66 -66 -66 -159zM269 706q0 -93 66 -159l141 -141l19 -17l105 105 l-212 212l389 389l247 -247l-95 -96l18 -18q46 -46 77 -99l29 29q35 35 62.5 88t27.5 96q0 93 -66 159l-141 141q-66 66 -159 66q-95 0 -159 -66l-283 -283q-66 -64 -66 -159z" />
174
  <glyph unicode="&#xe145;" d="M200 100v953q0 21 30 46t81 48t129 38t163 15t162 -15t127 -38t79 -48t29 -46v-953q0 -41 -29.5 -70.5t-70.5 -29.5h-600q-41 0 -70.5 29.5t-29.5 70.5zM300 300h600v700h-600v-700zM496 150q0 -43 30.5 -73.5t73.5 -30.5t73.5 30.5t30.5 73.5t-30.5 73.5t-73.5 30.5 t-73.5 -30.5t-30.5 -73.5z" />
175
  <glyph unicode="&#xe146;" d="M0 0l303 380l207 208l-210 212h300l267 279l-35 36q-15 14 -15 35t15 35q14 15 35 15t35 -15l283 -282q15 -15 15 -36t-15 -35q-14 -15 -35 -15t-35 15l-36 35l-279 -267v-300l-212 210l-208 -207z" />
176
- <glyph unicode="&#xe148;" d="M295 433h139q5 -77 48.5 -126.5t117.5 -64.5v335l-27 7q-46 14 -79 26.5t-72 36t-62.5 52t-40 72.5t-16.5 99q0 92 44 159.5t109 101t144 40.5v78h100v-79q38 -4 72.5 -13.5t75.5 -31.5t71 -53.5t51.5 -84t24.5 -118.5h-159q-8 72 -35 109.5t-101 50.5v-307l64 -14 q34 -7 64 -16.5t70 -31.5t67.5 -52t47.5 -80.5t20 -112.5q0 -139 -89 -224t-244 -96v-77h-100v78q-152 17 -237 104q-40 40 -52.5 93.5t-15.5 139.5zM466 889q0 -29 8 -51t16.5 -34t29.5 -22.5t31 -13.5t38 -10q7 -2 11 -3v274q-61 -8 -97.5 -37.5t-36.5 -102.5zM700 237 q170 18 170 151q0 64 -44 99.5t-126 60.5v-311z" />
177
- <glyph unicode="&#xe149;" d="M100 600v100h166q-24 49 -44 104q-10 26 -14.5 55.5t-3 72.5t25 90t68.5 87q97 88 263 88q129 0 230 -89t101 -208h-153q0 52 -34 89.5t-74 51.5t-76 14q-37 0 -79 -14.5t-62 -35.5q-41 -44 -41 -101q0 -11 2.5 -24.5t5.5 -24t9.5 -26.5t10.5 -25t14 -27.5t14 -25.5 t15.5 -27t13.5 -24h242v-100h-197q8 -50 -2.5 -115t-31.5 -94q-41 -59 -99 -113q35 11 84 18t70 7q32 1 102 -16t104 -17q76 0 136 30l50 -147q-41 -25 -80.5 -36.5t-59 -13t-61.5 -1.5q-23 0 -128 33t-155 29q-39 -4 -82 -17t-66 -25l-24 -11l-55 145l16.5 11t15.5 10 t13.5 9.5t14.5 12t14.5 14t17.5 18.5q48 55 54 126.5t-30 142.5h-221z" />
178
  <glyph unicode="&#xe150;" d="M2 300l298 -300l298 300h-198v900h-200v-900h-198zM602 900l298 300l298 -300h-198v-900h-200v900h-198z" />
179
  <glyph unicode="&#xe151;" d="M2 300h198v900h200v-900h198l-298 -300zM700 0v200h100v-100h200v-100h-300zM700 400v100h300v-200h-99v-100h-100v100h99v100h-200zM700 700v500h300v-500h-100v100h-100v-100h-100zM801 900h100v200h-100v-200z" />
180
  <glyph unicode="&#xe152;" d="M2 300h198v900h200v-900h198l-298 -300zM700 0v500h300v-500h-100v100h-100v-100h-100zM700 700v200h100v-100h200v-100h-300zM700 1100v100h300v-200h-99v-100h-100v100h99v100h-200zM801 200h100v200h-100v-200z" />
@@ -187,15 +187,15 @@
187
  <glyph unicode="&#xe159;" d="M0 400v300q0 163 117.5 281.5t282.5 118.5h300q163 0 281.5 -119t118.5 -281v-300q0 -165 -117.5 -282.5t-282.5 -117.5h-300q-165 0 -282.5 117.5t-117.5 282.5zM200 300q0 -41 29.5 -70.5t70.5 -29.5h500q41 0 70.5 29.5t29.5 70.5v500q0 41 -29.5 70.5t-70.5 29.5 h-500q-41 0 -70.5 -29.5t-29.5 -70.5v-500zM300 700l250 -333l250 333h-500z" />
188
  <glyph unicode="&#xe160;" d="M0 400v300q0 165 117.5 282.5t282.5 117.5h300q165 0 282.5 -117.5t117.5 -282.5v-300q0 -162 -118.5 -281t-281.5 -119h-300q-165 0 -282.5 118.5t-117.5 281.5zM200 300q0 -41 29.5 -70.5t70.5 -29.5h500q41 0 70.5 29.5t29.5 70.5v500q0 41 -29.5 70.5t-70.5 29.5 h-500q-41 0 -70.5 -29.5t-29.5 -70.5v-500zM300 400h500l-250 333z" />
189
  <glyph unicode="&#xe161;" d="M0 400v300h300v200l400 -350l-400 -350v200h-300zM500 0v200h500q41 0 70.5 29.5t29.5 70.5v500q0 41 -29.5 70.5t-70.5 29.5h-500v200h400q165 0 282.5 -117.5t117.5 -282.5v-300q0 -165 -117.5 -282.5t-282.5 -117.5h-400z" />
190
- <glyph unicode="&#xe162;" d="M216 519q10 -19 32 -19h302q-155 -438 -160 -458q-5 -21 4 -32l9 -8l9 -1q13 0 26 16l538 630q15 19 6 36q-8 18 -32 16h-300q1 4 78 219.5t79 227.5q2 17 -6 27l-8 8h-9q-16 0 -25 -15q-4 -5 -98.5 -111.5t-228 -257t-209.5 -238.5q-17 -19 -7 -40z" />
191
  <glyph unicode="&#xe163;" d="M0 400q0 -165 117.5 -282.5t282.5 -117.5h300q47 0 100 15v185h-500q-41 0 -70.5 29.5t-29.5 70.5v500q0 41 29.5 70.5t70.5 29.5h500v185q-14 4 -114 7.5t-193 5.5l-93 2q-165 0 -282.5 -117.5t-117.5 -282.5v-300zM600 400v300h300v200l400 -350l-400 -350v200h-300z " />
192
  <glyph unicode="&#xe164;" d="M0 400q0 -165 117.5 -282.5t282.5 -117.5h300q163 0 281.5 117.5t118.5 282.5v98l-78 73l-122 -123v-148q0 -41 -29.5 -70.5t-70.5 -29.5h-500q-41 0 -70.5 29.5t-29.5 70.5v500q0 41 29.5 70.5t70.5 29.5h156l118 122l-74 78h-100q-165 0 -282.5 -117.5t-117.5 -282.5 v-300zM496 709l353 342l-149 149h500v-500l-149 149l-342 -353z" />
193
  <glyph unicode="&#xe165;" d="M4 600q0 162 80 299t217 217t299 80t299 -80t217 -217t80 -299t-80 -299t-217 -217t-299 -80t-299 80t-217 217t-80 299zM186 600q0 -171 121.5 -292.5t292.5 -121.5t292.5 121.5t121.5 292.5t-121.5 292.5t-292.5 121.5t-292.5 -121.5t-121.5 -292.5zM406 600 q0 80 57 137t137 57t137 -57t57 -137t-57 -137t-137 -57t-137 57t-57 137z" />
194
  <glyph unicode="&#xe166;" d="M0 0v275q0 11 7 18t18 7h1048q11 0 19 -7.5t8 -17.5v-275h-1100zM100 800l445 -500l450 500h-295v400h-300v-400h-300zM900 150h100v50h-100v-50z" />
195
  <glyph unicode="&#xe167;" d="M0 0v275q0 11 7 18t18 7h1048q11 0 19 -7.5t8 -17.5v-275h-1100zM100 700h300v-300h300v300h295l-445 500zM900 150h100v50h-100v-50z" />
196
  <glyph unicode="&#xe168;" d="M0 0v275q0 11 7 18t18 7h1048q11 0 19 -7.5t8 -17.5v-275h-1100zM100 705l305 -305l596 596l-154 155l-442 -442l-150 151zM900 150h100v50h-100v-50z" />
197
- <glyph unicode="&#xe169;" d="M0 0v275q0 11 7 18t18 7h1048q11 0 19 -7.5t8 -17.5v-275h-1100zM100 988l97 -98l212 213l-97 97zM200 401h700v699l-250 -239l-149 149l-212 -212l149 -149zM900 150h100v50h-100v-50z" />
198
- <glyph unicode="&#xe170;" d="M0 0v275q0 11 7 18t18 7h1048q11 0 19 -7.5t8 -17.5v-275h-1100zM200 612l212 -212l98 97l-213 212zM300 1200l239 -250l-149 -149l212 -212l149 148l248 -237v700h-699zM900 150h100v50h-100v-50z" />
199
  <glyph unicode="&#xe171;" d="M23 415l1177 784v-1079l-475 272l-310 -393v416h-392zM494 210l672 938l-672 -712v-226z" />
200
  <glyph unicode="&#xe172;" d="M0 150v1000q0 20 14.5 35t35.5 15h250v-300h500v300h100l200 -200v-850q0 -21 -15 -35.5t-35 -14.5h-150v400h-700v-400h-150q-21 0 -35.5 14.5t-14.5 35.5zM600 1000h100v200h-100v-200z" />
201
  <glyph unicode="&#xe173;" d="M0 150v1000q0 20 14.5 35t35.5 15h250v-300h500v300h100l200 -200v-218l-276 -275l-120 120l-126 -127h-378v-400h-150q-21 0 -35.5 14.5t-14.5 35.5zM581 306l123 123l120 -120l353 352l123 -123l-475 -476zM600 1000h100v200h-100v-200z" />
@@ -204,11 +204,11 @@
204
  <glyph unicode="&#xe176;" d="M0 150v1000q0 20 14.5 35t35.5 15h250v-300h500v300h100l200 -200v-402l-200 200l-298 -298h-402v-400h-150q-21 0 -35.5 14.5t-14.5 35.5zM600 300h200v-300h200v300h200l-300 300zM600 1000v200h100v-200h-100z" />
205
  <glyph unicode="&#xe177;" d="M0 250q0 -21 14.5 -35.5t35.5 -14.5h1100q21 0 35.5 14.5t14.5 35.5v550h-1200v-550zM0 900h1200v150q0 21 -14.5 35.5t-35.5 14.5h-1100q-21 0 -35.5 -14.5t-14.5 -35.5v-150zM100 300v200h400v-200h-400z" />
206
  <glyph unicode="&#xe178;" d="M0 400l300 298v-198h400v-200h-400v-198zM100 800v200h100v-200h-100zM300 800v200h100v-200h-100zM500 800v200h400v198l300 -298l-300 -298v198h-400zM800 300v200h100v-200h-100zM1000 300h100v200h-100v-200z" />
207
- <glyph unicode="&#xe179;" d="M100 700v400l50 100l50 -100v-300h100v300l50 100l50 -100v-300h100v300l50 100l50 -100v-400l-100 -203v-447q0 -21 -14.5 -35.5t-35.5 -14.5h-200q-21 0 -35.5 14.5t-14.5 35.5v447zM800 597q0 -29 10.5 -55.5t25 -43t29 -28.5t25.5 -18l10 -5v-397q0 -21 14.5 -35.5 t35.5 -14.5h200q21 0 35.5 14.5t14.5 35.5v1106q0 31 -18 40.5t-44 -7.5l-276 -117q-25 -16 -43.5 -50.5t-18.5 -65.5v-359z" />
208
  <glyph unicode="&#xe180;" d="M100 0h400v56q-75 0 -87.5 6t-12.5 44v394h500v-394q0 -38 -12.5 -44t-87.5 -6v-56h400v56q-4 0 -11 0.5t-24 3t-30 7t-24 15t-11 24.5v888q0 22 25 34.5t50 13.5l25 2v56h-400v-56q75 0 87.5 -6t12.5 -44v-394h-500v394q0 38 12.5 44t87.5 6v56h-400v-56q4 0 11 -0.5 t24 -3t30 -7t24 -15t11 -24.5v-888q0 -22 -25 -34.5t-50 -13.5l-25 -2v-56z" />
209
  <glyph unicode="&#xe181;" d="M0 300q0 -41 29.5 -70.5t70.5 -29.5h300q41 0 70.5 29.5t29.5 70.5v500q0 41 -29.5 70.5t-70.5 29.5h-300q-41 0 -70.5 -29.5t-29.5 -70.5v-500zM100 100h400l200 200h105l295 98v-298h-425l-100 -100h-375zM100 300v200h300v-200h-300zM100 600v200h300v-200h-300z M100 1000h400l200 -200v-98l295 98h105v200h-425l-100 100h-375zM700 402v163l400 133v-163z" />
210
- <glyph unicode="&#xe182;" d="M16.5 974.5q0.5 -21.5 16 -90t46.5 -140t104 -177.5t175 -208q103 -103 207.5 -176t180 -103.5t137 -47t92.5 -16.5l31 1l163 162q16 17 13 40.5t-22 37.5l-192 136q-19 14 -45 12t-42 -19l-119 -118q-143 103 -267 227q-126 126 -227 268l118 118q17 17 20 41.5 t-11 44.5l-139 194q-14 19 -36.5 22t-40.5 -14l-162 -162q-1 -11 -0.5 -32.5z" />
211
- <glyph unicode="&#xe183;" d="M0 50v212q0 20 10.5 45.5t24.5 39.5l365 303v50q0 4 1 10.5t12 22.5t30 28.5t60 23t97 10.5t97 -10t60 -23.5t30 -27.5t12 -24l1 -10v-50l365 -303q14 -14 24.5 -39.5t10.5 -45.5v-212q0 -21 -15 -35.5t-35 -14.5h-1100q-21 0 -35.5 14.5t-14.5 35.5zM0 712 q0 -21 14.5 -33.5t34.5 -8.5l202 33q20 4 34.5 21t14.5 38v146q141 24 300 24t300 -24v-146q0 -21 14.5 -38t34.5 -21l202 -33q20 -4 34.5 8.5t14.5 33.5v200q-6 8 -19 20.5t-63 45t-112 57t-171 45t-235 20.5q-92 0 -175 -10.5t-141.5 -27t-108.5 -36.5t-81.5 -40 t-53.5 -36.5t-31 -27.5l-9 -10v-200z" />
212
  <glyph unicode="&#xe184;" d="M100 0v100h1100v-100h-1100zM175 200h950l-125 150v250l100 100v400h-100v-200h-100v200h-200v-200h-100v200h-200v-200h-100v200h-100v-400l100 -100v-250z" />
213
  <glyph unicode="&#xe185;" d="M100 0h300v400q0 41 -29.5 70.5t-70.5 29.5h-100q-41 0 -70.5 -29.5t-29.5 -70.5v-400zM500 0v1000q0 41 29.5 70.5t70.5 29.5h100q41 0 70.5 -29.5t29.5 -70.5v-1000h-300zM900 0v700q0 41 29.5 70.5t70.5 29.5h100q41 0 70.5 -29.5t29.5 -70.5v-700h-300z" />
214
  <glyph unicode="&#xe186;" d="M-100 300v500q0 124 88 212t212 88h700q124 0 212 -88t88 -212v-500q0 -124 -88 -212t-212 -88h-700q-124 0 -212 88t-88 212zM100 200h900v700h-900v-700zM200 300h300v300h-200v100h200v100h-300v-300h200v-100h-200v-100zM600 300h200v100h100v300h-100v100h-200v-500 zM700 400v300h100v-300h-100z" />
@@ -221,9 +221,9 @@
221
  <glyph unicode="&#xe193;" d="M-100 300v500q0 124 88 212t212 88h700q124 0 212 -88t88 -212v-500q0 -124 -88 -212t-212 -88h-700q-124 0 -212 88t-88 212zM100 200h900v700h-900v-700zM200 700v100h300v-300h-99v-100h-100v100h99v200h-200zM201 300v100h100v-100h-100zM601 300v100h100v-100h-100z M700 700v100h200v-500h-100v400h-100z" />
222
  <glyph unicode="&#xe194;" d="M4 600q0 162 80 299t217 217t299 80t299 -80t217 -217t80 -299t-80 -299t-217 -217t-299 -80t-299 80t-217 217t-80 299zM186 600q0 -171 121.5 -292.5t292.5 -121.5t292.5 121.5t121.5 292.5t-121.5 292.5t-292.5 121.5t-292.5 -121.5t-121.5 -292.5zM400 500v200 l100 100h300v-100h-300v-200h300v-100h-300z" />
223
  <glyph unicode="&#xe195;" d="M0 600q0 162 80 299t217 217t299 80t299 -80t217 -217t80 -299t-80 -299t-217 -217t-299 -80t-299 80t-217 217t-80 299zM182 600q0 -171 121.5 -292.5t292.5 -121.5t292.5 121.5t121.5 292.5t-121.5 292.5t-292.5 121.5t-292.5 -121.5t-121.5 -292.5zM400 400v400h300 l100 -100v-100h-100v100h-200v-100h200v-100h-200v-100h-100zM700 400v100h100v-100h-100z" />
224
- <glyph unicode="&#xe197;" d="M-14 494q0 -80 56.5 -137t135.5 -57h222v300h400v-300h128q120 0 205 86t85 208q0 120 -85 206.5t-205 86.5q-46 0 -90 -14q-44 97 -134.5 156.5t-200.5 59.5q-152 0 -260 -107.5t-108 -260.5q0 -25 2 -37q-66 -14 -108.5 -67.5t-42.5 -122.5zM300 200h200v300h200v-300 h200l-300 -300z" />
225
- <glyph unicode="&#xe198;" d="M-14 494q0 -80 56.5 -137t135.5 -57h8l414 414l403 -403q94 26 154.5 104t60.5 178q0 121 -85 207.5t-205 86.5q-46 0 -90 -14q-44 97 -134.5 156.5t-200.5 59.5q-152 0 -260 -107.5t-108 -260.5q0 -25 2 -37q-66 -14 -108.5 -67.5t-42.5 -122.5zM300 200l300 300 l300 -300h-200v-300h-200v300h-200z" />
226
  <glyph unicode="&#xe199;" d="M100 200h400v-155l-75 -45h350l-75 45v155h400l-270 300h170l-270 300h170l-300 333l-300 -333h170l-270 -300h170z" />
227
- <glyph unicode="&#xe200;" d="M121 700q0 -53 28.5 -97t75.5 -65q-4 -16 -4 -38q0 -74 52.5 -126.5t126.5 -52.5q56 0 100 30v-306l-75 -45h350l-75 45v306q46 -30 100 -30q74 0 126.5 52.5t52.5 126.5q0 24 -9 55q50 32 79.5 83t29.5 112q0 90 -61.5 155.5t-150.5 71.5q-26 89 -99.5 145.5 t-167.5 56.5q-116 0 -197.5 -81.5t-81.5 -197.5q0 -4 1 -12t1 -11q-14 2 -23 2q-74 0 -126.5 -52.5t-52.5 -126.5z" />
228
  </font>
229
  </defs></svg>
28
  <glyph unicode="&#x205f;" horiz-adv-x="326" />
29
  <glyph unicode="&#x20ac;" d="M100 500l100 100h113q0 47 5 100h-218l100 100h135q37 167 112 257q117 141 297 141q242 0 354 -189q60 -103 66 -209h-181q0 55 -25.5 99t-63.5 68t-75 36.5t-67 12.5q-24 0 -52.5 -10t-62.5 -32t-65.5 -67t-50.5 -107h379l-100 -100h-300q-6 -46 -6 -100h406l-100 -100 h-300q9 -74 33 -132t52.5 -91t62 -54.5t59 -29t46.5 -7.5q29 0 66 13t75 37t63.5 67.5t25.5 96.5h174q-31 -172 -128 -278q-107 -117 -274 -117q-205 0 -324 158q-36 46 -69 131.5t-45 205.5h-217z" />
30
  <glyph unicode="&#x2212;" d="M200 400h900v300h-900v-300z" />
31
+ <glyph unicode="&#x25fc;" horiz-adv-x="500" d="M0 0z" />
32
+ <glyph unicode="&#x2601;" d="M-14 494q0 -80 56.5 -137t135.5 -57h750q120 0 205 86.5t85 207.5t-85 207t-205 86q-46 0 -90 -14q-44 97 -134.5 156.5t-200.5 59.5q-152 0 -260 -107.5t-108 -260.5q0 -25 2 -37q-66 -14 -108.5 -67.5t-42.5 -122.5z" />
33
  <glyph unicode="&#x2709;" d="M0 100l400 400l200 -200l200 200l400 -400h-1200zM0 300v600l300 -300zM0 1100l600 -603l600 603h-1200zM900 600l300 300v-600z" />
34
  <glyph unicode="&#x270f;" d="M-13 -13l333 112l-223 223zM187 403l214 -214l614 614l-214 214zM887 1103l214 -214l99 92q13 13 13 32.5t-13 33.5l-153 153q-15 13 -33 13t-33 -13z" />
 
35
  <glyph unicode="&#xe001;" d="M0 1200h1200l-500 -550v-550h300v-100h-800v100h300v550z" />
36
+ <glyph unicode="&#xe002;" d="M14 84q18 -55 86 -75.5t147 5.5q65 21 109 69t44 90v606l600 155v-521q-64 16 -138 -7q-79 -26 -122.5 -83t-25.5 -111q18 -55 86 -75.5t147 4.5q70 23 111.5 63.5t41.5 95.5v881q0 10 -7 15.5t-17 2.5l-752 -193q-10 -3 -17 -12.5t-7 -19.5v-689q-64 17 -138 -7 q-79 -25 -122.5 -82t-25.5 -112z" />
37
  <glyph unicode="&#xe003;" d="M23 693q0 200 142 342t342 142t342 -142t142 -342q0 -142 -78 -261l300 -300q7 -8 7 -18t-7 -18l-109 -109q-8 -7 -18 -7t-18 7l-300 300q-119 -78 -261 -78q-200 0 -342 142t-142 342zM176 693q0 -136 97 -233t234 -97t233.5 96.5t96.5 233.5t-96.5 233.5t-233.5 96.5 t-234 -97t-97 -233z" />
38
  <glyph unicode="&#xe005;" d="M100 784q0 64 28 123t73 100.5t104.5 64t119 20.5t120 -38.5t104.5 -104.5q48 69 109.5 105t121.5 38t118.5 -20.5t102.5 -64t71 -100.5t27 -123q0 -57 -33.5 -117.5t-94 -124.5t-126.5 -127.5t-150 -152.5t-146 -174q-62 85 -145.5 174t-149.5 152.5t-126.5 127.5 t-94 124.5t-33.5 117.5z" />
39
  <glyph unicode="&#xe006;" d="M-72 800h479l146 400h2l146 -400h472l-382 -278l145 -449l-384 275l-382 -275l146 447zM168 71l2 1z" />
46
  <glyph unicode="&#xe013;" d="M29 454l419 -420l818 820l-212 212l-607 -607l-206 207z" />
47
  <glyph unicode="&#xe014;" d="M106 318l282 282l-282 282l212 212l282 -282l282 282l212 -212l-282 -282l282 -282l-212 -212l-282 282l-282 -282z" />
48
  <glyph unicode="&#xe015;" d="M23 693q0 200 142 342t342 142t342 -142t142 -342q0 -142 -78 -261l300 -300q7 -8 7 -18t-7 -18l-109 -109q-8 -7 -18 -7t-18 7l-300 300q-119 -78 -261 -78q-200 0 -342 142t-142 342zM176 693q0 -136 97 -233t234 -97t233.5 96.5t96.5 233.5t-96.5 233.5t-233.5 96.5 t-234 -97t-97 -233zM300 600v200h100v100h200v-100h100v-200h-100v-100h-200v100h-100z" />
49
+ <glyph unicode="&#xe016;" d="M23 694q0 200 142 342t342 142t342 -142t142 -342q0 -141 -78 -262l300 -299q7 -7 7 -18t-7 -18l-109 -109q-8 -8 -18 -8t-18 8l-300 300q-119 -78 -261 -78q-200 0 -342 142t-142 342zM176 694q0 -136 97 -233t234 -97t233.5 97t96.5 233t-96.5 233t-233.5 97t-234 -97 t-97 -233zM300 601h400v200h-400v-200z" />
50
  <glyph unicode="&#xe017;" d="M23 600q0 183 105 331t272 210v-166q-103 -55 -165 -155t-62 -220q0 -177 125 -302t302 -125t302 125t125 302q0 120 -62 220t-165 155v166q167 -62 272 -210t105 -331q0 -118 -45.5 -224.5t-123 -184t-184 -123t-224.5 -45.5t-224.5 45.5t-184 123t-123 184t-45.5 224.5 zM500 750q0 -21 14.5 -35.5t35.5 -14.5h100q21 0 35.5 14.5t14.5 35.5v400q0 21 -14.5 35.5t-35.5 14.5h-100q-21 0 -35.5 -14.5t-14.5 -35.5v-400z" />
51
  <glyph unicode="&#xe018;" d="M100 1h200v300h-200v-300zM400 1v500h200v-500h-200zM700 1v800h200v-800h-200zM1000 1v1200h200v-1200h-200z" />
52
  <glyph unicode="&#xe019;" d="M26 601q0 -33 6 -74l151 -38l2 -6q14 -49 38 -93l3 -5l-80 -134q45 -59 105 -105l133 81l5 -3q45 -26 94 -39l5 -2l38 -151q40 -5 74 -5q27 0 74 5l38 151l6 2q46 13 93 39l5 3l134 -81q56 44 104 105l-80 134l3 5q24 44 39 93l1 6l152 38q5 40 5 74q0 28 -5 73l-152 38 l-1 6q-16 51 -39 93l-3 5l80 134q-44 58 -104 105l-134 -81l-5 3q-45 25 -93 39l-6 1l-38 152q-40 5 -74 5q-27 0 -74 -5l-38 -152l-5 -1q-50 -14 -94 -39l-5 -3l-133 81q-59 -47 -105 -105l80 -134l-3 -5q-25 -47 -38 -93l-2 -6l-151 -38q-6 -48 -6 -73zM385 601 q0 88 63 151t152 63t152 -63t63 -151q0 -89 -63 -152t-152 -63t-152 63t-63 152z" />
58
  <glyph unicode="&#xe025;" d="M0 0v400h490l-290 300h200v500h300v-500h200l-290 -300h490v-400h-1100zM813 200h175v100h-175v-100z" />
59
  <glyph unicode="&#xe026;" d="M1 600q0 122 47.5 233t127.5 191t191 127.5t233 47.5t233 -47.5t191 -127.5t127.5 -191t47.5 -233t-47.5 -233t-127.5 -191t-191 -127.5t-233 -47.5t-233 47.5t-191 127.5t-127.5 191t-47.5 233zM188 600q0 -170 121 -291t291 -121t291 121t121 291t-121 291t-291 121 t-291 -121t-121 -291zM350 600h150v300h200v-300h150l-250 -300z" />
60
  <glyph unicode="&#xe027;" d="M4 600q0 162 80 299t217 217t299 80t299 -80t217 -217t80 -299t-80 -299t-217 -217t-299 -80t-299 80t-217 217t-80 299zM186 600q0 -171 121.5 -292.5t292.5 -121.5t292.5 121.5t121.5 292.5t-121.5 292.5t-292.5 121.5t-292.5 -121.5t-121.5 -292.5zM350 600l250 300 l250 -300h-150v-300h-200v300h-150z" />
61
+ <glyph unicode="&#xe028;" d="M0 25v475l200 700h800l199 -700l1 -475q0 -11 -7 -18t-18 -7h-1150q-11 0 -18 7t-7 18zM200 500h200l50 -200h300l50 200h200l-97 500h-606z" />
62
  <glyph unicode="&#xe029;" d="M4 600q0 162 80 299t217 217t299 80t299 -80t217 -217t80 -299t-80 -299t-217 -217t-299 -80t-299 80t-217 217t-80 299zM186 600q0 -172 121.5 -293t292.5 -121t292.5 121t121.5 293q0 171 -121.5 292.5t-292.5 121.5t-292.5 -121.5t-121.5 -292.5zM500 397v401 l297 -200z" />
63
  <glyph unicode="&#xe030;" d="M23 600q0 -118 45.5 -224.5t123 -184t184 -123t224.5 -45.5t224.5 45.5t184 123t123 184t45.5 224.5h-150q0 -177 -125 -302t-302 -125t-302 125t-125 302t125 302t302 125q136 0 246 -81l-146 -146h400v400l-145 -145q-157 122 -355 122q-118 0 -224.5 -45.5t-184 -123 t-123 -184t-45.5 -224.5z" />
64
  <glyph unicode="&#xe031;" d="M23 600q0 118 45.5 224.5t123 184t184 123t224.5 45.5q198 0 355 -122l145 145v-400h-400l147 147q-112 80 -247 80q-177 0 -302 -125t-125 -302h-150zM100 0v400h400l-147 -147q112 -80 247 -80q177 0 302 125t125 302h150q0 -118 -45.5 -224.5t-123 -184t-184 -123 t-224.5 -45.5q-198 0 -355 122z" />
71
  <glyph unicode="&#xe038;" d="M0 401v400h300l300 200v-800l-300 200h-300zM702 858l69 53q111 -135 111 -310q0 -170 -106 -303l-67 55q86 110 86 248q0 145 -93 257zM889 951l7 -8q123 -151 123 -344q0 -189 -119 -339l-7 -8l81 -66l6 8q142 178 142 405q0 230 -144 408l-6 8z" />
72
  <glyph unicode="&#xe039;" d="M0 0h500v500h-200v100h-100v-100h-200v-500zM0 600h100v100h400v100h100v100h-100v300h-500v-600zM100 100v300h300v-300h-300zM100 800v300h300v-300h-300zM200 200v100h100v-100h-100zM200 900h100v100h-100v-100zM500 500v100h300v-300h200v-100h-100v-100h-200v100 h-100v100h100v200h-200zM600 0v100h100v-100h-100zM600 1000h100v-300h200v-300h300v200h-200v100h200v500h-600v-200zM800 800v300h300v-300h-300zM900 0v100h300v-100h-300zM900 900v100h100v-100h-100zM1100 200v100h100v-100h-100z" />
73
  <glyph unicode="&#xe040;" d="M0 200h100v1000h-100v-1000zM100 0v100h300v-100h-300zM200 200v1000h100v-1000h-100zM500 0v91h100v-91h-100zM500 200v1000h200v-1000h-200zM700 0v91h100v-91h-100zM800 200v1000h100v-1000h-100zM900 0v91h200v-91h-200zM1000 200v1000h200v-1000h-200z" />
74
+ <glyph unicode="&#xe041;" d="M0 700l1 475q0 10 7.5 17.5t17.5 7.5h474l700 -700l-500 -500zM148 953q0 -42 29 -71q30 -30 71.5 -30t71.5 30q29 29 29 71t-29 71q-30 30 -71.5 30t-71.5 -30q-29 -29 -29 -71z" />
75
+ <glyph unicode="&#xe042;" d="M1 700l1 475q0 11 7 18t18 7h474l700 -700l-500 -500zM148 953q0 -42 30 -71q29 -30 71 -30t71 30q30 29 30 71t-30 71q-29 30 -71 30t-71 -30q-30 -29 -30 -71zM701 1200h100l700 -700l-500 -500l-50 50l450 450z" />
76
  <glyph unicode="&#xe043;" d="M100 0v1025l175 175h925v-1000l-100 -100v1000h-750l-100 -100h750v-1000h-900z" />
77
  <glyph unicode="&#xe044;" d="M200 0l450 444l450 -443v1150q0 20 -14.5 35t-35.5 15h-800q-21 0 -35.5 -15t-14.5 -35v-1151z" />
78
  <glyph unicode="&#xe045;" d="M0 100v700h200l100 -200h600l100 200h200v-700h-200v200h-800v-200h-200zM253 829l40 -124h592l62 124l-94 346q-2 11 -10 18t-18 7h-450q-10 0 -18 -7t-10 -18zM281 24l38 152q2 10 11.5 17t19.5 7h500q10 0 19.5 -7t11.5 -17l38 -152q2 -10 -3.5 -17t-15.5 -7h-600 q-10 0 -15.5 7t-3.5 17z" />
79
  <glyph unicode="&#xe046;" d="M0 200q0 -41 29.5 -70.5t70.5 -29.5h1000q41 0 70.5 29.5t29.5 70.5v600q0 41 -29.5 70.5t-70.5 29.5h-150q-4 8 -11.5 21.5t-33 48t-53 61t-69 48t-83.5 21.5h-200q-41 0 -82 -20.5t-70 -50t-52 -59t-34 -50.5l-12 -20h-150q-41 0 -70.5 -29.5t-29.5 -70.5v-600z M356 500q0 100 72 172t172 72t172 -72t72 -172t-72 -172t-172 -72t-172 72t-72 172zM494 500q0 -44 31 -75t75 -31t75 31t31 75t-31 75t-75 31t-75 -31t-31 -75zM900 700v100h100v-100h-100z" />
80
  <glyph unicode="&#xe047;" d="M53 0h365v66q-41 0 -72 11t-49 38t1 71l92 234h391l82 -222q16 -45 -5.5 -88.5t-74.5 -43.5v-66h417v66q-34 1 -74 43q-18 19 -33 42t-21 37l-6 13l-385 998h-93l-399 -1006q-24 -48 -52 -75q-12 -12 -33 -25t-36 -20l-15 -7v-66zM416 521l178 457l46 -140l116 -317h-340 z" />
81
+ <glyph unicode="&#xe048;" d="M100 0v89q41 7 70.5 32.5t29.5 65.5v827q0 28 -1 39.5t-5.5 26t-15.5 21t-29 14t-49 14.5v71l471 -1q120 0 213 -88t93 -228q0 -55 -11.5 -101.5t-28 -74t-33.5 -47.5t-28 -28l-12 -7q8 -3 21.5 -9t48 -31.5t60.5 -58t47.5 -91.5t21.5 -129q0 -84 -59 -156.5t-142 -111 t-162 -38.5h-500zM400 200h161q89 0 153 48.5t64 132.5q0 90 -62.5 154.5t-156.5 64.5h-159v-400zM400 700h139q76 0 130 61.5t54 138.5q0 82 -84 130.5t-239 48.5v-379z" />
82
  <glyph unicode="&#xe049;" d="M200 0v57q77 7 134.5 40.5t65.5 80.5l173 849q10 56 -10 74t-91 37q-6 1 -10.5 2.5t-9.5 2.5v57h425l2 -57q-33 -8 -62 -25.5t-46 -37t-29.5 -38t-17.5 -30.5l-5 -12l-128 -825q-10 -52 14 -82t95 -36v-57h-500z" />
83
  <glyph unicode="&#xe050;" d="M-75 200h75v800h-75l125 167l125 -167h-75v-800h75l-125 -167zM300 900v300h150h700h150v-300h-50q0 29 -8 48.5t-18.5 30t-33.5 15t-39.5 5.5t-50.5 1h-200v-850l100 -50v-100h-400v100l100 50v850h-200q-34 0 -50.5 -1t-40 -5.5t-33.5 -15t-18.5 -30t-8.5 -48.5h-49z " />
84
  <glyph unicode="&#xe051;" d="M33 51l167 125v-75h800v75l167 -125l-167 -125v75h-800v-75zM100 901v300h150h700h150v-300h-50q0 29 -8 48.5t-18 30t-33.5 15t-40 5.5t-50.5 1h-200v-650l100 -50v-100h-400v100l100 50v650h-200q-34 0 -50.5 -1t-39.5 -5.5t-33.5 -15t-18.5 -30t-8 -48.5h-50z" />
93
  <glyph unicode="&#xe060;" d="M0 44v1012q0 18 13 31t31 13h1112q19 0 31.5 -13t12.5 -31v-1012q0 -18 -12.5 -31t-31.5 -13h-1112q-18 0 -31 13t-13 31zM100 263l247 182l298 -131l-74 156l293 318l236 -288v500h-1000v-737zM208 750q0 56 39 95t95 39t95 -39t39 -95t-39 -95t-95 -39t-95 39t-39 95z " />
94
  <glyph unicode="&#xe062;" d="M148 745q0 124 60.5 231.5t165 172t226.5 64.5q123 0 227 -63t164.5 -169.5t60.5 -229.5t-73 -272q-73 -114 -166.5 -237t-150.5 -189l-57 -66q-10 9 -27 26t-66.5 70.5t-96 109t-104 135.5t-100.5 155q-63 139 -63 262zM342 772q0 -107 75.5 -182.5t181.5 -75.5 q107 0 182.5 75.5t75.5 182.5t-75.5 182t-182.5 75t-182 -75.5t-75 -181.5z" />
95
  <glyph unicode="&#xe063;" d="M1 600q0 122 47.5 233t127.5 191t191 127.5t233 47.5t233 -47.5t191 -127.5t127.5 -191t47.5 -233t-47.5 -233t-127.5 -191t-191 -127.5t-233 -47.5t-233 47.5t-191 127.5t-127.5 191t-47.5 233zM173 600q0 -177 125.5 -302t301.5 -125v854q-176 0 -301.5 -125 t-125.5 -302z" />
96
+ <glyph unicode="&#xe064;" d="M117 406q0 94 34 186t88.5 172.5t112 159t115 177t87.5 194.5q21 -71 57.5 -142.5t76 -130.5t83 -118.5t82 -117t70 -116t50 -125.5t18.5 -136q0 -89 -39 -165.5t-102 -126.5t-140 -79.5t-156 -33.5q-114 6 -211.5 53t-161.5 139t-64 210zM243 414q14 -82 59.5 -136 t136.5 -80l16 98q-7 6 -18 17t-34 48t-33 77q-15 73 -14 143.5t10 122.5l9 51q-92 -110 -119.5 -185t-12.5 -156z" />
97
  <glyph unicode="&#xe065;" d="M0 400v300q0 165 117.5 282.5t282.5 117.5q366 -6 397 -14l-186 -186h-311q-41 0 -70.5 -29.5t-29.5 -70.5v-500q0 -41 29.5 -70.5t70.5 -29.5h500q41 0 70.5 29.5t29.5 70.5v125l200 200v-225q0 -165 -117.5 -282.5t-282.5 -117.5h-300q-165 0 -282.5 117.5 t-117.5 282.5zM436 341l161 50l412 412l-114 113l-405 -405zM995 1015l113 -113l113 113l-21 85l-92 28z" />
98
  <glyph unicode="&#xe066;" d="M0 400v300q0 165 117.5 282.5t282.5 117.5h261l2 -80q-133 -32 -218 -120h-145q-41 0 -70.5 -29.5t-29.5 -70.5v-500q0 -41 29.5 -70.5t70.5 -29.5h500q41 0 70.5 29.5t29.5 70.5l200 153v-53q0 -165 -117.5 -282.5t-282.5 -117.5h-300q-165 0 -282.5 117.5t-117.5 282.5 zM423 524q30 38 81.5 64t103 35.5t99 14t77.5 3.5l29 -1v-209l360 324l-359 318v-216q-7 0 -19 -1t-48 -8t-69.5 -18.5t-76.5 -37t-76.5 -59t-62 -88t-39.5 -121.5z" />
99
+ <glyph unicode="&#xe067;" d="M0 400v300q0 165 117.5 282.5t282.5 117.5h300q61 0 127 -23l-178 -177h-349q-41 0 -70.5 -29.5t-29.5 -70.5v-500q0 -41 29.5 -70.5t70.5 -29.5h500q41 0 70.5 29.5t29.5 70.5v69l200 200v-169q0 -165 -117.5 -282.5t-282.5 -117.5h-300q-165 0 -282.5 117.5 t-117.5 282.5zM342 632l283 -284l567 567l-137 137l-430 -431l-146 147z" />
100
  <glyph unicode="&#xe068;" d="M0 603l300 296v-198h200v200h-200l300 300l295 -300h-195v-200h200v198l300 -296l-300 -300v198h-200v-200h195l-295 -300l-300 300h200v200h-200v-198z" />
101
  <glyph unicode="&#xe069;" d="M200 50v1000q0 21 14.5 35.5t35.5 14.5h100q21 0 35.5 -14.5t14.5 -35.5v-437l500 487v-1100l-500 488v-438q0 -21 -14.5 -35.5t-35.5 -14.5h-100q-21 0 -35.5 14.5t-14.5 35.5z" />
102
  <glyph unicode="&#xe070;" d="M0 50v1000q0 21 14.5 35.5t35.5 14.5h100q21 0 35.5 -14.5t14.5 -35.5v-437l500 487v-487l500 487v-1100l-500 488v-488l-500 488v-438q0 -21 -14.5 -35.5t-35.5 -14.5h-100q-21 0 -35.5 14.5t-14.5 35.5z" />
110
  <glyph unicode="&#xe078;" d="M100 250v100q0 21 14.5 35.5t35.5 14.5h1000q21 0 35.5 -14.5t14.5 -35.5v-100q0 -21 -14.5 -35.5t-35.5 -14.5h-1000q-21 0 -35.5 14.5t-14.5 35.5zM100 500h1100l-550 564z" />
111
  <glyph unicode="&#xe079;" d="M185 599l592 -592l240 240l-353 353l353 353l-240 240z" />
112
  <glyph unicode="&#xe080;" d="M272 194l353 353l-353 353l241 240l572 -571l21 -22l-1 -1v-1l-592 -591z" />
113
+ <glyph unicode="&#xe081;" d="M3 600q0 162 80 299.5t217.5 217.5t299.5 80t299.5 -80t217.5 -217.5t80 -299.5t-80 -299.5t-217.5 -217.5t-299.5 -80t-299.5 80t-217.5 217.5t-80 299.5zM300 500h200v-200h200v200h200v200h-200v200h-200v-200h-200v-200z" />
114
+ <glyph unicode="&#xe082;" d="M3 600q0 162 80 299.5t217.5 217.5t299.5 80t299.5 -80t217.5 -217.5t80 -299.5t-80 -299.5t-217.5 -217.5t-299.5 -80t-299.5 80t-217.5 217.5t-80 299.5zM300 500h600v200h-600v-200z" />
115
+ <glyph unicode="&#xe083;" d="M3 600q0 162 80 299.5t217.5 217.5t299.5 80t299.5 -80t217.5 -217.5t80 -299.5t-80 -299.5t-217.5 -217.5t-299.5 -80t-299.5 80t-217.5 217.5t-80 299.5zM246 459l213 -213l141 142l141 -142l213 213l-142 141l142 141l-213 212l-141 -141l-141 142l-212 -213l141 -141 z" />
116
  <glyph unicode="&#xe084;" d="M3 600q0 162 80 299.5t217.5 217.5t299.5 80t299.5 -80t217.5 -217.5t80 -299.5t-80 -299.5t-217.5 -217.5t-299.5 -80t-299.5 80t-217.5 217.5t-80 299.5zM270 551l276 -277l411 411l-175 174l-236 -236l-102 102z" />
117
+ <glyph unicode="&#xe085;" d="M3 600q0 162 80 299.5t217.5 217.5t299.5 80t299.5 -80t217.5 -217.5t80 -299.5t-80 -299.5t-217.5 -217.5t-299.5 -80t-299.5 80t-217.5 217.5t-80 299.5zM364 700h143q4 0 11.5 -1t11 -1t6.5 3t3 9t1 11t3.5 8.5t3.5 6t5.5 4t6.5 2.5t9 1.5t9 0.5h11.5h12.5 q19 0 30 -10t11 -26q0 -22 -4 -28t-27 -22q-5 -1 -12.5 -3t-27 -13.5t-34 -27t-26.5 -46t-11 -68.5h200q5 3 14 8t31.5 25.5t39.5 45.5t31 69t14 94q0 51 -17.5 89t-42 58t-58.5 32t-58.5 15t-51.5 3q-50 0 -90.5 -12t-75 -38.5t-53.5 -74.5t-19 -114zM500 300h200v100h-200 v-100z" />
118
+ <glyph unicode="&#xe086;" d="M3 600q0 162 80 299.5t217.5 217.5t299.5 80t299.5 -80t217.5 -217.5t80 -299.5t-80 -299.5t-217.5 -217.5t-299.5 -80t-299.5 80t-217.5 217.5t-80 299.5zM400 300h400v100h-100v300h-300v-100h100v-200h-100v-100zM500 800h200v100h-200v-100z" />
119
+ <glyph unicode="&#xe087;" d="M0 500v200h195q31 125 98.5 199.5t206.5 100.5v200h200v-200q54 -20 113 -60t112.5 -105.5t71.5 -134.5h203v-200h-203q-25 -102 -116.5 -186t-180.5 -117v-197h-200v197q-140 27 -208 102.5t-98 200.5h-194zM290 500q24 -73 79.5 -127.5t130.5 -78.5v206h200v-206 q149 48 201 206h-201v200h200q-25 74 -75.5 127t-124.5 77v-204h-200v203q-75 -23 -130 -77t-79 -126h209v-200h-210z" />
120
  <glyph unicode="&#xe088;" d="M4 600q0 162 80 299t217 217t299 80t299 -80t217 -217t80 -299t-80 -299t-217 -217t-299 -80t-299 80t-217 217t-80 299zM186 600q0 -171 121.5 -292.5t292.5 -121.5t292.5 121.5t121.5 292.5t-121.5 292.5t-292.5 121.5t-292.5 -121.5t-121.5 -292.5zM356 465l135 135 l-135 135l109 109l135 -135l135 135l109 -109l-135 -135l135 -135l-109 -109l-135 135l-135 -135z" />
121
  <glyph unicode="&#xe089;" d="M4 600q0 162 80 299t217 217t299 80t299 -80t217 -217t80 -299t-80 -299t-217 -217t-299 -80t-299 80t-217 217t-80 299zM186 600q0 -171 121.5 -292.5t292.5 -121.5t292.5 121.5t121.5 292.5t-121.5 292.5t-292.5 121.5t-292.5 -121.5t-121.5 -292.5zM322 537l141 141 l87 -87l204 205l142 -142l-346 -345z" />
122
  <glyph unicode="&#xe090;" d="M4 600q0 162 80 299t217 217t299 80t299 -80t217 -217t80 -299t-80 -299t-217 -217t-299 -80t-299 80t-217 217t-80 299zM186 600q0 -115 62 -215l568 567q-100 62 -216 62q-171 0 -292.5 -121.5t-121.5 -292.5zM391 245q97 -59 209 -59q171 0 292.5 121.5t121.5 292.5 q0 112 -59 209z" />
127
  <glyph unicode="&#xe095;" d="M0 200q6 132 41 238.5t103.5 193t184 138t271.5 59.5v271l600 -453l-600 -448v301q-95 -2 -183 -20t-170 -52t-147 -92.5t-100 -135.5z" />
128
  <glyph unicode="&#xe096;" d="M0 0v400l129 -129l294 294l142 -142l-294 -294l129 -129h-400zM635 777l142 -142l294 294l129 -129v400h-400l129 -129z" />
129
  <glyph unicode="&#xe097;" d="M34 176l295 295l-129 129h400v-400l-129 130l-295 -295zM600 600v400l129 -129l295 295l142 -141l-295 -295l129 -130h-400z" />
130
+ <glyph unicode="&#xe101;" d="M23 600q0 118 45.5 224.5t123 184t184 123t224.5 45.5t224.5 -45.5t184 -123t123 -184t45.5 -224.5t-45.5 -224.5t-123 -184t-184 -123t-224.5 -45.5t-224.5 45.5t-184 123t-123 184t-45.5 224.5zM456 851l58 -302q4 -20 21.5 -34.5t37.5 -14.5h54q20 0 37.5 14.5 t21.5 34.5l58 302q4 20 -8 34.5t-32 14.5h-207q-21 0 -33 -14.5t-8 -34.5zM500 300h200v100h-200v-100z" />
131
+ <glyph unicode="&#xe102;" d="M0 800h100v-200h400v300h200v-300h400v200h100v100h-111q1 1 1 6.5t-1.5 15t-3.5 17.5l-34 172q-11 39 -41.5 63t-69.5 24q-32 0 -61 -17l-239 -144q-22 -13 -40 -35q-19 24 -40 36l-238 144q-33 18 -62 18q-39 0 -69.5 -23t-40.5 -61l-35 -177q-2 -8 -3 -18t-1 -15v-6 h-111v-100zM100 0h400v400h-400v-400zM200 900q-3 0 14 48t36 96l18 47l213 -191h-281zM700 0v400h400v-400h-400zM731 900l202 197q5 -12 12 -32.5t23 -64t25 -72t7 -28.5h-269z" />
132
  <glyph unicode="&#xe103;" d="M0 -22v143l216 193q-9 53 -13 83t-5.5 94t9 113t38.5 114t74 124q47 60 99.5 102.5t103 68t127.5 48t145.5 37.5t184.5 43.5t220 58.5q0 -189 -22 -343t-59 -258t-89 -181.5t-108.5 -120t-122 -68t-125.5 -30t-121.5 -1.5t-107.5 12.5t-87.5 17t-56.5 7.5l-99 -55z M238.5 300.5q19.5 -6.5 86.5 76.5q55 66 367 234q70 38 118.5 69.5t102 79t99 111.5t86.5 148q22 50 24 60t-6 19q-7 5 -17 5t-26.5 -14.5t-33.5 -39.5q-35 -51 -113.5 -108.5t-139.5 -89.5l-61 -32q-369 -197 -458 -401q-48 -111 -28.5 -117.5z" />
133
  <glyph unicode="&#xe104;" d="M111 408q0 -33 5 -63q9 -56 44 -119.5t105 -108.5q31 -21 64 -16t62 23.5t57 49.5t48 61.5t35 60.5q32 66 39 184.5t-13 157.5q79 -80 122 -164t26 -184q-5 -33 -20.5 -69.5t-37.5 -80.5q-10 -19 -14.5 -29t-12 -26t-9 -23.5t-3 -19t2.5 -15.5t11 -9.5t19.5 -5t30.5 2.5 t42 8q57 20 91 34t87.5 44.5t87 64t65.5 88.5t47 122q38 172 -44.5 341.5t-246.5 278.5q22 -44 43 -129q39 -159 -32 -154q-15 2 -33 9q-79 33 -120.5 100t-44 175.5t48.5 257.5q-13 -8 -34 -23.5t-72.5 -66.5t-88.5 -105.5t-60 -138t-8 -166.5q2 -12 8 -41.5t8 -43t6 -39.5 t3.5 -39.5t-1 -33.5t-6 -31.5t-13.5 -24t-21 -20.5t-31 -12q-38 -10 -67 13t-40.5 61.5t-15 81.5t10.5 75q-52 -46 -83.5 -101t-39 -107t-7.5 -85z" />
134
  <glyph unicode="&#xe105;" d="M-61 600l26 40q6 10 20 30t49 63.5t74.5 85.5t97 90t116.5 83.5t132.5 59t145.5 23.5t145.5 -23.5t132.5 -59t116.5 -83.5t97 -90t74.5 -85.5t49 -63.5t20 -30l26 -40l-26 -40q-6 -10 -20 -30t-49 -63.5t-74.5 -85.5t-97 -90t-116.5 -83.5t-132.5 -59t-145.5 -23.5 t-145.5 23.5t-132.5 59t-116.5 83.5t-97 90t-74.5 85.5t-49 63.5t-20 30zM120 600q7 -10 40.5 -58t56 -78.5t68 -77.5t87.5 -75t103 -49.5t125 -21.5t123.5 20t100.5 45.5t85.5 71.5t66.5 75.5t58 81.5t47 66q-1 1 -28.5 37.5t-42 55t-43.5 53t-57.5 63.5t-58.5 54 q49 -74 49 -163q0 -124 -88 -212t-212 -88t-212 88t-88 212q0 85 46 158q-102 -87 -226 -258zM377 656q49 -124 154 -191l105 105q-37 24 -75 72t-57 84l-20 36z" />
135
  <glyph unicode="&#xe106;" d="M-61 600l26 40q6 10 20 30t49 63.5t74.5 85.5t97 90t116.5 83.5t132.5 59t145.5 23.5q61 0 121 -17l37 142h148l-314 -1200h-148l37 143q-82 21 -165 71.5t-140 102t-109.5 112t-72 88.5t-29.5 43zM120 600q210 -282 393 -336l37 141q-107 18 -178.5 101.5t-71.5 193.5 q0 85 46 158q-102 -87 -226 -258zM377 656q49 -124 154 -191l47 47l23 87q-30 28 -59 69t-44 68l-14 26zM780 161l38 145q22 15 44.5 34t46 44t40.5 44t41 50.5t33.5 43.5t33 44t24.5 34q-97 127 -140 175l39 146q67 -54 131.5 -125.5t87.5 -103.5t36 -52l26 -40l-26 -40 q-7 -12 -25.5 -38t-63.5 -79.5t-95.5 -102.5t-124 -100t-146.5 -79z" />
136
+ <glyph unicode="&#xe107;" d="M-97.5 34q13.5 -34 50.5 -34h1294q37 0 50.5 35.5t-7.5 67.5l-642 1056q-20 34 -48 36.5t-48 -29.5l-642 -1066q-21 -32 -7.5 -66zM155 200l445 723l445 -723h-345v100h-200v-100h-345zM500 600l100 -300l100 300v100h-200v-100z" />
137
+ <glyph unicode="&#xe108;" d="M100 262v41q0 20 11 44.5t26 38.5l363 325v339q0 62 44 106t106 44t106 -44t44 -106v-339l363 -325q15 -14 26 -38.5t11 -44.5v-41q0 -20 -12 -26.5t-29 5.5l-359 249v-263q100 -91 100 -113v-64q0 -20 -13 -28.5t-32 0.5l-94 78h-222l-94 -78q-19 -9 -32 -0.5t-13 28.5 v64q0 22 100 113v263l-359 -249q-17 -12 -29 -5.5t-12 26.5z" />
138
  <glyph unicode="&#xe109;" d="M0 50q0 -20 14.5 -35t35.5 -15h1000q21 0 35.5 15t14.5 35v750h-1100v-750zM0 900h1100v150q0 21 -14.5 35.5t-35.5 14.5h-150v100h-100v-100h-500v100h-100v-100h-150q-21 0 -35.5 -14.5t-14.5 -35.5v-150zM100 100v100h100v-100h-100zM100 300v100h100v-100h-100z M100 500v100h100v-100h-100zM300 100v100h100v-100h-100zM300 300v100h100v-100h-100zM300 500v100h100v-100h-100zM500 100v100h100v-100h-100zM500 300v100h100v-100h-100zM500 500v100h100v-100h-100zM700 100v100h100v-100h-100zM700 300v100h100v-100h-100zM700 500 v100h100v-100h-100zM900 100v100h100v-100h-100zM900 300v100h100v-100h-100zM900 500v100h100v-100h-100z" />
139
  <glyph unicode="&#xe110;" d="M0 200v200h259l600 600h241v198l300 -295l-300 -300v197h-159l-600 -600h-341zM0 800h259l122 -122l141 142l-181 180h-341v-200zM678 381l141 142l122 -123h159v198l300 -295l-300 -300v197h-241z" />
140
  <glyph unicode="&#xe111;" d="M0 400v600q0 41 29.5 70.5t70.5 29.5h1000q41 0 70.5 -29.5t29.5 -70.5v-600q0 -41 -29.5 -70.5t-70.5 -29.5h-596l-304 -300v300h-100q-41 0 -70.5 29.5t-29.5 70.5z" />
148
  <glyph unicode="&#xe119;" d="M302 300h198v600h-198l298 300l298 -300h-198v-600h198l-298 -300z" />
149
  <glyph unicode="&#xe120;" d="M0 600l300 298v-198h600v198l300 -298l-300 -297v197h-600v-197z" />
150
  <glyph unicode="&#xe121;" d="M0 100v100q0 41 29.5 70.5t70.5 29.5h1000q41 0 70.5 -29.5t29.5 -70.5v-100q0 -41 -29.5 -70.5t-70.5 -29.5h-1000q-41 0 -70.5 29.5t-29.5 70.5zM31 400l172 739q5 22 23 41.5t38 19.5h672q19 0 37.5 -22.5t23.5 -45.5l172 -732h-1138zM800 100h100v100h-100v-100z M1000 100h100v100h-100v-100z" />
151
+ <glyph unicode="&#xe122;" d="M-101 600v50q0 24 25 49t50 38l25 13v-250l-11 5.5t-24 14t-30 21.5t-24 27.5t-11 31.5zM100 500v250v8v8v7t0.5 7t1.5 5.5t2 5t3 4t4.5 3.5t6 1.5t7.5 0.5h200l675 250v-850l-675 200h-38l47 -276q2 -12 -3 -17.5t-11 -6t-21 -0.5h-8h-83q-20 0 -34.5 14t-18.5 35 q-55 337 -55 351zM1100 200v850q0 21 14.5 35.5t35.5 14.5q20 0 35 -14.5t15 -35.5v-850q0 -20 -15 -35t-35 -15q-21 0 -35.5 15t-14.5 35z" />
152
+ <glyph unicode="&#xe123;" d="M74 350q0 21 13.5 35.5t33.5 14.5h18l117 173l63 327q15 77 76 140t144 83l-18 32q-6 19 3 32t29 13h94q20 0 29 -10.5t3 -29.5q-18 -36 -18 -37q83 -19 144 -82.5t76 -140.5l63 -327l118 -173h17q20 0 33.5 -14.5t13.5 -35.5q0 -20 -13 -40t-31 -27q-8 -3 -23 -8.5 t-65 -20t-103 -25t-132.5 -19.5t-158.5 -9q-125 0 -245.5 20.5t-178.5 40.5l-58 20q-18 7 -31 27.5t-13 40.5zM497 110q12 -49 40 -79.5t63 -30.5t63 30.5t39 79.5q-48 -6 -102 -6t-103 6z" />
153
  <glyph unicode="&#xe124;" d="M21 445l233 -45l-78 -224l224 78l45 -233l155 179l155 -179l45 233l224 -78l-78 224l234 45l-180 155l180 156l-234 44l78 225l-224 -78l-45 233l-155 -180l-155 180l-45 -233l-224 78l78 -225l-233 -44l179 -156z" />
154
+ <glyph unicode="&#xe125;" d="M0 200h200v600h-200v-600zM300 275q0 -75 100 -75h61q124 -100 139 -100h250q46 0 83 57l238 344q29 31 29 74v100q0 44 -30.5 84.5t-69.5 40.5h-328q28 118 28 125v150q0 44 -30.5 84.5t-69.5 40.5h-50q-27 0 -51 -20t-38 -48l-96 -198l-145 -196q-20 -26 -20 -63v-400z M400 300v375l150 213l100 212h50v-175l-50 -225h450v-125l-250 -375h-214l-136 100h-100z" />
155
+ <glyph unicode="&#xe126;" d="M0 400v600h200v-600h-200zM300 525v400q0 75 100 75h61q124 100 139 100h250q46 0 83 -57l238 -344q29 -31 29 -74v-100q0 -44 -30.5 -84.5t-69.5 -40.5h-328q28 -118 28 -125v-150q0 -44 -30.5 -84.5t-69.5 -40.5h-50q-27 0 -51 20t-38 48l-96 198l-145 196 q-20 26 -20 63zM400 525l150 -212l100 -213h50v175l-50 225h450v125l-250 375h-214l-136 -100h-100v-375z" />
156
  <glyph unicode="&#xe127;" d="M8 200v600h200v-600h-200zM308 275v525q0 17 14 35.5t28 28.5l14 9l362 230q14 6 25 6q17 0 29 -12l109 -112q14 -14 14 -34q0 -18 -11 -32l-85 -121h302q85 0 138.5 -38t53.5 -110t-54.5 -111t-138.5 -39h-107l-130 -339q-7 -22 -20.5 -41.5t-28.5 -19.5h-341 q-7 0 -90 81t-83 94zM408 289l100 -89h293l131 339q6 21 19.5 41t28.5 20h203q16 0 25 15t9 36q0 20 -9 34.5t-25 14.5h-457h-6.5h-7.5t-6.5 0.5t-6 1t-5 1.5t-5.5 2.5t-4 4t-4 5.5q-5 12 -5 20q0 14 10 27l147 183l-86 83l-339 -236v-503z" />
157
+ <glyph unicode="&#xe128;" d="M-101 651q0 72 54 110t139 38l302 -1l-85 121q-11 16 -11 32q0 21 14 34l109 113q13 12 29 12q11 0 25 -6l365 -230q7 -4 17 -10.5t26.5 -26t16.5 -36.5v-526q0 -13 -86 -93.5t-94 -80.5h-341q-16 0 -29.5 20t-19.5 41l-130 339h-107q-84 0 -139 39t-55 111zM-1 601h222 q15 0 28.5 -20.5t19.5 -40.5l131 -339h293l107 89v502l-343 237l-87 -83l145 -184q10 -11 10 -26q0 -11 -5 -20q-1 -3 -3.5 -5.5l-4 -4t-5 -2.5t-5.5 -1.5t-6.5 -1t-6.5 -0.5h-7.5h-6.5h-476v-100zM1000 201v600h200v-600h-200z" />
158
+ <glyph unicode="&#xe129;" d="M97 719l230 -363q4 -6 10.5 -15.5t26 -25t36.5 -15.5h525q13 0 94 83t81 90v342q0 15 -20 28.5t-41 19.5l-339 131v106q0 84 -39 139t-111 55t-110 -53.5t-38 -138.5v-302l-121 84q-15 12 -33.5 11.5t-32.5 -13.5l-112 -110q-22 -22 -6 -53zM172 739l83 86l183 -146 q22 -18 47 -5q3 1 5.5 3.5l4 4t2.5 5t1.5 5.5t1 6.5t0.5 6.5v7.5v6.5v456q0 22 25 31t50 -0.5t25 -30.5v-202q0 -16 20 -29.5t41 -19.5l339 -130v-294l-89 -100h-503zM400 0v200h600v-200h-600z" />
159
+ <glyph unicode="&#xe130;" d="M2 585q-16 -31 6 -53l112 -110q13 -13 32 -13.5t34 10.5l121 85q0 -51 -0.5 -153.5t-0.5 -148.5q0 -84 38.5 -138t110.5 -54t111 55t39 139v106l339 131q20 6 40.5 19.5t20.5 28.5v342q0 7 -81 90t-94 83h-525q-17 0 -35.5 -14t-28.5 -28l-10 -15zM77 565l236 339h503 l89 -100v-294l-340 -130q-20 -6 -40 -20t-20 -29v-202q0 -22 -25 -31t-50 0t-25 31v456v14.5t-1.5 11.5t-5 12t-9.5 7q-24 13 -46 -5l-184 -146zM305 1104v200h600v-200h-600z" />
160
+ <glyph unicode="&#xe131;" d="M5 597q0 122 47.5 232.5t127.5 190.5t190.5 127.5t232.5 47.5q162 0 299.5 -80t217.5 -218t80 -300t-80 -299.5t-217.5 -217.5t-299.5 -80t-300 80t-218 217.5t-80 299.5zM298 701l2 -201h300l-2 -194l402 294l-402 298v-197h-300z" />
161
+ <glyph unicode="&#xe132;" d="M0 597q0 122 47.5 232.5t127.5 190.5t190.5 127.5t231.5 47.5q122 0 232.5 -47.5t190.5 -127.5t127.5 -190.5t47.5 -232.5q0 -162 -80 -299.5t-218 -217.5t-300 -80t-299.5 80t-217.5 217.5t-80 299.5zM200 600l402 -294l-2 194h300l2 201h-300v197z" />
162
+ <glyph unicode="&#xe133;" d="M5 597q0 122 47.5 232.5t127.5 190.5t190.5 127.5t232.5 47.5q162 0 299.5 -80t217.5 -218t80 -300t-80 -299.5t-217.5 -217.5t-299.5 -80t-300 80t-218 217.5t-80 299.5zM300 600h200v-300h200v300h200l-300 400z" />
163
+ <glyph unicode="&#xe134;" d="M5 597q0 122 47.5 232.5t127.5 190.5t190.5 127.5t232.5 47.5q162 0 299.5 -80t217.5 -218t80 -300t-80 -299.5t-217.5 -217.5t-299.5 -80t-300 80t-218 217.5t-80 299.5zM300 600l300 -400l300 400h-200v300h-200v-300h-200z" />
164
+ <glyph unicode="&#xe135;" d="M5 597q0 122 47.5 232.5t127.5 190.5t190.5 127.5t232.5 47.5q121 0 231.5 -47.5t190.5 -127.5t127.5 -190.5t47.5 -232.5q0 -162 -80 -299.5t-217.5 -217.5t-299.5 -80t-300 80t-218 217.5t-80 299.5zM254 780q-8 -33 5.5 -92.5t7.5 -87.5q0 -9 17 -44t16 -60 q12 0 23 -5.5t23 -15t20 -13.5q24 -12 108 -42q22 -8 53 -31.5t59.5 -38.5t57.5 -11q8 -18 -15 -55t-20 -57q42 -71 87 -80q0 -6 -3 -15.5t-3.5 -14.5t4.5 -17q104 -3 221 112q30 29 47 47t34.5 49t20.5 62q-14 9 -37 9.5t-36 7.5q-14 7 -49 15t-52 19q-9 0 -39.5 -0.5 t-46.5 -1.5t-39 -6.5t-39 -16.5q-50 -35 -66 -12q-4 2 -3.5 25.5t0.5 25.5q-6 13 -26.5 17t-24.5 7q2 22 -2 41t-16.5 28t-38.5 -20q-23 -25 -42 4q-19 28 -8 58q6 16 22 22q6 -1 26 -1.5t33.5 -4t19.5 -13.5q12 -19 32 -37.5t34 -27.5l14 -8q0 3 9.5 39.5t5.5 57.5 q-4 23 14.5 44.5t22.5 31.5q5 14 10 35t8.5 31t15.5 22.5t34 21.5q-6 18 10 37q8 0 23.5 -1.5t24.5 -1.5t20.5 4.5t20.5 15.5q-10 23 -30.5 42.5t-38 30t-49 26.5t-43.5 23q11 39 2 44q31 -13 58 -14.5t39 3.5l11 4q7 36 -16.5 53.5t-64.5 28.5t-56 23q-19 -3 -37 0 q-15 -12 -36.5 -21t-34.5 -12t-44 -8t-39 -6q-15 -3 -45.5 0.5t-45.5 -2.5q-21 -7 -52 -26.5t-34 -34.5q-3 -11 6.5 -22.5t8.5 -18.5q-3 -34 -27.5 -90.5t-29.5 -79.5zM518 916q3 12 16 30t16 25q10 -10 18.5 -10t14 6t14.5 14.5t16 12.5q0 -24 17 -66.5t17 -43.5 q-9 2 -31 5t-36 5t-32 8t-30 14zM692 1003h1h-1z" />
165
  <glyph unicode="&#xe136;" d="M0 164.5q0 21.5 15 37.5l600 599q-33 101 6 201.5t135 154.5q164 92 306 -9l-259 -138l145 -232l251 126q13 -175 -151 -267q-123 -70 -253 -23l-596 -596q-15 -16 -36.5 -16t-36.5 16l-111 110q-15 15 -15 36.5z" />
166
  <glyph unicode="&#xe137;" horiz-adv-x="1220" d="M0 196v100q0 41 29.5 70.5t70.5 29.5h1000q41 0 70.5 -29.5t29.5 -70.5v-100q0 -41 -29.5 -70.5t-70.5 -29.5h-1000q-41 0 -70.5 29.5t-29.5 70.5zM0 596v100q0 41 29.5 70.5t70.5 29.5h1000q41 0 70.5 -29.5t29.5 -70.5v-100q0 -41 -29.5 -70.5t-70.5 -29.5h-1000 q-41 0 -70.5 29.5t-29.5 70.5zM0 996v100q0 41 29.5 70.5t70.5 29.5h1000q41 0 70.5 -29.5t29.5 -70.5v-100q0 -41 -29.5 -70.5t-70.5 -29.5h-1000q-41 0 -70.5 29.5t-29.5 70.5zM600 596h500v100h-500v-100zM800 196h300v100h-300v-100zM900 996h200v100h-200v-100z" />
167
  <glyph unicode="&#xe138;" d="M100 1100v100h1000v-100h-1000zM150 1000h900l-350 -500v-300l-200 -200v500z" />
168
  <glyph unicode="&#xe139;" d="M0 200v200h1200v-200q0 -41 -29.5 -70.5t-70.5 -29.5h-1000q-41 0 -70.5 29.5t-29.5 70.5zM0 500v400q0 41 29.5 70.5t70.5 29.5h300v100q0 41 29.5 70.5t70.5 29.5h200q41 0 70.5 -29.5t29.5 -70.5v-100h300q41 0 70.5 -29.5t29.5 -70.5v-400h-500v100h-200v-100h-500z M500 1000h200v100h-200v-100z" />
169
  <glyph unicode="&#xe140;" d="M0 0v400l129 -129l200 200l142 -142l-200 -200l129 -129h-400zM0 800l129 129l200 -200l142 142l-200 200l129 129h-400v-400zM729 329l142 142l200 -200l129 129v-400h-400l129 129zM729 871l200 200l-129 129h400v-400l-129 129l-200 -200z" />
170
+ <glyph unicode="&#xe141;" d="M0 596q0 162 80 299t217 217t299 80t299 -80t217 -217t80 -299t-80 -299t-217 -217t-299 -80t-299 80t-217 217t-80 299zM182 596q0 -172 121.5 -293t292.5 -121t292.5 121t121.5 293q0 171 -121.5 292.5t-292.5 121.5t-292.5 -121.5t-121.5 -292.5zM291 655 q0 23 15.5 38.5t38.5 15.5t39 -16t16 -38q0 -23 -16 -39t-39 -16q-22 0 -38 16t-16 39zM400 850q0 22 16 38.5t39 16.5q22 0 38 -16t16 -39t-16 -39t-38 -16q-23 0 -39 16.5t-16 38.5zM514 609q0 32 20.5 56.5t51.5 29.5l122 126l1 1q-9 14 -9 28q0 22 16 38.5t39 16.5 q22 0 38 -16t16 -39t-16 -39t-38 -16q-14 0 -29 10l-55 -145q17 -22 17 -51q0 -36 -25.5 -61.5t-61.5 -25.5t-61.5 25.5t-25.5 61.5zM800 655q0 22 16 38t39 16t38.5 -15.5t15.5 -38.5t-16 -39t-38 -16q-23 0 -39 16t-16 39z" />
171
+ <glyph unicode="&#xe142;" d="M-40 375q-13 -95 35 -173q35 -57 94 -89t129 -32q63 0 119 28q33 16 65 40.5t52.5 45.5t59.5 64q40 44 57 61l394 394q35 35 47 84t-3 96q-27 87 -117 104q-20 2 -29 2q-46 0 -78.5 -16.5t-67.5 -51.5l-389 -396l-7 -7l69 -67l377 373q20 22 39 38q23 23 50 23 q38 0 53 -36q16 -39 -20 -75l-547 -547q-52 -52 -125 -52q-55 0 -100 33t-54 96q-5 35 2.5 66t31.5 63t42 50t56 54q24 21 44 41l348 348q52 52 82.5 79.5t84 54t107.5 26.5q25 0 48 -4q95 -17 154 -94.5t51 -175.5q-7 -101 -98 -192l-252 -249l-253 -256l7 -7l69 -60 l517 511q67 67 95 157t11 183q-16 87 -67 154t-130 103q-69 33 -152 33q-107 0 -197 -55q-40 -24 -111 -95l-512 -512q-68 -68 -81 -163z" />
172
+ <glyph unicode="&#xe143;" d="M80 784q0 131 98.5 229.5t230.5 98.5q143 0 241 -129q103 129 246 129q129 0 226 -98.5t97 -229.5q0 -46 -17.5 -91t-61 -99t-77 -89.5t-104.5 -105.5q-197 -191 -293 -322l-17 -23l-16 23q-43 58 -100 122.5t-92 99.5t-101 100q-71 70 -104.5 105.5t-77 89.5t-61 99 t-17.5 91zM250 784q0 -27 30.5 -70t61.5 -75.5t95 -94.5l22 -22q93 -90 190 -201q82 92 195 203l12 12q64 62 97.5 97t64.5 79t31 72q0 71 -48 119.5t-105 48.5q-74 0 -132 -83l-118 -171l-114 174q-51 80 -123 80q-60 0 -109.5 -49.5t-49.5 -118.5z" />
173
+ <glyph unicode="&#xe144;" d="M57 353q0 -95 66 -159l141 -142q68 -66 159 -66q93 0 159 66l283 283q66 66 66 159t-66 159l-141 141q-8 9 -19 17l-105 -105l212 -212l-389 -389l-247 248l95 95l-18 18q-46 45 -75 101l-55 -55q-66 -66 -66 -159zM269 706q0 -93 66 -159l141 -141q7 -7 19 -17l105 105 l-212 212l389 389l247 -247l-95 -96l18 -17q47 -49 77 -100l29 29q35 35 62.5 88t27.5 96q0 93 -66 159l-141 141q-66 66 -159 66q-95 0 -159 -66l-283 -283q-66 -64 -66 -159z" />
174
  <glyph unicode="&#xe145;" d="M200 100v953q0 21 30 46t81 48t129 38t163 15t162 -15t127 -38t79 -48t29 -46v-953q0 -41 -29.5 -70.5t-70.5 -29.5h-600q-41 0 -70.5 29.5t-29.5 70.5zM300 300h600v700h-600v-700zM496 150q0 -43 30.5 -73.5t73.5 -30.5t73.5 30.5t30.5 73.5t-30.5 73.5t-73.5 30.5 t-73.5 -30.5t-30.5 -73.5z" />
175
  <glyph unicode="&#xe146;" d="M0 0l303 380l207 208l-210 212h300l267 279l-35 36q-15 14 -15 35t15 35q14 15 35 15t35 -15l283 -282q15 -15 15 -36t-15 -35q-14 -15 -35 -15t-35 15l-36 35l-279 -267v-300l-212 210l-208 -207z" />
176
+ <glyph unicode="&#xe148;" d="M295 433h139q5 -77 48.5 -126.5t117.5 -64.5v335q-6 1 -15.5 4t-11.5 3q-46 14 -79 26.5t-72 36t-62.5 52t-40 72.5t-16.5 99q0 92 44 159.5t109 101t144 40.5v78h100v-79q38 -4 72.5 -13.5t75.5 -31.5t71 -53.5t51.5 -84t24.5 -118.5h-159q-8 72 -35 109.5t-101 50.5 v-307l64 -14q34 -7 64 -16.5t70 -31.5t67.5 -52t47.5 -80.5t20 -112.5q0 -139 -89 -224t-244 -96v-77h-100v78q-152 17 -237 104q-40 40 -52.5 93.5t-15.5 139.5zM466 889q0 -29 8 -51t16.5 -34t29.5 -22.5t31 -13.5t38 -10q7 -2 11 -3v274q-61 -8 -97.5 -37.5t-36.5 -102.5 zM700 237q170 18 170 151q0 64 -44 99.5t-126 60.5v-311z" />
177
+ <glyph unicode="&#xe149;" d="M100 600v100h166q-24 49 -44 104q-10 26 -14.5 55.5t-3 72.5t25 90t68.5 87q97 88 263 88q129 0 230 -89t101 -208h-153q0 52 -34 89.5t-74 51.5t-76 14q-37 0 -79 -14.5t-62 -35.5q-41 -44 -41 -101q0 -28 16.5 -69.5t28 -62.5t41.5 -72h241v-100h-197q8 -50 -2.5 -115 t-31.5 -94q-41 -59 -99 -113q35 11 84 18t70 7q33 1 103 -16t103 -17q76 0 136 30l50 -147q-41 -25 -80.5 -36.5t-59 -13t-61.5 -1.5q-23 0 -128 33t-155 29q-39 -4 -82 -17t-66 -25l-24 -11l-55 145l16.5 11t15.5 10t13.5 9.5t14.5 12t14.5 14t17.5 18.5q48 55 54 126.5 t-30 142.5h-221z" />
178
  <glyph unicode="&#xe150;" d="M2 300l298 -300l298 300h-198v900h-200v-900h-198zM602 900l298 300l298 -300h-198v-900h-200v900h-198z" />
179
  <glyph unicode="&#xe151;" d="M2 300h198v900h200v-900h198l-298 -300zM700 0v200h100v-100h200v-100h-300zM700 400v100h300v-200h-99v-100h-100v100h99v100h-200zM700 700v500h300v-500h-100v100h-100v-100h-100zM801 900h100v200h-100v-200z" />
180
  <glyph unicode="&#xe152;" d="M2 300h198v900h200v-900h198l-298 -300zM700 0v500h300v-500h-100v100h-100v-100h-100zM700 700v200h100v-100h200v-100h-300zM700 1100v100h300v-200h-99v-100h-100v100h99v100h-200zM801 200h100v200h-100v-200z" />
187
  <glyph unicode="&#xe159;" d="M0 400v300q0 163 117.5 281.5t282.5 118.5h300q163 0 281.5 -119t118.5 -281v-300q0 -165 -117.5 -282.5t-282.5 -117.5h-300q-165 0 -282.5 117.5t-117.5 282.5zM200 300q0 -41 29.5 -70.5t70.5 -29.5h500q41 0 70.5 29.5t29.5 70.5v500q0 41 -29.5 70.5t-70.5 29.5 h-500q-41 0 -70.5 -29.5t-29.5 -70.5v-500zM300 700l250 -333l250 333h-500z" />
188
  <glyph unicode="&#xe160;" d="M0 400v300q0 165 117.5 282.5t282.5 117.5h300q165 0 282.5 -117.5t117.5 -282.5v-300q0 -162 -118.5 -281t-281.5 -119h-300q-165 0 -282.5 118.5t-117.5 281.5zM200 300q0 -41 29.5 -70.5t70.5 -29.5h500q41 0 70.5 29.5t29.5 70.5v500q0 41 -29.5 70.5t-70.5 29.5 h-500q-41 0 -70.5 -29.5t-29.5 -70.5v-500zM300 400h500l-250 333z" />
189
  <glyph unicode="&#xe161;" d="M0 400v300h300v200l400 -350l-400 -350v200h-300zM500 0v200h500q41 0 70.5 29.5t29.5 70.5v500q0 41 -29.5 70.5t-70.5 29.5h-500v200h400q165 0 282.5 -117.5t117.5 -282.5v-300q0 -165 -117.5 -282.5t-282.5 -117.5h-400z" />
190
+ <glyph unicode="&#xe162;" d="M217 519q8 -19 31 -19h302q-155 -438 -160 -458q-5 -21 4 -32l9 -8h9q14 0 26 15q11 13 274.5 321.5t264.5 308.5q14 19 5 36q-8 17 -31 17l-301 -1q1 4 78 219.5t79 227.5q2 15 -5 27l-9 9h-9q-15 0 -25 -16q-4 -6 -98 -111.5t-228.5 -257t-209.5 -237.5q-16 -19 -6 -41 z" />
191
  <glyph unicode="&#xe163;" d="M0 400q0 -165 117.5 -282.5t282.5 -117.5h300q47 0 100 15v185h-500q-41 0 -70.5 29.5t-29.5 70.5v500q0 41 29.5 70.5t70.5 29.5h500v185q-14 4 -114 7.5t-193 5.5l-93 2q-165 0 -282.5 -117.5t-117.5 -282.5v-300zM600 400v300h300v200l400 -350l-400 -350v200h-300z " />
192
  <glyph unicode="&#xe164;" d="M0 400q0 -165 117.5 -282.5t282.5 -117.5h300q163 0 281.5 117.5t118.5 282.5v98l-78 73l-122 -123v-148q0 -41 -29.5 -70.5t-70.5 -29.5h-500q-41 0 -70.5 29.5t-29.5 70.5v500q0 41 29.5 70.5t70.5 29.5h156l118 122l-74 78h-100q-165 0 -282.5 -117.5t-117.5 -282.5 v-300zM496 709l353 342l-149 149h500v-500l-149 149l-342 -353z" />
193
  <glyph unicode="&#xe165;" d="M4 600q0 162 80 299t217 217t299 80t299 -80t217 -217t80 -299t-80 -299t-217 -217t-299 -80t-299 80t-217 217t-80 299zM186 600q0 -171 121.5 -292.5t292.5 -121.5t292.5 121.5t121.5 292.5t-121.5 292.5t-292.5 121.5t-292.5 -121.5t-121.5 -292.5zM406 600 q0 80 57 137t137 57t137 -57t57 -137t-57 -137t-137 -57t-137 57t-57 137z" />
194
  <glyph unicode="&#xe166;" d="M0 0v275q0 11 7 18t18 7h1048q11 0 19 -7.5t8 -17.5v-275h-1100zM100 800l445 -500l450 500h-295v400h-300v-400h-300zM900 150h100v50h-100v-50z" />
195
  <glyph unicode="&#xe167;" d="M0 0v275q0 11 7 18t18 7h1048q11 0 19 -7.5t8 -17.5v-275h-1100zM100 700h300v-300h300v300h295l-445 500zM900 150h100v50h-100v-50z" />
196
  <glyph unicode="&#xe168;" d="M0 0v275q0 11 7 18t18 7h1048q11 0 19 -7.5t8 -17.5v-275h-1100zM100 705l305 -305l596 596l-154 155l-442 -442l-150 151zM900 150h100v50h-100v-50z" />
197
+ <glyph unicode="&#xe169;" d="M0 0v275q0 11 7 18t18 7h1048q11 0 19 -7.5t8 -17.5v-275h-1100zM100 988l97 -98l212 213l-97 97zM200 400l697 1l3 699l-250 -239l-149 149l-212 -212l149 -149zM900 150h100v50h-100v-50z" />
198
+ <glyph unicode="&#xe170;" d="M0 0v275q0 11 7 18t18 7h1048q11 0 19 -7.5t8 -17.5v-275h-1100zM200 612l212 -212l98 97l-213 212zM300 1200l239 -250l-149 -149l212 -212l149 148l249 -237l-1 697zM900 150h100v50h-100v-50z" />
199
  <glyph unicode="&#xe171;" d="M23 415l1177 784v-1079l-475 272l-310 -393v416h-392zM494 210l672 938l-672 -712v-226z" />
200
  <glyph unicode="&#xe172;" d="M0 150v1000q0 20 14.5 35t35.5 15h250v-300h500v300h100l200 -200v-850q0 -21 -15 -35.5t-35 -14.5h-150v400h-700v-400h-150q-21 0 -35.5 14.5t-14.5 35.5zM600 1000h100v200h-100v-200z" />
201
  <glyph unicode="&#xe173;" d="M0 150v1000q0 20 14.5 35t35.5 15h250v-300h500v300h100l200 -200v-218l-276 -275l-120 120l-126 -127h-378v-400h-150q-21 0 -35.5 14.5t-14.5 35.5zM581 306l123 123l120 -120l353 352l123 -123l-475 -476zM600 1000h100v200h-100v-200z" />
204
  <glyph unicode="&#xe176;" d="M0 150v1000q0 20 14.5 35t35.5 15h250v-300h500v300h100l200 -200v-402l-200 200l-298 -298h-402v-400h-150q-21 0 -35.5 14.5t-14.5 35.5zM600 300h200v-300h200v300h200l-300 300zM600 1000v200h100v-200h-100z" />
205
  <glyph unicode="&#xe177;" d="M0 250q0 -21 14.5 -35.5t35.5 -14.5h1100q21 0 35.5 14.5t14.5 35.5v550h-1200v-550zM0 900h1200v150q0 21 -14.5 35.5t-35.5 14.5h-1100q-21 0 -35.5 -14.5t-14.5 -35.5v-150zM100 300v200h400v-200h-400z" />
206
  <glyph unicode="&#xe178;" d="M0 400l300 298v-198h400v-200h-400v-198zM100 800v200h100v-200h-100zM300 800v200h100v-200h-100zM500 800v200h400v198l300 -298l-300 -298v198h-400zM800 300v200h100v-200h-100zM1000 300h100v200h-100v-200z" />
207
+ <glyph unicode="&#xe179;" d="M100 700v400l50 100l50 -100v-300h100v300l50 100l50 -100v-300h100v300l50 100l50 -100v-400l-100 -203v-447q0 -21 -14.5 -35.5t-35.5 -14.5h-200q-21 0 -35.5 14.5t-14.5 35.5v447zM800 597q0 -29 10.5 -55.5t25 -43t29 -28.5t25.5 -18l10 -5v-397q0 -21 14.5 -35.5 t35.5 -14.5h200q21 0 35.5 14.5t14.5 35.5v1106q0 31 -18 40.5t-44 -7.5l-276 -116q-25 -17 -43.5 -51.5t-18.5 -65.5v-359z" />
208
  <glyph unicode="&#xe180;" d="M100 0h400v56q-75 0 -87.5 6t-12.5 44v394h500v-394q0 -38 -12.5 -44t-87.5 -6v-56h400v56q-4 0 -11 0.5t-24 3t-30 7t-24 15t-11 24.5v888q0 22 25 34.5t50 13.5l25 2v56h-400v-56q75 0 87.5 -6t12.5 -44v-394h-500v394q0 38 12.5 44t87.5 6v56h-400v-56q4 0 11 -0.5 t24 -3t30 -7t24 -15t11 -24.5v-888q0 -22 -25 -34.5t-50 -13.5l-25 -2v-56z" />
209
  <glyph unicode="&#xe181;" d="M0 300q0 -41 29.5 -70.5t70.5 -29.5h300q41 0 70.5 29.5t29.5 70.5v500q0 41 -29.5 70.5t-70.5 29.5h-300q-41 0 -70.5 -29.5t-29.5 -70.5v-500zM100 100h400l200 200h105l295 98v-298h-425l-100 -100h-375zM100 300v200h300v-200h-300zM100 600v200h300v-200h-300z M100 1000h400l200 -200v-98l295 98h105v200h-425l-100 100h-375zM700 402v163l400 133v-163z" />
210
+ <glyph unicode="&#xe182;" d="M16.5 974.5q0.5 -21.5 16 -90t46.5 -140t104 -177.5t175 -208q103 -103 207.5 -176t180 -103.5t137 -47t92.5 -16.5l31 1l163 162q17 18 13.5 41t-22.5 37l-192 136q-19 14 -45 12t-42 -19l-118 -118q-142 101 -268 227t-227 268l118 118q17 17 20 41.5t-11 44.5 l-139 194q-14 19 -36.5 22t-40.5 -14l-162 -162q-1 -11 -0.5 -32.5z" />
211
+ <glyph unicode="&#xe183;" d="M0 50v212q0 20 10.5 45.5t24.5 39.5l365 303v50q0 4 1 10.5t12 22.5t30 28.5t60 23t97 10.5t97 -10t60 -23.5t30 -27.5t12 -24l1 -10v-50l365 -303q14 -14 24.5 -39.5t10.5 -45.5v-212q0 -21 -14.5 -35.5t-35.5 -14.5h-1100q-20 0 -35 14.5t-15 35.5zM0 712 q0 -21 14.5 -33.5t34.5 -8.5l202 33q20 4 34.5 21t14.5 38v146q141 24 300 24t300 -24v-146q0 -21 14.5 -38t34.5 -21l202 -33q20 -4 34.5 8.5t14.5 33.5v200q-6 8 -19 20.5t-63 45t-112 57t-171 45t-235 20.5q-92 0 -175 -10.5t-141.5 -27t-108.5 -36.5t-81.5 -40 t-53.5 -36.5t-31 -27.5l-9 -10v-200z" />
212
  <glyph unicode="&#xe184;" d="M100 0v100h1100v-100h-1100zM175 200h950l-125 150v250l100 100v400h-100v-200h-100v200h-200v-200h-100v200h-200v-200h-100v200h-100v-400l100 -100v-250z" />
213
  <glyph unicode="&#xe185;" d="M100 0h300v400q0 41 -29.5 70.5t-70.5 29.5h-100q-41 0 -70.5 -29.5t-29.5 -70.5v-400zM500 0v1000q0 41 29.5 70.5t70.5 29.5h100q41 0 70.5 -29.5t29.5 -70.5v-1000h-300zM900 0v700q0 41 29.5 70.5t70.5 29.5h100q41 0 70.5 -29.5t29.5 -70.5v-700h-300z" />
214
  <glyph unicode="&#xe186;" d="M-100 300v500q0 124 88 212t212 88h700q124 0 212 -88t88 -212v-500q0 -124 -88 -212t-212 -88h-700q-124 0 -212 88t-88 212zM100 200h900v700h-900v-700zM200 300h300v300h-200v100h200v100h-300v-300h200v-100h-200v-100zM600 300h200v100h100v300h-100v100h-200v-500 zM700 400v300h100v-300h-100z" />
221
  <glyph unicode="&#xe193;" d="M-100 300v500q0 124 88 212t212 88h700q124 0 212 -88t88 -212v-500q0 -124 -88 -212t-212 -88h-700q-124 0 -212 88t-88 212zM100 200h900v700h-900v-700zM200 700v100h300v-300h-99v-100h-100v100h99v200h-200zM201 300v100h100v-100h-100zM601 300v100h100v-100h-100z M700 700v100h200v-500h-100v400h-100z" />
222
  <glyph unicode="&#xe194;" d="M4 600q0 162 80 299t217 217t299 80t299 -80t217 -217t80 -299t-80 -299t-217 -217t-299 -80t-299 80t-217 217t-80 299zM186 600q0 -171 121.5 -292.5t292.5 -121.5t292.5 121.5t121.5 292.5t-121.5 292.5t-292.5 121.5t-292.5 -121.5t-121.5 -292.5zM400 500v200 l100 100h300v-100h-300v-200h300v-100h-300z" />
223
  <glyph unicode="&#xe195;" d="M0 600q0 162 80 299t217 217t299 80t299 -80t217 -217t80 -299t-80 -299t-217 -217t-299 -80t-299 80t-217 217t-80 299zM182 600q0 -171 121.5 -292.5t292.5 -121.5t292.5 121.5t121.5 292.5t-121.5 292.5t-292.5 121.5t-292.5 -121.5t-121.5 -292.5zM400 400v400h300 l100 -100v-100h-100v100h-200v-100h200v-100h-200v-100h-100zM700 400v100h100v-100h-100z" />
224
+ <glyph unicode="&#xe197;" d="M-14 494q0 -80 56.5 -137t135.5 -57h222v300h400v-300h128q120 0 205 86.5t85 207.5t-85 207t-205 86q-46 0 -90 -14q-44 97 -134.5 156.5t-200.5 59.5q-152 0 -260 -107.5t-108 -260.5q0 -25 2 -37q-66 -14 -108.5 -67.5t-42.5 -122.5zM300 200h200v300h200v-300h200 l-300 -300z" />
225
+ <glyph unicode="&#xe198;" d="M-14 494q0 -80 56.5 -137t135.5 -57h8l414 414l403 -403q94 26 154.5 104.5t60.5 178.5q0 120 -85 206.5t-205 86.5q-46 0 -90 -14q-44 97 -134.5 156.5t-200.5 59.5q-152 0 -260 -107.5t-108 -260.5q0 -25 2 -37q-66 -14 -108.5 -67.5t-42.5 -122.5zM300 200l300 300 l300 -300h-200v-300h-200v300h-200z" />
226
  <glyph unicode="&#xe199;" d="M100 200h400v-155l-75 -45h350l-75 45v155h400l-270 300h170l-270 300h170l-300 333l-300 -333h170l-270 -300h170z" />
227
+ <glyph unicode="&#xe200;" d="M121 700q0 -53 28.5 -97t75.5 -65q-4 -16 -4 -38q0 -74 52.5 -126.5t126.5 -52.5q56 0 100 30v-306l-75 -45h350l-75 45v306q46 -30 100 -30q74 0 126.5 52.5t52.5 126.5q0 24 -9 55q50 32 79.5 83t29.5 112q0 90 -61.5 155.5t-150.5 71.5q-26 89 -99.5 145.5 t-167.5 56.5q-116 0 -197.5 -81.5t-81.5 -197.5q0 -4 1 -11.5t1 -11.5q-14 2 -23 2q-74 0 -126.5 -52.5t-52.5 -126.5z" />
228
  </font>
229
  </defs></svg>
assets/bootstrap/fonts/glyphicons-halflings-regular.ttf CHANGED
Binary file
assets/bootstrap/fonts/glyphicons-halflings-regular.woff CHANGED
Binary file
assets/bootstrap/js/bootstrap.js CHANGED
@@ -1,13 +1,13 @@
1
  /*!
2
- * Bootstrap v3.1.0 (http://getbootstrap.com)
3
  * Copyright 2011-2014 Twitter, Inc.
4
  * Licensed under MIT (https://github.com/twbs/bootstrap/blob/master/LICENSE)
5
  */
6
 
7
- if (typeof jQuery === 'undefined') { throw new Error('Bootstrap requires jQuery') }
8
 
9
  /* ========================================================================
10
- * Bootstrap: transition.js v3.1.0
11
  * http://getbootstrap.com/javascript/#transitions
12
  * ========================================================================
13
  * Copyright 2011-2014 Twitter, Inc.
@@ -25,10 +25,10 @@ if (typeof jQuery === 'undefined') { throw new Error('Bootstrap requires jQuery'
25
  var el = document.createElement('bootstrap')
26
 
27
  var transEndEventNames = {
28
- 'WebkitTransition' : 'webkitTransitionEnd',
29
- 'MozTransition' : 'transitionend',
30
- 'OTransition' : 'oTransitionEnd otransitionend',
31
- 'transition' : 'transitionend'
32
  }
33
 
34
  for (var name in transEndEventNames) {
@@ -42,8 +42,9 @@ if (typeof jQuery === 'undefined') { throw new Error('Bootstrap requires jQuery'
42
 
43
  // http://blog.alexmaccaw.com/css-transitions
44
  $.fn.emulateTransitionEnd = function (duration) {
45
- var called = false, $el = this
46
- $(this).one($.support.transition.end, function () { called = true })
 
47
  var callback = function () { if (!called) $($el).trigger($.support.transition.end) }
48
  setTimeout(callback, duration)
49
  return this
@@ -51,12 +52,22 @@ if (typeof jQuery === 'undefined') { throw new Error('Bootstrap requires jQuery'
51
 
52
  $(function () {
53
  $.support.transition = transitionEnd()
 
 
 
 
 
 
 
 
 
 
54
  })
55
 
56
  }(jQuery);
57
 
58
  /* ========================================================================
59
- * Bootstrap: alert.js v3.1.0
60
  * http://getbootstrap.com/javascript/#alerts
61
  * ========================================================================
62
  * Copyright 2011-2014 Twitter, Inc.
@@ -75,6 +86,8 @@ if (typeof jQuery === 'undefined') { throw new Error('Bootstrap requires jQuery'
75
  $(el).on('click', dismiss, this.close)
76
  }
77
 
 
 
78
  Alert.prototype.close = function (e) {
79
  var $this = $(this)
80
  var selector = $this.attr('data-target')
@@ -99,12 +112,13 @@ if (typeof jQuery === 'undefined') { throw new Error('Bootstrap requires jQuery'
99
  $parent.removeClass('in')
100
 
101
  function removeElement() {
102
- $parent.trigger('closed.bs.alert').remove()
 
103
  }
104
 
105
  $.support.transition && $parent.hasClass('fade') ?
106
  $parent
107
- .one($.support.transition.end, removeElement)
108
  .emulateTransitionEnd(150) :
109
  removeElement()
110
  }
@@ -113,9 +127,7 @@ if (typeof jQuery === 'undefined') { throw new Error('Bootstrap requires jQuery'
113
  // ALERT PLUGIN DEFINITION
114
  // =======================
115
 
116
- var old = $.fn.alert
117
-
118
- $.fn.alert = function (option) {
119
  return this.each(function () {
120
  var $this = $(this)
121
  var data = $this.data('bs.alert')
@@ -125,6 +137,9 @@ if (typeof jQuery === 'undefined') { throw new Error('Bootstrap requires jQuery'
125
  })
126
  }
127
 
 
 
 
128
  $.fn.alert.Constructor = Alert
129
 
130
 
@@ -145,7 +160,7 @@ if (typeof jQuery === 'undefined') { throw new Error('Bootstrap requires jQuery'
145
  }(jQuery);
146
 
147
  /* ========================================================================
148
- * Bootstrap: button.js v3.1.0
149
  * http://getbootstrap.com/javascript/#buttons
150
  * ========================================================================
151
  * Copyright 2011-2014 Twitter, Inc.
@@ -165,6 +180,8 @@ if (typeof jQuery === 'undefined') { throw new Error('Bootstrap requires jQuery'
165
  this.isLoading = false
166
  }
167
 
 
 
168
  Button.DEFAULTS = {
169
  loadingText: 'loading...'
170
  }
@@ -177,9 +194,9 @@ if (typeof jQuery === 'undefined') { throw new Error('Bootstrap requires jQuery'
177
 
178
  state = state + 'Text'
179
 
180
- if (!data.resetText) $el.data('resetText', $el[val]())
181
 
182
- $el[val](data[state] || this.options[state])
183
 
184
  // push to event loop to allow forms to submit
185
  setTimeout($.proxy(function () {
@@ -213,9 +230,7 @@ if (typeof jQuery === 'undefined') { throw new Error('Bootstrap requires jQuery'
213
  // BUTTON PLUGIN DEFINITION
214
  // ========================
215
 
216
- var old = $.fn.button
217
-
218
- $.fn.button = function (option) {
219
  return this.each(function () {
220
  var $this = $(this)
221
  var data = $this.data('bs.button')
@@ -228,6 +243,9 @@ if (typeof jQuery === 'undefined') { throw new Error('Bootstrap requires jQuery'
228
  })
229
  }
230
 
 
 
 
231
  $.fn.button.Constructor = Button
232
 
233
 
@@ -243,17 +261,17 @@ if (typeof jQuery === 'undefined') { throw new Error('Bootstrap requires jQuery'
243
  // BUTTON DATA-API
244
  // ===============
245
 
246
- $(document).on('click.bs.button.data-api', '[data-toggle^=button]', function (e) {
247
  var $btn = $(e.target)
248
  if (!$btn.hasClass('btn')) $btn = $btn.closest('.btn')
249
- $btn.button('toggle')
250
  e.preventDefault()
251
  })
252
 
253
  }(jQuery);
254
 
255
  /* ========================================================================
256
- * Bootstrap: carousel.js v3.1.0
257
  * http://getbootstrap.com/javascript/#carousel
258
  * ========================================================================
259
  * Copyright 2011-2014 Twitter, Inc.
@@ -268,7 +286,7 @@ if (typeof jQuery === 'undefined') { throw new Error('Bootstrap requires jQuery'
268
  // =========================
269
 
270
  var Carousel = function (element, options) {
271
- this.$element = $(element)
272
  this.$indicators = this.$element.find('.carousel-indicators')
273
  this.options = options
274
  this.paused =
@@ -278,17 +296,29 @@ if (typeof jQuery === 'undefined') { throw new Error('Bootstrap requires jQuery'
278
  this.$items = null
279
 
280
  this.options.pause == 'hover' && this.$element
281
- .on('mouseenter', $.proxy(this.pause, this))
282
- .on('mouseleave', $.proxy(this.cycle, this))
283
  }
284
 
 
 
285
  Carousel.DEFAULTS = {
286
  interval: 5000,
287
  pause: 'hover',
288
  wrap: true
289
  }
290
 
291
- Carousel.prototype.cycle = function (e) {
 
 
 
 
 
 
 
 
 
 
292
  e || (this.paused = false)
293
 
294
  this.interval && clearInterval(this.interval)
@@ -300,20 +330,18 @@ if (typeof jQuery === 'undefined') { throw new Error('Bootstrap requires jQuery'
300
  return this
301
  }
302
 
303
- Carousel.prototype.getActiveIndex = function () {
304
- this.$active = this.$element.find('.item.active')
305
- this.$items = this.$active.parent().children()
306
-
307
- return this.$items.index(this.$active)
308
  }
309
 
310
  Carousel.prototype.to = function (pos) {
311
  var that = this
312
- var activeIndex = this.getActiveIndex()
313
 
314
  if (pos > (this.$items.length - 1) || pos < 0) return
315
 
316
- if (this.sliding) return this.$element.one('slid.bs.carousel', function () { that.to(pos) })
317
  if (activeIndex == pos) return this.pause().cycle()
318
 
319
  return this.slide(pos > activeIndex ? 'next' : 'prev', $(this.$items[pos]))
@@ -355,11 +383,15 @@ if (typeof jQuery === 'undefined') { throw new Error('Bootstrap requires jQuery'
355
  $next = this.$element.find('.item')[fallback]()
356
  }
357
 
358
- if ($next.hasClass('active')) return this.sliding = false
359
 
360
- var e = $.Event('slide.bs.carousel', { relatedTarget: $next[0], direction: direction })
361
- this.$element.trigger(e)
362
- if (e.isDefaultPrevented()) return
 
 
 
 
363
 
364
  this.sliding = true
365
 
@@ -367,30 +399,31 @@ if (typeof jQuery === 'undefined') { throw new Error('Bootstrap requires jQuery'
367
 
368
  if (this.$indicators.length) {
369
  this.$indicators.find('.active').removeClass('active')
370
- this.$element.one('slid.bs.carousel', function () {
371
- var $nextIndicator = $(that.$indicators.children()[that.getActiveIndex()])
372
- $nextIndicator && $nextIndicator.addClass('active')
373
- })
374
  }
375
 
 
376
  if ($.support.transition && this.$element.hasClass('slide')) {
377
  $next.addClass(type)
378
  $next[0].offsetWidth // force reflow
379
  $active.addClass(direction)
380
  $next.addClass(direction)
381
  $active
382
- .one($.support.transition.end, function () {
383
  $next.removeClass([type, direction].join(' ')).addClass('active')
384
  $active.removeClass(['active', direction].join(' '))
385
  that.sliding = false
386
- setTimeout(function () { that.$element.trigger('slid.bs.carousel') }, 0)
 
 
387
  })
388
  .emulateTransitionEnd($active.css('transition-duration').slice(0, -1) * 1000)
389
  } else {
390
  $active.removeClass('active')
391
  $next.addClass('active')
392
  this.sliding = false
393
- this.$element.trigger('slid.bs.carousel')
394
  }
395
 
396
  isCycling && this.cycle()
@@ -402,9 +435,7 @@ if (typeof jQuery === 'undefined') { throw new Error('Bootstrap requires jQuery'
402
  // CAROUSEL PLUGIN DEFINITION
403
  // ==========================
404
 
405
- var old = $.fn.carousel
406
-
407
- $.fn.carousel = function (option) {
408
  return this.each(function () {
409
  var $this = $(this)
410
  var data = $this.data('bs.carousel')
@@ -418,6 +449,9 @@ if (typeof jQuery === 'undefined') { throw new Error('Bootstrap requires jQuery'
418
  })
419
  }
420
 
 
 
 
421
  $.fn.carousel.Constructor = Carousel
422
 
423
 
@@ -434,15 +468,17 @@ if (typeof jQuery === 'undefined') { throw new Error('Bootstrap requires jQuery'
434
  // =================
435
 
436
  $(document).on('click.bs.carousel.data-api', '[data-slide], [data-slide-to]', function (e) {
437
- var $this = $(this), href
438
- var $target = $($this.attr('data-target') || (href = $this.attr('href')) && href.replace(/.*(?=#[^\s]+$)/, '')) //strip for ie7
 
 
439
  var options = $.extend({}, $target.data(), $this.data())
440
  var slideIndex = $this.attr('data-slide-to')
441
  if (slideIndex) options.interval = false
442
 
443
- $target.carousel(options)
444
 
445
- if (slideIndex = $this.attr('data-slide-to')) {
446
  $target.data('bs.carousel').to(slideIndex)
447
  }
448
 
@@ -452,14 +488,14 @@ if (typeof jQuery === 'undefined') { throw new Error('Bootstrap requires jQuery'
452
  $(window).on('load', function () {
453
  $('[data-ride="carousel"]').each(function () {
454
  var $carousel = $(this)
455
- $carousel.carousel($carousel.data())
456
  })
457
  })
458
 
459
  }(jQuery);
460
 
461
  /* ========================================================================
462
- * Bootstrap: collapse.js v3.1.0
463
  * http://getbootstrap.com/javascript/#collapse
464
  * ========================================================================
465
  * Copyright 2011-2014 Twitter, Inc.
@@ -482,6 +518,8 @@ if (typeof jQuery === 'undefined') { throw new Error('Bootstrap requires jQuery'
482
  if (this.options.toggle) this.toggle()
483
  }
484
 
 
 
485
  Collapse.DEFAULTS = {
486
  toggle: true
487
  }
@@ -503,7 +541,7 @@ if (typeof jQuery === 'undefined') { throw new Error('Bootstrap requires jQuery'
503
  if (actives && actives.length) {
504
  var hasData = actives.data('bs.collapse')
505
  if (hasData && hasData.transitioning) return
506
- actives.collapse('hide')
507
  hasData || actives.data('bs.collapse', null)
508
  }
509
 
@@ -511,18 +549,17 @@ if (typeof jQuery === 'undefined') { throw new Error('Bootstrap requires jQuery'
511
 
512
  this.$element
513
  .removeClass('collapse')
514
- .addClass('collapsing')
515
- [dimension](0)
516
 
517
  this.transitioning = 1
518
 
519
  var complete = function () {
520
  this.$element
521
  .removeClass('collapsing')
522
- .addClass('collapse in')
523
- [dimension]('auto')
524
  this.transitioning = 0
525
- this.$element.trigger('shown.bs.collapse')
 
526
  }
527
 
528
  if (!$.support.transition) return complete.call(this)
@@ -530,9 +567,8 @@ if (typeof jQuery === 'undefined') { throw new Error('Bootstrap requires jQuery'
530
  var scrollSize = $.camelCase(['scroll', dimension].join('-'))
531
 
532
  this.$element
533
- .one($.support.transition.end, $.proxy(complete, this))
534
- .emulateTransitionEnd(350)
535
- [dimension](this.$element[0][scrollSize])
536
  }
537
 
538
  Collapse.prototype.hide = function () {
@@ -544,9 +580,7 @@ if (typeof jQuery === 'undefined') { throw new Error('Bootstrap requires jQuery'
544
 
545
  var dimension = this.dimension()
546
 
547
- this.$element
548
- [dimension](this.$element[dimension]())
549
- [0].offsetHeight
550
 
551
  this.$element
552
  .addClass('collapsing')
@@ -567,7 +601,7 @@ if (typeof jQuery === 'undefined') { throw new Error('Bootstrap requires jQuery'
567
 
568
  this.$element
569
  [dimension](0)
570
- .one($.support.transition.end, $.proxy(complete, this))
571
  .emulateTransitionEnd(350)
572
  }
573
 
@@ -579,9 +613,7 @@ if (typeof jQuery === 'undefined') { throw new Error('Bootstrap requires jQuery'
579
  // COLLAPSE PLUGIN DEFINITION
580
  // ==========================
581
 
582
- var old = $.fn.collapse
583
-
584
- $.fn.collapse = function (option) {
585
  return this.each(function () {
586
  var $this = $(this)
587
  var data = $this.data('bs.collapse')
@@ -593,6 +625,9 @@ if (typeof jQuery === 'undefined') { throw new Error('Bootstrap requires jQuery'
593
  })
594
  }
595
 
 
 
 
596
  $.fn.collapse.Constructor = Collapse
597
 
598
 
@@ -608,11 +643,12 @@ if (typeof jQuery === 'undefined') { throw new Error('Bootstrap requires jQuery'
608
  // COLLAPSE DATA-API
609
  // =================
610
 
611
- $(document).on('click.bs.collapse.data-api', '[data-toggle=collapse]', function (e) {
612
- var $this = $(this), href
 
613
  var target = $this.attr('data-target')
614
  || e.preventDefault()
615
- || (href = $this.attr('href')) && href.replace(/.*(?=#[^\s]+$)/, '') //strip for ie7
616
  var $target = $(target)
617
  var data = $target.data('bs.collapse')
618
  var option = data ? 'toggle' : $this.data()
@@ -620,17 +656,17 @@ if (typeof jQuery === 'undefined') { throw new Error('Bootstrap requires jQuery'
620
  var $parent = parent && $(parent)
621
 
622
  if (!data || !data.transitioning) {
623
- if ($parent) $parent.find('[data-toggle=collapse][data-parent="' + parent + '"]').not($this).addClass('collapsed')
624
  $this[$target.hasClass('in') ? 'addClass' : 'removeClass']('collapsed')
625
  }
626
 
627
- $target.collapse(option)
628
  })
629
 
630
  }(jQuery);
631
 
632
  /* ========================================================================
633
- * Bootstrap: dropdown.js v3.1.0
634
  * http://getbootstrap.com/javascript/#dropdowns
635
  * ========================================================================
636
  * Copyright 2011-2014 Twitter, Inc.
@@ -645,11 +681,13 @@ if (typeof jQuery === 'undefined') { throw new Error('Bootstrap requires jQuery'
645
  // =========================
646
 
647
  var backdrop = '.dropdown-backdrop'
648
- var toggle = '[data-toggle=dropdown]'
649
  var Dropdown = function (element) {
650
  $(element).on('click.bs.dropdown', this.toggle)
651
  }
652
 
 
 
653
  Dropdown.prototype.toggle = function (e) {
654
  var $this = $(this)
655
 
@@ -671,11 +709,11 @@ if (typeof jQuery === 'undefined') { throw new Error('Bootstrap requires jQuery'
671
 
672
  if (e.isDefaultPrevented()) return
673
 
 
 
674
  $parent
675
  .toggleClass('open')
676
  .trigger('shown.bs.dropdown', relatedTarget)
677
-
678
- $this.focus()
679
  }
680
 
681
  return false
@@ -695,12 +733,12 @@ if (typeof jQuery === 'undefined') { throw new Error('Bootstrap requires jQuery'
695
  var isActive = $parent.hasClass('open')
696
 
697
  if (!isActive || (isActive && e.keyCode == 27)) {
698
- if (e.which == 27) $parent.find(toggle).focus()
699
- return $this.click()
700
  }
701
 
702
  var desc = ' li:not(.divider):visible a'
703
- var $items = $parent.find('[role=menu]' + desc + ', [role=listbox]' + desc)
704
 
705
  if (!$items.length) return
706
 
@@ -710,10 +748,11 @@ if (typeof jQuery === 'undefined') { throw new Error('Bootstrap requires jQuery'
710
  if (e.keyCode == 40 && index < $items.length - 1) index++ // down
711
  if (!~index) index = 0
712
 
713
- $items.eq(index).focus()
714
  }
715
 
716
  function clearMenus(e) {
 
717
  $(backdrop).remove()
718
  $(toggle).each(function () {
719
  var $parent = getParent($(this))
@@ -730,7 +769,7 @@ if (typeof jQuery === 'undefined') { throw new Error('Bootstrap requires jQuery'
730
 
731
  if (!selector) {
732
  selector = $this.attr('href')
733
- selector = selector && /#[A-Za-z]/.test(selector) && selector.replace(/.*(?=#[^\s]*$)/, '') //strip for ie7
734
  }
735
 
736
  var $parent = selector && $(selector)
@@ -742,9 +781,7 @@ if (typeof jQuery === 'undefined') { throw new Error('Bootstrap requires jQuery'
742
  // DROPDOWN PLUGIN DEFINITION
743
  // ==========================
744
 
745
- var old = $.fn.dropdown
746
-
747
- $.fn.dropdown = function (option) {
748
  return this.each(function () {
749
  var $this = $(this)
750
  var data = $this.data('bs.dropdown')
@@ -754,6 +791,9 @@ if (typeof jQuery === 'undefined') { throw new Error('Bootstrap requires jQuery'
754
  })
755
  }
756
 
 
 
 
757
  $.fn.dropdown.Constructor = Dropdown
758
 
759
 
@@ -773,12 +813,12 @@ if (typeof jQuery === 'undefined') { throw new Error('Bootstrap requires jQuery'
773
  .on('click.bs.dropdown.data-api', clearMenus)
774
  .on('click.bs.dropdown.data-api', '.dropdown form', function (e) { e.stopPropagation() })
775
  .on('click.bs.dropdown.data-api', toggle, Dropdown.prototype.toggle)
776
- .on('keydown.bs.dropdown.data-api', toggle + ', [role=menu], [role=listbox]', Dropdown.prototype.keydown)
777
 
778
  }(jQuery);
779
 
780
  /* ========================================================================
781
- * Bootstrap: modal.js v3.1.0
782
  * http://getbootstrap.com/javascript/#modals
783
  * ========================================================================
784
  * Copyright 2011-2014 Twitter, Inc.
@@ -793,10 +833,12 @@ if (typeof jQuery === 'undefined') { throw new Error('Bootstrap requires jQuery'
793
  // ======================
794
 
795
  var Modal = function (element, options) {
796
- this.options = options
797
- this.$element = $(element)
798
- this.$backdrop =
799
- this.isShown = null
 
 
800
 
801
  if (this.options.remote) {
802
  this.$element
@@ -807,6 +849,8 @@ if (typeof jQuery === 'undefined') { throw new Error('Bootstrap requires jQuery'
807
  }
808
  }
809
 
 
 
810
  Modal.DEFAULTS = {
811
  backdrop: true,
812
  keyboard: true,
@@ -814,7 +858,7 @@ if (typeof jQuery === 'undefined') { throw new Error('Bootstrap requires jQuery'
814
  }
815
 
816
  Modal.prototype.toggle = function (_relatedTarget) {
817
- return this[!this.isShown ? 'show' : 'hide'](_relatedTarget)
818
  }
819
 
820
  Modal.prototype.show = function (_relatedTarget) {
@@ -827,6 +871,10 @@ if (typeof jQuery === 'undefined') { throw new Error('Bootstrap requires jQuery'
827
 
828
  this.isShown = true
829
 
 
 
 
 
830
  this.escape()
831
 
832
  this.$element.on('click.dismiss.bs.modal', '[data-dismiss="modal"]', $.proxy(this.hide, this))
@@ -835,7 +883,7 @@ if (typeof jQuery === 'undefined') { throw new Error('Bootstrap requires jQuery'
835
  var transition = $.support.transition && that.$element.hasClass('fade')
836
 
837
  if (!that.$element.parent().length) {
838
- that.$element.appendTo(document.body) // don't move modals dom position
839
  }
840
 
841
  that.$element
@@ -856,11 +904,11 @@ if (typeof jQuery === 'undefined') { throw new Error('Bootstrap requires jQuery'
856
 
857
  transition ?
858
  that.$element.find('.modal-dialog') // wait for modal to slide in
859
- .one($.support.transition.end, function () {
860
- that.$element.focus().trigger(e)
861
  })
862
  .emulateTransitionEnd(300) :
863
- that.$element.focus().trigger(e)
864
  })
865
  }
866
 
@@ -875,6 +923,9 @@ if (typeof jQuery === 'undefined') { throw new Error('Bootstrap requires jQuery'
875
 
876
  this.isShown = false
877
 
 
 
 
878
  this.escape()
879
 
880
  $(document).off('focusin.bs.modal')
@@ -886,7 +937,7 @@ if (typeof jQuery === 'undefined') { throw new Error('Bootstrap requires jQuery'
886
 
887
  $.support.transition && this.$element.hasClass('fade') ?
888
  this.$element
889
- .one($.support.transition.end, $.proxy(this.hideModal, this))
890
  .emulateTransitionEnd(300) :
891
  this.hideModal()
892
  }
@@ -896,7 +947,7 @@ if (typeof jQuery === 'undefined') { throw new Error('Bootstrap requires jQuery'
896
  .off('focusin.bs.modal') // guard against infinite focus loop
897
  .on('focusin.bs.modal', $.proxy(function (e) {
898
  if (this.$element[0] !== e.target && !this.$element.has(e.target).length) {
899
- this.$element.focus()
900
  }
901
  }, this))
902
  }
@@ -915,7 +966,6 @@ if (typeof jQuery === 'undefined') { throw new Error('Bootstrap requires jQuery'
915
  var that = this
916
  this.$element.hide()
917
  this.backdrop(function () {
918
- that.removeBackdrop()
919
  that.$element.trigger('hidden.bs.modal')
920
  })
921
  }
@@ -926,13 +976,14 @@ if (typeof jQuery === 'undefined') { throw new Error('Bootstrap requires jQuery'
926
  }
927
 
928
  Modal.prototype.backdrop = function (callback) {
 
929
  var animate = this.$element.hasClass('fade') ? 'fade' : ''
930
 
931
  if (this.isShown && this.options.backdrop) {
932
  var doAnimate = $.support.transition && animate
933
 
934
  this.$backdrop = $('<div class="modal-backdrop ' + animate + '" />')
935
- .appendTo(document.body)
936
 
937
  this.$element.on('click.dismiss.bs.modal', $.proxy(function (e) {
938
  if (e.target !== e.currentTarget) return
@@ -949,31 +1000,56 @@ if (typeof jQuery === 'undefined') { throw new Error('Bootstrap requires jQuery'
949
 
950
  doAnimate ?
951
  this.$backdrop
952
- .one($.support.transition.end, callback)
953
  .emulateTransitionEnd(150) :
954
  callback()
955
 
956
  } else if (!this.isShown && this.$backdrop) {
957
  this.$backdrop.removeClass('in')
958
 
 
 
 
 
959
  $.support.transition && this.$element.hasClass('fade') ?
960
  this.$backdrop
961
- .one($.support.transition.end, callback)
962
  .emulateTransitionEnd(150) :
963
- callback()
964
 
965
  } else if (callback) {
966
  callback()
967
  }
968
  }
969
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
970
 
971
  // MODAL PLUGIN DEFINITION
972
  // =======================
973
 
974
- var old = $.fn.modal
975
-
976
- $.fn.modal = function (option, _relatedTarget) {
977
  return this.each(function () {
978
  var $this = $(this)
979
  var data = $this.data('bs.modal')
@@ -985,6 +1061,9 @@ if (typeof jQuery === 'undefined') { throw new Error('Bootstrap requires jQuery'
985
  })
986
  }
987
 
 
 
 
988
  $.fn.modal.Constructor = Modal
989
 
990
 
@@ -1003,26 +1082,24 @@ if (typeof jQuery === 'undefined') { throw new Error('Bootstrap requires jQuery'
1003
  $(document).on('click.bs.modal.data-api', '[data-toggle="modal"]', function (e) {
1004
  var $this = $(this)
1005
  var href = $this.attr('href')
1006
- var $target = $($this.attr('data-target') || (href && href.replace(/.*(?=#[^\s]+$)/, ''))) //strip for ie7
1007
  var option = $target.data('bs.modal') ? 'toggle' : $.extend({ remote: !/#/.test(href) && href }, $target.data(), $this.data())
1008
 
1009
  if ($this.is('a')) e.preventDefault()
1010
 
1011
- $target
1012
- .modal(option, this)
1013
- .one('hide', function () {
1014
- $this.is(':visible') && $this.focus()
1015
  })
 
 
1016
  })
1017
 
1018
- $(document)
1019
- .on('show.bs.modal', '.modal', function () { $(document.body).addClass('modal-open') })
1020
- .on('hidden.bs.modal', '.modal', function () { $(document.body).removeClass('modal-open') })
1021
-
1022
  }(jQuery);
1023
 
1024
  /* ========================================================================
1025
- * Bootstrap: tooltip.js v3.1.0
1026
  * http://getbootstrap.com/javascript/#tooltip
1027
  * Inspired by the original jQuery.tipsy by Jason Frame
1028
  * ========================================================================
@@ -1048,23 +1125,30 @@ if (typeof jQuery === 'undefined') { throw new Error('Bootstrap requires jQuery'
1048
  this.init('tooltip', element, options)
1049
  }
1050
 
 
 
1051
  Tooltip.DEFAULTS = {
1052
  animation: true,
1053
  placement: 'top',
1054
  selector: false,
1055
- template: '<div class="tooltip"><div class="tooltip-arrow"></div><div class="tooltip-inner"></div></div>',
1056
  trigger: 'hover focus',
1057
  title: '',
1058
  delay: 0,
1059
  html: false,
1060
- container: false
 
 
 
 
1061
  }
1062
 
1063
  Tooltip.prototype.init = function (type, element, options) {
1064
- this.enabled = true
1065
- this.type = type
1066
- this.$element = $(element)
1067
- this.options = this.getOptions(options)
 
1068
 
1069
  var triggers = this.options.trigger.split(' ')
1070
 
@@ -1117,7 +1201,12 @@ if (typeof jQuery === 'undefined') { throw new Error('Bootstrap requires jQuery'
1117
 
1118
  Tooltip.prototype.enter = function (obj) {
1119
  var self = obj instanceof this.constructor ?
1120
- obj : $(obj.currentTarget)[this.type](this.getDelegateOptions()).data('bs.' + this.type)
 
 
 
 
 
1121
 
1122
  clearTimeout(self.timeout)
1123
 
@@ -1132,7 +1221,12 @@ if (typeof jQuery === 'undefined') { throw new Error('Bootstrap requires jQuery'
1132
 
1133
  Tooltip.prototype.leave = function (obj) {
1134
  var self = obj instanceof this.constructor ?
1135
- obj : $(obj.currentTarget)[this.type](this.getDelegateOptions()).data('bs.' + this.type)
 
 
 
 
 
1136
 
1137
  clearTimeout(self.timeout)
1138
 
@@ -1151,12 +1245,17 @@ if (typeof jQuery === 'undefined') { throw new Error('Bootstrap requires jQuery'
1151
  if (this.hasContent() && this.enabled) {
1152
  this.$element.trigger(e)
1153
 
1154
- if (e.isDefaultPrevented()) return
1155
- var that = this;
 
1156
 
1157
  var $tip = this.tip()
1158
 
 
 
1159
  this.setContent()
 
 
1160
 
1161
  if (this.options.animation) $tip.addClass('fade')
1162
 
@@ -1172,6 +1271,7 @@ if (typeof jQuery === 'undefined') { throw new Error('Bootstrap requires jQuery'
1172
  .detach()
1173
  .css({ top: 0, left: 0, display: 'block' })
1174
  .addClass(placement)
 
1175
 
1176
  this.options.container ? $tip.appendTo(this.options.container) : $tip.insertAfter(this.$element)
1177
 
@@ -1180,18 +1280,14 @@ if (typeof jQuery === 'undefined') { throw new Error('Bootstrap requires jQuery'
1180
  var actualHeight = $tip[0].offsetHeight
1181
 
1182
  if (autoPlace) {
1183
- var $parent = this.$element.parent()
1184
-
1185
  var orgPlacement = placement
1186
- var docScroll = document.documentElement.scrollTop || document.body.scrollTop
1187
- var parentWidth = this.options.container == 'body' ? window.innerWidth : $parent.outerWidth()
1188
- var parentHeight = this.options.container == 'body' ? window.innerHeight : $parent.outerHeight()
1189
- var parentLeft = this.options.container == 'body' ? 0 : $parent.offset().left
1190
-
1191
- placement = placement == 'bottom' && pos.top + pos.height + actualHeight - docScroll > parentHeight ? 'top' :
1192
- placement == 'top' && pos.top - docScroll - actualHeight < 0 ? 'bottom' :
1193
- placement == 'right' && pos.right + actualWidth > parentWidth ? 'left' :
1194
- placement == 'left' && pos.left - actualWidth < parentLeft ? 'right' :
1195
  placement
1196
 
1197
  $tip
@@ -1202,22 +1298,21 @@ if (typeof jQuery === 'undefined') { throw new Error('Bootstrap requires jQuery'
1202
  var calculatedOffset = this.getCalculatedOffset(placement, pos, actualWidth, actualHeight)
1203
 
1204
  this.applyPlacement(calculatedOffset, placement)
1205
- this.hoverState = null
1206
 
1207
- var complete = function() {
1208
  that.$element.trigger('shown.bs.' + that.type)
 
1209
  }
1210
 
1211
  $.support.transition && this.$tip.hasClass('fade') ?
1212
  $tip
1213
- .one($.support.transition.end, complete)
1214
  .emulateTransitionEnd(150) :
1215
  complete()
1216
  }
1217
  }
1218
 
1219
  Tooltip.prototype.applyPlacement = function (offset, placement) {
1220
- var replace
1221
  var $tip = this.tip()
1222
  var width = $tip[0].offsetWidth
1223
  var height = $tip[0].offsetHeight
@@ -1251,29 +1346,20 @@ if (typeof jQuery === 'undefined') { throw new Error('Bootstrap requires jQuery'
1251
  var actualHeight = $tip[0].offsetHeight
1252
 
1253
  if (placement == 'top' && actualHeight != height) {
1254
- replace = true
1255
  offset.top = offset.top + height - actualHeight
1256
  }
1257
 
1258
- if (/bottom|top/.test(placement)) {
1259
- var delta = 0
1260
 
1261
- if (offset.left < 0) {
1262
- delta = offset.left * -2
1263
- offset.left = 0
1264
 
1265
- $tip.offset(offset)
1266
-
1267
- actualWidth = $tip[0].offsetWidth
1268
- actualHeight = $tip[0].offsetHeight
1269
- }
1270
 
1271
- this.replaceArrow(delta - width + actualWidth, actualWidth, 'left')
1272
- } else {
1273
- this.replaceArrow(actualHeight - height, actualHeight, 'top')
1274
- }
1275
-
1276
- if (replace) $tip.offset(offset)
1277
  }
1278
 
1279
  Tooltip.prototype.replaceArrow = function (delta, dimension, position) {
@@ -1293,6 +1379,8 @@ if (typeof jQuery === 'undefined') { throw new Error('Bootstrap requires jQuery'
1293
  var $tip = this.tip()
1294
  var e = $.Event('hide.bs.' + this.type)
1295
 
 
 
1296
  function complete() {
1297
  if (that.hoverState != 'in') $tip.detach()
1298
  that.$element.trigger('hidden.bs.' + that.type)
@@ -1306,7 +1394,7 @@ if (typeof jQuery === 'undefined') { throw new Error('Bootstrap requires jQuery'
1306
 
1307
  $.support.transition && this.$tip.hasClass('fade') ?
1308
  $tip
1309
- .one($.support.transition.end, complete)
1310
  .emulateTransitionEnd(150) :
1311
  complete()
1312
 
@@ -1317,7 +1405,7 @@ if (typeof jQuery === 'undefined') { throw new Error('Bootstrap requires jQuery'
1317
 
1318
  Tooltip.prototype.fixTitle = function () {
1319
  var $e = this.$element
1320
- if ($e.attr('title') || typeof($e.attr('data-original-title')) != 'string') {
1321
  $e.attr('data-original-title', $e.attr('title') || '').attr('title', '')
1322
  }
1323
  }
@@ -1326,12 +1414,15 @@ if (typeof jQuery === 'undefined') { throw new Error('Bootstrap requires jQuery'
1326
  return this.getTitle()
1327
  }
1328
 
1329
- Tooltip.prototype.getPosition = function () {
1330
- var el = this.$element[0]
1331
- return $.extend({}, (typeof el.getBoundingClientRect == 'function') ? el.getBoundingClientRect() : {
1332
- width: el.offsetWidth,
1333
- height: el.offsetHeight
1334
- }, this.$element.offset())
 
 
 
1335
  }
1336
 
1337
  Tooltip.prototype.getCalculatedOffset = function (placement, pos, actualWidth, actualHeight) {
@@ -1339,6 +1430,35 @@ if (typeof jQuery === 'undefined') { throw new Error('Bootstrap requires jQuery'
1339
  placement == 'top' ? { top: pos.top - actualHeight, left: pos.left + pos.width / 2 - actualWidth / 2 } :
1340
  placement == 'left' ? { top: pos.top + pos.height / 2 - actualHeight / 2, left: pos.left - actualWidth } :
1341
  /* placement == 'right' */ { top: pos.top + pos.height / 2 - actualHeight / 2, left: pos.left + pos.width }
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1342
  }
1343
 
1344
  Tooltip.prototype.getTitle = function () {
@@ -1352,12 +1472,18 @@ if (typeof jQuery === 'undefined') { throw new Error('Bootstrap requires jQuery'
1352
  return title
1353
  }
1354
 
 
 
 
 
 
 
1355
  Tooltip.prototype.tip = function () {
1356
- return this.$tip = this.$tip || $(this.options.template)
1357
  }
1358
 
1359
  Tooltip.prototype.arrow = function () {
1360
- return this.$arrow = this.$arrow || this.tip().find('.tooltip-arrow')
1361
  }
1362
 
1363
  Tooltip.prototype.validate = function () {
@@ -1381,7 +1507,15 @@ if (typeof jQuery === 'undefined') { throw new Error('Bootstrap requires jQuery'
1381
  }
1382
 
1383
  Tooltip.prototype.toggle = function (e) {
1384
- var self = e ? $(e.currentTarget)[this.type](this.getDelegateOptions()).data('bs.' + this.type) : this
 
 
 
 
 
 
 
 
1385
  self.tip().hasClass('in') ? self.leave(self) : self.enter(self)
1386
  }
1387
 
@@ -1394,9 +1528,7 @@ if (typeof jQuery === 'undefined') { throw new Error('Bootstrap requires jQuery'
1394
  // TOOLTIP PLUGIN DEFINITION
1395
  // =========================
1396
 
1397
- var old = $.fn.tooltip
1398
-
1399
- $.fn.tooltip = function (option) {
1400
  return this.each(function () {
1401
  var $this = $(this)
1402
  var data = $this.data('bs.tooltip')
@@ -1408,6 +1540,9 @@ if (typeof jQuery === 'undefined') { throw new Error('Bootstrap requires jQuery'
1408
  })
1409
  }
1410
 
 
 
 
1411
  $.fn.tooltip.Constructor = Tooltip
1412
 
1413
 
@@ -1422,7 +1557,7 @@ if (typeof jQuery === 'undefined') { throw new Error('Bootstrap requires jQuery'
1422
  }(jQuery);
1423
 
1424
  /* ========================================================================
1425
- * Bootstrap: popover.js v3.1.0
1426
  * http://getbootstrap.com/javascript/#popovers
1427
  * ========================================================================
1428
  * Copyright 2011-2014 Twitter, Inc.
@@ -1442,11 +1577,13 @@ if (typeof jQuery === 'undefined') { throw new Error('Bootstrap requires jQuery'
1442
 
1443
  if (!$.fn.tooltip) throw new Error('Popover requires tooltip.js')
1444
 
 
 
1445
  Popover.DEFAULTS = $.extend({}, $.fn.tooltip.Constructor.DEFAULTS, {
1446
  placement: 'right',
1447
  trigger: 'click',
1448
  content: '',
1449
- template: '<div class="popover"><div class="arrow"></div><h3 class="popover-title"></h3><div class="popover-content"></div></div>'
1450
  })
1451
 
1452
 
@@ -1467,7 +1604,7 @@ if (typeof jQuery === 'undefined') { throw new Error('Bootstrap requires jQuery'
1467
  var content = this.getContent()
1468
 
1469
  $tip.find('.popover-title')[this.options.html ? 'html' : 'text'](title)
1470
- $tip.find('.popover-content')[ // we use append for html objects to maintain js events
1471
  this.options.html ? (typeof content == 'string' ? 'html' : 'append') : 'text'
1472
  ](content)
1473
 
@@ -1493,7 +1630,7 @@ if (typeof jQuery === 'undefined') { throw new Error('Bootstrap requires jQuery'
1493
  }
1494
 
1495
  Popover.prototype.arrow = function () {
1496
- return this.$arrow = this.$arrow || this.tip().find('.arrow')
1497
  }
1498
 
1499
  Popover.prototype.tip = function () {
@@ -1505,9 +1642,7 @@ if (typeof jQuery === 'undefined') { throw new Error('Bootstrap requires jQuery'
1505
  // POPOVER PLUGIN DEFINITION
1506
  // =========================
1507
 
1508
- var old = $.fn.popover
1509
-
1510
- $.fn.popover = function (option) {
1511
  return this.each(function () {
1512
  var $this = $(this)
1513
  var data = $this.data('bs.popover')
@@ -1519,6 +1654,9 @@ if (typeof jQuery === 'undefined') { throw new Error('Bootstrap requires jQuery'
1519
  })
1520
  }
1521
 
 
 
 
1522
  $.fn.popover.Constructor = Popover
1523
 
1524
 
@@ -1533,7 +1671,7 @@ if (typeof jQuery === 'undefined') { throw new Error('Bootstrap requires jQuery'
1533
  }(jQuery);
1534
 
1535
  /* ========================================================================
1536
- * Bootstrap: scrollspy.js v3.1.0
1537
  * http://getbootstrap.com/javascript/#scrollspy
1538
  * ========================================================================
1539
  * Copyright 2011-2014 Twitter, Inc.
@@ -1548,36 +1686,48 @@ if (typeof jQuery === 'undefined') { throw new Error('Bootstrap requires jQuery'
1548
  // ==========================
1549
 
1550
  function ScrollSpy(element, options) {
1551
- var href
1552
  var process = $.proxy(this.process, this)
1553
 
1554
- this.$element = $(element).is('body') ? $(window) : $(element)
1555
  this.$body = $('body')
1556
- this.$scrollElement = this.$element.on('scroll.bs.scroll-spy.data-api', process)
1557
  this.options = $.extend({}, ScrollSpy.DEFAULTS, options)
1558
- this.selector = (this.options.target
1559
- || ((href = $(element).attr('href')) && href.replace(/.*(?=#[^\s]+$)/, '')) //strip for ie7
1560
- || '') + ' .nav li > a'
1561
- this.offsets = $([])
1562
- this.targets = $([])
1563
  this.activeTarget = null
 
1564
 
 
1565
  this.refresh()
1566
  this.process()
1567
  }
1568
 
 
 
1569
  ScrollSpy.DEFAULTS = {
1570
  offset: 10
1571
  }
1572
 
 
 
 
 
1573
  ScrollSpy.prototype.refresh = function () {
1574
- var offsetMethod = this.$element[0] == window ? 'offset' : 'position'
 
1575
 
1576
- this.offsets = $([])
1577
- this.targets = $([])
 
 
 
 
 
 
1578
 
1579
  var self = this
1580
- var $targets = this.$body
 
1581
  .find(this.selector)
1582
  .map(function () {
1583
  var $el = $(this)
@@ -1587,7 +1737,7 @@ if (typeof jQuery === 'undefined') { throw new Error('Bootstrap requires jQuery'
1587
  return ($href
1588
  && $href.length
1589
  && $href.is(':visible')
1590
- && [[ $href[offsetMethod]().top + (!$.isWindow(self.$scrollElement.get(0)) && self.$scrollElement.scrollTop()), href ]]) || null
1591
  })
1592
  .sort(function (a, b) { return a[0] - b[0] })
1593
  .each(function () {
@@ -1598,15 +1748,19 @@ if (typeof jQuery === 'undefined') { throw new Error('Bootstrap requires jQuery'
1598
 
1599
  ScrollSpy.prototype.process = function () {
1600
  var scrollTop = this.$scrollElement.scrollTop() + this.options.offset
1601
- var scrollHeight = this.$scrollElement[0].scrollHeight || this.$body[0].scrollHeight
1602
- var maxScroll = scrollHeight - this.$scrollElement.height()
1603
  var offsets = this.offsets
1604
  var targets = this.targets
1605
  var activeTarget = this.activeTarget
1606
  var i
1607
 
 
 
 
 
1608
  if (scrollTop >= maxScroll) {
1609
- return activeTarget != (i = targets.last()[0]) && this.activate(i)
1610
  }
1611
 
1612
  if (activeTarget && scrollTop <= offsets[0]) {
@@ -1617,7 +1771,7 @@ if (typeof jQuery === 'undefined') { throw new Error('Bootstrap requires jQuery'
1617
  activeTarget != targets[i]
1618
  && scrollTop >= offsets[i]
1619
  && (!offsets[i + 1] || scrollTop <= offsets[i + 1])
1620
- && this.activate( targets[i] )
1621
  }
1622
  }
1623
 
@@ -1649,9 +1803,7 @@ if (typeof jQuery === 'undefined') { throw new Error('Bootstrap requires jQuery'
1649
  // SCROLLSPY PLUGIN DEFINITION
1650
  // ===========================
1651
 
1652
- var old = $.fn.scrollspy
1653
-
1654
- $.fn.scrollspy = function (option) {
1655
  return this.each(function () {
1656
  var $this = $(this)
1657
  var data = $this.data('bs.scrollspy')
@@ -1662,6 +1814,9 @@ if (typeof jQuery === 'undefined') { throw new Error('Bootstrap requires jQuery'
1662
  })
1663
  }
1664
 
 
 
 
1665
  $.fn.scrollspy.Constructor = ScrollSpy
1666
 
1667
 
@@ -1677,17 +1832,17 @@ if (typeof jQuery === 'undefined') { throw new Error('Bootstrap requires jQuery'
1677
  // SCROLLSPY DATA-API
1678
  // ==================
1679
 
1680
- $(window).on('load', function () {
1681
  $('[data-spy="scroll"]').each(function () {
1682
  var $spy = $(this)
1683
- $spy.scrollspy($spy.data())
1684
  })
1685
  })
1686
 
1687
  }(jQuery);
1688
 
1689
  /* ========================================================================
1690
- * Bootstrap: tab.js v3.1.0
1691
  * http://getbootstrap.com/javascript/#tabs
1692
  * ========================================================================
1693
  * Copyright 2011-2014 Twitter, Inc.
@@ -1705,6 +1860,8 @@ if (typeof jQuery === 'undefined') { throw new Error('Bootstrap requires jQuery'
1705
  this.element = $(element)
1706
  }
1707
 
 
 
1708
  Tab.prototype.show = function () {
1709
  var $this = this.element
1710
  var $ul = $this.closest('ul:not(.dropdown-menu)')
@@ -1712,7 +1869,7 @@ if (typeof jQuery === 'undefined') { throw new Error('Bootstrap requires jQuery'
1712
 
1713
  if (!selector) {
1714
  selector = $this.attr('href')
1715
- selector = selector && selector.replace(/.*(?=#[^\s]*$)/, '') //strip for ie7
1716
  }
1717
 
1718
  if ($this.parent('li').hasClass('active')) return
@@ -1728,7 +1885,7 @@ if (typeof jQuery === 'undefined') { throw new Error('Bootstrap requires jQuery'
1728
 
1729
  var $target = $(selector)
1730
 
1731
- this.activate($this.parent('li'), $ul)
1732
  this.activate($target, $target.parent(), function () {
1733
  $this.trigger({
1734
  type: 'shown.bs.tab',
@@ -1767,7 +1924,7 @@ if (typeof jQuery === 'undefined') { throw new Error('Bootstrap requires jQuery'
1767
 
1768
  transition ?
1769
  $active
1770
- .one($.support.transition.end, next)
1771
  .emulateTransitionEnd(150) :
1772
  next()
1773
 
@@ -1778,9 +1935,7 @@ if (typeof jQuery === 'undefined') { throw new Error('Bootstrap requires jQuery'
1778
  // TAB PLUGIN DEFINITION
1779
  // =====================
1780
 
1781
- var old = $.fn.tab
1782
-
1783
- $.fn.tab = function ( option ) {
1784
  return this.each(function () {
1785
  var $this = $(this)
1786
  var data = $this.data('bs.tab')
@@ -1790,6 +1945,9 @@ if (typeof jQuery === 'undefined') { throw new Error('Bootstrap requires jQuery'
1790
  })
1791
  }
1792
 
 
 
 
1793
  $.fn.tab.Constructor = Tab
1794
 
1795
 
@@ -1807,13 +1965,13 @@ if (typeof jQuery === 'undefined') { throw new Error('Bootstrap requires jQuery'
1807
 
1808
  $(document).on('click.bs.tab.data-api', '[data-toggle="tab"], [data-toggle="pill"]', function (e) {
1809
  e.preventDefault()
1810
- $(this).tab('show')
1811
  })
1812
 
1813
  }(jQuery);
1814
 
1815
  /* ========================================================================
1816
- * Bootstrap: affix.js v3.1.0
1817
  * http://getbootstrap.com/javascript/#affix
1818
  * ========================================================================
1819
  * Copyright 2011-2014 Twitter, Inc.
@@ -1829,7 +1987,8 @@ if (typeof jQuery === 'undefined') { throw new Error('Bootstrap requires jQuery'
1829
 
1830
  var Affix = function (element, options) {
1831
  this.options = $.extend({}, Affix.DEFAULTS, options)
1832
- this.$window = $(window)
 
1833
  .on('scroll.bs.affix.data-api', $.proxy(this.checkPosition, this))
1834
  .on('click.bs.affix.data-api', $.proxy(this.checkPositionWithEventLoop, this))
1835
 
@@ -1841,16 +2000,19 @@ if (typeof jQuery === 'undefined') { throw new Error('Bootstrap requires jQuery'
1841
  this.checkPosition()
1842
  }
1843
 
1844
- Affix.RESET = 'affix affix-top affix-bottom'
 
 
1845
 
1846
  Affix.DEFAULTS = {
1847
- offset: 0
 
1848
  }
1849
 
1850
  Affix.prototype.getPinnedOffset = function () {
1851
  if (this.pinnedOffset) return this.pinnedOffset
1852
  this.$element.removeClass(Affix.RESET).addClass('affix')
1853
- var scrollTop = this.$window.scrollTop()
1854
  var position = this.$element.offset()
1855
  return (this.pinnedOffset = position.top - scrollTop)
1856
  }
@@ -1863,14 +2025,12 @@ if (typeof jQuery === 'undefined') { throw new Error('Bootstrap requires jQuery'
1863
  if (!this.$element.is(':visible')) return
1864
 
1865
  var scrollHeight = $(document).height()
1866
- var scrollTop = this.$window.scrollTop()
1867
  var position = this.$element.offset()
1868
  var offset = this.options.offset
1869
  var offsetTop = offset.top
1870
  var offsetBottom = offset.bottom
1871
 
1872
- if (this.affixed == 'top') position.top += scrollTop
1873
-
1874
  if (typeof offset != 'object') offsetBottom = offsetTop = offset
1875
  if (typeof offsetTop == 'function') offsetTop = offset.top(this.$element)
1876
  if (typeof offsetBottom == 'function') offsetBottom = offset.bottom(this.$element)
@@ -1880,7 +2040,7 @@ if (typeof jQuery === 'undefined') { throw new Error('Bootstrap requires jQuery'
1880
  offsetTop != null && (scrollTop <= offsetTop) ? 'top' : false
1881
 
1882
  if (this.affixed === affix) return
1883
- if (this.unpin) this.$element.css('top', '')
1884
 
1885
  var affixType = 'affix' + (affix ? '-' + affix : '')
1886
  var e = $.Event(affixType + '.bs.affix')
@@ -1898,7 +2058,9 @@ if (typeof jQuery === 'undefined') { throw new Error('Bootstrap requires jQuery'
1898
  .trigger($.Event(affixType.replace('affix', 'affixed')))
1899
 
1900
  if (affix == 'bottom') {
1901
- this.$element.offset({ top: scrollHeight - offsetBottom - this.$element.height() })
 
 
1902
  }
1903
  }
1904
 
@@ -1906,9 +2068,7 @@ if (typeof jQuery === 'undefined') { throw new Error('Bootstrap requires jQuery'
1906
  // AFFIX PLUGIN DEFINITION
1907
  // =======================
1908
 
1909
- var old = $.fn.affix
1910
-
1911
- $.fn.affix = function (option) {
1912
  return this.each(function () {
1913
  var $this = $(this)
1914
  var data = $this.data('bs.affix')
@@ -1919,6 +2079,9 @@ if (typeof jQuery === 'undefined') { throw new Error('Bootstrap requires jQuery'
1919
  })
1920
  }
1921
 
 
 
 
1922
  $.fn.affix.Constructor = Affix
1923
 
1924
 
@@ -1944,7 +2107,7 @@ if (typeof jQuery === 'undefined') { throw new Error('Bootstrap requires jQuery'
1944
  if (data.offsetBottom) data.offset.bottom = data.offsetBottom
1945
  if (data.offsetTop) data.offset.top = data.offsetTop
1946
 
1947
- $spy.affix(data)
1948
  })
1949
  })
1950
 
1
  /*!
2
+ * Bootstrap v3.2.0 (http://getbootstrap.com)
3
  * Copyright 2011-2014 Twitter, Inc.
4
  * Licensed under MIT (https://github.com/twbs/bootstrap/blob/master/LICENSE)
5
  */
6
 
7
+ if (typeof jQuery === 'undefined') { throw new Error('Bootstrap\'s JavaScript requires jQuery') }
8
 
9
  /* ========================================================================
10
+ * Bootstrap: transition.js v3.2.0
11
  * http://getbootstrap.com/javascript/#transitions
12
  * ========================================================================
13
  * Copyright 2011-2014 Twitter, Inc.
25
  var el = document.createElement('bootstrap')
26
 
27
  var transEndEventNames = {
28
+ WebkitTransition : 'webkitTransitionEnd',
29
+ MozTransition : 'transitionend',
30
+ OTransition : 'oTransitionEnd otransitionend',
31
+ transition : 'transitionend'
32
  }
33
 
34
  for (var name in transEndEventNames) {
42
 
43
  // http://blog.alexmaccaw.com/css-transitions
44
  $.fn.emulateTransitionEnd = function (duration) {
45
+ var called = false
46
+ var $el = this
47
+ $(this).one('bsTransitionEnd', function () { called = true })
48
  var callback = function () { if (!called) $($el).trigger($.support.transition.end) }
49
  setTimeout(callback, duration)
50
  return this
52
 
53
  $(function () {
54
  $.support.transition = transitionEnd()
55
+
56
+ if (!$.support.transition) return
57
+
58
+ $.event.special.bsTransitionEnd = {
59
+ bindType: $.support.transition.end,
60
+ delegateType: $.support.transition.end,
61
+ handle: function (e) {
62
+ if ($(e.target).is(this)) return e.handleObj.handler.apply(this, arguments)
63
+ }
64
+ }
65
  })
66
 
67
  }(jQuery);
68
 
69
  /* ========================================================================
70
+ * Bootstrap: alert.js v3.2.0
71
  * http://getbootstrap.com/javascript/#alerts
72
  * ========================================================================
73
  * Copyright 2011-2014 Twitter, Inc.
86
  $(el).on('click', dismiss, this.close)
87
  }
88
 
89
+ Alert.VERSION = '3.2.0'
90
+
91
  Alert.prototype.close = function (e) {
92
  var $this = $(this)
93
  var selector = $this.attr('data-target')
112
  $parent.removeClass('in')
113
 
114
  function removeElement() {
115
+ // detach from parent, fire event then clean up data
116
+ $parent.detach().trigger('closed.bs.alert').remove()
117
  }
118
 
119
  $.support.transition && $parent.hasClass('fade') ?
120
  $parent
121
+ .one('bsTransitionEnd', removeElement)
122
  .emulateTransitionEnd(150) :
123
  removeElement()
124
  }
127
  // ALERT PLUGIN DEFINITION
128
  // =======================
129
 
130
+ function Plugin(option) {
 
 
131
  return this.each(function () {
132
  var $this = $(this)
133
  var data = $this.data('bs.alert')
137
  })
138
  }
139
 
140
+ var old = $.fn.alert
141
+
142
+ $.fn.alert = Plugin
143
  $.fn.alert.Constructor = Alert
144
 
145
 
160
  }(jQuery);
161
 
162
  /* ========================================================================
163
+ * Bootstrap: button.js v3.2.0
164
  * http://getbootstrap.com/javascript/#buttons
165
  * ========================================================================
166
  * Copyright 2011-2014 Twitter, Inc.
180
  this.isLoading = false
181
  }
182
 
183
+ Button.VERSION = '3.2.0'
184
+
185
  Button.DEFAULTS = {
186
  loadingText: 'loading...'
187
  }
194
 
195
  state = state + 'Text'
196
 
197
+ if (data.resetText == null) $el.data('resetText', $el[val]())
198
 
199
+ $el[val](data[state] == null ? this.options[state] : data[state])
200
 
201
  // push to event loop to allow forms to submit
202
  setTimeout($.proxy(function () {
230
  // BUTTON PLUGIN DEFINITION
231
  // ========================
232
 
233
+ function Plugin(option) {
 
 
234
  return this.each(function () {
235
  var $this = $(this)
236
  var data = $this.data('bs.button')
243
  })
244
  }
245
 
246
+ var old = $.fn.button
247
+
248
+ $.fn.button = Plugin
249
  $.fn.button.Constructor = Button
250
 
251
 
261
  // BUTTON DATA-API
262
  // ===============
263
 
264
+ $(document).on('click.bs.button.data-api', '[data-toggle^="button"]', function (e) {
265
  var $btn = $(e.target)
266
  if (!$btn.hasClass('btn')) $btn = $btn.closest('.btn')
267
+ Plugin.call($btn, 'toggle')
268
  e.preventDefault()
269
  })
270
 
271
  }(jQuery);
272
 
273
  /* ========================================================================
274
+ * Bootstrap: carousel.js v3.2.0
275
  * http://getbootstrap.com/javascript/#carousel
276
  * ========================================================================
277
  * Copyright 2011-2014 Twitter, Inc.
286
  // =========================
287
 
288
  var Carousel = function (element, options) {
289
+ this.$element = $(element).on('keydown.bs.carousel', $.proxy(this.keydown, this))
290
  this.$indicators = this.$element.find('.carousel-indicators')
291
  this.options = options
292
  this.paused =
296
  this.$items = null
297
 
298
  this.options.pause == 'hover' && this.$element
299
+ .on('mouseenter.bs.carousel', $.proxy(this.pause, this))
300
+ .on('mouseleave.bs.carousel', $.proxy(this.cycle, this))
301
  }
302
 
303
+ Carousel.VERSION = '3.2.0'
304
+
305
  Carousel.DEFAULTS = {
306
  interval: 5000,
307
  pause: 'hover',
308
  wrap: true
309
  }
310
 
311
+ Carousel.prototype.keydown = function (e) {
312
+ switch (e.which) {
313
+ case 37: this.prev(); break
314
+ case 39: this.next(); break
315
+ default: return
316
+ }
317
+
318
+ e.preventDefault()
319
+ }
320
+
321
+ Carousel.prototype.cycle = function (e) {
322
  e || (this.paused = false)
323
 
324
  this.interval && clearInterval(this.interval)
330
  return this
331
  }
332
 
333
+ Carousel.prototype.getItemIndex = function (item) {
334
+ this.$items = item.parent().children('.item')
335
+ return this.$items.index(item || this.$active)
 
 
336
  }
337
 
338
  Carousel.prototype.to = function (pos) {
339
  var that = this
340
+ var activeIndex = this.getItemIndex(this.$active = this.$element.find('.item.active'))
341
 
342
  if (pos > (this.$items.length - 1) || pos < 0) return
343
 
344
+ if (this.sliding) return this.$element.one('slid.bs.carousel', function () { that.to(pos) }) // yes, "slid"
345
  if (activeIndex == pos) return this.pause().cycle()
346
 
347
  return this.slide(pos > activeIndex ? 'next' : 'prev', $(this.$items[pos]))
383
  $next = this.$element.find('.item')[fallback]()
384
  }
385
 
386
+ if ($next.hasClass('active')) return (this.sliding = false)
387
 
388
+ var relatedTarget = $next[0]
389
+ var slideEvent = $.Event('slide.bs.carousel', {
390
+ relatedTarget: relatedTarget,
391
+ direction: direction
392
+ })
393
+ this.$element.trigger(slideEvent)
394
+ if (slideEvent.isDefaultPrevented()) return
395
 
396
  this.sliding = true
397
 
399
 
400
  if (this.$indicators.length) {
401
  this.$indicators.find('.active').removeClass('active')
402
+ var $nextIndicator = $(this.$indicators.children()[this.getItemIndex($next)])
403
+ $nextIndicator && $nextIndicator.addClass('active')
 
 
404
  }
405
 
406
+ var slidEvent = $.Event('slid.bs.carousel', { relatedTarget: relatedTarget, direction: direction }) // yes, "slid"
407
  if ($.support.transition && this.$element.hasClass('slide')) {
408
  $next.addClass(type)
409
  $next[0].offsetWidth // force reflow
410
  $active.addClass(direction)
411
  $next.addClass(direction)
412
  $active
413
+ .one('bsTransitionEnd', function () {
414
  $next.removeClass([type, direction].join(' ')).addClass('active')
415
  $active.removeClass(['active', direction].join(' '))
416
  that.sliding = false
417
+ setTimeout(function () {
418
+ that.$element.trigger(slidEvent)
419
+ }, 0)
420
  })
421
  .emulateTransitionEnd($active.css('transition-duration').slice(0, -1) * 1000)
422
  } else {
423
  $active.removeClass('active')
424
  $next.addClass('active')
425
  this.sliding = false
426
+ this.$element.trigger(slidEvent)
427
  }
428
 
429
  isCycling && this.cycle()
435
  // CAROUSEL PLUGIN DEFINITION
436
  // ==========================
437
 
438
+ function Plugin(option) {
 
 
439
  return this.each(function () {
440
  var $this = $(this)
441
  var data = $this.data('bs.carousel')
449
  })
450
  }
451
 
452
+ var old = $.fn.carousel
453
+
454
+ $.fn.carousel = Plugin
455
  $.fn.carousel.Constructor = Carousel
456
 
457
 
468
  // =================
469
 
470
  $(document).on('click.bs.carousel.data-api', '[data-slide], [data-slide-to]', function (e) {
471
+ var href
472
+ var $this = $(this)
473
+ var $target = $($this.attr('data-target') || (href = $this.attr('href')) && href.replace(/.*(?=#[^\s]+$)/, '')) // strip for ie7
474
+ if (!$target.hasClass('carousel')) return
475
  var options = $.extend({}, $target.data(), $this.data())
476
  var slideIndex = $this.attr('data-slide-to')
477
  if (slideIndex) options.interval = false
478
 
479
+ Plugin.call($target, options)
480
 
481
+ if (slideIndex) {
482
  $target.data('bs.carousel').to(slideIndex)
483
  }
484
 
488
  $(window).on('load', function () {
489
  $('[data-ride="carousel"]').each(function () {
490
  var $carousel = $(this)
491
+ Plugin.call($carousel, $carousel.data())
492
  })
493
  })
494
 
495
  }(jQuery);
496
 
497
  /* ========================================================================
498
+ * Bootstrap: collapse.js v3.2.0
499
  * http://getbootstrap.com/javascript/#collapse
500
  * ========================================================================
501
  * Copyright 2011-2014 Twitter, Inc.
518
  if (this.options.toggle) this.toggle()
519
  }
520
 
521
+ Collapse.VERSION = '3.2.0'
522
+
523
  Collapse.DEFAULTS = {
524
  toggle: true
525
  }
541
  if (actives && actives.length) {
542
  var hasData = actives.data('bs.collapse')
543
  if (hasData && hasData.transitioning) return
544
+ Plugin.call(actives, 'hide')
545
  hasData || actives.data('bs.collapse', null)
546
  }
547
 
549
 
550
  this.$element
551
  .removeClass('collapse')
552
+ .addClass('collapsing')[dimension](0)
 
553
 
554
  this.transitioning = 1
555
 
556
  var complete = function () {
557
  this.$element
558
  .removeClass('collapsing')
559
+ .addClass('collapse in')[dimension]('')
 
560
  this.transitioning = 0
561
+ this.$element
562
+ .trigger('shown.bs.collapse')
563
  }
564
 
565
  if (!$.support.transition) return complete.call(this)
567
  var scrollSize = $.camelCase(['scroll', dimension].join('-'))
568
 
569
  this.$element
570
+ .one('bsTransitionEnd', $.proxy(complete, this))
571
+ .emulateTransitionEnd(350)[dimension](this.$element[0][scrollSize])
 
572
  }
573
 
574
  Collapse.prototype.hide = function () {
580
 
581
  var dimension = this.dimension()
582
 
583
+ this.$element[dimension](this.$element[dimension]())[0].offsetHeight
 
 
584
 
585
  this.$element
586
  .addClass('collapsing')
601
 
602
  this.$element
603
  [dimension](0)
604
+ .one('bsTransitionEnd', $.proxy(complete, this))
605
  .emulateTransitionEnd(350)
606
  }
607
 
613
  // COLLAPSE PLUGIN DEFINITION
614
  // ==========================
615
 
616
+ function Plugin(option) {
 
 
617
  return this.each(function () {
618
  var $this = $(this)
619
  var data = $this.data('bs.collapse')
625
  })
626
  }
627
 
628
+ var old = $.fn.collapse
629
+
630
+ $.fn.collapse = Plugin
631
  $.fn.collapse.Constructor = Collapse
632
 
633
 
643
  // COLLAPSE DATA-API
644
  // =================
645
 
646
+ $(document).on('click.bs.collapse.data-api', '[data-toggle="collapse"]', function (e) {
647
+ var href
648
+ var $this = $(this)
649
  var target = $this.attr('data-target')
650
  || e.preventDefault()
651
+ || (href = $this.attr('href')) && href.replace(/.*(?=#[^\s]+$)/, '') // strip for ie7
652
  var $target = $(target)
653
  var data = $target.data('bs.collapse')
654
  var option = data ? 'toggle' : $this.data()
656
  var $parent = parent && $(parent)
657
 
658
  if (!data || !data.transitioning) {
659
+ if ($parent) $parent.find('[data-toggle="collapse"][data-parent="' + parent + '"]').not($this).addClass('collapsed')
660
  $this[$target.hasClass('in') ? 'addClass' : 'removeClass']('collapsed')
661
  }
662
 
663
+ Plugin.call($target, option)
664
  })
665
 
666
  }(jQuery);
667
 
668
  /* ========================================================================
669
+ * Bootstrap: dropdown.js v3.2.0
670
  * http://getbootstrap.com/javascript/#dropdowns
671
  * ========================================================================
672
  * Copyright 2011-2014 Twitter, Inc.
681
  // =========================
682
 
683
  var backdrop = '.dropdown-backdrop'
684
+ var toggle = '[data-toggle="dropdown"]'
685
  var Dropdown = function (element) {
686
  $(element).on('click.bs.dropdown', this.toggle)
687
  }
688
 
689
+ Dropdown.VERSION = '3.2.0'
690
+
691
  Dropdown.prototype.toggle = function (e) {
692
  var $this = $(this)
693
 
709
 
710
  if (e.isDefaultPrevented()) return
711
 
712
+ $this.trigger('focus')
713
+
714
  $parent
715
  .toggleClass('open')
716
  .trigger('shown.bs.dropdown', relatedTarget)
 
 
717
  }
718
 
719
  return false
733
  var isActive = $parent.hasClass('open')
734
 
735
  if (!isActive || (isActive && e.keyCode == 27)) {
736
+ if (e.which == 27) $parent.find(toggle).trigger('focus')
737
+ return $this.trigger('click')
738
  }
739
 
740
  var desc = ' li:not(.divider):visible a'
741
+ var $items = $parent.find('[role="menu"]' + desc + ', [role="listbox"]' + desc)
742
 
743
  if (!$items.length) return
744
 
748
  if (e.keyCode == 40 && index < $items.length - 1) index++ // down
749
  if (!~index) index = 0
750
 
751
+ $items.eq(index).trigger('focus')
752
  }
753
 
754
  function clearMenus(e) {
755
+ if (e && e.which === 3) return
756
  $(backdrop).remove()
757
  $(toggle).each(function () {
758
  var $parent = getParent($(this))
769
 
770
  if (!selector) {
771
  selector = $this.attr('href')
772
+ selector = selector && /#[A-Za-z]/.test(selector) && selector.replace(/.*(?=#[^\s]*$)/, '') // strip for ie7
773
  }
774
 
775
  var $parent = selector && $(selector)
781
  // DROPDOWN PLUGIN DEFINITION
782
  // ==========================
783
 
784
+ function Plugin(option) {
 
 
785
  return this.each(function () {
786
  var $this = $(this)
787
  var data = $this.data('bs.dropdown')
791
  })
792
  }
793
 
794
+ var old = $.fn.dropdown
795
+
796
+ $.fn.dropdown = Plugin
797
  $.fn.dropdown.Constructor = Dropdown
798
 
799
 
813
  .on('click.bs.dropdown.data-api', clearMenus)
814
  .on('click.bs.dropdown.data-api', '.dropdown form', function (e) { e.stopPropagation() })
815
  .on('click.bs.dropdown.data-api', toggle, Dropdown.prototype.toggle)
816
+ .on('keydown.bs.dropdown.data-api', toggle + ', [role="menu"], [role="listbox"]', Dropdown.prototype.keydown)
817
 
818
  }(jQuery);
819
 
820
  /* ========================================================================
821
+ * Bootstrap: modal.js v3.2.0
822
  * http://getbootstrap.com/javascript/#modals
823
  * ========================================================================
824
  * Copyright 2011-2014 Twitter, Inc.
833
  // ======================
834
 
835
  var Modal = function (element, options) {
836
+ this.options = options
837
+ this.$body = $(document.body)
838
+ this.$element = $(element)
839
+ this.$backdrop =
840
+ this.isShown = null
841
+ this.scrollbarWidth = 0
842
 
843
  if (this.options.remote) {
844
  this.$element
849
  }
850
  }
851
 
852
+ Modal.VERSION = '3.2.0'
853
+
854
  Modal.DEFAULTS = {
855
  backdrop: true,
856
  keyboard: true,
858
  }
859
 
860
  Modal.prototype.toggle = function (_relatedTarget) {
861
+ return this.isShown ? this.hide() : this.show(_relatedTarget)
862
  }
863
 
864
  Modal.prototype.show = function (_relatedTarget) {
871
 
872
  this.isShown = true
873
 
874
+ this.checkScrollbar()
875
+ this.$body.addClass('modal-open')
876
+
877
+ this.setScrollbar()
878
  this.escape()
879
 
880
  this.$element.on('click.dismiss.bs.modal', '[data-dismiss="modal"]', $.proxy(this.hide, this))
883
  var transition = $.support.transition && that.$element.hasClass('fade')
884
 
885
  if (!that.$element.parent().length) {
886
+ that.$element.appendTo(that.$body) // don't move modals dom position
887
  }
888
 
889
  that.$element
904
 
905
  transition ?
906
  that.$element.find('.modal-dialog') // wait for modal to slide in
907
+ .one('bsTransitionEnd', function () {
908
+ that.$element.trigger('focus').trigger(e)
909
  })
910
  .emulateTransitionEnd(300) :
911
+ that.$element.trigger('focus').trigger(e)
912
  })
913
  }
914
 
923
 
924
  this.isShown = false
925
 
926
+ this.$body.removeClass('modal-open')
927
+
928
+ this.resetScrollbar()
929
  this.escape()
930
 
931
  $(document).off('focusin.bs.modal')
937
 
938
  $.support.transition && this.$element.hasClass('fade') ?
939
  this.$element
940
+ .one('bsTransitionEnd', $.proxy(this.hideModal, this))
941
  .emulateTransitionEnd(300) :
942
  this.hideModal()
943
  }
947
  .off('focusin.bs.modal') // guard against infinite focus loop
948
  .on('focusin.bs.modal', $.proxy(function (e) {
949
  if (this.$element[0] !== e.target && !this.$element.has(e.target).length) {
950
+ this.$element.trigger('focus')
951
  }
952
  }, this))
953
  }
966
  var that = this
967
  this.$element.hide()
968
  this.backdrop(function () {
 
969
  that.$element.trigger('hidden.bs.modal')
970
  })
971
  }
976
  }
977
 
978
  Modal.prototype.backdrop = function (callback) {
979
+ var that = this
980
  var animate = this.$element.hasClass('fade') ? 'fade' : ''
981
 
982
  if (this.isShown && this.options.backdrop) {
983
  var doAnimate = $.support.transition && animate
984
 
985
  this.$backdrop = $('<div class="modal-backdrop ' + animate + '" />')
986
+ .appendTo(this.$body)
987
 
988
  this.$element.on('click.dismiss.bs.modal', $.proxy(function (e) {
989
  if (e.target !== e.currentTarget) return
1000
 
1001
  doAnimate ?
1002
  this.$backdrop
1003
+ .one('bsTransitionEnd', callback)
1004
  .emulateTransitionEnd(150) :
1005
  callback()
1006
 
1007
  } else if (!this.isShown && this.$backdrop) {
1008
  this.$backdrop.removeClass('in')
1009
 
1010
+ var callbackRemove = function () {
1011
+ that.removeBackdrop()
1012
+ callback && callback()
1013
+ }
1014
  $.support.transition && this.$element.hasClass('fade') ?
1015
  this.$backdrop
1016
+ .one('bsTransitionEnd', callbackRemove)
1017
  .emulateTransitionEnd(150) :
1018
+ callbackRemove()
1019
 
1020
  } else if (callback) {
1021
  callback()
1022
  }
1023
  }
1024
 
1025
+ Modal.prototype.checkScrollbar = function () {
1026
+ if (document.body.clientWidth >= window.innerWidth) return
1027
+ this.scrollbarWidth = this.scrollbarWidth || this.measureScrollbar()
1028
+ }
1029
+
1030
+ Modal.prototype.setScrollbar = function () {
1031
+ var bodyPad = parseInt((this.$body.css('padding-right') || 0), 10)
1032
+ if (this.scrollbarWidth) this.$body.css('padding-right', bodyPad + this.scrollbarWidth)
1033
+ }
1034
+
1035
+ Modal.prototype.resetScrollbar = function () {
1036
+ this.$body.css('padding-right', '')
1037
+ }
1038
+
1039
+ Modal.prototype.measureScrollbar = function () { // thx walsh
1040
+ var scrollDiv = document.createElement('div')
1041
+ scrollDiv.className = 'modal-scrollbar-measure'
1042
+ this.$body.append(scrollDiv)
1043
+ var scrollbarWidth = scrollDiv.offsetWidth - scrollDiv.clientWidth
1044
+ this.$body[0].removeChild(scrollDiv)
1045
+ return scrollbarWidth
1046
+ }
1047
+
1048
 
1049
  // MODAL PLUGIN DEFINITION
1050
  // =======================
1051
 
1052
+ function Plugin(option, _relatedTarget) {
 
 
1053
  return this.each(function () {
1054
  var $this = $(this)
1055
  var data = $this.data('bs.modal')
1061
  })
1062
  }
1063
 
1064
+ var old = $.fn.modal
1065
+
1066
+ $.fn.modal = Plugin
1067
  $.fn.modal.Constructor = Modal
1068
 
1069
 
1082
  $(document).on('click.bs.modal.data-api', '[data-toggle="modal"]', function (e) {
1083
  var $this = $(this)
1084
  var href = $this.attr('href')
1085
+ var $target = $($this.attr('data-target') || (href && href.replace(/.*(?=#[^\s]+$)/, ''))) // strip for ie7
1086
  var option = $target.data('bs.modal') ? 'toggle' : $.extend({ remote: !/#/.test(href) && href }, $target.data(), $this.data())
1087
 
1088
  if ($this.is('a')) e.preventDefault()
1089
 
1090
+ $target.one('show.bs.modal', function (showEvent) {
1091
+ if (showEvent.isDefaultPrevented()) return // only register focus restorer if modal will actually get shown
1092
+ $target.one('hidden.bs.modal', function () {
1093
+ $this.is(':visible') && $this.trigger('focus')
1094
  })
1095
+ })
1096
+ Plugin.call($target, option, this)
1097
  })
1098
 
 
 
 
 
1099
  }(jQuery);
1100
 
1101
  /* ========================================================================
1102
+ * Bootstrap: tooltip.js v3.2.0
1103
  * http://getbootstrap.com/javascript/#tooltip
1104
  * Inspired by the original jQuery.tipsy by Jason Frame
1105
  * ========================================================================
1125
  this.init('tooltip', element, options)
1126
  }
1127
 
1128
+ Tooltip.VERSION = '3.2.0'
1129
+
1130
  Tooltip.DEFAULTS = {
1131
  animation: true,
1132
  placement: 'top',
1133
  selector: false,
1134
+ template: '<div class="tooltip" role="tooltip"><div class="tooltip-arrow"></div><div class="tooltip-inner"></div></div>',
1135
  trigger: 'hover focus',
1136
  title: '',
1137
  delay: 0,
1138
  html: false,
1139
+ container: false,
1140
+ viewport: {
1141
+ selector: 'body',
1142
+ padding: 0
1143
+ }
1144
  }
1145
 
1146
  Tooltip.prototype.init = function (type, element, options) {
1147
+ this.enabled = true
1148
+ this.type = type
1149
+ this.$element = $(element)
1150
+ this.options = this.getOptions(options)
1151
+ this.$viewport = this.options.viewport && $(this.options.viewport.selector || this.options.viewport)
1152
 
1153
  var triggers = this.options.trigger.split(' ')
1154
 
1201
 
1202
  Tooltip.prototype.enter = function (obj) {
1203
  var self = obj instanceof this.constructor ?
1204
+ obj : $(obj.currentTarget).data('bs.' + this.type)
1205
+
1206
+ if (!self) {
1207
+ self = new this.constructor(obj.currentTarget, this.getDelegateOptions())
1208
+ $(obj.currentTarget).data('bs.' + this.type, self)
1209
+ }
1210
 
1211
  clearTimeout(self.timeout)
1212
 
1221
 
1222
  Tooltip.prototype.leave = function (obj) {
1223
  var self = obj instanceof this.constructor ?
1224
+ obj : $(obj.currentTarget).data('bs.' + this.type)
1225
+
1226
+ if (!self) {
1227
+ self = new this.constructor(obj.currentTarget, this.getDelegateOptions())
1228
+ $(obj.currentTarget).data('bs.' + this.type, self)
1229
+ }
1230
 
1231
  clearTimeout(self.timeout)
1232
 
1245
  if (this.hasContent() && this.enabled) {
1246
  this.$element.trigger(e)
1247
 
1248
+ var inDom = $.contains(document.documentElement, this.$element[0])
1249
+ if (e.isDefaultPrevented() || !inDom) return
1250
+ var that = this
1251
 
1252
  var $tip = this.tip()
1253
 
1254
+ var tipId = this.getUID(this.type)
1255
+
1256
  this.setContent()
1257
+ $tip.attr('id', tipId)
1258
+ this.$element.attr('aria-describedby', tipId)
1259
 
1260
  if (this.options.animation) $tip.addClass('fade')
1261
 
1271
  .detach()
1272
  .css({ top: 0, left: 0, display: 'block' })
1273
  .addClass(placement)
1274
+ .data('bs.' + this.type, this)
1275
 
1276
  this.options.container ? $tip.appendTo(this.options.container) : $tip.insertAfter(this.$element)
1277
 
1280
  var actualHeight = $tip[0].offsetHeight
1281
 
1282
  if (autoPlace) {
 
 
1283
  var orgPlacement = placement
1284
+ var $parent = this.$element.parent()
1285
+ var parentDim = this.getPosition($parent)
1286
+
1287
+ placement = placement == 'bottom' && pos.top + pos.height + actualHeight - parentDim.scroll > parentDim.height ? 'top' :
1288
+ placement == 'top' && pos.top - parentDim.scroll - actualHeight < 0 ? 'bottom' :
1289
+ placement == 'right' && pos.right + actualWidth > parentDim.width ? 'left' :
1290
+ placement == 'left' && pos.left - actualWidth < parentDim.left ? 'right' :
 
 
1291
  placement
1292
 
1293
  $tip
1298
  var calculatedOffset = this.getCalculatedOffset(placement, pos, actualWidth, actualHeight)
1299
 
1300
  this.applyPlacement(calculatedOffset, placement)
 
1301
 
1302
+ var complete = function () {
1303
  that.$element.trigger('shown.bs.' + that.type)
1304
+ that.hoverState = null
1305
  }
1306
 
1307
  $.support.transition && this.$tip.hasClass('fade') ?
1308
  $tip
1309
+ .one('bsTransitionEnd', complete)
1310
  .emulateTransitionEnd(150) :
1311
  complete()
1312
  }
1313
  }
1314
 
1315
  Tooltip.prototype.applyPlacement = function (offset, placement) {
 
1316
  var $tip = this.tip()
1317
  var width = $tip[0].offsetWidth
1318
  var height = $tip[0].offsetHeight
1346
  var actualHeight = $tip[0].offsetHeight
1347
 
1348
  if (placement == 'top' && actualHeight != height) {
 
1349
  offset.top = offset.top + height - actualHeight
1350
  }
1351
 
1352
+ var delta = this.getViewportAdjustedDelta(placement, offset, actualWidth, actualHeight)
 
1353
 
1354
+ if (delta.left) offset.left += delta.left
1355
+ else offset.top += delta.top
 
1356
 
1357
+ var arrowDelta = delta.left ? delta.left * 2 - width + actualWidth : delta.top * 2 - height + actualHeight
1358
+ var arrowPosition = delta.left ? 'left' : 'top'
1359
+ var arrowOffsetPosition = delta.left ? 'offsetWidth' : 'offsetHeight'
 
 
1360
 
1361
+ $tip.offset(offset)
1362
+ this.replaceArrow(arrowDelta, $tip[0][arrowOffsetPosition], arrowPosition)
 
 
 
 
1363
  }
1364
 
1365
  Tooltip.prototype.replaceArrow = function (delta, dimension, position) {
1379
  var $tip = this.tip()
1380
  var e = $.Event('hide.bs.' + this.type)
1381
 
1382
+ this.$element.removeAttr('aria-describedby')
1383
+
1384
  function complete() {
1385
  if (that.hoverState != 'in') $tip.detach()
1386
  that.$element.trigger('hidden.bs.' + that.type)
1394
 
1395
  $.support.transition && this.$tip.hasClass('fade') ?
1396
  $tip
1397
+ .one('bsTransitionEnd', complete)
1398
  .emulateTransitionEnd(150) :
1399
  complete()
1400
 
1405
 
1406
  Tooltip.prototype.fixTitle = function () {
1407
  var $e = this.$element
1408
+ if ($e.attr('title') || typeof ($e.attr('data-original-title')) != 'string') {
1409
  $e.attr('data-original-title', $e.attr('title') || '').attr('title', '')
1410
  }
1411
  }
1414
  return this.getTitle()
1415
  }
1416
 
1417
+ Tooltip.prototype.getPosition = function ($element) {
1418
+ $element = $element || this.$element
1419
+ var el = $element[0]
1420
+ var isBody = el.tagName == 'BODY'
1421
+ return $.extend({}, (typeof el.getBoundingClientRect == 'function') ? el.getBoundingClientRect() : null, {
1422
+ scroll: isBody ? document.documentElement.scrollTop || document.body.scrollTop : $element.scrollTop(),
1423
+ width: isBody ? $(window).width() : $element.outerWidth(),
1424
+ height: isBody ? $(window).height() : $element.outerHeight()
1425
+ }, isBody ? { top: 0, left: 0 } : $element.offset())
1426
  }
1427
 
1428
  Tooltip.prototype.getCalculatedOffset = function (placement, pos, actualWidth, actualHeight) {
1430
  placement == 'top' ? { top: pos.top - actualHeight, left: pos.left + pos.width / 2 - actualWidth / 2 } :
1431
  placement == 'left' ? { top: pos.top + pos.height / 2 - actualHeight / 2, left: pos.left - actualWidth } :
1432
  /* placement == 'right' */ { top: pos.top + pos.height / 2 - actualHeight / 2, left: pos.left + pos.width }
1433
+
1434
+ }
1435
+
1436
+ Tooltip.prototype.getViewportAdjustedDelta = function (placement, pos, actualWidth, actualHeight) {
1437
+ var delta = { top: 0, left: 0 }
1438
+ if (!this.$viewport) return delta
1439
+
1440
+ var viewportPadding = this.options.viewport && this.options.viewport.padding || 0
1441
+ var viewportDimensions = this.getPosition(this.$viewport)
1442
+
1443
+ if (/right|left/.test(placement)) {
1444
+ var topEdgeOffset = pos.top - viewportPadding - viewportDimensions.scroll
1445
+ var bottomEdgeOffset = pos.top + viewportPadding - viewportDimensions.scroll + actualHeight
1446
+ if (topEdgeOffset < viewportDimensions.top) { // top overflow
1447
+ delta.top = viewportDimensions.top - topEdgeOffset
1448
+ } else if (bottomEdgeOffset > viewportDimensions.top + viewportDimensions.height) { // bottom overflow
1449
+ delta.top = viewportDimensions.top + viewportDimensions.height - bottomEdgeOffset
1450
+ }
1451
+ } else {
1452
+ var leftEdgeOffset = pos.left - viewportPadding
1453
+ var rightEdgeOffset = pos.left + viewportPadding + actualWidth
1454
+ if (leftEdgeOffset < viewportDimensions.left) { // left overflow
1455
+ delta.left = viewportDimensions.left - leftEdgeOffset
1456
+ } else if (rightEdgeOffset > viewportDimensions.width) { // right overflow
1457
+ delta.left = viewportDimensions.left + viewportDimensions.width - rightEdgeOffset
1458
+ }
1459
+ }
1460
+
1461
+ return delta
1462
  }
1463
 
1464
  Tooltip.prototype.getTitle = function () {
1472
  return title
1473
  }
1474
 
1475
+ Tooltip.prototype.getUID = function (prefix) {
1476
+ do prefix += ~~(Math.random() * 1000000)
1477
+ while (document.getElementById(prefix))
1478
+ return prefix
1479
+ }
1480
+
1481
  Tooltip.prototype.tip = function () {
1482
+ return (this.$tip = this.$tip || $(this.options.template))
1483
  }
1484
 
1485
  Tooltip.prototype.arrow = function () {
1486
+ return (this.$arrow = this.$arrow || this.tip().find('.tooltip-arrow'))
1487
  }
1488
 
1489
  Tooltip.prototype.validate = function () {
1507
  }
1508
 
1509
  Tooltip.prototype.toggle = function (e) {
1510
+ var self = this
1511
+ if (e) {
1512
+ self = $(e.currentTarget).data('bs.' + this.type)
1513
+ if (!self) {
1514
+ self = new this.constructor(e.currentTarget, this.getDelegateOptions())
1515
+ $(e.currentTarget).data('bs.' + this.type, self)
1516
+ }
1517
+ }
1518
+
1519
  self.tip().hasClass('in') ? self.leave(self) : self.enter(self)
1520
  }
1521
 
1528
  // TOOLTIP PLUGIN DEFINITION
1529
  // =========================
1530
 
1531
+ function Plugin(option) {
 
 
1532
  return this.each(function () {
1533
  var $this = $(this)
1534
  var data = $this.data('bs.tooltip')
1540
  })
1541
  }
1542
 
1543
+ var old = $.fn.tooltip
1544
+
1545
+ $.fn.tooltip = Plugin
1546
  $.fn.tooltip.Constructor = Tooltip
1547
 
1548
 
1557
  }(jQuery);
1558
 
1559
  /* ========================================================================
1560
+ * Bootstrap: popover.js v3.2.0
1561
  * http://getbootstrap.com/javascript/#popovers
1562
  * ========================================================================
1563
  * Copyright 2011-2014 Twitter, Inc.
1577
 
1578
  if (!$.fn.tooltip) throw new Error('Popover requires tooltip.js')
1579
 
1580
+ Popover.VERSION = '3.2.0'
1581
+
1582
  Popover.DEFAULTS = $.extend({}, $.fn.tooltip.Constructor.DEFAULTS, {
1583
  placement: 'right',
1584
  trigger: 'click',
1585
  content: '',
1586
+ template: '<div class="popover" role="tooltip"><div class="arrow"></div><h3 class="popover-title"></h3><div class="popover-content"></div></div>'
1587
  })
1588
 
1589
 
1604
  var content = this.getContent()
1605
 
1606
  $tip.find('.popover-title')[this.options.html ? 'html' : 'text'](title)
1607
+ $tip.find('.popover-content').empty()[ // we use append for html objects to maintain js events
1608
  this.options.html ? (typeof content == 'string' ? 'html' : 'append') : 'text'
1609
  ](content)
1610
 
1630
  }
1631
 
1632
  Popover.prototype.arrow = function () {
1633
+ return (this.$arrow = this.$arrow || this.tip().find('.arrow'))
1634
  }
1635
 
1636
  Popover.prototype.tip = function () {
1642
  // POPOVER PLUGIN DEFINITION
1643
  // =========================
1644
 
1645
+ function Plugin(option) {
 
 
1646
  return this.each(function () {
1647
  var $this = $(this)
1648
  var data = $this.data('bs.popover')
1654
  })
1655
  }
1656
 
1657
+ var old = $.fn.popover
1658
+
1659
+ $.fn.popover = Plugin
1660
  $.fn.popover.Constructor = Popover
1661
 
1662
 
1671
  }(jQuery);
1672
 
1673
  /* ========================================================================
1674
+ * Bootstrap: scrollspy.js v3.2.0
1675
  * http://getbootstrap.com/javascript/#scrollspy
1676
  * ========================================================================
1677
  * Copyright 2011-2014 Twitter, Inc.
1686
  // ==========================
1687
 
1688
  function ScrollSpy(element, options) {
 
1689
  var process = $.proxy(this.process, this)
1690
 
 
1691
  this.$body = $('body')
1692
+ this.$scrollElement = $(element).is('body') ? $(window) : $(element)
1693
  this.options = $.extend({}, ScrollSpy.DEFAULTS, options)
1694
+ this.selector = (this.options.target || '') + ' .nav li > a'
1695
+ this.offsets = []
1696
+ this.targets = []
 
 
1697
  this.activeTarget = null
1698
+ this.scrollHeight = 0
1699
 
1700
+ this.$scrollElement.on('scroll.bs.scrollspy', process)
1701
  this.refresh()
1702
  this.process()
1703
  }
1704
 
1705
+ ScrollSpy.VERSION = '3.2.0'
1706
+
1707
  ScrollSpy.DEFAULTS = {
1708
  offset: 10
1709
  }
1710
 
1711
+ ScrollSpy.prototype.getScrollHeight = function () {
1712
+ return this.$scrollElement[0].scrollHeight || Math.max(this.$body[0].scrollHeight, document.documentElement.scrollHeight)
1713
+ }
1714
+
1715
  ScrollSpy.prototype.refresh = function () {
1716
+ var offsetMethod = 'offset'
1717
+ var offsetBase = 0
1718
 
1719
+ if (!$.isWindow(this.$scrollElement[0])) {
1720
+ offsetMethod = 'position'
1721
+ offsetBase = this.$scrollElement.scrollTop()
1722
+ }
1723
+
1724
+ this.offsets = []
1725
+ this.targets = []
1726
+ this.scrollHeight = this.getScrollHeight()
1727
 
1728
  var self = this
1729
+
1730
+ this.$body
1731
  .find(this.selector)
1732
  .map(function () {
1733
  var $el = $(this)
1737
  return ($href
1738
  && $href.length
1739
  && $href.is(':visible')
1740
+ && [[$href[offsetMethod]().top + offsetBase, href]]) || null
1741
  })
1742
  .sort(function (a, b) { return a[0] - b[0] })
1743
  .each(function () {
1748
 
1749
  ScrollSpy.prototype.process = function () {
1750
  var scrollTop = this.$scrollElement.scrollTop() + this.options.offset
1751
+ var scrollHeight = this.getScrollHeight()
1752
+ var maxScroll = this.options.offset + scrollHeight - this.$scrollElement.height()
1753
  var offsets = this.offsets
1754
  var targets = this.targets
1755
  var activeTarget = this.activeTarget
1756
  var i
1757
 
1758
+ if (this.scrollHeight != scrollHeight) {
1759
+ this.refresh()
1760
+ }
1761
+
1762
  if (scrollTop >= maxScroll) {
1763
+ return activeTarget != (i = targets[targets.length - 1]) && this.activate(i)
1764
  }
1765
 
1766
  if (activeTarget && scrollTop <= offsets[0]) {
1771
  activeTarget != targets[i]
1772
  && scrollTop >= offsets[i]
1773
  && (!offsets[i + 1] || scrollTop <= offsets[i + 1])
1774
+ && this.activate(targets[i])
1775
  }
1776
  }
1777
 
1803
  // SCROLLSPY PLUGIN DEFINITION
1804
  // ===========================
1805
 
1806
+ function Plugin(option) {
 
 
1807
  return this.each(function () {
1808
  var $this = $(this)
1809
  var data = $this.data('bs.scrollspy')
1814
  })
1815
  }
1816
 
1817
+ var old = $.fn.scrollspy
1818
+
1819
+ $.fn.scrollspy = Plugin
1820
  $.fn.scrollspy.Constructor = ScrollSpy
1821
 
1822
 
1832
  // SCROLLSPY DATA-API
1833
  // ==================
1834
 
1835
+ $(window).on('load.bs.scrollspy.data-api', function () {
1836
  $('[data-spy="scroll"]').each(function () {
1837
  var $spy = $(this)
1838
+ Plugin.call($spy, $spy.data())
1839
  })
1840
  })
1841
 
1842
  }(jQuery);
1843
 
1844
  /* ========================================================================
1845
+ * Bootstrap: tab.js v3.2.0
1846
  * http://getbootstrap.com/javascript/#tabs
1847
  * ========================================================================
1848
  * Copyright 2011-2014 Twitter, Inc.
1860
  this.element = $(element)
1861
  }
1862
 
1863
+ Tab.VERSION = '3.2.0'
1864
+
1865
  Tab.prototype.show = function () {
1866
  var $this = this.element
1867
  var $ul = $this.closest('ul:not(.dropdown-menu)')
1869
 
1870
  if (!selector) {
1871
  selector = $this.attr('href')
1872
+ selector = selector && selector.replace(/.*(?=#[^\s]*$)/, '') // strip for ie7
1873
  }
1874
 
1875
  if ($this.parent('li').hasClass('active')) return
1885
 
1886
  var $target = $(selector)
1887
 
1888
+ this.activate($this.closest('li'), $ul)
1889
  this.activate($target, $target.parent(), function () {
1890
  $this.trigger({
1891
  type: 'shown.bs.tab',
1924
 
1925
  transition ?
1926
  $active
1927
+ .one('bsTransitionEnd', next)
1928
  .emulateTransitionEnd(150) :
1929
  next()
1930
 
1935
  // TAB PLUGIN DEFINITION
1936
  // =====================
1937
 
1938
+ function Plugin(option) {
 
 
1939
  return this.each(function () {
1940
  var $this = $(this)
1941
  var data = $this.data('bs.tab')
1945
  })
1946
  }
1947
 
1948
+ var old = $.fn.tab
1949
+
1950
+ $.fn.tab = Plugin
1951
  $.fn.tab.Constructor = Tab
1952
 
1953
 
1965
 
1966
  $(document).on('click.bs.tab.data-api', '[data-toggle="tab"], [data-toggle="pill"]', function (e) {
1967
  e.preventDefault()
1968
+ Plugin.call($(this), 'show')
1969
  })
1970
 
1971
  }(jQuery);
1972
 
1973
  /* ========================================================================
1974
+ * Bootstrap: affix.js v3.2.0
1975
  * http://getbootstrap.com/javascript/#affix
1976
  * ========================================================================
1977
  * Copyright 2011-2014 Twitter, Inc.
1987
 
1988
  var Affix = function (element, options) {
1989
  this.options = $.extend({}, Affix.DEFAULTS, options)
1990
+
1991
+ this.$target = $(this.options.target)
1992
  .on('scroll.bs.affix.data-api', $.proxy(this.checkPosition, this))
1993
  .on('click.bs.affix.data-api', $.proxy(this.checkPositionWithEventLoop, this))
1994
 
2000
  this.checkPosition()
2001
  }
2002
 
2003
+ Affix.VERSION = '3.2.0'
2004
+
2005
+ Affix.RESET = 'affix affix-top affix-bottom'
2006
 
2007
  Affix.DEFAULTS = {
2008
+ offset: 0,
2009
+ target: window
2010
  }
2011
 
2012
  Affix.prototype.getPinnedOffset = function () {
2013
  if (this.pinnedOffset) return this.pinnedOffset
2014
  this.$element.removeClass(Affix.RESET).addClass('affix')
2015
+ var scrollTop = this.$target.scrollTop()
2016
  var position = this.$element.offset()
2017
  return (this.pinnedOffset = position.top - scrollTop)
2018
  }
2025
  if (!this.$element.is(':visible')) return
2026
 
2027
  var scrollHeight = $(document).height()
2028
+ var scrollTop = this.$target.scrollTop()
2029
  var position = this.$element.offset()
2030
  var offset = this.options.offset
2031
  var offsetTop = offset.top
2032
  var offsetBottom = offset.bottom
2033
 
 
 
2034
  if (typeof offset != 'object') offsetBottom = offsetTop = offset
2035
  if (typeof offsetTop == 'function') offsetTop = offset.top(this.$element)
2036
  if (typeof offsetBottom == 'function') offsetBottom = offset.bottom(this.$element)
2040
  offsetTop != null && (scrollTop <= offsetTop) ? 'top' : false
2041
 
2042
  if (this.affixed === affix) return
2043
+ if (this.unpin != null) this.$element.css('top', '')
2044
 
2045
  var affixType = 'affix' + (affix ? '-' + affix : '')
2046
  var e = $.Event(affixType + '.bs.affix')
2058
  .trigger($.Event(affixType.replace('affix', 'affixed')))
2059
 
2060
  if (affix == 'bottom') {
2061
+ this.$element.offset({
2062
+ top: scrollHeight - this.$element.height() - offsetBottom
2063
+ })
2064
  }
2065
  }
2066
 
2068
  // AFFIX PLUGIN DEFINITION
2069
  // =======================
2070
 
2071
+ function Plugin(option) {
 
 
2072
  return this.each(function () {
2073
  var $this = $(this)
2074
  var data = $this.data('bs.affix')
2079
  })
2080
  }
2081
 
2082
+ var old = $.fn.affix
2083
+
2084
+ $.fn.affix = Plugin
2085
  $.fn.affix.Constructor = Affix
2086
 
2087
 
2107
  if (data.offsetBottom) data.offset.bottom = data.offsetBottom
2108
  if (data.offsetTop) data.offset.top = data.offsetTop
2109
 
2110
+ Plugin.call($spy, data)
2111
  })
2112
  })
2113
 
assets/bootstrap/js/bootstrap.min.js CHANGED
@@ -1,6 +1,6 @@
1
  /*!
2
- * Bootstrap v3.1.0 (http://getbootstrap.com)
3
  * Copyright 2011-2014 Twitter, Inc.
4
  * Licensed under MIT (https://github.com/twbs/bootstrap/blob/master/LICENSE)
5
  */
6
- if("undefined"==typeof jQuery)throw new Error("Bootstrap requires jQuery");+function(a){"use strict";function b(){var a=document.createElement("bootstrap"),b={WebkitTransition:"webkitTransitionEnd",MozTransition:"transitionend",OTransition:"oTransitionEnd otransitionend",transition:"transitionend"};for(var c in b)if(void 0!==a.style[c])return{end:b[c]};return!1}a.fn.emulateTransitionEnd=function(b){var c=!1,d=this;a(this).one(a.support.transition.end,function(){c=!0});var e=function(){c||a(d).trigger(a.support.transition.end)};return setTimeout(e,b),this},a(function(){a.support.transition=b()})}(jQuery),+function(a){"use strict";var b='[data-dismiss="alert"]',c=function(c){a(c).on("click",b,this.close)};c.prototype.close=function(b){function c(){f.trigger("closed.bs.alert").remove()}var d=a(this),e=d.attr("data-target");e||(e=d.attr("href"),e=e&&e.replace(/.*(?=#[^\s]*$)/,""));var f=a(e);b&&b.preventDefault(),f.length||(f=d.hasClass("alert")?d:d.parent()),f.trigger(b=a.Event("close.bs.alert")),b.isDefaultPrevented()||(f.removeClass("in"),a.support.transition&&f.hasClass("fade")?f.one(a.support.transition.end,c).emulateTransitionEnd(150):c())};var d=a.fn.alert;a.fn.alert=function(b){return this.each(function(){var d=a(this),e=d.data("bs.alert");e||d.data("bs.alert",e=new c(this)),"string"==typeof b&&e[b].call(d)})},a.fn.alert.Constructor=c,a.fn.alert.noConflict=function(){return a.fn.alert=d,this},a(document).on("click.bs.alert.data-api",b,c.prototype.close)}(jQuery),+function(a){"use strict";var b=function(c,d){this.$element=a(c),this.options=a.extend({},b.DEFAULTS,d),this.isLoading=!1};b.DEFAULTS={loadingText:"loading..."},b.prototype.setState=function(b){var c="disabled",d=this.$element,e=d.is("input")?"val":"html",f=d.data();b+="Text",f.resetText||d.data("resetText",d[e]()),d[e](f[b]||this.options[b]),setTimeout(a.proxy(function(){"loadingText"==b?(this.isLoading=!0,d.addClass(c).attr(c,c)):this.isLoading&&(this.isLoading=!1,d.removeClass(c).removeAttr(c))},this),0)},b.prototype.toggle=function(){var a=!0,b=this.$element.closest('[data-toggle="buttons"]');if(b.length){var c=this.$element.find("input");"radio"==c.prop("type")&&(c.prop("checked")&&this.$element.hasClass("active")?a=!1:b.find(".active").removeClass("active")),a&&c.prop("checked",!this.$element.hasClass("active")).trigger("change")}a&&this.$element.toggleClass("active")};var c=a.fn.button;a.fn.button=function(c){return this.each(function(){var d=a(this),e=d.data("bs.button"),f="object"==typeof c&&c;e||d.data("bs.button",e=new b(this,f)),"toggle"==c?e.toggle():c&&e.setState(c)})},a.fn.button.Constructor=b,a.fn.button.noConflict=function(){return a.fn.button=c,this},a(document).on("click.bs.button.data-api","[data-toggle^=button]",function(b){var c=a(b.target);c.hasClass("btn")||(c=c.closest(".btn")),c.button("toggle"),b.preventDefault()})}(jQuery),+function(a){"use strict";var b=function(b,c){this.$element=a(b),this.$indicators=this.$element.find(".carousel-indicators"),this.options=c,this.paused=this.sliding=this.interval=this.$active=this.$items=null,"hover"==this.options.pause&&this.$element.on("mouseenter",a.proxy(this.pause,this)).on("mouseleave",a.proxy(this.cycle,this))};b.DEFAULTS={interval:5e3,pause:"hover",wrap:!0},b.prototype.cycle=function(b){return b||(this.paused=!1),this.interval&&clearInterval(this.interval),this.options.interval&&!this.paused&&(this.interval=setInterval(a.proxy(this.next,this),this.options.interval)),this},b.prototype.getActiveIndex=function(){return this.$active=this.$element.find(".item.active"),this.$items=this.$active.parent().children(),this.$items.index(this.$active)},b.prototype.to=function(b){var c=this,d=this.getActiveIndex();return b>this.$items.length-1||0>b?void 0:this.sliding?this.$element.one("slid.bs.carousel",function(){c.to(b)}):d==b?this.pause().cycle():this.slide(b>d?"next":"prev",a(this.$items[b]))},b.prototype.pause=function(b){return b||(this.paused=!0),this.$element.find(".next, .prev").length&&a.support.transition&&(this.$element.trigger(a.support.transition.end),this.cycle(!0)),this.interval=clearInterval(this.interval),this},b.prototype.next=function(){return this.sliding?void 0:this.slide("next")},b.prototype.prev=function(){return this.sliding?void 0:this.slide("prev")},b.prototype.slide=function(b,c){var d=this.$element.find(".item.active"),e=c||d[b](),f=this.interval,g="next"==b?"left":"right",h="next"==b?"first":"last",i=this;if(!e.length){if(!this.options.wrap)return;e=this.$element.find(".item")[h]()}if(e.hasClass("active"))return this.sliding=!1;var j=a.Event("slide.bs.carousel",{relatedTarget:e[0],direction:g});return this.$element.trigger(j),j.isDefaultPrevented()?void 0:(this.sliding=!0,f&&this.pause(),this.$indicators.length&&(this.$indicators.find(".active").removeClass("active"),this.$element.one("slid.bs.carousel",function(){var b=a(i.$indicators.children()[i.getActiveIndex()]);b&&b.addClass("active")})),a.support.transition&&this.$element.hasClass("slide")?(e.addClass(b),e[0].offsetWidth,d.addClass(g),e.addClass(g),d.one(a.support.transition.end,function(){e.removeClass([b,g].join(" ")).addClass("active"),d.removeClass(["active",g].join(" ")),i.sliding=!1,setTimeout(function(){i.$element.trigger("slid.bs.carousel")},0)}).emulateTransitionEnd(1e3*d.css("transition-duration").slice(0,-1))):(d.removeClass("active"),e.addClass("active"),this.sliding=!1,this.$element.trigger("slid.bs.carousel")),f&&this.cycle(),this)};var c=a.fn.carousel;a.fn.carousel=function(c){return this.each(function(){var d=a(this),e=d.data("bs.carousel"),f=a.extend({},b.DEFAULTS,d.data(),"object"==typeof c&&c),g="string"==typeof c?c:f.slide;e||d.data("bs.carousel",e=new b(this,f)),"number"==typeof c?e.to(c):g?e[g]():f.interval&&e.pause().cycle()})},a.fn.carousel.Constructor=b,a.fn.carousel.noConflict=function(){return a.fn.carousel=c,this},a(document).on("click.bs.carousel.data-api","[data-slide], [data-slide-to]",function(b){var c,d=a(this),e=a(d.attr("data-target")||(c=d.attr("href"))&&c.replace(/.*(?=#[^\s]+$)/,"")),f=a.extend({},e.data(),d.data()),g=d.attr("data-slide-to");g&&(f.interval=!1),e.carousel(f),(g=d.attr("data-slide-to"))&&e.data("bs.carousel").to(g),b.preventDefault()}),a(window).on("load",function(){a('[data-ride="carousel"]').each(function(){var b=a(this);b.carousel(b.data())})})}(jQuery),+function(a){"use strict";var b=function(c,d){this.$element=a(c),this.options=a.extend({},b.DEFAULTS,d),this.transitioning=null,this.options.parent&&(this.$parent=a(this.options.parent)),this.options.toggle&&this.toggle()};b.DEFAULTS={toggle:!0},b.prototype.dimension=function(){var a=this.$element.hasClass("width");return a?"width":"height"},b.prototype.show=function(){if(!this.transitioning&&!this.$element.hasClass("in")){var b=a.Event("show.bs.collapse");if(this.$element.trigger(b),!b.isDefaultPrevented()){var c=this.$parent&&this.$parent.find("> .panel > .in");if(c&&c.length){var d=c.data("bs.collapse");if(d&&d.transitioning)return;c.collapse("hide"),d||c.data("bs.collapse",null)}var e=this.dimension();this.$element.removeClass("collapse").addClass("collapsing")[e](0),this.transitioning=1;var f=function(){this.$element.removeClass("collapsing").addClass("collapse in")[e]("auto"),this.transitioning=0,this.$element.trigger("shown.bs.collapse")};if(!a.support.transition)return f.call(this);var g=a.camelCase(["scroll",e].join("-"));this.$element.one(a.support.transition.end,a.proxy(f,this)).emulateTransitionEnd(350)[e](this.$element[0][g])}}},b.prototype.hide=function(){if(!this.transitioning&&this.$element.hasClass("in")){var b=a.Event("hide.bs.collapse");if(this.$element.trigger(b),!b.isDefaultPrevented()){var c=this.dimension();this.$element[c](this.$element[c]())[0].offsetHeight,this.$element.addClass("collapsing").removeClass("collapse").removeClass("in"),this.transitioning=1;var d=function(){this.transitioning=0,this.$element.trigger("hidden.bs.collapse").removeClass("collapsing").addClass("collapse")};return a.support.transition?void this.$element[c](0).one(a.support.transition.end,a.proxy(d,this)).emulateTransitionEnd(350):d.call(this)}}},b.prototype.toggle=function(){this[this.$element.hasClass("in")?"hide":"show"]()};var c=a.fn.collapse;a.fn.collapse=function(c){return this.each(function(){var d=a(this),e=d.data("bs.collapse"),f=a.extend({},b.DEFAULTS,d.data(),"object"==typeof c&&c);!e&&f.toggle&&"show"==c&&(c=!c),e||d.data("bs.collapse",e=new b(this,f)),"string"==typeof c&&e[c]()})},a.fn.collapse.Constructor=b,a.fn.collapse.noConflict=function(){return a.fn.collapse=c,this},a(document).on("click.bs.collapse.data-api","[data-toggle=collapse]",function(b){var c,d=a(this),e=d.attr("data-target")||b.preventDefault()||(c=d.attr("href"))&&c.replace(/.*(?=#[^\s]+$)/,""),f=a(e),g=f.data("bs.collapse"),h=g?"toggle":d.data(),i=d.attr("data-parent"),j=i&&a(i);g&&g.transitioning||(j&&j.find('[data-toggle=collapse][data-parent="'+i+'"]').not(d).addClass("collapsed"),d[f.hasClass("in")?"addClass":"removeClass"]("collapsed")),f.collapse(h)})}(jQuery),+function(a){"use strict";function b(b){a(d).remove(),a(e).each(function(){var d=c(a(this)),e={relatedTarget:this};d.hasClass("open")&&(d.trigger(b=a.Event("hide.bs.dropdown",e)),b.isDefaultPrevented()||d.removeClass("open").trigger("hidden.bs.dropdown",e))})}function c(b){var c=b.attr("data-target");c||(c=b.attr("href"),c=c&&/#[A-Za-z]/.test(c)&&c.replace(/.*(?=#[^\s]*$)/,""));var d=c&&a(c);return d&&d.length?d:b.parent()}var d=".dropdown-backdrop",e="[data-toggle=dropdown]",f=function(b){a(b).on("click.bs.dropdown",this.toggle)};f.prototype.toggle=function(d){var e=a(this);if(!e.is(".disabled, :disabled")){var f=c(e),g=f.hasClass("open");if(b(),!g){"ontouchstart"in document.documentElement&&!f.closest(".navbar-nav").length&&a('<div class="dropdown-backdrop"/>').insertAfter(a(this)).on("click",b);var h={relatedTarget:this};if(f.trigger(d=a.Event("show.bs.dropdown",h)),d.isDefaultPrevented())return;f.toggleClass("open").trigger("shown.bs.dropdown",h),e.focus()}return!1}},f.prototype.keydown=function(b){if(/(38|40|27)/.test(b.keyCode)){var d=a(this);if(b.preventDefault(),b.stopPropagation(),!d.is(".disabled, :disabled")){var f=c(d),g=f.hasClass("open");if(!g||g&&27==b.keyCode)return 27==b.which&&f.find(e).focus(),d.click();var h=" li:not(.divider):visible a",i=f.find("[role=menu]"+h+", [role=listbox]"+h);if(i.length){var j=i.index(i.filter(":focus"));38==b.keyCode&&j>0&&j--,40==b.keyCode&&j<i.length-1&&j++,~j||(j=0),i.eq(j).focus()}}}};var g=a.fn.dropdown;a.fn.dropdown=function(b){return this.each(function(){var c=a(this),d=c.data("bs.dropdown");d||c.data("bs.dropdown",d=new f(this)),"string"==typeof b&&d[b].call(c)})},a.fn.dropdown.Constructor=f,a.fn.dropdown.noConflict=function(){return a.fn.dropdown=g,this},a(document).on("click.bs.dropdown.data-api",b).on("click.bs.dropdown.data-api",".dropdown form",function(a){a.stopPropagation()}).on("click.bs.dropdown.data-api",e,f.prototype.toggle).on("keydown.bs.dropdown.data-api",e+", [role=menu], [role=listbox]",f.prototype.keydown)}(jQuery),+function(a){"use strict";var b=function(b,c){this.options=c,this.$element=a(b),this.$backdrop=this.isShown=null,this.options.remote&&this.$element.find(".modal-content").load(this.options.remote,a.proxy(function(){this.$element.trigger("loaded.bs.modal")},this))};b.DEFAULTS={backdrop:!0,keyboard:!0,show:!0},b.prototype.toggle=function(a){return this[this.isShown?"hide":"show"](a)},b.prototype.show=function(b){var c=this,d=a.Event("show.bs.modal",{relatedTarget:b});this.$element.trigger(d),this.isShown||d.isDefaultPrevented()||(this.isShown=!0,this.escape(),this.$element.on("click.dismiss.bs.modal",'[data-dismiss="modal"]',a.proxy(this.hide,this)),this.backdrop(function(){var d=a.support.transition&&c.$element.hasClass("fade");c.$element.parent().length||c.$element.appendTo(document.body),c.$element.show().scrollTop(0),d&&c.$element[0].offsetWidth,c.$element.addClass("in").attr("aria-hidden",!1),c.enforceFocus();var e=a.Event("shown.bs.modal",{relatedTarget:b});d?c.$element.find(".modal-dialog").one(a.support.transition.end,function(){c.$element.focus().trigger(e)}).emulateTransitionEnd(300):c.$element.focus().trigger(e)}))},b.prototype.hide=function(b){b&&b.preventDefault(),b=a.Event("hide.bs.modal"),this.$element.trigger(b),this.isShown&&!b.isDefaultPrevented()&&(this.isShown=!1,this.escape(),a(document).off("focusin.bs.modal"),this.$element.removeClass("in").attr("aria-hidden",!0).off("click.dismiss.bs.modal"),a.support.transition&&this.$element.hasClass("fade")?this.$element.one(a.support.transition.end,a.proxy(this.hideModal,this)).emulateTransitionEnd(300):this.hideModal())},b.prototype.enforceFocus=function(){a(document).off("focusin.bs.modal").on("focusin.bs.modal",a.proxy(function(a){this.$element[0]===a.target||this.$element.has(a.target).length||this.$element.focus()},this))},b.prototype.escape=function(){this.isShown&&this.options.keyboard?this.$element.on("keyup.dismiss.bs.modal",a.proxy(function(a){27==a.which&&this.hide()},this)):this.isShown||this.$element.off("keyup.dismiss.bs.modal")},b.prototype.hideModal=function(){var a=this;this.$element.hide(),this.backdrop(function(){a.removeBackdrop(),a.$element.trigger("hidden.bs.modal")})},b.prototype.removeBackdrop=function(){this.$backdrop&&this.$backdrop.remove(),this.$backdrop=null},b.prototype.backdrop=function(b){var c=this.$element.hasClass("fade")?"fade":"";if(this.isShown&&this.options.backdrop){var d=a.support.transition&&c;if(this.$backdrop=a('<div class="modal-backdrop '+c+'" />').appendTo(document.body),this.$element.on("click.dismiss.bs.modal",a.proxy(function(a){a.target===a.currentTarget&&("static"==this.options.backdrop?this.$element[0].focus.call(this.$element[0]):this.hide.call(this))},this)),d&&this.$backdrop[0].offsetWidth,this.$backdrop.addClass("in"),!b)return;d?this.$backdrop.one(a.support.transition.end,b).emulateTransitionEnd(150):b()}else!this.isShown&&this.$backdrop?(this.$backdrop.removeClass("in"),a.support.transition&&this.$element.hasClass("fade")?this.$backdrop.one(a.support.transition.end,b).emulateTransitionEnd(150):b()):b&&b()};var c=a.fn.modal;a.fn.modal=function(c,d){return this.each(function(){var e=a(this),f=e.data("bs.modal"),g=a.extend({},b.DEFAULTS,e.data(),"object"==typeof c&&c);f||e.data("bs.modal",f=new b(this,g)),"string"==typeof c?f[c](d):g.show&&f.show(d)})},a.fn.modal.Constructor=b,a.fn.modal.noConflict=function(){return a.fn.modal=c,this},a(document).on("click.bs.modal.data-api",'[data-toggle="modal"]',function(b){var c=a(this),d=c.attr("href"),e=a(c.attr("data-target")||d&&d.replace(/.*(?=#[^\s]+$)/,"")),f=e.data("bs.modal")?"toggle":a.extend({remote:!/#/.test(d)&&d},e.data(),c.data());c.is("a")&&b.preventDefault(),e.modal(f,this).one("hide",function(){c.is(":visible")&&c.focus()})}),a(document).on("show.bs.modal",".modal",function(){a(document.body).addClass("modal-open")}).on("hidden.bs.modal",".modal",function(){a(document.body).removeClass("modal-open")})}(jQuery),+function(a){"use strict";var b=function(a,b){this.type=this.options=this.enabled=this.timeout=this.hoverState=this.$element=null,this.init("tooltip",a,b)};b.DEFAULTS={animation:!0,placement:"top",selector:!1,template:'<div class="tooltip"><div class="tooltip-arrow"></div><div class="tooltip-inner"></div></div>',trigger:"hover focus",title:"",delay:0,html:!1,container:!1},b.prototype.init=function(b,c,d){this.enabled=!0,this.type=b,this.$element=a(c),this.options=this.getOptions(d);for(var e=this.options.trigger.split(" "),f=e.length;f--;){var g=e[f];if("click"==g)this.$element.on("click."+this.type,this.options.selector,a.proxy(this.toggle,this));else if("manual"!=g){var h="hover"==g?"mouseenter":"focusin",i="hover"==g?"mouseleave":"focusout";this.$element.on(h+"."+this.type,this.options.selector,a.proxy(this.enter,this)),this.$element.on(i+"."+this.type,this.options.selector,a.proxy(this.leave,this))}}this.options.selector?this._options=a.extend({},this.options,{trigger:"manual",selector:""}):this.fixTitle()},b.prototype.getDefaults=function(){return b.DEFAULTS},b.prototype.getOptions=function(b){return b=a.extend({},this.getDefaults(),this.$element.data(),b),b.delay&&"number"==typeof b.delay&&(b.delay={show:b.delay,hide:b.delay}),b},b.prototype.getDelegateOptions=function(){var b={},c=this.getDefaults();return this._options&&a.each(this._options,function(a,d){c[a]!=d&&(b[a]=d)}),b},b.prototype.enter=function(b){var c=b instanceof this.constructor?b:a(b.currentTarget)[this.type](this.getDelegateOptions()).data("bs."+this.type);return clearTimeout(c.timeout),c.hoverState="in",c.options.delay&&c.options.delay.show?void(c.timeout=setTimeout(function(){"in"==c.hoverState&&c.show()},c.options.delay.show)):c.show()},b.prototype.leave=function(b){var c=b instanceof this.constructor?b:a(b.currentTarget)[this.type](this.getDelegateOptions()).data("bs."+this.type);return clearTimeout(c.timeout),c.hoverState="out",c.options.delay&&c.options.delay.hide?void(c.timeout=setTimeout(function(){"out"==c.hoverState&&c.hide()},c.options.delay.hide)):c.hide()},b.prototype.show=function(){var b=a.Event("show.bs."+this.type);if(this.hasContent()&&this.enabled){if(this.$element.trigger(b),b.isDefaultPrevented())return;var c=this,d=this.tip();this.setContent(),this.options.animation&&d.addClass("fade");var e="function"==typeof this.options.placement?this.options.placement.call(this,d[0],this.$element[0]):this.options.placement,f=/\s?auto?\s?/i,g=f.test(e);g&&(e=e.replace(f,"")||"top"),d.detach().css({top:0,left:0,display:"block"}).addClass(e),this.options.container?d.appendTo(this.options.container):d.insertAfter(this.$element);var h=this.getPosition(),i=d[0].offsetWidth,j=d[0].offsetHeight;if(g){var k=this.$element.parent(),l=e,m=document.documentElement.scrollTop||document.body.scrollTop,n="body"==this.options.container?window.innerWidth:k.outerWidth(),o="body"==this.options.container?window.innerHeight:k.outerHeight(),p="body"==this.options.container?0:k.offset().left;e="bottom"==e&&h.top+h.height+j-m>o?"top":"top"==e&&h.top-m-j<0?"bottom":"right"==e&&h.right+i>n?"left":"left"==e&&h.left-i<p?"right":e,d.removeClass(l).addClass(e)}var q=this.getCalculatedOffset(e,h,i,j);this.applyPlacement(q,e),this.hoverState=null;var r=function(){c.$element.trigger("shown.bs."+c.type)};a.support.transition&&this.$tip.hasClass("fade")?d.one(a.support.transition.end,r).emulateTransitionEnd(150):r()}},b.prototype.applyPlacement=function(b,c){var d,e=this.tip(),f=e[0].offsetWidth,g=e[0].offsetHeight,h=parseInt(e.css("margin-top"),10),i=parseInt(e.css("margin-left"),10);isNaN(h)&&(h=0),isNaN(i)&&(i=0),b.top=b.top+h,b.left=b.left+i,a.offset.setOffset(e[0],a.extend({using:function(a){e.css({top:Math.round(a.top),left:Math.round(a.left)})}},b),0),e.addClass("in");var j=e[0].offsetWidth,k=e[0].offsetHeight;if("top"==c&&k!=g&&(d=!0,b.top=b.top+g-k),/bottom|top/.test(c)){var l=0;b.left<0&&(l=-2*b.left,b.left=0,e.offset(b),j=e[0].offsetWidth,k=e[0].offsetHeight),this.replaceArrow(l-f+j,j,"left")}else this.replaceArrow(k-g,k,"top");d&&e.offset(b)},b.prototype.replaceArrow=function(a,b,c){this.arrow().css(c,a?50*(1-a/b)+"%":"")},b.prototype.setContent=function(){var a=this.tip(),b=this.getTitle();a.find(".tooltip-inner")[this.options.html?"html":"text"](b),a.removeClass("fade in top bottom left right")},b.prototype.hide=function(){function b(){"in"!=c.hoverState&&d.detach(),c.$element.trigger("hidden.bs."+c.type)}var c=this,d=this.tip(),e=a.Event("hide.bs."+this.type);return this.$element.trigger(e),e.isDefaultPrevented()?void 0:(d.removeClass("in"),a.support.transition&&this.$tip.hasClass("fade")?d.one(a.support.transition.end,b).emulateTransitionEnd(150):b(),this.hoverState=null,this)},b.prototype.fixTitle=function(){var a=this.$element;(a.attr("title")||"string"!=typeof a.attr("data-original-title"))&&a.attr("data-original-title",a.attr("title")||"").attr("title","")},b.prototype.hasContent=function(){return this.getTitle()},b.prototype.getPosition=function(){var b=this.$element[0];return a.extend({},"function"==typeof b.getBoundingClientRect?b.getBoundingClientRect():{width:b.offsetWidth,height:b.offsetHeight},this.$element.offset())},b.prototype.getCalculatedOffset=function(a,b,c,d){return"bottom"==a?{top:b.top+b.height,left:b.left+b.width/2-c/2}:"top"==a?{top:b.top-d,left:b.left+b.width/2-c/2}:"left"==a?{top:b.top+b.height/2-d/2,left:b.left-c}:{top:b.top+b.height/2-d/2,left:b.left+b.width}},b.prototype.getTitle=function(){var a,b=this.$element,c=this.options;return a=b.attr("data-original-title")||("function"==typeof c.title?c.title.call(b[0]):c.title)},b.prototype.tip=function(){return this.$tip=this.$tip||a(this.options.template)},b.prototype.arrow=function(){return this.$arrow=this.$arrow||this.tip().find(".tooltip-arrow")},b.prototype.validate=function(){this.$element[0].parentNode||(this.hide(),this.$element=null,this.options=null)},b.prototype.enable=function(){this.enabled=!0},b.prototype.disable=function(){this.enabled=!1},b.prototype.toggleEnabled=function(){this.enabled=!this.enabled},b.prototype.toggle=function(b){var c=b?a(b.currentTarget)[this.type](this.getDelegateOptions()).data("bs."+this.type):this;c.tip().hasClass("in")?c.leave(c):c.enter(c)},b.prototype.destroy=function(){clearTimeout(this.timeout),this.hide().$element.off("."+this.type).removeData("bs."+this.type)};var c=a.fn.tooltip;a.fn.tooltip=function(c){return this.each(function(){var d=a(this),e=d.data("bs.tooltip"),f="object"==typeof c&&c;(e||"destroy"!=c)&&(e||d.data("bs.tooltip",e=new b(this,f)),"string"==typeof c&&e[c]())})},a.fn.tooltip.Constructor=b,a.fn.tooltip.noConflict=function(){return a.fn.tooltip=c,this}}(jQuery),+function(a){"use strict";var b=function(a,b){this.init("popover",a,b)};if(!a.fn.tooltip)throw new Error("Popover requires tooltip.js");b.DEFAULTS=a.extend({},a.fn.tooltip.Constructor.DEFAULTS,{placement:"right",trigger:"click",content:"",template:'<div class="popover"><div class="arrow"></div><h3 class="popover-title"></h3><div class="popover-content"></div></div>'}),b.prototype=a.extend({},a.fn.tooltip.Constructor.prototype),b.prototype.constructor=b,b.prototype.getDefaults=function(){return b.DEFAULTS},b.prototype.setContent=function(){var a=this.tip(),b=this.getTitle(),c=this.getContent();a.find(".popover-title")[this.options.html?"html":"text"](b),a.find(".popover-content")[this.options.html?"string"==typeof c?"html":"append":"text"](c),a.removeClass("fade top bottom left right in"),a.find(".popover-title").html()||a.find(".popover-title").hide()},b.prototype.hasContent=function(){return this.getTitle()||this.getContent()},b.prototype.getContent=function(){var a=this.$element,b=this.options;return a.attr("data-content")||("function"==typeof b.content?b.content.call(a[0]):b.content)},b.prototype.arrow=function(){return this.$arrow=this.$arrow||this.tip().find(".arrow")},b.prototype.tip=function(){return this.$tip||(this.$tip=a(this.options.template)),this.$tip};var c=a.fn.popover;a.fn.popover=function(c){return this.each(function(){var d=a(this),e=d.data("bs.popover"),f="object"==typeof c&&c;(e||"destroy"!=c)&&(e||d.data("bs.popover",e=new b(this,f)),"string"==typeof c&&e[c]())})},a.fn.popover.Constructor=b,a.fn.popover.noConflict=function(){return a.fn.popover=c,this}}(jQuery),+function(a){"use strict";function b(c,d){var e,f=a.proxy(this.process,this);this.$element=a(a(c).is("body")?window:c),this.$body=a("body"),this.$scrollElement=this.$element.on("scroll.bs.scroll-spy.data-api",f),this.options=a.extend({},b.DEFAULTS,d),this.selector=(this.options.target||(e=a(c).attr("href"))&&e.replace(/.*(?=#[^\s]+$)/,"")||"")+" .nav li > a",this.offsets=a([]),this.targets=a([]),this.activeTarget=null,this.refresh(),this.process()}b.DEFAULTS={offset:10},b.prototype.refresh=function(){var b=this.$element[0]==window?"offset":"position";this.offsets=a([]),this.targets=a([]);{var c=this;this.$body.find(this.selector).map(function(){var d=a(this),e=d.data("target")||d.attr("href"),f=/^#./.test(e)&&a(e);return f&&f.length&&f.is(":visible")&&[[f[b]().top+(!a.isWindow(c.$scrollElement.get(0))&&c.$scrollElement.scrollTop()),e]]||null}).sort(function(a,b){return a[0]-b[0]}).each(function(){c.offsets.push(this[0]),c.targets.push(this[1])})}},b.prototype.process=function(){var a,b=this.$scrollElement.scrollTop()+this.options.offset,c=this.$scrollElement[0].scrollHeight||this.$body[0].scrollHeight,d=c-this.$scrollElement.height(),e=this.offsets,f=this.targets,g=this.activeTarget;if(b>=d)return g!=(a=f.last()[0])&&this.activate(a);if(g&&b<=e[0])return g!=(a=f[0])&&this.activate(a);for(a=e.length;a--;)g!=f[a]&&b>=e[a]&&(!e[a+1]||b<=e[a+1])&&this.activate(f[a])},b.prototype.activate=function(b){this.activeTarget=b,a(this.selector).parentsUntil(this.options.target,".active").removeClass("active");var c=this.selector+'[data-target="'+b+'"],'+this.selector+'[href="'+b+'"]',d=a(c).parents("li").addClass("active");d.parent(".dropdown-menu").length&&(d=d.closest("li.dropdown").addClass("active")),d.trigger("activate.bs.scrollspy")};var c=a.fn.scrollspy;a.fn.scrollspy=function(c){return this.each(function(){var d=a(this),e=d.data("bs.scrollspy"),f="object"==typeof c&&c;e||d.data("bs.scrollspy",e=new b(this,f)),"string"==typeof c&&e[c]()})},a.fn.scrollspy.Constructor=b,a.fn.scrollspy.noConflict=function(){return a.fn.scrollspy=c,this},a(window).on("load",function(){a('[data-spy="scroll"]').each(function(){var b=a(this);b.scrollspy(b.data())})})}(jQuery),+function(a){"use strict";var b=function(b){this.element=a(b)};b.prototype.show=function(){var b=this.element,c=b.closest("ul:not(.dropdown-menu)"),d=b.data("target");if(d||(d=b.attr("href"),d=d&&d.replace(/.*(?=#[^\s]*$)/,"")),!b.parent("li").hasClass("active")){var e=c.find(".active:last a")[0],f=a.Event("show.bs.tab",{relatedTarget:e});if(b.trigger(f),!f.isDefaultPrevented()){var g=a(d);this.activate(b.parent("li"),c),this.activate(g,g.parent(),function(){b.trigger({type:"shown.bs.tab",relatedTarget:e})})}}},b.prototype.activate=function(b,c,d){function e(){f.removeClass("active").find("> .dropdown-menu > .active").removeClass("active"),b.addClass("active"),g?(b[0].offsetWidth,b.addClass("in")):b.removeClass("fade"),b.parent(".dropdown-menu")&&b.closest("li.dropdown").addClass("active"),d&&d()}var f=c.find("> .active"),g=d&&a.support.transition&&f.hasClass("fade");g?f.one(a.support.transition.end,e).emulateTransitionEnd(150):e(),f.removeClass("in")};var c=a.fn.tab;a.fn.tab=function(c){return this.each(function(){var d=a(this),e=d.data("bs.tab");e||d.data("bs.tab",e=new b(this)),"string"==typeof c&&e[c]()})},a.fn.tab.Constructor=b,a.fn.tab.noConflict=function(){return a.fn.tab=c,this},a(document).on("click.bs.tab.data-api",'[data-toggle="tab"], [data-toggle="pill"]',function(b){b.preventDefault(),a(this).tab("show")})}(jQuery),+function(a){"use strict";var b=function(c,d){this.options=a.extend({},b.DEFAULTS,d),this.$window=a(window).on("scroll.bs.affix.data-api",a.proxy(this.checkPosition,this)).on("click.bs.affix.data-api",a.proxy(this.checkPositionWithEventLoop,this)),this.$element=a(c),this.affixed=this.unpin=this.pinnedOffset=null,this.checkPosition()};b.RESET="affix affix-top affix-bottom",b.DEFAULTS={offset:0},b.prototype.getPinnedOffset=function(){if(this.pinnedOffset)return this.pinnedOffset;this.$element.removeClass(b.RESET).addClass("affix");var a=this.$window.scrollTop(),c=this.$element.offset();return this.pinnedOffset=c.top-a},b.prototype.checkPositionWithEventLoop=function(){setTimeout(a.proxy(this.checkPosition,this),1)},b.prototype.checkPosition=function(){if(this.$element.is(":visible")){var c=a(document).height(),d=this.$window.scrollTop(),e=this.$element.offset(),f=this.options.offset,g=f.top,h=f.bottom;"top"==this.affixed&&(e.top+=d),"object"!=typeof f&&(h=g=f),"function"==typeof g&&(g=f.top(this.$element)),"function"==typeof h&&(h=f.bottom(this.$element));var i=null!=this.unpin&&d+this.unpin<=e.top?!1:null!=h&&e.top+this.$element.height()>=c-h?"bottom":null!=g&&g>=d?"top":!1;if(this.affixed!==i){this.unpin&&this.$element.css("top","");var j="affix"+(i?"-"+i:""),k=a.Event(j+".bs.affix");this.$element.trigger(k),k.isDefaultPrevented()||(this.affixed=i,this.unpin="bottom"==i?this.getPinnedOffset():null,this.$element.removeClass(b.RESET).addClass(j).trigger(a.Event(j.replace("affix","affixed"))),"bottom"==i&&this.$element.offset({top:c-h-this.$element.height()}))}}};var c=a.fn.affix;a.fn.affix=function(c){return this.each(function(){var d=a(this),e=d.data("bs.affix"),f="object"==typeof c&&c;e||d.data("bs.affix",e=new b(this,f)),"string"==typeof c&&e[c]()})},a.fn.affix.Constructor=b,a.fn.affix.noConflict=function(){return a.fn.affix=c,this},a(window).on("load",function(){a('[data-spy="affix"]').each(function(){var b=a(this),c=b.data();c.offset=c.offset||{},c.offsetBottom&&(c.offset.bottom=c.offsetBottom),c.offsetTop&&(c.offset.top=c.offsetTop),b.affix(c)})})}(jQuery);
1
  /*!
2
+ * Bootstrap v3.2.0 (http://getbootstrap.com)
3
  * Copyright 2011-2014 Twitter, Inc.
4
  * Licensed under MIT (https://github.com/twbs/bootstrap/blob/master/LICENSE)
5
  */
6
+ if("undefined"==typeof jQuery)throw new Error("Bootstrap's JavaScript requires jQuery");+function(a){"use strict";function b(){var a=document.createElement("bootstrap"),b={WebkitTransition:"webkitTransitionEnd",MozTransition:"transitionend",OTransition:"oTransitionEnd otransitionend",transition:"transitionend"};for(var c in b)if(void 0!==a.style[c])return{end:b[c]};return!1}a.fn.emulateTransitionEnd=function(b){var c=!1,d=this;a(this).one("bsTransitionEnd",function(){c=!0});var e=function(){c||a(d).trigger(a.support.transition.end)};return setTimeout(e,b),this},a(function(){a.support.transition=b(),a.support.transition&&(a.event.special.bsTransitionEnd={bindType:a.support.transition.end,delegateType:a.support.transition.end,handle:function(b){return a(b.target).is(this)?b.handleObj.handler.apply(this,arguments):void 0}})})}(jQuery),+function(a){"use strict";function b(b){return this.each(function(){var c=a(this),e=c.data("bs.alert");e||c.data("bs.alert",e=new d(this)),"string"==typeof b&&e[b].call(c)})}var c='[data-dismiss="alert"]',d=function(b){a(b).on("click",c,this.close)};d.VERSION="3.2.0",d.prototype.close=function(b){function c(){f.detach().trigger("closed.bs.alert").remove()}var d=a(this),e=d.attr("data-target");e||(e=d.attr("href"),e=e&&e.replace(/.*(?=#[^\s]*$)/,""));var f=a(e);b&&b.preventDefault(),f.length||(f=d.hasClass("alert")?d:d.parent()),f.trigger(b=a.Event("close.bs.alert")),b.isDefaultPrevented()||(f.removeClass("in"),a.support.transition&&f.hasClass("fade")?f.one("bsTransitionEnd",c).emulateTransitionEnd(150):c())};var e=a.fn.alert;a.fn.alert=b,a.fn.alert.Constructor=d,a.fn.alert.noConflict=function(){return a.fn.alert=e,this},a(document).on("click.bs.alert.data-api",c,d.prototype.close)}(jQuery),+function(a){"use strict";function b(b){return this.each(function(){var d=a(this),e=d.data("bs.button"),f="object"==typeof b&&b;e||d.data("bs.button",e=new c(this,f)),"toggle"==b?e.toggle():b&&e.setState(b)})}var c=function(b,d){this.$element=a(b),this.options=a.extend({},c.DEFAULTS,d),this.isLoading=!1};c.VERSION="3.2.0",c.DEFAULTS={loadingText:"loading..."},c.prototype.setState=function(b){var c="disabled",d=this.$element,e=d.is("input")?"val":"html",f=d.data();b+="Text",null==f.resetText&&d.data("resetText",d[e]()),d[e](null==f[b]?this.options[b]:f[b]),setTimeout(a.proxy(function(){"loadingText"==b?(this.isLoading=!0,d.addClass(c).attr(c,c)):this.isLoading&&(this.isLoading=!1,d.removeClass(c).removeAttr(c))},this),0)},c.prototype.toggle=function(){var a=!0,b=this.$element.closest('[data-toggle="buttons"]');if(b.length){var c=this.$element.find("input");"radio"==c.prop("type")&&(c.prop("checked")&&this.$element.hasClass("active")?a=!1:b.find(".active").removeClass("active")),a&&c.prop("checked",!this.$element.hasClass("active")).trigger("change")}a&&this.$element.toggleClass("active")};var d=a.fn.button;a.fn.button=b,a.fn.button.Constructor=c,a.fn.button.noConflict=function(){return a.fn.button=d,this},a(document).on("click.bs.button.data-api",'[data-toggle^="button"]',function(c){var d=a(c.target);d.hasClass("btn")||(d=d.closest(".btn")),b.call(d,"toggle"),c.preventDefault()})}(jQuery),+function(a){"use strict";function b(b){return this.each(function(){var d=a(this),e=d.data("bs.carousel"),f=a.extend({},c.DEFAULTS,d.data(),"object"==typeof b&&b),g="string"==typeof b?b:f.slide;e||d.data("bs.carousel",e=new c(this,f)),"number"==typeof b?e.to(b):g?e[g]():f.interval&&e.pause().cycle()})}var c=function(b,c){this.$element=a(b).on("keydown.bs.carousel",a.proxy(this.keydown,this)),this.$indicators=this.$element.find(".carousel-indicators"),this.options=c,this.paused=this.sliding=this.interval=this.$active=this.$items=null,"hover"==this.options.pause&&this.$element.on("mouseenter.bs.carousel",a.proxy(this.pause,this)).on("mouseleave.bs.carousel",a.proxy(this.cycle,this))};c.VERSION="3.2.0",c.DEFAULTS={interval:5e3,pause:"hover",wrap:!0},c.prototype.keydown=function(a){switch(a.which){case 37:this.prev();break;case 39:this.next();break;default:return}a.preventDefault()},c.prototype.cycle=function(b){return b||(this.paused=!1),this.interval&&clearInterval(this.interval),this.options.interval&&!this.paused&&(this.interval=setInterval(a.proxy(this.next,this),this.options.interval)),this},c.prototype.getItemIndex=function(a){return this.$items=a.parent().children(".item"),this.$items.index(a||this.$active)},c.prototype.to=function(b){var c=this,d=this.getItemIndex(this.$active=this.$element.find(".item.active"));return b>this.$items.length-1||0>b?void 0:this.sliding?this.$element.one("slid.bs.carousel",function(){c.to(b)}):d==b?this.pause().cycle():this.slide(b>d?"next":"prev",a(this.$items[b]))},c.prototype.pause=function(b){return b||(this.paused=!0),this.$element.find(".next, .prev").length&&a.support.transition&&(this.$element.trigger(a.support.transition.end),this.cycle(!0)),this.interval=clearInterval(this.interval),this},c.prototype.next=function(){return this.sliding?void 0:this.slide("next")},c.prototype.prev=function(){return this.sliding?void 0:this.slide("prev")},c.prototype.slide=function(b,c){var d=this.$element.find(".item.active"),e=c||d[b](),f=this.interval,g="next"==b?"left":"right",h="next"==b?"first":"last",i=this;if(!e.length){if(!this.options.wrap)return;e=this.$element.find(".item")[h]()}if(e.hasClass("active"))return this.sliding=!1;var j=e[0],k=a.Event("slide.bs.carousel",{relatedTarget:j,direction:g});if(this.$element.trigger(k),!k.isDefaultPrevented()){if(this.sliding=!0,f&&this.pause(),this.$indicators.length){this.$indicators.find(".active").removeClass("active");var l=a(this.$indicators.children()[this.getItemIndex(e)]);l&&l.addClass("active")}var m=a.Event("slid.bs.carousel",{relatedTarget:j,direction:g});return a.support.transition&&this.$element.hasClass("slide")?(e.addClass(b),e[0].offsetWidth,d.addClass(g),e.addClass(g),d.one("bsTransitionEnd",function(){e.removeClass([b,g].join(" ")).addClass("active"),d.removeClass(["active",g].join(" ")),i.sliding=!1,setTimeout(function(){i.$element.trigger(m)},0)}).emulateTransitionEnd(1e3*d.css("transition-duration").slice(0,-1))):(d.removeClass("active"),e.addClass("active"),this.sliding=!1,this.$element.trigger(m)),f&&this.cycle(),this}};var d=a.fn.carousel;a.fn.carousel=b,a.fn.carousel.Constructor=c,a.fn.carousel.noConflict=function(){return a.fn.carousel=d,this},a(document).on("click.bs.carousel.data-api","[data-slide], [data-slide-to]",function(c){var d,e=a(this),f=a(e.attr("data-target")||(d=e.attr("href"))&&d.replace(/.*(?=#[^\s]+$)/,""));if(f.hasClass("carousel")){var g=a.extend({},f.data(),e.data()),h=e.attr("data-slide-to");h&&(g.interval=!1),b.call(f,g),h&&f.data("bs.carousel").to(h),c.preventDefault()}}),a(window).on("load",function(){a('[data-ride="carousel"]').each(function(){var c=a(this);b.call(c,c.data())})})}(jQuery),+function(a){"use strict";function b(b){return this.each(function(){var d=a(this),e=d.data("bs.collapse"),f=a.extend({},c.DEFAULTS,d.data(),"object"==typeof b&&b);!e&&f.toggle&&"show"==b&&(b=!b),e||d.data("bs.collapse",e=new c(this,f)),"string"==typeof b&&e[b]()})}var c=function(b,d){this.$element=a(b),this.options=a.extend({},c.DEFAULTS,d),this.transitioning=null,this.options.parent&&(this.$parent=a(this.options.parent)),this.options.toggle&&this.toggle()};c.VERSION="3.2.0",c.DEFAULTS={toggle:!0},c.prototype.dimension=function(){var a=this.$element.hasClass("width");return a?"width":"height"},c.prototype.show=function(){if(!this.transitioning&&!this.$element.hasClass("in")){var c=a.Event("show.bs.collapse");if(this.$element.trigger(c),!c.isDefaultPrevented()){var d=this.$parent&&this.$parent.find("> .panel > .in");if(d&&d.length){var e=d.data("bs.collapse");if(e&&e.transitioning)return;b.call(d,"hide"),e||d.data("bs.collapse",null)}var f=this.dimension();this.$element.removeClass("collapse").addClass("collapsing")[f](0),this.transitioning=1;var g=function(){this.$element.removeClass("collapsing").addClass("collapse in")[f](""),this.transitioning=0,this.$element.trigger("shown.bs.collapse")};if(!a.support.transition)return g.call(this);var h=a.camelCase(["scroll",f].join("-"));this.$element.one("bsTransitionEnd",a.proxy(g,this)).emulateTransitionEnd(350)[f](this.$element[0][h])}}},c.prototype.hide=function(){if(!this.transitioning&&this.$element.hasClass("in")){var b=a.Event("hide.bs.collapse");if(this.$element.trigger(b),!b.isDefaultPrevented()){var c=this.dimension();this.$element[c](this.$element[c]())[0].offsetHeight,this.$element.addClass("collapsing").removeClass("collapse").removeClass("in"),this.transitioning=1;var d=function(){this.transitioning=0,this.$element.trigger("hidden.bs.collapse").removeClass("collapsing").addClass("collapse")};return a.support.transition?void this.$element[c](0).one("bsTransitionEnd",a.proxy(d,this)).emulateTransitionEnd(350):d.call(this)}}},c.prototype.toggle=function(){this[this.$element.hasClass("in")?"hide":"show"]()};var d=a.fn.collapse;a.fn.collapse=b,a.fn.collapse.Constructor=c,a.fn.collapse.noConflict=function(){return a.fn.collapse=d,this},a(document).on("click.bs.collapse.data-api",'[data-toggle="collapse"]',function(c){var d,e=a(this),f=e.attr("data-target")||c.preventDefault()||(d=e.attr("href"))&&d.replace(/.*(?=#[^\s]+$)/,""),g=a(f),h=g.data("bs.collapse"),i=h?"toggle":e.data(),j=e.attr("data-parent"),k=j&&a(j);h&&h.transitioning||(k&&k.find('[data-toggle="collapse"][data-parent="'+j+'"]').not(e).addClass("collapsed"),e[g.hasClass("in")?"addClass":"removeClass"]("collapsed")),b.call(g,i)})}(jQuery),+function(a){"use strict";function b(b){b&&3===b.which||(a(e).remove(),a(f).each(function(){var d=c(a(this)),e={relatedTarget:this};d.hasClass("open")&&(d.trigger(b=a.Event("hide.bs.dropdown",e)),b.isDefaultPrevented()||d.removeClass("open").trigger("hidden.bs.dropdown",e))}))}function c(b){var c=b.attr("data-target");c||(c=b.attr("href"),c=c&&/#[A-Za-z]/.test(c)&&c.replace(/.*(?=#[^\s]*$)/,""));var d=c&&a(c);return d&&d.length?d:b.parent()}function d(b){return this.each(function(){var c=a(this),d=c.data("bs.dropdown");d||c.data("bs.dropdown",d=new g(this)),"string"==typeof b&&d[b].call(c)})}var e=".dropdown-backdrop",f='[data-toggle="dropdown"]',g=function(b){a(b).on("click.bs.dropdown",this.toggle)};g.VERSION="3.2.0",g.prototype.toggle=function(d){var e=a(this);if(!e.is(".disabled, :disabled")){var f=c(e),g=f.hasClass("open");if(b(),!g){"ontouchstart"in document.documentElement&&!f.closest(".navbar-nav").length&&a('<div class="dropdown-backdrop"/>').insertAfter(a(this)).on("click",b);var h={relatedTarget:this};if(f.trigger(d=a.Event("show.bs.dropdown",h)),d.isDefaultPrevented())return;e.trigger("focus"),f.toggleClass("open").trigger("shown.bs.dropdown",h)}return!1}},g.prototype.keydown=function(b){if(/(38|40|27)/.test(b.keyCode)){var d=a(this);if(b.preventDefault(),b.stopPropagation(),!d.is(".disabled, :disabled")){var e=c(d),g=e.hasClass("open");if(!g||g&&27==b.keyCode)return 27==b.which&&e.find(f).trigger("focus"),d.trigger("click");var h=" li:not(.divider):visible a",i=e.find('[role="menu"]'+h+', [role="listbox"]'+h);if(i.length){var j=i.index(i.filter(":focus"));38==b.keyCode&&j>0&&j--,40==b.keyCode&&j<i.length-1&&j++,~j||(j=0),i.eq(j).trigger("focus")}}}};var h=a.fn.dropdown;a.fn.dropdown=d,a.fn.dropdown.Constructor=g,a.fn.dropdown.noConflict=function(){return a.fn.dropdown=h,this},a(document).on("click.bs.dropdown.data-api",b).on("click.bs.dropdown.data-api",".dropdown form",function(a){a.stopPropagation()}).on("click.bs.dropdown.data-api",f,g.prototype.toggle).on("keydown.bs.dropdown.data-api",f+', [role="menu"], [role="listbox"]',g.prototype.keydown)}(jQuery),+function(a){"use strict";function b(b,d){return this.each(function(){var e=a(this),f=e.data("bs.modal"),g=a.extend({},c.DEFAULTS,e.data(),"object"==typeof b&&b);f||e.data("bs.modal",f=new c(this,g)),"string"==typeof b?f[b](d):g.show&&f.show(d)})}var c=function(b,c){this.options=c,this.$body=a(document.body),this.$element=a(b),this.$backdrop=this.isShown=null,this.scrollbarWidth=0,this.options.remote&&this.$element.find(".modal-content").load(this.options.remote,a.proxy(function(){this.$element.trigger("loaded.bs.modal")},this))};c.VERSION="3.2.0",c.DEFAULTS={backdrop:!0,keyboard:!0,show:!0},c.prototype.toggle=function(a){return this.isShown?this.hide():this.show(a)},c.prototype.show=function(b){var c=this,d=a.Event("show.bs.modal",{relatedTarget:b});this.$element.trigger(d),this.isShown||d.isDefaultPrevented()||(this.isShown=!0,this.checkScrollbar(),this.$body.addClass("modal-open"),this.setScrollbar(),this.escape(),this.$element.on("click.dismiss.bs.modal",'[data-dismiss="modal"]',a.proxy(this.hide,this)),this.backdrop(function(){var d=a.support.transition&&c.$element.hasClass("fade");c.$element.parent().length||c.$element.appendTo(c.$body),c.$element.show().scrollTop(0),d&&c.$element[0].offsetWidth,c.$element.addClass("in").attr("aria-hidden",!1),c.enforceFocus();var e=a.Event("shown.bs.modal",{relatedTarget:b});d?c.$element.find(".modal-dialog").one("bsTransitionEnd",function(){c.$element.trigger("focus").trigger(e)}).emulateTransitionEnd(300):c.$element.trigger("focus").trigger(e)}))},c.prototype.hide=function(b){b&&b.preventDefault(),b=a.Event("hide.bs.modal"),this.$element.trigger(b),this.isShown&&!b.isDefaultPrevented()&&(this.isShown=!1,this.$body.removeClass("modal-open"),this.resetScrollbar(),this.escape(),a(document).off("focusin.bs.modal"),this.$element.removeClass("in").attr("aria-hidden",!0).off("click.dismiss.bs.modal"),a.support.transition&&this.$element.hasClass("fade")?this.$element.one("bsTransitionEnd",a.proxy(this.hideModal,this)).emulateTransitionEnd(300):this.hideModal())},c.prototype.enforceFocus=function(){a(document).off("focusin.bs.modal").on("focusin.bs.modal",a.proxy(function(a){this.$element[0]===a.target||this.$element.has(a.target).length||this.$element.trigger("focus")},this))},c.prototype.escape=function(){this.isShown&&this.options.keyboard?this.$element.on("keyup.dismiss.bs.modal",a.proxy(function(a){27==a.which&&this.hide()},this)):this.isShown||this.$element.off("keyup.dismiss.bs.modal")},c.prototype.hideModal=function(){var a=this;this.$element.hide(),this.backdrop(function(){a.$element.trigger("hidden.bs.modal")})},c.prototype.removeBackdrop=function(){this.$backdrop&&this.$backdrop.remove(),this.$backdrop=null},c.prototype.backdrop=function(b){var c=this,d=this.$element.hasClass("fade")?"fade":"";if(this.isShown&&this.options.backdrop){var e=a.support.transition&&d;if(this.$backdrop=a('<div class="modal-backdrop '+d+'" />').appendTo(this.$body),this.$element.on("click.dismiss.bs.modal",a.proxy(function(a){a.target===a.currentTarget&&("static"==this.options.backdrop?this.$element[0].focus.call(this.$element[0]):this.hide.call(this))},this)),e&&this.$backdrop[0].offsetWidth,this.$backdrop.addClass("in"),!b)return;e?this.$backdrop.one("bsTransitionEnd",b).emulateTransitionEnd(150):b()}else if(!this.isShown&&this.$backdrop){this.$backdrop.removeClass("in");var f=function(){c.removeBackdrop(),b&&b()};a.support.transition&&this.$element.hasClass("fade")?this.$backdrop.one("bsTransitionEnd",f).emulateTransitionEnd(150):f()}else b&&b()},c.prototype.checkScrollbar=function(){document.body.clientWidth>=window.innerWidth||(this.scrollbarWidth=this.scrollbarWidth||this.measureScrollbar())},c.prototype.setScrollbar=function(){var a=parseInt(this.$body.css("padding-right")||0,10);this.scrollbarWidth&&this.$body.css("padding-right",a+this.scrollbarWidth)},c.prototype.resetScrollbar=function(){this.$body.css("padding-right","")},c.prototype.measureScrollbar=function(){var a=document.createElement("div");a.className="modal-scrollbar-measure",this.$body.append(a);var b=a.offsetWidth-a.clientWidth;return this.$body[0].removeChild(a),b};var d=a.fn.modal;a.fn.modal=b,a.fn.modal.Constructor=c,a.fn.modal.noConflict=function(){return a.fn.modal=d,this},a(document).on("click.bs.modal.data-api",'[data-toggle="modal"]',function(c){var d=a(this),e=d.attr("href"),f=a(d.attr("data-target")||e&&e.replace(/.*(?=#[^\s]+$)/,"")),g=f.data("bs.modal")?"toggle":a.extend({remote:!/#/.test(e)&&e},f.data(),d.data());d.is("a")&&c.preventDefault(),f.one("show.bs.modal",function(a){a.isDefaultPrevented()||f.one("hidden.bs.modal",function(){d.is(":visible")&&d.trigger("focus")})}),b.call(f,g,this)})}(jQuery),+function(a){"use strict";function b(b){return this.each(function(){var d=a(this),e=d.data("bs.tooltip"),f="object"==typeof b&&b;(e||"destroy"!=b)&&(e||d.data("bs.tooltip",e=new c(this,f)),"string"==typeof b&&e[b]())})}var c=function(a,b){this.type=this.options=this.enabled=this.timeout=this.hoverState=this.$element=null,this.init("tooltip",a,b)};c.VERSION="3.2.0",c.DEFAULTS={animation:!0,placement:"top",selector:!1,template:'<div class="tooltip" role="tooltip"><div class="tooltip-arrow"></div><div class="tooltip-inner"></div></div>',trigger:"hover focus",title:"",delay:0,html:!1,container:!1,viewport:{selector:"body",padding:0}},c.prototype.init=function(b,c,d){this.enabled=!0,this.type=b,this.$element=a(c),this.options=this.getOptions(d),this.$viewport=this.options.viewport&&a(this.options.viewport.selector||this.options.viewport);for(var e=this.options.trigger.split(" "),f=e.length;f--;){var g=e[f];if("click"==g)this.$element.on("click."+this.type,this.options.selector,a.proxy(this.toggle,this));else if("manual"!=g){var h="hover"==g?"mouseenter":"focusin",i="hover"==g?"mouseleave":"focusout";this.$element.on(h+"."+this.type,this.options.selector,a.proxy(this.enter,this)),this.$element.on(i+"."+this.type,this.options.selector,a.proxy(this.leave,this))}}this.options.selector?this._options=a.extend({},this.options,{trigger:"manual",selector:""}):this.fixTitle()},c.prototype.getDefaults=function(){return c.DEFAULTS},c.prototype.getOptions=function(b){return b=a.extend({},this.getDefaults(),this.$element.data(),b),b.delay&&"number"==typeof b.delay&&(b.delay={show:b.delay,hide:b.delay}),b},c.prototype.getDelegateOptions=function(){var b={},c=this.getDefaults();return this._options&&a.each(this._options,function(a,d){c[a]!=d&&(b[a]=d)}),b},c.prototype.enter=function(b){var c=b instanceof this.constructor?b:a(b.currentTarget).data("bs."+this.type);return c||(c=new this.constructor(b.currentTarget,this.getDelegateOptions()),a(b.currentTarget).data("bs."+this.type,c)),clearTimeout(c.timeout),c.hoverState="in",c.options.delay&&c.options.delay.show?void(c.timeout=setTimeout(function(){"in"==c.hoverState&&c.show()},c.options.delay.show)):c.show()},c.prototype.leave=function(b){var c=b instanceof this.constructor?b:a(b.currentTarget).data("bs."+this.type);return c||(c=new this.constructor(b.currentTarget,this.getDelegateOptions()),a(b.currentTarget).data("bs."+this.type,c)),clearTimeout(c.timeout),c.hoverState="out",c.options.delay&&c.options.delay.hide?void(c.timeout=setTimeout(function(){"out"==c.hoverState&&c.hide()},c.options.delay.hide)):c.hide()},c.prototype.show=function(){var b=a.Event("show.bs."+this.type);if(this.hasContent()&&this.enabled){this.$element.trigger(b);var c=a.contains(document.documentElement,this.$element[0]);if(b.isDefaultPrevented()||!c)return;var d=this,e=this.tip(),f=this.getUID(this.type);this.setContent(),e.attr("id",f),this.$element.attr("aria-describedby",f),this.options.animation&&e.addClass("fade");var g="function"==typeof this.options.placement?this.options.placement.call(this,e[0],this.$element[0]):this.options.placement,h=/\s?auto?\s?/i,i=h.test(g);i&&(g=g.replace(h,"")||"top"),e.detach().css({top:0,left:0,display:"block"}).addClass(g).data("bs."+this.type,this),this.options.container?e.appendTo(this.options.container):e.insertAfter(this.$element);var j=this.getPosition(),k=e[0].offsetWidth,l=e[0].offsetHeight;if(i){var m=g,n=this.$element.parent(),o=this.getPosition(n);g="bottom"==g&&j.top+j.height+l-o.scroll>o.height?"top":"top"==g&&j.top-o.scroll-l<0?"bottom":"right"==g&&j.right+k>o.width?"left":"left"==g&&j.left-k<o.left?"right":g,e.removeClass(m).addClass(g)}var p=this.getCalculatedOffset(g,j,k,l);this.applyPlacement(p,g);var q=function(){d.$element.trigger("shown.bs."+d.type),d.hoverState=null};a.support.transition&&this.$tip.hasClass("fade")?e.one("bsTransitionEnd",q).emulateTransitionEnd(150):q()}},c.prototype.applyPlacement=function(b,c){var d=this.tip(),e=d[0].offsetWidth,f=d[0].offsetHeight,g=parseInt(d.css("margin-top"),10),h=parseInt(d.css("margin-left"),10);isNaN(g)&&(g=0),isNaN(h)&&(h=0),b.top=b.top+g,b.left=b.left+h,a.offset.setOffset(d[0],a.extend({using:function(a){d.css({top:Math.round(a.top),left:Math.round(a.left)})}},b),0),d.addClass("in");var i=d[0].offsetWidth,j=d[0].offsetHeight;"top"==c&&j!=f&&(b.top=b.top+f-j);var k=this.getViewportAdjustedDelta(c,b,i,j);k.left?b.left+=k.left:b.top+=k.top;var l=k.left?2*k.left-e+i:2*k.top-f+j,m=k.left?"left":"top",n=k.left?"offsetWidth":"offsetHeight";d.offset(b),this.replaceArrow(l,d[0][n],m)},c.prototype.replaceArrow=function(a,b,c){this.arrow().css(c,a?50*(1-a/b)+"%":"")},c.prototype.setContent=function(){var a=this.tip(),b=this.getTitle();a.find(".tooltip-inner")[this.options.html?"html":"text"](b),a.removeClass("fade in top bottom left right")},c.prototype.hide=function(){function b(){"in"!=c.hoverState&&d.detach(),c.$element.trigger("hidden.bs."+c.type)}var c=this,d=this.tip(),e=a.Event("hide.bs."+this.type);return this.$element.removeAttr("aria-describedby"),this.$element.trigger(e),e.isDefaultPrevented()?void 0:(d.removeClass("in"),a.support.transition&&this.$tip.hasClass("fade")?d.one("bsTransitionEnd",b).emulateTransitionEnd(150):b(),this.hoverState=null,this)},c.prototype.fixTitle=function(){var a=this.$element;(a.attr("title")||"string"!=typeof a.attr("data-original-title"))&&a.attr("data-original-title",a.attr("title")||"").attr("title","")},c.prototype.hasContent=function(){return this.getTitle()},c.prototype.getPosition=function(b){b=b||this.$element;var c=b[0],d="BODY"==c.tagName;return a.extend({},"function"==typeof c.getBoundingClientRect?c.getBoundingClientRect():null,{scroll:d?document.documentElement.scrollTop||document.body.scrollTop:b.scrollTop(),width:d?a(window).width():b.outerWidth(),height:d?a(window).height():b.outerHeight()},d?{top:0,left:0}:b.offset())},c.prototype.getCalculatedOffset=function(a,b,c,d){return"bottom"==a?{top:b.top+b.height,left:b.left+b.width/2-c/2}:"top"==a?{top:b.top-d,left:b.left+b.width/2-c/2}:"left"==a?{top:b.top+b.height/2-d/2,left:b.left-c}:{top:b.top+b.height/2-d/2,left:b.left+b.width}},c.prototype.getViewportAdjustedDelta=function(a,b,c,d){var e={top:0,left:0};if(!this.$viewport)return e;var f=this.options.viewport&&this.options.viewport.padding||0,g=this.getPosition(this.$viewport);if(/right|left/.test(a)){var h=b.top-f-g.scroll,i=b.top+f-g.scroll+d;h<g.top?e.top=g.top-h:i>g.top+g.height&&(e.top=g.top+g.height-i)}else{var j=b.left-f,k=b.left+f+c;j<g.left?e.left=g.left-j:k>g.width&&(e.left=g.left+g.width-k)}return e},c.prototype.getTitle=function(){var a,b=this.$element,c=this.options;return a=b.attr("data-original-title")||("function"==typeof c.title?c.title.call(b[0]):c.title)},c.prototype.getUID=function(a){do a+=~~(1e6*Math.random());while(document.getElementById(a));return a},c.prototype.tip=function(){return this.$tip=this.$tip||a(this.options.template)},c.prototype.arrow=function(){return this.$arrow=this.$arrow||this.tip().find(".tooltip-arrow")},c.prototype.validate=function(){this.$element[0].parentNode||(this.hide(),this.$element=null,this.options=null)},c.prototype.enable=function(){this.enabled=!0},c.prototype.disable=function(){this.enabled=!1},c.prototype.toggleEnabled=function(){this.enabled=!this.enabled},c.prototype.toggle=function(b){var c=this;b&&(c=a(b.currentTarget).data("bs."+this.type),c||(c=new this.constructor(b.currentTarget,this.getDelegateOptions()),a(b.currentTarget).data("bs."+this.type,c))),c.tip().hasClass("in")?c.leave(c):c.enter(c)},c.prototype.destroy=function(){clearTimeout(this.timeout),this.hide().$element.off("."+this.type).removeData("bs."+this.type)};var d=a.fn.tooltip;a.fn.tooltip=b,a.fn.tooltip.Constructor=c,a.fn.tooltip.noConflict=function(){return a.fn.tooltip=d,this}}(jQuery),+function(a){"use strict";function b(b){return this.each(function(){var d=a(this),e=d.data("bs.popover"),f="object"==typeof b&&b;(e||"destroy"!=b)&&(e||d.data("bs.popover",e=new c(this,f)),"string"==typeof b&&e[b]())})}var c=function(a,b){this.init("popover",a,b)};if(!a.fn.tooltip)throw new Error("Popover requires tooltip.js");c.VERSION="3.2.0",c.DEFAULTS=a.extend({},a.fn.tooltip.Constructor.DEFAULTS,{placement:"right",trigger:"click",content:"",template:'<div class="popover" role="tooltip"><div class="arrow"></div><h3 class="popover-title"></h3><div class="popover-content"></div></div>'}),c.prototype=a.extend({},a.fn.tooltip.Constructor.prototype),c.prototype.constructor=c,c.prototype.getDefaults=function(){return c.DEFAULTS},c.prototype.setContent=function(){var a=this.tip(),b=this.getTitle(),c=this.getContent();a.find(".popover-title")[this.options.html?"html":"text"](b),a.find(".popover-content").empty()[this.options.html?"string"==typeof c?"html":"append":"text"](c),a.removeClass("fade top bottom left right in"),a.find(".popover-title").html()||a.find(".popover-title").hide()},c.prototype.hasContent=function(){return this.getTitle()||this.getContent()},c.prototype.getContent=function(){var a=this.$element,b=this.options;return a.attr("data-content")||("function"==typeof b.content?b.content.call(a[0]):b.content)},c.prototype.arrow=function(){return this.$arrow=this.$arrow||this.tip().find(".arrow")},c.prototype.tip=function(){return this.$tip||(this.$tip=a(this.options.template)),this.$tip};var d=a.fn.popover;a.fn.popover=b,a.fn.popover.Constructor=c,a.fn.popover.noConflict=function(){return a.fn.popover=d,this}}(jQuery),+function(a){"use strict";function b(c,d){var e=a.proxy(this.process,this);this.$body=a("body"),this.$scrollElement=a(a(c).is("body")?window:c),this.options=a.extend({},b.DEFAULTS,d),this.selector=(this.options.target||"")+" .nav li > a",this.offsets=[],this.targets=[],this.activeTarget=null,this.scrollHeight=0,this.$scrollElement.on("scroll.bs.scrollspy",e),this.refresh(),this.process()}function c(c){return this.each(function(){var d=a(this),e=d.data("bs.scrollspy"),f="object"==typeof c&&c;e||d.data("bs.scrollspy",e=new b(this,f)),"string"==typeof c&&e[c]()})}b.VERSION="3.2.0",b.DEFAULTS={offset:10},b.prototype.getScrollHeight=function(){return this.$scrollElement[0].scrollHeight||Math.max(this.$body[0].scrollHeight,document.documentElement.scrollHeight)},b.prototype.refresh=function(){var b="offset",c=0;a.isWindow(this.$scrollElement[0])||(b="position",c=this.$scrollElement.scrollTop()),this.offsets=[],this.targets=[],this.scrollHeight=this.getScrollHeight();var d=this;this.$body.find(this.selector).map(function(){var d=a(this),e=d.data("target")||d.attr("href"),f=/^#./.test(e)&&a(e);return f&&f.length&&f.is(":visible")&&[[f[b]().top+c,e]]||null}).sort(function(a,b){return a[0]-b[0]}).each(function(){d.offsets.push(this[0]),d.targets.push(this[1])})},b.prototype.process=function(){var a,b=this.$scrollElement.scrollTop()+this.options.offset,c=this.getScrollHeight(),d=this.options.offset+c-this.$scrollElement.height(),e=this.offsets,f=this.targets,g=this.activeTarget;if(this.scrollHeight!=c&&this.refresh(),b>=d)return g!=(a=f[f.length-1])&&this.activate(a);if(g&&b<=e[0])return g!=(a=f[0])&&this.activate(a);for(a=e.length;a--;)g!=f[a]&&b>=e[a]&&(!e[a+1]||b<=e[a+1])&&this.activate(f[a])},b.prototype.activate=function(b){this.activeTarget=b,a(this.selector).parentsUntil(this.options.target,".active").removeClass("active");var c=this.selector+'[data-target="'+b+'"],'+this.selector+'[href="'+b+'"]',d=a(c).parents("li").addClass("active");d.parent(".dropdown-menu").length&&(d=d.closest("li.dropdown").addClass("active")),d.trigger("activate.bs.scrollspy")};var d=a.fn.scrollspy;a.fn.scrollspy=c,a.fn.scrollspy.Constructor=b,a.fn.scrollspy.noConflict=function(){return a.fn.scrollspy=d,this},a(window).on("load.bs.scrollspy.data-api",function(){a('[data-spy="scroll"]').each(function(){var b=a(this);c.call(b,b.data())})})}(jQuery),+function(a){"use strict";function b(b){return this.each(function(){var d=a(this),e=d.data("bs.tab");e||d.data("bs.tab",e=new c(this)),"string"==typeof b&&e[b]()})}var c=function(b){this.element=a(b)};c.VERSION="3.2.0",c.prototype.show=function(){var b=this.element,c=b.closest("ul:not(.dropdown-menu)"),d=b.data("target");if(d||(d=b.attr("href"),d=d&&d.replace(/.*(?=#[^\s]*$)/,"")),!b.parent("li").hasClass("active")){var e=c.find(".active:last a")[0],f=a.Event("show.bs.tab",{relatedTarget:e});if(b.trigger(f),!f.isDefaultPrevented()){var g=a(d);this.activate(b.closest("li"),c),this.activate(g,g.parent(),function(){b.trigger({type:"shown.bs.tab",relatedTarget:e})})